on f686999 help sign in
.agents/skills/builtin-skills/SKILL.md+15−18
since splitsnapshots
unifiedsplit
@@ -1,9 +1,6 @@
1---
1---
2name: builtin-skills
2name: builtin-skills
3−description:
4− Use when creating a new builtin skill for Crush, editing an existing builtin
3+description: Use when creating a new builtin skill for Crush, editing an existing builtin skill (internal/skills/builtin/), or when the user needs to understand how the embedded skill system works.
5− skill (internal/skills/builtin/), or when the user needs to understand how the
6− embedded skill system works.
7---
4---
8
5
9# Builtin Skills
6# Builtin Skills
@@ -16,27 +13,27 @@ These are always available without user configuration.
16- Each skill lives in `internal/skills/builtin/<skill-name>/SKILL.md`.
13- Each skill lives in `internal/skills/builtin/<skill-name>/SKILL.md`.
17- The tree is embedded at compile time via `//go:embed builtin/*` in
14- The tree is embedded at compile time via `//go:embed builtin/*` in
18 `internal/skills/embed.go`.
15 `internal/skills/embed.go`.
19−- `DiscoverBuiltin()` walks the embedded FS, parses each `SKILL.md`, and sets
16+- `DiscoverBuiltin()` walks the embedded FS, parses each `SKILL.md`, and
20− paths with the `crush://skills/` prefix (e.g., `crush://skills/jq/SKILL.md`).
17+ sets paths with the `crush://skills/` prefix (e.g.,
18+ `crush://skills/jq/SKILL.md`).
21- The View tool resolves `crush://` paths from the embedded FS, not disk.
19- The View tool resolves `crush://` paths from the embedded FS, not disk.
22−- User skills with the same name override builtins (last occurrence wins in
20+- User skills with the same name override builtins (last occurrence wins
23− `Deduplicate()`).
21+ in `Deduplicate()`).
24
22
25## Adding a New Builtin Skill
23## Adding a New Builtin Skill
26
24
27−1. Create `internal/skills/builtin/<skill-name>/SKILL.md` with YAML frontmatter
25+1. Create `internal/skills/builtin/<skill-name>/SKILL.md` with YAML
28− (`name`, `description`) and markdown instructions. The directory name must
26+ frontmatter (`name`, `description`) and markdown instructions. The
29− match the `name` field.
27+ directory name must match the `name` field.
30−2. No extra wiring needed — `//go:embed builtin/*` picks up new directories
28+2. No extra wiring needed — `//go:embed builtin/*` picks up new
31− automatically.
29+ directories automatically.
323. Add a test assertion in `TestDiscoverBuiltin` in
303. Add a test assertion in `TestDiscoverBuiltin` in
33 `internal/skills/skills_test.go` to verify discovery.
31 `internal/skills/skills_test.go` to verify discovery.
344. Build and test: `go build . && go test ./internal/skills/...`
324. Build and test: `go build . && go test ./internal/skills/...`
35
33
36## Existing Builtin Skills
34## Existing Builtin Skills
37
35
38−| Skill | Directory | Description |
36+| Skill | Directory | Description |
39−| -------------- | ----------------------- | ------------------------------------------ |
37+|-------|-----------|-------------|
40−| `crush-config` | `builtin/crush-config/` | Crush configuration help |
38+| `crush-config` | `builtin/crush-config/` | Crush configuration help |
41−| `crush-hooks` | `builtin/crush-hooks/` | Authoring, configuring and debugging hooks |
42−| `jq` | `builtin/jq/` | jq JSON processor usage guide |
39+| `jq` | `builtin/jq/` | jq JSON processor usage guide |
.agents/skills/shell-builtins/SKILL.md+13−34
@@ -11,59 +11,38 @@ emulation. Commands can be intercepted before they reach the OS by adding
11
11
12## How Builtins Work
12## How Builtins Work
13
13
14−Builtins live in `builtinHandler()` in `internal/shell/run.go`. This is an
14+Builtins live in `Shell.builtinHandler()` in `internal/shell/shell.go`.
15−`interp.ExecHandlerFunc` middleware registered in `standardHandlers()`
15+This is an `interp.ExecHandlerFunc` middleware registered in
16−**before** the block handler, so builtins run even for commands that would
16+`execHandlers()` **before** the block handler, so builtins run even for
17−otherwise be blocked. The same handler chain is shared by the stateful
17+commands that would otherwise be blocked.
18−`Shell` type and the stateless `Run` entrypoint used by the hook runner,
19−so builtins are available identically in the `bash` tool and in hooks.
20
18
21The handler is a switch on `args[0]`. Each case either handles the command
19The handler is a switch on `args[0]`. Each case either handles the command
22inline or delegates to a helper function.
20inline or delegates to a helper function.
23
21
24## Adding a New Builtin
22## Adding a New Builtin
25
23
26−1. **Add the case** to the switch in `builtinHandler()` in `run.go`.
24+1. **Add the case** to the switch in `builtinHandler()` in `shell.go`.
272. **Get I/O from the handler context**, not from `os.Stdin`/`os.Stdout`.
252. **Get I/O from the handler context**, not from `os.Stdin`/`os.Stdout`.
28 This ensures the builtin works with pipes and redirections:
26 This ensures the builtin works with pipes and redirections:
29 ```go
27 ```go
30 case "mycommand":
28 case "mycommand":
31 hc := interp.HandlerCtx(ctx)
29 hc := interp.HandlerCtx(ctx)
32− return handleMyCommand(ctx, args, hc.Stdin, hc.Stdout, hc.Stderr)
30+ return handleMyCommand(args, hc.Stdin, hc.Stdout, hc.Stderr)
33 ```
31 ```
343. **Implement the handler** in its own file (e.g.,
323. **Implement the handler** in its own file (e.g.,
35− `internal/shell/mycommand.go`). The function signature must accept a
33+ `internal/shell/mycommand.go`). The function signature should accept
36− `context.Context` as the first parameter, plus args, stdin, stdout, and
34+ args, stdin, stdout, and stderr:
37− stderr:
38 ```go
35 ```go
39− func handleMyCommand(ctx context.Context, args []string, stdin io.Reader, stdout, stderr io.Writer) error {
36+ func handleMyCommand(args []string, stdin io.Reader, stdout, stderr io.Writer) error {
40 // args[0] is the command name ("mycommand"), args[1:] are arguments.
37 // args[0] is the command name ("mycommand"), args[1:] are arguments.
41 // Write output to stdout, errors to stderr.
38 // Write output to stdout, errors to stderr.
42 // Return nil on success, or interp.ExitStatus(n) for non-zero exit codes.
39 // Return nil on success, or interp.ExitStatus(n) for non-zero exit codes.
43 }
40 }
44 ```
41 ```
45−4. **Poll `ctx` in every unbounded loop.** Builtins that iterate over
46− input, emit values in a generator-style loop, or do any other work
47− that can exceed a few milliseconds MUST check `ctx.Err()` on each
48− iteration and return it verbatim when non-nil. Hook timeouts rely on
49− this: an unbounded builtin that never polls ctx cannot be interrupted
50− by a hook's `timeout_sec`, and the hook runner will have to abandon
51− the goroutine (see `internal/hooks/runner.go`). Returning `ctx.Err()`
52− (not `interp.ExitStatus(n)`) lets callers distinguish "command exited
53− non-zero" from "we ran out of time".
54− ```go
55− for _, item := range items {
56− if err := ctx.Err(); err != nil {
57− return err
58− }
59− // ... process item
60− }
61− ```
62−5. **Return values**: return `nil` for success, `interp.ExitStatus(n)` for
42+4. **Return values**: return `nil` for success, `interp.ExitStatus(n)` for
63− non-zero exit codes, or `ctx.Err()` on cancellation. Write error
64− messages to `stderr` before returning.
43+ non-zero exit codes. Write error messages to `stderr` before returning.
65−6. **No extra wiring needed** — `builtinHandler()` is already registered
44+5. **No extra wiring needed** — `builtinHandler()` is already registered
66− in `standardHandlers()`.
45+ in `execHandlers()`.
67
46
68## Existing Builtins
47## Existing Builtins
69
48
.envrcdeleted−1
@@ -1 +0,0 @@
1−use flake
.github/cla-signatures.json−480
@@ -1615,486 +1615,6 @@
1615 "created_at": "2026-04-23T12:33:57Z",
1615 "created_at": "2026-04-23T12:33:57Z",
1616 "repoId": 987670088,
1616 "repoId": 987670088,
1617 "pullRequestNo": 2688
1617 "pullRequestNo": 2688
1618− },
1619− {
1620− "name": "georgeglarson",
1621− "id": 744063,
1622− "comment_id": 4341592963,
1623− "created_at": "2026-04-29T07:08:48Z",
1624− "repoId": 987670088,
1625− "pullRequestNo": 2749
1626− },
1627− {
1628− "name": "vorticalbox",
1629− "id": 10886065,
1630− "comment_id": 4344669740,
1631− "created_at": "2026-04-29T14:29:35Z",
1632− "repoId": 987670088,
1633− "pullRequestNo": 2751
1634− },
1635− {
1636− "name": "lloydzhou",
1637− "id": 1826685,
1638− "comment_id": 4346011097,
1639− "created_at": "2026-04-29T17:27:37Z",
1640− "repoId": 987670088,
1641− "pullRequestNo": 2752
1642− },
1643− {
1644− "name": "carlosgrillet",
1645− "id": 13719979,
1646− "comment_id": 4351020450,
1647− "created_at": "2026-04-30T08:48:52Z",
1648− "repoId": 987670088,
1649− "pullRequestNo": 2759
1650− },
1651− {
1652− "name": "SAY-5",
1653− "id": 240962040,
1654− "comment_id": 4357189565,
1655− "created_at": "2026-05-01T01:00:00Z",
1656− "repoId": 987670088,
1657− "pullRequestNo": 2691
1658− },
1659− {
1660− "name": "mkaaad",
1661− "id": 119158371,
1662− "comment_id": 4358493210,
1663− "created_at": "2026-05-01T08:25:06Z",
1664− "repoId": 987670088,
1665− "pullRequestNo": 2772
1666− },
1667− {
1668− "name": "pragneshbagary",
1669− "id": 41118746,
1670− "comment_id": 4359152162,
1671− "created_at": "2026-05-01T11:54:16Z",
1672− "repoId": 987670088,
1673− "pullRequestNo": 2773
1674− },
1675− {
1676− "name": "somjik-api",
1677− "id": 47082582,
1678− "comment_id": 4364741275,
1679− "created_at": "2026-05-02T21:17:55Z",
1680− "repoId": 987670088,
1681− "pullRequestNo": 2783
1682− },
1683− {
1684− "name": "ilgax",
1685− "id": 79969769,
1686− "comment_id": 4367211073,
1687− "created_at": "2026-05-03T21:25:46Z",
1688− "repoId": 987670088,
1689− "pullRequestNo": 2790
1690− },
1691− {
1692− "name": "ardevd",
1693− "id": 366855,
1694− "comment_id": 4377260996,
1695− "created_at": "2026-05-05T07:22:31Z",
1696− "repoId": 987670088,
1697− "pullRequestNo": 2801
1698− },
1699− {
1700− "name": "yeonuk-hwang",
1701− "id": 54208214,
1702− "comment_id": 4407666773,
1703− "created_at": "2026-05-08T15:33:03Z",
1704− "repoId": 987670088,
1705− "pullRequestNo": 2836
1706− },
1707− {
1708− "name": "sven2718",
1709− "id": 4741888,
1710− "comment_id": 4410098922,
1711− "created_at": "2026-05-08T21:47:18Z",
1712− "repoId": 987670088,
1713− "pullRequestNo": 2840
1714− },
1715− {
1716− "name": "acheong08",
1717− "id": 36258159,
1718− "comment_id": 4410600427,
1719− "created_at": "2026-05-08T23:37:33Z",
1720− "repoId": 987670088,
1721− "pullRequestNo": 2842
1722− },
1723− {
1724− "name": "smeinecke",
1725− "id": 7316652,
1726− "comment_id": 4411012852,
1727− "created_at": "2026-05-09T01:47:08Z",
1728− "repoId": 987670088,
1729− "pullRequestNo": 2844
1730− },
1731− {
1732− "name": "jan-xyz",
1733− "id": 5249233,
1734− "comment_id": 4432309551,
1735− "created_at": "2026-05-12T15:48:38Z",
1736− "repoId": 987670088,
1737− "pullRequestNo": 2886
1738− },
1739− {
1740− "name": "johnjansen",
1741− "id": 105938,
1742− "comment_id": 4434007350,
1743− "created_at": "2026-05-12T19:28:01Z",
1744− "repoId": 987670088,
1745− "pullRequestNo": 2887
1746− },
1747− {
1748− "name": "pablodz",
1749− "id": 28235457,
1750− "comment_id": 4435307961,
1751− "created_at": "2026-05-12T22:25:09Z",
1752− "repoId": 987670088,
1753− "pullRequestNo": 2892
1754− },
1755− {
1756− "name": "akhenakh",
1757− "id": 218430,
1758− "comment_id": 4446905473,
1759− "created_at": "2026-05-14T02:28:13Z",
1760− "repoId": 987670088,
1761− "pullRequestNo": 2912
1762− },
1763− {
1764− "name": "leonardoaraujosantos",
1765− "id": 898383,
1766− "comment_id": 3166308642,
1767− "created_at": "2025-08-08T01:40:17Z",
1768− "repoId": 987670088,
1769− "pullRequestNo": 644
1770− },
1771− {
1772− "name": "yookibooki",
1773− "id": 61198899,
1774− "comment_id": 4459665029,
1775− "created_at": "2026-05-15T12:16:26Z",
1776− "repoId": 987670088,
1777− "pullRequestNo": 2922
1778− },
1779− {
1780− "name": "CatMe0w",
1781− "id": 7774491,
1782− "comment_id": 4461676513,
1783− "created_at": "2026-05-15T16:58:04Z",
1784− "repoId": 987670088,
1785− "pullRequestNo": 2925
1786− },
1787− {
1788− "name": "Broderick-Westrope",
1789− "id": 55474351,
1790− "comment_id": 4469173328,
1791− "created_at": "2026-05-17T03:35:13Z",
1792− "repoId": 987670088,
1793− "pullRequestNo": 2937
1794− },
1795− {
1796− "name": "processtrader",
1797− "id": 232431073,
1798− "comment_id": 4480941961,
1799− "created_at": "2026-05-18T18:58:31Z",
1800− "repoId": 987670088,
1801− "pullRequestNo": 2950
1802− },
1803− {
1804− "name": "dcu",
1805− "id": 73729,
1806− "comment_id": 4484181213,
1807− "created_at": "2026-05-19T03:37:32Z",
1808− "repoId": 987670088,
1809− "pullRequestNo": 2954
1810− },
1811− {
1812− "name": "mei2jun1",
1813− "id": 285962643,
1814− "comment_id": 4495440988,
1815− "created_at": "2026-05-20T06:53:43Z",
1816− "repoId": 987670088,
1817− "pullRequestNo": 2964
1818− },
1819− {
1820− "name": "g2mt",
1821− "id": 166577174,
1822− "comment_id": 4513096006,
1823− "created_at": "2026-05-21T21:56:14Z",
1824− "repoId": 987670088,
1825− "pullRequestNo": 2979
1826− },
1827− {
1828− "name": "Ricardo-M-L",
1829− "id": 69202550,
1830− "comment_id": 4514494248,
1831− "created_at": "2026-05-22T02:37:08Z",
1832− "repoId": 987670088,
1833− "pullRequestNo": 2847
1834− },
1835− {
1836− "name": "Muttaqin86",
1837− "id": 69788027,
1838− "comment_id": 4520181780,
1839− "created_at": "2026-05-22T15:46:32Z",
1840− "repoId": 987670088,
1841− "pullRequestNo": 2984
1842− },
1843− {
1844− "name": "officialasishkumar",
1845− "id": 87874775,
1846− "comment_id": 4527874300,
1847− "created_at": "2026-05-24T08:44:14Z",
1848− "repoId": 987670088,
1849− "pullRequestNo": 2995
1850− },
1851− {
1852− "name": "yhyu13",
1853− "id": 19365678,
1854− "comment_id": 4528076561,
1855− "created_at": "2026-05-24T10:19:27Z",
1856− "repoId": 987670088,
1857− "pullRequestNo": 2996
1858− },
1859− {
1860− "name": "xulongzhe",
1861− "id": 10559793,
1862− "comment_id": 4569454380,
1863− "created_at": "2026-05-29T00:39:36Z",
1864− "repoId": 987670088,
1865− "pullRequestNo": 3036
1866− },
1867− {
1868− "name": "ardi1s",
1869− "id": 200318875,
1870− "comment_id": 4589172224,
1871− "created_at": "2026-06-01T02:48:53Z",
1872− "repoId": 987670088,
1873− "pullRequestNo": 3049
1874− },
1875− {
1876− "name": "cak3ninja",
1877− "id": 4338875,
1878− "comment_id": 4596570813,
1879− "created_at": "2026-06-01T21:14:16Z",
1880− "repoId": 987670088,
1881− "pullRequestNo": 3059
1882− },
1883− {
1884− "name": "GroovyCarrot",
1885− "id": 5589906,
1886− "comment_id": 4623915928,
1887− "created_at": "2026-06-04T16:01:30Z",
1888− "repoId": 987670088,
1889− "pullRequestNo": 3076
1890− },
1891− {
1892− "name": "CnsMaple",
1893− "id": 92523839,
1894− "comment_id": 4628808493,
1895− "created_at": "2026-06-05T06:24:00Z",
1896− "repoId": 987670088,
1897− "pullRequestNo": 3080
1898− },
1899− {
1900− "name": "yuseferi",
1901− "id": 1736832,
1902− "comment_id": 4548802420,
1903− "created_at": "2026-05-26T21:00:36Z",
1904− "repoId": 987670088,
1905− "pullRequestNo": 3019
1906− },
1907− {
1908− "name": "gmit3",
1909− "id": 26192089,
1910− "comment_id": 4651029942,
1911− "created_at": "2026-06-08T16:18:06Z",
1912− "repoId": 987670088,
1913− "pullRequestNo": 3096
1914− },
1915− {
1916− "name": "brianjlandau",
1917− "id": 3122,
1918− "comment_id": 4654867087,
1919− "created_at": "2026-06-09T00:37:02Z",
1920− "repoId": 987670088,
1921− "pullRequestNo": 3098
1922− },
1923− {
1924− "name": "kypkk",
1925− "id": 68454243,
1926− "comment_id": 4687904764,
1927− "created_at": "2026-06-12T05:55:06Z",
1928− "repoId": 987670088,
1929− "pullRequestNo": 3111
1930− },
1931− {
1932− "name": "warmjademe",
1933− "id": 257661268,
1934− "comment_id": 4720070206,
1935− "created_at": "2026-06-16T14:48:33Z",
1936− "repoId": 987670088,
1937− "pullRequestNo": 3131
1938− },
1939− {
1940− "name": "warmjademe",
1941− "id": 257661268,
1942− "comment_id": 4720177856,
1943− "created_at": "2026-06-16T14:58:33Z",
1944− "repoId": 987670088,
1945− "pullRequestNo": 3131
1946− },
1947− {
1948− "name": "jialudev",
1949− "id": 39230796,
1950− "comment_id": 4725593255,
1951− "created_at": "2026-06-17T03:26:00Z",
1952− "repoId": 987670088,
1953− "pullRequestNo": 3137
1954− },
1955− {
1956− "name": "knight110001",
1957− "id": 21118983,
1958− "comment_id": 4741392218,
1959− "created_at": "2026-06-18T11:16:02Z",
1960− "repoId": 987670088,
1961− "pullRequestNo": 3140
1962− },
1963− {
1964− "name": "ken-jo",
1965− "id": 42824840,
1966− "comment_id": 4755333253,
1967− "created_at": "2026-06-19T22:56:55Z",
1968− "repoId": 987670088,
1969− "pullRequestNo": 3158
1970− },
1971− {
1972− "name": "xorangekiller",
1973− "id": 5561926,
1974− "comment_id": 4758885426,
1975− "created_at": "2026-06-20T16:00:01Z",
1976− "repoId": 987670088,
1977− "pullRequestNo": 3163
1978− },
1979− {
1980− "name": "sithglan",
1981− "id": 1595655,
1982− "comment_id": 4761251782,
1983− "created_at": "2026-06-21T07:28:19Z",
1984− "repoId": 987670088,
1985− "pullRequestNo": 3168
1986− },
1987− {
1988− "name": "macro-ss",
1989− "id": 59944291,
1990− "comment_id": 4729268228,
1991− "created_at": "2026-06-17T11:09:03Z",
1992− "repoId": 987670088,
1993− "pullRequestNo": 3140
1994− },
1995− {
1996− "name": "andrinoff",
1997− "id": 175145001,
1998− "comment_id": 4772633817,
1999− "created_at": "2026-06-22T20:13:54Z",
2000− "repoId": 987670088,
2001− "pullRequestNo": 3184
2002− },
2003− {
2004− "name": "calyptobai",
2005− "id": 111788964,
2006− "comment_id": 4774213287,
2007− "created_at": "2026-06-22T23:56:09Z",
2008− "repoId": 987670088,
2009− "pullRequestNo": 3189
2010− },
2011− {
2012− "name": "truffle-dev",
2013− "id": 260125384,
2014− "comment_id": 4783906418,
2015− "created_at": "2026-06-23T22:07:28Z",
2016− "repoId": 987670088,
2017− "pullRequestNo": 3195
2018− },
2019− {
2020− "name": "chardoncs",
2021− "id": 44740171,
2022− "comment_id": 4786221902,
2023− "created_at": "2026-06-24T05:36:39Z",
2024− "repoId": 987670088,
2025− "pullRequestNo": 3197
2026− },
2027− {
2028− "name": "notno",
2029− "id": 3149184,
2030− "comment_id": 4793889316,
2031− "created_at": "2026-06-24T21:37:51Z",
2032− "repoId": 987670088,
2033− "pullRequestNo": 3202
2034− },
2035− {
2036− "name": "vismaytiwari",
2037− "id": 89745751,
2038− "comment_id": 4797847556,
2039− "created_at": "2026-06-25T09:38:55Z",
2040− "repoId": 987670088,
2041− "pullRequestNo": 3205
2042− },
2043− {
2044− "name": "feizhuzheng",
2045− "id": 130743669,
2046− "comment_id": 4809880810,
2047− "created_at": "2026-06-26T13:09:43Z",
2048− "repoId": 987670088,
2049− "pullRequestNo": 3211
2050− },
2051− {
2052− "name": "syf2211",
2053− "id": 132282304,
2054− "comment_id": 4817246953,
2055− "created_at": "2026-06-27T11:44:54Z",
2056− "repoId": 987670088,
2057− "pullRequestNo": 3221
2058− },
2059− {
2060− "name": "EduardF1",
2061− "id": 50618110,
2062− "comment_id": 4818319813,
2063− "created_at": "2026-06-27T14:15:50Z",
2064− "repoId": 987670088,
2065− "pullRequestNo": 3133
2066− },
2067− {
2068− "name": "sablea",
2069− "id": 52388727,
2070− "comment_id": 4851979164,
2071− "created_at": "2026-07-01T08:13:03Z",
2072− "repoId": 987670088,
2073− "pullRequestNo": 3235
2074− },
2075− {
2076− "name": "Osamaali313",
2077− "id": 86572800,
2078− "comment_id": 4870561813,
2079− "created_at": "2026-07-02T21:19:15Z",
2080− "repoId": 987670088,
2081− "pullRequestNo": 3244
2082− },
2083− {
2084− "name": "lockp111",
2085− "id": 28383475,
2086− "comment_id": 4878248994,
2087− "created_at": "2026-07-03T17:12:26Z",
2088− "repoId": 987670088,
2089− "pullRequestNo": 3247
2090− },
2091− {
2092− "name": "TheRAWagent",
2093− "id": 77039476,
2094− "comment_id": 4879276761,
2095− "created_at": "2026-07-03T20:52:00Z",
2096− "repoId": 987670088,
2097− "pullRequestNo": 3251
2098 }
1618 }
2099 ]
1619 ]
2100}
1620}
.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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
21+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
22 with:
22 with:
23 persist-credentials: false
23 persist-credentials: false
24− - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
24+ - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.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/labeler.yml+1−1
@@ -14,7 +14,6 @@ on:
14
14
15permissions:
15permissions:
16 issues: write
16 issues: write
17− pull-requests: write
18 contents: read
17 contents: read
19
18
20jobs:
19jobs:
@@ -27,4 +26,5 @@ jobs:
27 enable-versioned-regex: 0
26 enable-versioned-regex: 0
28 include-title: 1
27 include-title: 1
29 include-body: 0
28 include-body: 0
29+ repo-token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
30 issue-number: ${{ github.event.inputs.issue-number || github.event.issue.number || github.event.pull_request.number }}
30 issue-number: ${{ github.event.inputs.issue-number || github.event.issue.number || github.event.pull_request.number }}
.github/workflows/lint.yml+1−1
@@ -9,5 +9,5 @@ jobs:
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.11
12+ golangci_version: v2.10
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
14+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
15 with:
15 with:
16 fetch-depth: 1
16 fetch-depth: 1
17 - id: check
17 - id: check
.github/workflows/release.yml+1
@@ -25,6 +25,7 @@ jobs:
25 fury_token: ${{ secrets.FURY_TOKEN }}
25 fury_token: ${{ secrets.FURY_TOKEN }}
26 nfpm_gpg_key: ${{ secrets.NFPM_GPG_KEY }}
26 nfpm_gpg_key: ${{ secrets.NFPM_GPG_KEY }}
27 nfpm_passphrase: ${{ secrets.NFPM_PASSPHRASE }}
27 nfpm_passphrase: ${{ secrets.NFPM_PASSPHRASE }}
28+ snapcraft_token: ${{ secrets.SNAPCRAFT_TOKEN }}
28 aur_key: ${{ secrets.AUR_KEY }}
29 aur_key: ${{ secrets.AUR_KEY }}
29 macos_sign_p12: ${{ secrets.MACOS_SIGN_P12 }}
30 macos_sign_p12: ${{ secrets.MACOS_SIGN_P12 }}
30 macos_sign_password: ${{ secrets.MACOS_SIGN_PASSWORD }}
31 macos_sign_password: ${{ secrets.MACOS_SIGN_PASSWORD }}
.github/workflows/schema-update.yml+3−4
@@ -6,21 +6,20 @@ on:
6 paths:
6 paths:
7 - "internal/config/**"
7 - "internal/config/**"
8 - "internal/agent/hyper/**"
8 - "internal/agent/hyper/**"
9− workflow_dispatch:
10
9
11jobs:
10jobs:
12 update-schema:
11 update-schema:
13 runs-on: ubuntu-latest
12 runs-on: ubuntu-latest
14 steps:
13 steps:
15− - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
14+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
16 with:
15 with:
17 token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
16 token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
18− - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
17+ - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
19 with:
18 with:
20 go-version-file: go.mod
19 go-version-file: go.mod
21 - run: go run . schema > ./schema.json
20 - run: go run . schema > ./schema.json
22 - run: go generate ./internal/agent/hyper/...
21 - run: go generate ./internal/agent/hyper/...
23− - uses: stefanzweifel/git-auto-commit-action@4a55954c782fc1ea30b9056cd3e7a2b40ca8887d # v5
22+ - uses: stefanzweifel/git-auto-commit-action@04702edda442b2e678b25b537cec683a1493fcb9 # v5
24 with:
23 with:
25 commit_message: "chore: auto-update files"
24 commit_message: "chore: auto-update files"
26 branch: main
25 branch: main
.github/workflows/security.yml+11−11
@@ -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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
30+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
31 with:
31 with:
32 persist-credentials: false
32 persist-credentials: false
33− - uses: github/codeql-action/init@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
33+ - uses: github/codeql-action/init@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
34 with:
34 with:
35 languages: ${{ matrix.language }}
35 languages: ${{ matrix.language }}
36− - uses: github/codeql-action/autobuild@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
36+ - uses: github/codeql-action/autobuild@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
37− - uses: github/codeql-action/analyze@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
37+ - uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
46+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
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@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
55+ - uses: github/codeql-action/upload-sarif@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
65+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
66 with:
66 with:
67 persist-credentials: false
67 persist-credentials: false
68− - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
68+ - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.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@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
76+ - uses: github/codeql-action/upload-sarif@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
77 with:
77 with:
78 sarif_file: results.sarif
78 sarif_file: results.sarif
79
79
@@ -83,10 +83,10 @@ jobs:
83 permissions:
83 permissions:
84 contents: read
84 contents: read
85 steps:
85 steps:
86− - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
86+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
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@2031cfc080254a8a887f58cffee85186f0e49e48 # v4.9.0
90 with:
90 with:
91 fail-on-severity: critical
91 fail-on-severity: critical
92 allow-licenses: BSD-2-Clause, BSD-3-Clause, MIT, MIT-0, Apache-2.0, MPL-2.0, ISC, LicenseRef-scancode-google-patent-license-golang, Unlicense
92 allow-licenses: BSD-2-Clause, BSD-3-Clause, MIT, MIT-0, Apache-2.0, MPL-2.0, ISC, LicenseRef-scancode-google-patent-license-golang, Unlicense
.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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
21+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
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@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
25+ - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
26 with:
26 with:
27 go-version-file: go.mod
27 go-version-file: go.mod
28− - uses: goreleaser/goreleaser-action@f06c13b6b1a9625abc9e6e439d9c05a8f2190e94 # v7.2.3
28+ - uses: goreleaser/goreleaser-action@e24998b8b67b290c2fa8b7c14fcfa7de2c5c9b8c # v7.1.0
29 with:
29 with:
30 version: "nightly"
30 version: "nightly"
31 distribution: goreleaser-pro
31 distribution: goreleaser-pro
.gitignore−4
@@ -42,10 +42,6 @@ Thumbs.db
42.env
42.env
43.env.local
43.env.local
44
44
45−# Nix/direnv
46−.direnv/
47−/result
48−
49**/.crush/**
45**/.crush/**
50
46
51/crush
47/crush
.golangci.yml+4−16
@@ -2,7 +2,6 @@ version: "2"
2linters:
2linters:
3 enable:
3 enable:
4 - bodyclose
4 - bodyclose
5− - errcheck
6 # - exhaustive
5 # - exhaustive
7 # - goconst
6 # - goconst
8 # - godot
7 # - godot
@@ -10,7 +9,6 @@ linters:
10 # - gomoddirectives
9 # - gomoddirectives
11 - goprintffuncname
10 - goprintffuncname
12 # - gosec
11 # - gosec
13− - ineffassign
14 - misspell
12 - misspell
15 # - nakedret
13 # - nakedret
16 # - nestif
14 # - nestif
@@ -25,30 +23,20 @@ linters:
25 - tparallel
23 - tparallel
26 # - unconvert
24 # - unconvert
27 # - unparam
25 # - unparam
28− - unused
29 - whitespace
26 - whitespace
30 # - wrapcheck
27 # - wrapcheck
28+ disable:
29+ - errcheck
30+ - ineffassign
31+ - unused
31 exclusions:
32 exclusions:
32 generated: lax
33 generated: lax
33 presets:
34 presets:
34 - common-false-positives
35 - 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
39 rules:
36 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
45 - text: '(slog|log)\.\w+'
37 - text: '(slog|log)\.\w+'
46 linters:
38 linters:
47 - noctx
39 - noctx
48− - path: internal/shell/run.go
49− text: "SA1019.*interp.ExecHandler"
50− linters:
51− - staticcheck
52issues:
40issues:
53 max-issues-per-linter: 0
41 max-issues-per-linter: 0
54 max-same-issues: 0
42 max-same-issues: 0
AGENTS.md−40
@@ -181,43 +181,3 @@ 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+25−165
@@ -1,8 +1,5 @@
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−
6<p align="center">
3<p align="center">
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 />
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 />
8 <a href="https://github.com/charmbracelet/crush/releases"><img src="https://img.shields.io/github/release/charmbracelet/crush" alt="Latest Release"></a>
5 <a href="https://github.com/charmbracelet/crush/releases"><img src="https://img.shields.io/github/release/charmbracelet/crush" alt="Latest Release"></a>
@@ -184,7 +181,6 @@ That said, you can also set environment variables for preferred providers.
184
181
185| Environment Variable | Provider |
182| Environment Variable | Provider |
186| --------------------------- | -------------------------------------------------- |
183| --------------------------- | -------------------------------------------------- |
187−| `HYPER_API_KEY` | Charm Hyper |
188| `ANTHROPIC_API_KEY` | Anthropic |
184| `ANTHROPIC_API_KEY` | Anthropic |
189| `OPENAI_API_KEY` | OpenAI |
185| `OPENAI_API_KEY` | OpenAI |
190| `VERCEL_API_KEY` | Vercel AI Gateway |
186| `VERCEL_API_KEY` | Vercel AI Gateway |
@@ -196,8 +192,6 @@ That said, you can also set environment variables for preferred providers.
196| `CEREBRAS_API_KEY` | Cerebras |
192| `CEREBRAS_API_KEY` | Cerebras |
197| `OPENROUTER_API_KEY` | OpenRouter |
193| `OPENROUTER_API_KEY` | OpenRouter |
198| `IONET_API_KEY` | io.net |
194| `IONET_API_KEY` | io.net |
199−| `ALIBABA_SINGAPORE_API_KEY` | Alibaba (Singapore) |
200−| `ALIBABA_US_API_KEY` | Alibaba (United States) |
201| `GROQ_API_KEY` | Groq |
195| `GROQ_API_KEY` | Groq |
202| `AVIAN_API_KEY` | Avian |
196| `AVIAN_API_KEY` | Avian |
203| `OPENCODE_API_KEY` | OpenCode Zen & Go |
197| `OPENCODE_API_KEY` | OpenCode Zen & Go |
@@ -211,7 +205,6 @@ That said, you can also set environment variables for preferred providers.
211| `AZURE_OPENAI_API_ENDPOINT` | Azure OpenAI models |
205| `AZURE_OPENAI_API_ENDPOINT` | Azure OpenAI models |
212| `AZURE_OPENAI_API_KEY` | Azure OpenAI models (optional when using Entra ID) |
206| `AZURE_OPENAI_API_KEY` | Azure OpenAI models (optional when using Entra ID) |
213| `AZURE_OPENAI_API_VERSION` | Azure OpenAI models |
207| `AZURE_OPENAI_API_VERSION` | Azure OpenAI models |
214−| `MOONSHOT_API_KEY` | Moonshot |
215
208
216### Subscriptions
209### Subscriptions
217
210
@@ -299,36 +292,10 @@ like you would. LSPs can be added manually like so:
299
292
300### MCPs
293### MCPs
301
294
302−Crush also supports Model Context Protocol (MCP) servers through three transport
295+Crush also supports Model Context Protocol (MCP) servers through three
303−types: `stdio` for command-line servers, `http` for HTTP endpoints, and `sse`
296+transport types: `stdio` for command-line servers, `http` for HTTP endpoints,
304−for Server-Sent Events.
297+and `sse` for Server-Sent Events. Environment variable expansion is supported
305−
298+using `$(echo $VAR)` syntax.
306−Shell-style value expansion (`$VAR`, `${VAR:-default}`, `$(command)`, quoting,
307−nesting) works in `command`, `args`, `env`, `headers`, and `url`, so
308−file-based secrets work out of the box. You can use values like `"$TOKEN"`
309−or `"$(cat /path/to/secret/token)"`. Expansion runs through Crush's embedded
310−shell, so the same syntax works on every supported system, Windows included.
311−
312−Unset variables expand to the empty string by default, matching bash. For
313−required credentials, use `${VAR:?message}` so an unset variable fails loudly
314−at load time with `message` instead of silently resolving to empty:
315−
316−```json
317−{ "api_key": "${CODEBERG_TOKEN:?set CODEBERG_TOKEN}" }
318−```
319−
320−Headers (both MCP `headers` and provider `extra_headers`) whose value
321−resolves to the empty string are dropped from the outgoing request rather
322−than sent as `Header:`. That keeps optional env-gated headers like
323−`"OpenAI-Organization": "$OPENAI_ORG_ID"` clean when the variable is unset.
324−
325−Provider `extra_body` is a non-expanding JSON passthrough; put env-driven
326−values in `extra_headers` or the provider's `api_key` / `base_url`, all of
327−which do expand.
328−
329−> **Security note:** `crush.json` is trusted code. Any `$(...)` in it runs at
330−> load time with your shell's privileges, before the UI appears. Don't launch
331−> Crush in a directory whose `crush.json` you haven't reviewed.
332
299
333```json
300```json
334{
301{
@@ -373,67 +340,6 @@ which do expand.
373Crush has preliminary support for hooks. For details, see
340Crush has preliminary support for hooks. For details, see
374[the hook guide](./docs/hooks/).
341[the hook guide](./docs/hooks/).
375
342
376−### Sharing a workspace across clients
377−
378−When Crush is run against a shared backend (for example two TUIs talking to
379−the same `crush serve`), clients are grouped into **workspaces** keyed by
380−their resolved `--cwd`. Two clients with the same `--cwd` join the same
381−underlying workspace, so they share the session list, message history,
382−permission queue, LSP, and MCP state.
383−
384−Joining is implicit: pointing a second client at the same working directory
385−attaches it to the existing workspace. Each new invocation, however, starts
386−in its own fresh session by default. To pick up the conversation another
387−client already has open, use the session manager (the session picker) and
388−select it. Sessions surface two signals there:
389−
390−- `IsBusy` is set while an agent turn is in flight for that session.
391−- `AttachedClients` reports how many clients are currently viewing it.
392−
393−A non-zero `AttachedClients` (often combined with `IsBusy`) is the cue that a
394−session is "in progress" on another client and joining it will mirror that
395−view live.
396−
397−The first client to create a workspace fixes its process-wide flags. In
398−particular, `--yolo` and `--debug` follow a **first-wins** rule: later
399−clients that arrive at the same `--cwd` with different values for those
400−flags do not change the running workspace. A debug log line is emitted
401−recording the mismatch, and the workspace keeps the flags it was created
402−with.
403−
404−A workspace lives as long as at least one client has an SSE event stream
405−open against it. When the last stream disconnects, the workspace is torn
406−down. There is a short grace window right after `POST /v1/workspaces` so a
407−client that has created the workspace but not yet opened its event stream
408−does not get reaped before it can attach.
409−
410−### Global context files
411−
412−Crush automatically includes two files for cross-project instructions.
413−
414−- `~/.config/crush/CRUSH.md`: Crush-specific rules that would confuse other
415− agentic coding tools. If you only use Crush, this is the only one you need to
416− edit.
417−- `~/.config/AGENTS.md`: generic instructions that other coding tools might
418− read. Avoid referring to Crush-specific features or workflows here. You
419− probably only care about this if you use multiple agentic coding tools and
420− want to share instructions between them.
421−
422−You can customize these paths using the `global_context_paths` option in your
423−configuration:
424−
425−```jsonc
426−{
427− "$schema": "https://charm.land/crush.json",
428− "options": {
429− "global_context_paths": [
430− "~/path/to/custom/context/file.md",
431− "/full/path/to/folder/of/files/" // recursively load all .md files in folder
432− ]
433− }
434−}
435−```
436−
437### Ignoring Files
343### Ignoring Files
438
344
439Crush respects `.gitignore` files by default, but you can also create a
345Crush respects `.gitignore` files by default, but you can also create a
@@ -512,8 +418,6 @@ The global paths we looks for skills are:
512* `$CRUSH_SKILLS_DIR`
418* `$CRUSH_SKILLS_DIR`
513* `$XDG_CONFIG_HOME/agents/skills` or `~/.config/agents/skills/`
419* `$XDG_CONFIG_HOME/agents/skills` or `~/.config/agents/skills/`
514* `$XDG_CONFIG_HOME/crush/skills` or `~/.config/crush/skills/`
420* `$XDG_CONFIG_HOME/crush/skills` or `~/.config/crush/skills/`
515−* `~/.agents/skills/`
516−* `~/.claude/skills/`
517* On Windows, we _also_ look at
421* On Windows, we _also_ look at
518 * `%LOCALAPPDATA%\agents\skills\` or `%USERPROFILE%\AppData\Local\agents\skills\`
422 * `%LOCALAPPDATA%\agents\skills\` or `%USERPROFILE%\AppData\Local\agents\skills\`
519 * `%LOCALAPPDATA%\crush\skills\` or `%USERPROFILE%\AppData\Local\crush\skills\`
423 * `%LOCALAPPDATA%\crush\skills\` or `%USERPROFILE%\AppData\Local\crush\skills\`
@@ -557,37 +461,6 @@ git clone https://github.com/anthropics/skills.git _temp
557mv _temp/skills/* . ; rm -r -force _temp
461mv _temp/skills/* . ; rm -r -force _temp
558```
462```
559
463
560−#### User-Invocable Skills
561−
562−Skills can be made invocable as commands from the commands palette (Ctrl+P). Add `user-invocable: true` to the skill's YAML frontmatter:
563−
564−```yaml
565−---
566−name: my-skill
567−description: A skill that can be invoked as a command.
568−user-invocable: true
569−---
570−```
571−
572−User-invocable skills appear in the commands palette with a `user:` or `project:` prefix:
573−- Skills from global directories show as `user:skill-name`
574−- Skills from project directories show as `project:skill-name`
575−
576−When invoked, the skill's instructions are loaded into the conversation context.
577−
578−To prevent the model from auto-triggering a skill (while still allowing user invocation), add `disable-model-invocation: true`:
579−
580−```yaml
581−---
582−name: my-skill
583−description: Only invocable by users, not the model.
584−user-invocable: true
585−disable-model-invocation: true
586−---
587−```
588−
589−Skills with `disable-model-invocation` won't appear in the model's available skills list but can still be invoked manually by users.
590−
591### Desktop notifications
464### Desktop notifications
592
465
593Crush sends desktop notifications when a tool call requires permission and when
466Crush sends desktop notifications when a tool call requires permission and when
@@ -648,7 +521,8 @@ it creates. You can customize this behavior with the `attribution` option:
648
521
649- `trailer_style`: Controls the attribution trailer added to commit messages
522- `trailer_style`: Controls the attribution trailer added to commit messages
650 (default: `assisted-by`)
523 (default: `assisted-by`)
651− - `assisted-by`: Adds `Assisted-by: Crush:[ModelID]` as specified in [the convention](https://docs.kernel.org/process/coding-assistants.html#attribution)
524+ - `assisted-by`: Adds `Assisted-by: [Model Name] via Crush <crush@charm.land>`
525+ (includes the model name)
652 - `co-authored-by`: Adds `Co-Authored-By: Crush <crush@charm.land>`
526 - `co-authored-by`: Adds `Co-Authored-By: Crush <crush@charm.land>`
653 - `none`: No attribution trailer
527 - `none`: No attribution trailer
654- `generated_with`: When true (default), adds `💘 Generated with Crush` line to
528- `generated_with`: When true (default), adds `💘 Generated with Crush` line to
@@ -775,10 +649,9 @@ To add specific models to the configuration, configure as such:
775
649
776### Local Models
650### Local Models
777
651
778−Crush can auto-discovers models from local providers. Add a custom provider
652+Local models can also be configured via OpenAI-compatible API. Here are two common examples:
779−with `type` set to `llamacpp`, `omlx`, `lmstudio`, `litellm`, or `ollama`
653+
780−and leave out the models list. Crush will populate the model list
654+#### Ollama
781−automatically.
782
655
783```json
656```json
784{
657{
@@ -786,50 +659,37 @@ automatically.
786 "ollama": {
659 "ollama": {
787 "name": "Ollama",
660 "name": "Ollama",
788 "base_url": "http://localhost:11434/v1/",
661 "base_url": "http://localhost:11434/v1/",
789− "type": "ollama"
662+ "type": "openai-compat",
790− }
663+ "models": [
791− }
664+ {
792−}
665+ "name": "Qwen 3 30B",
793−```
666+ "id": "qwen3:30b",
794−
667+ "context_window": 256000,
795−For llama.cpp (`llama-server`), point at the server's base URL:
668+ "default_max_tokens": 20000
796−
669+ }
797−```json
670+ ]
798−{
799− "providers": {
800− "llamacpp": {
801− "name": "llama.cpp",
802− "base_url": "http://localhost:2222",
803− "type": "llamacpp"
804 }
671 }
805 }
672 }
806}
673}
807```
674```
808
675
809−#### Manual Model Configuration
676+#### LM Studio
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
677
817```json
678```json
818{
679{
819 "providers": {
680 "providers": {
820− "ollama": {
681+ "lmstudio": {
821− "name": "Ollama",
682+ "name": "LM Studio",
822− "base_url": "http://localhost:11434/v1/",
683+ "base_url": "http://localhost:1234/v1/",
823− "type": "ollama",
684+ "type": "openai-compat",
824 "models": [
685 "models": [
825 {
686 {
826 "name": "Qwen 3 30B",
687 "name": "Qwen 3 30B",
827− "id": "qwen3:30b",
688+ "id": "qwen/qwen3-30b-a3b-2507",
828 "context_window": 256000,
689 "context_window": 256000,
829 "default_max_tokens": 20000
690 "default_max_tokens": 20000
830 }
691 }
831− ],
692+ ]
832− "discover_models": true
833 }
693 }
834 }
694 }
835}
695}
docs/hooks/FUTURE.md+119−4
@@ -4,8 +4,7 @@ This document tracks planned features and design notes for hooks that are not
4yet implemented. Nothing here is part of the current contract. Treat it as a
4yet implemented. Nothing here is part of the current contract. Treat it as a
5scratchpad for what's next, not as documentation of current behavior.
5scratchpad for what's next, not as documentation of current behavior.
6
6
7−> [!NOTE]
8−> This document was largely LLM-generated.
7+> [!NOTE] This document was largely LLM-generated.
9
8
10## `context_files`
9## `context_files`
11
10
@@ -256,5 +255,121 @@ Reuses the universal rules:
256
255
257## Cross-platform shell (Windows support)
256## Cross-platform shell (Windows support)
258
257
259−**Status:** implemented. See the [Execution model](README.md#execution-model)
258+**Status:** not implemented.
260−section in `README.md` for the current behavior and contract.
259+
260+### Problem
261+
262+Today the hook runner uses `exec.Command("sh", "-c", hook.Command)`. On Windows
263+this fails without WSL or Git Bash on PATH. Even with `sh.exe` available,
264+Windows has no kernel shebang handling — `./hooks/foo.sh` can't be exec'd
265+directly the way it can on Unix. Hooks are effectively Unix-only.
266+
267+### Approach
268+
269+Keep the `command` field as a string. Tokenize it shell-style, examine
270+`argv[0]`, and branch:
271+
272+- If `argv[0]` starts with `./`, `../`, `/`, or `~/` — treat it as a **file
273+ invocation**. Read the first ≤128 bytes, parse a shebang if present, and
274+ dispatch to the named interpreter via `os/exec`. Extra args from the command
275+ string pass through to the interpreter.
276+- Otherwise — treat the whole string as **shell code** and hand it to mvdan's
277+ in-process interpreter. mvdan resolves `node`, `bash`, `jq`, builtins,
278+ pipelines, redirects, etc. via its own exec handler.
279+
280+No sentinel: a script with no shebang defaults to mvdan. A script with an
281+explicit shebang (`#!/bin/bash`, `#!/usr/bin/env python3`, etc.) uses the named
282+interpreter, which the user is responsible for having on PATH. Same contract on
283+every platform.
284+
285+### Dispatch examples
286+
287+| `command` | `argv[0]` | Route |
288+| ---------------------------------------- | -------------- | ------------------------ |
289+| `ls -la` | `ls` | mvdan |
290+| `bash -c 'ls'` | `bash` | mvdan (which execs bash) |
291+| `node ./script.js` | `node` | mvdan (which execs node) |
292+| `./script.sh` (no shebang) | `./script.sh` | mvdan, fed the file |
293+| `./script.sh` (`#!/bin/bash`) | `./script.sh` | `bash ./script.sh` |
294+| `./script.py` (`#!/usr/bin/env python3`) | `./script.py` | `python3 ./script.py` |
295+| `./script.exe` | `./script.exe` | `os/exec` direct |
296+
297+### Contract on Windows
298+
299+- Inline shell runs through mvdan natively. No external dependency.
300+- Shebang-dispatched scripts require the named interpreter on PATH (`bash.exe`,
301+ `python.exe`, `node.exe`, etc.). Crush does the dispatch that the Windows
302+ kernel won't.
303+- Shebang-less scripts run through mvdan regardless of extension. CRLF line
304+ endings are tolerated.
305+
306+### Implementation sketch
307+
308+- New function
309+ `dispatch(ctx, cmd string, env []string, stdin io.Reader) (stdout, stderr string, exitCode int, err error)`
310+ in `internal/hooks/`.
311+- Tokenize using mvdan's parser (already a dep) for consistent quoting/escape
312+ behavior with shell intuition.
313+- Path-prefix check on `argv[0]`; if path, read shebang with a bounded
314+ `io.LimitReader` and parse. Support:
315+ - `#!/absolute/interpreter args…`
316+ - `#!/usr/bin/env NAME` → resolve `NAME` on PATH
317+ - `#!/usr/bin/env -S NAME args…` → treat as above; `-S` is common enough to
318+ handle. Other `env` flags can error.
319+- Unified exit-code helper. mvdan's `interp.ExitStatus` and `os/exec`'s
320+ `ProcessState.ExitCode()` both become a single `int`.
321+- Context cancellation: mvdan's exec handler uses `exec.CommandContext` for its
322+ children, so a cancelled hook kills both the interpreter and any children.
323+ Verify with a `sleep 60` test.
324+- One fresh `interp.Runner` per hook invocation (parallel hooks must not share
325+ state).
326+
327+### Swap the call site
328+
329+`Runner.runOne` in `internal/hooks/runner.go` replaces its
330+`exec.Command("sh", "-c", …)` with a call to `dispatch(…)`. Everything
331+downstream (exit-code 2 / 49 / other dispatch, stdout JSON parsing,
332+stderr-as-reason) stays identical.
333+
334+### Tests
335+
336+Cross-platform matrix:
337+
338+- Inline: `echo hi`; `exit 2`; pipelines; redirections.
339+- File, no shebang: treated as shell source through mvdan.
340+- File, `#!/bin/bash` on Unix — invokes system bash.
341+- File, `#!/usr/bin/env python3` — invokes python if present, skips if not.
342+- File, `#!/usr/bin/env -S node --foo` — extra flags preserved.
343+- File with CRLF line endings in the shebang.
344+- `./missing-file` — non-blocking error, hook proceeds as "no opinion".
345+- Timeout: hook that sleeps past its timeout gets killed; context cancellation
346+ kills the interpreter and its children.
347+- Concurrency: 10 hooks in parallel don't leak env/cwd/state between runners.
348+- Windows-specific: `./script.exe` exec'd directly; bash-shebang script fails
349+ gracefully when bash isn't on PATH.
350+
351+### Pitfalls to watch
352+
353+- **Userland shebang parsing is now our problem.** Edge cases around `env`
354+ flags, args with spaces, CRLF, missing interpreter. Well-trodden but needs
355+ real tests.
356+- **The path-prefix heuristic is a heuristic.** `relative/path.sh` (no leading
357+ `./`) gets mvdan'd, not file-dispatched. Matches shell intuition — at a bash
358+ prompt, `relative/path.sh` doesn't run unless `.` is on PATH — but worth
359+ documenting.
360+- **Kernel shebang handling is bypassed on Unix.** Today a chmod+x'd script is
361+ exec'd by the kernel; after this change, by our parser. Behavior should be
362+ byte-identical; verify with tests.
363+- **Two code paths.** mvdan vs direct-exec. Exit codes, stdin, signal
364+ propagation, env inheritance must be aligned. Discipline, not cleverness.
365+
366+### Explicit non-goals
367+
368+- No bundled `bash.exe` or `python.exe`. Users bring their own interpreters.
369+- No custom mvdan builtins (`crush_approve` etc.). Hooks stay portable and
370+ testable under bare `bash`.
371+- No `.sh`-extension filter on discovery. Hook file shape is driven by shebang,
372+ not filename.
373+- No Crush-as-script-interpreter mode (users can't write `#!/usr/bin/env crush`
374+ and have it mean something). If we want that later, it's an additive feature,
375+ not a dependency of this work.
docs/hooks/README.md+48−201
@@ -1,145 +1,44 @@
1# Hooks
1# Hooks
2
2
3−> [!NOTE]
4−> This document was designed for both humans and agents.
3+> [!NOTE] This document was designed for both humans and agents.
5
4
6−Hooks are user-defined shell scripts that run when various events happen during
5+Hooks are user-defined shell commands that fire at specific points during
7−the agent lifecycle, allowing you to both build on top of Crush, customize
8−its behavior, and exert deterministic control over an agent's wily behavior.
6+Crush's execution, giving you deterministic control over an agent's wily
7+behavior.
9
8
10−Hooks are just shell commands, and were designed to be both simple and future
9+Hooks in Crush are shell-based, with a focus on simplicity. This allows hooks to
11−forward.
10+effectively be written in any language. In this document we'll primarily focus
11+on Bash for simplicity's sake, though we'll include some examples in other
12+languages at the end, too.
12
13
13### Hot Hook Facts
14### Hot Hook Facts
14
15
15−- Hooks are just shell commands
16+- Hooks run before permission checks. If a hook denies a tool call, you'll
16−- Hooks can be written in any language because they’re just executables: Bash, Python, Node, Rust, Haskell, whatever
17+ never see a permission prompt for it. If a hook explicitly allows a tool
18+ call, you'll _also_ never see a prompt — Crush treats `"decision": "allow"`
19+ as affirmative pre-approval.
20+- Hooks only fire on the **top-level agent's** tool calls. Sub-agents (the
21+ `agent` task tool, `agentic_fetch`, etc.) run without hook interception so
22+ a single delegated turn doesn't trigger your hook N times. The outer
23+ sub-agent tool call itself _is_ hooked, so policy like "never let the
24+ agent spawn sub-agents" still works.
17−- Hooks are Claude Code-compatible
25+- Hooks are also compatible with hooks in Claude Code, however this document
18−- Crush ships with a builtin `crush-hook` skill write, edit, and configure
26+ covers the Crush-specific API only. One intentional divergence: Crush treats
19− hooks; just tell Crush how to configure Crush
27+ `updated_input` as a shallow-merge patch rather than a full replacement — see
28+ [Output](#output) below.
20- Crush currently supports just one hook, `PreToolUse`, with plans to support
29- Crush currently supports just one hook, `PreToolUse`, with plans to support
21− the full gamut; please let us know which hooks you'd like to see next
30+ the full gamut. If there's a hook you'd like to see, let us know.
22−- Hooks run in parallel for speed, but their results compose in config order
23− for determinism
24−
25−### Some things you can do with hooks:
26−
27−- Block "dangerous" commands: no more `git push -f` or `cabal init`
28−- Rewrite tool input: turn `node` calls info `deno`, scrub secrets from
29− commands, rewrite all mentions of "Haskell" into "Haskell, The Best
30− Language", and so on
31−- Inject context: add notes to the model's context whenever certain tools are
32− called. For example: "remember to run gofumpt after editing Go files"
33−- Auto-approve tools: skip the permission prompt for bash commands that
34− you know are safe
35−- Log certain tool calls
36−
37−…And lots more. Show us what you're building!
38−
39−## Baby's First Hook
40−
41−Let's just dive into it and make a simple hook. This particular hook will
42−disallow the use of Haskell (but we love you, Simon Peyton Jones).
43−
44−### Config
45−
46−The first thing we need to do is hook up our hook. Let's add the following to
47−our **project-level** `crush.json`. Relative paths like `./no-haskell.sh` work
48−here because the project root is your working directory. If you're configuring
49−a global hook (`~/.config/crush/crush.json`), use an absolute path instead.
50−
51−```jsonc
52−{
53− // As expected, hooks go in a "hooks" object.
54− "hooks": {
55− // PreToolUse is an event that fires before a tool is used.
56− "PreToolUse": [
57− {
58− // What tool do we want to hook into? In this case, Bash, because it
59− // runs the stuff we wanna block.
60− "matcher": "^bash$",
61−
62− // The path to our actual hook script.
63− "command": "./no-haskell.sh",
64− },
65− ],
66− },
67−}
68−```
69−
70−Now, let's make our `no-haskell.sh` hook script.
71−
72−```bash
73−#!/usr/bin/env bash
74−
75−# Disallow ghc, cabal, and stack. Pipe the bash command output
76−# ($CRUSH_TOOL_INPUT_COMMAND) to grep and match on a regexp.
77−if echo "$CRUSH_TOOL_INPUT_COMMAND" | grep -qE '(^| )((ghc|cabal|stack)(\.exe)?)( |$)'; then
78−
79− # Someone is trying to use Haskell. Let's send a message back to the model
80− # and user explaining why we're blocking this. Note that we send all feedback
81− # like this to stderr.
82− echo "No Haskell allowed, kiddo." >&2
83−
84− # Now, block the tool call by exiting with code 2.
85− exit 2
86−fi
87−```
88−
89−That's basically it. For the full guide on how hooks work, however, read on.
90−
91−---
92−
93−## Execution model
94−
95−Hooks run through Crush's embedded POSIX shell (`mvdan.cc/sh`) — the same
96−interpreter the `bash` tool uses. Inline commands and shebang-less scripts
97−execute in-process; scripts with a `#!` shebang dispatch to the named
98−interpreter via `os/exec`. This contract is identical on macOS, Linux, and
99−Windows.
100−
101−What this means in practice:
102−
103−- **Windows without Unix tooling**: inline shell (`echo`, pipelines, `jq`,
104− `grep`), shebang-less `.sh` scripts, inline PowerShell
105− (`powershell -Command …`), and `.exe` invocations all work out of the box
106− with no WSL, Git Bash, Cygwin, or MSYS required.
107−- **PowerShell scripts** (`.ps1`) are not auto-dispatched by extension.
108− Invoke them explicitly: `powershell -File ./audit.ps1` (or
109− `pwsh -File ./audit.ps1`).
110−- **Shebang'd scripts** require the named interpreter on `PATH`. Git for
111− Windows ships `bash.exe`, which makes `#!/bin/bash` and
112− `#!/usr/bin/env bash` scripts work on Windows the same way they do on
113− Unix. CRLF line endings in the shebang line are tolerated.
114−- **Permissive shebang fallback**: if the absolute path in a shebang
115− doesn't exist (e.g. `#!/bin/bash` on Windows), Crush falls back to a
116− `PATH` lookup of the base name (`bash`) before giving up. A debug-level
117− log records the fallback. If the interpreter isn't on `PATH` either, the
118− hook fails cleanly as a non-blocking warning and the agent proceeds as
119− "no opinion".
120−- **Environment**: every hook sees `CRUSH=1`, `AGENT=crush`, and
121− `AI_AGENT=crush` on top of the `CRUSH_*` hook-specific variables. These
122− three markers are guaranteed and match what the `bash` tool sets, so
123− scripts that detect "am I being run by an AI agent?" behave the same in
124− both contexts.
125−- **Timeout behavior**: when a hook exceeds its timeout, Crush cancels the
126− context and waits a short grace period (~1s) for the interpreter to
127− yield. If the hook still hasn't returned, Crush abandons it, logs a
128− warning, and treats the result as "no opinion" so the agent can proceed.
129− Long-running work should honor context cancellation or run in a
130− subprocess via a shebang.
131
31
132## Configuration
32## Configuration
133
33
134−Hooks can be added to your `crush.json` (or `.crush.json`) at both the global
34+Hooks can be added to your `crush.json` at both the global and project-level,
135−and project-level, with project level hooks taking precedence.
35+with project level hooks taking precedence.
136
36
137```jsonc
37```jsonc
138{
38{
139 "hooks": {
39 "hooks": {
140 "PreToolUse": [
40 "PreToolUse": [
141 {
41 {
142− "name": "no-rm-rf", // friendly name shown in the TUI
143 "matcher": "bash", // regex tested against the tool name
42 "matcher": "bash", // regex tested against the tool name
144 "command": "./hooks/my-hot-hook.sh", // the path to the hook
43 "command": "./hooks/my-hot-hook.sh", // the path to the hook
145 "timeout": 10, // in seconds; default 30
44 "timeout": 10, // in seconds; default 30
@@ -149,30 +48,8 @@ and project-level, with project level hooks taking precedence.
149}
48}
150```
49```
151
50
152−> [!IMPORTANT]
51+Hooks are keyed by event name. Only `command` is required; omit `matcher` to
153−> The `command` is resolved relative to your **current working directory** —
52+match all tools.
154−> not relative to the config file. Relative paths like `./hooks/whatever.sh`
155−> work fine in project-level `crush.json` because the project root is also
156−> your working directory. For **global** config (`~/.config/crush/`),
157−> however, you must use either an absolute path or an inline command:
158−>
159−> ```jsonc
160−> // Global ~/.config/crush/crush.json
161−> {
162−> "hooks": {
163−> "PreToolUse": [
164−> {
165−> "command": "/home/you/.config/crush/hooks/no-haskell.sh"
166−> // or use an inline command:
167−> // "command": "echo '{\"decision\":\"allow\"}'"
168−> }
169−> ]
170−> }
171−> }
172−> ```
173−
174−Remember, hooks will run in parallel but resolve in config order. Last hook
175−wins when rewriting input, but first deny wins when blocking.
176
53
177## Events
54## Events
178
55
@@ -181,24 +58,29 @@ Here are the events you can hook into (spoiler: there's currently just one):
181### PreToolUse
58### PreToolUse
182
59
183This hook fires before every tool call. Use it to block dangerous commands,
60This hook fires before every tool call. Use it to block dangerous commands,
184−enforce policies, rewrite tool input, inject context the model should see, log
61+enforce policies, rewrite tool input, or inject context the model should see.
185−stuff, and so on.
186
62
187**Matched against**: the tool name (e.g. `bash`, `edit`, `write`,
63**Matched against**: the tool name (e.g. `bash`, `edit`, `write`,
188`mcp_github_create_pull_request`).
64`mcp_github_create_pull_request`).
189
65
190−> [!NOTE]
191−> Event names are case insensitive and snake-caseable, so `PreToolUse`,
66+> [!NOTE] Event names are case insensitive and snake-caseable, so `PreToolUse`,
192> `pretooluse`, `PRETOOLUSE`, `pre_tool_use`, and `PRE_TOOL_USE` all work.
67> `pretooluse`, `PRETOOLUSE`, `pre_tool_use`, and `PRE_TOOL_USE` all work.
193
68
194−**Scope**: `PreToolUse` only fires on the **top-level agent's** tool calls.
69+## Baby's First Hook
195−Sub-agents (the `agent` task tool, `agentic_fetch`, etc.) run without hook
70+
196−interception so a single delegated turn doesn't trigger your hook N times. The
71+Hooks are just shell scripts. Go crazy.
197−outer sub-agent tool call itself _is_ hooked, so policy like "never let the
72+
198−agent spawn sub-agents" still works.
73+```bash
74+#!/usr/bin/env bash
199
75
200−Hooks are keyed by event name. Only `command` is required, and you can omit
76+# Log all bash tool calls to a file.
201−`matcher` to match all tools.
77+printf "%s: %s / %s" \
78+ "$(date -Iseconds)" \
79+ "$CRUSH_SESSION_ID" \
80+ "$CRUSH_TOOL_INPUT_COMMAND" >> ./bash.log
81+```
82+
83+That's basically it. For the full guide on how hooks work, however, read on.
202
84
203## Building Hooks
85## Building Hooks
204
86
@@ -207,20 +89,13 @@ When a hook fires, Crush:
2071. Filters hooks whose `matcher` regex matches the tool name (no matcher = match
891. Filters hooks whose `matcher` regex matches the tool name (no matcher = match
208 all).
90 all).
2092. Deduplicates by `command` (identical commands run once).
912. Deduplicates by `command` (identical commands run once).
210−3. Runs all matching hooks **in parallel** through Crush's embedded POSIX
92+3. Runs all matching hooks **in parallel** as subprocesses.
211− shell (see [Execution model](#execution-model)).
2124. Waits for all to finish (or time out), then aggregates results **in config
934. Waits for all to finish (or time out), then aggregates results **in config
213 order**: deny wins over allow, allow wins over none; `updated_input` patches
94 order**: deny wins over allow, allow wins over none; `updated_input` patches
214 shallow-merge in order.
95 shallow-merge in order.
215−5. Applies the result **before** permission checks. If the aggregated decision
216− is `deny`, the tool call is blocked and you never see a permission prompt
217− for it. If it's `allow`, Crush treats that as affirmative pre-approval and
218− also skips the prompt. Silence (no decision) falls through to the normal
219− permission flow.
220
96
221−Note that you can omit `matcher` and match in your shell script instead,
97+Note that you can omit `matcher` and match in your shell script instead, however
222−however you'll incur some additional overhead as Crush will still parse and
98+you'll incur some additional overhead as Crush will `exec` each script.
223−run each hook.
224
99
225### Input
100### Input
226
101
@@ -234,9 +109,6 @@ The available environment variables are:
234
109
235| Variable | Description |
110| Variable | Description |
236| ---------------------------- | ---------------------------------------------- |
111| ---------------------------- | ---------------------------------------------- |
237−| `CRUSH` | Always `1` when running under Crush. |
238−| `AGENT` | Always `crush`. |
239−| `AI_AGENT` | Always `crush`. |
240| `CRUSH_EVENT` | The hook event name (e.g. `PreToolUse`). |
112| `CRUSH_EVENT` | The hook event name (e.g. `PreToolUse`). |
241| `CRUSH_TOOL_NAME` | The tool being called (e.g. `bash`). |
113| `CRUSH_TOOL_NAME` | The tool being called (e.g. `bash`). |
242| `CRUSH_SESSION_ID` | Current session ID. |
114| `CRUSH_SESSION_ID` | Current session ID. |
@@ -245,10 +117,6 @@ The available environment variables are:
245| `CRUSH_TOOL_INPUT_COMMAND` | For `bash` calls: the shell command being run. |
117| `CRUSH_TOOL_INPUT_COMMAND` | For `bash` calls: the shell command being run. |
246| `CRUSH_TOOL_INPUT_FILE_PATH` | For file tools: the target file path. |
118| `CRUSH_TOOL_INPUT_FILE_PATH` | For file tools: the target file path. |
247
119
248−The `CRUSH`, `AGENT`, and `AI_AGENT` markers are also set by the `bash`
249−tool, so a script can detect "am I running under Crush?" the same way in
250−either context.
251−
252#### JSON
120#### JSON
253
121
254Standard input provides the full context as JSON:
122Standard input provides the full context as JSON:
@@ -399,12 +267,9 @@ When multiple hooks match the same tool call:
399
267
400### Timeouts
268### Timeouts
401
269
402−If a hook exceeds its timeout, Crush cancels its context and treats the
270+If a hook exceeds its timeout, the process is killed and treated as a
403−result as a non-blocking error so the tool call proceeds. The default
271+non-blocking error and the tool call proceeds. The default timeout is 30
404−timeout is 30 seconds. Shebang-dispatched subprocesses are killed through
272+seconds.
405−`exec.CommandContext`; in-process hooks get a short grace period to yield
406−and are then abandoned (the agent moves on regardless). Long-running work
407−should honor context cancellation or run out-of-process via a shebang.
408
273
409## Examples
274## Examples
410
275
@@ -571,20 +436,6 @@ process.stdin.on("end", () => {
571
436
572---
437---
573
438
574−## Claude Code compatibility
575−
576−Crush hooks are broadly compatible with [Claude Code
577−hooks](https://docs.claude.com/en/docs/claude-code/hooks): the config shape,
578−stdin payload, output envelope, and exit codes line up so most Claude Code
579−hooks run under Crush unchanged. This document covers the Crush-specific API
580−only — anything not documented here isn't guaranteed to work.
581−
582−One intentional divergence: Crush treats `updated_input` as a shallow-merge
583−patch against the original `tool_input` rather than a full replacement. Keys
584−you omit are preserved. See [Output](#output) for details.
585−
586−---
587−
588## Reference
439## Reference
589
440
590This is the official reference of the narrative above. If prose and this section
441This is the official reference of the narrative above. If prose and this section
@@ -601,10 +452,6 @@ Each entry under a `hooks.<EventName>` array:
601
452
602```jsonc
453```jsonc
603{
454{
604− // string. Optional. Friendly display name shown in the TUI. Falls back to
605− // command when omitted.
606− "name": "no-rm-rf",
607−
608 // string. Optional. Regex tested against the tool name. Omit to match all.
455 // string. Optional. Regex tested against the tool name. Omit to match all.
609 "matcher": "^bash$",
456 "matcher": "^bash$",
610
457
flake.lockdeleted−60
@@ -1,60 +0,0 @@
1−{
2− "nodes": {
3− "flake-utils": {
4− "inputs": {
5− "systems": "systems"
6− },
7− "locked": {
8− "lastModified": 1731533236,
9− "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
10− "owner": "numtide",
11− "repo": "flake-utils",
12− "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
13− "type": "github"
14− },
15− "original": {
16− "owner": "numtide",
17− "repo": "flake-utils",
18− "type": "github"
19− }
20− },
21− "nixpkgs": {
22− "locked": {
23− "lastModified": 1782964654,
24− "narHash": "sha256-oqyac50OyRdni5ZK9H7ZuAJoR3LzgsOdUcbBlUsk9lg=",
25− "owner": "NixOS",
26− "repo": "nixpkgs",
27− "rev": "3130a1cf8f7c794ea5a4760c3fa4c745d64ec269",
28− "type": "github"
29− },
30− "original": {
31− "owner": "NixOS",
32− "repo": "nixpkgs",
33− "type": "github"
34− }
35− },
36− "root": {
37− "inputs": {
38− "flake-utils": "flake-utils",
39− "nixpkgs": "nixpkgs"
40− }
41− },
42− "systems": {
43− "locked": {
44− "lastModified": 1681028828,
45− "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
46− "owner": "nix-systems",
47− "repo": "default",
48− "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
49− "type": "github"
50− },
51− "original": {
52− "owner": "nix-systems",
53− "repo": "default",
54− "type": "github"
55− }
56− }
57− },
58− "root": "root",
59− "version": 7
60−}
flake.nixdeleted−75
@@ -1,75 +0,0 @@
1−{
2− description = "Crush development environment";
3−
4− inputs = {
5− nixpkgs.url = "github:NixOS/nixpkgs";
6− flake-utils.url = "github:numtide/flake-utils";
7− };
8−
9− outputs = {
10− self,
11− nixpkgs,
12− flake-utils,
13− }:
14− flake-utils.lib.eachDefaultSystem (
15− system: let
16− pkgs = nixpkgs.legacyPackages.${system};
17− version = "devel";
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−
49− devShells.default = pkgs.mkShell {
50− buildInputs = with pkgs; [
51− # Go toolchain
52− go_1_26
53−
54− # Development tools
55− gopls # Go language server
56− golangci-lint # Linter
57− gofumpt # Formatter (stricter than gofmt)
58− go-task # Task runner
59− delve # Go debugger
60−
61− # Additional tools
62− git # Version control
63− gh # GitHub CLI
64− svu # Semantic version utility
65− sqlc # SQL code generator
66− ];
67−
68− shellHook = ''
69− # Set Go environment variables
70− export CGO_ENABLED=0
71− '';
72− };
73− }
74− );
75−}
go.mod+81−82
@@ -1,37 +1,39 @@
1module github.com/charmbracelet/crush
1module github.com/charmbracelet/crush
2
2
3−go 1.26.4
3+go 1.26.2
4
4
5require (
5require (
6− charm.land/bubbles/v2 v2.1.1
6+ charm.land/bubbles/v2 v2.1.0
7− charm.land/bubbletea/v2 v2.0.8
7+ charm.land/bubbletea/v2 v2.0.6
8− charm.land/catwalk v0.49.0
8+ charm.land/catwalk v0.37.14
9 charm.land/fang/v2 v2.0.1
9 charm.land/fang/v2 v2.0.1
10− charm.land/fantasy v0.35.0
10+ charm.land/fantasy v0.21.0
11− charm.land/glamour/v2 v2.0.1
11+ charm.land/glamour/v2 v2.0.0
12− charm.land/lipgloss/v2 v2.0.5
12+ charm.land/lipgloss/v2 v2.0.3
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.27.0
19+ github.com/alecthomas/chroma/v2 v2.23.1
20+ github.com/atotto/clipboard v0.1.4
21+ github.com/aymanbagabas/go-nativeclipboard v0.1.3
20 github.com/aymanbagabas/go-udiff v0.4.1
22 github.com/aymanbagabas/go-udiff v0.4.1
21 github.com/bmatcuk/doublestar/v4 v4.10.0
23 github.com/bmatcuk/doublestar/v4 v4.10.0
22 github.com/charlievieth/fastwalk v1.0.14
24 github.com/charlievieth/fastwalk v1.0.14
23 github.com/charmbracelet/colorprofile v0.4.3
25 github.com/charmbracelet/colorprofile v0.4.3
24− github.com/charmbracelet/openai-go v0.0.0-20260617131321-5e4b9c18c4be
26+ github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266
25− github.com/charmbracelet/ultraviolet v0.0.0-20260703014108-f5a850f9c2b7
27+ github.com/charmbracelet/ultraviolet v0.0.0-20260416155717-489999b90468
26 github.com/charmbracelet/x/ansi v0.11.7
28 github.com/charmbracelet/x/ansi v0.11.7
27 github.com/charmbracelet/x/editor v0.2.0
29 github.com/charmbracelet/x/editor v0.2.0
28 github.com/charmbracelet/x/etag v0.2.0
30 github.com/charmbracelet/x/etag v0.2.0
29− github.com/charmbracelet/x/exp/charmtone v0.0.0-20260527151214-009e6338d40d
31+ github.com/charmbracelet/x/exp/charmtone v0.0.0-20260109001716-2fbdffcb221f
30 github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f
32 github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f
31 github.com/charmbracelet/x/exp/ordered v0.1.0
33 github.com/charmbracelet/x/exp/ordered v0.1.0
32− github.com/charmbracelet/x/exp/slice v0.0.0-20260622092256-25656177ba8e
34+ github.com/charmbracelet/x/exp/slice v0.0.0-20260422141420-a6cbdff8a7e2
33 github.com/charmbracelet/x/exp/strings v0.1.0
35 github.com/charmbracelet/x/exp/strings v0.1.0
34− github.com/charmbracelet/x/powernap v0.1.6
36+ github.com/charmbracelet/x/powernap v0.1.4
35 github.com/charmbracelet/x/term v0.2.2
37 github.com/charmbracelet/x/term v0.2.2
36 github.com/clipperhouse/displaywidth v0.11.0
38 github.com/clipperhouse/displaywidth v0.11.0
37 github.com/clipperhouse/uax29/v2 v2.7.0
39 github.com/clipperhouse/uax29/v2 v2.7.0
@@ -39,40 +41,39 @@ require (
39 github.com/disintegration/imaging v1.6.2
41 github.com/disintegration/imaging v1.6.2
40 github.com/dustin/go-humanize v1.0.1
42 github.com/dustin/go-humanize v1.0.1
41 github.com/gen2brain/beeep v0.11.2
43 github.com/gen2brain/beeep v0.11.2
42− github.com/go-git/go-git/v5 v5.19.1
44+ github.com/go-git/go-git/v5 v5.18.0
43 github.com/google/uuid v1.6.0
45 github.com/google/uuid v1.6.0
44− github.com/invopop/jsonschema v0.14.0
46+ github.com/invopop/jsonschema v0.13.0
45 github.com/itchyny/gojq v0.12.19
47 github.com/itchyny/gojq v0.12.19
46 github.com/joho/godotenv v1.5.1
48 github.com/joho/godotenv v1.5.1
47 github.com/jordanella/go-ansi-paintbrush v0.0.0-20240728195301-b7ad996ecf3d
49 github.com/jordanella/go-ansi-paintbrush v0.0.0-20240728195301-b7ad996ecf3d
48 github.com/lucasb-eyer/go-colorful v1.4.0
50 github.com/lucasb-eyer/go-colorful v1.4.0
49− github.com/mattn/go-isatty v0.0.22
51+ github.com/mattn/go-isatty v0.0.21
50− github.com/modelcontextprotocol/go-sdk v1.6.1
52+ github.com/modelcontextprotocol/go-sdk v1.5.0
51− github.com/ncruces/go-sqlite3 v0.35.1
53+ github.com/ncruces/go-sqlite3 v0.33.3
52 github.com/nxadm/tail v1.4.11
54 github.com/nxadm/tail v1.4.11
53 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
55 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
54− github.com/posthog/posthog-go v1.17.5
56+ github.com/posthog/posthog-go v1.12.1
55− github.com/pressly/goose/v3 v3.27.2
57+ github.com/pressly/goose/v3 v3.27.0
56− github.com/qjebbs/go-jsons v1.0.0-alpha.6
58+ github.com/qjebbs/go-jsons v1.0.0-alpha.5
57 github.com/rivo/uniseg v0.4.7
59 github.com/rivo/uniseg v0.4.7
58− github.com/sahilm/fuzzy v0.1.3
60+ github.com/sahilm/fuzzy v0.1.1
59 github.com/sourcegraph/jsonrpc2 v0.2.1
61 github.com/sourcegraph/jsonrpc2 v0.2.1
60 github.com/spf13/cobra v1.10.2
62 github.com/spf13/cobra v1.10.2
61 github.com/stretchr/testify v1.11.1
63 github.com/stretchr/testify v1.11.1
62 github.com/swaggo/http-swagger/v2 v2.0.2
64 github.com/swaggo/http-swagger/v2 v2.0.2
63 github.com/swaggo/swag v1.16.6
65 github.com/swaggo/swag v1.16.6
64− github.com/tidwall/gjson v1.19.0
66+ github.com/tidwall/gjson v1.18.0
65 github.com/tidwall/sjson v1.2.5
67 github.com/tidwall/sjson v1.2.5
66 github.com/zeebo/xxh3 v1.1.0
68 github.com/zeebo/xxh3 v1.1.0
67 go.uber.org/goleak v1.3.0
69 go.uber.org/goleak v1.3.0
68− golang.design/x/clipboard v0.8.0
69− golang.org/x/net v0.56.0
70+ golang.org/x/net v0.53.0
70− golang.org/x/sync v0.21.0
71+ golang.org/x/sync v0.20.0
71− golang.org/x/sys v0.46.0
72+ golang.org/x/sys v0.43.0
72− golang.org/x/text v0.38.0
73+ golang.org/x/text v0.36.0
73 gopkg.in/natefinch/lumberjack.v2 v2.2.1
74 gopkg.in/natefinch/lumberjack.v2 v2.2.1
74 gopkg.in/yaml.v3 v3.0.1
75 gopkg.in/yaml.v3 v3.0.1
75− modernc.org/sqlite v1.53.0
76+ modernc.org/sqlite v1.49.1
76 mvdan.cc/sh/moreinterp v0.0.0-20250902163504-3cf4fd5717a5
77 mvdan.cc/sh/moreinterp v0.0.0-20250902163504-3cf4fd5717a5
77 mvdan.cc/sh/v3 v3.13.1
78 mvdan.cc/sh/v3 v3.13.1
78)
79)
@@ -86,41 +87,40 @@ require (
86 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 // indirect
87 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 // indirect
87 github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect
88 github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect
88 github.com/KyleBanks/depth v1.2.1 // indirect
89 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
92− github.com/aws/aws-sdk-go-v2 v1.42.0 // indirect
91+ github.com/aws/aws-sdk-go-v2 v1.41.6 // indirect
93− github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.13 // indirect
92+ github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 // indirect
94− github.com/aws/aws-sdk-go-v2/config v1.32.25 // indirect
93+ github.com/aws/aws-sdk-go-v2/config v1.32.16 // indirect
95− github.com/aws/aws-sdk-go-v2/credentials v1.19.24 // indirect
94+ github.com/aws/aws-sdk-go-v2/credentials v1.19.15 // indirect
96− github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29 // indirect
95+ github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.22 // indirect
97− github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.29 // indirect
96+ github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.22 // indirect
98− github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.29 // indirect
97+ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.22 // indirect
99− github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30 // indirect
98+ github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.23 // indirect
100− github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12 // indirect
99+ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.8 // indirect
101− github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29 // indirect
100+ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.22 // indirect
102− github.com/aws/aws-sdk-go-v2/service/signin v1.2.0 // indirect
101+ github.com/aws/aws-sdk-go-v2/service/signin v1.0.10 // indirect
103− github.com/aws/aws-sdk-go-v2/service/sso v1.31.3 // indirect
102+ github.com/aws/aws-sdk-go-v2/service/sso v1.30.16 // indirect
104− github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6 // indirect
103+ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.20 // indirect
105− github.com/aws/aws-sdk-go-v2/service/sts v1.43.3 // indirect
104+ github.com/aws/aws-sdk-go-v2/service/sts v1.42.0 // indirect
106− github.com/aws/smithy-go v1.27.3 // indirect
105+ github.com/aws/smithy-go v1.25.0 // indirect
107 github.com/aymerick/douceur v0.2.0 // indirect
106 github.com/aymerick/douceur v0.2.0 // indirect
108 github.com/bahlo/generic-list-go v0.2.0 // indirect
107 github.com/bahlo/generic-list-go v0.2.0 // indirect
109 github.com/buger/jsonparser v1.1.2 // indirect
108 github.com/buger/jsonparser v1.1.2 // indirect
110 github.com/cespare/xxhash/v2 v2.3.0 // indirect
109 github.com/cespare/xxhash/v2 v2.3.0 // indirect
111 github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab // indirect
110 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.4.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.2.1 // indirect
116+ github.com/dlclark/regexp2 v1.11.5 // indirect
117− github.com/ebitengine/purego v0.10.1 // indirect
117+ github.com/ebitengine/purego v0.10.0 // 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.1.0 // indirect
119+ github.com/felixge/httpsnoop v1.0.4 // 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.8.0 // indirect
123− github.com/go-json-experiment/json v0.0.0-20260623181947-01eb4420fa68 // indirect
123+ github.com/go-json-experiment/json v0.0.0-20260214004413-d219187c3433 // 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
@@ -135,9 +135,9 @@ require (
135 github.com/godbus/dbus/v5 v5.2.2 // indirect
135 github.com/godbus/dbus/v5 v5.2.2 // indirect
136 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
136 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
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.2 // 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.17 // indirect
140+ github.com/googleapis/enterprise-certificate-proxy v0.3.15 // 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,13 +147,15 @@ 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.3.0 // indirect
150− github.com/kaptinlin/jsonpointer v0.4.26 // indirect
151+ github.com/kaptinlin/jsonpointer v0.4.17 // indirect
151− github.com/kaptinlin/jsonschema v0.9.2 // indirect
152+ github.com/kaptinlin/jsonschema v0.7.7 // indirect
153+ github.com/kaptinlin/messageformat-go v0.4.19 // indirect
152− github.com/klauspost/compress v1.18.6 // indirect
154+ github.com/klauspost/compress v1.18.5 // indirect
153− github.com/klauspost/cpuid/v2 v2.3.0 // indirect
155+ github.com/klauspost/cpuid/v2 v2.2.10 // indirect
154 github.com/klauspost/pgzip v1.2.6 // indirect
156 github.com/klauspost/pgzip v1.2.6 // indirect
155 github.com/mailru/easyjson v0.7.7 // indirect
157 github.com/mailru/easyjson v0.7.7 // indirect
156− github.com/mattn/go-runewidth v0.0.24 // indirect
158+ github.com/mattn/go-runewidth v0.0.23 // indirect
157 github.com/mfridman/interpolate v0.0.2 // indirect
159 github.com/mfridman/interpolate v0.0.2 // indirect
158 github.com/microcosm-cc/bluemonday v1.0.27 // indirect
160 github.com/microcosm-cc/bluemonday v1.0.27 // indirect
159 github.com/mitchellh/mapstructure v1.5.0 // indirect
161 github.com/mitchellh/mapstructure v1.5.0 // indirect
@@ -162,13 +164,12 @@ require (
162 github.com/muesli/mango-cobra v1.2.0 // indirect
164 github.com/muesli/mango-cobra v1.2.0 // indirect
163 github.com/muesli/mango-pflag v0.1.0 // indirect
165 github.com/muesli/mango-pflag v0.1.0 // indirect
164 github.com/muesli/roff v0.1.0 // indirect
166 github.com/muesli/roff v0.1.0 // indirect
165− github.com/ncruces/go-sqlite3-wasm/v3 v3.1.35302 // indirect
167+ github.com/ncruces/go-sqlite3-wasm v1.1.1-0.20260409221933-87e4b35a38d0 // indirect
166 github.com/ncruces/go-strftime v1.0.0 // indirect
168 github.com/ncruces/go-strftime v1.0.0 // indirect
167 github.com/ncruces/julianday v1.0.0 // indirect
169 github.com/ncruces/julianday v1.0.0 // indirect
168 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
170 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
169− github.com/pb33f/ordered-map/v2 v2.3.1 // indirect
170− github.com/pierrec/lz4/v4 v4.1.26 // indirect
171+ github.com/pierrec/lz4/v4 v4.1.25 // indirect
171− github.com/pjbgf/sha1cd v0.6.0 // indirect
172+ github.com/pjbgf/sha1cd v0.3.2 // indirect
172 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
173 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
173 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
174 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
174 github.com/segmentio/asm v1.2.1 // indirect
175 github.com/segmentio/asm v1.2.1 // indirect
@@ -183,39 +184,37 @@ require (
183 github.com/tidwall/pretty v1.2.1 // indirect
184 github.com/tidwall/pretty v1.2.1 // indirect
184 github.com/u-root/u-root v0.14.1-0.20250807200646-5e7721023dc7 // indirect
185 github.com/u-root/u-root v0.14.1-0.20250807200646-5e7721023dc7 // indirect
185 github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 // indirect
186 github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 // indirect
187+ github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
186 github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
188 github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
187 github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
189 github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
188 github.com/yuin/goldmark v1.7.8 // indirect
190 github.com/yuin/goldmark v1.7.8 // indirect
189 github.com/yuin/goldmark-emoji v1.0.5 // indirect
191 github.com/yuin/goldmark-emoji v1.0.5 // indirect
190 go.opentelemetry.io/auto/sdk v1.2.1 // indirect
192 go.opentelemetry.io/auto/sdk v1.2.1 // indirect
191− go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0 // indirect
193+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 // indirect
192− go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 // indirect
194+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 // indirect
193− go.opentelemetry.io/otel v1.44.0 // indirect
195+ go.opentelemetry.io/otel v1.43.0 // indirect
194− go.opentelemetry.io/otel/metric v1.44.0 // indirect
196+ go.opentelemetry.io/otel/metric v1.43.0 // indirect
195− go.opentelemetry.io/otel/trace v1.44.0 // indirect
197+ go.opentelemetry.io/otel/trace v1.43.0 // indirect
196 go.uber.org/multierr v1.11.0 // indirect
198 go.uber.org/multierr v1.11.0 // indirect
197 go.yaml.in/yaml/v4 v4.0.0-rc.3 // indirect
199 go.yaml.in/yaml/v4 v4.0.0-rc.3 // indirect
198− golang.design/x/x11 v0.2.0 // indirect
199− golang.org/x/crypto v0.53.0 // indirect
200+ golang.org/x/crypto v0.50.0 // indirect
200− golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f // indirect
201− golang.org/x/exp/shiny v0.0.0-20250606033433-dcc06ee1d476 // indirect
201+ golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect
202− golang.org/x/image v0.43.0 // indirect
202+ golang.org/x/image v0.38.0 // indirect
203− golang.org/x/mobile v0.0.0-20250606033058-a2a15c67f36f // indirect
204− golang.org/x/mod v0.36.0 // indirect
203+ golang.org/x/mod v0.34.0 // indirect
205 golang.org/x/oauth2 v0.36.0 // indirect
204 golang.org/x/oauth2 v0.36.0 // indirect
206− golang.org/x/term v0.44.0 // indirect
205+ golang.org/x/term v0.42.0 // indirect
207 golang.org/x/time v0.15.0 // indirect
206 golang.org/x/time v0.15.0 // indirect
208− golang.org/x/tools v0.45.0 // indirect
207+ golang.org/x/tools v0.43.0 // indirect
209− google.golang.org/api v0.286.0 // indirect
208+ google.golang.org/api v0.276.0 // indirect
210− google.golang.org/genai v1.62.0 // indirect
209+ google.golang.org/genai v1.54.0 // indirect
211− google.golang.org/genproto/googleapis/rpc v0.0.0-20260622175928-b703f567277d // indirect
210+ google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect
212− google.golang.org/grpc v1.81.1 // indirect
211+ google.golang.org/grpc v1.80.0 // indirect
213 google.golang.org/protobuf v1.36.11 // indirect
212 google.golang.org/protobuf v1.36.11 // indirect
214 gopkg.in/dnaeon/go-vcr.v4 v4.0.6-0.20251110073552-01de4eb40290 // indirect
213 gopkg.in/dnaeon/go-vcr.v4 v4.0.6-0.20251110073552-01de4eb40290 // indirect
215 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
214 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
216 gopkg.in/warnings.v0 v0.1.2 // indirect
215 gopkg.in/warnings.v0 v0.1.2 // indirect
217 gopkg.in/yaml.v2 v2.4.0 // indirect
216 gopkg.in/yaml.v2 v2.4.0 // indirect
218− modernc.org/libc v1.73.4 // indirect
217+ modernc.org/libc v1.72.0 // indirect
219 modernc.org/mathutil v1.7.1 // indirect
218 modernc.org/mathutil v1.7.1 // indirect
220 modernc.org/memory v1.11.0 // indirect
219 modernc.org/memory v1.11.0 // indirect
221)
220)
go.sum+176−178
@@ -1,17 +1,17 @@
1−charm.land/bubbles/v2 v2.1.1 h1:7r55WzBxpo/R3z98hGmY7KKPd3ET6vsf0Fb9sDHOV60=
1+charm.land/bubbles/v2 v2.1.0 h1:YSnNh5cPYlYjPxRrzs5VEn3vwhtEn3jVGRBT3M7/I0g=
2−charm.land/bubbles/v2 v2.1.1/go.mod h1:GE6M31gaWZVXzGw73OeuTTgy4lX+OtkH0E5ymnNsHxo=
2+charm.land/bubbles/v2 v2.1.0/go.mod h1:l97h4hym2hvWBVfmJDtrEHHCtkIKeTEb3TTJ4ZOB3wY=
3−charm.land/bubbletea/v2 v2.0.8 h1:SxTJMhCAI3lbPmy4SgX5LWZ24AdINr4I6UEqzZvYJuY=
3+charm.land/bubbletea/v2 v2.0.6 h1:UHN/91OyuhaOFGSrBXQ/hMZD8IO1Uc4BvHlgHXL2WJo=
4−charm.land/bubbletea/v2 v2.0.8/go.mod h1:2SkdgoTXluXJHOUwAoRlRXF/28vklb1rFl6GcgV1/ss=
4+charm.land/bubbletea/v2 v2.0.6/go.mod h1:MH/D8ZLlN3op37vQvijKuU29g3rqTp+aQapURFonF9g=
5−charm.land/catwalk v0.49.0 h1:pXcHh9H76VvwGqPYMZhJe5vRqMLpzGsv0anJArKw70g=
5+charm.land/catwalk v0.37.14 h1:PYz9777U3vnLgHQWriQA6lHwSSZLBnyvCF77E46W02M=
6−charm.land/catwalk v0.49.0/go.mod h1:bw6/oiChsa9Fkr8LgYn84KrbbJY2z1+m7Jmlmmv3B2A=
6+charm.land/catwalk v0.37.14/go.mod h1:IvMXm7qMKvYuWWlN5A4dA0bTgYg4clG1GAeU9/NlY0w=
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.35.0 h1:iFES7cnt3/o20T01+y2PDkHj5dHEWRFQH0vSXYzV8xo=
9+charm.land/fantasy v0.21.0 h1:fYeW5axjn7KxJFvXavYhToZDG83zM+or1XEpHqX/GAo=
10−charm.land/fantasy v0.35.0/go.mod h1:rUqUhunz+c6k66L0hHd51CrXB3SSzPNKkwBrzIe6XnY=
10+charm.land/fantasy v0.21.0/go.mod h1:GYYvvDAS3u/Wpb5hX0VxCJPhQCaffHNNeBRtGw04IBI=
11−charm.land/glamour/v2 v2.0.1 h1:xl+r00A4aJWU0z8fgwKd9fQQ4rsphqGUzuEiXZP5n+c=
11+charm.land/glamour/v2 v2.0.0 h1:IDBoqLEy7Hdpb9VOXN+khLP/XSxtJy1VsHuW/yF87+U=
12−charm.land/glamour/v2 v2.0.1/go.mod h1:jo9z8XqVKPeEFMVdvCRLGk++RyJ3CdUwgNr7EvXLw3k=
12+charm.land/glamour/v2 v2.0.0/go.mod h1:kjq9WB0s8vuUYZNYey2jp4Lgd9f4cKdzAw88FZtpj/w=
13−charm.land/lipgloss/v2 v2.0.5 h1:kbNxgeeUOYv5J0YdpxFjfvf3dFvqH8Aci4zB6xqFtrY=
13+charm.land/lipgloss/v2 v2.0.3 h1:yM2zJ4Cf5Y51b7RHIwioil4ApI/aypFXXVHSwlM6RzU=
14−charm.land/lipgloss/v2 v2.0.5/go.mod h1:9oqhxt4yxIMe6q5A4kHr44DremZk7J9UNh74GlWa5nc=
14+charm.land/lipgloss/v2 v2.0.3/go.mod h1:7myLU9iG/3xluAWzpY/fSxYYHCgoKTie7laxk6ATwXA=
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.27.0 h1:FodwmyOBgJULFYmDqibcp9pvfDLWdtPRh9v/r5BXYZs=
50+github.com/alecthomas/chroma/v2 v2.23.1 h1:nv2AVZdTyClGbVQkIzlDm/rnhk1E9bU9nXwmZ/Vk/iY=
51−github.com/alecthomas/chroma/v2 v2.27.0/go.mod h1:NjJ3ciIgrqBNeIkWZ4e46nseoLDslxU1LmfCoL+wcY8=
51+github.com/alecthomas/chroma/v2 v2.23.1/go.mod h1:NqVhfBR0lte5Ouh3DcthuUCTUpDC9cxBOfyMbMQPs3o=
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=
56github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
54github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
57github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM=
55github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM=
58github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA=
56github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA=
59github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
57github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
60github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
58github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
61−github.com/aws/aws-sdk-go-v2 v1.42.0 h1:XvXMJTkFQtpBKIWZnmr9ZEOc2InWM2yldjXEJ/bymhA=
59+github.com/aws/aws-sdk-go-v2 v1.41.6 h1:1AX0AthnBQzMx1vbmir3Y4WsnJgiydmnJjiLu+LvXOg=
62−github.com/aws/aws-sdk-go-v2 v1.42.0/go.mod h1:27+ACypSLljLAEKsCYOmrjKh83vuTRkuAe9Uv/3A4bg=
60+github.com/aws/aws-sdk-go-v2 v1.41.6/go.mod h1:dy0UzBIfwSeot4grGvY1AqFWN5zgziMmWGzysDnHFcQ=
63−github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.13 h1:p1BBrg/Hhp6uK7zpejeI8QFXHJeC/mynzi04Sl03k9g=
61+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 h1:eBMB84YGghSocM7PsjmmPffTa+1FBUeNvGvFou6V/4o=
64−github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.13/go.mod h1:8cIfkE9MDhkRZGpQ22aV6/lkYeYSozpz16Smrs5x4Ls=
62+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI=
65−github.com/aws/aws-sdk-go-v2/config v1.32.25 h1:ACCejvStYoilgwrfegSt5ZntCbPrk52qfwyNcnl3omM=
63+github.com/aws/aws-sdk-go-v2/config v1.32.16 h1:Q0iQ7quUgJP0F/SCRTieScnaMdXr9h/2+wze1u3cNeM=
66−github.com/aws/aws-sdk-go-v2/config v1.32.25/go.mod h1:LJyU8sDRbXUxFn8xMJIGP+v9QYYwveNLI8a/giAOiAs=
64+github.com/aws/aws-sdk-go-v2/config v1.32.16/go.mod h1:duCCnJEFqpt2RC6no1iK6q+8HpwOAkiUua0pY507dQc=
67−github.com/aws/aws-sdk-go-v2/credentials v1.19.24 h1:2hQqYCV9yqyePQ9o6dCrZc/zO8U3TwPr9mIKlZnPu/I=
65+github.com/aws/aws-sdk-go-v2/credentials v1.19.15 h1:fyvgWTszojq8hEnMi8PPBTvZdTtEVmAVyo+NFLHBhH4=
68−github.com/aws/aws-sdk-go-v2/credentials v1.19.24/go.mod h1:IDwpACtwqHLISdzfwUUNq4P9DsB/h5BLg4FwJPNfqFY=
66+github.com/aws/aws-sdk-go-v2/credentials v1.19.15/go.mod h1:gJiYyMOjNg8OEdRWOf3CrFQxM2a98qmrtjx1zuiQfB8=
69−github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29 h1:r6qZHbT+wxgWO/e9vYNUEtg7lv5+UN3pRqKhLXvnArg=
67+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.22 h1:IOGsJ1xVWhsi+ZO7/NW8OuZZBtMJLZbk4P5HDjJO0jQ=
70−github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29/go.mod h1:QRnaRcTVGKPGRy8w78HMQtKUGRYcnMZAANATkeVA6Mo=
68+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.22/go.mod h1:b+hYdbU+jGKfXE8kKM6g1+h+L/Go3vMvzlxBsiuGsxg=
71−github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.29 h1:f3vKqSo13fhTYb+JEcXwXefZQE26I1FB5eTSniU67ko=
69+github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.22 h1:GmLa5Kw1ESqtFpXsx5MmC84QWa/ZrLZvlJGa2y+4kcQ=
72−github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.29/go.mod h1:MzoLFUArKGpGD+ukmPiTPG1X5x4o6M2kq4v2dr1FiEc=
70+github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.22/go.mod h1:6sW9iWm9DK9YRpRGga/qzrzNLgKpT2cIxb7Vo2eNOp0=
73−github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.29 h1:RdwIf/CuUsvJX3RgJagbOyotl/cxoLY4xviKuE7p2GY=
71+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.22 h1:dY4kWZiSaXIzxnKlj17nHnBcXXBfac6UlsAx2qL6XrU=
74−github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.29/go.mod h1:71wt8W2EgswdZy9Mf9KNnzxZ3TiZlv4caKghPktDOkA=
72+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.22/go.mod h1:KIpEUx0JuRZLO7U6cbV204cWAEco2iC3l061IxlwLtI=
75−github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30 h1:VTGy885W5DKBxWRUJbym9hytNaYzsyaPkCHGRRMAOhU=
73+github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.23 h1:FPXsW9+gMuIeKmz7j6ENWcWtBGTe1kH8r9thNt5Uxx4=
76−github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30/go.mod h1:AS0HycUvJRFvTt613AYDOgO2jzw+00cVSMny8XB3yMY=
74+github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.23/go.mod h1:7J8iGMdRKk6lw2C+cMIphgAnT8uTwBwNOsGkyOCm80U=
77−github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12 h1:ZD2+BSw9vFsNlKYIasSNt3uDbjqqXIBcM13UJv/Lx2k=
75+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.8 h1:HtOTYcbVcGABLOVuPYaIihj6IlkqubBwFj10K5fxRek=
78−github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12/go.mod h1:Ms4zlcVBbXbiP7EVLhl+lgjvA/a7YphqQ3Ih3174EmI=
76+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.8/go.mod h1:VsK9abqQeGlzPgUr+isNWzPlK2vKe9INMLWnY65f5Xs=
79−github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29 h1:DRebniUGZ2MqiiIVmQJ04vIXr918hubdHMnarSLEWyU=
77+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.22 h1:PUmZeJU6Y1Lbvt9WFuJ0ugUK2xn6hIWUBBbKuOWF30s=
80−github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29/go.mod h1:LfRkPCD8YHDM2E5eTkos2UpwYeZnBcVarTa8L59bJHA=
78+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.22/go.mod h1:nO6egFBoAaoXze24a2C0NjQCvdpk8OueRoYimvEB9jo=
81−github.com/aws/aws-sdk-go-v2/service/signin v1.2.0 h1:3nXpRcFwRCW8n7HgO2QGy0Dc20eQNfBuUemGQhpF8m8=
79+github.com/aws/aws-sdk-go-v2/service/signin v1.0.10 h1:a1Fq/KXn75wSzoJaPQTgZO0wHGqE9mjFnylnqEPTchA=
82−github.com/aws/aws-sdk-go-v2/service/signin v1.2.0/go.mod h1:LxYujSTLPRlp2vTtcUO/+1ilrew8ytt6SvQyOgejzFQ=
80+github.com/aws/aws-sdk-go-v2/service/signin v1.0.10/go.mod h1:p6+MXNxW7IA6dMgHfTAzljuwSKD0NCm/4lbS4t6+7vI=
83−github.com/aws/aws-sdk-go-v2/service/sso v1.31.3 h1:ey1XLTYXb9PcLt4535632o5kCGXNXEhNb620Dqwuylo=
81+github.com/aws/aws-sdk-go-v2/service/sso v1.30.16 h1:x6bKbmDhsgSZwv6q19wY/u3rLk/3FGjJWyqKcIRufpE=
84−github.com/aws/aws-sdk-go-v2/service/sso v1.31.3/go.mod h1:Lk7PlmoTYryQmyBG0EXqj5BcUbj3whXdU2s3yGI3EAc=
82+github.com/aws/aws-sdk-go-v2/service/sso v1.30.16/go.mod h1:CudnEVKRtLn0+3uMV0yEXZ+YZOKnAtUJ5DmDhilVnIw=
85−github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6 h1:yLr03zQE/5Eu5l3QU0Si+xMbLMbSDF2YXsigqXngs6g=
83+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.20 h1:oK/njaL8GtyEihkWMD4k3VgHCT64RQKkZwh0DG5j8ak=
86−github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6/go.mod h1:Q5N6icH+KJZDLh+ESNwzdv6cZ6vLFF/egy3IOxWhmz4=
84+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.20/go.mod h1:JHs8/y1f3zY7U5WcuzoJ/yAYGYtNIVPKLIbp61euvmg=
87−github.com/aws/aws-sdk-go-v2/service/sts v1.43.3 h1:VrIhKRCSK1umelSgB9RghvA9RTUYeQffyAS5ApXehNI=
85+github.com/aws/aws-sdk-go-v2/service/sts v1.42.0 h1:ks8KBcZPh3PYISr5dAiXCM5/Thcuxk8l+PG4+A0exds=
88−github.com/aws/aws-sdk-go-v2/service/sts v1.43.3/go.mod h1:r8wkDOuLaaMFqFiYAb8dGY2A3gJCOujMc6CFOVC4Zhc=
86+github.com/aws/aws-sdk-go-v2/service/sts v1.42.0/go.mod h1:pFw33T0WLvXU3rw1WBkpMlkgIn54eCB5FYLhjDc9Foo=
89−github.com/aws/smithy-go v1.27.3 h1:F3Zb497UhhskkfpJmfkXswyo+t0sh9OTBnIHjogWbVY=
87+github.com/aws/smithy-go v1.25.0 h1:Sz/XJ64rwuiKtB6j98nDIPyYrV1nVNJ4YU74gttcl5U=
90−github.com/aws/smithy-go v1.27.3/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc=
88+github.com/aws/smithy-go v1.25.0/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,28 +106,30 @@ 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-20260617131321-5e4b9c18c4be h1:pg+OWlIkk9HOe/8P5J95aKe2wGDzFUiiyFOUpwR30B4=
109+github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266 h1:BW/sZtyd1JyYy0h5adMm3tzpNyL857LWjuTRET6OhpY=
110−github.com/charmbracelet/openai-go v0.0.0-20260617131321-5e4b9c18c4be/go.mod h1:1DahUaExbUZx/jD+FNT2PKP4L9rLE5+ZBRuI8mZjd/E=
110+github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266/go.mod h1:1DahUaExbUZx/jD+FNT2PKP4L9rLE5+ZBRuI8mZjd/E=
111−github.com/charmbracelet/ultraviolet v0.0.0-20260703014108-f5a850f9c2b7 h1:3FmWoGNWK4STvqg0O0Aeav2T7rodWJAPeF0QpH+8gFw=
111+github.com/charmbracelet/ultraviolet v0.0.0-20260416155717-489999b90468 h1:Q9fO0y1Zo5KB/5Vu8JZoLGm1N3RzF9bNj3Ao3xoR+Ac=
112−github.com/charmbracelet/ultraviolet v0.0.0-20260703014108-f5a850f9c2b7/go.mod h1:f/jRa757WUmaOZrbPspXymbg/GnbF+rwe4OLsG7aXYo=
112+github.com/charmbracelet/ultraviolet v0.0.0-20260416155717-489999b90468/go.mod h1:bAAz7dh/FTYfC+oiHavL4mX1tOIBZ0ZwYjSi3qE6ivM=
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=
116github.com/charmbracelet/x/editor v0.2.0/go.mod h1:p3oQ28TSL3YPd+GKJ1fHWcp+7bVGpedHpXmo0D6t1dY=
116github.com/charmbracelet/x/editor v0.2.0/go.mod h1:p3oQ28TSL3YPd+GKJ1fHWcp+7bVGpedHpXmo0D6t1dY=
117github.com/charmbracelet/x/etag v0.2.0 h1:Euj1VkheoHfTYA9y+TCwkeXF/hN8Fb9l4LqZl79pt04=
117github.com/charmbracelet/x/etag v0.2.0 h1:Euj1VkheoHfTYA9y+TCwkeXF/hN8Fb9l4LqZl79pt04=
118github.com/charmbracelet/x/etag v0.2.0/go.mod h1:C1B7/bsgvzzxpfu0Rabbd+rTHJa5TmC/qgTseCf6DF0=
118github.com/charmbracelet/x/etag v0.2.0/go.mod h1:C1B7/bsgvzzxpfu0Rabbd+rTHJa5TmC/qgTseCf6DF0=
119−github.com/charmbracelet/x/exp/charmtone v0.0.0-20260527151214-009e6338d40d h1:sMilwx1YIYTrQva6jsB522AoRYAerNaDIKP4ZPtUq0A=
119+github.com/charmbracelet/x/exp/charmtone v0.0.0-20260109001716-2fbdffcb221f h1:OKFNbG2sSmgpQW9EC3gYNG+QrcQ4+wWYjzfmJvWkkDo=
120−github.com/charmbracelet/x/exp/charmtone v0.0.0-20260527151214-009e6338d40d/go.mod h1:nsExn0DGyX0lh9LwLHTn2Gg+hafdzfSXnC+QmEJTZFY=
120+github.com/charmbracelet/x/exp/charmtone v0.0.0-20260109001716-2fbdffcb221f/go.mod h1:nsExn0DGyX0lh9LwLHTn2Gg+hafdzfSXnC+QmEJTZFY=
121github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f h1:pk6gmGpCE7F3FcjaOEKYriCvpmIN4+6OS/RD0vm4uIA=
121github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f h1:pk6gmGpCE7F3FcjaOEKYriCvpmIN4+6OS/RD0vm4uIA=
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-20260622092256-25656177ba8e h1:TerxTCW/3BrnpqKxeouW0cWSjZb7PsVAmtNftRAAFRE=
125+github.com/charmbracelet/x/exp/slice v0.0.0-20260422141420-a6cbdff8a7e2 h1:EXQ7j9kQUGILoSIbxrr1osK9Ca3xqc6EJ7710FIiI3U=
126−github.com/charmbracelet/x/exp/slice v0.0.0-20260622092256-25656177ba8e/go.mod h1:vqEfX6xzqW1pKKZUUiFOKg0OQ7bCh54Q2vR/tserrRA=
126+github.com/charmbracelet/x/exp/slice v0.0.0-20260422141420-a6cbdff8a7e2/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/powernap v0.1.6 h1:tsnQWQVl9arYm5S/tQVXuMJcvnkUNNkXhBWlEBDRNqM=
129+github.com/charmbracelet/x/json v0.2.0 h1:DqB+ZGx2h+Z+1s98HOuOyli+i97wsFQIxP2ZQANTPrQ=
130+github.com/charmbracelet/x/json v0.2.0/go.mod h1:opFIflx2YgXgi49xVUu8gEQ21teFAxyMwvOiZhIvWNM=
131+github.com/charmbracelet/x/powernap v0.1.4 h1:BPS652Y1qB+xEOWYqLydyJKgH2nRS2HYWGGVTs1TEZ4=
130−github.com/charmbracelet/x/powernap v0.1.6/go.mod h1:cmdl5zlP5mR8TF2Y68UKc7hdGUDiSJ2+4hk0h04Hsx4=
132+github.com/charmbracelet/x/powernap v0.1.4/go.mod h1:cmdl5zlP5mR8TF2Y68UKc7hdGUDiSJ2+4hk0h04Hsx4=
131github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk=
133github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk=
132github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI=
134github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI=
133github.com/charmbracelet/x/termios v0.1.1 h1:o3Q2bT8eqzGnGPOYheoYS8eEleT5ZVNYNy8JawjaNZY=
135github.com/charmbracelet/x/termios v0.1.1 h1:o3Q2bT8eqzGnGPOYheoYS8eEleT5ZVNYNy8JawjaNZY=
@@ -144,8 +146,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6N
144github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
146github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
145github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s=
147github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s=
146github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE=
148github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE=
147−github.com/cyphar/filepath-securejoin v0.6.1 h1:5CeZ1jPXEiYt3+Z6zqprSAgSWiggmpVyciv8syjIpVE=
149+github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s=
148−github.com/cyphar/filepath-securejoin v0.6.1/go.mod h1:A8hd4EnAeyujCJRrICiOWqjS1AX0a9kM5XL+NwKoYSc=
150+github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
149github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
151github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
150github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
152github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
151github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
153github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
@@ -154,14 +156,14 @@ github.com/denisbrodbeck/machineid v1.0.1 h1:geKr9qtkB876mXguW2X6TU4ZynleN6ezuMS
154github.com/denisbrodbeck/machineid v1.0.1/go.mod h1:dJUwb7PTidGDeYyUBmXZ2GphQBbjJCrnectwCyxcUSI=
156github.com/denisbrodbeck/machineid v1.0.1/go.mod h1:dJUwb7PTidGDeYyUBmXZ2GphQBbjJCrnectwCyxcUSI=
155github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c=
157github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c=
156github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
158github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
157−github.com/dlclark/regexp2/v2 v2.2.1 h1:mf4KkFUj0gJuarK8P+LgiS+Lit7m9N1yAwEfPbee7R0=
159+github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ=
158−github.com/dlclark/regexp2/v2 v2.2.1/go.mod h1:avUrQvPaLz2DrFNHJF0taWAFFX2C1GMSSoeiqFjcBmU=
160+github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
159github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
161github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
160github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
162github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
161github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
163github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
162github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
164github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
163−github.com/ebitengine/purego v0.10.1 h1:dewVBCBT2GaMu1SrNTYxQhgQBethzfhiwvZiLGP/qyY=
165+github.com/ebitengine/purego v0.10.0 h1:QIw4xfpWT6GWTzaW5XEKy3HXoqrJGx1ijYHzTF0/ISU=
164−github.com/ebitengine/purego v0.10.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
166+github.com/ebitengine/purego v0.10.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
165github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA=
167github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA=
166github.com/envoyproxy/go-control-plane/envoy v1.37.0 h1:u3riX6BoYRfF4Dr7dwSOroNfdSbEPe9Yyl09/B6wBrQ=
168github.com/envoyproxy/go-control-plane/envoy v1.37.0 h1:u3riX6BoYRfF4Dr7dwSOroNfdSbEPe9Yyl09/B6wBrQ=
167github.com/envoyproxy/go-control-plane/envoy v1.37.0/go.mod h1:DReE9MMrmecPy+YvQOAOHNYMALuowAnbjjEMkkWOi6A=
169github.com/envoyproxy/go-control-plane/envoy v1.37.0/go.mod h1:DReE9MMrmecPy+YvQOAOHNYMALuowAnbjjEMkkWOi6A=
@@ -169,8 +171,8 @@ github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMD
169github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0=
171github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0=
170github.com/esiqveland/notify v0.13.3 h1:QCMw6o1n+6rl+oLUfg8P1IIDSFsDEb2WlXvVvIJbI/o=
172github.com/esiqveland/notify v0.13.3 h1:QCMw6o1n+6rl+oLUfg8P1IIDSFsDEb2WlXvVvIJbI/o=
171github.com/esiqveland/notify v0.13.3/go.mod h1:hesw/IRYTO0x99u1JPweAl4+5mwXJibQVUcP0Iu5ORE=
173github.com/esiqveland/notify v0.13.3/go.mod h1:hesw/IRYTO0x99u1JPweAl4+5mwXJibQVUcP0Iu5ORE=
172−github.com/felixge/httpsnoop v1.1.0 h1:3YtUj32ZZkqZtt3sZZsClsymw/QDuVfpNhoA31zeORc=
174+github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
173−github.com/felixge/httpsnoop v1.1.0/go.mod h1:Zqxgdd+1Rkcz8euOqdr7lqgCRJztwr5hp9vDSi5UZCE=
175+github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
174github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
176github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
175github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
177github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
176github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
178github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
@@ -178,12 +180,12 @@ github.com/gen2brain/beeep v0.11.2 h1:+KfiKQBbQCuhfJFPANZuJ+oxsSKAYNe88hIpJuyKWD
178github.com/gen2brain/beeep v0.11.2/go.mod h1:jQVvuwnLuwOcdctHn/uyh8horSBNJ8uGb9Cn2W4tvoc=
180github.com/gen2brain/beeep v0.11.2/go.mod h1:jQVvuwnLuwOcdctHn/uyh8horSBNJ8uGb9Cn2W4tvoc=
179github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
181github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
180github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
182github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
181−github.com/go-git/go-billy/v5 v5.9.0 h1:jItGXszUDRtR/AlferWPTMN4j38BQ88XnXKbilmmBPA=
183+github.com/go-git/go-billy/v5 v5.8.0 h1:I8hjc3LbBlXTtVuFNJuwYuMiHvQJDq1AT6u4DwDzZG0=
182−github.com/go-git/go-billy/v5 v5.9.0/go.mod h1:jCnQMLj9eUgGU7+ludSTYoZL/GGmii14RxKFj7ROgHw=
184+github.com/go-git/go-billy/v5 v5.8.0/go.mod h1:RpvI/rw4Vr5QA+Z60c6d6LXH0rYJo0uD5SqfmrrheCY=
183−github.com/go-git/go-git/v5 v5.19.1 h1:nX27AnaU43/K5bKktKwgBmR9lawoYVe1Ckg0rgzzN00=
185+github.com/go-git/go-git/v5 v5.18.0 h1:O831KI+0PR51hM2kep6T8k+w0/LIAD490gvqMCvL5hM=
184−github.com/go-git/go-git/v5 v5.19.1/go.mod h1:Pb1v0c7/g8aGQJwx9Us09W85yGoyvSwuhEGMH7zjDKQ=
186+github.com/go-git/go-git/v5 v5.18.0/go.mod h1:pW/VmeqkanRFqR6AljLcs7EA7FbZaN5MQqO7oZADXpo=
185−github.com/go-json-experiment/json v0.0.0-20260623181947-01eb4420fa68 h1:KZaTBSyshWX3MP5jukJcNSuXDQTO+rNpt0J564dX/eg=
187+github.com/go-json-experiment/json v0.0.0-20260214004413-d219187c3433 h1:vymEbVwYFP/L05h5TKQxvkXoKxNvTpjxYKdF1Nlwuao=
186−github.com/go-json-experiment/json v0.0.0-20260623181947-01eb4420fa68/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg=
188+github.com/go-json-experiment/json v0.0.0-20260214004413-d219187c3433/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg=
187github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
189github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
188github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
190github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
189github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
191github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
@@ -223,16 +225,16 @@ github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6
223github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
225github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
224github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
226github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
225github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
227github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
226−github.com/google/jsonschema-go v0.4.3 h1:/DBOLZTfDow7pe2GmaJNhltueGTtDKICi8V8p+DQPd0=
228+github.com/google/jsonschema-go v0.4.2 h1:tmrUohrwoLZZS/P3x7ex0WAVknEkBZM46iALbcqoRA8=
227−github.com/google/jsonschema-go v0.4.3/go.mod h1:r5quNTdLOYEz95Ru18zA0ydNbBuYoo9tgaYcxEYhJVE=
229+github.com/google/jsonschema-go v0.4.2/go.mod h1:r5quNTdLOYEz95Ru18zA0ydNbBuYoo9tgaYcxEYhJVE=
228github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs=
230github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs=
229github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
231github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
230github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
232github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
231github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
233github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
232github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
234github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
233github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
235github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
234−github.com/googleapis/enterprise-certificate-proxy v0.3.17 h1:73NfMHdiqo9JFU9+7a5ExpVa10/R29pXfZIaW559nrg=
236+github.com/googleapis/enterprise-certificate-proxy v0.3.15 h1:xolVQTEXusUcAA5UgtyRLjelpFFHWlPQ4XfWGc7MBas=
235−github.com/googleapis/enterprise-certificate-proxy v0.3.17/go.mod h1:rSEsBUemEBZEexP2y6jPp16LUmUbjmSbcPMQizR0o4k=
237+github.com/googleapis/enterprise-certificate-proxy v0.3.15/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg=
236github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4=
238github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4=
237github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY=
239github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY=
238github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
240github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
@@ -246,8 +248,8 @@ github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUq
246github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
248github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
247github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
249github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
248github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
250github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
249−github.com/invopop/jsonschema v0.14.0 h1:MHQqLhvpNUZfw+hM3AZDYK7jxO8FZoQeQM77g8iyZjg=
251+github.com/invopop/jsonschema v0.13.0 h1:KvpoAJWEjR3uD9Kbm2HWJmqsEaHt8lBUpd0qHcIi21E=
250−github.com/invopop/jsonschema v0.14.0/go.mod h1:ygm6C2EaVNMBDPpaPlnOA2pFAxBnxGjFlMZABxm9n2I=
252+github.com/invopop/jsonschema v0.13.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0=
251github.com/itchyny/gojq v0.12.19 h1:ttXA0XCLEMoaLOz5lSeFOZ6u6Q3QxmG46vfgI4O0DEs=
253github.com/itchyny/gojq v0.12.19 h1:ttXA0XCLEMoaLOz5lSeFOZ6u6Q3QxmG46vfgI4O0DEs=
252github.com/itchyny/gojq v0.12.19/go.mod h1:5galtVPDywX8SPSOrqjGxkBeDhSxEW1gSxoy7tn1iZY=
254github.com/itchyny/gojq v0.12.19/go.mod h1:5galtVPDywX8SPSOrqjGxkBeDhSxEW1gSxoy7tn1iZY=
253github.com/itchyny/timefmt-go v0.1.8 h1:1YEo1JvfXeAHKdjelbYr/uCuhkybaHCeTkH8Bo791OI=
255github.com/itchyny/timefmt-go v0.1.8 h1:1YEo1JvfXeAHKdjelbYr/uCuhkybaHCeTkH8Bo791OI=
@@ -262,14 +264,18 @@ github.com/jordanella/go-ansi-paintbrush v0.0.0-20240728195301-b7ad996ecf3d h1:o
262github.com/jordanella/go-ansi-paintbrush v0.0.0-20240728195301-b7ad996ecf3d/go.mod h1:SV0W0APWP9MZ1/gfDQ/NzzTlWdIgYZ/ZbpN4d/UXRYw=
264github.com/jordanella/go-ansi-paintbrush v0.0.0-20240728195301-b7ad996ecf3d/go.mod h1:SV0W0APWP9MZ1/gfDQ/NzzTlWdIgYZ/ZbpN4d/UXRYw=
263github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
265github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
264github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
266github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
265−github.com/kaptinlin/jsonpointer v0.4.26 h1:tw616yszHek+B3/GtDSia+uzBa3sLXGpmo4tYeMhBZw=
267+github.com/kaptinlin/go-i18n v0.3.0 h1:wP76dvYg04bvwTb+8NB+CmdZ2kL7lSSCQ9B/kFv7QHo=
266−github.com/kaptinlin/jsonpointer v0.4.26/go.mod h1:wVOBaXGGnP42YsMb6zev/3W5POTvspdNfh8DXzf8XS8=
268+github.com/kaptinlin/go-i18n v0.3.0/go.mod h1:pVcu9qsW5pOIOoZFJXesRYmLos1vMQrby70JPAoWmJU=
269+github.com/kaptinlin/jsonpointer v0.4.17 h1:mY9k8ciWncxbsECyaxKnR0MdmxamNdp2tLQkAKVrtSk=
270+github.com/kaptinlin/jsonpointer v0.4.17/go.mod h1:SsfsjqnHG5zuKo1DTBzk1VknaHlL4osHw+X9kZKukpU=
267−github.com/kaptinlin/jsonschema v0.9.2 h1:zqowDnBkpg80OeIt4Bl1bOyfKY1/KVVzst1m3MCsxd4=
271+github.com/kaptinlin/jsonschema v0.7.7 h1:41BlQJ9dskH0oE5DSzBUrl/w4JQYIr6N6L0B5GNyDoM=
268−github.com/kaptinlin/jsonschema v0.9.2/go.mod h1:mCH2W5lXd29tdDjvoFfY32nedPORnlk7pCVrrcs/NkQ=
272+github.com/kaptinlin/jsonschema v0.7.7/go.mod h1:rKjWfyySHSxAD7Li2ctYkPlOu960igoKBvZ2ADRtd5Q=
269−github.com/klauspost/compress v1.18.6 h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao=
273+github.com/kaptinlin/messageformat-go v0.4.19 h1:A5kuuZ1ybXDQ7kD1aoEWGAOemX7hLsMY0yolgSbgpRI=
274+github.com/kaptinlin/messageformat-go v0.4.19/go.mod h1:utSDTfiXTxl66OC5RIEuObLH7Ue3YjbA2X86SYMBYWg=
275+github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE=
270−github.com/klauspost/compress v1.18.6/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
276+github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
271−github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
277+github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE=
272−github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
278+github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
273github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU=
279github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU=
274github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
280github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
275github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
281github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -288,18 +294,18 @@ github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN
288github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
294github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
289github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
295github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
290github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
296github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
291−github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4=
297+github.com/mattn/go-isatty v0.0.21 h1:xYae+lCNBP7QuW4PUnNG61ffM4hVIfm+zUzDuSzYLGs=
292−github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4=
298+github.com/mattn/go-isatty v0.0.21/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4=
293−github.com/mattn/go-runewidth v0.0.24 h1:cpokDiIn0MGnhdHwuWnJBITySJ20QyNGnY2kR/ay2DU=
299+github.com/mattn/go-runewidth v0.0.23 h1:7ykA0T0jkPpzSvMS5i9uoNn2Xy3R383f9HDx3RybWcw=
294−github.com/mattn/go-runewidth v0.0.24/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
300+github.com/mattn/go-runewidth v0.0.23/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
295github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY=
301github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY=
296github.com/mfridman/interpolate v0.0.2/go.mod h1:p+7uk6oE07mpE/Ik1b8EckO0O4ZXiGAfshKBWLUM9Xg=
302github.com/mfridman/interpolate v0.0.2/go.mod h1:p+7uk6oE07mpE/Ik1b8EckO0O4ZXiGAfshKBWLUM9Xg=
297github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk=
303github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk=
298github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA=
304github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA=
299github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
305github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
300github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
306github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
301−github.com/modelcontextprotocol/go-sdk v1.6.1 h1:0zOSupjKUxPKSocPT1Wtago+mUHU2/uZ4xSOY0FGReU=
307+github.com/modelcontextprotocol/go-sdk v1.5.0 h1:CHU0FIX9kpueNkxuYtfYQn1Z0slhFzBZuq+x6IiblIU=
302−github.com/modelcontextprotocol/go-sdk v1.6.1/go.mod h1:kzm3kzFL1/+AziGOE0nUs3gvPoNxMCvkxokMkuFapXQ=
308+github.com/modelcontextprotocol/go-sdk v1.5.0/go.mod h1:gggDIhoemhWs3BGkGwd1umzEXCEMMvAnhTrnbXJKKKA=
303github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
309github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
304github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
310github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
305github.com/muesli/mango v0.1.0 h1:DZQK45d2gGbql1arsYA4vfg4d7I9Hfx5rX/GCmzsAvI=
311github.com/muesli/mango v0.1.0 h1:DZQK45d2gGbql1arsYA4vfg4d7I9Hfx5rX/GCmzsAvI=
@@ -310,10 +316,10 @@ github.com/muesli/mango-pflag v0.1.0 h1:UADqbYgpUyRoBja3g6LUL+3LErjpsOwaC9ywvBWe
310github.com/muesli/mango-pflag v0.1.0/go.mod h1:YEQomTxaCUp8PrbhFh10UfbhbQrM/xJ4i2PB8VTLLW0=
316github.com/muesli/mango-pflag v0.1.0/go.mod h1:YEQomTxaCUp8PrbhFh10UfbhbQrM/xJ4i2PB8VTLLW0=
311github.com/muesli/roff v0.1.0 h1:YD0lalCotmYuF5HhZliKWlIx7IEhiXeSfq7hNjFqGF8=
317github.com/muesli/roff v0.1.0 h1:YD0lalCotmYuF5HhZliKWlIx7IEhiXeSfq7hNjFqGF8=
312github.com/muesli/roff v0.1.0/go.mod h1:pjAHQM9hdUUwm/krAfrLGgJkXJ+YuhtsfZ42kieB2Ig=
318github.com/muesli/roff v0.1.0/go.mod h1:pjAHQM9hdUUwm/krAfrLGgJkXJ+YuhtsfZ42kieB2Ig=
313−github.com/ncruces/go-sqlite3 v0.35.1 h1:h/LaVyQwIvBBT0+2JmVe2tbYyWjUQ093/pYhpBqdxJo=
319+github.com/ncruces/go-sqlite3 v0.33.3 h1:6jCR3KuGvJSEwhaQrkHDGeIe2qCQ6nOUDNsPz7ZIotw=
314−github.com/ncruces/go-sqlite3 v0.35.1/go.mod h1:fXOSIkWwN5NXgbJk+7Zls8QIW4xOflmgh11OFvcY+J0=
320+github.com/ncruces/go-sqlite3 v0.33.3/go.mod h1:t2Osfw0wcKzJTgv2EvrkTtVLqlbKTA5Yvwb2ypAlBcY=
315−github.com/ncruces/go-sqlite3-wasm/v3 v3.1.35302 h1:Cew7/eNAMd1zhpXYBjofBua/63pFvbvB2h4PM/p6gKU=
321+github.com/ncruces/go-sqlite3-wasm v1.1.1-0.20260409221933-87e4b35a38d0 h1:ymE9H30x1AyW5VfMNkJC9teuI2W1jjMsQS7kc6zl6Tg=
316−github.com/ncruces/go-sqlite3-wasm/v3 v3.1.35302/go.mod h1:xe0CfafDUxfh+fSVKjHHMiAxoG9KALt5nFtbGNb/jRs=
322+github.com/ncruces/go-sqlite3-wasm v1.1.1-0.20260409221933-87e4b35a38d0/go.mod h1:/H3+JykPsfSlvKbOxNSx9kKwm3ecqQGzyCs1e9KkNsU=
317github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w=
323github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w=
318github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
324github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
319github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt7M=
325github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt7M=
@@ -325,12 +331,12 @@ github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY=
325github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc=
331github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc=
326github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k=
332github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k=
327github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
333github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
328−github.com/pb33f/ordered-map/v2 v2.3.1 h1:5319HDO0aw4DA4gzi+zv4FXU9UlSs3xGZ40wcP1nBjY=
334+github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
329−github.com/pb33f/ordered-map/v2 v2.3.1/go.mod h1:qxFQgd0PkVUtOMCkTapqotNgzRhMPL7VvaHKbd1HnmQ=
335+github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
330−github.com/pierrec/lz4/v4 v4.1.26 h1:GrpZw1gZttORinvzBdXPUXATeqlJjqUG/D87TKMnhjY=
336+github.com/pierrec/lz4/v4 v4.1.25 h1:kocOqRffaIbU5djlIBr7Wh+cx82C0vtFb0fOurZHqD0=
331−github.com/pierrec/lz4/v4 v4.1.26/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4=
337+github.com/pierrec/lz4/v4 v4.1.25/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4=
332−github.com/pjbgf/sha1cd v0.6.0 h1:3WJ8Wz8gvDz29quX1OcEmkAlUg9diU4GxJHqs0/XiwU=
338+github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4=
333−github.com/pjbgf/sha1cd v0.6.0/go.mod h1:lhpGlyHLpQZoxMv8HcgXvZEhcGs0PG/vsZnEJ7H0iCM=
339+github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A=
334github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
340github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
335github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
341github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
336github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
342github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -341,12 +347,12 @@ github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1
341github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
347github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
342github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
348github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
343github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
349github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
344−github.com/posthog/posthog-go v1.17.5 h1:mrLiAdyiQpl8Yeyg23iShyAztJMaUrYzsBjKeH52Aak=
350+github.com/posthog/posthog-go v1.12.1 h1:qZMHfC0frQOR1LT4js3ns+pXbDIyFsV+kWpvJEok3ms=
345−github.com/posthog/posthog-go v1.17.5/go.mod h1://M430hNH3e8CDv4i8SJesb26816Mpa6GIZaiP4pNQU=
351+github.com/posthog/posthog-go v1.12.1/go.mod h1:xsVOW9YImilUcazwPNEq4PJDqEZf2KeCS758zXjwkPg=
346−github.com/pressly/goose/v3 v3.27.2 h1:FjKNzcmMdGrQlSIu5alMSmakQtJFBgtw+A0bb1p/LC8=
352+github.com/pressly/goose/v3 v3.27.0 h1:/D30gVTuQhu0WsNZYbJi4DMOsx1lNq+6SkLe+Wp59BM=
347−github.com/pressly/goose/v3 v3.27.2/go.mod h1:qWW+/8dkVtJYjJrbIpwD5xxnEJTUKvxkQ9JKQp9LaIM=
353+github.com/pressly/goose/v3 v3.27.0/go.mod h1:3ZBeCXqzkgIRvrEMDkYh1guvtoJTU5oMMuDdkutoM78=
348−github.com/qjebbs/go-jsons v1.0.0-alpha.6 h1:9pMjdrCT7rj9CDIM0FXf9Ilie8PEy9g1b4qMkCnedjQ=
354+github.com/qjebbs/go-jsons v1.0.0-alpha.5 h1:U2PPDxeKI1MMOSw7e7xyxhwH9Ggc7UrDvaRIkJ+l0n8=
349−github.com/qjebbs/go-jsons v1.0.0-alpha.6/go.mod h1:wNJrtinHyC3YSf6giEh4FJN8+yZV7nXBjvmfjhBIcw4=
355+github.com/qjebbs/go-jsons v1.0.0-alpha.5/go.mod h1:wNJrtinHyC3YSf6giEh4FJN8+yZV7nXBjvmfjhBIcw4=
350github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
356github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
351github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
357github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
352github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
358github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
@@ -354,8 +360,8 @@ github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUc
354github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
360github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
355github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
361github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
356github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
362github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
357−github.com/sahilm/fuzzy v0.1.3 h1:juByESSS32nVD81vr6tHmKmA/8zde7gE+x5CLxrzXPU=
363+github.com/sahilm/fuzzy v0.1.1 h1:ceu5RHF8DGgoi+/dR5PsECjCDH1BE3Fnmpo7aVXOdRA=
358−github.com/sahilm/fuzzy v0.1.3/go.mod h1:au6//VbVSqu6DFrkL2CfjlJ5iURpNCPeE+1GwY3XsT8=
364+github.com/sahilm/fuzzy v0.1.1/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y=
359github.com/sebdah/goldie/v2 v2.5.3 h1:9ES/mNN+HNUbNWpVAlrzuZ7jE+Nrczbj8uFRjM7624Y=
365github.com/sebdah/goldie/v2 v2.5.3 h1:9ES/mNN+HNUbNWpVAlrzuZ7jE+Nrczbj8uFRjM7624Y=
360github.com/sebdah/goldie/v2 v2.5.3/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI=
366github.com/sebdah/goldie/v2 v2.5.3/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI=
361github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0=
367github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0=
@@ -398,8 +404,8 @@ github.com/swaggo/swag v1.16.6/go.mod h1:ngP2etMK5a0P3QBizic5MEwpRmluJZPHjXcMoj4
398github.com/tadvi/systray v0.0.0-20190226123456-11a2b8fa57af h1:6yITBqGTE2lEeTPG04SN9W+iWHCRyHqlVYILiSXziwk=
404github.com/tadvi/systray v0.0.0-20190226123456-11a2b8fa57af h1:6yITBqGTE2lEeTPG04SN9W+iWHCRyHqlVYILiSXziwk=
399github.com/tadvi/systray v0.0.0-20190226123456-11a2b8fa57af/go.mod h1:4F09kP5F+am0jAwlQLddpoMDM+iewkxxt6nxUQ5nq5o=
405github.com/tadvi/systray v0.0.0-20190226123456-11a2b8fa57af/go.mod h1:4F09kP5F+am0jAwlQLddpoMDM+iewkxxt6nxUQ5nq5o=
400github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
406github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
401−github.com/tidwall/gjson v1.19.0 h1:xwxm7n691Uf3u5OFjzngavjGTh55KX5q/9w9xHW88JU=
407+github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY=
402−github.com/tidwall/gjson v1.19.0/go.mod h1:V37/opeE/JbLUOfH0QTXiNez2l0RUjYUhpT4szFQAfc=
408+github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
403github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
409github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
404github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
410github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
405github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
411github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
@@ -411,10 +417,10 @@ github.com/u-root/u-root v0.14.1-0.20250807200646-5e7721023dc7 h1:ax+jBy7xFhh+Ka
411github.com/u-root/u-root v0.14.1-0.20250807200646-5e7721023dc7/go.mod h1:/0Qr7qJeDwWxoKku2xKQ4Szc+SwBE3g9VE8jNiamsmc=
417github.com/u-root/u-root v0.14.1-0.20250807200646-5e7721023dc7/go.mod h1:/0Qr7qJeDwWxoKku2xKQ4Szc+SwBE3g9VE8jNiamsmc=
412github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 h1:pyC9PaHYZFgEKFdlp3G8RaCKgVpHZnecvArXvPXcFkM=
418github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 h1:pyC9PaHYZFgEKFdlp3G8RaCKgVpHZnecvArXvPXcFkM=
413github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701/go.mod h1:P3a5rG4X7tI17Nn3aOIAYr5HbIMukwXG0urG0WuL8OA=
419github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701/go.mod h1:P3a5rG4X7tI17Nn3aOIAYr5HbIMukwXG0urG0WuL8OA=
420+github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc=
421+github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw=
414github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
422github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
415github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
423github.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=
418github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4=
424github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4=
419github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4=
425github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4=
420github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
426github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
@@ -429,20 +435,20 @@ github.com/zeebo/xxh3 v1.1.0 h1:s7DLGDK45Dyfg7++yxI0khrfwq9661w9EN78eP/UZVs=
429github.com/zeebo/xxh3 v1.1.0/go.mod h1:IisAie1LELR4xhVinxWS5+zf1lA4p0MW4T+w+W07F5s=
435github.com/zeebo/xxh3 v1.1.0/go.mod h1:IisAie1LELR4xhVinxWS5+zf1lA4p0MW4T+w+W07F5s=
430go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
436go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
431go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
437go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
432−go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0 h1:2yEATaop1/a1I4psnSLgWVPLWwCzkqWakgJy7xTDVy0=
438+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 h1:0Qx7VGBacMm9ZENQ7TnNObTYI4ShC+lHI16seduaxZo=
433−go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0/go.mod h1:D7J12YRapIekYyPWgGPlA/23pRmpSEZC5xJC/TTLI9U=
439+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0/go.mod h1:Sje3i3MjSPKTSPvVWCaL8ugBzJwik3u4smCjUeuupqg=
434−go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 h1:8tvICD4vSTOOsNrsI4Ljf6C+6UKvpTEH5XY3JMoyPoo=
440+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 h1:CqXxU8VOmDefoh0+ztfGaymYbhdB/tT3zs79QaZTNGY=
435−go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0/go.mod h1:z9+yiacE0IHRqM4qFfkbt/JYlmYXgss8GY/jXoNuPJI=
441+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0/go.mod h1:BuhAPThV8PBHBvg8ZzZ/Ok3idOdhWIodywz2xEcRbJo=
436−go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU=
442+go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I=
437−go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc=
443+go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0=
438−go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc=
444+go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM=
439−go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo=
445+go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY=
440−go.opentelemetry.io/otel/sdk v1.44.0 h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58=
446+go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg=
441−go.opentelemetry.io/otel/sdk v1.44.0/go.mod h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0=
447+go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg=
442−go.opentelemetry.io/otel/sdk/metric v1.44.0 h1:3LlKgI+VjbVsjNRFZJZAJ30WjXC5VkNRks6si09iEfI=
448+go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw=
443−go.opentelemetry.io/otel/sdk/metric v1.44.0/go.mod h1:5B5pMARnXxKhltooO4xUuCBorl65a4EpnTalObqOigA=
449+go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A=
444−go.opentelemetry.io/otel/trace v1.44.0 h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk=
450+go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A=
445−go.opentelemetry.io/otel/trace v1.44.0/go.mod h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE=
451+go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0=
446go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
452go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
447go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
453go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
448go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
454go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
@@ -450,10 +456,6 @@ go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN8
450go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
456go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
451go.yaml.in/yaml/v4 v4.0.0-rc.3 h1:3h1fjsh1CTAPjW7q/EMe+C8shx5d8ctzZTrLcs/j8Go=
457go.yaml.in/yaml/v4 v4.0.0-rc.3 h1:3h1fjsh1CTAPjW7q/EMe+C8shx5d8ctzZTrLcs/j8Go=
452go.yaml.in/yaml/v4 v4.0.0-rc.3/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0=
458go.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=
457golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
459golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
458golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
460golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
459golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
461golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
@@ -461,24 +463,20 @@ golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDf
461golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
463golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
462golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
464golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
463golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
465golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
464−golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto=
466+golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI=
465−golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio=
467+golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q=
466−golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f h1:W3F4c+6OLc6H2lb//N1q4WpJkhzJCK5J6kUi1NTVXfM=
468+golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 h1:jiDhWWeC7jfWqR9c/uplMOqJ0sbNlNWv0UkzE0vX1MA=
467−golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aINzNzt2Bket5bjo9sdOYzOsU80=
469+golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90/go.mod h1:xE1HEv6b+1SCZ5/uscMRjUBKtIxworgEcEi+/n9NQDQ=
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.43.0 h1:FLxcP4ec2350nTfOC8ysKtqYSIFbk/QGjw1ZHNP4tsY=
471+golang.org/x/image v0.38.0 h1:5l+q+Y9JDC7mBOMjo4/aPhMDcxEptsX+Tt3GgRQRPuE=
472−golang.org/x/image v0.43.0/go.mod h1:rrpelvGFt+kLPAjPM4HeWPgrl0FtafueU//e5N0qk/Q=
472+golang.org/x/image v0.38.0/go.mod h1:/3f6vaXC+6CEanU4KJxbcUZyEePbyKbaLoDOe4ehFYY=
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=
475golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
473golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
476golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
474golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
477golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
475golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
478golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
476golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
479golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
477golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
480−golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4=
478+golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI=
481−golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ=
479+golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY=
482golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
480golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
483golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
481golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
484golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
482golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
@@ -490,8 +488,8 @@ golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
490golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
488golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
491golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
489golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
492golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
490golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
493−golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o=
491+golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA=
494−golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec=
492+golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs=
495golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
493golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
496golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
494golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
497golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
495golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -501,8 +499,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
501golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
499golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
502golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
500golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
503golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
501golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
504−golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM=
502+golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
505−golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
503+golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
506golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
504golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
507golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
505golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
508golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
506golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -518,8 +516,8 @@ golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
518golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
516golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
519golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
517golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
520golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
518golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
521−golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw=
519+golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI=
522−golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
520+golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
523golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
521golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
524golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
522golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
525golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
523golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -531,8 +529,8 @@ golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
531golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
529golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
532golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
530golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
533golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
531golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
534−golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc=
532+golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY=
535−golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y=
533+golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY=
536golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
534golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
537golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
535golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
538golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
536golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
@@ -542,8 +540,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
542golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
540golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
543golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
541golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
544golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
542golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
545−golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE=
543+golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg=
546−golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4=
544+golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164=
547golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
545golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
548golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
546golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
549golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
547golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -552,23 +550,23 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
552golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
550golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
553golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
551golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
554golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
552golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
555−golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8=
553+golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s=
556−golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0=
554+golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0=
557golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
555golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
558gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
556gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
559gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
557gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
560−google.golang.org/api v0.286.0 h1:TdTXMvzYKnWV1/lPbCdbXRqBrkDqjPto22H2xeZZ8LI=
558+google.golang.org/api v0.276.0 h1:nVArUtfLEihtW+b0DdcqRGK1xoEm2+ltAihyztq7MKY=
561−google.golang.org/api v0.286.0/go.mod h1:NlOlUIr8MPoIhT9Bb/oUnRuHbJOLwxb6JSYJM8Yz+jQ=
559+google.golang.org/api v0.276.0/go.mod h1:Fnag/EWUPIcJXuIkP1pjoTgS5vdxlk3eeemL7Do6bvw=
562−google.golang.org/genai v1.62.0 h1:PaBju84orf4Vbcc6OfHe4vxhxhjwulKTgOpEc3iIc00=
560+google.golang.org/genai v1.54.0 h1:ZQCa70WMTJDI11FdqWCzGvZ5PanpcpfoO6jl/lrSnGU=
563−google.golang.org/genai v1.62.0/go.mod h1:mDdPDFXo1Ats7f1WXVyZgWb/CkMzFWTWJruIMy7hGIU=
561+google.golang.org/genai v1.54.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk=
564−google.golang.org/genproto v0.0.0-20260622175928-b703f567277d h1:CP5omUq8AJTiWMrPKM1WRLJ7zZeXd9OPcQD3TbBNAyY=
562+google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478 h1:aLsVTW0lZ8+IY5u/ERjZSCvAmhuR7slKzyha3YikDNA=
565−google.golang.org/genproto v0.0.0-20260622175928-b703f567277d/go.mod h1:DrwuGJgFSEVNpv3S5Q5VxhRTvdnjauw9GtvwVOEARfA=
563+google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478/go.mod h1:YJAzKjfHIUHb9T+bfu8L7mthAp7VVXQBUs1PLdBWS7M=
566−google.golang.org/genproto/googleapis/api v0.0.0-20260622175928-b703f567277d h1:xr2lwHI91bn3UiXcnyzRMQjp2LRiM8wEHzwUaE0YhTs=
564+google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 h1:yQugLulqltosq0B/f8l4w9VryjV+N/5gcW0jQ3N8Qec=
567−google.golang.org/genproto/googleapis/api v0.0.0-20260622175928-b703f567277d/go.mod h1:O0ZOWSrfWfJ+Z5HbwZ+wNtHsg/vk1k2C/w67eww8PfQ=
565+google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478/go.mod h1:C6ADNqOxbgdUUeRTU+LCHDPB9ttAMCTff6auwCVa4uc=
568−google.golang.org/genproto/googleapis/rpc v0.0.0-20260622175928-b703f567277d h1:mpAgMyM9vQHxycBlDq50y1VHpfSfVwzXvrQKtYbXuUY=
566+google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 h1:RmoJA1ujG+/lRGNfUnOMfhCy5EipVMyvUE+KNbPbTlw=
569−google.golang.org/genproto/googleapis/rpc v0.0.0-20260622175928-b703f567277d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
567+google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
570−google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ=
568+google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM=
571−google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I=
569+google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4=
572google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
570google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
573google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
571google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
574gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
572gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -592,30 +590,30 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
592gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
590gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
593gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
591gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
594gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
592gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
595−modernc.org/cc/v4 v4.28.4 h1:Hd/4Es+MBj+/7hSdZaisNyu6bv3V0Dp2MdllyfqaH+c=
593+modernc.org/cc/v4 v4.27.3 h1:uNCgn37E5U09mTv1XgskEVUJ8ADKpmFMPxzGJ0TSo+U=
596−modernc.org/cc/v4 v4.28.4/go.mod h1:OnovgIhbbMXMu1aISnJ0wvVD1KnW+cAUJkIrAWh+kVI=
594+modernc.org/cc/v4 v4.27.3/go.mod h1:3YjcbCqhoTTHPycJDRl2WZKKFj0nwcOIPBfEZK0Hdk8=
597−modernc.org/ccgo/v4 v4.34.4 h1:OVnSOWQjVKOYkFxoHYB+qQmSHK5gqMqARM+K9DpR/Ws=
595+modernc.org/ccgo/v4 v4.32.4 h1:L5OB8rpEX4ZsXEQwGozRfJyJSFHbbNVOoQ59DU9/KuU=
598−modernc.org/ccgo/v4 v4.34.4/go.mod h1:qdKqE8FNIYyysougB1RX9MxCzp5oJOcQXSobANJ4TuE=
596+modernc.org/ccgo/v4 v4.32.4/go.mod h1:lY7f+fiTDHfcv6YlRgSkxYfhs+UvOEEzj49jAn2TOx0=
599modernc.org/fileutil v1.4.0 h1:j6ZzNTftVS054gi281TyLjHPp6CPHr2KCxEXjEbD6SM=
597modernc.org/fileutil v1.4.0 h1:j6ZzNTftVS054gi281TyLjHPp6CPHr2KCxEXjEbD6SM=
600modernc.org/fileutil v1.4.0/go.mod h1:EqdKFDxiByqxLk8ozOxObDSfcVOv/54xDs/DUHdvCUU=
598modernc.org/fileutil v1.4.0/go.mod h1:EqdKFDxiByqxLk8ozOxObDSfcVOv/54xDs/DUHdvCUU=
601modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI=
599modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI=
602modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito=
600modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito=
603−modernc.org/gc/v3 v3.1.3 h1:6QAplYyVO+KdPW3pGnqmJDUxtkec8ooEWvks/hhU3lc=
601+modernc.org/gc/v3 v3.1.2 h1:ZtDCnhonXSZexk/AYsegNRV1lJGgaNZJuKjJSWKyEqo=
604−modernc.org/gc/v3 v3.1.3/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY=
602+modernc.org/gc/v3 v3.1.2/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY=
605modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks=
603modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks=
606modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI=
604modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI=
607−modernc.org/libc v1.73.4 h1:+ra4Ui8ngyt8HDcO1FTDPWlkAh6yOdaO2yAoh8MddQA=
605+modernc.org/libc v1.72.0 h1:IEu559v9a0XWjw0DPoVKtXpO2qt5NVLAnFaBbjq+n8c=
608−modernc.org/libc v1.73.4/go.mod h1:DXZ3eO8qMCNn2SnmTNCiC71nJ9Rcq3PsnpU6Vc4rWK8=
606+modernc.org/libc v1.72.0/go.mod h1:tTU8DL8A+XLVkEY3x5E/tO7s2Q/q42EtnNWda/L5QhQ=
609modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
607modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
610modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
608modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
611modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI=
609modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI=
612modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw=
610modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw=
613−modernc.org/opt v0.2.0 h1:tGyef5ApycA7FSEOMraay9SaTk5zmbx7Tu+cJs4QKZg=
611+modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8=
614−modernc.org/opt v0.2.0/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns=
612+modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns=
615modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w=
613modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w=
616modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE=
614modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE=
617−modernc.org/sqlite v1.53.0 h1:20WG8N9q4ji/dEqGk4uiI0c6OPjSeLTNYGFCc3+7c1M=
615+modernc.org/sqlite v1.49.1 h1:dYGHTKcX1sJ+EQDnUzvz4TJ5GbuvhNJa8Fg6ElGx73U=
618−modernc.org/sqlite v1.53.0/go.mod h1:xoEpOIpGrgT48H5iiyt/YXPCZPEzlfmfFwtk8Lklw8s=
616+modernc.org/sqlite v1.49.1/go.mod h1:m0w8xhwYUVY3H6pSDwc3gkJ/irZT/0YEXwBlhaxQEew=
619modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
617modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
620modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
618modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
621modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
619modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
internal/agent/accepted_run_test.godeleted−231
@@ -1,231 +0,0 @@
1−package agent
2−
3−import (
4− "context"
5− "testing"
6−
7− "github.com/charmbracelet/crush/internal/message"
8− "github.com/stretchr/testify/assert"
9− "github.com/stretchr/testify/require"
10−)
11−
12−// newCancelTestAgent builds a DB-backed sessionAgent with no model. The
13−// tests here exercise the dispatch/cancel/persist paths, none of which
14−// reach agent.Stream, so a model is unnecessary.
15−func newCancelTestAgent(t *testing.T) (*sessionAgent, fakeEnv) {
16− t.Helper()
17− env := testEnv(t)
18− sa := NewSessionAgent(SessionAgentOptions{
19− Sessions: env.sessions,
20− Messages: env.messages,
21− }).(*sessionAgent)
22− return sa, env
23−}
24−
25−func (a *sessionAgent) acceptedCount(sessionID string) int {
26− c, _ := a.acceptedRuns.Get(sessionID)
27− return c
28−}
29−
30−func (a *sessionAgent) hasPendingCancel(sessionID string) bool {
31− mark, ok := a.cancelMark.Get(sessionID)
32− return ok && mark > 0
33−}
34−
35−func (a *sessionAgent) pendingCancelMark(sessionID string) uint64 {
36− mark, _ := a.cancelMark.Get(sessionID)
37− return mark
38−}
39−
40−func TestAcceptedRun_CloseIsIdempotent(t *testing.T) {
41− t.Parallel()
42− sa, _ := newCancelTestAgent(t)
43−
44− accept := sa.BeginAccepted("sid")
45− require.Equal(t, "sid", accept.SessionID())
46− require.Equal(t, 1, sa.acceptedCount("sid"))
47−
48− accept.Close()
49− require.Equal(t, 0, sa.acceptedCount("sid"))
50−
51− // Repeated Close must not underflow the counter.
52− accept.Close()
53− accept.Close()
54− require.Equal(t, 0, sa.acceptedCount("sid"))
55−}
56−
57−func TestAcceptedRun_MultipleReservations(t *testing.T) {
58− t.Parallel()
59− sa, _ := newCancelTestAgent(t)
60−
61− a1 := sa.BeginAccepted("sid")
62− a2 := sa.BeginAccepted("sid")
63− require.Equal(t, 2, sa.acceptedCount("sid"))
64−
65− a1.Close()
66− require.Equal(t, 1, sa.acceptedCount("sid"))
67−
68− a2.Close()
69− require.Equal(t, 0, sa.acceptedCount("sid"))
70−}
71−
72−func TestAcceptedRun_NilSafe(t *testing.T) {
73− t.Parallel()
74− var accept *AcceptedRun
75− require.Equal(t, "", accept.SessionID())
76− // Must not panic.
77− accept.Close()
78−}
79−
80−func TestCancel_IdleDoesNotRecordPendingCancel(t *testing.T) {
81− t.Parallel()
82− sa, _ := newCancelTestAgent(t)
83−
84− // No accepted run, no active request: a true no-op.
85− sa.Cancel("sid")
86− require.False(t, sa.hasPendingCancel("sid"))
87−}
88−
89−func TestCancel_AcceptedRecordsPendingCancel(t *testing.T) {
90− t.Parallel()
91− sa, _ := newCancelTestAgent(t)
92−
93− accept := sa.BeginAccepted("sid")
94− defer accept.Close()
95−
96− sa.Cancel("sid")
97− require.True(t, sa.hasPendingCancel("sid"))
98−}
99−
100−func TestCancel_SecondCancelWhilePendingIsNoOp(t *testing.T) {
101− t.Parallel()
102− sa, _ := newCancelTestAgent(t)
103−
104− accept := sa.BeginAccepted("sid")
105− defer accept.Close()
106−
107− sa.Cancel("sid")
108− require.True(t, sa.hasPendingCancel("sid"))
109−
110− // A second cancel while a pending cancel is already recorded must
111− // remain a single pending cancel; one Run consumes exactly one.
112− sa.Cancel("sid")
113− require.True(t, sa.hasPendingCancel("sid"))
114−}
115−
116−func TestRun_CancelOnEntryPersistsCanceledTurn(t *testing.T) {
117− t.Parallel()
118− sa, env := newCancelTestAgent(t)
119−
120− sess, err := env.sessions.Create(t.Context(), "session")
121− require.NoError(t, err)
122−
123− accept := sa.BeginAccepted(sess.ID)
124− // A cancel arrives in the accepted-but-not-yet-active window.
125− sa.Cancel(sess.ID)
126− require.True(t, sa.hasPendingCancel(sess.ID))
127−
128− result, err := sa.Run(t.Context(), SessionAgentCall{
129− SessionID: sess.ID,
130− Prompt: "hello",
131− Accepted: accept,
132− })
133− require.NoError(t, err)
134− require.Nil(t, result)
135−
136− // The pending cancel was consumed and the accept released.
137− require.False(t, sa.hasPendingCancel(sess.ID))
138− require.Equal(t, 0, sa.acceptedCount(sess.ID))
139−
140− msgs, err := env.messages.List(t.Context(), sess.ID)
141− require.NoError(t, err)
142− require.Len(t, msgs, 2)
143− assert.Equal(t, message.User, msgs[0].Role)
144− assert.Equal(t, message.Assistant, msgs[1].Role)
145− assert.Equal(t, message.FinishReasonCanceled, msgs[1].FinishReason())
146−}
147−
148−func TestPersistCanceledTurn_WritesBothWhenUserMissing(t *testing.T) {
149− t.Parallel()
150− sa, env := newCancelTestAgent(t)
151−
152− sess, err := env.sessions.Create(t.Context(), "session")
153− require.NoError(t, err)
154−
155− err = sa.persistCanceledTurn(t.Context(), SessionAgentCall{
156− SessionID: sess.ID,
157− Prompt: "hello",
158− }, false)
159− require.NoError(t, err)
160−
161− msgs, err := env.messages.List(t.Context(), sess.ID)
162− require.NoError(t, err)
163− require.Len(t, msgs, 2)
164− assert.Equal(t, message.User, msgs[0].Role)
165− assert.Equal(t, message.Assistant, msgs[1].Role)
166− assert.Equal(t, message.FinishReasonCanceled, msgs[1].FinishReason())
167−}
168−
169−func TestPersistCanceledTurn_WritesAssistantOnlyWhenUserCreated(t *testing.T) {
170− t.Parallel()
171− sa, env := newCancelTestAgent(t)
172−
173− sess, err := env.sessions.Create(t.Context(), "session")
174− require.NoError(t, err)
175−
176− // Simulate PrepareStep having already created the user message.
177− _, err = sa.createUserMessage(t.Context(), SessionAgentCall{
178− SessionID: sess.ID,
179− Prompt: "hello",
180− })
181− require.NoError(t, err)
182−
183− err = sa.persistCanceledTurn(t.Context(), SessionAgentCall{
184− SessionID: sess.ID,
185− Prompt: "hello",
186− }, true)
187− require.NoError(t, err)
188−
189− msgs, err := env.messages.List(t.Context(), sess.ID)
190− require.NoError(t, err)
191− require.Len(t, msgs, 2)
192− assert.Equal(t, message.User, msgs[0].Role)
193− assert.Equal(t, message.Assistant, msgs[1].Role)
194− assert.Equal(t, message.FinishReasonCanceled, msgs[1].FinishReason())
195−}
196−
197−func TestPersistCanceledTurn_SucceedsWithCanceledContext(t *testing.T) {
198− t.Parallel()
199− sa, env := newCancelTestAgent(t)
200−
201− sess, err := env.sessions.Create(t.Context(), "session")
202− require.NoError(t, err)
203−
204− // Simulate workspace shutdown having already canceled the run
205− // context. WithoutCancel must let the writes through.
206− ctx, cancel := context.WithCancel(t.Context())
207− cancel()
208−
209− err = sa.persistCanceledTurn(ctx, SessionAgentCall{
210− SessionID: sess.ID,
211− Prompt: "hello",
212− }, false)
213− require.NoError(t, err)
214−
215− msgs, err := env.messages.List(t.Context(), sess.ID)
216− require.NoError(t, err)
217− require.Len(t, msgs, 2)
218−}
219−
220−func TestClearPendingCancel(t *testing.T) {
221− t.Parallel()
222− sa, _ := newCancelTestAgent(t)
223−
224− accept := sa.BeginAccepted("sid")
225− defer accept.Close()
226− sa.Cancel("sid")
227− require.True(t, sa.hasPendingCancel("sid"))
228−
229− sa.clearPendingCancel("sid")
230− require.False(t, sa.hasPendingCancel("sid"))
231−}
internal/agent/agent.go+144−1049
@@ -12,18 +12,15 @@ import (
12 "context"
12 "context"
13 _ "embed"
13 _ "embed"
14 "encoding/base64"
14 "encoding/base64"
15− "encoding/json"
16 "errors"
15 "errors"
17 "fmt"
16 "fmt"
18 "log/slog"
17 "log/slog"
19− "math"
20 "net/http"
18 "net/http"
21 "os"
19 "os"
22 "regexp"
20 "regexp"
23 "strconv"
21 "strconv"
24 "strings"
22 "strings"
25 "sync"
23 "sync"
26− "sync/atomic"
27 "time"
24 "time"
28
25
29 "charm.land/catwalk/pkg/catwalk"
26 "charm.land/catwalk/pkg/catwalk"
@@ -46,7 +43,6 @@ import (
46 "github.com/charmbracelet/crush/internal/session"
43 "github.com/charmbracelet/crush/internal/session"
47 "github.com/charmbracelet/crush/internal/stringext"
44 "github.com/charmbracelet/crush/internal/stringext"
48 "github.com/charmbracelet/crush/internal/version"
45 "github.com/charmbracelet/crush/internal/version"
49− "github.com/charmbracelet/x/ansi"
50 "github.com/charmbracelet/x/exp/charmtone"
46 "github.com/charmbracelet/x/exp/charmtone"
51)
47)
52
48
@@ -74,16 +70,7 @@ var (
74)
70)
75
71
76type SessionAgentCall struct {
72type SessionAgentCall struct {
77− SessionID string
73+ SessionID string
78− // RunID, when non-empty, is the caller-supplied correlator that
79− // gets echoed back on the notify.RunComplete event emitted for
80− // this turn. It is preserved when the call is enqueued behind a
81− // busy session so the queued turn's terminal event is still
82− // recognisable to the original caller. Callers that need a
83− // reliable completion contract (e.g. `crush run` against a
84− // session that may be busy) MUST set it; SessionID alone is
85− // ambiguous when concurrent turns share the same session.
86− RunID string
87 Prompt string
74 Prompt string
88 ProviderOptions fantasy.ProviderOptions
75 ProviderOptions fantasy.ProviderOptions
89 Attachments []message.Attachment
76 Attachments []message.Attachment
@@ -94,41 +81,10 @@ type SessionAgentCall struct {
94 FrequencyPenalty *float64
81 FrequencyPenalty *float64
95 PresencePenalty *float64
82 PresencePenalty *float64
96 NonInteractive bool
83 NonInteractive bool
97− // OnComplete, when non-nil, replaces the default RunComplete
98− // publish path: the inner Run hands the terminal payload to this
99− // callback instead of emitting it on the RunComplete broker. The
100− // coordinator uses this hook to coalesce the unauthorized →
101− // re-auth → retry chain into a single user-visible terminal
102− // event, so non-interactive clients (e.g. `crush run`) don't
103− // exit on a stale failed-attempt RunComplete before the
104− // successful retry. It is intentionally stripped when queueing
105− // a busy-session call (see Run): the originating
106− // coordinator.Run has long returned by the time the queued
107− // recursion drains, so falling back to the default broker
108− // publish keeps the event visible to subscribers.
109− OnComplete func(notify.RunComplete)
110− // Accepted, when non-nil, is the accept reservation taken by
111− // BeginAccepted before the call was dispatched onto a goroutine
112− // (the client/server fire-and-forget path). Run consumes it under
113− // dispatchMu[SessionID] once the accepted -> (cancel-on-entry |
114− // queued | active) transition has been chosen. When nil
115− // (in-process / local callers like AppWorkspace), behavior is
116− // unchanged and no accept tracking applies.
117− Accepted *AcceptedRun
118− // acceptSeq carries the accept sequence of the handle that produced
119− // this call after it has been enqueued and its Accepted handle
120− // stripped. The queue-drain paths compare it against a session's
121− // cancel mark so a follow-up queued before a cancel is dropped while
122− // one queued after the cancel survives. 0 means untracked (an
123− // in-process enqueue with no accept reservation), which the drain
124− // paths treat as covered by any present mark, preserving the
125− // pre-sequence behavior.
126− acceptSeq uint64
127}
84}
128
85
129type SessionAgent interface {
86type SessionAgent interface {
130 Run(context.Context, SessionAgentCall) (*fantasy.AgentResult, error)
87 Run(context.Context, SessionAgentCall) (*fantasy.AgentResult, error)
131− BeginAccepted(sessionID string) *AcceptedRun
132 SetModels(large Model, small Model)
88 SetModels(large Model, small Model)
133 SetTools(tools []fantasy.AgentTool)
89 SetTools(tools []fantasy.AgentTool)
134 SetSystemPrompt(systemPrompt string)
90 SetSystemPrompt(systemPrompt string)
@@ -141,14 +97,12 @@ type SessionAgent interface {
141 ClearQueue(sessionID string)
97 ClearQueue(sessionID string)
142 Summarize(context.Context, string, fantasy.ProviderOptions) error
98 Summarize(context.Context, string, fantasy.ProviderOptions) error
143 Model() Model
99 Model() Model
144− GenerateTitle(ctx context.Context, sessionID, userPrompt string)
145}
100}
146
101
147type Model struct {
102type Model struct {
148 Model fantasy.LanguageModel
103 Model fantasy.LanguageModel
149 CatwalkCfg catwalk.Model
104 CatwalkCfg catwalk.Model
150 ModelCfg config.SelectedModel
105 ModelCfg config.SelectedModel
151− FlatRate bool
152}
106}
153
107
154type sessionAgent struct {
108type sessionAgent struct {
@@ -157,7 +111,6 @@ type sessionAgent struct {
157 systemPromptPrefix *csync.Value[string]
111 systemPromptPrefix *csync.Value[string]
158 systemPrompt *csync.Value[string]
112 systemPrompt *csync.Value[string]
159 tools *csync.Slice[fantasy.AgentTool]
113 tools *csync.Slice[fantasy.AgentTool]
160− toolsGen atomic.Uint64 // bumped by SetTools; lets PrepareStep skip re-copying unchanged tools
161
114
162 isSubAgent bool
115 isSubAgent bool
163 sessions session.Service
116 sessions session.Service
@@ -165,47 +118,9 @@ type sessionAgent struct {
165 disableAutoSummarize bool
118 disableAutoSummarize bool
166 isYolo bool
119 isYolo bool
167 notify pubsub.Publisher[notify.Notification]
120 notify pubsub.Publisher[notify.Notification]
168− runComplete pubsub.Publisher[notify.RunComplete]
169
121
170 messageQueue *csync.Map[string, []SessionAgentCall]
122 messageQueue *csync.Map[string, []SessionAgentCall]
171 activeRequests *csync.Map[string, context.CancelFunc]
123 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
209}
124}
210
125
211type SessionAgentOptions struct {
126type SessionAgentOptions struct {
@@ -220,7 +135,6 @@ type SessionAgentOptions struct {
220 Messages message.Service
135 Messages message.Service
221 Tools []fantasy.AgentTool
136 Tools []fantasy.AgentTool
222 Notify pubsub.Publisher[notify.Notification]
137 Notify pubsub.Publisher[notify.Notification]
223− RunComplete pubsub.Publisher[notify.RunComplete]
224}
138}
225
139
226func NewSessionAgent(
140func NewSessionAgent(
@@ -238,418 +152,32 @@ func NewSessionAgent(
238 tools: csync.NewSliceFrom(opts.Tools),
152 tools: csync.NewSliceFrom(opts.Tools),
239 isYolo: opts.IsYolo,
153 isYolo: opts.IsYolo,
240 notify: opts.Notify,
154 notify: opts.Notify,
241− runComplete: opts.RunComplete,
242 messageQueue: csync.NewMap[string, []SessionAgentCall](),
155 messageQueue: csync.NewMap[string, []SessionAgentCall](),
243 activeRequests: csync.NewMap[string, context.CancelFunc](),
156 activeRequests: csync.NewMap[string, context.CancelFunc](),
244− dispatchMu: csync.NewMap[string, *sync.Mutex](),
245− acceptedRuns: csync.NewMap[string, int](),
246− cancelMark: csync.NewMap[string, uint64](),
247− }
248−}
249−
250−// AcceptedRun owns exactly one accept reservation taken by
251−// BeginAccepted. It is the only carrier of accept-state across the
252−// backend.runAgent / Coordinator.Run / sessionAgent.Run layers: a
253−// counter > 0 means a dispatched prompt is in flight and has not yet
254−// completed the dispatch handoff in Run. Close is the only way to
255−// release the reservation and is idempotent.
256−type AcceptedRun struct {
257− agent *sessionAgent
258− sessionID string
259− // seq is the monotonic accept sequence stamped by BeginAccepted. A
260− // cancel covers this handle iff seq is at or below the session's
261− // cancel mark, so a handle accepted after a cancel (higher seq) is
262− // never poisoned by it.
263− seq uint64
264− done atomic.Bool
265−}
266−
267−// Close decrements the accept counter for this reservation. It is safe
268−// to call multiple times; only the first call has effect.
269−func (r *AcceptedRun) Close() {
270− if r == nil {
271− return
272− }
273− if !r.done.CompareAndSwap(false, true) {
274− return
275− }
276− r.agent.endAccepted(r.sessionID)
277−}
278−
279−// SessionID exposes the session this reservation is for so the run path
280−// can use it without an extra parameter.
281−func (r *AcceptedRun) SessionID() string {
282− if r == nil {
283− return ""
284− }
285− return r.sessionID
286−}
287−
288−// BeginAccepted increments the accept counter for sessionID and returns
289−// a handle whose Close is the only way to decrement it. It is the only
290−// entry point that mutates acceptedRuns.
291−func (a *sessionAgent) BeginAccepted(sessionID string) *AcceptedRun {
292− a.acceptedMu.Lock()
293− defer a.acceptedMu.Unlock()
294− count, _ := a.acceptedRuns.Get(sessionID)
295− a.acceptedRuns.Set(sessionID, count+1)
296− a.acceptSeqGen++
297− return &AcceptedRun{agent: a, sessionID: sessionID, seq: a.acceptSeqGen}
298−}
299−
300−// endAccepted decrements the accept counter for sessionID. It is only
301−// called via AcceptedRun.Close. It uses a dedicated lock (not the
302−// per-session dispatch mutex) so it can run while Run holds dispatchMu
303−// for the same session without deadlocking.
304−//
305−// When the count reaches zero the session's cancel mark is dropped: no
306−// accepted handle remains for it to cover, and any handle accepted later
307−// gets a strictly higher sequence that the mark would not match anyway.
308−// Handles canceled on entry never reach RunComplete, so this is the only
309−// place that clears the mark for an all-canceled batch. Sibling handles
310−// covered by the same mark are serialized on the per-session dispatch
311−// mutex and read the mark before they Close, so this never clears it out
312−// from under a covered handle still waiting to enter Run.
313−func (a *sessionAgent) endAccepted(sessionID string) {
314− a.acceptedMu.Lock()
315− defer a.acceptedMu.Unlock()
316− count, ok := a.acceptedRuns.Get(sessionID)
317− if !ok || count <= 1 {
318− a.acceptedRuns.Del(sessionID)
319− a.cancelMark.Del(sessionID)
320− return
321− }
322− a.acceptedRuns.Set(sessionID, count-1)
323−}
324−
325−// sessionMu returns the per-session dispatch mutex, creating it on first
326−// use. Creation is guarded so concurrent callers always observe the same
327−// mutex instance for a given session.
328−func (a *sessionAgent) sessionMu(sessionID string) *sync.Mutex {
329− if mu, ok := a.dispatchMu.Get(sessionID); ok {
330− return mu
331− }
332− a.dispatchMuCreate.Lock()
333− defer a.dispatchMuCreate.Unlock()
334− if mu, ok := a.dispatchMu.Get(sessionID); ok {
335− return mu
336− }
337− mu := &sync.Mutex{}
338− a.dispatchMu.Set(sessionID, mu)
339− return mu
340−}
341−
342−// enqueueCall appends call to the session's message queue. The
343−// OnComplete hook is stripped: the caller that supplied it (typically
344−// coordinator.Run) has its own retry/coalesce scope that ends when it
345−// returns, so by the time the queue drains nobody is left to consume the
346−// buffered terminal event. The recursive Run falls back to the default
347−// broker publish, which is what existing subscribers expect for queued
348−// turns.
349−func (a *sessionAgent) enqueueCall(call SessionAgentCall) {
350− existing, ok := a.messageQueue.Get(call.SessionID)
351− if !ok {
352− existing = make([]SessionAgentCall, 0, 4)
353− }
354− queued := call
355− if call.Accepted != nil {
356− // Preserve the accept sequence after the handle is stripped so
357− // the queue-drain paths can tell a follow-up queued before a
358− // cancel (covered by the mark) from one queued after it.
359− queued.acceptSeq = call.Accepted.seq
360− }
361− queued.OnComplete = nil
362− queued.Accepted = nil
363− existing = append(existing, queued)
364− a.messageQueue.Set(call.SessionID, existing)
365−}
366−
367−// drainQueueForStep partitions the session's queued calls for the current
368−// streaming step under the per-session dispatch mutex so the filtering is
369−// atomic against a concurrent Cancel: canceledBySeq requires the caller to
370−// hold that mutex, and evaluating it here (rather than after unlocking)
371−// prevents a cancel recorded between the drain and the check from being
372−// observed inconsistently.
373−//
374−// Calls covered by a pending cancel are dropped; the dropped ones that
375−// carry a RunID are returned in canceledWithRunID so the caller can
376−// publish their terminal cancelled RunComplete (a caller waiting on that
377−// RunID, e.g. `crush run`, would otherwise hang). Uncanceled calls without
378−// a RunID are returned in fold to be folded into the active turn,
379−// preserving the existing follow-up behavior. Uncanceled calls that carry
380−// a RunID are left in the queue so each runs as its own turn via the
381−// recursive run path and publishes its own RunComplete, giving every
382−// RunID-bearing prompt an explicit lifecycle instead of being silently
383−// absorbed into another turn. fold is processed by the caller without the
384−// lock held.
385−func (a *sessionAgent) drainQueueForStep(sessionID string) (fold, canceledWithRunID []SessionAgentCall) {
386− dispatchLock := a.sessionMu(sessionID)
387− dispatchLock.Lock()
388− defer dispatchLock.Unlock()
389− queuedCalls, _ := a.messageQueue.Get(sessionID)
390− var keep []SessionAgentCall
391− for _, queued := range queuedCalls {
392− if a.canceledBySeq(sessionID, queued.acceptSeq) {
393− if queued.RunID != "" {
394− canceledWithRunID = append(canceledWithRunID, queued)
395− }
396− continue
397− }
398− if queued.RunID != "" {
399− keep = append(keep, queued)
400− continue
401− }
402− fold = append(fold, queued)
403− }
404− if len(keep) == 0 {
405− a.messageQueue.Del(sessionID)
406− } else {
407− a.messageQueue.Set(sessionID, keep)
408− }
409− return fold, canceledWithRunID
410−}
411−
412−// publishCanceledQueueDrops emits a terminal cancelled RunComplete for
413−// every dropped queued call that carries a RunID. A queued prompt removed
414−// from the queue without ever running — covered by a pending cancel, or
415−// cleared by Cancel/ClearQueue — would otherwise leave a caller blocked on
416−// that RunID: `crush run` ignores live message events and exits only on a
417−// RunComplete whose RunID matches. Calls without a RunID had no such waiter
418−// and are dropped silently as before. A detached, bounded context keeps the
419−// must-deliver publish alive even when the run context that triggered the
420−// drop is already canceled.
421−func (a *sessionAgent) publishCanceledQueueDrops(drops []SessionAgentCall) {
422− var hasRunID bool
423− for _, d := range drops {
424− if d.RunID != "" {
425− hasRunID = true
426− break
427− }
428− }
429− if !hasRunID {
430− return
431− }
432− ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
433− defer cancel()
434− for _, d := range drops {
435− if d.RunID == "" {
436− continue
437− }
438− a.publishRunComplete(ctx, d, notify.RunComplete{
439− SessionID: d.SessionID,
440− RunID: d.RunID,
441− Cancelled: true,
442− })
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 }
157 }
533− a.runComplete.PublishMustDeliver(ctx, pubsub.UpdatedEvent, complete)
534}
158}
535
159
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 {
160+func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy.AgentResult, error) {
543 if call.Prompt == "" && !message.ContainsTextAttachment(call.Attachments) {
161 if call.Prompt == "" && !message.ContainsTextAttachment(call.Attachments) {
544− return ErrEmptyPrompt
162+ return nil, ErrEmptyPrompt
545 }
163 }
546 if call.SessionID == "" {
164 if call.SessionID == "" {
547− return ErrSessionMissing
165+ return nil, ErrSessionMissing
548− }
549− return nil
550−}
551−
552−func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *fantasy.AgentResult, retErr error) {
553− if err := ValidateCall(call); err != nil {
554− return nil, err
555 }
166 }
556
167
557− // genCtx/cancel are the run context and its cancel func. For the
168+ // Queue the message if busy
558− // accepted (fire-and-forget) dispatch path they are created under
169+ if a.IsSessionBusy(call.SessionID) {
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)
170+ existing, ok := a.messageQueue.Get(call.SessionID)
577− mu.Lock()
171+ if !ok {
578−
172+ existing = []SessionAgentCall{}
579− if a.canceledBySeq(call.SessionID, call.Accepted.seq) {
580− // Cancel-on-entry: a cancel arrived while this run was
581− // dispatched but not yet active, and this handle's accept
582− // sequence is at or below the session's cancel mark. The
583− // mark is left in place so sibling handles it also covers
584− // observe the same cancel; release the accept reservation,
585− // drop the lock, and persist a canceled turn without
586− // entering Stream.
587− //
588− // This path returns before the streaming defer that
589− // publishes RunComplete is installed, so emit the terminal
590− // event explicitly. Without it, a caller waiting on
591− // RunComplete for this RunID (e.g. `crush run`, which
592− // ignores message events and blocks on RunComplete) would
593− // hang on an immediately-canceled accepted run.
594− call.Accepted.Close()
595− mu.Unlock()
596− complete := notify.RunComplete{
597− SessionID: call.SessionID,
598− RunID: call.RunID,
599− Cancelled: true,
600− }
601− if err := a.persistCanceledTurn(ctx, call, false); err != nil {
602− complete.Error = err.Error()
603− a.publishRunComplete(ctx, call, complete)
604− return nil, err
605− }
606− a.publishRunComplete(ctx, call, complete)
607− return nil, nil
608− }
609−
610− if a.IsSessionBusy(call.SessionID) {
611− // Busy: an earlier prompt is active. Queue this call and
612− // release the accept reservation. A Cancel arriving after
613− // this point sees the active entry and clears the queue.
614− a.enqueueCall(call)
615− call.Accepted.Close()
616− mu.Unlock()
617− return nil, nil
618 }
173 }
619−
174+ existing = append(existing, call)
620− // Idle: become the active run. Register the cancel func before
621− // dropping the lock so a Cancel that arrives between here and
622− // assistant creation is not lost.
623− runCtx := context.WithValue(ctx, tools.SessionIDContextKey, call.SessionID)
624− genCtx, cancel = context.WithCancel(runCtx)
625− a.activeRequests.Set(call.SessionID, cancel)
175+ a.messageQueue.Set(call.SessionID, existing)
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)
641 return nil, nil
176 return nil, nil
642 }
177 }
643
178
644 // Copy mutable fields under lock to avoid races with SetTools/SetModels.
179 // Copy mutable fields under lock to avoid races with SetTools/SetModels.
645 agentTools := a.tools.Copy()
180 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− )
653 largeModel := a.largeModel.Get()
181 largeModel := a.largeModel.Get()
654 systemPrompt := a.systemPrompt.Get()
182 systemPrompt := a.systemPrompt.Get()
655 promptPrefix := a.systemPromptPrefix.Get()
183 promptPrefix := a.systemPromptPrefix.Get()
@@ -693,11 +221,11 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
693 }
221 }
694
222
695 var wg sync.WaitGroup
223 var wg sync.WaitGroup
696− // Generate title from the first real (non-shell) user prompt.
224+ // Generate title if first message.
697− if !hasUserTextMessage(msgs) {
225+ if len(msgs) == 0 {
698 titleCtx := ctx // Copy to avoid race with ctx reassignment below.
226 titleCtx := ctx // Copy to avoid race with ctx reassignment below.
699 wg.Go(func() {
227 wg.Go(func() {
700− a.GenerateTitle(titleCtx, call.SessionID, call.Prompt)
228+ a.generateTitle(titleCtx, call.SessionID, call.Prompt)
701 })
229 })
702 }
230 }
703 defer wg.Wait()
231 defer wg.Wait()
@@ -707,96 +235,29 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
707 if err != nil {
235 if err != nil {
708 return nil, err
236 return nil, err
709 }
237 }
710− userMsgCreated = true
711
238
712 // Add the session to the context.
239 // Add the session to the context.
713 ctx = context.WithValue(ctx, tools.SessionIDContextKey, call.SessionID)
240 ctx = context.WithValue(ctx, tools.SessionIDContextKey, call.SessionID)
714
241
715− // For the accepted dispatch path the run context and cancel func
716− // were already created and registered under dispatchMu above; reuse
717− // them. For the in-process path create them here, preserving the
718− // original ordering.
719− if !activeRegistered {
720− genCtx, cancel = context.WithCancel(ctx)
242+ genCtx, cancel := context.WithCancel(ctx)
721− a.activeRequests.Set(call.SessionID, cancel)
243+ a.activeRequests.Set(call.SessionID, cancel)
722−
244+
723− defer cancel()
245+ defer cancel()
724− defer a.activeRequests.Del(call.SessionID)
246+ defer a.activeRequests.Del(call.SessionID)
725− }
247+
726− // skipRunComplete is set just before the queued-recursion path so
727− // the outer Run doesn't publish a RunComplete that would race
728− // with — and be superseded by — the recursive call's own
729− // RunComplete (each queued user prompt is its own turn and
730− // publishes exactly one terminal event).
731− var skipRunComplete bool
732− // currentAssistant is declared here so the deferred RunComplete
733− // publish below can capture the pointer that PrepareStep will
734− // later (re)assign for each streaming step. The final assistant
735− // message of the turn is the value reachable through this
736− // pointer when the defer runs.
737− var currentAssistant *message.Message
738− // Drain any debounced message updates before returning. message.Service
739− // already flushes synchronously on terminal updates, but a defer here
740− // guarantees the contract at every Run exit (success, error, panic
741− // recovery upstream) without callers needing to know.
742− //
743− // After the flush completes — meaning all per-message
744− // Publish(UpdatedEvent) calls have fired and been buffered into
745− // every subscriber's channel — publish the authoritative
746− // RunComplete event for this turn. The flush-then-publish order
747− // gives well-behaved clients the best chance of seeing the final
748− // message event before RunComplete; the embedded Text field
749− // reconciles for clients that observe the events out of order
750− // (the pubsub broker fan-in does not serialize publishes from
751− // different upstream brokers).
752− defer func() {
753− // Use a context detached from the run context: workspace
754− // shutdown cancels ctx before this goroutine returns, but the
755− // buffered streaming deltas must still land before the DB is
756− // closed. A short timeout bounds the flush.
757− flushCtx, flushCancel := context.WithTimeout(context.WithoutCancel(ctx), 5*time.Second)
758− defer flushCancel()
759− if flushErr := a.messages.FlushAll(flushCtx); flushErr != nil {
760− slog.Error("Failed to flush pending message updates after run", "error", flushErr)
761− }
762− if skipRunComplete {
763− return
764− }
765− complete := notify.RunComplete{SessionID: call.SessionID, RunID: call.RunID}
766− if currentAssistant != nil {
767− complete.MessageID = currentAssistant.ID
768− complete.Text = currentAssistant.Content().String()
769− }
770− if retErr != nil {
771− complete.Error = retErr.Error()
772− complete.Cancelled = errors.Is(retErr, context.Canceled)
773− } else if ctx.Err() != nil {
774− complete.Cancelled = true
775− }
776− // Prefer the per-call hook when supplied so the coordinator
777− // can coalesce retries (e.g. unauthorized → re-auth → retry)
778− // into a single user-visible terminal event. The fallback
779− // must-deliver publish applies bounded-blocking semantics to
780− // the authoritative terminal event so a momentarily-full
781− // subscriber channel can't silently drop it and hang
782− // non-interactive clients waiting on RunComplete.
783− a.publishRunComplete(ctx, call, complete)
784− }()
785−
786− history, files := a.preparePrompt(msgs, largeModel.CatwalkCfg.SupportsImages, call.Attachments...)
248+ history, files := a.preparePrompt(msgs, call.Attachments...)
787
249
788 startTime := time.Now()
250 startTime := time.Now()
789 a.eventPromptSent(call.SessionID)
251 a.eventPromptSent(call.SessionID)
790
252
791− var stepMessages []fantasy.Message
253+ var currentAssistant *message.Message
792 var shouldSummarize bool
254 var shouldSummarize bool
793− sanitizedToolCalls := make(map[string]bool)
794 // Don't send MaxOutputTokens if 0 — some providers (e.g. LM Studio) reject it
255 // Don't send MaxOutputTokens if 0 — some providers (e.g. LM Studio) reject it
795 var maxOutputTokens *int64
256 var maxOutputTokens *int64
796 if call.MaxOutputTokens > 0 {
257 if call.MaxOutputTokens > 0 {
797 maxOutputTokens = &call.MaxOutputTokens
258 maxOutputTokens = &call.MaxOutputTokens
798 }
259 }
799− result, err = agent.Stream(genCtx, fantasy.AgentStreamCall{
260+ result, err := agent.Stream(genCtx, fantasy.AgentStreamCall{
800 Prompt: message.PromptWithTextAttachments(call.Prompt, call.Attachments),
261 Prompt: message.PromptWithTextAttachments(call.Prompt, call.Attachments),
801 Files: files,
262 Files: files,
802 Messages: history,
263 Messages: history,
@@ -814,29 +275,11 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
814 }
275 }
815
276
816 // Use latest tools (updated by SetTools when MCP tools change).
277 // Use latest tools (updated by SetTools when MCP tools change).
817− // Reuse the previous step's copy unless SetTools has bumped the
818− // generation, so an unchanged tool set isn't re-copied every step.
819− if gen := a.toolsGen.Load(); !stepToolsInit || gen != stepToolsGen {
820− stepTools = a.tools.Copy()
821− stepToolsGen = gen
822− stepToolsInit = true
823− }
824− prepared.Tools = stepTools
278+ prepared.Tools = a.tools.Copy()
825−
279+
826− // Drain queued follow-up prompts for this step. Calls covered
280+ queuedCalls, _ := a.messageQueue.Get(call.SessionID)
827− // by a cancel recorded while they sat in the queue are dropped:
281+ a.messageQueue.Del(call.SessionID)
828− // a cancel that arrived after a prompt was queued must not let
829− // it run as part of this step. Coverage is per-call by accept
830− // sequence so a follow-up queued after the cancel (higher seq)
831− // is not dropped. A dropped prompt carrying a RunID still gets
832− // its terminal cancelled RunComplete so a caller waiting on it
833− // does not hang. Uncanceled prompts without a RunID are folded
834− // into this turn; uncanceled prompts with a RunID are left
835− // queued so each runs as its own turn (with its own
836− // RunComplete) via the recursive run path below.
837− fold, canceledRunIDs := a.drainQueueForStep(call.SessionID)
838− a.publishCanceledQueueDrops(canceledRunIDs)
839− for _, queued := range fold {
282+ for _, queued := range queuedCalls {
840 userMessage, createErr := a.createUserMessage(callContext, queued)
283 userMessage, createErr := a.createUserMessage(callContext, queued)
841 if createErr != nil {
284 if createErr != nil {
842 return callContext, prepared, createErr
285 return callContext, prepared, createErr
@@ -866,13 +309,6 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
866 prepared.Messages = append([]fantasy.Message{fantasy.NewSystemMessage(promptPrefix)}, prepared.Messages...)
309 prepared.Messages = append([]fantasy.Message{fantasy.NewSystemMessage(promptPrefix)}, prepared.Messages...)
867 }
310 }
868
311
869− // Save a reference to the prepared messages for token
870− // estimation in OnStepFinish. No clone needed here — the
871− // messages are not modified between PrepareStep and
872− // OnStepFinish (which run sequentially), and the clone is
873− // only needed when the provider returns zero usage.
874− stepMessages = prepared.Messages
875−
876 var assistantMsg message.Message
312 var assistantMsg message.Message
877 assistantMsg, err = a.messages.Create(callContext, call.SessionID, message.CreateMessageParams{
313 assistantMsg, err = a.messages.Create(callContext, call.SessionID, message.CreateMessageParams{
878 Role: message.Assistant,
314 Role: message.Assistant,
@@ -944,14 +380,10 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
944 slog.Warn("Provider request failed, retrying", providerRetryLogFields(err, delay)...)
380 slog.Warn("Provider request failed, retrying", providerRetryLogFields(err, delay)...)
945 },
381 },
946 OnToolCall: func(tc fantasy.ToolCallContent) error {
382 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− }
951 toolCall := message.ToolCall{
383 toolCall := message.ToolCall{
952 ID: tc.ToolCallID,
384 ID: tc.ToolCallID,
953 Name: tc.ToolName,
385 Name: tc.ToolName,
954− Input: input,
386+ Input: tc.Input,
955 ProviderExecuted: false,
387 ProviderExecuted: false,
956 Finished: true,
388 Finished: true,
957 }
389 }
@@ -962,10 +394,6 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
962 },
394 },
963 OnToolResult: func(result fantasy.ToolResultContent) error {
395 OnToolResult: func(result fantasy.ToolResultContent) error {
964 toolResult := a.convertToToolResult(result)
396 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− }
969 // Use parent ctx instead of genCtx to ensure the message is created
397 // Use parent ctx instead of genCtx to ensure the message is created
970 // even if the request is canceled mid-stream
398 // even if the request is canceled mid-stream
971 _, createMsgErr := a.messages.Create(ctx, currentAssistant.SessionID, message.CreateMessageParams{
399 _, createMsgErr := a.messages.Create(ctx, currentAssistant.SessionID, message.CreateMessageParams{
@@ -977,9 +405,6 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
977 return createMsgErr
405 return createMsgErr
978 },
406 },
979 OnStepFinish: func(stepResult fantasy.StepResult) error {
407 OnStepFinish: func(stepResult fantasy.StepResult) error {
980− for _, w := range stepResult.Warnings {
981− slog.Warn("Provider warning", "type", w.Type, "message", w.Message)
982− }
983 finishReason := message.FinishReasonUnknown
408 finishReason := message.FinishReasonUnknown
984 switch stepResult.FinishReason {
409 switch stepResult.FinishReason {
985 case fantasy.FinishReasonLength:
410 case fantasy.FinishReasonLength:
@@ -1009,9 +434,7 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
1009 if getSessionErr != nil {
434 if getSessionErr != nil {
1010 return getSessionErr
435 return getSessionErr
1011 }
436 }
1012− usage, estimated := fallbackStepUsage(stepMessages, stepResult)
1013− a.updateSessionUsage(largeModel, &updatedSession, usage, a.openrouterCost(stepResult.ProviderMetadata), estimated)
437+ a.updateSessionUsage(largeModel, &updatedSession, stepResult.Usage, a.openrouterCost(stepResult.ProviderMetadata))
1014− extractHyperCredits(stepResult.ProviderMetadata)
1015 _, sessionErr := a.sessions.Save(ctx, updatedSession)
438 _, sessionErr := a.sessions.Save(ctx, updatedSession)
1016 if sessionErr != nil {
439 if sessionErr != nil {
1017 return sessionErr
440 return sessionErr
@@ -1053,36 +476,13 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
1053 isHyper := largeModel.ModelCfg.Provider == hyper.Name
476 isHyper := largeModel.ModelCfg.Provider == hyper.Name
1054 isCancelErr := errors.Is(err, context.Canceled)
477 isCancelErr := errors.Is(err, context.Canceled)
1055 if currentAssistant == nil {
478 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− }
1068 return result, err
479 return result, err
1069 }
480 }
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()
1079 // Ensure we finish thinking on error to close the reasoning state.
481 // Ensure we finish thinking on error to close the reasoning state.
1080 currentAssistant.FinishThinking()
482 currentAssistant.FinishThinking()
1081 toolCalls := currentAssistant.ToolCalls()
483 toolCalls := currentAssistant.ToolCalls()
1082− // INFO: we use the cleanup context here because the genCtx has been cancelled.
484+ // INFO: we use the parent context here because the genCtx has been cancelled.
1083− // Only load messages from the current assistant message onward — tool
1084− // results for this turn's tool calls can only exist after it.
1085− msgs, createErr := a.messages.ListAfter(cleanupCtx, currentAssistant.SessionID, currentAssistant.ID)
485+ msgs, createErr := a.messages.List(ctx, currentAssistant.SessionID)
1086 if createErr != nil {
486 if createErr != nil {
1087 return nil, createErr
487 return nil, createErr
1088 }
488 }
@@ -1091,7 +491,7 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
1091 tc.Finished = true
491 tc.Finished = true
1092 tc.Input = "{}"
492 tc.Input = "{}"
1093 currentAssistant.AddToolCall(tc)
493 currentAssistant.AddToolCall(tc)
1094− updateErr := a.messages.Update(cleanupCtx, *currentAssistant)
494+ updateErr := a.messages.Update(ctx, *currentAssistant)
1095 if updateErr != nil {
495 if updateErr != nil {
1096 return nil, updateErr
496 return nil, updateErr
1097 }
497 }
@@ -1124,7 +524,7 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
1124 Content: content,
524 Content: content,
1125 IsError: true,
525 IsError: true,
1126 }
526 }
1127− _, createErr = a.messages.Create(cleanupCtx, currentAssistant.SessionID, message.CreateMessageParams{
527+ _, createErr = a.messages.Create(ctx, currentAssistant.SessionID, message.CreateMessageParams{
1128 Role: message.Tool,
528 Role: message.Tool,
1129 Parts: []message.ContentPart{
529 Parts: []message.ContentPart{
1130 toolResult,
530 toolResult,
@@ -1142,6 +542,14 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
1142 currentAssistant.AddFinish(message.FinishReasonCanceled, "User canceled request", "")
542 currentAssistant.AddFinish(message.FinishReasonCanceled, "User canceled request", "")
1143 } else if isHyper && errors.As(err, &providerErr) && providerErr.StatusCode == http.StatusUnauthorized {
543 } else if isHyper && errors.As(err, &providerErr) && providerErr.StatusCode == http.StatusUnauthorized {
1144 currentAssistant.AddFinish(message.FinishReasonError, "Unauthorized", `Please re-authenticate with Hyper. You can also run "crush auth" to re-authenticate.`)
544 currentAssistant.AddFinish(message.FinishReasonError, "Unauthorized", `Please re-authenticate with Hyper. You can also run "crush auth" to re-authenticate.`)
545+ if a.notify != nil {
546+ a.notify.Publish(pubsub.CreatedEvent, notify.Notification{
547+ SessionID: call.SessionID,
548+ SessionTitle: currentSession.Title,
549+ Type: notify.TypeReAuthenticate,
550+ ProviderID: largeModel.ModelCfg.Provider,
551+ })
552+ }
1145 } else if isHyper && errors.As(err, &providerErr) && providerErr.StatusCode == http.StatusPaymentRequired {
553 } else if isHyper && errors.As(err, &providerErr) && providerErr.StatusCode == http.StatusPaymentRequired {
1146 url := hyper.BaseURL()
554 url := hyper.BaseURL()
1147 link := linkStyle.Hyperlink(url, "id=hyper").Render(url)
555 link := linkStyle.Hyperlink(url, "id=hyper").Render(url)
@@ -1163,15 +571,25 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
1163 } else {
571 } else {
1164 currentAssistant.AddFinish(message.FinishReasonError, defaultTitle, err.Error())
572 currentAssistant.AddFinish(message.FinishReasonError, defaultTitle, err.Error())
1165 }
573 }
1166− // Note: we use the cleanup context here because the genCtx has been
574+ // Note: we use the parent context here because the genCtx has been
1167 // cancelled.
575 // cancelled.
1168− updateErr := a.messages.Update(cleanupCtx, *currentAssistant)
576+ updateErr := a.messages.Update(ctx, *currentAssistant)
1169 if updateErr != nil {
577 if updateErr != nil {
1170 return nil, updateErr
578 return nil, updateErr
1171 }
579 }
1172 return nil, err
580 return nil, err
1173 }
581 }
1174
582
583+ // Send notification that agent has finished its turn (skip for
584+ // nested/non-interactive sessions).
585+ if !call.NonInteractive && a.notify != nil {
586+ a.notify.Publish(pubsub.CreatedEvent, notify.Notification{
587+ SessionID: call.SessionID,
588+ SessionTitle: currentSession.Title,
589+ Type: notify.TypeAgentFinished,
590+ })
591+ }
592+
1175 if shouldSummarize {
593 if shouldSummarize {
1176 a.activeRequests.Del(call.SessionID)
594 a.activeRequests.Del(call.SessionID)
1177 if summarizeErr := a.Summarize(genCtx, call.SessionID, call.ProviderOptions); summarizeErr != nil {
595 if summarizeErr := a.Summarize(genCtx, call.SessionID, call.ProviderOptions); summarizeErr != nil {
@@ -1189,123 +607,17 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
1189 }
607 }
1190 }
608 }
1191
609
1192− // Release active request before publishing the notification.
610+ // Release active request before processing queued messages.
1193− // TUI handlers poll IsSessionBusy() and only re-evaluate when a
1194− // tea.Msg arrives, so the cleanup must precede the notify or
1195− // subscribers see stale busy state at the moment of receipt.
1196 a.activeRequests.Del(call.SessionID)
611 a.activeRequests.Del(call.SessionID)
1197 cancel()
612 cancel()
1198
613
1199− // Send notification that agent has finished its turn (skip for
614+ queuedMessages, ok := a.messageQueue.Get(call.SessionID)
1200− // nested/non-interactive sessions).
1201− if !call.NonInteractive && a.notify != nil {
1202− a.notify.Publish(pubsub.CreatedEvent, notify.Notification{
1203− SessionID: call.SessionID,
1204− SessionTitle: currentSession.Title,
1205− Type: notify.TypeAgentFinished,
1206− })
1207− }
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()
1223− queuedMessages, _ := a.messageQueue.Get(call.SessionID)
1224− if mark, ok := a.cancelMark.Get(call.SessionID); ok && mark > 0 && len(queuedMessages) > 0 {
1225− // A cancel was recorded for this session (e.g. it arrived while
1226− // this run was active and follow-ups had been queued). Drop the
1227− // queued prompts it covers (accept sequence at or below the
1228− // mark, or untracked); keep any queued after the cancel (higher
1229− // sequence) so they still run.
1230− var kept []SessionAgentCall
1231− var canceledRunIDDrops []SessionAgentCall
1232− for _, q := range queuedMessages {
1233− if q.acceptSeq == 0 || q.acceptSeq <= mark {
1234− if q.RunID != "" {
1235− canceledRunIDDrops = append(canceledRunIDDrops, q)
1236− }
1237− continue
1238− }
1239− kept = append(kept, q)
1240− }
1241− queuedMessages = kept
1242− a.messageQueue.Set(call.SessionID, kept)
1243− // A dropped prompt carrying a RunID must still publish its
1244− // terminal cancelled RunComplete so a caller waiting on that
1245− // RunID does not hang.
1246− a.publishCanceledQueueDrops(canceledRunIDDrops)
1247− }
1248− if len(queuedMessages) == 0 {
615+ if !ok || 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()
1263 return result, err
616 return result, err
1264 }
617 }
1265− // There are queued messages, restart the loop. Suppress the outer
618+ // There are queued messages restart the loop.
1266− // defer's emit: it would otherwise observe the recursive Run's retErr
1267− // (named-return clobbering through the return below) against this
1268− // turn's MessageID/Text and publish a mixed, racing event.
1269− skipRunComplete = true
1270− // Decide whether this turn still owes its own terminal RunComplete.
1271− // Each submitted prompt with a RunID has its own lifecycle, so a turn
1272− // that is finished and handing off to a *different* queued prompt must
1273− // publish its own RunComplete here — leaving it to the recursive turn
1274− // (which carries a different RunID) would hang a caller waiting on
1275− // this turn's RunID. The exception is the summarize-continuation path,
1276− // which re-queues this same call (same RunID) to resume after a
1277− // summary; in that case the eventual terminal turn for this RunID
1278− // publishes, so publishing now would double-emit.
1279− outerOwesRunComplete := call.RunID != ""
1280− if outerOwesRunComplete {
1281− for _, q := range queuedMessages {
1282− if q.RunID == call.RunID {
1283− outerOwesRunComplete = false
1284− break
1285− }
1286− }
1287− }
1288 firstQueuedMessage := queuedMessages[0]
619 firstQueuedMessage := queuedMessages[0]
1289 a.messageQueue.Set(call.SessionID, queuedMessages[1:])
620 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− }
1309 return a.Run(ctx, firstQueuedMessage)
621 return a.Run(ctx, firstQueuedMessage)
1310}
622}
1311
623
@@ -1331,27 +643,21 @@ func (a *sessionAgent) Summarize(ctx context.Context, sessionID string, opts fan
1331 return nil
643 return nil
1332 }
644 }
1333
645
1334− aiMsgs, _ := a.preparePrompt(msgs, largeModel.CatwalkCfg.SupportsImages)
646+ aiMsgs, _ := a.preparePrompt(msgs)
1335
647
1336 genCtx, cancel := context.WithCancel(ctx)
648 genCtx, cancel := context.WithCancel(ctx)
1337 a.activeRequests.Set(sessionID, cancel)
649 a.activeRequests.Set(sessionID, cancel)
1338 defer a.activeRequests.Del(sessionID)
650 defer a.activeRequests.Del(sessionID)
1339 defer cancel()
651 defer cancel()
1340− defer func() {
1341− if flushErr := a.messages.FlushAll(ctx); flushErr != nil {
1342− slog.Error("Failed to flush pending message updates after summarize", "error", flushErr)
1343− }
1344− }()
1345
652
1346− agent := fantasy.NewAgent(
653+ agent := fantasy.NewAgent(largeModel.Model,
1347− largeModel.Model,
1348 fantasy.WithSystemPrompt(string(summaryPrompt)),
654 fantasy.WithSystemPrompt(string(summaryPrompt)),
1349 fantasy.WithUserAgent(userAgent),
655 fantasy.WithUserAgent(userAgent),
1350 )
656 )
1351 summaryMessage, err := a.messages.Create(ctx, sessionID, message.CreateMessageParams{
657 summaryMessage, err := a.messages.Create(ctx, sessionID, message.CreateMessageParams{
1352 Role: message.Assistant,
658 Role: message.Assistant,
1353− Model: largeModel.ModelCfg.Model,
659+ Model: largeModel.Model.Model(),
1354− Provider: largeModel.ModelCfg.Provider,
660+ Provider: largeModel.Model.Provider(),
1355 IsSummaryMessage: true,
661 IsSummaryMessage: true,
1356 })
662 })
1357 if err != nil {
663 if err != nil {
@@ -1397,12 +703,6 @@ func (a *sessionAgent) Summarize(ctx context.Context, sessionID string, opts fan
1397 deleteErr := a.messages.Delete(ctx, summaryMessage.ID)
703 deleteErr := a.messages.Delete(ctx, summaryMessage.ID)
1398 return deleteErr
704 return deleteErr
1399 }
705 }
1400− // Mark the summary message as finished with an error so the UI
1401− // stops spinning.
1402− summaryMessage.AddFinish(message.FinishReasonError, "Summarization Error", err.Error())
1403− if updateErr := a.messages.Update(ctx, summaryMessage); updateErr != nil {
1404− return updateErr
1405− }
1406 return err
706 return err
1407 }
707 }
1408
708
@@ -1422,42 +722,20 @@ func (a *sessionAgent) Summarize(ctx context.Context, sessionID string, opts fan
1422 }
722 }
1423 openrouterCost = &newCost
723 openrouterCost = &newCost
1424 }
724 }
1425− extractHyperCredits(step.ProviderMetadata)
1426 }
725 }
1427
726
1428− a.updateSessionUsage(largeModel, &currentSession, resp.TotalUsage, openrouterCost, false)
727+ a.updateSessionUsage(largeModel, &currentSession, resp.TotalUsage, openrouterCost)
1429
728
1430 // Just in case, get just the last usage info.
729 // Just in case, get just the last usage info.
1431 usage := resp.Response.Usage
730 usage := resp.Response.Usage
1432 currentSession.SummaryMessageID = summaryMessage.ID
731 currentSession.SummaryMessageID = summaryMessage.ID
1433− currentSession.CompletionTokens = summaryCompletionTokens(usage, summaryMessage)
732+ currentSession.CompletionTokens = usage.OutputTokens
1434 currentSession.PromptTokens = 0
733 currentSession.PromptTokens = 0
1435− currentSession.EstimatedUsage = usageIsZero(usage)
1436 _, err = a.sessions.Save(genCtx, currentSession)
734 _, err = a.sessions.Save(genCtx, currentSession)
1437− if err != nil {
1438− return err
735+ return err
1439− }
1440−
1441− // Release the active request before processing queued messages so that
1442− // Run() does not see the session as busy.
1443− a.activeRequests.Del(sessionID)
1444− cancel()
1445−
1446− // Process any messages that were queued while summarizing.
1447− queuedMessages, ok := a.messageQueue.Get(sessionID)
1448− if !ok || len(queuedMessages) == 0 {
1449− return nil
1450− }
1451− firstQueuedMessage := queuedMessages[0]
1452− a.messageQueue.Set(sessionID, queuedMessages[1:])
1453− _, qErr := a.Run(ctx, firstQueuedMessage)
1454− return qErr
1455}
736}
1456
737
1457−// cacheControlOptions is computed once for the process lifetime: the env check
1458−// is constant and callers only read (never mutate) the returned map, so the
1459−// same shared value can be reused across the ~3 calls per step.
1460−var cacheControlOptions = sync.OnceValue(func() fantasy.ProviderOptions {
738+func (a *sessionAgent) getCacheControlOptions() fantasy.ProviderOptions {
1461 if t, _ := strconv.ParseBool(os.Getenv("CRUSH_DISABLE_ANTHROPIC_CACHE")); t {
739 if t, _ := strconv.ParseBool(os.Getenv("CRUSH_DISABLE_ANTHROPIC_CACHE")); t {
1462 return fantasy.ProviderOptions{}
740 return fantasy.ProviderOptions{}
1463 }
741 }
@@ -1472,10 +750,6 @@ var cacheControlOptions = sync.OnceValue(func() fantasy.ProviderOptions {
1472 CacheControl: anthropic.CacheControl{Type: "ephemeral"},
750 CacheControl: anthropic.CacheControl{Type: "ephemeral"},
1473 },
751 },
1474 }
752 }
1475−})
1476−
1477−func (a *sessionAgent) getCacheControlOptions() fantasy.ProviderOptions {
1478− return cacheControlOptions()
1479}
753}
1480
754
1481func (a *sessionAgent) createUserMessage(ctx context.Context, call SessionAgentCall) (message.Message, error) {
755func (a *sessionAgent) createUserMessage(ctx context.Context, call SessionAgentCall) (message.Message, error) {
@@ -1495,12 +769,11 @@ func (a *sessionAgent) createUserMessage(ctx context.Context, call SessionAgentC
1495 return msg, nil
769 return msg, nil
1496}
770}
1497
771
1498−func (a *sessionAgent) preparePrompt(msgs []message.Message, supportsImages bool, attachments ...message.Attachment) ([]fantasy.Message, []fantasy.FilePart) {
772+func (a *sessionAgent) preparePrompt(msgs []message.Message, attachments ...message.Attachment) ([]fantasy.Message, []fantasy.FilePart) {
1499− history := make([]fantasy.Message, 0, len(msgs)+1)
773+ var history []fantasy.Message
1500 if !a.isSubAgent {
774 if !a.isSubAgent {
1501 history = append(history, fantasy.NewUserMessage(
775 history = append(history, fantasy.NewUserMessage(
1502− fmt.Sprintf(
1503− "<system_reminder>%s</system_reminder>",
776+ fmt.Sprintf("<system_reminder>%s</system_reminder>",
1504 `This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.
777 `This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.
1505If you are working on tasks that would benefit from a todo list please use the "todos" tool to create one.
778If you are working on tasks that would benefit from a todo list please use the "todos" tool to create one.
1506If not, please feel free to ignore. Again do not mention this message to the user.`,
779If not, please feel free to ignore. Again do not mention this message to the user.`,
@@ -1540,15 +813,7 @@ If not, please feel free to ignore. Again do not mention this message to the use
1540 }
813 }
1541 continue
814 continue
1542 }
815 }
1543− aiMsgs := m.ToAIMessage()
816+ history = append(history, m.ToAIMessage()...)
1544− if !supportsImages {
1545− for i := range aiMsgs {
1546− if aiMsgs[i].Role == fantasy.MessageRoleUser {
1547− aiMsgs[i].Content = filterFileParts(aiMsgs[i].Content)
1548− }
1549− }
1550− }
1551− history = append(history, aiMsgs...)
1552
817
1553 if m.Role == message.Assistant {
818 if m.Role == message.Assistant {
1554 if msg, ok := syntheticToolResultsForOrphanedCalls(m, knownToolResultIDs); ok {
819 if msg, ok := syntheticToolResultsForOrphanedCalls(m, knownToolResultIDs); ok {
@@ -1572,20 +837,6 @@ If not, please feel free to ignore. Again do not mention this message to the use
1572 return history, files
837 return history, files
1573}
838}
1574
839
1575−// filterFileParts removes fantasy.FilePart entries from a slice of message
1576−// parts. Used to strip image attachments from historical user messages when
1577−// the current model does not support them.
1578−func filterFileParts(parts []fantasy.MessagePart) []fantasy.MessagePart {
1579− filtered := make([]fantasy.MessagePart, 0, len(parts))
1580− for _, part := range parts {
1581− if _, ok := fantasy.AsMessagePart[fantasy.FilePart](part); ok {
1582− continue
1583− }
1584− filtered = append(filtered, part)
1585− }
1586− return filtered
1587−}
1588−
1589// filterOrphanedToolResults converts a tool message to a fantasy.Message,
840// filterOrphanedToolResults converts a tool message to a fantasy.Message,
1590// dropping any tool result parts whose tool_call_id has no matching tool call
841// dropping any tool result parts whose tool_call_id has no matching tool call
1591// in the known set. An orphaned result causes API validation to fail on every
842// in the known set. An orphaned result causes API validation to fail on every
@@ -1596,7 +847,7 @@ func filterOrphanedToolResults(m message.Message, knownToolCallIDs map[string]st
1596 if len(aiMsgs) == 0 {
847 if len(aiMsgs) == 0 {
1597 return fantasy.Message{}, false
848 return fantasy.Message{}, false
1598 }
849 }
1599− validParts := make([]fantasy.MessagePart, 0, len(aiMsgs[0].Content))
850+ var validParts []fantasy.MessagePart
1600 for _, part := range aiMsgs[0].Content {
851 for _, part := range aiMsgs[0].Content {
1601 tr, ok := fantasy.AsMessagePart[fantasy.ToolResultPart](part)
852 tr, ok := fantasy.AsMessagePart[fantasy.ToolResultPart](part)
1602 if !ok {
853 if !ok {
@@ -1606,8 +857,7 @@ func filterOrphanedToolResults(m message.Message, knownToolCallIDs map[string]st
1606 if _, known := knownToolCallIDs[tr.ToolCallID]; known {
857 if _, known := knownToolCallIDs[tr.ToolCallID]; known {
1607 validParts = append(validParts, part)
858 validParts = append(validParts, part)
1608 } else {
859 } else {
1609− slog.Warn(
1610− "Dropping orphaned tool result with no matching tool call",
860+ slog.Warn("Dropping orphaned tool result with no matching tool call",
1611 "tool_call_id", tr.ToolCallID,
861 "tool_call_id", tr.ToolCallID,
1612 )
862 )
1613 }
863 }
@@ -1628,13 +878,12 @@ func filterOrphanedToolResults(m message.Message, knownToolCallIDs map[string]st
1628// conversation. Returns the message and true if any synthetic results were
878// conversation. Returns the message and true if any synthetic results were
1629// produced.
879// produced.
1630func syntheticToolResultsForOrphanedCalls(m message.Message, knownToolResultIDs map[string]struct{}) (fantasy.Message, bool) {
880func syntheticToolResultsForOrphanedCalls(m message.Message, knownToolResultIDs map[string]struct{}) (fantasy.Message, bool) {
1631− syntheticParts := make([]fantasy.MessagePart, 0, len(m.ToolCalls()))
881+ var syntheticParts []fantasy.MessagePart
1632 for _, tc := range m.ToolCalls() {
882 for _, tc := range m.ToolCalls() {
1633 if _, hasResult := knownToolResultIDs[tc.ID]; hasResult {
883 if _, hasResult := knownToolResultIDs[tc.ID]; hasResult {
1634 continue
884 continue
1635 }
885 }
1636− slog.Warn(
1637− "Injecting synthetic tool result for orphaned tool call",
886+ slog.Warn("Injecting synthetic tool result for orphaned tool call",
1638 "tool_call_id", tc.ID,
887 "tool_call_id", tc.ID,
1639 "tool_name", tc.Name,
888 "tool_name", tc.Name,
1640 )
889 )
@@ -1655,66 +904,44 @@ func syntheticToolResultsForOrphanedCalls(m message.Message, knownToolResultIDs
1655}
904}
1656
905
1657func (a *sessionAgent) getSessionMessages(ctx context.Context, session session.Session) ([]message.Message, error) {
906func (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−
1669 msgs, err := a.messages.List(ctx, session.ID)
907 msgs, err := a.messages.List(ctx, session.ID)
1670 if err != nil {
908 if err != nil {
1671 return nil, fmt.Errorf("failed to list messages: %w", err)
909 return nil, fmt.Errorf("failed to list messages: %w", err)
1672 }
910 }
1673− return msgs, nil
1674−}
1675
911
1676−// hasUserTextMessage reports whether any user message in msgs contains
912+ if session.SummaryMessageID != "" {
1677−// text content (as opposed to only shell commands or other non-text parts).
913+ summaryMsgIndex := -1
1678−func hasUserTextMessage(msgs []message.Message) bool {
1679− for _, msg := range msgs {
1680− if msg.Role != message.User {
1681− continue
1682− }
1683− for _, part := range msg.Parts {
914+ for i, msg := range msgs {
1684− if tc, ok := part.(message.TextContent); ok && tc.Text != "" {
915+ if msg.ID == session.SummaryMessageID {
1685− return true
916+ summaryMsgIndex = i
917+ break
1686 }
918 }
1687 }
919 }
920+ if summaryMsgIndex != -1 {
921+ msgs = msgs[summaryMsgIndex:]
922+ msgs[0].Role = message.User
923+ }
1688 }
924 }
1689− return false
925+ return msgs, nil
1690}
926}
1691
927
1692−// GenerateTitle generates a session title based on the initial prompt.
928+// generateTitle generates a session titled based on the initial prompt.
1693−func (a *sessionAgent) GenerateTitle(ctx context.Context, sessionID string, userPrompt string) {
929+func (a *sessionAgent) generateTitle(ctx context.Context, sessionID string, userPrompt string) {
1694 if userPrompt == "" {
930 if userPrompt == "" {
1695 return
931 return
1696 }
932 }
1697
933
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−
1711 smallModel := a.smallModel.Get()
934 smallModel := a.smallModel.Get()
1712 largeModel := a.largeModel.Get()
935 largeModel := a.largeModel.Get()
1713 systemPromptPrefix := a.systemPromptPrefix.Get()
936 systemPromptPrefix := a.systemPromptPrefix.Get()
1714
937
938+ var maxOutputTokens int64 = 40
939+ if smallModel.CatwalkCfg.CanReason {
940+ maxOutputTokens = smallModel.CatwalkCfg.DefaultMaxTokens
941+ }
942+
1715 newAgent := func(m fantasy.LanguageModel, p []byte, tok int64) fantasy.Agent {
943 newAgent := func(m fantasy.LanguageModel, p []byte, tok int64) fantasy.Agent {
1716− return fantasy.NewAgent(
944+ return fantasy.NewAgent(m,
1717− m,
1718 fantasy.WithSystemPrompt(string(p)+"\n /no_think"),
945 fantasy.WithSystemPrompt(string(p)+"\n /no_think"),
1719 fantasy.WithMaxOutputTokens(tok),
946 fantasy.WithMaxOutputTokens(tok),
1720 fantasy.WithUserAgent(userAgent),
947 fantasy.WithUserAgent(userAgent),
@@ -1734,40 +961,41 @@ func (a *sessionAgent) GenerateTitle(ctx context.Context, sessionID string, user
1734 },
961 },
1735 }
962 }
1736
963
1737− type modelAttempt struct {
964+ // Use the small model to generate the title.
1738− name string
1739− model Model
1740− }
1741− attempts := []modelAttempt{
1742− {"small", smallModel},
965+ model := smallModel
1743− {"large", largeModel},
966+ agent := newAgent(model.Model, titlePrompt, maxOutputTokens)
1744− }
967+ resp, err := agent.Stream(ctx, streamCall)
1745−
968+ if err == nil {
1746− var resp *fantasy.AgentResult
969+ // We successfully generated a title with the small model.
1747− var err error
970+ slog.Debug("Generated title with small model")
1748− var model Model
971+ } else {
1749− var success bool
972+ // It didn't work. Let's try with the big model.
1750− for _, attempt := range attempts {
973+ slog.Error("Error generating title with small model; trying big model", "err", err)
1751− tok := int64(40)
974+ model = largeModel
1752− if attempt.model.CatwalkCfg.CanReason {
1753− tok = attempt.model.CatwalkCfg.DefaultMaxTokens
1754− }
1755− agent := newAgent(attempt.model.Model, titlePrompt, tok)
975+ agent = newAgent(model.Model, titlePrompt, maxOutputTokens)
1756 resp, err = agent.Stream(ctx, streamCall)
976 resp, err = agent.Stream(ctx, streamCall)
1757− if err == nil && resp.Response.FinishReason != fantasy.FinishReasonLength {
977+ if err == nil {
1758− model = attempt.model
1759− slog.Debug("Generated title with " + attempt.name + " model")
978+ slog.Debug("Generated title with large 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)
1765 } else {
979 } else {
1766− slog.Error("Title generation hit token limit with " + attempt.name + " model; trying next")
980+ // Welp, the large model didn't work either. Use the default
981+ // session name and return.
982+ slog.Error("Error generating title with large model", "err", err)
983+ saveErr := a.sessions.Rename(ctx, sessionID, DefaultSessionName)
984+ if saveErr != nil {
985+ slog.Error("Failed to save session title", "error", saveErr)
986+ }
987+ return
1767 }
988 }
1768 }
989 }
1769− if !success {
990+
1770− // The deferred fallback will save the default session name.
991+ if resp == nil {
992+ // Actually, we didn't get a response so we can't. Use the default
993+ // session name and return.
994+ slog.Error("Response is nil; can't generate title")
995+ saveErr := a.sessions.Rename(ctx, sessionID, DefaultSessionName)
996+ if saveErr != nil {
997+ slog.Error("Failed to save session title", "error", saveErr)
998+ }
1771 return
999 return
1772 }
1000 }
1773
1001
@@ -1780,17 +1008,7 @@ func (a *sessionAgent) GenerateTitle(ctx context.Context, sessionID string, user
1780 title = orphanThinkTagRegex.ReplaceAllString(title, "")
1008 title = orphanThinkTagRegex.ReplaceAllString(title, "")
1781
1009
1782 title = strings.TrimSpace(title)
1010 title = strings.TrimSpace(title)
1783− if title == "" {
1784− // LLM returned empty content. Use the prompt itself as a
1785− // fallback title, truncated to 50 chars, before resorting to
1786− // the generic default.
1787− fallback := strings.ReplaceAll(userPrompt, "\n", " ")
1788− fallback = strings.TrimSpace(fallback)
1789− if len(fallback) > 50 {
1790− fallback = ansi.Truncate(fallback, 50, "…")
1791− }
1792− title = cmp.Or(fallback, DefaultSessionName)
1011+ title = cmp.Or(title, DefaultSessionName)
1793− }
1794
1012
1795 // Calculate usage and cost.
1013 // Calculate usage and cost.
1796 var openrouterCost *float64
1014 var openrouterCost *float64
@@ -1803,7 +1021,6 @@ func (a *sessionAgent) GenerateTitle(ctx context.Context, sessionID string, user
1803 }
1021 }
1804 openrouterCost = &newCost
1022 openrouterCost = &newCost
1805 }
1023 }
1806− extractHyperCredits(step.ProviderMetadata)
1807 }
1024 }
1808
1025
1809 modelConfig := model.CatwalkCfg
1026 modelConfig := model.CatwalkCfg
@@ -1817,11 +1034,6 @@ func (a *sessionAgent) GenerateTitle(ctx context.Context, sessionID string, user
1817 cost = *openrouterCost
1034 cost = *openrouterCost
1818 }
1035 }
1819
1036
1820− // Skip cost accumulation
1821− if model.FlatRate {
1822− cost = 0
1823− }
1824−
1825 promptTokens := resp.TotalUsage.InputTokens + resp.TotalUsage.CacheCreationTokens
1037 promptTokens := resp.TotalUsage.InputTokens + resp.TotalUsage.CacheCreationTokens
1826 completionTokens := resp.TotalUsage.OutputTokens
1038 completionTokens := resp.TotalUsage.OutputTokens
1827
1039
@@ -1832,7 +1044,6 @@ func (a *sessionAgent) GenerateTitle(ctx context.Context, sessionID string, user
1832 slog.Error("Failed to save session title and usage", "error", saveErr)
1044 slog.Error("Failed to save session title and usage", "error", saveErr)
1833 return
1045 return
1834 }
1046 }
1835− titleSaved = true
1836}
1047}
1837
1048
1838func (a *sessionAgent) openrouterCost(metadata fantasy.ProviderMetadata) *float64 {
1049func (a *sessionAgent) openrouterCost(metadata fantasy.ProviderMetadata) *float64 {
@@ -1848,85 +1059,26 @@ func (a *sessionAgent) openrouterCost(metadata fantasy.ProviderMetadata) *float6
1848 return &opts.Usage.Cost
1059 return &opts.Usage.Cost
1849}
1060}
1850
1061
1851−// extractHyperCredits reads usage.remaining.hypercredits from OpenAI
1852−// provider metadata and stores it for the next FetchCredits call.
1853−func extractHyperCredits(metadata fantasy.ProviderMetadata) {
1854− openaiMeta, ok := metadata[openai.Name]
1855− if !ok {
1856− return
1857− }
1858− pm, ok := openaiMeta.(*openai.ProviderMetadata)
1859− if !ok {
1860− return
1861− }
1862− var remaining struct {
1863− Hypercredits float64 `json:"hypercredits"`
1864− }
1865− if pm.ExtraField("remaining", &remaining) && remaining.Hypercredits > 0 {
1866− hyper.SetBalance(int(math.Round(remaining.Hypercredits)))
1867− }
1868−}
1869−
1870−func (a *sessionAgent) updateSessionUsage(model Model, session *session.Session, usage fantasy.Usage, overrideCost *float64, estimated bool) {
1062+func (a *sessionAgent) updateSessionUsage(model Model, session *session.Session, usage fantasy.Usage, overrideCost *float64) {
1871− if !usageIsZero(usage) {
1872− session.EstimatedUsage = estimated
1873− }
1874−
1875 modelConfig := model.CatwalkCfg
1063 modelConfig := model.CatwalkCfg
1876 cost := modelConfig.CostPer1MInCached/1e6*float64(usage.CacheCreationTokens) +
1064 cost := modelConfig.CostPer1MInCached/1e6*float64(usage.CacheCreationTokens) +
1877 modelConfig.CostPer1MOutCached/1e6*float64(usage.CacheReadTokens) +
1065 modelConfig.CostPer1MOutCached/1e6*float64(usage.CacheReadTokens) +
1878 modelConfig.CostPer1MIn/1e6*float64(usage.InputTokens) +
1066 modelConfig.CostPer1MIn/1e6*float64(usage.InputTokens) +
1879 modelConfig.CostPer1MOut/1e6*float64(usage.OutputTokens)
1067 modelConfig.CostPer1MOut/1e6*float64(usage.OutputTokens)
1880
1068
1881− if !estimated {
1882− a.eventTokensUsed(session.ID, model, usage, cost)
1069+ a.eventTokensUsed(session.ID, model, usage, cost)
1883− }
1884
1070
1885− if estimated {
1071+ if overrideCost != nil {
1886− cost = 0
1072+ session.Cost += *overrideCost
1887 } else {
1073 } else {
1888− // Use override cost if available (e.g., from OpenRouter).
1074+ session.Cost += cost
1889− if overrideCost != nil {
1890− cost = *overrideCost
1891− }
1892−
1893− // Skip cost accumulation
1894− if model.FlatRate {
1895− cost = 0
1896− }
1897 }
1075 }
1898
1076
1899− session.Cost += cost
1900− updateSessionTokenCounters(session, usage)
1901−}
1902−
1903−func updateSessionTokenCounters(session *session.Session, usage fantasy.Usage) {
1904− if usage.OutputTokens != 0 {
1905− session.CompletionTokens = usage.OutputTokens
1077+ session.CompletionTokens = usage.OutputTokens
1906− }
1907− if promptTokens := usage.InputTokens + usage.CacheReadTokens; promptTokens != 0 {
1078+ session.PromptTokens = usage.InputTokens + usage.CacheReadTokens
1908− session.PromptTokens = promptTokens
1909− }
1910−}
1911−
1912−func summaryCompletionTokens(usage fantasy.Usage, summaryMessage message.Message) int64 {
1913− if usage.OutputTokens != 0 {
1914− return usage.OutputTokens
1915− }
1916− return approxTokenCount(summaryMessage.Content().Text) + approxTokenCount(summaryMessage.ReasoningContent().String())
1917}
1079}
1918
1080
1919func (a *sessionAgent) Cancel(sessionID string) {
1081func (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−
1930 // Cancel regular requests. Don't use Take() here - we need the entry to
1082 // Cancel regular requests. Don't use Take() here - we need the entry to
1931 // remain in activeRequests so IsBusy() returns true until the goroutine
1083 // remain in activeRequests so IsBusy() returns true until the goroutine
1932 // fully completes (including error handling that may access the DB).
1084 // fully completes (including error handling that may access the DB).
@@ -1942,40 +1094,16 @@ func (a *sessionAgent) Cancel(sessionID string) {
1942 cancel()
1094 cancel()
1943 }
1095 }
1944
1096
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−
1969 if a.QueuedPrompts(sessionID) > 0 {
1097 if a.QueuedPrompts(sessionID) > 0 {
1970 slog.Debug("Clearing queued prompts", "session_id", sessionID)
1098 slog.Debug("Clearing queued prompts", "session_id", sessionID)
1971− a.clearQueueAndNotify(sessionID)
1099+ a.messageQueue.Del(sessionID)
1972 }
1100 }
1973}
1101}
1974
1102
1975func (a *sessionAgent) ClearQueue(sessionID string) {
1103func (a *sessionAgent) ClearQueue(sessionID string) {
1976 if a.QueuedPrompts(sessionID) > 0 {
1104 if a.QueuedPrompts(sessionID) > 0 {
1977 slog.Debug("Clearing queued prompts", "session_id", sessionID)
1105 slog.Debug("Clearing queued prompts", "session_id", sessionID)
1978− a.clearQueueAndNotify(sessionID)
1106+ a.messageQueue.Del(sessionID)
1979 }
1107 }
1980}
1108}
1981
1109
@@ -1999,10 +1127,14 @@ func (a *sessionAgent) CancelAll() {
1999}
1127}
2000
1128
2001func (a *sessionAgent) IsBusy() bool {
1129func (a *sessionAgent) IsBusy() bool {
2002− // activeRequests only ever holds non-nil cancel funcs (Set with a
1130+ var busy bool
2003− // real func, removed via Del), so a length check is exact — and it
1131+ for cancelFunc := range a.activeRequests.Seq() {
2004− // avoids cloning the whole map, which Seq() does on every call.
1132+ if cancelFunc != nil {
2005− return a.activeRequests.Len() > 0
1133+ busy = true
1134+ break
1135+ }
1136+ }
1137+ return busy
2006}
1138}
2007
1139
2008func (a *sessionAgent) IsSessionBusy(sessionID string) bool {
1140func (a *sessionAgent) IsSessionBusy(sessionID string) bool {
@@ -2037,7 +1169,6 @@ func (a *sessionAgent) SetModels(large Model, small Model) {
2037
1169
2038func (a *sessionAgent) SetTools(tools []fantasy.AgentTool) {
1170func (a *sessionAgent) SetTools(tools []fantasy.AgentTool) {
2039 a.tools.SetSlice(tools)
1171 a.tools.SetSlice(tools)
2040− a.toolsGen.Add(1)
2041}
1172}
2042
1173
2043func (a *sessionAgent) SetSystemPrompt(systemPrompt string) {
1174func (a *sessionAgent) SetSystemPrompt(systemPrompt string) {
@@ -2069,8 +1200,7 @@ func (a *sessionAgent) convertToToolResult(result fantasy.ToolResultContent) mes
2069 case fantasy.ToolResultContentTypeMedia:
1200 case fantasy.ToolResultContentTypeMedia:
2070 if r, ok := fantasy.AsToolResultOutputType[fantasy.ToolResultOutputContentMedia](result.Result); ok {
1201 if r, ok := fantasy.AsToolResultOutputType[fantasy.ToolResultOutputContentMedia](result.Result); ok {
2071 if !stringext.IsValidBase64(r.Data) {
1202 if !stringext.IsValidBase64(r.Data) {
2072− slog.Warn(
2073− "Tool returned media with invalid base64 data, discarding image",
1203+ slog.Warn("Tool returned media with invalid base64 data, discarding image",
2074 "tool", result.ToolName,
1204 "tool", result.ToolName,
2075 "tool_call_id", result.ToolCallID,
1205 "tool_call_id", result.ToolCallID,
2076 )
1206 )
@@ -2114,15 +1244,12 @@ func (a *sessionAgent) convertToToolResult(result fantasy.ToolResultContent) mes
2114// AFTER: [tool result: "Image loaded - see attached"], [user: image attachment]
1244// AFTER: [tool result: "Image loaded - see attached"], [user: image attachment]
2115func (a *sessionAgent) workaroundProviderMediaLimitations(messages []fantasy.Message, largeModel Model) []fantasy.Message {
1245func (a *sessionAgent) workaroundProviderMediaLimitations(messages []fantasy.Message, largeModel Model) []fantasy.Message {
2116 providerSupportsMedia := largeModel.ModelCfg.Provider == string(catwalk.InferenceProviderAnthropic) ||
1246 providerSupportsMedia := largeModel.ModelCfg.Provider == string(catwalk.InferenceProviderAnthropic) ||
2117− largeModel.ModelCfg.Provider == string(catwalk.InferenceProviderBedrock) ||
1247+ largeModel.ModelCfg.Provider == string(catwalk.InferenceProviderBedrock)
2118− largeModel.ModelCfg.Provider == string(catwalk.InferenceProviderBedrockEurope)
2119
1248
2120 if providerSupportsMedia {
1249 if providerSupportsMedia {
2121 return messages
1250 return messages
2122 }
1251 }
2123
1252
2124− supportsImages := largeModel.CatwalkCfg.SupportsImages
2125−
2126 convertedMessages := make([]fantasy.Message, 0, len(messages))
1253 convertedMessages := make([]fantasy.Message, 0, len(messages))
2127
1254
2128 for _, msg := range messages {
1255 for _, msg := range messages {
@@ -2142,21 +1269,6 @@ func (a *sessionAgent) workaroundProviderMediaLimitations(messages []fantasy.Mes
2142 }
1269 }
2143
1270
2144 if media, ok := fantasy.AsToolResultOutputType[fantasy.ToolResultOutputContentMedia](toolResult.Output); ok {
1271 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−
2160 decoded, err := base64.StdEncoding.DecodeString(media.Data)
1272 decoded, err := base64.StdEncoding.DecodeString(media.Data)
2161 if err != nil {
1273 if err != nil {
2162 slog.Warn("Failed to decode media data", "error", err)
1274 slog.Warn("Failed to decode media data", "error", err)
@@ -2229,20 +1341,3 @@ func providerRetryLogFields(err *fantasy.ProviderError, delay time.Duration) []a
2229 }
1341 }
2230 return fields
1342 return fields
2231}
1343}
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+2−190
@@ -1,7 +1,6 @@
1package agent
1package agent
2
2
3import (
3import (
4− "encoding/base64"
5 "fmt"
4 "fmt"
6 "log/slog"
5 "log/slog"
7 "os"
6 "os"
@@ -11,11 +10,9 @@ import (
11 "testing"
10 "testing"
12 "time"
11 "time"
13
12
14− "charm.land/catwalk/pkg/catwalk"
15 "charm.land/fantasy"
13 "charm.land/fantasy"
16 "charm.land/x/vcr"
14 "charm.land/x/vcr"
17 "github.com/charmbracelet/crush/internal/agent/tools"
15 "github.com/charmbracelet/crush/internal/agent/tools"
18− "github.com/charmbracelet/crush/internal/config"
19 "github.com/charmbracelet/crush/internal/message"
16 "github.com/charmbracelet/crush/internal/message"
20 "github.com/charmbracelet/crush/internal/session"
17 "github.com/charmbracelet/crush/internal/session"
21 "github.com/stretchr/testify/assert"
18 "github.com/stretchr/testify/assert"
@@ -659,51 +656,6 @@ func BenchmarkBuildSummaryPrompt(b *testing.B) {
659 }
656 }
660}
657}
661
658
662−func TestPreparePrompt_FiltersImageAttachments(t *testing.T) {
663− env := testEnv(t)
664− sa := testSessionAgent(env, nil, nil, "test prompt")
665− agent := sa.(*sessionAgent)
666−
667− ctx := t.Context()
668− sess, err := env.sessions.Create(ctx, "test")
669− require.NoError(t, err)
670−
671− // User message with text, a text attachment, and an image attachment.
672− _, err = env.messages.Create(ctx, sess.ID, message.CreateMessageParams{
673− Role: message.User,
674− Parts: []message.ContentPart{
675− message.TextContent{Text: "hello world"},
676− message.BinaryContent{Path: "notes.txt", MIMEType: "text/plain", Data: []byte("important notes")},
677− message.BinaryContent{Path: "image.png", MIMEType: "image/png", Data: []byte("fake-image-data")},
678− },
679− })
680− require.NoError(t, err)
681−
682− msgs, err := env.messages.List(ctx, sess.ID)
683− require.NoError(t, err)
684−
685− // When supportsImages is false, image attachments should be stripped.
686− history, _ := agent.preparePrompt(msgs, false)
687− // First message is the system reminder, second is the user message.
688− require.Len(t, history, 2)
689− require.Len(t, history[1].Content, 1)
690− text, ok := fantasy.AsMessagePart[fantasy.TextPart](history[1].Content[0])
691− require.True(t, ok)
692− require.Contains(t, text.Text, "hello world")
693− require.Contains(t, text.Text, "important notes")
694−
695− // When supportsImages is true, image attachments should remain.
696− history, _ = agent.preparePrompt(msgs, true)
697− require.Len(t, history, 2)
698− require.Len(t, history[1].Content, 2)
699− text, ok = fantasy.AsMessagePart[fantasy.TextPart](history[1].Content[0])
700− require.True(t, ok)
701− require.Contains(t, text.Text, "hello world")
702− file, ok := fantasy.AsMessagePart[fantasy.FilePart](history[1].Content[1])
703− require.True(t, ok)
704− require.Equal(t, "image.png", file.Filename)
705−}
706−
707func TestPreparePrompt_OrphanedToolUse(t *testing.T) {
659func TestPreparePrompt_OrphanedToolUse(t *testing.T) {
708 env := testEnv(t)
660 env := testEnv(t)
709 sa := testSessionAgent(env, nil, nil, "test prompt")
661 sa := testSessionAgent(env, nil, nil, "test prompt")
@@ -750,7 +702,7 @@ func TestPreparePrompt_OrphanedToolUse(t *testing.T) {
750 msgs, err := env.messages.List(ctx, sess.ID)
702 msgs, err := env.messages.List(ctx, sess.ID)
751 require.NoError(t, err)
703 require.NoError(t, err)
752
704
753− history, _ := agent.preparePrompt(msgs, true)
705+ history, _ := agent.preparePrompt(msgs)
754
706
755 // The history must contain a synthetic tool result for the orphaned call.
707 // The history must contain a synthetic tool result for the orphaned call.
756 found := false
708 found := false
@@ -824,7 +776,7 @@ func TestPreparePrompt_OrphanedToolUseMixed(t *testing.T) {
824 msgs, err := env.messages.List(ctx, sess.ID)
776 msgs, err := env.messages.List(ctx, sess.ID)
825 require.NoError(t, err)
777 require.NoError(t, err)
826
778
827− history, _ := agent.preparePrompt(msgs, true)
779+ history, _ := agent.preparePrompt(msgs)
828
780
829 // Should have a synthetic result only for the orphaned call.
781 // Should have a synthetic result only for the orphaned call.
830 var syntheticCount int
782 var syntheticCount int
@@ -843,146 +795,6 @@ func TestPreparePrompt_OrphanedToolUseMixed(t *testing.T) {
843 require.Equal(t, 1, syntheticCount, "expected exactly one synthetic result for the orphaned call")
795 require.Equal(t, 1, syntheticCount, "expected exactly one synthetic result for the orphaned call")
844}
796}
845
797
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−
986func TestProviderRetryLogFields(t *testing.T) {
798func TestProviderRetryLogFields(t *testing.T) {
987 t.Run("nil provider error", func(t *testing.T) {
799 t.Run("nil provider error", func(t *testing.T) {
988 fields := providerRetryLogFields(nil, 2*time.Second)
800 fields := providerRetryLogFields(nil, 2*time.Second)
internal/agent/agent_tool.go+3−4
@@ -13,7 +13,7 @@ import (
13)
13)
14
14
15//go:embed templates/agent_tool.md
15//go:embed templates/agent_tool.md
16−var agentToolDescription string
16+var agentToolDescription []byte
17
17
18type AgentParams struct {
18type AgentParams struct {
19 Prompt string `json:"prompt" description:"The task for the agent to perform"`
19 Prompt string `json:"prompt" description:"The task for the agent to perform"`
@@ -39,7 +39,7 @@ func (c *coordinator) agentTool(ctx context.Context) (fantasy.AgentTool, error)
39 }
39 }
40 return fantasy.NewParallelAgentTool(
40 return fantasy.NewParallelAgentTool(
41 AgentToolName,
41 AgentToolName,
42− agentToolDescription,
42+ tools.FirstLineDescription(agentToolDescription),
43 func(ctx context.Context, params AgentParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
43 func(ctx context.Context, params AgentParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
44 if params.Prompt == "" {
44 if params.Prompt == "" {
45 return fantasy.NewTextErrorResponse("prompt is required"), nil
45 return fantasy.NewTextErrorResponse("prompt is required"), nil
@@ -63,6 +63,5 @@ func (c *coordinator) agentTool(ctx context.Context) (fantasy.AgentTool, error)
63 Prompt: params.Prompt,
63 Prompt: params.Prompt,
64 SessionTitle: "New Agent Session",
64 SessionTitle: "New Agent Session",
65 })
65 })
66− },
67− ), nil
66+ }), nil
68}
67}
internal/agent/agentic_fetch_tool.go+5−7
@@ -17,7 +17,7 @@ import (
17)
17)
18
18
19//go:embed templates/agentic_fetch.md
19//go:embed templates/agentic_fetch.md
20−var agenticFetchToolDescription string
20+var agenticFetchToolDescription []byte
21
21
22// agenticFetchValidationResult holds the validated parameters from the tool call context.
22// agenticFetchValidationResult holds the validated parameters from the tool call context.
23type agenticFetchValidationResult struct {
23type agenticFetchValidationResult struct {
@@ -65,7 +65,7 @@ func (c *coordinator) agenticFetchTool(_ context.Context, client *http.Client) (
65
65
66 return fantasy.NewParallelAgentTool(
66 return fantasy.NewParallelAgentTool(
67 tools.AgenticFetchToolName,
67 tools.AgenticFetchToolName,
68− agenticFetchToolDescription,
68+ tools.FirstLineDescription(agenticFetchToolDescription),
69 func(ctx context.Context, params tools.AgenticFetchParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
69 func(ctx context.Context, params tools.AgenticFetchParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
70 validationResult, err := validateAgenticFetchParams(ctx, params)
70 validationResult, err := validateAgenticFetchParams(ctx, params)
71 if err != nil {
71 if err != nil {
@@ -80,8 +80,7 @@ func (c *coordinator) agenticFetchTool(_ context.Context, client *http.Client) (
80 description = "Search the web and analyze results"
80 description = "Search the web and analyze results"
81 }
81 }
82
82
83− p, err := c.permissions.Request(
83+ p, err := c.permissions.Request(ctx,
84− ctx,
85 permission.CreatePermissionRequest{
84 permission.CreatePermissionRequest{
86 SessionID: validationResult.SessionID,
85 SessionID: validationResult.SessionID,
87 Path: c.cfg.WorkingDir(),
86 Path: c.cfg.WorkingDir(),
@@ -167,7 +166,7 @@ func (c *coordinator) agenticFetchTool(_ context.Context, client *http.Client) (
167 fetchTools := []fantasy.AgentTool{
166 fetchTools := []fantasy.AgentTool{
168 webFetchTool,
167 webFetchTool,
169 webSearchTool,
168 webSearchTool,
170− tools.NewGlobTool(tmpDir, c.cfg.Config().Tools.Glob),
169+ tools.NewGlobTool(tmpDir),
171 tools.NewGrepTool(tmpDir, c.cfg.Config().Tools.Grep),
170 tools.NewGrepTool(tmpDir, c.cfg.Config().Tools.Grep),
172 tools.NewSourcegraphTool(client),
171 tools.NewSourcegraphTool(client),
173 tools.NewViewTool(c.lspManager, c.permissions, c.filetracker, nil, tmpDir),
172 tools.NewViewTool(c.lspManager, c.permissions, c.filetracker, nil, tmpDir),
@@ -201,6 +200,5 @@ func (c *coordinator) agenticFetchTool(_ context.Context, client *http.Client) (
201 c.permissions.AutoApproveSession(sessionID)
200 c.permissions.AutoApproveSession(sessionID)
202 },
201 },
203 })
202 })
204− },
205− ), nil
203+ }), nil
206}
204}
internal/agent/agenttest/coordinator.godeleted−80
@@ -1,80 +0,0 @@
1−// Package agenttest provides test-only constructors for wiring a real
2−// production agent.Coordinator without booting a full app.App. It is
3−// imported only from _test.go files (e.g. internal/backend integration
4−// tests) and is never referenced by production code, so it is compiled
5−// only under tests and never ships in the production binary or API.
6−package agenttest
7−
8−import (
9− "context"
10−
11− "charm.land/catwalk/pkg/catwalk"
12− "charm.land/fantasy/providers/openaicompat"
13− "github.com/charmbracelet/crush/internal/agent"
14− "github.com/charmbracelet/crush/internal/config"
15− "github.com/charmbracelet/crush/internal/message"
16− "github.com/charmbracelet/crush/internal/permission"
17− "github.com/charmbracelet/crush/internal/session"
18−)
19−
20−// NewCoordinator builds a real agent.Coordinator through the production
21−// agent.NewCoordinator constructor so the RunAccepted / BeginAccepted /
22−// run path (including UpdateModels) is the actual code under test.
23−//
24−// It installs a minimal config with a single openai-compatible provider
25−// whose model resolves offline. run rebuilds the model on every call, so
26−// the provider must construct without network I/O; the cancel-on-entry
27−// path this helper is built to exercise returns before any model call,
28−// so no request is ever issued. The coder agent's allowed-tools list is
29−// cleared to keep tool construction cheap and free of sub-agent wiring.
30−//
31−// The optional coordinator dependencies (history, filetracker, LSP,
32−// notify, runComplete, skills) are nil: run guards the publisher fields
33−// and the cancel-on-entry path never touches the others.
34−func NewCoordinator(
35− ctx context.Context,
36− workingDir string,
37− sessions session.Service,
38− messages message.Service,
39−) (agent.Coordinator, error) {
40− cfg, err := config.Init(workingDir, "", false)
41− if err != nil {
42− return nil, err
43− }
44−
45− const (
46− providerID = "test-openai-compat"
47− modelID = "test-model"
48− )
49− cfg.Config().Providers.Set(providerID, config.ProviderConfig{
50− ID: providerID,
51− Name: "Test",
52− Type: openaicompat.Name,
53− BaseURL: "http://127.0.0.1:0/v1",
54− APIKey: "test",
55− Models: []catwalk.Model{{ID: modelID, DefaultMaxTokens: 4096}},
56− })
57− selected := config.SelectedModel{Provider: providerID, Model: modelID}
58− cfg.OverridePreferredModel(config.SelectedModelTypeLarge, selected)
59− cfg.OverridePreferredModel(config.SelectedModelTypeSmall, selected)
60− cfg.SetupAgents()
61−
62− // Keep buildTools light: no sub-agent or agentic-fetch construction.
63− coderCfg := cfg.Config().Agents[config.AgentCoder]
64− coderCfg.AllowedTools = nil
65− cfg.Config().Agents[config.AgentCoder] = coderCfg
66−
67− return agent.NewCoordinator(
68− ctx,
69− cfg,
70− sessions,
71− messages,
72− permission.NewPermissionService(workingDir, true, nil),
73− nil,
74− nil,
75− nil,
76− nil,
77− nil,
78− nil,
79− )
80−}
internal/agent/common_test.go+1−2
@@ -152,7 +152,6 @@ func coderAgent(r *vcr.Recorder, env fakeEnv, large, small fantasy.LanguageModel
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
156 cfg.Config().LSP = nil
155 cfg.Config().LSP = nil
157
156
158 systemPrompt, err := prompt.Build(context.TODO(), large.Provider(), large.Model(), cfg)
157 systemPrompt, err := prompt.Build(context.TODO(), large.Provider(), large.Model(), cfg)
@@ -172,7 +171,7 @@ func coderAgent(r *vcr.Recorder, env fakeEnv, large, small fantasy.LanguageModel
172 tools.NewEditTool(nil, env.permissions, env.history, *env.filetracker, env.workingDir),
171 tools.NewEditTool(nil, env.permissions, env.history, *env.filetracker, env.workingDir),
173 tools.NewMultiEditTool(nil, env.permissions, env.history, *env.filetracker, env.workingDir),
172 tools.NewMultiEditTool(nil, env.permissions, env.history, *env.filetracker, env.workingDir),
174 tools.NewFetchTool(env.permissions, env.workingDir, r.GetDefaultClient()),
173 tools.NewFetchTool(env.permissions, env.workingDir, r.GetDefaultClient()),
175− tools.NewGlobTool(env.workingDir, cfg.Config().Tools.Glob),
174+ tools.NewGlobTool(env.workingDir),
176 tools.NewGrepTool(env.workingDir, cfg.Config().Tools.Grep),
175 tools.NewGrepTool(env.workingDir, cfg.Config().Tools.Grep),
177 tools.NewLsTool(env.permissions, env.workingDir, cfg.Config().Tools.Ls),
176 tools.NewLsTool(env.permissions, env.workingDir, cfg.Config().Tools.Ls),
178 tools.NewSourcegraphTool(r.GetDefaultClient()),
177 tools.NewSourcegraphTool(r.GetDefaultClient()),
internal/agent/coordinator.go+138−600
@@ -15,8 +15,6 @@ import (
15 "path/filepath"
15 "path/filepath"
16 "slices"
16 "slices"
17 "strings"
17 "strings"
18− "sync"
19− "sync/atomic"
20
18
21 "charm.land/catwalk/pkg/catwalk"
19 "charm.land/catwalk/pkg/catwalk"
22 "charm.land/fantasy"
20 "charm.land/fantasy"
@@ -24,13 +22,11 @@ import (
24 "github.com/charmbracelet/crush/internal/agent/notify"
22 "github.com/charmbracelet/crush/internal/agent/notify"
25 "github.com/charmbracelet/crush/internal/agent/prompt"
23 "github.com/charmbracelet/crush/internal/agent/prompt"
26 "github.com/charmbracelet/crush/internal/agent/tools"
24 "github.com/charmbracelet/crush/internal/agent/tools"
27− "github.com/charmbracelet/crush/internal/agent/tools/mcp"
28 "github.com/charmbracelet/crush/internal/config"
25 "github.com/charmbracelet/crush/internal/config"
29− "github.com/charmbracelet/crush/internal/csync"
30− "github.com/charmbracelet/crush/internal/discover"
31 "github.com/charmbracelet/crush/internal/event"
26 "github.com/charmbracelet/crush/internal/event"
32 "github.com/charmbracelet/crush/internal/filetracker"
27 "github.com/charmbracelet/crush/internal/filetracker"
33 "github.com/charmbracelet/crush/internal/history"
28 "github.com/charmbracelet/crush/internal/history"
29+ "github.com/charmbracelet/crush/internal/home"
34 "github.com/charmbracelet/crush/internal/hooks"
30 "github.com/charmbracelet/crush/internal/hooks"
35 "github.com/charmbracelet/crush/internal/log"
31 "github.com/charmbracelet/crush/internal/log"
36 "github.com/charmbracelet/crush/internal/lsp"
32 "github.com/charmbracelet/crush/internal/lsp"
@@ -66,35 +62,10 @@ var (
66 errSmallModelNotFound = errors.New("small model not found in provider config")
62 errSmallModelNotFound = errors.New("small model not found in provider config")
67)
63)
68
64
69−// Copilot models that use the Responses API instead of Chat Completions.
70−var copilotResponsesModels = map[string]bool{
71− "gpt-5.2": true,
72− "gpt-5.2-codex": true,
73− "gpt-5.3-codex": true,
74− "gpt-5.4": true,
75− "gpt-5.4-mini": true,
76− "gpt-5.5": true,
77− "gpt-5-mini": true,
78−}
79−
80−// OpenCode models that user Anthropic Messages API instead of Chat Completions.
81−var opencodeMessagesModels = map[string]bool{
82− "qwen3.7-max": true,
83−}
84−
85type Coordinator interface {
65type Coordinator interface {
86 // INFO: (kujtim) this is not used yet we will use this when we have multiple agents
66 // INFO: (kujtim) this is not used yet we will use this when we have multiple agents
87 // SetMainAgent(string)
67 // SetMainAgent(string)
88 Run(ctx context.Context, sessionID, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error)
68 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
98 Cancel(sessionID string)
69 Cancel(sessionID string)
99 CancelAll()
70 CancelAll()
100 IsSessionBusy(sessionID string) bool
71 IsSessionBusy(sessionID string) bool
@@ -105,7 +76,6 @@ type Coordinator interface {
105 Summarize(context.Context, string) error
76 Summarize(context.Context, string) error
106 Model() Model
77 Model() Model
107 UpdateModels(ctx context.Context) error
78 UpdateModels(ctx context.Context) error
108− GenerateTitle(ctx context.Context, sessionID, prompt string)
109}
79}
110
80
111type coordinator struct {
81type coordinator struct {
@@ -117,7 +87,6 @@ type coordinator struct {
117 filetracker filetracker.Service
87 filetracker filetracker.Service
118 lspManager *lsp.Manager
88 lspManager *lsp.Manager
119 notify pubsub.Publisher[notify.Notification]
89 notify pubsub.Publisher[notify.Notification]
120− runComplete pubsub.Publisher[notify.RunComplete]
121
90
122 currentAgent SessionAgent
91 currentAgent SessionAgent
123 agents map[string]SessionAgent
92 agents map[string]SessionAgent
@@ -127,32 +96,6 @@ type coordinator struct {
127 activeSkills []*skills.Skill // Post-filter: active skills only.
96 activeSkills []*skills.Skill // Post-filter: active skills only.
128 skillTracker *skills.Tracker
97 skillTracker *skills.Tracker
129
98
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−
156 readyWg errgroup.Group
99 readyWg errgroup.Group
157}
100}
158
101
@@ -166,20 +109,9 @@ func NewCoordinator(
166 filetracker filetracker.Service,
109 filetracker filetracker.Service,
167 lspManager *lsp.Manager,
110 lspManager *lsp.Manager,
168 notify pubsub.Publisher[notify.Notification],
111 notify pubsub.Publisher[notify.Notification],
169− runComplete pubsub.Publisher[notify.RunComplete],
170− skillsMgr *skills.Manager,
171) (Coordinator, error) {
112) (Coordinator, error) {
172− // Skills are pre-discovered by the caller (see app.New /
113+ // Discover skills once at session start.
173− // backend.CreateWorkspace) and passed in via the manager. If no
174− // manager was provided (legacy callers), fall back to an in-line
175− // discovery so the coordinator still works.
176− var allSkills, activeSkills []*skills.Skill
177− if skillsMgr != nil {
178− allSkills = skillsMgr.AllSkills()
179− activeSkills = skillsMgr.ActiveSkills()
180− } else {
181− allSkills, activeSkills = discoverSkills(cfg)
114+ allSkills, activeSkills := discoverSkills(cfg)
182− }
183 skillTracker := skills.NewTracker(activeSkills)
115 skillTracker := skills.NewTracker(activeSkills)
184
116
185 c := &coordinator{
117 c := &coordinator{
@@ -191,13 +123,10 @@ func NewCoordinator(
191 filetracker: filetracker,
123 filetracker: filetracker,
192 lspManager: lspManager,
124 lspManager: lspManager,
193 notify: notify,
125 notify: notify,
194− runComplete: runComplete,
195 agents: make(map[string]SessionAgent),
126 agents: make(map[string]SessionAgent),
196 allSkills: allSkills,
127 allSkills: allSkills,
197 activeSkills: activeSkills,
128 activeSkills: activeSkills,
198 skillTracker: skillTracker,
129 skillTracker: skillTracker,
199−
200− providerClients: csync.NewMap[string, fantasy.Provider](),
201 }
130 }
202
131
203 agentCfg, ok := cfg.Config().Agents[config.AgentCoder]
132 agentCfg, ok := cfg.Config().Agents[config.AgentCoder]
@@ -217,36 +146,11 @@ func NewCoordinator(
217 }
146 }
218 c.currentAgent = agent
147 c.currentAgent = agent
219 c.agents[config.AgentCoder] = agent
148 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−
231 return c, nil
149 return c, nil
232}
150}
233
151
234// Run implements Coordinator.
152// Run implements Coordinator.
235func (c *coordinator) Run(ctx context.Context, sessionID string, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error) {
153func (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) {
250 if err := c.readyWg.Wait(); err != nil {
154 if err := c.readyWg.Wait(); err != nil {
251 return nil, err
155 return nil, err
252 }
156 }
@@ -278,42 +182,20 @@ func (c *coordinator) run(ctx context.Context, accept *AcceptedRun, sessionID st
278 return nil, errModelProviderNotConfigured
182 return nil, errModelProviderNotConfigured
279 }
183 }
280
184
281− mergedOptions, temp, topP, topK, freqPenalty, presPenalty := c.cachedMergeCallOptions(model, providerCfg)
185+ mergedOptions, temp, topP, topK, freqPenalty, presPenalty := mergeCallOptions(model, providerCfg)
282
186
187+ if providerCfg.OAuthToken != nil && providerCfg.OAuthToken.IsExpired() {
188+ slog.Debug("Token needs to be refreshed", "provider", providerCfg.ID)
283− if err := c.refreshTokenIfExpired(ctx, providerCfg); err != nil {
189+ if err := c.refreshOAuth2Token(ctx, providerCfg); err != nil {
284− // NOTE(@andreynering): We don't return here because the event handling to ask the user to reauthenticate
190+ // NOTE(@andreynering): We don't return here because the event handling to ask the user to reauthenticate
285− // depends on the flow below. If refresh fails, proceed with the token we have.
191+ // depends on the flow below. If refresh fails, proceed with the token we have.
286− slog.Error("Failed to refresh OAuth2 token. Proceeding with existing token.", "error", err)
192+ slog.Error("Failed to refresh OAuth2 token. Proceeding with existing token.", "error", err)
193+ }
287 }
194 }
288
195
289− // Coalesce per-attempt RunComplete payloads so only the final
290− // outcome reaches subscribers. Without this, the first attempt's
291− // failed RunComplete (unauthorized) would race ahead of the
292− // retry's success, and `crush run` would exit on the stale error
293− // before ever seeing the retry result. Each attempt's
294− // SessionAgentCall.OnComplete hook overwrites latest; we publish
295− // exactly once after retries resolve, via PublishMustDeliver, so
296− // a momentarily-full subscriber buffer can't silently drop the
297− // terminal event.
298− var (
299− latest notify.RunComplete
300− hasLatest bool
301− )
302− onComplete := func(rc notify.RunComplete) {
303− latest = rc
304− hasLatest = true
305− }
306− // Propagate the caller-supplied RunID (set via agent.WithRunID
307− // at the HTTP boundary in backend.SendMessage) onto the
308− // SessionAgentCall so the terminal RunComplete event echoes it
309− // back. Both attempts in the retry chain reuse the same RunID;
310− // the coalesce closure publishes the final outcome under that
311− // same correlator.
312− runID := RunIDFromContext(ctx)
313 run := func() (*fantasy.AgentResult, error) {
196 run := func() (*fantasy.AgentResult, error) {
314 return c.currentAgent.Run(ctx, SessionAgentCall{
197 return c.currentAgent.Run(ctx, SessionAgentCall{
315 SessionID: sessionID,
198 SessionID: sessionID,
316− RunID: runID,
317 Prompt: prompt,
199 Prompt: prompt,
318 Attachments: attachments,
200 Attachments: attachments,
319 MaxOutputTokens: maxTokens,
201 MaxOutputTokens: maxTokens,
@@ -323,59 +205,34 @@ func (c *coordinator) run(ctx context.Context, accept *AcceptedRun, sessionID st
323 TopK: topK,
205 TopK: topK,
324 FrequencyPenalty: freqPenalty,
206 FrequencyPenalty: freqPenalty,
325 PresencePenalty: presPenalty,
207 PresencePenalty: presPenalty,
326− OnComplete: onComplete,
327− Accepted: accept,
328 })
208 })
329 }
209 }
330 beforeLoaded := c.skillTracker.LoadedNames()
210 beforeLoaded := c.skillTracker.LoadedNames()
331− var result *fantasy.AgentResult
211+ result, originalErr := run()
332− originalErr := c.runWithUnauthorizedRetry(ctx, providerCfg, func() error {
333− var err error
334− result, err = run()
335− return err
336− })
337 logTurnSkillUsage(sessionID, prompt, c.activeSkills, c.skillTracker, beforeLoaded)
212 logTurnSkillUsage(sessionID, prompt, c.activeSkills, c.skillTracker, beforeLoaded)
338
213
339− // Notify only if still unauthorized after retry — a successful
340− // retry means the user doesn't need to re-authenticate.
341− if originalErr != nil && c.isUnauthorized(originalErr) && c.notify != nil && model.ModelCfg.Provider == hyper.Name {
214+ if c.isUnauthorized(originalErr) {
342− c.notify.Publish(pubsub.CreatedEvent, notify.Notification{
215+ switch {
343− Type: notify.TypeReAuthenticate,
216+ case providerCfg.OAuthToken != nil:
344− ProviderID: model.ModelCfg.Provider,
217+ slog.Debug("Received 401. Refreshing token and retrying", "provider", providerCfg.ID)
218+ if err := c.refreshOAuth2Token(ctx, providerCfg); err != nil {
219+ return nil, originalErr
220+ }
221+ slog.Debug("Retrying request with refreshed OAuth token", "provider", providerCfg.ID)
222+ return run()
223+ case strings.Contains(providerCfg.APIKeyTemplate, "$"):
224+ slog.Debug("Received 401. Refreshing API Key template and retrying", "provider", providerCfg.ID)
225+ if err := c.refreshApiKeyTemplate(ctx, providerCfg); err != nil {
226+ return nil, originalErr
227+ }
228+ slog.Debug("Retrying request with refreshed API key", "provider", providerCfg.ID)
229+ return run()
345− })
230+ }
346 }
231 }
347
232
348− if hasLatest && c.runComplete != nil {
349− c.runComplete.PublishMustDeliver(ctx, pubsub.UpdatedEvent, latest)
350− // Signal to the dispatcher (backend.runAgent) that the
351− // authoritative terminal RunComplete for this run was already
352− // emitted, so it does not publish a duplicate fallback for the
353− // error it is about to receive.
354− MarkRunCompletePublished(ctx)
355− }
356 return result, originalErr
233 return result, originalErr
357}
234}
358
235
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−
379func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.ProviderOptions {
236func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.ProviderOptions {
380 options := fantasy.ProviderOptions{}
237 options := fantasy.ProviderOptions{}
381
238
@@ -424,16 +281,24 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
424 return options
281 return options
425 }
282 }
426
283
427− reasoningEffort := effectiveReasoningEffort(model)
284+ providerType := providerCfg.Type
428− shouldSetEffort := model.CatwalkCfg.CanReason &&
285+ if providerType == "hyper" {
429− reasoningEffort != "" &&
286+ if strings.Contains(model.CatwalkCfg.ID, "claude") {
287+ providerType = anthropic.Name
288+ } else if strings.Contains(model.CatwalkCfg.ID, "gpt") {
289+ providerType = openai.Name
430− slices.Contains(model.CatwalkCfg.ReasoningLevels, reasoningEffort)
290+ } else if strings.Contains(model.CatwalkCfg.ID, "gemini") {
291+ providerType = google.Name
292+ } else {
293+ providerType = openaicompat.Name
294+ }
295+ }
431
296
432− switch providerCfg.Type {
297+ switch providerType {
433 case openai.Name, azure.Name:
298 case openai.Name, azure.Name:
434 _, hasReasoningEffort := mergedOptions["reasoning_effort"]
299 _, hasReasoningEffort := mergedOptions["reasoning_effort"]
435− if !hasReasoningEffort && shouldSetEffort {
300+ if !hasReasoningEffort && model.ModelCfg.ReasoningEffort != "" {
436− mergedOptions["reasoning_effort"] = reasoningEffort
301+ mergedOptions["reasoning_effort"] = model.ModelCfg.ReasoningEffort
437 }
302 }
438 if openai.IsResponsesModel(model.CatwalkCfg.ID) {
303 if openai.IsResponsesModel(model.CatwalkCfg.ID) {
439 if openai.IsResponsesReasoningModel(model.CatwalkCfg.ID) {
304 if openai.IsResponsesReasoningModel(model.CatwalkCfg.ID) {
@@ -450,37 +315,17 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
450 options[openai.Name] = parsed
315 options[openai.Name] = parsed
451 }
316 }
452 }
317 }
453−
454− case anthropic.Name, bedrock.Name:
318+ case anthropic.Name:
455 var (
319 var (
456 _, hasEffort = mergedOptions["effort"]
320 _, hasEffort = mergedOptions["effort"]
457 _, hasThink = mergedOptions["thinking"]
321 _, hasThink = mergedOptions["thinking"]
458− extraBody = make(map[string]any)
459 )
322 )
460−
461− switch providerCfg.ID {
323+ switch {
462− case string(catwalk.InferenceProviderAlibabaSingapore), string(catwalk.InferenceProviderAlibabaUS):
463− switch {
464− case !hasEffort && shouldSetEffort:
465− extraBody["reasoning_effort"] = reasoningEffort
466− case !hasThink && model.CatwalkCfg.CanReason:
467− if model.ModelCfg.Think {
324+ case !hasEffort && model.ModelCfg.ReasoningEffort != "":
468− extraBody["thinking"] = map[string]any{"type": "enabled"}
469− } else {
470− extraBody["thinking"] = map[string]any{"type": "disabled"}
471− }
472− }
473− mergedOptions["extra_body"] = extraBody
474−
475− default:
476− switch {
477− case !hasEffort && shouldSetEffort:
478− mergedOptions["effort"] = reasoningEffort
325+ mergedOptions["effort"] = model.ModelCfg.ReasoningEffort
479− case !hasThink && model.ModelCfg.Think:
326+ case !hasThink && model.ModelCfg.Think:
480− mergedOptions["thinking"] = map[string]any{"budget_tokens": 2000}
327+ mergedOptions["thinking"] = map[string]any{"budget_tokens": 2000}
481− }
482 }
328 }
483−
484 parsed, err := anthropic.ParseOptions(mergedOptions)
329 parsed, err := anthropic.ParseOptions(mergedOptions)
485 if err == nil {
330 if err == nil {
486 options[anthropic.Name] = parsed
331 options[anthropic.Name] = parsed
@@ -488,30 +333,28 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
488
333
489 case openrouter.Name:
334 case openrouter.Name:
490 _, hasReasoning := mergedOptions["reasoning"]
335 _, hasReasoning := mergedOptions["reasoning"]
491− if !hasReasoning && shouldSetEffort {
336+ if !hasReasoning && model.ModelCfg.ReasoningEffort != "" {
492 mergedOptions["reasoning"] = map[string]any{
337 mergedOptions["reasoning"] = map[string]any{
493 "enabled": true,
338 "enabled": true,
494− "effort": reasoningEffort,
339+ "effort": model.ModelCfg.ReasoningEffort,
495 }
340 }
496 }
341 }
497 parsed, err := openrouter.ParseOptions(mergedOptions)
342 parsed, err := openrouter.ParseOptions(mergedOptions)
498 if err == nil {
343 if err == nil {
499 options[openrouter.Name] = parsed
344 options[openrouter.Name] = parsed
500 }
345 }
501−
502 case vercel.Name:
346 case vercel.Name:
503 _, hasReasoning := mergedOptions["reasoning"]
347 _, hasReasoning := mergedOptions["reasoning"]
504− if !hasReasoning && shouldSetEffort {
348+ if !hasReasoning && model.ModelCfg.ReasoningEffort != "" {
505 mergedOptions["reasoning"] = map[string]any{
349 mergedOptions["reasoning"] = map[string]any{
506 "enabled": true,
350 "enabled": true,
507− "effort": reasoningEffort,
351+ "effort": model.ModelCfg.ReasoningEffort,
508 }
352 }
509 }
353 }
510 parsed, err := vercel.ParseOptions(mergedOptions)
354 parsed, err := vercel.ParseOptions(mergedOptions)
511 if err == nil {
355 if err == nil {
512 options[vercel.Name] = parsed
356 options[vercel.Name] = parsed
513 }
357 }
514−
515 case google.Name:
358 case google.Name:
516 _, hasReasoning := mergedOptions["thinking_config"]
359 _, hasReasoning := mergedOptions["thinking_config"]
517 if !hasReasoning {
360 if !hasReasoning {
@@ -522,7 +365,7 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
522 }
365 }
523 } else {
366 } else {
524 mergedOptions["thinking_config"] = map[string]any{
367 mergedOptions["thinking_config"] = map[string]any{
525− "thinking_level": reasoningEffort,
368+ "thinking_level": model.ModelCfg.ReasoningEffort,
526 "include_thoughts": true,
369 "include_thoughts": true,
527 }
370 }
528 }
371 }
@@ -531,80 +374,15 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
531 if err == nil {
374 if err == nil {
532 options[google.Name] = parsed
375 options[google.Name] = parsed
533 }
376 }
534−
535− case openaicompat.Name, hyper.Name:
377+ case openaicompat.Name:
536− extraBody := make(map[string]any)
537−
538 _, hasReasoningEffort := mergedOptions["reasoning_effort"]
378 _, hasReasoningEffort := mergedOptions["reasoning_effort"]
539− if !hasReasoningEffort && shouldSetEffort {
379+ if !hasReasoningEffort && model.ModelCfg.ReasoningEffort != "" {
540− switch providerCfg.ID {
541− case string(catwalk.InferenceProviderIoNet):
542− extraBody["reasoning"] = map[string]string{"effort": reasoningEffort}
543− default:
544− mergedOptions["reasoning_effort"] = reasoningEffort
380+ mergedOptions["reasoning_effort"] = model.ModelCfg.ReasoningEffort
545− }
546− }
547−
548− // "reasoning effort" is a standard OpenAI field, but "thinking" is not.
549− // Setting it in the right way for each provider.
550− // TODO: Abstract this in Fantasy somehow?
551− // TODO: Allow custom providers to specify how to set this?
552− switch providerCfg.ID {
553− case hyper.Name:
554− extraBody["thinking"] = model.ModelCfg.Think
555− case string(catwalk.InferenceProviderIoNet):
556− if _, ok := extraBody["reasoning"]; !ok && model.CatwalkCfg.CanReason {
557− if model.ModelCfg.Think {
558− extraBody["reasoning"] = map[string]string{"effort": "medium"}
559− } else {
560− extraBody["reasoning"] = map[string]string{"effort": "none"}
561− }
562− }
563−
564− case string(catwalk.InferenceProviderZAI), string(catwalk.InferenceProviderDeepSeek):
565− if model.ModelCfg.Think || reasoningEffort != "" {
566− extraBody["thinking"] = map[string]any{"type": "enabled"}
567− } else {
568− extraBody["thinking"] = map[string]any{"type": "disabled"}
569− }
570−
571− case string(catwalk.InferenceProviderFireworks):
572− // NOTE: Fireworks break if we set both `reasoning_effort` and `thinking`.
573− if reasoningEffort == "" {
574− if model.ModelCfg.Think {
575− extraBody["thinking"] = map[string]any{"type": "enabled"}
576− } else {
577− extraBody["thinking"] = map[string]any{"type": "disabled"}
578− }
579− }
580−
581− case string(catwalk.InferenceProviderBaseten):
582− extraBody["chat_template_args"] = map[string]any{
583− "enable_thinking": model.ModelCfg.Think || reasoningEffort != "",
584− }
585−
586− case string(catwalk.InferenceProviderAlibabaSingapore), string(catwalk.InferenceProviderAlibabaUS):
587− if model.CatwalkCfg.CanReason {
588− extraBody["enable_thinking"] = model.ModelCfg.Think || reasoningEffort != ""
589− }
590 }
381 }
591−
592− mergedOptions["extra_body"] = extraBody
593−
594 parsed, err := openaicompat.ParseOptions(mergedOptions)
382 parsed, err := openaicompat.ParseOptions(mergedOptions)
595 if err == nil {
383 if err == nil {
596 options[openaicompat.Name] = parsed
384 options[openaicompat.Name] = parsed
597 }
385 }
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− }
608 }
386 }
609
387
610 return options
388 return options
@@ -620,39 +398,6 @@ func mergeCallOptions(model Model, cfg config.ProviderConfig) (fantasy.ProviderO
620 return modelOptions, temp, topP, topK, freqPenalty, presPenalty
398 return modelOptions, temp, topP, topK, freqPenalty, presPenalty
621}
399}
622
400
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−
656func (c *coordinator) buildAgent(ctx context.Context, prompt *prompt.Prompt, agent config.Agent, isSubAgent bool) (SessionAgent, error) {
401func (c *coordinator) buildAgent(ctx context.Context, prompt *prompt.Prompt, agent config.Agent, isSubAgent bool) (SessionAgent, error) {
657 large, small, err := c.buildAgentModels(ctx, isSubAgent)
402 large, small, err := c.buildAgentModels(ctx, isSubAgent)
658 if err != nil {
403 if err != nil {
@@ -672,7 +417,6 @@ func (c *coordinator) buildAgent(ctx context.Context, prompt *prompt.Prompt, age
672 Messages: c.messages,
417 Messages: c.messages,
673 Tools: nil,
418 Tools: nil,
674 Notify: c.notify,
419 Notify: c.notify,
675− RunComplete: c.runComplete,
676 })
420 })
677
421
678 c.readyWg.Go(func() error {
422 c.readyWg.Go(func() error {
@@ -715,10 +459,10 @@ func (c *coordinator) buildTools(ctx context.Context, agent config.Agent, isSubA
715 }
459 }
716
460
717 // Get the model name for the agent
461 // Get the model name for the agent
718− modelID := ""
462+ modelName := ""
719 if modelCfg, ok := c.cfg.Config().Models[agent.Model]; ok {
463 if modelCfg, ok := c.cfg.Config().Models[agent.Model]; ok {
720 if model := c.cfg.Config().GetModel(modelCfg.Provider, modelCfg.Model); model != nil {
464 if model := c.cfg.Config().GetModel(modelCfg.Provider, modelCfg.Model); model != nil {
721− modelID = model.ID
465+ modelName = model.Name
722 }
466 }
723 }
467 }
724
468
@@ -730,9 +474,8 @@ func (c *coordinator) buildTools(ctx context.Context, agent config.Agent, isSubA
730 hookRunner = hooks.NewRunner(preToolHooks, c.cfg.WorkingDir(), c.cfg.WorkingDir())
474 hookRunner = hooks.NewRunner(preToolHooks, c.cfg.WorkingDir(), c.cfg.WorkingDir())
731 }
475 }
732
476
733− allTools = append(
477+ allTools = append(allTools,
734− allTools,
735− tools.NewBashTool(c.permissions, c.cfg.WorkingDir(), c.cfg.Config().Options.Attribution, modelID),
478+ tools.NewBashTool(c.permissions, c.cfg.WorkingDir(), c.cfg.Config().Options.Attribution, modelName),
736 tools.NewCrushInfoTool(c.cfg, c.lspManager, c.allSkills, c.activeSkills, c.skillTracker),
479 tools.NewCrushInfoTool(c.cfg, c.lspManager, c.allSkills, c.activeSkills, c.skillTracker),
737 tools.NewCrushLogsTool(logFile),
480 tools.NewCrushLogsTool(logFile),
738 tools.NewJobOutputTool(),
481 tools.NewJobOutputTool(),
@@ -741,7 +484,7 @@ func (c *coordinator) buildTools(ctx context.Context, agent config.Agent, isSubA
741 tools.NewEditTool(c.lspManager, c.permissions, c.history, c.filetracker, c.cfg.WorkingDir()),
484 tools.NewEditTool(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()),
485 tools.NewMultiEditTool(c.lspManager, c.permissions, c.history, c.filetracker, c.cfg.WorkingDir()),
743 tools.NewFetchTool(c.permissions, c.cfg.WorkingDir(), nil),
486 tools.NewFetchTool(c.permissions, c.cfg.WorkingDir(), nil),
744− tools.NewGlobTool(c.cfg.WorkingDir(), c.cfg.Config().Tools.Glob),
487+ tools.NewGlobTool(c.cfg.WorkingDir()),
745 tools.NewGrepTool(c.cfg.WorkingDir(), c.cfg.Config().Tools.Grep),
488 tools.NewGrepTool(c.cfg.WorkingDir(), c.cfg.Config().Tools.Grep),
746 tools.NewLsTool(c.permissions, c.cfg.WorkingDir(), c.cfg.Config().Tools.Ls),
489 tools.NewLsTool(c.permissions, c.cfg.WorkingDir(), c.cfg.Config().Tools.Ls),
747 tools.NewSourcegraphTool(nil),
490 tools.NewSourcegraphTool(nil),
@@ -884,12 +627,10 @@ func (c *coordinator) buildAgentModels(ctx context.Context, isSubAgent bool) (Mo
884 Model: largeModel,
627 Model: largeModel,
885 CatwalkCfg: *largeCatwalkModel,
628 CatwalkCfg: *largeCatwalkModel,
886 ModelCfg: largeModelCfg,
629 ModelCfg: largeModelCfg,
887− FlatRate: largeProviderCfg.FlatRate,
888 }, Model{
630 }, Model{
889 Model: smallModel,
631 Model: smallModel,
890 CatwalkCfg: *smallCatwalkModel,
632 CatwalkCfg: *smallCatwalkModel,
891 ModelCfg: smallModelCfg,
633 ModelCfg: smallModelCfg,
892− FlatRate: smallProviderCfg.FlatRate,
893 }, nil
634 }, nil
894}
635}
895
636
@@ -979,18 +720,10 @@ func (c *coordinator) buildOpenaiCompatProvider(baseURL, apiKey string, headers
979
720
980 // Set HTTP client based on provider and debug mode.
721 // Set HTTP client based on provider and debug mode.
981 var httpClient *http.Client
722 var httpClient *http.Client
982− switch providerID {
983− case string(catwalk.InferenceProviderCopilot):
723+ if providerID == string(catwalk.InferenceProviderCopilot) {
984− opts = append(
985− opts,
986− openaicompat.WithUseResponsesAPI(),
724+ opts = append(opts, openaicompat.WithUseResponsesAPI())
987− openaicompat.WithResponsesAPIFunc(func(modelID string) bool {
988− return copilotResponsesModels[modelID]
989− }),
990− )
991 httpClient = copilot.NewClient(isSubAgent, c.cfg.Config().Options.Debug)
725 httpClient = copilot.NewClient(isSubAgent, c.cfg.Config().Options.Debug)
992− }
993− if httpClient == nil && c.cfg.Config().Options.Debug {
726+ } else if c.cfg.Config().Options.Debug {
994 httpClient = log.NewHTTPClient()
727 httpClient = log.NewHTTPClient()
995 }
728 }
996 if httpClient != nil {
729 if httpClient != nil {
@@ -1031,7 +764,7 @@ func (c *coordinator) buildAzureProvider(baseURL, apiKey string, headers map[str
1031 return azure.New(opts...)
764 return azure.New(opts...)
1032}
765}
1033
766
1034−func (c *coordinator) buildBedrockProvider(apiKey string, headers map[string]string, providerID string) (fantasy.Provider, error) {
767+func (c *coordinator) buildBedrockProvider(apiKey string, headers map[string]string) (fantasy.Provider, error) {
1035 var opts []bedrock.Option
768 var opts []bedrock.Option
1036 if c.cfg.Config().Options.Debug {
769 if c.cfg.Config().Options.Debug {
1037 httpClient := log.NewHTTPClient()
770 httpClient := log.NewHTTPClient()
@@ -1040,7 +773,6 @@ func (c *coordinator) buildBedrockProvider(apiKey string, headers map[string]str
1040 if len(headers) > 0 {
773 if len(headers) > 0 {
1041 opts = append(opts, bedrock.WithHeaders(headers))
774 opts = append(opts, bedrock.WithHeaders(headers))
1042 }
775 }
1043−
1044 switch {
776 switch {
1045 case apiKey != "":
777 case apiKey != "":
1046 opts = append(opts, bedrock.WithAPIKey(apiKey))
778 opts = append(opts, bedrock.WithAPIKey(apiKey))
@@ -1049,14 +781,6 @@ func (c *coordinator) buildBedrockProvider(apiKey string, headers map[string]str
1049 default:
781 default:
1050 // Skip, let the SDK do authentication.
782 // Skip, let the SDK do authentication.
1051 }
783 }
1052−
1053− switch providerID {
1054− case string(catwalk.InferenceProviderBedrockEurope):
1055− opts = append(opts, bedrock.WithRegion("eu-west-1"))
1056− default:
1057− opts = append(opts, bedrock.WithRegion("us-east-1"))
1058− }
1059−
1060 return bedrock.New(opts...)
784 return bedrock.New(opts...)
1061}
785}
1062
786
@@ -1119,82 +843,6 @@ func (c *coordinator) buildProvider(providerCfg config.ProviderConfig, model con
1119 apiKey, _ := c.cfg.Resolve(providerCfg.APIKey)
843 apiKey, _ := c.cfg.Resolve(providerCfg.APIKey)
1120 baseURL, _ := c.cfg.Resolve(providerCfg.BaseURL)
844 baseURL, _ := c.cfg.Resolve(providerCfg.BaseURL)
1121
845
1122− // Reuse a previously built client when nothing that affects it has
1123− // changed, so the HTTP keep-alive pool survives across turns. The key
1124− // is derived from the resolved inputs above (plus the debug flag); the
1125− // per-provider adjustments inside the switch below are deterministic
1126− // functions of these, so identical inputs always yield an identical
1127− // client.
1128− cacheKey := c.providerCacheKey(providerCfg, model, apiKey, baseURL, headers, isSubAgent)
1129− if p, ok := c.providerClients.Get(cacheKey); ok {
1130− return p, nil
1131− }
1132− provider, err := c.buildProviderUncached(providerCfg, model, apiKey, baseURL, headers, isSubAgent)
1133− if err != nil {
1134− return nil, err
1135− }
1136− c.providerClients.Set(cacheKey, provider)
1137− return provider, nil
1138−}
1139−
1140−// providerCacheKey builds a stable key from every input buildProvider's
1141−// switch consumes, so any credential, endpoint, header, or option change
1142−// produces a distinct key (and thus a rebuilt client).
1143−func (c *coordinator) providerCacheKey(providerCfg config.ProviderConfig, model config.SelectedModel, apiKey, baseURL string, headers map[string]string, isSubAgent bool) string {
1144− var b strings.Builder
1145− b.WriteString(providerCfg.ID)
1146− b.WriteByte(0)
1147− b.WriteString(string(providerCfg.Type))
1148− b.WriteByte(0)
1149− // The opencode providers pick their client type from the model, so the
1150− // model must participate in the key.
1151− b.WriteString(model.Model)
1152− b.WriteByte(0)
1153− b.WriteString(apiKey)
1154− b.WriteByte(0)
1155− // Bedrock falls back to AWS_BEARER_TOKEN_BEDROCK when no apiKey is
1156− // configured, and that token is baked into the built client. Fold it
1157− // into the key so a rotated token rebuilds the client instead of
1158− // reusing a stale one.
1159− if apiKey == "" && providerCfg.Type == bedrock.Name {
1160− b.WriteString(os.Getenv("AWS_BEARER_TOKEN_BEDROCK"))
1161− }
1162− b.WriteByte(0)
1163− b.WriteString(baseURL)
1164− b.WriteByte(0)
1165− for _, k := range slices.Sorted(maps.Keys(headers)) {
1166− b.WriteString(k)
1167− b.WriteByte('=')
1168− b.WriteString(headers[k])
1169− b.WriteByte(1)
1170− }
1171− b.WriteByte(0)
1172− if extra, err := json.Marshal(providerCfg.ExtraBody); err == nil {
1173− b.Write(extra)
1174− }
1175− b.WriteByte(0)
1176− if extra, err := json.Marshal(providerCfg.ExtraParams); err == nil {
1177− b.Write(extra)
1178− }
1179− b.WriteByte(0)
1180− if isSubAgent {
1181− b.WriteByte('s')
1182− }
1183− if c.cfg.Config().Options.Debug {
1184− b.WriteByte('d')
1185− }
1186− return b.String()
1187−}
1188−
1189−func (c *coordinator) buildProviderUncached(providerCfg config.ProviderConfig, model config.SelectedModel, apiKey, baseURL string, headers map[string]string, isSubAgent bool) (fantasy.Provider, error) {
1190− switch providerCfg.ID {
1191− case string(catwalk.InferenceProviderOpenCodeGo), string(catwalk.InferenceProviderOpenCodeZen):
1192− if opencodeMessagesModels[model.Model] {
1193− baseURL = strings.TrimSuffix(baseURL, "/v1")
1194− return c.buildAnthropicProvider(baseURL, apiKey, headers, providerCfg.ID)
1195− }
1196− }
1197−
1198 switch providerCfg.Type {
846 switch providerCfg.Type {
1199 case openai.Name:
847 case openai.Name:
1200 return c.buildOpenaiProvider(baseURL, apiKey, headers)
848 return c.buildOpenaiProvider(baseURL, apiKey, headers)
@@ -1207,7 +855,7 @@ func (c *coordinator) buildProviderUncached(providerCfg config.ProviderConfig, m
1207 case azure.Name:
855 case azure.Name:
1208 return c.buildAzureProvider(baseURL, apiKey, headers, providerCfg.ExtraParams)
856 return c.buildAzureProvider(baseURL, apiKey, headers, providerCfg.ExtraParams)
1209 case bedrock.Name:
857 case bedrock.Name:
1210− return c.buildBedrockProvider(apiKey, headers, providerCfg.ID)
858+ return c.buildBedrockProvider(apiKey, headers)
1211 case google.Name:
859 case google.Name:
1212 return c.buildGoogleProvider(baseURL, apiKey, headers)
860 return c.buildGoogleProvider(baseURL, apiKey, headers)
1213 case "google-vertex":
861 case "google-vertex":
@@ -1225,11 +873,6 @@ func (c *coordinator) buildProviderUncached(providerCfg config.ProviderConfig, m
1225 }
873 }
1226 return c.buildOpenaiCompatProvider(baseURL, apiKey, headers, providerCfg.ExtraBody, providerCfg.ID, isSubAgent)
874 return c.buildOpenaiCompatProvider(baseURL, apiKey, headers, providerCfg.ExtraBody, providerCfg.ID, isSubAgent)
1227 default:
875 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− }
1233 return nil, fmt.Errorf("provider type not supported: %q", providerCfg.Type)
876 return nil, fmt.Errorf("provider type not supported: %q", providerCfg.Type)
1234 }
877 }
1235}
878}
@@ -1245,15 +888,6 @@ func isExactoSupported(modelID string) bool {
1245 return slices.Contains(supportedModels, modelID)
888 return slices.Contains(supportedModels, modelID)
1246}
889}
1247
890
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−
1257func (c *coordinator) Cancel(sessionID string) {
891func (c *coordinator) Cancel(sessionID string) {
1258 c.currentAgent.Cancel(sessionID)
892 c.currentAgent.Cancel(sessionID)
1259}
893}
@@ -1286,34 +920,15 @@ func (c *coordinator) UpdateModels(ctx context.Context) error {
1286 }
920 }
1287 c.currentAgent.SetModels(large, small)
921 c.currentAgent.SetModels(large, small)
1288
922
1289− cfg := c.cfg.Config()
1290− agentCfg, ok := cfg.Agents[config.AgentCoder]
923+ agentCfg, ok := c.cfg.Config().Agents[config.AgentCoder]
1291 if !ok {
924 if !ok {
1292 return errCoderAgentNotConfigured
925 return errCoderAgentNotConfigured
1293 }
926 }
1294
927
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−
1306 tools, err := c.buildTools(ctx, agentCfg, false)
928 tools, err := c.buildTools(ctx, agentCfg, false)
1307 if err != nil {
929 if err != nil {
1308 return err
930 return err
1309 }
931 }
1310−
1311− c.toolsCacheMu.Lock()
1312− c.toolsCache = tools
1313− c.toolsCacheCfg = cfg
1314− c.toolsCacheMCP = mcpGen
1315− c.toolsCacheMu.Unlock()
1316−
1317 c.currentAgent.SetTools(tools)
932 c.currentAgent.SetTools(tools)
1318 return nil
933 return nil
1319}
934}
@@ -1331,63 +946,7 @@ func (c *coordinator) Summarize(ctx context.Context, sessionID string) error {
1331 if !ok {
946 if !ok {
1332 return errModelProviderNotConfigured
947 return errModelProviderNotConfigured
1333 }
948 }
1334−
1335− if err := c.refreshTokenIfExpired(ctx, providerCfg); err != nil {
1336− slog.Error("Failed to refresh OAuth2 token before summarize. Proceeding with existing token.", "error", err)
1337− }
1338−
1339− summarize := func() error {
1340− return c.currentAgent.Summarize(ctx, sessionID, getProviderOptions(c.currentAgent.Model(), providerCfg))
949+ return c.currentAgent.Summarize(ctx, sessionID, getProviderOptions(c.currentAgent.Model(), providerCfg))
1341− }
1342−
1343− return c.runWithUnauthorizedRetry(ctx, providerCfg, summarize)
1344−}
1345−
1346−// GenerateTitle generates a session title using the current agent.
1347−func (c *coordinator) GenerateTitle(ctx context.Context, sessionID, prompt string) {
1348− if c.currentAgent == nil {
1349− return
1350− }
1351− c.currentAgent.GenerateTitle(ctx, sessionID, prompt)
1352−}
1353−
1354−// refreshTokenIfExpired proactively refreshes the OAuth token if it has expired.
1355−func (c *coordinator) refreshTokenIfExpired(ctx context.Context, providerCfg config.ProviderConfig) error {
1356− if providerCfg.OAuthToken == nil || !providerCfg.OAuthToken.IsExpired() {
1357− return nil
1358− }
1359− slog.Debug("Token needs to be refreshed", "provider", providerCfg.ID)
1360− return c.refreshOAuth2Token(ctx, providerCfg)
1361−}
1362−
1363−// runWithUnauthorizedRetry executes fn. If fn returns a 401 error, it
1364−// attempts to refresh credentials and re-runs fn once. Returns the
1365−// final error: from the retry if a retry was attempted, otherwise from
1366−// the original run. Callers that need to notify the user on persistent
1367−// failure should check isUnauthorized on the returned error.
1368−func (c *coordinator) runWithUnauthorizedRetry(ctx context.Context, providerCfg config.ProviderConfig, fn func() error) error {
1369− err := fn()
1370− if err != nil && c.isUnauthorized(err) {
1371− if retryErr := c.retryAfterUnauthorized(ctx, providerCfg); retryErr == nil {
1372− return fn()
1373− }
1374− }
1375− return err
1376−}
1377−
1378−// retryAfterUnauthorized attempts to refresh credentials after receiving a 401
1379−// and returns nil if retry should be attempted.
1380−func (c *coordinator) retryAfterUnauthorized(ctx context.Context, providerCfg config.ProviderConfig) error {
1381− switch {
1382− case providerCfg.OAuthToken != nil:
1383− slog.Debug("Received 401. Refreshing token and retrying", "provider", providerCfg.ID)
1384− return c.refreshOAuth2Token(ctx, providerCfg)
1385− case strings.Contains(providerCfg.APIKeyTemplate, "$"):
1386− slog.Debug("Received 401. Refreshing API Key template and retrying", "provider", providerCfg.ID)
1387− return c.refreshApiKeyTemplate(ctx, providerCfg)
1388− default:
1389− return nil
1390− }
1391}
950}
1392
951
1393func (c *coordinator) isUnauthorized(err error) bool {
952func (c *coordinator) isUnauthorized(err error) bool {
@@ -1464,60 +1023,28 @@ func (c *coordinator) runSubAgent(ctx context.Context, params subAgentParams) (f
1464 }
1023 }
1465
1024
1466 // Run the agent
1025 // Run the agent
1467− run := func() (*fantasy.AgentResult, error) {
1468− return params.Agent.Run(ctx, SessionAgentCall{
1026+ result, err := params.Agent.Run(ctx, SessionAgentCall{
1469− SessionID: session.ID,
1027+ SessionID: session.ID,
1470− Prompt: params.Prompt,
1028+ Prompt: params.Prompt,
1471− MaxOutputTokens: maxTokens,
1029+ MaxOutputTokens: maxTokens,
1472− ProviderOptions: getProviderOptions(model, providerCfg),
1030+ ProviderOptions: getProviderOptions(model, providerCfg),
1473− Temperature: model.ModelCfg.Temperature,
1031+ Temperature: model.ModelCfg.Temperature,
1474− TopP: model.ModelCfg.TopP,
1032+ TopP: model.ModelCfg.TopP,
1475− TopK: model.ModelCfg.TopK,
1033+ TopK: model.ModelCfg.TopK,
1476− FrequencyPenalty: model.ModelCfg.FrequencyPenalty,
1034+ FrequencyPenalty: model.ModelCfg.FrequencyPenalty,
1477− PresencePenalty: model.ModelCfg.PresencePenalty,
1035+ PresencePenalty: model.ModelCfg.PresencePenalty,
1478− NonInteractive: true,
1036+ NonInteractive: true,
1479− })
1480− }
1481− var result *fantasy.AgentResult
1482− err = c.runWithUnauthorizedRetry(ctx, providerCfg, func() error {
1483− var runErr error
1484− result, runErr = run()
1485− return runErr
1486 })
1037 })
1487− // Notify only if still unauthorized after retry.
1488− if err != nil && c.isUnauthorized(err) && c.notify != nil && model.ModelCfg.Provider == hyper.Name {
1489− c.notify.Publish(pubsub.CreatedEvent, notify.Notification{
1490− Type: notify.TypeReAuthenticate,
1491− ProviderID: model.ModelCfg.Provider,
1492− })
1493− }
1494 if err != nil {
1038 if err != nil {
1495− return fantasy.NewTextErrorResponse(fmt.Sprintf("Failed to generate response: %s", err)), nil
1039+ return fantasy.NewTextErrorResponse("error generating response"), nil
1496 }
1040 }
1497
1041
1498− // Update parent session cost on a best-effort basis. A failure here must
1042+ // Update parent session cost
1499− // not discard the sub-agent output that was already produced.
1500 if err := c.updateParentSessionCost(ctx, session.ID, params.SessionID); err != nil {
1043 if err := c.updateParentSessionCost(ctx, session.ID, params.SessionID); err != nil {
1501− slog.Warn(
1044+ return fantasy.ToolResponse{}, err
1502− "Failed to update parent session cost",
1503− "child_session", session.ID,
1504− "parent_session", params.SessionID,
1505− "error", err,
1506− )
1507 }
1045 }
1508
1046
1509− output := subAgentOutput(result)
1510− if output == "" {
1511− return fantasy.NewTextErrorResponse("Sub-agent completed but produced no text output."), nil
1512− }
1513− return fantasy.NewTextResponse(output), nil
1047+ return fantasy.NewTextResponse(result.Response.Content.Text()), nil
1514−}
1515−
1516−func subAgentOutput(result *fantasy.AgentResult) string {
1517− if result == nil {
1518− return ""
1519− }
1520− return result.Response.Content.Text()
1521}
1048}
1522
1049
1523// updateParentSessionCost accumulates the cost from a child session to its parent session.
1050// updateParentSessionCost accumulates the cost from a child session to its parent session.
@@ -1541,31 +1068,42 @@ func (c *coordinator) updateParentSessionCost(ctx context.Context, childSessionI
1541 return nil
1068 return nil
1542}
1069}
1543
1070
1544−// discoverSkills is a thin fallback wrapper used only when no
1071+// discoverSkills runs the skill discovery pipeline and returns both the
1545−// skills.Manager has been threaded through to the coordinator. All
1072+// pre-filter (all discovered, after dedup) and post-filter (active) lists.
1546−// production call sites (backend.CreateWorkspace, setupLocalWorkspace)
1073+// It also emits a single diagnostic log line summarising the outcome to
1547−// run discovery in advance and pass the results via the manager;
1074+// help track skill-loading health over time.
1548−// reaching this path means a caller bypassed both. It deliberately does
1549−// NOT publish to the package-level broker — there are no subscribers in
1550−// that case, so doing so would be misleading without delivering the
1551−// snapshot anywhere useful.
1552func discoverSkills(cfg *config.ConfigStore) (allSkills, activeSkills []*skills.Skill) {
1075func discoverSkills(cfg *config.ConfigStore) (allSkills, activeSkills []*skills.Skill) {
1076+ builtin, builtinStates := skills.DiscoverBuiltinWithStates()
1077+ discovered := append([]*skills.Skill(nil), builtin...)
1078+
1079+ var userStates []*skills.SkillState
1080+ var userPaths []string
1081+
1553 opts := cfg.Config().Options
1082 opts := cfg.Config().Options
1554− var paths, disabled []string
1083+ if opts != nil && len(opts.SkillsPaths) > 0 {
1555− if opts != nil {
1084+ userPaths = make([]string, 0, len(opts.SkillsPaths))
1556− paths = opts.SkillsPaths
1085+ for _, pth := range opts.SkillsPaths {
1557− disabled = opts.DisabledSkills
1086+ expanded := home.Long(pth)
1087+ if strings.HasPrefix(expanded, "$") {
1088+ if resolved, err := cfg.Resolver().ResolveValue(expanded); err == nil {
1089+ expanded = resolved
1090+ }
1091+ }
1092+ userPaths = append(userPaths, expanded)
1093+ }
1094+ var userSkills []*skills.Skill
1095+ userSkills, userStates = skills.DiscoverWithStates(userPaths)
1096+ discovered = append(discovered, userSkills...)
1558 }
1097 }
1559− var resolver func(string) (string, error)
1098+
1560− if r := cfg.Resolver(); r != nil {
1099+ allSkills = skills.Deduplicate(discovered)
1561− resolver = r.ResolveValue
1100+ var disabledSkills []string
1101+ if opts != nil {
1102+ disabledSkills = opts.DisabledSkills
1562 }
1103 }
1563− allSkills, activeSkills, states := skills.DiscoverFromConfig(skills.DiscoveryConfig{
1104+ activeSkills = skills.Filter(allSkills, disabledSkills)
1564− SkillsPaths: paths,
1105+
1565− DisabledSkills: disabled,
1566− Resolver: resolver,
1567− })
1568− logDiscoveryStats(states, paths, allSkills, activeSkills, disabled)
1106+ logDiscoveryStats(builtin, builtinStates, userStates, userPaths, allSkills, activeSkills, disabledSkills)
1569 return allSkills, activeSkills
1107 return allSkills, activeSkills
1570}
1108}
1571
1109
@@ -1600,8 +1138,7 @@ func logTurnSkillUsage(
1600 }
1138 }
1601 }
1139 }
1602
1140
1603− slog.Info(
1604− "Skill turn summary",
1141+ slog.Info("Skill turn summary",
1605 "component", "skills",
1142 "component", "skills",
1606 "session_id", sessionID,
1143 "session_id", sessionID,
1607 "prompt_len", len(prompt),
1144 "prompt_len", len(prompt),
@@ -1613,26 +1150,28 @@ func logTurnSkillUsage(
1613
1150
1614// logDiscoveryStats emits a single structured log line summarising skill
1151// logDiscoveryStats emits a single structured log line summarising skill
1615// discovery for the current session. It is intentionally low-volume: one
1152// discovery for the current session. It is intentionally low-volume: one
1616−// line per session start. Builtin vs user counts are derived from the
1153+// line per session start.
1617−// SkillState.Path — builtin states use the "builtin/" embed prefix.
1618func logDiscoveryStats(
1154func logDiscoveryStats(
1155+ builtin []*skills.Skill,
1619− states []*skills.SkillState,
1156+ builtinStates, userStates []*skills.SkillState,
1620 userPaths []string,
1157 userPaths []string,
1621 allSkills, activeSkills []*skills.Skill,
1158 allSkills, activeSkills []*skills.Skill,
1622 disabled []string,
1159 disabled []string,
1623) {
1160) {
1624− var builtinOK, builtinErr, userOK, userErr int
1161+ countErrors := func(states []*skills.SkillState) int {
1625− for _, s := range states {
1162+ n := 0
1626− isBuiltin := strings.HasPrefix(s.Path, "builtin/")
1163+ for _, s := range states {
1627− switch {
1628− case isBuiltin && s.State == skills.StateNormal:
1629− builtinOK++
1630− case isBuiltin && s.State == skills.StateError:
1164+ if s.State == skills.StateError {
1631− builtinErr++
1165+ n++
1166+ }
1167+ }
1168+ return n
1169+ }
1170+
1171+ userOK := 0
1172+ for _, s := range userStates {
1632− case !isBuiltin && s.State == skills.StateNormal:
1173+ if s.State == skills.StateNormal {
1633 userOK++
1174 userOK++
1634− case !isBuiltin && s.State == skills.StateError:
1635− userErr++
1636 }
1175 }
1637 }
1176 }
1638
1177
@@ -1643,13 +1182,12 @@ func logDiscoveryStats(
1643
1182
1644 xml := skills.ToPromptXML(activeSkills)
1183 xml := skills.ToPromptXML(activeSkills)
1645
1184
1646− slog.Info(
1647− "Skill discovery complete",
1185+ slog.Info("Skill discovery complete",
1648 "component", "skills",
1186 "component", "skills",
1649− "builtin_ok", builtinOK,
1187+ "builtin_ok", len(builtin),
1650− "builtin_errors", builtinErr,
1188+ "builtin_errors", countErrors(builtinStates),
1651 "user_ok", userOK,
1189 "user_ok", userOK,
1652− "user_errors", userErr,
1190+ "user_errors", countErrors(userStates),
1653 "user_paths", len(userPaths),
1191 "user_paths", len(userPaths),
1654 "deduped_total", len(allSkills),
1192 "deduped_total", len(allSkills),
1655 "active", len(activeSkills),
1193 "active", len(activeSkills),
internal/agent/coordinator_test.go+2−171
@@ -7,9 +7,6 @@ import (
7
7
8 "charm.land/catwalk/pkg/catwalk"
8 "charm.land/catwalk/pkg/catwalk"
9 "charm.land/fantasy"
9 "charm.land/fantasy"
10− "charm.land/fantasy/providers/anthropic"
11− "charm.land/fantasy/providers/bedrock"
12− "charm.land/fantasy/providers/openaicompat"
13 "github.com/charmbracelet/crush/internal/config"
10 "github.com/charmbracelet/crush/internal/config"
14 "github.com/stretchr/testify/assert"
11 "github.com/stretchr/testify/assert"
15 "github.com/stretchr/testify/require"
12 "github.com/stretchr/testify/require"
@@ -26,10 +23,6 @@ func (m *mockSessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fan
26 return m.runFunc(ctx, call)
23 return m.runFunc(ctx, call)
27}
24}
28
25
29−func (m *mockSessionAgent) BeginAccepted(sessionID string) *AcceptedRun {
30− return &AcceptedRun{sessionID: sessionID}
31−}
32−
33func (m *mockSessionAgent) Model() Model { return m.model }
26func (m *mockSessionAgent) Model() Model { return m.model }
34func (m *mockSessionAgent) SetModels(large, small Model) {}
27func (m *mockSessionAgent) SetModels(large, small Model) {}
35func (m *mockSessionAgent) SetTools(tools []fantasy.AgentTool) {}
28func (m *mockSessionAgent) SetTools(tools []fantasy.AgentTool) {}
@@ -46,7 +39,6 @@ func (m *mockSessionAgent) ClearQueue(sessionID string) {}
46func (m *mockSessionAgent) Summarize(context.Context, string, fantasy.ProviderOptions) error {
39func (m *mockSessionAgent) Summarize(context.Context, string, fantasy.ProviderOptions) error {
47 return nil
40 return nil
48}
41}
49−func (m *mockSessionAgent) GenerateTitle(context.Context, string, string) {}
50
42
51// newTestCoordinator creates a minimal coordinator for unit testing runSubAgent.
43// newTestCoordinator creates a minimal coordinator for unit testing runSubAgent.
52func newTestCoordinator(t *testing.T, env fakeEnv, providerID string, providerCfg config.ProviderConfig) *coordinator {
44func newTestCoordinator(t *testing.T, env fakeEnv, providerID string, providerCfg config.ProviderConfig) *coordinator {
@@ -56,7 +48,6 @@ func newTestCoordinator(t *testing.T, env fakeEnv, providerID string, providerCf
56 return &coordinator{
48 return &coordinator{
57 cfg: cfg,
49 cfg: cfg,
58 sessions: env.sessions,
50 sessions: env.sessions,
59− messages: env.messages,
60 }
51 }
61}
52}
62
53
@@ -116,99 +107,6 @@ func TestRunSubAgent(t *testing.T) {
116 assert.False(t, resp.IsError)
107 assert.False(t, resp.IsError)
117 })
108 })
118
109
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−
212 t.Run("ModelCfg.MaxTokens overrides default", func(t *testing.T) {
110 t.Run("ModelCfg.MaxTokens overrides default", func(t *testing.T) {
213 env := testEnv(t)
111 env := testEnv(t)
214 coord := newTestCoordinator(t, env, providerID, providerCfg)
112 coord := newTestCoordinator(t, env, providerID, providerCfg)
@@ -298,7 +196,7 @@ func TestRunSubAgent(t *testing.T) {
298 require.NoError(t, err)
196 require.NoError(t, err)
299
197
300 agent := newMockAgent(providerID, 4096, func(_ context.Context, _ SessionAgentCall) (*fantasy.AgentResult, error) {
198 agent := newMockAgent(providerID, 4096, func(_ context.Context, _ SessionAgentCall) (*fantasy.AgentResult, error) {
301− return nil, errors.New("provider request failed")
199+ return nil, errors.New("agent exploded")
302 })
200 })
303
201
304 resp, err := coord.runSubAgent(t.Context(), subAgentParams{
202 resp, err := coord.runSubAgent(t.Context(), subAgentParams{
@@ -312,7 +210,7 @@ func TestRunSubAgent(t *testing.T) {
312 // runSubAgent returns (errorResponse, nil) when agent.Run fails — not a Go error.
210 // runSubAgent returns (errorResponse, nil) when agent.Run fails — not a Go error.
313 require.NoError(t, err)
211 require.NoError(t, err)
314 assert.True(t, resp.IsError)
212 assert.True(t, resp.IsError)
315− assert.Equal(t, "Failed to generate response: provider request failed", resp.Content)
213+ assert.Equal(t, "error generating response", resp.Content)
316 })
214 })
317
215
318 t.Run("session setup callback is invoked", func(t *testing.T) {
216 t.Run("session setup callback is invoked", func(t *testing.T) {
@@ -485,70 +383,3 @@ func TestUpdateParentSessionCost(t *testing.T) {
485 assert.InDelta(t, 0.0, updated.Cost, 1e-9)
383 assert.InDelta(t, 0.0, updated.Cost, 1e-9)
486 })
384 })
487}
385}
488−
489−func TestGetProviderOptionsReasoningEffort(t *testing.T) {
490− // Bedrock is Fantasy's Anthropic under a different provider name; options
491− // must land under anthropic.Name so the Anthropic language model picks them up.
492− tests := []struct {
493− name string
494− providerType catwalk.Type
495− }{
496− {"anthropic honors reasoning_effort", catwalk.Type(anthropic.Name)},
497− {"bedrock honors reasoning_effort", catwalk.Type(bedrock.Name)},
498− }
499− for _, tc := range tests {
500− t.Run(tc.name, func(t *testing.T) {
501− model := Model{
502− CatwalkCfg: catwalk.Model{
503− ID: "claude-opus-4-7",
504− CanReason: true,
505− ReasoningLevels: []string{"max"},
506− },
507− ModelCfg: config.SelectedModel{
508− Provider: "test",
509− ReasoningEffort: "max",
510− },
511− }
512− providerCfg := config.ProviderConfig{ID: "test", Type: tc.providerType}
513−
514− opts := getProviderOptions(model, providerCfg)
515−
516− raw, ok := opts[anthropic.Name]
517− require.True(t, ok, "options should be keyed under anthropic.Name for type %q", tc.providerType)
518− parsed, ok := raw.(*anthropic.ProviderOptions)
519− require.True(t, ok)
520− require.NotNil(t, parsed.Effort)
521− assert.Equal(t, anthropic.Effort("max"), *parsed.Effort)
522− })
523− }
524−}
525−
526−func TestGetProviderOptionsReasoningEffortFallback(t *testing.T) {
527− model := Model{
528− CatwalkCfg: catwalk.Model{
529− ID: "glm-5.2",
530− CanReason: true,
531− ReasoningLevels: []string{"high", "max"},
532− },
533− ModelCfg: config.SelectedModel{
534− Provider: "zai",
535− },
536− }
537− providerCfg := config.ProviderConfig{
538− ID: string(catwalk.InferenceProviderZAI),
539− Type: openaicompat.Name,
540− }
541−
542− opts := getProviderOptions(model, providerCfg)
543−
544− raw, ok := opts[openaicompat.Name]
545− require.True(t, ok)
546− parsed, ok := raw.(*openaicompat.ProviderOptions)
547− require.True(t, ok)
548− require.NotNil(t, parsed.ReasoningEffort)
549− assert.Equal(t, "high", string(*parsed.ReasoningEffort))
550−
551− thinking, ok := parsed.ExtraBody["thinking"].(map[string]any)
552− require.True(t, ok)
553− assert.Equal(t, "enabled", thinking["type"])
554−}
internal/agent/dispatch_cancel_test.godeleted−447
@@ -1,447 +0,0 @@
1−package agent
2−
3−import (
4− "context"
5− "errors"
6− "sync/atomic"
7− "testing"
8− "time"
9−
10− "charm.land/fantasy"
11− "github.com/charmbracelet/crush/internal/agent/notify"
12− "github.com/charmbracelet/crush/internal/message"
13− "github.com/charmbracelet/crush/internal/pubsub"
14− "github.com/stretchr/testify/assert"
15− "github.com/stretchr/testify/require"
16−)
17−
18−// finishStreamModel is a minimal fantasy.LanguageModel that streams a
19−// single text part followed by a normal (FinishReasonStop) finish. It
20−// is enough to drive sessionAgent.Run through PrepareStep and a clean
21−// completion without a recorded provider cassette.
22−type finishStreamModel struct {
23− text string
24−}
25−
26−func (m *finishStreamModel) Provider() string { return "fake" }
27−func (m *finishStreamModel) Model() string { return "fake-model" }
28−
29−func (m *finishStreamModel) Generate(ctx context.Context, call fantasy.Call) (*fantasy.Response, error) {
30− return &fantasy.Response{
31− Content: fantasy.ResponseContent{fantasy.TextContent{Text: m.text}},
32− FinishReason: fantasy.FinishReasonStop,
33− }, nil
34−}
35−
36−func (m *finishStreamModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.StreamResponse, error) {
37− text := m.text
38− return func(yield func(fantasy.StreamPart) bool) {
39− if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeTextStart, ID: "1"}) {
40− return
41− }
42− if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeTextDelta, ID: "1", Delta: text}) {
43− return
44− }
45− if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeTextEnd, ID: "1"}) {
46− return
47− }
48− yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeFinish, FinishReason: fantasy.FinishReasonStop})
49− }, nil
50−}
51−
52−func (m *finishStreamModel) GenerateObject(ctx context.Context, call fantasy.ObjectCall) (*fantasy.ObjectResponse, error) {
53− return nil, errors.New("not implemented")
54−}
55−
56−func (m *finishStreamModel) StreamObject(ctx context.Context, call fantasy.ObjectCall) (fantasy.ObjectStreamResponse, error) {
57− return nil, errors.New("not implemented")
58−}
59−
60−func newStreamTestAgent(t *testing.T) (*sessionAgent, fakeEnv) {
61− t.Helper()
62− env := testEnv(t)
63− model := &finishStreamModel{text: "done"}
64− sa := testSessionAgent(env, model, model, "system").(*sessionAgent)
65− return sa, env
66−}
67−
68−// TestCancel_ActiveAndAcceptedFiresBothBranches covers the case where a
69−// session is actively running (activeRequests set) AND a follow-up has
70−// been accepted (acceptedRuns > 0). A single Cancel must fire both: it
71−// invokes the active cancel func and records a pending cancel for the
72−// accepted follow-up.
73−func TestCancel_ActiveAndAcceptedFiresBothBranches(t *testing.T) {
74− t.Parallel()
75− sa, _ := newCancelTestAgent(t)
76−
77− const sid = "sid"
78− var activeCanceled atomic.Bool
79− sa.activeRequests.Set(sid, func() { activeCanceled.Store(true) })
80−
81− accept := sa.BeginAccepted(sid)
82− defer accept.Close()
83−
84− sa.Cancel(sid)
85−
86− require.True(t, activeCanceled.Load(), "active cancel func must fire")
87− require.True(t, sa.hasPendingCancel(sid), "accepted follow-up must record a pending cancel")
88−}
89−
90−// TestRun_BusyWithPendingCancelTakesCancelOnEntry covers the busy-queue
91−// branch consulting pendingCancels: when the session is busy AND a
92−// cancel has been recorded for an accepted follow-up, Run must take the
93−// cancel-on-entry path (persist a canceled turn) instead of enqueueing
94−// the call behind the active run.
95−func TestRun_BusyWithPendingCancelTakesCancelOnEntry(t *testing.T) {
96− t.Parallel()
97− sa, env := newCancelTestAgent(t)
98−
99− sess, err := env.sessions.Create(t.Context(), "session")
100− require.NoError(t, err)
101−
102− // Make the session look busy: an earlier prompt is active.
103− sa.activeRequests.Set(sess.ID, func() {})
104−
105− accept := sa.BeginAccepted(sess.ID)
106− // A cancel arrives while this follow-up is accepted-but-not-active.
107− sa.Cancel(sess.ID)
108− require.True(t, sa.hasPendingCancel(sess.ID))
109−
110− result, err := sa.Run(t.Context(), SessionAgentCall{
111− SessionID: sess.ID,
112− Prompt: "follow-up",
113− Accepted: accept,
114− })
115− require.NoError(t, err)
116− require.Nil(t, result)
117−
118− // The follow-up was canceled on entry, not enqueued.
119− require.Equal(t, 0, sa.QueuedPrompts(sess.ID),
120− "cancel-on-entry must not enqueue the follow-up behind the active run")
121− require.False(t, sa.hasPendingCancel(sess.ID), "pending cancel must be consumed")
122− require.Equal(t, 0, sa.acceptedCount(sess.ID), "accept reservation must be released")
123−
124− msgs, err := env.messages.List(t.Context(), sess.ID)
125− require.NoError(t, err)
126− require.Len(t, msgs, 2)
127− assert.Equal(t, message.User, msgs[0].Role)
128− assert.Equal(t, message.Assistant, msgs[1].Role)
129− assert.Equal(t, message.FinishReasonCanceled, msgs[1].FinishReason())
130−}
131−
132−// TestRun_PrepareStepDrainSkipsQueuedOnPendingCancel verifies that the
133−// queue drain inside PrepareStep skips queued follow-up prompts when a
134−// cancel has been recorded for the session: the queued prompt must not
135−// be folded into the active turn as an extra user message.
136−func TestRun_PrepareStepDrainSkipsQueuedOnPendingCancel(t *testing.T) {
137− t.Parallel()
138− sa, env := newStreamTestAgent(t)
139−
140− sess, err := env.sessions.Create(t.Context(), "session")
141− require.NoError(t, err)
142−
143− // A follow-up prompt sits queued for the session.
144− sa.enqueueCall(SessionAgentCall{SessionID: sess.ID, Prompt: "queued-followup"})
145− // A cancel was recorded for the session while it sat in the queue.
146− sa.cancelMark.Set(sess.ID, 1)
147−
148− result, err := sa.Run(t.Context(), SessionAgentCall{
149− SessionID: sess.ID,
150− Prompt: "main",
151− })
152− require.NoError(t, err)
153− require.NotNil(t, result)
154−
155− // Only the main prompt produced a user message; the queued
156− // follow-up was skipped, not folded into the turn.
157− msgs, err := env.messages.List(t.Context(), sess.ID)
158− require.NoError(t, err)
159− var userMsgs []message.Message
160− for _, m := range msgs {
161− if m.Role == message.User {
162− userMsgs = append(userMsgs, m)
163− }
164− }
165− require.Len(t, userMsgs, 1, "queued follow-up must not create a user message")
166− assert.Equal(t, "main", userMsgs[0].Content().String())
167−
168− // The queue was drained and the pending cancel consumed.
169− require.Equal(t, 0, sa.QueuedPrompts(sess.ID))
170− require.False(t, sa.hasPendingCancel(sess.ID))
171−}
172−
173−// TestRun_NormalCompletionClearsStalePendingCancel verifies that a Run
174−// which completes normally clears any stale pending-cancel entry for the
175−// session, so it cannot catch a future run.
176−func TestRun_NormalCompletionClearsStalePendingCancel(t *testing.T) {
177− t.Parallel()
178− sa, env := newStreamTestAgent(t)
179−
180− sess, err := env.sessions.Create(t.Context(), "session")
181− require.NoError(t, err)
182−
183− // A stale cancel mark lingers (no queued work, no accepted run).
184− sa.cancelMark.Set(sess.ID, 1)
185−
186− result, err := sa.Run(t.Context(), SessionAgentCall{
187− SessionID: sess.ID,
188− Prompt: "main",
189− })
190− require.NoError(t, err)
191− require.NotNil(t, result)
192−
193− require.False(t, sa.hasPendingCancel(sess.ID),
194− "normal completion must clear the stale pending cancel")
195−
196− msgs, err := env.messages.List(t.Context(), sess.ID)
197− require.NoError(t, err)
198− require.Len(t, msgs, 2)
199− assert.Equal(t, message.Assistant, msgs[1].Role)
200− assert.Equal(t, message.FinishReasonEndTurn, msgs[1].FinishReason())
201−}
202−
203−// newCancelTestAgentWithRunComplete builds a DB-backed sessionAgent wired
204−// to a RunComplete broker so tests can observe the terminal event a
205−// RunID-bearing caller (e.g. `crush run`) blocks on.
206−func newCancelTestAgentWithRunComplete(t *testing.T) (*sessionAgent, fakeEnv, *pubsub.Broker[notify.RunComplete]) {
207− t.Helper()
208− env := testEnv(t)
209− broker := pubsub.NewBroker[notify.RunComplete]()
210− t.Cleanup(broker.Shutdown)
211− sa := NewSessionAgent(SessionAgentOptions{
212− Sessions: env.sessions,
213− Messages: env.messages,
214− RunComplete: broker,
215− }).(*sessionAgent)
216− return sa, env, broker
217−}
218−
219−// TestRun_CancelOnEntryPublishesRunComplete covers the first review
220−// finding: the cancel-on-entry path returned before the streaming defer
221−// that publishes RunComplete was installed. A caller that dispatches a
222−// run with a RunID and blocks on RunComplete (ignoring message events,
223−// like `crush run`) would hang on an immediately-canceled accepted run.
224−// The cancel-on-entry path must publish a terminal RunComplete carrying
225−// the originating RunID.
226−func TestRun_CancelOnEntryPublishesRunComplete(t *testing.T) {
227− t.Parallel()
228− sa, env, broker := newCancelTestAgentWithRunComplete(t)
229−
230− sess, err := env.sessions.Create(t.Context(), "session")
231− require.NoError(t, err)
232−
233− ctx, cancel := context.WithCancel(t.Context())
234− defer cancel()
235− ch := broker.Subscribe(ctx)
236−
237− accept := sa.BeginAccepted(sess.ID)
238− // A cancel arrives in the accepted-but-not-yet-active window.
239− sa.Cancel(sess.ID)
240− require.True(t, sa.hasPendingCancel(sess.ID))
241−
242− result, err := sa.Run(t.Context(), SessionAgentCall{
243− SessionID: sess.ID,
244− RunID: "run-cancel-on-entry",
245− Prompt: "hello",
246− Accepted: accept,
247− })
248− require.NoError(t, err)
249− require.Nil(t, result)
250−
251− select {
252− case got := <-ch:
253− assert.Equal(t, "run-cancel-on-entry", got.Payload.RunID,
254− "RunComplete must echo the originating RunID")
255− assert.Equal(t, sess.ID, got.Payload.SessionID)
256− assert.True(t, got.Payload.Cancelled,
257− "cancel-on-entry RunComplete must be marked cancelled")
258− case <-time.After(2 * time.Second):
259− t.Fatal("cancel-on-entry must publish RunComplete; a RunID caller would hang otherwise")
260− }
261−}
262−
263−// TestCancel_TwoAcceptedBothObserveCancellation covers the second review
264−// finding: a single cancel with two accepted-not-yet-active prompts must
265−// cancel both. The cancel raises the session's high-water mark to the
266−// latest accept sequence, so every prompt accepted-but-not-yet-active at
267−// cancel time is covered and both take the cancel-on-entry path.
268−func TestCancel_TwoAcceptedBothObserveCancellation(t *testing.T) {
269− t.Parallel()
270− sa, env := newCancelTestAgent(t)
271−
272− sess, err := env.sessions.Create(t.Context(), "session")
273− require.NoError(t, err)
274−
275− // Two prompts are accepted-but-not-yet-active for the same session.
276− accept1 := sa.BeginAccepted(sess.ID)
277− accept2 := sa.BeginAccepted(sess.ID)
278− require.Equal(t, 2, sa.acceptedCount(sess.ID))
279−
280− // A single cancel arrives before either becomes active.
281− sa.Cancel(sess.ID)
282− require.Equal(t, accept2.seq, sa.pendingCancelMark(sess.ID),
283− "one cancel must mark every currently-accepted prompt as canceled")
284− require.GreaterOrEqual(t, sa.pendingCancelMark(sess.ID), accept1.seq,
285− "the mark must cover the earlier accepted prompt too")
286−
287− // Both prompts enter Run; each must take cancel-on-entry, not run.
288− r1, err := sa.Run(t.Context(), SessionAgentCall{
289− SessionID: sess.ID,
290− Prompt: "first",
291− Accepted: accept1,
292− })
293− require.NoError(t, err)
294− require.Nil(t, r1)
295−
296− r2, err := sa.Run(t.Context(), SessionAgentCall{
297− SessionID: sess.ID,
298− Prompt: "second",
299− Accepted: accept2,
300− })
301− require.NoError(t, err)
302− require.Nil(t, r2)
303−
304− require.False(t, sa.hasPendingCancel(sess.ID),
305− "both reserved units must be consumed")
306− require.Equal(t, 0, sa.acceptedCount(sess.ID),
307− "both accept reservations must be released")
308−
309− // Each canceled-on-entry turn writes a user + canceled assistant
310− // message, and neither prompt was enqueued to run normally.
311− require.Equal(t, 0, sa.QueuedPrompts(sess.ID),
312− "neither accepted prompt may be enqueued to run normally")
313− msgs, err := env.messages.List(t.Context(), sess.ID)
314− require.NoError(t, err)
315− require.Len(t, msgs, 4, "two canceled turns produce two user + two assistant messages")
316− var canceled int
317− for _, m := range msgs {
318− if m.Role == message.Assistant {
319− assert.Equal(t, message.FinishReasonCanceled, m.FinishReason())
320− canceled++
321− }
322− }
323− require.Equal(t, 2, canceled, "both turns must finish canceled")
324−}
325−
326−// TestRun_IdleCancelDoesNotPoisonNextPrompt covers the idle-cancel
327−// no-op guarantee end-to-end: an Escape on an idle session must not
328−// record a pending cancel that leaks into the next accepted prompt, which
329−// must run normally to completion.
330−func TestRun_IdleCancelDoesNotPoisonNextPrompt(t *testing.T) {
331− t.Parallel()
332− sa, env := newStreamTestAgent(t)
333−
334− sess, err := env.sessions.Create(t.Context(), "session")
335− require.NoError(t, err)
336−
337− // Idle Escape: no accepted run, no active request.
338− sa.Cancel(sess.ID)
339− require.False(t, sa.hasPendingCancel(sess.ID),
340− "idle cancel must not record a pending cancel")
341−
342− // The next accepted prompt must run normally, not cancel on entry.
343− accept := sa.BeginAccepted(sess.ID)
344− result, err := sa.Run(t.Context(), SessionAgentCall{
345− SessionID: sess.ID,
346− Prompt: "next",
347− Accepted: accept,
348− })
349− require.NoError(t, err)
350− require.NotNil(t, result, "next prompt must run normally after an idle cancel")
351−
352− msgs, err := env.messages.List(t.Context(), sess.ID)
353− require.NoError(t, err)
354− require.Len(t, msgs, 2)
355− assert.Equal(t, message.User, msgs[0].Role)
356− assert.Equal(t, message.Assistant, msgs[1].Role)
357− assert.Equal(t, message.FinishReasonEndTurn, msgs[1].FinishReason(),
358− "the prompt must finish normally, not canceled")
359−}
360−
361−// TestCancel_AcceptedAfterCancelIsNotPoisoned is the regression test for
362−// the reviewer's finding: a counted session-level pending cancel let a
363−// prompt accepted after the cancel enter Run first and consume a unit
364−// reserved for the earlier prompts. With a sequence high-water mark, a
365−// single cancel covers exactly the prompts accepted-but-not-yet-active at
366−// cancel time (A and B); a prompt accepted afterwards (C) gets a higher
367−// sequence and must run normally without consuming A or B's cancellation.
368−// C is run first to prove it neither cancels nor drains the mark, then A
369−// and B are run and must both cancel on entry.
370−func TestCancel_AcceptedAfterCancelIsNotPoisoned(t *testing.T) {
371− t.Parallel()
372− sa, env := newStreamTestAgent(t)
373−
374− sess, err := env.sessions.Create(t.Context(), "session")
375− require.NoError(t, err)
376−
377− // A and B are accepted-but-not-yet-active.
378− acceptA := sa.BeginAccepted(sess.ID)
379− acceptB := sa.BeginAccepted(sess.ID)
380−
381− // One cancel arrives covering both A and B.
382− sa.Cancel(sess.ID)
383− require.True(t, sa.hasPendingCancel(sess.ID))
384− require.Equal(t, acceptB.seq, sa.pendingCancelMark(sess.ID),
385− "the mark must cover every prompt accepted before the cancel")
386−
387− // C is accepted AFTER the cancel; its sequence is above the mark.
388− acceptC := sa.BeginAccepted(sess.ID)
389− require.Greater(t, acceptC.seq, sa.pendingCancelMark(sess.ID),
390− "a prompt accepted after the cancel must not be covered by the mark")
391−
392− // Run C first. It must run normally to completion and must not
393− // consume or clear the cancellation reserved for A and B.
394− rc, err := sa.Run(t.Context(), SessionAgentCall{
395− SessionID: sess.ID,
396− Prompt: "C",
397− Accepted: acceptC,
398− })
399− require.NoError(t, err)
400− require.NotNil(t, rc, "C was accepted after the cancel and must run normally")
401− require.True(t, sa.hasPendingCancel(sess.ID),
402− "running C must not drain the cancellation reserved for A and B")
403−
404− // Now A and B run. Both were accepted before the cancel and must
405− // take the cancel-on-entry path.
406− ra, err := sa.Run(t.Context(), SessionAgentCall{
407− SessionID: sess.ID,
408− Prompt: "A",
409− Accepted: acceptA,
410− })
411− require.NoError(t, err)
412− require.Nil(t, ra, "A must cancel on entry, not run")
413−
414− rb, err := sa.Run(t.Context(), SessionAgentCall{
415− SessionID: sess.ID,
416− Prompt: "B",
417− Accepted: acceptB,
418− })
419− require.NoError(t, err)
420− require.Nil(t, rb, "B must cancel on entry, not run")
421−
422− require.False(t, sa.hasPendingCancel(sess.ID),
423− "the mark clears once all covered handles are resolved")
424− require.Equal(t, 0, sa.acceptedCount(sess.ID))
425− require.Equal(t, 0, sa.QueuedPrompts(sess.ID),
426− "neither A nor B may be enqueued to run normally")
427−
428− // C produced a normal turn; A and B each produced a canceled turn.
429− msgs, err := env.messages.List(t.Context(), sess.ID)
430− require.NoError(t, err)
431− require.Len(t, msgs, 6, "C normal + A canceled + B canceled = 3 user + 3 assistant")
432−
433− var normal, canceled int
434− for _, m := range msgs {
435− if m.Role != message.Assistant {
436− continue
437− }
438− switch m.FinishReason() {
439− case message.FinishReasonEndTurn:
440− normal++
441− case message.FinishReasonCanceled:
442− canceled++
443− }
444− }
445− require.Equal(t, 1, normal, "only C finished normally")
446− require.Equal(t, 2, canceled, "both A and B finished canceled")
447−}
internal/agent/hyper/provider.go+15−64
@@ -3,25 +3,34 @@ package hyper
3
3
4import (
4import (
5 "cmp"
5 "cmp"
6− "context"
7 _ "embed"
6 _ "embed"
8 "encoding/json"
7 "encoding/json"
9− "fmt"
10 "log/slog"
8 "log/slog"
11− "net/http"
12 "os"
9 "os"
10+ "strconv"
13 "sync"
11 "sync"
14− "sync/atomic"
15− "time"
16
12
17 "charm.land/catwalk/pkg/catwalk"
13 "charm.land/catwalk/pkg/catwalk"
18)
14)
19
15
20−//go:generate wget -O provider.json https://hyper.charm.land/v1/provider
16+//go:generate wget -O provider.json https://hyper.charm.land/api/v1/provider
21
17
22//go:embed provider.json
18//go:embed provider.json
23var embedded []byte
19var embedded []byte
24
20
21+// Enabled returns true if hyper is enabled.
22+var Enabled = sync.OnceValue(func() bool {
23+ b, _ := strconv.ParseBool(
24+ cmp.Or(
25+ os.Getenv("HYPER"),
26+ os.Getenv("HYPERCRUSH"),
27+ os.Getenv("HYPER_ENABLE"),
28+ os.Getenv("HYPER_ENABLED"),
29+ ),
30+ )
31+ return b
32+})
33+
25// Embedded returns the embedded Hyper provider.
34// Embedded returns the embedded Hyper provider.
26var Embedded = sync.OnceValue(func() catwalk.Provider {
35var Embedded = sync.OnceValue(func() catwalk.Provider {
27 var provider catwalk.Provider
36 var provider catwalk.Provider
@@ -37,8 +46,6 @@ var Embedded = sync.OnceValue(func() catwalk.Provider {
37const (
46const (
38 // Name is the default name of this meta provider.
47 // Name is the default name of this meta provider.
39 Name = "hyper"
48 Name = "hyper"
40− // DisplayName is the display name of Hyper.
41− DisplayName = "Charm Hyper"
42 // defaultBaseURL is the default proxy URL.
49 // defaultBaseURL is the default proxy URL.
43 defaultBaseURL = "https://hyper.charm.land"
50 defaultBaseURL = "https://hyper.charm.land"
44)
51)
@@ -47,59 +54,3 @@ const (
47var BaseURL = sync.OnceValue(func() string {
54var BaseURL = sync.OnceValue(func() string {
48 return cmp.Or(os.Getenv("HYPER_URL"), defaultBaseURL)
55 return cmp.Or(os.Getenv("HYPER_URL"), defaultBaseURL)
49})
56})
50−
51−// lastKnownBalance stores the most recently extracted hypercredit balance
52−// from API response metadata. FetchCredits checks this before making a
53−// separate HTTP call.
54−var lastKnownBalance atomic.Int64
55−
56−// hasBalance tracks whether lastKnownBalance has been set.
57−var hasBalance atomic.Bool
58−
59−// SetBalance stores a credit balance extracted from API response metadata.
60−func SetBalance(balance int) {
61− lastKnownBalance.Store(int64(balance))
62− hasBalance.Store(true)
63−}
64−
65−// FetchCredits returns the remaining hypercredit balance. It first checks
66−// for a balance extracted from the most recent API response's usage
67−// metadata. If none is available, it falls back to calling the /v1/credits
68−// endpoint directly.
69−func FetchCredits(ctx context.Context, apiKey string) (int, error) {
70− if hasBalance.Load() {
71− hasBalance.Store(false)
72− return int(lastKnownBalance.Load()), nil
73− }
74−
75− req, err := http.NewRequestWithContext(
76− ctx,
77− http.MethodGet,
78− BaseURL()+"/v1/credits",
79− nil,
80− )
81− if err != nil {
82− return 0, fmt.Errorf("could not create request: %w", err)
83− }
84− req.Header.Set("Authorization", "Bearer "+apiKey)
85−
86− client := &http.Client{Timeout: 10 * time.Second}
87− resp, err := client.Do(req)
88− if err != nil {
89− return 0, fmt.Errorf("failed to make request: %w", err)
90− }
91− defer resp.Body.Close()
92−
93− if resp.StatusCode != http.StatusOK {
94− return 0, fmt.Errorf("unexpected status code: %d", resp.StatusCode)
95− }
96−
97− var result struct {
98− Balance int `json:"balance"`
99− }
100− if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
101− return 0, fmt.Errorf("failed to decode response: %w", err)
102− }
103−
104− return result.Balance, nil
105−}
internal/agent/hyper/provider.json+22−241
@@ -3,61 +3,15 @@
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": "qwen3.7-plus",
6+ "default_large_model_id": "kimi-k2.5",
7− "default_small_model_id": "deepseek-v4-flash",
7+ "default_small_model_id": "gpt-oss-120b",
8 "models": [
8 "models": [
9− {
10− "id": "deepseek-v4-flash",
11− "name": "DeepSeek V4 Flash",
12− "cost_per_1m_in": 0.14,
13− "cost_per_1m_out": 0.28,
14− "cost_per_1m_in_cached": 0.0028,
15− "cost_per_1m_out_cached": 0,
16− "context_window": 1000000,
17− "default_max_tokens": 384000,
18− "can_reason": true,
19− "reasoning_levels": [
20− "high",
21− "xhigh"
22− ],
23− "default_reasoning_effort": "high",
24− "supports_attachments": false
25− },
26− {
27− "id": "deepseek-v4-pro",
28− "name": "DeepSeek V4 Pro",
29− "cost_per_1m_in": 0.435,
30− "cost_per_1m_out": 0.87,
31− "cost_per_1m_in_cached": 0.0036,
32− "cost_per_1m_out_cached": 0,
33− "context_window": 1000000,
34− "default_max_tokens": 384000,
35− "can_reason": true,
36− "reasoning_levels": [
37− "high",
38− "xhigh"
39− ],
40− "default_reasoning_effort": "high",
41− "supports_attachments": false
42− },
43− {
44− "id": "gemma-4-26b-a4b-it",
45− "name": "Gemma 4 26B A4B",
46− "cost_per_1m_in": 0.126,
47− "cost_per_1m_out": 0.42,
48− "cost_per_1m_in_cached": 0.063,
49− "cost_per_1m_out_cached": 0,
50− "context_window": 256000,
51− "default_max_tokens": 25600,
52− "can_reason": true,
53− "supports_attachments": false
54− },
55 {
9 {
56 "id": "glm-5",
10 "id": "glm-5",
57 "name": "GLM-5",
11 "name": "GLM-5",
58− "cost_per_1m_in": 0.86,
12+ "cost_per_1m_in": 1,
59− "cost_per_1m_out": 2.784,
13+ "cost_per_1m_out": 3,
60− "cost_per_1m_in_cached": 0.43,
14+ "cost_per_1m_in_cached": 0.5,
61 "cost_per_1m_out_cached": 0,
15 "cost_per_1m_out_cached": 0,
62 "context_window": 202752,
16 "context_window": 202752,
63 "default_max_tokens": 20275,
17 "default_max_tokens": 20275,
@@ -67,45 +21,22 @@
67 {
21 {
68 "id": "glm-5.1",
22 "id": "glm-5.1",
69 "name": "GLM-5.1",
23 "name": "GLM-5.1",
70− "cost_per_1m_in": 1.3,
24+ "cost_per_1m_in": 1.06,
71− "cost_per_1m_out": 4.3,
25+ "cost_per_1m_out": 4.4,
72 "cost_per_1m_in_cached": 0.26,
26 "cost_per_1m_in_cached": 0.26,
73 "cost_per_1m_out_cached": 0,
27 "cost_per_1m_out_cached": 0,
74− "context_window": 202000,
28+ "context_window": 202752,
75− "default_max_tokens": 202000,
29+ "default_max_tokens": 20275,
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,
30 "can_reason": true,
95− "reasoning_levels": [
96− "high",
97− "xhigh"
98− ],
99− "default_reasoning_effort": "high",
100 "supports_attachments": false
31 "supports_attachments": false
101 },
32 },
102 {
33 {
103 "id": "gpt-oss-120b",
34 "id": "gpt-oss-120b",
104 "name": "gpt-oss-120b",
35 "name": "gpt-oss-120b",
105− "cost_per_1m_in": 0.168,
36+ "cost_per_1m_in": 0.1,
106− "cost_per_1m_out": 0.562,
37+ "cost_per_1m_out": 0.4,
107− "cost_per_1m_in_cached": 0.084,
38+ "cost_per_1m_in_cached": 0.01,
108− "cost_per_1m_out_cached": 0,
39+ "cost_per_1m_out_cached": 0.04,
109 "context_window": 131072,
40 "context_window": 131072,
110 "default_max_tokens": 13107,
41 "default_max_tokens": 13107,
111 "can_reason": true,
42 "can_reason": true,
@@ -120,176 +51,26 @@
120 {
51 {
121 "id": "kimi-k2.5",
52 "id": "kimi-k2.5",
122 "name": "Kimi K2.5",
53 "name": "Kimi K2.5",
123− "cost_per_1m_in": 0.51,
54+ "cost_per_1m_in": 0.445,
124− "cost_per_1m_out": 2.67,
55+ "cost_per_1m_out": 2,
125− "cost_per_1m_in_cached": 0.255,
56+ "cost_per_1m_in_cached": 0.225,
126− "cost_per_1m_out_cached": 0,
57+ "cost_per_1m_out_cached": 1.1,
127 "context_window": 262144,
58 "context_window": 262144,
128 "default_max_tokens": 26214,
59 "default_max_tokens": 26214,
129 "can_reason": true,
60 "can_reason": true,
130− "supports_attachments": false
61+ "supports_attachments": true
131 },
62 },
132 {
63 {
133 "id": "kimi-k2.6",
64 "id": "kimi-k2.6",
134 "name": "Kimi K2.6",
65 "name": "Kimi K2.6",
135− "cost_per_1m_in": 0.95,
66+ "cost_per_1m_in": 0.8,
136− "cost_per_1m_out": 4,
137− "cost_per_1m_in_cached": 0.16,
138− "cost_per_1m_out_cached": 0,
139− "context_window": 262000,
140− "default_max_tokens": 262000,
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,
67 "cost_per_1m_out": 4,
155− "cost_per_1m_in_cached": 0.19,
68+ "cost_per_1m_in_cached": 0.25,
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",
166− "supports_attachments": true
167− },
168− {
169− "id": "llama-3.3-70b-instruct",
170− "name": "Llama 3.3 70B Instruct",
171− "cost_per_1m_in": 0.6066,
172− "cost_per_1m_out": 1.0386,
173− "cost_per_1m_in_cached": 0.3033,
174− "cost_per_1m_out_cached": 0,
175− "context_window": 128000,
176− "default_max_tokens": 12800,
177− "can_reason": true,
178− "supports_attachments": false
179− },
180− {
181− "id": "llama-4-maverick-17b-128e-instruct-fp8",
182− "name": "Llama 4 Maverick 17B 128E Instruct FP8",
183− "cost_per_1m_in": 0.274,
184− "cost_per_1m_out": 0.894,
185− "cost_per_1m_in_cached": 0.137,
186− "cost_per_1m_out_cached": 0,
187− "context_window": 430000,
188− "default_max_tokens": 43000,
189− "can_reason": true,
190− "supports_attachments": false
191− },
192− {
193− "id": "minimax-m2.7",
194− "name": "MiniMax M2.7",
195− "cost_per_1m_in": 0.3,
196− "cost_per_1m_out": 1.2,
197− "cost_per_1m_in_cached": 0.06,
198− "cost_per_1m_out_cached": 0.375,
199− "context_window": 204800,
200− "default_max_tokens": 131000,
201− "can_reason": true,
202− "reasoning_levels": [
203− "low",
204− "medium",
205− "high"
206− ],
207− "default_reasoning_effort": "medium",
208− "supports_attachments": false
209− },
210− {
211− "id": "qwen3.6-flash",
212− "name": "Qwen3.6-Flash",
213− "cost_per_1m_in": 1,
214− "cost_per_1m_out": 4,
215− "cost_per_1m_in_cached": 1.25,
216− "cost_per_1m_out_cached": 0.1,
217− "context_window": 1000000,
218− "default_max_tokens": 64000,
219− "can_reason": true,
220− "supports_attachments": true
221− },
222− {
223− "id": "qwen3.6-max",
224− "name": "Qwen3.6-Max",
225− "cost_per_1m_in": 2,
226− "cost_per_1m_out": 12,
227− "cost_per_1m_in_cached": 2.5,
228− "cost_per_1m_out_cached": 0.2,
229− "context_window": 256000,
230− "default_max_tokens": 64000,
231− "can_reason": true,
232− "supports_attachments": false
233− },
234− {
235− "id": "qwen3.6-plus",
236− "name": "Qwen3.6-Plus",
237− "cost_per_1m_in": 2,
238− "cost_per_1m_out": 6,
239− "cost_per_1m_in_cached": 2.5,
240− "cost_per_1m_out_cached": 0.2,
241− "context_window": 1000000,
242− "default_max_tokens": 64000,
243− "can_reason": true,
244− "supports_attachments": true
245− },
246− {
247− "id": "qwen3.7-max",
248− "name": "Qwen3.7-Max",
249− "cost_per_1m_in": 2.5,
250− "cost_per_1m_out": 7.5,
251− "cost_per_1m_in_cached": 3.125,
252− "cost_per_1m_out_cached": 0.25,
253− "context_window": 1000000,
254− "default_max_tokens": 64000,
255− "can_reason": true,
256− "supports_attachments": false
257− },
258− {
259− "id": "qwen3.7-plus",
260− "name": "Qwen3.7-Plus",
261− "cost_per_1m_in": 1.2,
262− "cost_per_1m_out": 4.8,
263− "cost_per_1m_in_cached": 1.5,
264− "cost_per_1m_out_cached": 0.12,
265− "context_window": 1000000,
266− "default_max_tokens": 64000,
267− "can_reason": true,
268− "supports_attachments": true
269− },
270− {
271− "id": "qwen3-coder-480b-a35b-instruct-int4-mixed-ar",
272− "name": "Qwen3 Coder 480B A35B Instruct INT4 Mixed AR",
273− "cost_per_1m_in": 0.557,
274− "cost_per_1m_out": 2.545,
275− "cost_per_1m_in_cached": 0.2785,
276− "cost_per_1m_out_cached": 0,
277− "context_window": 106000,
278− "default_max_tokens": 10600,
279− "can_reason": false,
280− "supports_attachments": false
281− },
282− {
283− "id": "qwen3-next-80b-a3b-instruct",
284− "name": "Qwen3 Next 80B A3B Instruct",
285− "cost_per_1m_in": 0.128,
286− "cost_per_1m_out": 1.28,
287− "cost_per_1m_in_cached": 0.064,
288 "cost_per_1m_out_cached": 0,
69 "cost_per_1m_out_cached": 0,
289 "context_window": 262144,
70 "context_window": 262144,
290 "default_max_tokens": 26214,
71 "default_max_tokens": 26214,
291− "can_reason": false,
72+ "can_reason": true,
292− "supports_attachments": false
73+ "supports_attachments": true
293 }
74 }
294 ]
75 ]
295}
76}
internal/agent/loop_detection.go+17−17
@@ -1,7 +1,8 @@
1package agent
1package agent
2
2
3import (
3import (
4− "hash/fnv"
4+ "crypto/sha256"
5+ "encoding/hex"
5 "io"
6 "io"
6
7
7 "charm.land/fantasy"
8 "charm.land/fantasy"
@@ -21,11 +22,11 @@ func hasRepeatedToolCalls(steps []fantasy.StepResult, windowSize, maxRepeats int
21 }
22 }
22
23
23 window := steps[len(steps)-windowSize:]
24 window := steps[len(steps)-windowSize:]
24− counts := make(map[uint64]int, windowSize)
25+ counts := make(map[string]int)
25
26
26 for _, step := range window {
27 for _, step := range window {
27 sig := getToolInteractionSignature(step.Content)
28 sig := getToolInteractionSignature(step.Content)
28− if sig == 0 {
29+ if sig == "" {
29 continue
30 continue
30 }
31 }
31 counts[sig]++
32 counts[sig]++
@@ -39,35 +40,34 @@ func hasRepeatedToolCalls(steps []fantasy.StepResult, windowSize, maxRepeats int
39
40
40// getToolInteractionSignature computes a hash signature for the tool
41// getToolInteractionSignature computes a hash signature for the tool
41// interactions in a single step's content. It pairs tool calls with their
42// interactions in a single step's content. It pairs tool calls with their
42−// results (matched by ToolCallID) and returns an FNV-1a hash. FNV is ~10x
43+// results (matched by ToolCallID) and returns a hex-encoded SHA-256 hash.
43−// faster than SHA-256 and collision risk is negligible for loop detection
44−// over a 10-step window. If the step contains no tool calls, it returns 0.
44+// If the step contains no tool calls, it returns "".
45−func getToolInteractionSignature(content fantasy.ResponseContent) uint64 {
45+func getToolInteractionSignature(content fantasy.ResponseContent) string {
46 toolCalls := content.ToolCalls()
46 toolCalls := content.ToolCalls()
47 if len(toolCalls) == 0 {
47 if len(toolCalls) == 0 {
48− return 0
48+ return ""
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, len(toolCalls))
52+ resultsByID := make(map[string]fantasy.ToolResultContent)
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 := fnv.New64a()
57+ h := sha256.New()
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− h.Write([]byte{0})
64+ io.WriteString(h, "\x00")
65− _, _ = io.WriteString(h, tc.Input)
65+ io.WriteString(h, tc.Input)
66− h.Write([]byte{0})
66+ io.WriteString(h, "\x00")
67− _, _ = io.WriteString(h, output)
67+ io.WriteString(h, output)
68− h.Write([]byte{0})
68+ io.WriteString(h, "\x00")
69 }
69 }
70− return h.Sum64()
70+ return hex.EncodeToString(h.Sum(nil))
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 != 0 {
148+ if sig != "" {
149− t.Errorf("expected zero signature, got %d", sig)
149+ t.Errorf("expected empty string, got %q", sig)
150 }
150 }
151 })
151 })
152
152
153− t.Run("text only content returns zero signature", func(t *testing.T) {
153+ t.Run("text only content returns empty string", func(t *testing.T) {
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 != 0 {
158+ if sig != "" {
159− t.Errorf("expected zero signature, got %d", sig)
159+ t.Errorf("expected empty string, got %q", 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 == 0 {
169+ if sig == "" {
170− t.Error("expected non-zero signature")
170+ t.Error("expected non-empty 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 %d and %d", sig1, sig2)
186+ t.Errorf("expected same signature for same interactions, got %q and %q", sig1, sig2)
187 }
187 }
188 })
188 })
189
189
internal/agent/notify/notify.go−40
@@ -12,9 +12,6 @@ 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"
18)
15)
19
16
20// Notification represents a domain event published by the agent.
17// Notification represents a domain event published by the agent.
@@ -23,41 +20,4 @@ type Notification struct {
23 SessionTitle string
20 SessionTitle string
24 Type Type
21 Type Type
25 ProviderID string
22 ProviderID string
26− // RunID, when non-empty, is the caller-supplied correlator
27− // (proto.AgentMessage.RunID) for the run that produced this
28− // notification. It lets observers attribute a TypeAgentError to a
29− // specific request rather than to any in-flight run on the
30− // session. Empty when no caller set one.
31− RunID string
32− // Message carries the error text for TypeAgentError. Other
33− // notification types ignore it.
34− Message string
35−}
36−
37−// RunComplete is the authoritative end-of-run signal for a session.
38−// It is published exactly once per top-level agent run (per
39−// [sessionAgent.Run] invocation that actually executed) after all
40−// message updates for the turn have been flushed via
41−// message.Service.FlushAll. Carries the final assistant text and
42−// message ID so non-interactive clients can reconcile stdout even if
43−// SSE events arrive out of order or are dropped by the broker. Error
44−// is non-empty when the run terminated with an error; Cancelled is
45−// true when the run terminated due to context cancellation. The two
46−// are mutually exclusive in the success case but may overlap when a
47−// cancel triggers a downstream error.
48−//
49−// RunID identifies the specific request that produced this event.
50−// It is the value the caller set on `proto.AgentMessage.RunID` (or
51−// equivalently propagated via agent.WithRunID on the context that
52−// reaches the coordinator); empty when no caller set one. Filtering
53−// by RunID lets a client correlate a SendMessage call with its
54−// terminal event even when the session is busy and other turns are
55−// finishing on the same session.
56−type RunComplete struct {
57− SessionID string
58− RunID string
59− MessageID string
60− Text string
61− Error string
62− Cancelled bool
63}
23}
internal/agent/prompt/prompt.go+26−33
@@ -13,7 +13,6 @@ import (
13 "time"
13 "time"
14
14
15 "github.com/charmbracelet/crush/internal/config"
15 "github.com/charmbracelet/crush/internal/config"
16− "github.com/charmbracelet/crush/internal/filepathext"
17 "github.com/charmbracelet/crush/internal/home"
16 "github.com/charmbracelet/crush/internal/home"
18 "github.com/charmbracelet/crush/internal/shell"
17 "github.com/charmbracelet/crush/internal/shell"
19 "github.com/charmbracelet/crush/internal/skills"
18 "github.com/charmbracelet/crush/internal/skills"
@@ -29,17 +28,16 @@ type Prompt struct {
29}
28}
30
29
31type PromptDat struct {
30type PromptDat struct {
32− Provider string
31+ Provider string
33− Model string
32+ Model string
34− Config config.Config
33+ Config config.Config
35− WorkingDir string
34+ WorkingDir string
36− IsGitRepo bool
35+ IsGitRepo bool
37− Platform string
36+ Platform string
38− Date string
37+ Date string
39− GitStatus string
38+ GitStatus string
40− ContextFiles []ContextFile
39+ ContextFiles []ContextFile
41− GlobalContextFiles []ContextFile
40+ AvailSkillXML string
42− AvailSkillXML string
43}
41}
44
42
45type ContextFile struct {
43type ContextFile struct {
@@ -109,13 +107,16 @@ func processFile(filePath string) *ContextFile {
109
107
110func processContextPath(p string, store *config.ConfigStore) []ContextFile {
108func processContextPath(p string, store *config.ConfigStore) []ContextFile {
111 var contexts []ContextFile
109 var contexts []ContextFile
110+ fullPath := p
111+ if !filepath.IsAbs(p) {
112− fullPath := filepathext.SmartJoin(store.WorkingDir(), p)
112+ fullPath = filepath.Join(store.WorkingDir(), p)
113+ }
113 info, err := os.Stat(fullPath)
114 info, err := os.Stat(fullPath)
114 if err != nil {
115 if err != nil {
115 return contexts
116 return contexts
116 }
117 }
117 if info.IsDir() {
118 if info.IsDir() {
118− _ = filepath.WalkDir(fullPath, func(path string, d os.DirEntry, err error) error {
119+ filepath.WalkDir(fullPath, func(path string, d os.DirEntry, err error) error {
119 if err != nil {
120 if err != nil {
120 return err
121 return err
121 }
122 }
@@ -148,27 +149,22 @@ func expandPath(path string, store *config.ConfigStore) string {
148 return path
149 return path
149}
150}
150
151
151−// loadContextFiles loads and deduplicates context files from a list of paths.
152+func (p *Prompt) promptData(ctx context.Context, provider, model string, store *config.ConfigStore) (PromptDat, error) {
152−func loadContextFiles(paths []string, store *config.ConfigStore) map[string][]ContextFile {
153+ workingDir := cmp.Or(p.workingDir, store.WorkingDir())
154+ platform := cmp.Or(p.platform, runtime.GOOS)
155+
153 files := map[string][]ContextFile{}
156 files := map[string][]ContextFile{}
157+
158+ cfg := store.Config()
154− for _, pth := range paths {
159+ for _, pth := range cfg.Options.ContextPaths {
155 expanded := expandPath(pth, store)
160 expanded := expandPath(pth, store)
156 pathKey := strings.ToLower(expanded)
161 pathKey := strings.ToLower(expanded)
157 if _, ok := files[pathKey]; ok {
162 if _, ok := files[pathKey]; ok {
158 continue
163 continue
159 }
164 }
160− files[pathKey] = processContextPath(expanded, store)
165+ content := processContextPath(expanded, store)
166+ files[pathKey] = content
161 }
167 }
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)
172
168
173 // Discover and load skills metadata.
169 // Discover and load skills metadata.
174 var availSkillXML string
170 var availSkillXML string
@@ -223,11 +219,8 @@ func (p *Prompt) promptData(ctx context.Context, provider, model string, store *
223 }
219 }
224 }
220 }
225
221
226− for _, files := range contextFiles {
222+ for _, contextFiles := range files {
227− data.ContextFiles = append(data.ContextFiles, files...)
223+ data.ContextFiles = append(data.ContextFiles, contextFiles...)
228− }
229− for _, files := range globalContextFiles {
230− data.GlobalContextFiles = append(data.GlobalContextFiles, files...)
231 }
224 }
232 return data, nil
225 return data, nil
233}
226}
internal/agent/queued_runid_test.godeleted−181
@@ -1,181 +0,0 @@
1−package agent
2−
3−import (
4− "context"
5− "errors"
6− "sync/atomic"
7− "testing"
8− "time"
9−
10− "charm.land/catwalk/pkg/catwalk"
11− "charm.land/fantasy"
12− "github.com/charmbracelet/crush/internal/agent/notify"
13− "github.com/charmbracelet/crush/internal/message"
14− "github.com/charmbracelet/crush/internal/pubsub"
15− "github.com/stretchr/testify/require"
16−)
17−
18−// gatedStreamModel streams a single text part followed by a clean finish,
19−// but blocks the very first Stream call until its gate is released. That
20−// lets a test hold a run "active" (past PrepareStep, inside Stream) just
21−// long enough to enqueue a follow-up prompt behind the busy session.
22−// Subsequent Stream calls (e.g. the recursive run draining the queue)
23−// proceed immediately.
24−type gatedStreamModel struct {
25− text string
26− gate chan struct{}
27− entered chan struct{}
28− calls atomic.Int64
29−}
30−
31−func (m *gatedStreamModel) Provider() string { return "fake" }
32−func (m *gatedStreamModel) Model() string { return "fake-model" }
33−
34−func (m *gatedStreamModel) Generate(ctx context.Context, call fantasy.Call) (*fantasy.Response, error) {
35− return &fantasy.Response{
36− Content: fantasy.ResponseContent{fantasy.TextContent{Text: m.text}},
37− FinishReason: fantasy.FinishReasonStop,
38− }, nil
39−}
40−
41−func (m *gatedStreamModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.StreamResponse, error) {
42− if m.calls.Add(1) == 1 {
43− close(m.entered)
44− select {
45− case <-m.gate:
46− case <-ctx.Done():
47− }
48− }
49− text := m.text
50− return func(yield func(fantasy.StreamPart) bool) {
51− if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeTextStart, ID: "1"}) {
52− return
53− }
54− if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeTextDelta, ID: "1", Delta: text}) {
55− return
56− }
57− if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeTextEnd, ID: "1"}) {
58− return
59− }
60− yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeFinish, FinishReason: fantasy.FinishReasonStop})
61− }, nil
62−}
63−
64−func (m *gatedStreamModel) GenerateObject(ctx context.Context, call fantasy.ObjectCall) (*fantasy.ObjectResponse, error) {
65− return nil, errors.New("not implemented")
66−}
67−
68−func (m *gatedStreamModel) StreamObject(ctx context.Context, call fantasy.ObjectCall) (fantasy.ObjectStreamResponse, error) {
69− return nil, errors.New("not implemented")
70−}
71−
72−// TestRun_QueuedRunIDPromptRunsRecursivelyAndPublishesRunComplete is the
73−// end-to-end proof of fix 2: a prompt carrying a RunID that is queued
74−// behind a busy session must NOT be silently folded into the active turn.
75−// It runs as its own turn via the recursive run path and publishes its
76−// own terminal RunComplete, so a `crush run` caller blocking on that
77−// RunID does not hang. The active turn keeps its own RunComplete too.
78−func TestRun_QueuedRunIDPromptRunsRecursivelyAndPublishesRunComplete(t *testing.T) {
79− t.Parallel()
80−
81− env := testEnv(t)
82− broker := pubsub.NewBroker[notify.RunComplete]()
83− t.Cleanup(broker.Shutdown)
84−
85− large := &gatedStreamModel{
86− text: "done",
87− gate: make(chan struct{}),
88− entered: make(chan struct{}),
89− }
90− small := &finishStreamModel{text: "title"}
91−
92− sa := NewSessionAgent(SessionAgentOptions{
93− LargeModel: Model{Model: large, CatwalkCfg: catwalk.Model{ContextWindow: 200000, DefaultMaxTokens: 10000}},
94− SmallModel: Model{Model: small, CatwalkCfg: catwalk.Model{ContextWindow: 200000, DefaultMaxTokens: 10000}},
95− IsYolo: true,
96− Sessions: env.sessions,
97− Messages: env.messages,
98− RunComplete: broker,
99− }).(*sessionAgent)
100−
101− sess, err := env.sessions.Create(t.Context(), "session")
102− require.NoError(t, err)
103−
104− subCtx, subCancel := context.WithCancel(t.Context())
105− defer subCancel()
106− ch := broker.Subscribe(subCtx)
107−
108− // Start the main turn; it blocks inside Stream once active.
109− mainDone := make(chan error, 1)
110− go func() {
111− _, runErr := sa.Run(t.Context(), SessionAgentCall{
112− SessionID: sess.ID,
113− RunID: "run-main",
114− Prompt: "main",
115− })
116− mainDone <- runErr
117− }()
118−
119− // Wait until the main turn is active (inside Stream).
120− select {
121− case <-large.entered:
122− case <-time.After(5 * time.Second):
123− t.Fatal("main run never entered Stream")
124− }
125− require.True(t, sa.IsSessionBusy(sess.ID), "main run must be active before enqueueing the follow-up")
126−
127− // Enqueue a RunID-bearing follow-up behind the busy session.
128− res, err := sa.Run(t.Context(), SessionAgentCall{
129− SessionID: sess.ID,
130− RunID: "run-follow",
131− Prompt: "follow",
132− })
133− require.NoError(t, err)
134− require.Nil(t, res, "a busy-session follow-up must enqueue and return (nil, nil)")
135− require.Equal(t, 1, sa.QueuedPrompts(sess.ID), "the follow-up must be queued, not folded")
136−
137− // Release the main turn so it completes and hands off to the queue.
138− close(large.gate)
139− require.NoError(t, <-mainDone)
140−
141− // Both turns must publish their own terminal RunComplete.
142− got := map[string]notify.RunComplete{}
143− deadline := time.After(5 * time.Second)
144− for len(got) < 2 {
145− select {
146− case ev := <-ch:
147− got[ev.Payload.RunID] = ev.Payload
148− case <-deadline:
149− t.Fatalf("timed out waiting for both RunCompletes; got %v", got)
150− }
151− }
152−
153− main, ok := got["run-main"]
154− require.True(t, ok, "the active turn must publish its own RunComplete")
155− require.Empty(t, main.Error)
156− require.False(t, main.Cancelled)
157−
158− follow, ok := got["run-follow"]
159− require.True(t, ok,
160− "the queued RunID prompt must publish its own RunComplete instead of being folded silently")
161− require.Empty(t, follow.Error)
162− require.False(t, follow.Cancelled)
163− require.Equal(t, "done", follow.Text, "the queued prompt ran as its own turn")
164−
165− // Two distinct assistant turns prove the follow-up was not folded.
166− msgs, err := env.messages.List(t.Context(), sess.ID)
167− require.NoError(t, err)
168− var assistants, follows int
169− for _, m := range msgs {
170− switch m.Role {
171− case message.Assistant:
172− assistants++
173− case message.User:
174− if m.Content().String() == "follow" {
175− follows++
176− }
177− }
178− }
179− require.Equal(t, 2, assistants, "the active turn and the recursive turn each produce one assistant message")
180− require.Equal(t, 1, follows, "the follow-up prompt is its own user turn")
181−}
internal/agent/run_complete_test.godeleted−322
@@ -1,322 +0,0 @@
1−package agent
2−
3−import (
4− "context"
5− "testing"
6− "time"
7−
8− "github.com/charmbracelet/crush/internal/agent/notify"
9− "github.com/charmbracelet/crush/internal/pubsub"
10− "github.com/stretchr/testify/require"
11−)
12−
13−// TestSessionAgentRun_QueueStripsOnComplete verifies that when a Run
14−// call is enqueued (because the session is already busy), the
15−// OnComplete hook is NOT propagated onto the queued copy. The hook
16−// belongs to the caller's retry/coalesce scope (typically
17−// coordinator.Run) which has already returned by the time the queue
18−// drains; carrying it forward would silently funnel the terminal
19−// event into a closure nobody reads, and subscribers (`crush run`)
20−// would hang waiting for a RunComplete that never publishes.
21−func TestSessionAgentRun_QueueStripsOnComplete(t *testing.T) {
22− t.Parallel()
23−
24− env := testEnv(t)
25− a := NewSessionAgent(SessionAgentOptions{
26− Sessions: env.sessions,
27− Messages: env.messages,
28− }).(*sessionAgent)
29−
30− const sessionID = "queued-session"
31− // Mark the session as busy so Run takes the queue branch
32− // without needing a real model.
33− a.activeRequests.Set(sessionID, func() {})
34−
35− var called bool
36− hook := func(notify.RunComplete) { called = true }
37−
38− res, err := a.Run(t.Context(), SessionAgentCall{
39− SessionID: sessionID,
40− RunID: "run-xyz",
41− Prompt: "queued prompt",
42− OnComplete: hook,
43− })
44− require.NoError(t, err)
45− require.Nil(t, res, "queued Run must return (nil, nil)")
46− require.False(t, called,
47− "OnComplete must not fire on the enqueue path; the caller's scope is still live")
48−
49− queued, ok := a.messageQueue.Get(sessionID)
50− require.True(t, ok)
51− require.Len(t, queued, 1)
52− require.Nil(t, queued[0].OnComplete,
53− "queued SessionAgentCall must have OnComplete stripped so the drain falls back to the default broker publish")
54− require.Equal(t, "queued prompt", queued[0].Prompt,
55− "all other fields must be preserved on the queued copy")
56− require.Equal(t, "run-xyz", queued[0].RunID,
57− "RunID must be preserved on the queued copy so the drained turn's "+
58− "RunComplete still correlates with the originating SendMessage")
59−}
60−
61−// TestDrainQueueForStep_FiltersUnderDispatchLock verifies that the queue
62−// drain evaluates the per-session cancel mark while holding the dispatch
63−// mutex (canceledBySeq's documented precondition). Queued calls at or
64−// below the cancel high-water mark are dropped, calls queued after the
65−// cancel (higher seq) are folded, untracked enqueues (seq == 0) are
66−// dropped whenever any mark is present, and the queue is cleared. These
67−// calls carry no RunID, so all foldable survivors are returned for
68−// folding (the existing follow-up behavior).
69−func TestDrainQueueForStep_FiltersUnderDispatchLock(t *testing.T) {
70− t.Parallel()
71−
72− env := testEnv(t)
73− a := NewSessionAgent(SessionAgentOptions{
74− Sessions: env.sessions,
75− Messages: env.messages,
76− }).(*sessionAgent)
77−
78− const sessionID = "drain-session"
79− a.messageQueue.Set(sessionID, []SessionAgentCall{
80− {SessionID: sessionID, Prompt: "below", acceptSeq: 1},
81− {SessionID: sessionID, Prompt: "at-mark", acceptSeq: 2},
82− {SessionID: sessionID, Prompt: "after", acceptSeq: 3},
83− {SessionID: sessionID, Prompt: "untracked", acceptSeq: 0},
84− })
85− // Cancel high-water mark at seq 2: seq <= 2 and seq == 0 are covered.
86− a.cancelMark.Set(sessionID, 2)
87−
88− fold, canceledWithRunID := a.drainQueueForStep(sessionID)
89−
90− require.Len(t, fold, 1,
91− "only the follow-up queued after the cancel (seq > mark) must be folded")
92− require.Equal(t, "after", fold[0].Prompt)
93− require.Empty(t, canceledWithRunID,
94− "no dropped call carried a RunID, so none need a terminal RunComplete")
95−
96− _, ok := a.messageQueue.Get(sessionID)
97− require.False(t, ok, "drain must clear the session message queue when nothing is kept")
98−}
99−
100−// TestDrainQueueForStep_NoMarkFoldsAllNonRunID verifies that with no
101−// cancel mark recorded, every queued call without a RunID is folded.
102−func TestDrainQueueForStep_NoMarkFoldsAllNonRunID(t *testing.T) {
103− t.Parallel()
104−
105− env := testEnv(t)
106− a := NewSessionAgent(SessionAgentOptions{
107− Sessions: env.sessions,
108− Messages: env.messages,
109− }).(*sessionAgent)
110−
111− const sessionID = "drain-nomark"
112− a.messageQueue.Set(sessionID, []SessionAgentCall{
113− {SessionID: sessionID, Prompt: "a", acceptSeq: 0},
114− {SessionID: sessionID, Prompt: "b", acceptSeq: 5},
115− })
116−
117− fold, canceledWithRunID := a.drainQueueForStep(sessionID)
118− require.Len(t, fold, 2, "no cancel mark means all non-RunID queued calls are folded")
119− require.Empty(t, canceledWithRunID)
120−}
121−
122−// TestDrainQueueForStep_KeepsRunIDPromptsQueued is the core of fix 2: a
123−// queued prompt that carries a RunID must NOT be folded into the active
124−// turn. Folding it would silently absorb it into another turn and never
125−// publish a RunComplete for its RunID, hanging a `crush run` caller that
126−// blocks on that event. Such prompts are left in the queue so the
127−// recursive run path gives each its own turn and its own RunComplete.
128−// Non-RunID prompts are still folded.
129−func TestDrainQueueForStep_KeepsRunIDPromptsQueued(t *testing.T) {
130− t.Parallel()
131−
132− env := testEnv(t)
133− a := NewSessionAgent(SessionAgentOptions{
134− Sessions: env.sessions,
135− Messages: env.messages,
136− }).(*sessionAgent)
137−
138− const sessionID = "drain-runid"
139− a.messageQueue.Set(sessionID, []SessionAgentCall{
140− {SessionID: sessionID, Prompt: "fold-me", acceptSeq: 1},
141− {SessionID: sessionID, RunID: "run-a", Prompt: "keep-me", acceptSeq: 2},
142− {SessionID: sessionID, RunID: "run-b", Prompt: "keep-me-too", acceptSeq: 3},
143− })
144−
145− fold, canceledWithRunID := a.drainQueueForStep(sessionID)
146−
147− require.Len(t, fold, 1, "only the non-RunID prompt is folded into the active turn")
148− require.Equal(t, "fold-me", fold[0].Prompt)
149− require.Empty(t, canceledWithRunID)
150−
151− kept, ok := a.messageQueue.Get(sessionID)
152− require.True(t, ok, "RunID-bearing prompts must remain queued for the recursive run path")
153− require.Len(t, kept, 2)
154− require.Equal(t, "run-a", kept[0].RunID)
155− require.Equal(t, "run-b", kept[1].RunID)
156−}
157−
158−// TestDrainQueueForStep_ReportsCanceledRunIDDrops verifies that a queued
159−// prompt carrying a RunID that is dropped because a cancel covers it is
160−// reported in canceledWithRunID so the caller can publish its terminal
161−// cancelled RunComplete. A canceled prompt without a RunID is dropped
162−// silently as before.
163−func TestDrainQueueForStep_ReportsCanceledRunIDDrops(t *testing.T) {
164− t.Parallel()
165−
166− env := testEnv(t)
167− a := NewSessionAgent(SessionAgentOptions{
168− Sessions: env.sessions,
169− Messages: env.messages,
170− }).(*sessionAgent)
171−
172− const sessionID = "drain-cancel-runid"
173− a.messageQueue.Set(sessionID, []SessionAgentCall{
174− {SessionID: sessionID, RunID: "run-canceled", Prompt: "canceled", acceptSeq: 1},
175− {SessionID: sessionID, Prompt: "canceled-no-runid", acceptSeq: 1},
176− {SessionID: sessionID, RunID: "run-survives", Prompt: "survives", acceptSeq: 5},
177− })
178− a.cancelMark.Set(sessionID, 2)
179−
180− fold, canceledWithRunID := a.drainQueueForStep(sessionID)
181−
182− require.Empty(t, fold, "no uncanceled non-RunID prompts to fold")
183− require.Len(t, canceledWithRunID, 1,
184− "only the dropped RunID-bearing prompt needs a terminal RunComplete")
185− require.Equal(t, "run-canceled", canceledWithRunID[0].RunID)
186−
187− kept, ok := a.messageQueue.Get(sessionID)
188− require.True(t, ok)
189− require.Len(t, kept, 1, "the uncanceled RunID prompt stays queued")
190− require.Equal(t, "run-survives", kept[0].RunID)
191−}
192−
193−// TestRunCompletePublisher_MustDeliverOverTakesPublish exercises the
194−// pubsub.Publisher interface change end-to-end: a Broker is the only
195−// concrete Publisher implementation and must satisfy both Publish and
196−// PublishMustDeliver. The coordinator's final RunComplete emit relies
197−// on PublishMustDeliver to apply bounded-blocking semantics so a
198−// momentarily-full subscriber buffer can't silently drop the
199−// authoritative end-of-run event.
200−func TestRunCompletePublisher_MustDeliverOverTakesPublish(t *testing.T) {
201− t.Parallel()
202−
203− broker := pubsub.NewBroker[notify.RunComplete]()
204− t.Cleanup(broker.Shutdown)
205−
206− // Subscribe before publishing so the event is delivered.
207− ctx, cancel := context.WithCancel(t.Context())
208− defer cancel()
209− ch := broker.Subscribe(ctx)
210−
211− rc := notify.RunComplete{SessionID: "S", MessageID: "m", Text: "ok"}
212− var pub pubsub.Publisher[notify.RunComplete] = broker
213− pub.PublishMustDeliver(t.Context(), pubsub.UpdatedEvent, rc)
214−
215− select {
216− case got := <-ch:
217− require.Equal(t, rc, got.Payload)
218− case <-time.After(time.Second):
219− t.Fatal("PublishMustDeliver did not deliver event")
220− }
221−}
222−
223−// requireSingleCancelledRunComplete reads exactly one RunComplete from ch,
224−// asserts it is the cancelled terminal event for runID, and verifies no
225−// second event arrives. This observes the published pubsub event rather
226−// than internal bookkeeping, which is the contract a `crush run` caller
227−// blocking on the broker actually relies on.
228−func requireSingleCancelledRunComplete(t *testing.T, ch <-chan pubsub.Event[notify.RunComplete], sessionID, runID string) {
229− t.Helper()
230− select {
231− case ev := <-ch:
232− require.Equal(t, runID, ev.Payload.RunID,
233− "the published RunComplete must carry the dropped queued prompt's RunID")
234− require.Equal(t, sessionID, ev.Payload.SessionID)
235− require.True(t, ev.Payload.Cancelled,
236− "a dropped queued prompt must publish a cancelled RunComplete")
237− case <-time.After(5 * time.Second):
238− t.Fatal("timed out waiting for the cancelled RunComplete")
239− }
240− select {
241− case extra := <-ch:
242− t.Fatalf("expected exactly one RunComplete, got a second: %+v", extra.Payload)
243− case <-time.After(100 * time.Millisecond):
244− }
245−}
246−
247−// TestCancel_QueuedRunIDPromptPublishesCancelledRunComplete proves the
248−// terminal-event behavior end-to-end: a RunID-bearing prompt sitting in
249−// the queue that is canceled while queued (via the public Cancel path,
250−// which routes through clearQueueAndNotify -> publishCanceledQueueDrops)
251−// must emit exactly one cancelled RunComplete on the broker for its
252−// RunID. A queued prompt without a RunID is dropped silently. This is the
253−// coverage the earlier drain test lacked: it asserted the returned
254−// bookkeeping slice, not the published event a `crush run` caller awaits.
255−func TestCancel_QueuedRunIDPromptPublishesCancelledRunComplete(t *testing.T) {
256− t.Parallel()
257−
258− env := testEnv(t)
259− broker := pubsub.NewBroker[notify.RunComplete]()
260− t.Cleanup(broker.Shutdown)
261−
262− a := NewSessionAgent(SessionAgentOptions{
263− Sessions: env.sessions,
264− Messages: env.messages,
265− RunComplete: broker,
266− }).(*sessionAgent)
267−
268− subCtx, subCancel := context.WithCancel(t.Context())
269− defer subCancel()
270− ch := broker.Subscribe(subCtx)
271−
272− const sessionID = "cancel-queued-runid"
273− a.messageQueue.Set(sessionID, []SessionAgentCall{
274− {SessionID: sessionID, Prompt: "no-runid", acceptSeq: 1},
275− {SessionID: sessionID, RunID: "run-queued", Prompt: "queued", acceptSeq: 2},
276− })
277−
278− a.Cancel(sessionID)
279−
280− requireSingleCancelledRunComplete(t, ch, sessionID, "run-queued")
281−
282− _, ok := a.messageQueue.Get(sessionID)
283− require.False(t, ok, "Cancel must clear the queue")
284−}
285−
286−// TestDrainQueueForStep_DroppedRunIDPublishesCancelledRunComplete drives
287−// the production drain sequence (drainQueueForStep then
288−// publishCanceledQueueDrops, mirroring the PrepareStep handoff) and
289−// asserts the dropped RunID-bearing prompt actually publishes exactly one
290−// cancelled RunComplete on the broker. The companion bookkeeping test
291−// covers the returned slice; this one covers the observable terminal
292−// event.
293−func TestDrainQueueForStep_DroppedRunIDPublishesCancelledRunComplete(t *testing.T) {
294− t.Parallel()
295−
296− env := testEnv(t)
297− broker := pubsub.NewBroker[notify.RunComplete]()
298− t.Cleanup(broker.Shutdown)
299−
300− a := NewSessionAgent(SessionAgentOptions{
301− Sessions: env.sessions,
302− Messages: env.messages,
303− RunComplete: broker,
304− }).(*sessionAgent)
305−
306− subCtx, subCancel := context.WithCancel(t.Context())
307− defer subCancel()
308− ch := broker.Subscribe(subCtx)
309−
310− const sessionID = "drain-drop-runid"
311− a.messageQueue.Set(sessionID, []SessionAgentCall{
312− {SessionID: sessionID, RunID: "run-dropped", Prompt: "dropped", acceptSeq: 1},
313− {SessionID: sessionID, Prompt: "dropped-no-runid", acceptSeq: 1},
314− })
315− a.cancelMark.Set(sessionID, 2)
316−
317− _, canceledWithRunID := a.drainQueueForStep(sessionID)
318− require.Len(t, canceledWithRunID, 1)
319− a.publishCanceledQueueDrops(canceledWithRunID)
320−
321− requireSingleCancelledRunComplete(t, ch, sessionID, "run-dropped")
322−}
internal/agent/run_marker.godeleted−52
@@ -1,52 +0,0 @@
1−package agent
2−
3−import (
4− "context"
5− "sync/atomic"
6−)
7−
8−// runCompleteMarkerKey is the unexported context key carrying a
9−// [runCompleteMarker] from the dispatch boundary (backend.runAgent)
10−// down into the coordinator. It lets the dispatcher learn whether the
11−// coordinator already published the authoritative terminal
12−// notify.RunComplete for the run, so a fallback terminal event is only
13−// emitted when one is actually missing (e.g. an error returned before
14−// sessionAgent.Run ever executed). It avoids a breaking change to the
15−// Coordinator interface.
16−type runCompleteMarkerKey struct{}
17−
18−// runCompleteMarker records whether a terminal RunComplete has been
19−// published for a run. It is shared by pointer through the context so
20−// a publish deep in the call stack is observable by the dispatcher
21−// after the call returns.
22−type runCompleteMarker struct {
23− published atomic.Bool
24−}
25−
26−// WithRunCompleteMarker returns ctx carrying a fresh marker the
27−// coordinator can flag via [MarkRunCompletePublished] once it emits the
28−// run's terminal RunComplete. Callers read the result with
29−// [RunCompletePublished]. Attaching the marker is optional: code paths
30−// without one simply skip the dedup signal.
31−func WithRunCompleteMarker(ctx context.Context) context.Context {
32− return context.WithValue(ctx, runCompleteMarkerKey{}, &runCompleteMarker{})
33−}
34−
35−// MarkRunCompletePublished records that the authoritative terminal
36−// RunComplete has been published for the run carried by ctx. It is a
37−// no-op when no marker is present (e.g. the in-process/local Run path,
38−// which is not dispatched through backend.runAgent).
39−func MarkRunCompletePublished(ctx context.Context) {
40− if m, ok := ctx.Value(runCompleteMarkerKey{}).(*runCompleteMarker); ok {
41− m.published.Store(true)
42− }
43−}
44−
45−// RunCompletePublished reports whether [MarkRunCompletePublished] was
46−// called on ctx's marker. It returns false when no marker is present.
47−func RunCompletePublished(ctx context.Context) bool {
48− if m, ok := ctx.Value(runCompleteMarkerKey{}).(*runCompleteMarker); ok {
49− return m.published.Load()
50− }
51− return false
52−}
internal/agent/runid.godeleted−33
@@ -1,33 +0,0 @@
1−package agent
2−
3−import "context"
4−
5−// runIDContextKey is the unexported context key used to carry a
6−// caller-supplied RunID from the workspace HTTP boundary
7−// (backend.SendMessage) down into coordinator.Run without forcing a
8−// breaking change to the Coordinator.Run signature. The value is
9−// then copied onto SessionAgentCall.RunID by the coordinator so the
10−// agent's terminal RunComplete event can echo it back to the
11−// originating caller.
12−type runIDContextKey struct{}
13−
14−// WithRunID returns ctx tagged with a per-request RunID. It is the
15−// boundary helper for callers that need their SendMessage→Run
16−// terminal event to be uniquely correlatable (e.g. `crush run`
17−// against a session that may be busy). Empty runIDs are stored
18−// as-is; downstream code treats an empty RunID as "caller did not
19−// supply one" and falls back to SessionID-only correlation.
20−func WithRunID(ctx context.Context, runID string) context.Context {
21− return context.WithValue(ctx, runIDContextKey{}, runID)
22−}
23−
24−// RunIDFromContext returns the RunID set by [WithRunID], or "" if
25−// none was set or the value is not a string. Exported because the
26−// coordinator and tests in other packages need to read it; safe to
27−// call on any context.
28−func RunIDFromContext(ctx context.Context) string {
29− if v, ok := ctx.Value(runIDContextKey{}).(string); ok {
30− return v
31− }
32− return ""
33−}
internal/agent/templates/agent_tool.md+14
@@ -1 +1,15 @@
1Launch a new agent that has access to the following tools: glob, grep, ls, view. When you are searching for a keyword or file and are not confident that you will find the right match on the first try, use the agent tool to perform the search for you.
1Launch a new agent that has access to the following tools: glob, grep, ls, view. When you are searching for a keyword or file and are not confident that you will find the right match on the first try, use the agent tool to perform the search for you.
2+
3+<usage>
4+- If you are searching for a keyword like "config" or "logger", or for questions like "which file does X?", the Agent tool is strongly recommended
5+- If you want to read a specific file path, use the View or GlobTool tool instead of the Agent tool, to find the match more quickly
6+- If you are searching for a specific class definition like "class Foo", use the GlobTool tool instead, to find the match more quickly
7+</usage>
8+
9+<usage_notes>
10+1. Launch multiple agents concurrently whenever possible, to maximize performance; to do that, use a single message with multiple tool uses
11+2. When the agent is done, it will return a single message back to you. The result returned by the agent is not visible to the user. To show the user the result, you should send a text message back to the user with a concise summary of the result.
12+3. Each agent invocation is stateless. You will not be able to send additional messages to the agent, nor will the agent be able to communicate with you outside of its final report. Therefore, your prompt should contain a highly detailed task description for the agent to perform autonomously and you should specify exactly what information the agent should return back to you in its final and only message to you.
13+4. The agent's outputs should generally be trusted
14+5. IMPORTANT: The agent can not use Bash, Replace, Edit, so can not modify files. If you want to use these tools, use them directly instead of going through the agent.
15+</usage_notes>
internal/agent/templates/agentic_fetch.md+63
@@ -1 +1,64 @@
1Fetch a URL or search the web using an AI sub-agent that can extract, summarize, and answer questions. Slower and costlier than fetch; use fetch for raw content or API responses.
1Fetch a URL or search the web using an AI sub-agent that can extract, summarize, and answer questions. Slower and costlier than fetch; use fetch for raw content or API responses.
2+
3+<when_to_use>
4+Use this tool when you need to:
5+- Search the web for information (omit the url parameter)
6+- Extract specific information from a webpage (provide a url)
7+- Answer questions about web content
8+- Summarize or analyze web pages
9+- Research topics by searching and following links
10+
11+DO NOT use this tool when:
12+- You just need raw content without analysis (use fetch instead - faster and cheaper)
13+- You want direct access to API responses or JSON (use fetch instead)
14+- You don't need the content processed or interpreted (use fetch instead)
15+</when_to_use>
16+
17+<usage>
18+- Provide a prompt describing what information you want to find or extract (required)
19+- Optionally provide a URL to fetch and analyze specific content
20+- If no URL is provided, the agent will search the web to find relevant information
21+- The tool spawns a sub-agent with web_search, web_fetch, and analysis tools
22+- Returns the agent's response about the content
23+</usage>
24+
25+<parameters>
26+- prompt: What information you want to find or extract (required)
27+- url: The URL to fetch content from (optional - if not provided, agent will search the web)
28+</parameters>
29+
30+<usage_notes>
31+- IMPORTANT: If an MCP-provided web fetch tool is available, prefer using that tool instead of this one, as it may have fewer restrictions. All MCP-provided tools start with "mcp_".
32+- When using URL mode: The URL must be a fully-formed valid URL. HTTP URLs will be automatically upgraded to HTTPS.
33+- When searching: Just provide the prompt describing what you want to find - the agent will search and fetch relevant pages.
34+- The sub-agent can perform multiple searches and fetch multiple pages to gather comprehensive information.
35+- This tool is read-only and does not modify any files.
36+- Results will be summarized if the content is very large.
37+- This tool uses AI processing and costs more tokens than the simple fetch tool.
38+</usage_notes>
39+
40+<limitations>
41+- Max response size: 5MB per page
42+- Only supports HTTP and HTTPS protocols
43+- Cannot handle authentication or cookies
44+- Some websites may block automated requests
45+- Uses additional tokens for AI processing
46+- Search results depend on DuckDuckGo availability
47+</limitations>
48+
49+<tips>
50+- Be specific in your prompt about what information you want
51+- For research tasks, omit the URL and let the agent search and follow relevant links
52+- For complex pages, ask the agent to focus on specific sections
53+- The agent has access to web_search, web_fetch, grep, and view tools
54+- If you just need raw content, use the fetch tool instead to save tokens
55+</tips>
56+
57+<examples>
58+Search for information:
59+- prompt: "What are the main new features in the latest Python release?"
60+
61+Fetch and analyze a URL:
62+- url: "https://docs.python.org/3/whatsnew/3.12.html"
63+- prompt: "Summarize the key changes in Python 3.12"
64+</examples>
internal/agent/templates/coder.md.tpl+5−20
@@ -3,7 +3,7 @@ You are Crush, a powerful AI Assistant that runs in the CLI.
3<critical_rules>
3<critical_rules>
4These rules override everything else. Follow them strictly:
4These rules override everything else. Follow them strictly:
5
5
6−1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.
6+1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.
72. **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.
72. **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.
83. **TEST AFTER CHANGES**: Run tests immediately after each modification.
83. **TEST AFTER CHANGES**: Run tests immediately after each modification.
94. **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.
94. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.
@@ -17,7 +17,6 @@ These rules override everything else. Follow them strictly:
1712. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.
1712. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.
1813. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.
1813. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.
1914. **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.
1914. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.
20−15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.
21</critical_rules>
20</critical_rules>
22
21
23<communication_style>
22<communication_style>
@@ -141,10 +140,10 @@ Examples of autonomous decisions:
141
140
142Never use `apply_patch` or similar - those tools don't exist.
141Never use `apply_patch` or similar - those tools don't exist.
143
142
144−Critical: ALWAYS read the relevant context of files before editing them in this conversation.
143+Critical: ALWAYS read files before editing them in this conversation.
145
144
146When using edit tools:
145When using edit tools:
147−1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)
146+1. Read the file first - note the EXACT indentation (spaces vs tabs, count)
1482. Copy the exact text including ALL whitespace, newlines, and indentation
1472. Copy the exact text including ALL whitespace, newlines, and indentation
1493. Include 3-5 lines of context before and after the target
1483. Include 3-5 lines of context before and after the target
1504. Verify your old_string would appear exactly once in the file
1494. Verify your old_string would appear exactly once in the file
@@ -396,25 +395,11 @@ If a skill mentions scripts, references, or assets, they live in the same folder
396{{end}}
395{{end}}
397
396
398{{if .ContextFiles}}
397{{if .ContextFiles}}
399−# Project-Specific Context
398+<memory>
400−Make sure to follow the instructions in the context below.
401−<project_context>
402{{range .ContextFiles}}
399{{range .ContextFiles}}
403<file path="{{.Path}}">
400<file path="{{.Path}}">
404{{.Content}}
401{{.Content}}
405</file>
402</file>
406{{end}}
403{{end}}
407−</project_context>
404+</memory>
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>
420{{end}}
405{{end}}
internal/agent/testdata/TestCoderAgent/glm-5.1/bash_tool.yaml+1925−171
@@ -25,221 +25,1977 @@ interactions:
25 content_length: -1
25 content_length: -1
26 uncompressed: true
26 uncompressed: true
27 body: |+
27 body: |+
28− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29
29
30− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
31
31
32− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
33
33
34− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
35
35
36− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" generate"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
37
37
38− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
39
39
40− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
41
41
42− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
43
43
44− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" based"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
45
45
46− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" on"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
47
47
48− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
49
49
50− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user's"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
51
51
52− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
53
53
54− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" message"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
55
55
56− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
57
57
58− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" The"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
59
59
60− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
61
61
62− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wrote"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ..."},"finish_reason":null}]}
63
63
64− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
65
65
66− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" English"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
67
67
68− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
69
69
70− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
71
71
72− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" must"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
73
73
74− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
75
75
76− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
77
77
78− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
79
79
80− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
81
81
82− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
83
83
84− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
85
85
86− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
87
87
88− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
89
89
90− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"col"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
91
91
92− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
93
93
94− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
95
95
96− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" named"},"finish_reason":null}]}
97
97
98− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
99
99
100− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
101
101
102− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
103
103
104− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" more"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
105
105
106− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" than"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
107
107
108− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"hello"},"finish_reason":null}]}
109
109
110− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" sentence"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
111
111
112− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'."},"finish_reason":null}]}
113
113
114− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" do"},"finish_reason":null}]}
115
115
116− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" not"},"finish_reason":null}]}
117
117
118− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
119
119
120− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" its"},"finish_reason":null}]}
121
121
122− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
123
123
124− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"bash"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
125
125
126− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
127
127
128− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
129
129
130− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ≤"},"finish_reason":null}]}
131
131
132− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
133
133
134− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
135
135
136− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
137
137
138− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" without"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
139
139
140− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
141
141
142− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
143
143
144− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
145
145
146− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" craft"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
147
147
148− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
149
149
150− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
151
151
152− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
153
153
154− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Bash"},"finish_reason":null}]}
155
155
156− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" command"},"finish_reason":null}]}
157
157
158− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
159
159
160− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
161
161
162− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
163
163
164− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
165
165
166− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Bash"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
167
167
168− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
169
169
170− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
171
171
172− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" suppress"},"finish_reason":null}]}
173
173
174− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
175
175
176− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
177
177
178− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
179
179
180− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" within"},"finish_reason":null}]}
181
181
182− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
183
183
184− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
185
185
186− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
187
187
188− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
189
189
190− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
191
191
192− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
193
193
194− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
195
195
196− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"B"},"finish_reason":null}]}
197
197
198− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ash"},"finish_reason":null}]}
199
199
200− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Bash"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" command"},"finish_reason":null}]}
201
201
202− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
203
203
204− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
205
205
206− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
207
207
208− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
209
209
210− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
211
211
212− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
213
213
214− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
215
215
216− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" suppress"},"finish_reason":null}]}
217
217
218− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
219
219
220− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
221
221
222− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
223
223
224− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Create"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
225
225
226− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" test"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
227
227
228− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
229
229
230− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Bash"},"finish_reason":null}]}
231
231
232− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" hello"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
233
233
234− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" bash"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
235
235
236− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" using"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")+"},"finish_reason":null}]}
237
237
238− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Bash"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
239
239
240− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
240+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
241
241
242− data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":224,"completion_tokens":115,"total_tokens":339,"completion_tokens_details":{"reasoning_tokens":98},"cost":{"usd":0.00015733800000000003,"hypercredits":0.0031467600000000006},"remaining":{"hypercredits":0}}}
242+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"command"},"finish_reason":null}]}
243+
244+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
245+
246+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
247+
248+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
249+
250+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"..."},"finish_reason":null}]}
251+
252+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
253+
254+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
255+
256+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
257+
258+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
259+
260+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"B"},"finish_reason":null}]}
261+
262+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ash"},"finish_reason":null}]}
263+
264+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" command"},"finish_reason":null}]}
265+
266+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
267+
268+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
269+
270+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
271+
272+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
273+
274+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
275+
276+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
277+
278+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
279+
280+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" suppress"},"finish_reason":null}]}
281+
282+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
283+
284+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
285+
286+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Characters"},"finish_reason":null}]}
287+
288+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
289+
290+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" B"},"finish_reason":null}]}
291+
292+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
293+
294+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
295+
296+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
297+
298+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
299+
300+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
301+
302+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
303+
304+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
305+
306+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
307+
308+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
309+
310+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
311+
312+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
313+
314+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
315+
316+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
317+
318+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
319+
320+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
321+
322+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
323+
324+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
325+
326+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
327+
328+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
329+
330+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
331+
332+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
333+
334+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
335+
336+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
337+
338+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
339+
340+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
341+
342+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
343+
344+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
345+
346+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
347+
348+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
349+
350+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
351+
352+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
353+
354+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
355+
356+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
357+
358+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
359+
360+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
361+
362+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
363+
364+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
365+
366+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
367+
368+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
369+
370+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
371+
372+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
373+
374+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
375+
376+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
377+
378+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
379+
380+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
381+
382+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
383+
384+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
385+
386+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
387+
388+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
389+
390+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
391+
392+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
393+
394+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
395+
396+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
397+
398+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
399+
400+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
401+
402+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
403+
404+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
405+
406+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
407+
408+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
409+
410+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" x"},"finish_reason":null}]}
411+
412+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
413+
414+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
415+
416+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
417+
418+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
419+
420+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
421+
422+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" w"},"finish_reason":null}]}
423+
424+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
425+
426+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
427+
428+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
429+
430+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
431+
432+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
433+
434+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
435+
436+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
437+
438+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
439+
440+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
441+
442+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
443+
444+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
445+
446+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
447+
448+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
449+
450+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
451+
452+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
453+
454+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
455+
456+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
457+
458+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
459+
460+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
461+
462+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
463+
464+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
465+
466+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
467+
468+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
469+
470+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
471+
472+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
473+
474+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
475+
476+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
477+
478+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
479+
480+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
481+
482+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
483+
484+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
485+
486+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
487+
488+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
489+
490+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
491+
492+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
493+
494+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
495+
496+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"51"},"finish_reason":null}]}
497+
498+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
499+
500+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"52"},"finish_reason":null}]}
501+
502+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
503+
504+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"53"},"finish_reason":null}]}
505+
506+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
507+
508+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"54"},"finish_reason":null}]}
509+
510+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
511+
512+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"55"},"finish_reason":null}]}
513+
514+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
515+
516+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"56"},"finish_reason":null}]}
517+
518+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
519+
520+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"57"},"finish_reason":null}]}
521+
522+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
523+
524+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"58"},"finish_reason":null}]}
525+
526+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
527+
528+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"59"},"finish_reason":null}]}
529+
530+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
531+
532+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"60"},"finish_reason":null}]}
533+
534+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
535+
536+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"61"},"finish_reason":null}]}
537+
538+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
539+
540+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"62"},"finish_reason":null}]}
541+
542+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
543+
544+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"63"},"finish_reason":null}]}
545+
546+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
547+
548+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"64"},"finish_reason":null}]}
549+
550+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
551+
552+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"65"},"finish_reason":null}]}
553+
554+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
555+
556+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
557+
558+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
559+
560+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"65"},"finish_reason":null}]}
561+
562+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003e"},"finish_reason":null}]}
563+
564+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
565+
566+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
567+
568+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" too"},"finish_reason":null}]}
569+
570+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" long"},"finish_reason":null}]}
571+
572+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
573+
574+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Need"},"finish_reason":null}]}
575+
576+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c"},"finish_reason":null}]}
577+
578+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
579+
580+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
581+
582+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Maybe"},"finish_reason":null}]}
583+
584+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
585+
586+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Bash"},"finish_reason":null}]}
587+
588+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
589+
590+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
591+
592+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
593+
594+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
595+
596+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
597+
598+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
599+
600+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"hello"},"finish_reason":null}]}
601+
602+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
603+
604+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\","},"finish_reason":null}]}
605+
606+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
607+
608+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
609+
610+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
611+
612+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
613+
614+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
615+
616+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
617+
618+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"B"},"finish_reason":null}]}
619+
620+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ash"},"finish_reason":null}]}
621+
622+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
623+
624+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
625+
626+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
627+
628+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
629+
630+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
631+
632+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \\\""},"finish_reason":null}]}
633+
634+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"hello"},"finish_reason":null}]}
635+
636+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
637+
638+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\\\","},"finish_reason":null}]}
639+
640+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
641+
642+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
643+
644+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
645+
646+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
647+
648+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
649+
650+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
651+
652+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Bash"},"finish_reason":null}]}
653+
654+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
655+
656+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
657+
658+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
659+
660+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
661+
662+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
663+
664+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
665+
666+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
667+
668+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
669+
670+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
671+
672+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
673+
674+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
675+
676+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
677+
678+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
679+
680+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
681+
682+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
683+
684+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
685+
686+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
687+
688+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
689+
690+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
691+
692+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
693+
694+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
695+
696+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"hello"},"finish_reason":null}]}
697+
698+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
699+
700+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
701+
702+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
703+
704+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
705+
706+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\","},"finish_reason":null}]}
707+
708+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
709+
710+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
711+
712+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Wait"},"finish_reason":null}]}
713+
714+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
715+
716+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
717+
718+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" carefully"},"finish_reason":null}]}
719+
720+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
721+
722+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" including"},"finish_reason":null}]}
723+
724+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" spaces"},"finish_reason":null}]}
725+
726+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
727+
728+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"B"},"finish_reason":null}]}
729+
730+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ash"},"finish_reason":null}]}
731+
732+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
733+
734+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
735+
736+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
737+
738+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
739+
740+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
741+
742+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \\\""},"finish_reason":null}]}
743+
744+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"hello"},"finish_reason":null}]}
745+
746+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
747+
748+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\\\","},"finish_reason":null}]}
749+
750+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
751+
752+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
753+
754+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
755+
756+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Let's"},"finish_reason":null}]}
757+
758+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
759+
760+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
761+
762+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" B"},"finish_reason":null}]}
763+
764+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
765+
766+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
767+
768+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
769+
770+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
771+
772+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
773+
774+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
775+
776+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
777+
778+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" :"},"finish_reason":null}]}
779+
780+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
781+
782+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
783+
784+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
785+
786+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
787+
788+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
789+
790+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
791+
792+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
793+
794+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
795+
796+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
797+
798+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
799+
800+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
801+
802+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
803+
804+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
805+
806+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
807+
808+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
809+
810+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
811+
812+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
813+
814+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
815+
816+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
817+
818+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
819+
820+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
821+
822+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
823+
824+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
825+
826+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
827+
828+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
829+
830+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
831+
832+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
833+
834+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
835+
836+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
837+
838+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" x"},"finish_reason":null}]}
839+
840+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
841+
842+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
843+
844+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
845+
846+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
847+
848+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
849+
850+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" w"},"finish_reason":null}]}
851+
852+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
853+
854+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
855+
856+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
857+
858+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
859+
860+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
861+
862+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
863+
864+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
865+
866+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
867+
868+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
869+
870+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
871+
872+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
873+
874+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"quote"},"finish_reason":null}]}
875+
876+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
877+
878+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
879+
880+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
881+
882+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
883+
884+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
885+
886+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
887+
888+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
889+
890+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
891+
892+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
893+
894+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
895+
896+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
897+
898+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
899+
900+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
901+
902+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
903+
904+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
905+
906+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" b"},"finish_reason":null}]}
907+
908+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
909+
910+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
911+
912+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
913+
914+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
915+
916+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
917+
918+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
919+
920+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
921+
922+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
923+
924+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
925+
926+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"quote"},"finish_reason":null}]}
927+
928+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
929+
930+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
931+
932+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
933+
934+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ,"},"finish_reason":null}]}
935+
936+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
937+
938+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
939+
940+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
941+
942+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
943+
944+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
945+
946+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
947+
948+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
949+
950+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
951+
952+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
953+
954+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
955+
956+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
957+
958+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
959+
960+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
961+
962+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
963+
964+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
965+
966+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
967+
968+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
969+
970+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
971+
972+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
973+
974+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
975+
976+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
977+
978+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
979+
980+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"51"},"finish_reason":null}]}
981+
982+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
983+
984+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"52"},"finish_reason":null}]}
985+
986+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
987+
988+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"53"},"finish_reason":null}]}
989+
990+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
991+
992+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
993+
994+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
995+
996+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"53"},"finish_reason":null}]}
997+
998+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
999+
1000+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
1001+
1002+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
1003+
1004+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" recount"},"finish_reason":null}]}
1005+
1006+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" more"},"finish_reason":null}]}
1007+
1008+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" systematically"},"finish_reason":null}]}
1009+
1010+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" including"},"finish_reason":null}]}
1011+
1012+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" punctuation"},"finish_reason":null}]}
1013+
1014+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
1015+
1016+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"String"},"finish_reason":null}]}
1017+
1018+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
1019+
1020+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Bash"},"finish_reason":null}]}
1021+
1022+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
1023+
1024+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
1025+
1026+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
1027+
1028+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
1029+
1030+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
1031+
1032+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
1033+
1034+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"hello"},"finish_reason":null}]}
1035+
1036+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
1037+
1038+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\","},"finish_reason":null}]}
1039+
1040+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
1041+
1042+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
1043+
1044+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n\n"},"finish_reason":null}]}
1045+
1046+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Write"},"finish_reason":null}]}
1047+
1048+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" out"},"finish_reason":null}]}
1049+
1050+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
1051+
1052+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
1053+
1054+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"B"},"finish_reason":null}]}
1055+
1056+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
1057+
1058+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
1059+
1060+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")\n"},"finish_reason":null}]}
1061+
1062+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"a"},"finish_reason":null}]}
1063+
1064+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
1065+
1066+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1067+
1068+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"s"},"finish_reason":null}]}
1069+
1070+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
1071+
1072+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1073+
1074+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"h"},"finish_reason":null}]}
1075+
1076+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
1077+
1078+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1079+
1080+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":("},"finish_reason":null}]}
1081+
1082+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
1083+
1084+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")\n"},"finish_reason":null}]}
1085+
1086+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
1087+
1088+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
1089+
1090+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1091+
1092+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"c"},"finish_reason":null}]}
1093+
1094+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
1095+
1096+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1097+
1098+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"r"},"finish_reason":null}]}
1099+
1100+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
1101+
1102+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1103+
1104+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
1105+
1106+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
1107+
1108+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1109+
1110+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"a"},"finish_reason":null}]}
1111+
1112+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
1113+
1114+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1115+
1116+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"t"},"finish_reason":null}]}
1117+
1118+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
1119+
1120+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1121+
1122+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
1123+
1124+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
1125+
1126+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1127+
1128+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
1129+
1130+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
1131+
1132+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1133+
1134+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"t"},"finish_reason":null}]}
1135+
1136+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
1137+
1138+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1139+
1140+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
1141+
1142+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
1143+
1144+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1145+
1146+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"s"},"finish_reason":null}]}
1147+
1148+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
1149+
1150+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1151+
1152+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"t"},"finish_reason":null}]}
1153+
1154+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
1155+
1156+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1157+
1158+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
1159+
1160+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
1161+
1162+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1163+
1164+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"t"},"finish_reason":null}]}
1165+
1166+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
1167+
1168+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1169+
1170+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"x"},"finish_reason":null}]}
1171+
1172+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
1173+
1174+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1175+
1176+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"t"},"finish_reason":null}]}
1177+
1178+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
1179+
1180+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1181+
1182+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
1183+
1184+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
1185+
1186+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1187+
1188+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"w"},"finish_reason":null}]}
1189+
1190+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
1191+
1192+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1193+
1194+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"i"},"finish_reason":null}]}
1195+
1196+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
1197+
1198+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1199+
1200+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"t"},"finish_reason":null}]}
1201+
1202+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
1203+
1204+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1205+
1206+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"h"},"finish_reason":null}]}
1207+
1208+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
1209+
1210+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1211+
1212+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
1213+
1214+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
1215+
1216+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1217+
1218+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"("},"finish_reason":null}]}
1219+
1220+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"quote"},"finish_reason":null}]}
1221+
1222+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
1223+
1224+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
1225+
1226+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1227+
1228+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"h"},"finish_reason":null}]}
1229+
1230+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
1231+
1232+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1233+
1234+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
1235+
1236+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
1237+
1238+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1239+
1240+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"l"},"finish_reason":null}]}
1241+
1242+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
1243+
1244+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1245+
1246+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"l"},"finish_reason":null}]}
1247+
1248+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
1249+
1250+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1251+
1252+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
1253+
1254+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
1255+
1256+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1257+
1258+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
1259+
1260+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
1261+
1262+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1263+
1264+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"b"},"finish_reason":null}]}
1265+
1266+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
1267+
1268+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1269+
1270+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"a"},"finish_reason":null}]}
1271+
1272+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
1273+
1274+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1275+
1276+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"s"},"finish_reason":null}]}
1277+
1278+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
1279+
1280+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1281+
1282+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"h"},"finish_reason":null}]}
1283+
1284+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
1285+
1286+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1287+
1288+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"("},"finish_reason":null}]}
1289+
1290+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"quote"},"finish_reason":null}]}
1291+
1292+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
1293+
1294+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
1295+
1296+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1297+
1298+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
1299+
1300+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
1301+
1302+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1303+
1304+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
1305+
1306+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
1307+
1308+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1309+
1310+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"n"},"finish_reason":null}]}
1311+
1312+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
1313+
1314+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1315+
1316+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
1317+
1318+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
1319+
1320+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1321+
1322+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
1323+
1324+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
1325+
1326+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1327+
1328+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"t"},"finish_reason":null}]}
1329+
1330+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
1331+
1332+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1333+
1334+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"i"},"finish_reason":null}]}
1335+
1336+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
1337+
1338+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1339+
1340+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"m"},"finish_reason":null}]}
1341+
1342+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
1343+
1344+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1345+
1346+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
1347+
1348+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
1349+
1350+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1351+
1352+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"s"},"finish_reason":null}]}
1353+
1354+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
1355+
1356+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1357+
1358+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"t"},"finish_reason":null}]}
1359+
1360+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
1361+
1362+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1363+
1364+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"a"},"finish_reason":null}]}
1365+
1366+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"51"},"finish_reason":null}]}
1367+
1368+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1369+
1370+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"m"},"finish_reason":null}]}
1371+
1372+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"52"},"finish_reason":null}]}
1373+
1374+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
1375+
1376+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"p"},"finish_reason":null}]}
1377+
1378+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"53"},"finish_reason":null}]}
1379+
1380+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n\n"},"finish_reason":null}]}
1381+
1382+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"So"},"finish_reason":null}]}
1383+
1384+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
1385+
1386+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"53"},"finish_reason":null}]}
1387+
1388+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
1389+
1390+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
1391+
1392+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" over"},"finish_reason":null}]}
1393+
1394+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" limit"},"finish_reason":null}]}
1395+
1396+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
1397+
1398+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
1399+
1400+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
1401+
1402+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ≤"},"finish_reason":null}]}
1403+
1404+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
1405+
1406+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
1407+
1408+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Maybe"},"finish_reason":null}]}
1409+
1410+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
1411+
1412+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"B"},"finish_reason":null}]}
1413+
1414+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ash"},"finish_reason":null}]}
1415+
1416+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
1417+
1418+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
1419+
1420+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
1421+
1422+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
1423+
1424+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
1425+
1426+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
1427+
1428+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
1429+
1430+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
1431+
1432+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
1433+
1434+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
1435+
1436+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
1437+
1438+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
1439+
1440+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
1441+
1442+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"B"},"finish_reason":null}]}
1443+
1444+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ash"},"finish_reason":null}]}
1445+
1446+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
1447+
1448+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
1449+
1450+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
1451+
1452+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
1453+
1454+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
1455+
1456+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
1457+
1458+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
1459+
1460+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
1461+
1462+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
1463+
1464+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
1465+
1466+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
1467+
1468+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Count"},"finish_reason":null}]}
1469+
1470+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
1471+
1472+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"B"},"finish_reason":null}]}
1473+
1474+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
1475+
1476+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
1477+
1478+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
1479+
1480+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
1481+
1482+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
1483+
1484+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
1485+
1486+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
1487+
1488+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" :"},"finish_reason":null}]}
1489+
1490+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
1491+
1492+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
1493+
1494+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
1495+
1496+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
1497+
1498+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
1499+
1500+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
1501+
1502+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
1503+
1504+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
1505+
1506+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
1507+
1508+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
1509+
1510+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
1511+
1512+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
1513+
1514+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
1515+
1516+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
1517+
1518+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
1519+
1520+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
1521+
1522+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
1523+
1524+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
1525+
1526+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
1527+
1528+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
1529+
1530+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
1531+
1532+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
1533+
1534+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
1535+
1536+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
1537+
1538+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
1539+
1540+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
1541+
1542+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
1543+
1544+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
1545+
1546+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
1547+
1548+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" x"},"finish_reason":null}]}
1549+
1550+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
1551+
1552+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
1553+
1554+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
1555+
1556+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
1557+
1558+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
1559+
1560+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" w"},"finish_reason":null}]}
1561+
1562+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
1563+
1564+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
1565+
1566+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
1567+
1568+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
1569+
1570+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
1571+
1572+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
1573+
1574+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
1575+
1576+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
1577+
1578+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
1579+
1580+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
1581+
1582+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
1583+
1584+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
1585+
1586+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
1587+
1588+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
1589+
1590+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
1591+
1592+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
1593+
1594+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
1595+
1596+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
1597+
1598+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
1599+
1600+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
1601+
1602+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
1603+
1604+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" b"},"finish_reason":null}]}
1605+
1606+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
1607+
1608+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
1609+
1610+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
1611+
1612+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
1613+
1614+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
1615+
1616+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
1617+
1618+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
1619+
1620+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ,"},"finish_reason":null}]}
1621+
1622+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
1623+
1624+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
1625+
1626+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
1627+
1628+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
1629+
1630+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
1631+
1632+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
1633+
1634+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
1635+
1636+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
1637+
1638+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
1639+
1640+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
1641+
1642+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
1643+
1644+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
1645+
1646+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
1647+
1648+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
1649+
1650+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
1651+
1652+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
1653+
1654+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
1655+
1656+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
1657+
1658+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
1659+
1660+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
1661+
1662+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
1663+
1664+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
1665+
1666+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
1667+
1668+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
1669+
1670+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
1671+
1672+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
1673+
1674+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"51"},"finish_reason":null}]}
1675+
1676+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n\n"},"finish_reason":null}]}
1677+
1678+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"That's"},"finish_reason":null}]}
1679+
1680+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
1681+
1682+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"51"},"finish_reason":null}]}
1683+
1684+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
1685+
1686+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
1687+
1688+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" still"},"finish_reason":null}]}
1689+
1690+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
1691+
1692+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" over"},"finish_reason":null}]}
1693+
1694+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
1695+
1696+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
1697+
1698+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ≤"},"finish_reason":null}]}
1699+
1700+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
1701+
1702+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
1703+
1704+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Remove"},"finish_reason":null}]}
1705+
1706+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
1707+
1708+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"B"},"finish_reason":null}]}
1709+
1710+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ash"},"finish_reason":null}]}
1711+
1712+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\""},"finish_reason":null}]}
1713+
1714+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" maybe"},"finish_reason":null}]}
1715+
1716+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
1717+
1718+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
1719+
1720+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
1721+
1722+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
1723+
1724+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
1725+
1726+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
1727+
1728+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
1729+
1730+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
1731+
1732+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
1733+
1734+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
1735+
1736+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
1737+
1738+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
1739+
1740+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
1741+
1742+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
1743+
1744+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"C"},"finish_reason":null}]}
1745+
1746+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
1747+
1748+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
1749+
1750+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
1751+
1752+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
1753+
1754+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
1755+
1756+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
1757+
1758+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
1759+
1760+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
1761+
1762+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
1763+
1764+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
1765+
1766+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
1767+
1768+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
1769+
1770+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
1771+
1772+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
1773+
1774+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
1775+
1776+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
1777+
1778+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
1779+
1780+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
1781+
1782+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
1783+
1784+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
1785+
1786+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
1787+
1788+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
1789+
1790+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
1791+
1792+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
1793+
1794+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
1795+
1796+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" x"},"finish_reason":null}]}
1797+
1798+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
1799+
1800+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
1801+
1802+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
1803+
1804+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
1805+
1806+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
1807+
1808+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" w"},"finish_reason":null}]}
1809+
1810+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
1811+
1812+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
1813+
1814+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
1815+
1816+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
1817+
1818+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
1819+
1820+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
1821+
1822+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
1823+
1824+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
1825+
1826+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
1827+
1828+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
1829+
1830+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
1831+
1832+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
1833+
1834+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
1835+
1836+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
1837+
1838+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
1839+
1840+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
1841+
1842+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
1843+
1844+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
1845+
1846+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
1847+
1848+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
1849+
1850+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
1851+
1852+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" b"},"finish_reason":null}]}
1853+
1854+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
1855+
1856+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
1857+
1858+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
1859+
1860+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
1861+
1862+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
1863+
1864+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
1865+
1866+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
1867+
1868+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ,"},"finish_reason":null}]}
1869+
1870+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
1871+
1872+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
1873+
1874+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
1875+
1876+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
1877+
1878+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
1879+
1880+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
1881+
1882+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
1883+
1884+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
1885+
1886+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
1887+
1888+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
1889+
1890+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
1891+
1892+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
1893+
1894+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
1895+
1896+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
1897+
1898+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
1899+
1900+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
1901+
1902+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
1903+
1904+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
1905+
1906+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
1907+
1908+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
1909+
1910+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
1911+
1912+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
1913+
1914+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
1915+
1916+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
1917+
1918+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
1919+
1920+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
1921+
1922+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
1923+
1924+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n\n"},"finish_reason":null}]}
1925+
1926+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
1927+
1928+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
1929+
1930+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
1931+
1932+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
1933+
1934+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
1935+
1936+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Thus"},"finish_reason":null}]}
1937+
1938+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
1939+
1940+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
1941+
1942+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Create"},"finish_reason":null}]}
1943+
1944+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
1945+
1946+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
1947+
1948+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
1949+
1950+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
1951+
1952+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
1953+
1954+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
1955+
1956+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
1957+
1958+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
1959+
1960+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
1961+
1962+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" It's"},"finish_reason":null}]}
1963+
1964+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
1965+
1966+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
1967+
1968+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
1969+
1970+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
1971+
1972+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
1973+
1974+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
1975+
1976+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
1977+
1978+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
1979+
1980+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Create"},"finish_reason":null}]}
1981+
1982+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" test"},"finish_reason":null}]}
1983+
1984+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
1985+
1986+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
1987+
1988+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" hello"},"finish_reason":null}]}
1989+
1990+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" bash"},"finish_reason":null}]}
1991+
1992+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
1993+
1994+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" no"},"finish_reason":null}]}
1995+
1996+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" timestamp"},"finish_reason":null}]}
1997+
1998+ data: {"id":"chatcmpl-0a45390d971e57d77a2c43c5","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":43,"completion_tokens":993,"total_tokens":1212}}
243
1999
244 data: [DONE]
2000 data: [DONE]
245
2001
@@ -248,15 +2004,15 @@ interactions:
248 - text/event-stream
2004 - text/event-stream
249 status: 200 OK
2005 status: 200 OK
250 code: 200
2006 code: 200
251− duration: 700.546792ms
2007+ duration: 813.909042ms
252- id: 1
2008- id: 1
253 request:
2009 request:
254 proto: HTTP/1.1
2010 proto: HTTP/1.1
255 proto_major: 1
2011 proto_major: 1
256 proto_minor: 1
2012 proto_minor: 1
257− content_length: 35672
2013+ content_length: 33664
258 host: ""
2014 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}"
2015+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/bash_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use bash to create a file named test.txt with content 'hello bash'. do not print its timestamp\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
260 headers:
2016 headers:
261 Accept:
2017 Accept:
262 - application/json
2018 - application/json
@@ -273,105 +2029,105 @@ interactions:
273 content_length: -1
2029 content_length: -1
274 uncompressed: true
2030 uncompressed: true
275 body: |+
2031 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}]}
2032+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
277
2033
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}]}
2034+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
279
2035
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}]}
2036+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
281
2037
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}]}
2038+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
283
2039
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}]}
2040+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
285
2041
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}]}
2042+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" specific"},"finish_reason":null}]}
287
2043
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}]}
2044+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
289
2045
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}]}
2046+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" without"},"finish_reason":null}]}
291
2047
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}]}
2048+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" printing"},"finish_reason":null}]}
293
2049
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}]}
2050+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
295
2051
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}]}
2052+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
297
2053
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}]}
2054+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"019dc9e911aa0a40cb24b3829334b48d","type":"function","index":0,"function":{"name":"bash","arguments":""}}]},"finish_reason":null}]}
299
2055
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}]}
2056+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
301
2057
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}]}
2058+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
303
2059
304− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
2060+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"command\": "}}]},"finish_reason":null}]}
305
2061
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}]}
2062+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"echo"}}]},"finish_reason":null}]}
307
2063
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}]}
2064+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '"}}]},"finish_reason":null}]}
309
2065
310− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
2066+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"hello"}}]},"finish_reason":null}]}
311
2067
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}]}
2068+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" bash"}}]},"finish_reason":null}]}
313
2069
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}]}
2070+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"'"}}]},"finish_reason":null}]}
315
2071
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}]}
2072+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \u003e"}}]},"finish_reason":null}]}
317
2073
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}]}
2074+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" /"}}]},"finish_reason":null}]}
319
2075
320− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
2076+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tmp"}}]},"finish_reason":null}]}
321
2077
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}]}
2078+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
323
2079
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}]}
2080+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
325
2081
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}]}
2082+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
327
2083
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}]}
2084+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
329
2085
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}]}
2086+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
331
2087
332− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
2088+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
333
2089
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}]}
2090+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
335
2091
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}]}
2092+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
337
2093
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}]}
2094+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
339
2095
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}]}
2096+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
341
2097
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}]}
2098+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
343
2099
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}]}
2100+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
345
2101
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}]}
2102+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/bash"}}]},"finish_reason":null}]}
347
2103
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}]}
2104+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
349
2105
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}]}
2106+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/test"}}]},"finish_reason":null}]}
351
2107
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}]}
2108+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}]}
353
2109
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}]}
2110+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
355
2111
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}]}
2112+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", "}}]},"finish_reason":null}]}
357
2113
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}]}
2114+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"description\": "}}]},"finish_reason":null}]}
359
2115
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}]}
2116+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"Create"}}]},"finish_reason":null}]}
361
2117
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}]}
2118+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" test"}}]},"finish_reason":null}]}
363
2119
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}]}
2120+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}]}
365
2121
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}]}
2122+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" with"}}]},"finish_reason":null}]}
367
2123
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}]}
2124+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" content"}}]},"finish_reason":null}]}
369
2125
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}]}
2126+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
371
2127
372− data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
2128+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
373
2129
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}}}
2130+ data: {"id":"chatcmpl-7a70ce29b015f72812fec6df","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":708,"completion_tokens":53,"total_tokens":7801}}
375
2131
376 data: [DONE]
2132 data: [DONE]
377
2133
@@ -380,15 +2136,15 @@ interactions:
380 - text/event-stream
2136 - text/event-stream
381 status: 200 OK
2137 status: 200 OK
382 code: 200
2138 code: 200
383− duration: 1.461643167s
2139+ duration: 12.392490792s
384- id: 2
2140- id: 2
385 request:
2141 request:
386 proto: HTTP/1.1
2142 proto: HTTP/1.1
387 proto_major: 1
2143 proto_major: 1
388 proto_minor: 1
2144 proto_minor: 1
389− content_length: 36122
2145+ content_length: 34123
390 host: ""
2146 host: ""
391− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/bash_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use bash to create a file named test.txt with content 'hello bash'. do not print its timestamp\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_51c682620b31061c\",\"function\":{\"arguments\":\"{\\\"command\\\": \\\"echo 'hello bash' > test.txt\\\", \\\"description\\\": \\\"Create test.txt with content\\\"}\",\"name\":\"bash\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to create a file named test.txt with content 'hello bash' using the bash tool, and not print its timestamp.\"},{\"content\":\"no output\",\"tool_call_id\":\"call_51c682620b31061c\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
2147+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/bash_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks 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\":\"019dc9e911aa0a40cb24b3829334b48d\",\"function\":{\"arguments\":\"{\\\"command\\\": \\\"echo 'hello bash' > /tmp/crush-test/TestCoderAgent/glm-5.1/bash_tool/test.txt\\\", \\\"description\\\": \\\"Create test.txt with content\\\"}\",\"name\":\"bash\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Create a file with specific content without printing timestamp.\"},{\"content\":\"no output\",\"tool_call_id\":\"019dc9e911aa0a40cb24b3829334b48d\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
392 headers:
2148 headers:
393 Accept:
2149 Accept:
394 - application/json
2150 - application/json
@@ -405,15 +2161,13 @@ interactions:
405 content_length: -1
2161 content_length: -1
406 uncompressed: true
2162 uncompressed: true
407 body: |+
2163 body: |+
408− data: {"id":"chatcmpl-985f3df336cbf13a5d358129","object":"chat.completion.chunk","created":1782413794,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
2164+ data: {"id":"chatcmpl-cee8b0c51328a2f60a1d33be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
409−
410− data: {"id":"chatcmpl-985f3df336cbf13a5d358129","object":"chat.completion.chunk","created":1782413794,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done"},"finish_reason":null}]}
411
2165
412− data: {"id":"chatcmpl-985f3df336cbf13a5d358129","object":"chat.completion.chunk","created":1782413794,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
2166+ data: {"id":"chatcmpl-cee8b0c51328a2f60a1d33be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done"},"finish_reason":null}]}
413
2167
414− data: {"id":"chatcmpl-985f3df336cbf13a5d358129","object":"chat.completion.chunk","created":1782413794,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
2168+ data: {"id":"chatcmpl-cee8b0c51328a2f60a1d33be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
415
2169
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}}}
2170+ data: {"id":"chatcmpl-cee8b0c51328a2f60a1d33be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":758,"completion_tokens":3,"total_tokens":7801}}
417
2171
418 data: [DONE]
2172 data: [DONE]
419
2173
@@ -422,4 +2176,4 @@ interactions:
422 - text/event-stream
2176 - text/event-stream
423 status: 200 OK
2177 status: 200 OK
424 code: 200
2178 code: 200
425− duration: 1.122182833s
2179+ duration: 3.832335167s
internal/agent/testdata/TestCoderAgent/glm-5.1/download_tool.yaml+195−263
@@ -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: 35697
9+ content_length: 33689
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\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"download the file from https://example-files.online-convert.com/document/txt/example.txt and save it as example.txt\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
11+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/download_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"download the file from https://example-files.online-convert.com/document/txt/example.txt and save it as example.txt\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
12 headers:
12 headers:
13 Accept:
13 Accept:
14 - application/json
14 - application/json
@@ -25,117 +25,121 @@ interactions:
25 content_length: -1
25 content_length: -1
26 uncompressed: true
26 uncompressed: true
27 body: |+
27 body: |+
28− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29
29
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}]}
30+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
31
31
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}]}
32+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
33
33
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}]}
34+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
35
35
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}]}
36+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
37
37
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}]}
38+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" download"},"finish_reason":null}]}
39
39
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}]}
40+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
41
41
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}]}
42+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
43
43
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}]}
44+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
45
45
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}]}
46+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
47
47
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}]}
48+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
49
49
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}]}
50+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
51
51
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}]}
52+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
53
53
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}]}
54+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
55
55
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}]}
56+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
57
57
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}]}
58+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
59
59
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}]}
60+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
61
61
62− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
63
63
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}]}
64+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"019dc9e932849e04b9ddb567b3f8a419","type":"function","index":0,"function":{"name":"download","arguments":""}}]},"finish_reason":null}]}
65
65
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}]}
66+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
67
67
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}]}
68+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
69
69
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}]}
70+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"file_path\": "}}]},"finish_reason":null}]}
71
71
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}]}
72+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp"}}]},"finish_reason":null}]}
73
73
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}]}
74+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
75
75
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}]}
76+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
77
77
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}]}
78+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
79
79
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}]}
80+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
81
81
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}]}
82+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
83
83
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}]}
84+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
85
85
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}]}
86+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
87
87
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}]}
88+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
89
89
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}]}
90+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
91
91
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}]}
92+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
93
93
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}]}
94+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
95
95
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}]}
96+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
97
97
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}]}
98+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/download"}}]},"finish_reason":null}]}
99
99
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}]}
100+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
101
101
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}]}
102+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/example"}}]},"finish_reason":null}]}
103
103
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}]}
104+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}]}
105
105
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}]}
106+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
107
107
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}]}
108+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", "}}]},"finish_reason":null}]}
109
109
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}]}
110+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"url\": "}}]},"finish_reason":null}]}
111
111
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}]}
112+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"https"}}]},"finish_reason":null}]}
113
113
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}]}
114+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"://"}}]},"finish_reason":null}]}
115
115
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}]}
116+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"example"}}]},"finish_reason":null}]}
117
117
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}]}
118+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-files"}}]},"finish_reason":null}]}
119
119
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}]}
120+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".online"}}]},"finish_reason":null}]}
121
121
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}]}
122+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
123
123
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}]}
124+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"convert"}}]},"finish_reason":null}]}
125
125
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}]}
126+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".com"}}]},"finish_reason":null}]}
127
127
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}]}
128+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/document"}}]},"finish_reason":null}]}
129
129
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}]}
130+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/t"}}]},"finish_reason":null}]}
131
131
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}]}
132+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"xt"}}]},"finish_reason":null}]}
133
133
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}]}
134+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/example"}}]},"finish_reason":null}]}
135
135
136− data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
136+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}]}
137
137
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}}}
138+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
139+
140+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
141+
142+ data: {"id":"chatcmpl-1b97aa98fb184ac773aa7dc8","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":711,"completion_tokens":62,"total_tokens":7813}}
139
143
140 data: [DONE]
144 data: [DONE]
141
145
@@ -144,8 +148,54 @@ interactions:
144 - text/event-stream
148 - text/event-stream
145 status: 200 OK
149 status: 200 OK
146 code: 200
150 code: 200
147− duration: 936.027666ms
151+ duration: 3.072070541s
148- id: 1
152- id: 1
153+ request:
154+ proto: HTTP/1.1
155+ proto_major: 1
156+ proto_minor: 1
157+ content_length: 0
158+ host: example-files.online-convert.com
159+ headers:
160+ User-Agent:
161+ - crush/1.0
162+ url: https://example-files.online-convert.com/document/txt/example.txt
163+ method: GET
164+ response:
165+ proto: HTTP/2.0
166+ proto_major: 2
167+ proto_minor: 0
168+ content_length: -1
169+ uncompressed: true
170+ body: |-
171+ TXT test file
172+ Purpose: Provide example of this file type
173+ Document file type: TXT
174+ Version: 1.0
175+ Remark:
176+
177+ Example content:
178+ The names "John Doe" for males, "Jane Doe" or "Jane Roe" for females, or "Jonnie Doe" and "Janie Doe" for children, or just "Doe" non-gender-specifically are used as placeholder names for a party whose true identity is unknown or must be withheld in a legal action, case, or discussion. The names are also used to refer to acorpse or hospital patient whose identity is unknown. This practice is widely used in the United States and Canada, but is rarely used in other English-speaking countries including the United Kingdom itself, from where the use of "John Doe" in a legal context originates. The names Joe Bloggs or John Smith are used in the UK instead, as well as in Australia and New Zealand.
179+
180+ John Doe is sometimes used to refer to a typical male in other contexts as well, in a similar manner to John Q. Public, known in Great Britain as Joe Public, John Smith or Joe Bloggs. For example, the first name listed on a form is often John Doe, along with a fictional address or other fictional information to provide an example of how to fill in the form. The name is also used frequently in popular culture, for example in the Frank Capra film Meet John Doe. John Doe was also the name of a 2002 American television series.
181+
182+ Similarly, a child or baby whose identity is unknown may be referred to as Baby Doe. A notorious murder case in Kansas City, Missouri, referred to the baby victim as Precious Doe. Other unidentified female murder victims are Cali Doe and Princess Doe. Additional persons may be called James Doe, Judy Doe, etc. However, to avoid possible confusion, if two anonymous or unknown parties are cited in a specific case or action, the surnames Doe and Roe may be used simultaneously; for example, "John Doe v. Jane Roe". If several anonymous parties are referenced, they may simply be labelled John Doe #1, John Doe #2, etc. (the U.S. Operation Delego cited 21 (numbered) "John Doe"s) or labelled with other variants of Doe / Roe / Poe / etc. Other early alternatives such as John Stiles and Richard Miles are now rarely used, and Mary Major has been used in some American federal cases.
183+
184+
185+
186+ File created by https://www.online-convert.com
187+ More example files: https://www.online-convert.com/file-type
188+ Text of Example content: Wikipedia (https://en.wikipedia.org/wiki/John_Doe)
189+ License: Attribution-ShareAlike 4.0 (https://creativecommons.org/licenses/by-sa/4.0/)
190+
191+ Feel free to use and share the file according to the license above.
192+ headers:
193+ Content-Type:
194+ - text/plain; charset=UTF-8
195+ status: 200 OK
196+ code: 200
197+ duration: 567.123917ms
198+- id: 2
149 request:
199 request:
150 proto: HTTP/1.1
200 proto: HTTP/1.1
151 proto_major: 1
201 proto_major: 1
@@ -169,207 +219,125 @@ interactions:
169 content_length: -1
219 content_length: -1
170 uncompressed: true
220 uncompressed: true
171 body: |+
221 body: |+
172− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
173−
174− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
175−
176− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
177−
178− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
179−
180− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
181−
182− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
183−
184− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
185−
186− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
187−
188− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
189−
190− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
191−
192− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
193−
194− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
195−
196− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
197−
198− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
199−
200− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
201−
202− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" download"},"finish_reason":null}]}
203−
204− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
205−
206− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
207−
208− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
209−
210− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" https"},"finish_reason":null}]}
211−
212− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"://"},"finish_reason":null}]}
213−
214− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"example"},"finish_reason":null}]}
215−
216− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"-files"},"finish_reason":null}]}
217
223
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}]}
224+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
219
225
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}]}
226+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
221
227
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}]}
228+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
223
229
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}]}
230+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
225
231
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}]}
232+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
227
233
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}]}
234+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
229
235
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}]}
236+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
231
237
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}]}
238+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
233
239
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}]}
240+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" instruction"},"finish_reason":null}]}
235
241
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}]}
242+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
237
243
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}]}
244+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
239
245
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}]}
246+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Download"},"finish_reason":null}]}
241
247
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}]}
248+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
243
249
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}]}
250+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
245
251
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}]}
252+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
247
253
248− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
249
255
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}]}
256+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
251
257
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}]}
258+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
253
259
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}]}
260+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
255
261
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}]}
262+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
257
263
258− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
259
265
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}]}
266+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Keep"},"finish_reason":null}]}
261
267
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}]}
268+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" within"},"finish_reason":null}]}
263
269
264− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
265
271
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}]}
272+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
267
273
268− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"),"},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
269
275
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}]}
276+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
271
277
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}]}
278+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Probably"},"finish_reason":null}]}
273
279
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}]}
280+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
275
281
276− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Download"},"finish_reason":null}]}
277
283
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}]}
284+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
279
285
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}]}
286+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
281
287
282− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
283
289
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}]}
290+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
285
291
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}]}
292+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
287
293
288− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
289
295
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}]}
296+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
291
297
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}]}
298+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
293
299
294− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
295
301
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}]}
302+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
297
303
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}]}
304+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
299
305
300− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
301
307
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}]}
308+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
303
309
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}]}
310+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
305
311
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}]}
312+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
307
313
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}]}
314+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" only"},"finish_reason":null}]}
309
315
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}]}
316+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
311
317
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}]}
318+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
313
319
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}]}
320+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
315
321
316− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
317
323
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}]}
324+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Download"},"finish_reason":null}]}
319
325
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}]}
326+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" example"},"finish_reason":null}]}
321
327
322− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
323
329
324− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
325
331
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}]}
332+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" URL"},"finish_reason":null}]}
327
333
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}]}
334+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
329
335
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}]}
336+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" save"},"finish_reason":null}]}
331
337
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}]}
338+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" it"},"finish_reason":null}]}
333
339
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}]}
340+ data: {"id":"chatcmpl-fbb3ebdbaef217a7705b2e9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":46,"completion_tokens":67,"total_tokens":289}}
335−
336− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
337−
338− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
339−
340− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
341−
342− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
343−
344− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
345−
346− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
347−
348− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
349−
350− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
351−
352− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
353−
354− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
355−
356− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Download"},"finish_reason":null}]}
357−
358− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
359−
360− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Save"},"finish_reason":null}]}
361−
362− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" example"},"finish_reason":null}]}
363−
364− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
365−
366− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
367−
368− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" URL"},"finish_reason":null}]}
369−
370− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
371−
372− data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":160,"completion_tokens":108,"total_tokens":336,"prompt_tokens_details":{"cached_tokens":68},"completion_tokens_details":{"reasoning_tokens":103},"cost":{"usd":0.000145462,"hypercredits":0.00290924},"remaining":{"hypercredits":0}}}
373
341
374 data: [DONE]
342 data: [DONE]
375
343
@@ -378,61 +346,15 @@ interactions:
378 - text/event-stream
346 - text/event-stream
379 status: 200 OK
347 status: 200 OK
380 code: 200
348 code: 200
381− duration: 1.326897958s
349+ duration: 4.787669459s
382−- id: 2
383− request:
384− proto: HTTP/1.1
385− proto_major: 1
386− proto_minor: 1
387− content_length: 0
388− host: example-files.online-convert.com
389− headers:
390− User-Agent:
391− - crush/1.0
392− url: https://example-files.online-convert.com/document/txt/example.txt
393− method: GET
394− response:
395− proto: HTTP/2.0
396− proto_major: 2
397− proto_minor: 0
398− content_length: -1
399− uncompressed: true
400− body: |-
401− TXT test file
402− Purpose: Provide example of this file type
403− Document file type: TXT
404− Version: 1.0
405− Remark:
406−
407− Example content:
408− The names "John Doe" for males, "Jane Doe" or "Jane Roe" for females, or "Jonnie Doe" and "Janie Doe" for children, or just "Doe" non-gender-specifically are used as placeholder names for a party whose true identity is unknown or must be withheld in a legal action, case, or discussion. The names are also used to refer to acorpse or hospital patient whose identity is unknown. This practice is widely used in the United States and Canada, but is rarely used in other English-speaking countries including the United Kingdom itself, from where the use of "John Doe" in a legal context originates. The names Joe Bloggs or John Smith are used in the UK instead, as well as in Australia and New Zealand.
409−
410− John Doe is sometimes used to refer to a typical male in other contexts as well, in a similar manner to John Q. Public, known in Great Britain as Joe Public, John Smith or Joe Bloggs. For example, the first name listed on a form is often John Doe, along with a fictional address or other fictional information to provide an example of how to fill in the form. The name is also used frequently in popular culture, for example in the Frank Capra film Meet John Doe. John Doe was also the name of a 2002 American television series.
411−
412− Similarly, a child or baby whose identity is unknown may be referred to as Baby Doe. A notorious murder case in Kansas City, Missouri, referred to the baby victim as Precious Doe. Other unidentified female murder victims are Cali Doe and Princess Doe. Additional persons may be called James Doe, Judy Doe, etc. However, to avoid possible confusion, if two anonymous or unknown parties are cited in a specific case or action, the surnames Doe and Roe may be used simultaneously; for example, "John Doe v. Jane Roe". If several anonymous parties are referenced, they may simply be labelled John Doe #1, John Doe #2, etc. (the U.S. Operation Delego cited 21 (numbered) "John Doe"s) or labelled with other variants of Doe / Roe / Poe / etc. Other early alternatives such as John Stiles and Richard Miles are now rarely used, and Mary Major has been used in some American federal cases.
413−
414−
415−
416− File created by https://www.online-convert.com
417− More example files: https://www.online-convert.com/file-type
418− Text of Example content: Wikipedia (https://en.wikipedia.org/wiki/John_Doe)
419− License: Attribution-ShareAlike 4.0 (https://creativecommons.org/licenses/by-sa/4.0/)
420−
421− Feel free to use and share the file according to the license above.
422− headers:
423− Content-Type:
424− - text/plain; charset=UTF-8
425− status: 200 OK
426− code: 200
427− duration: 893.137459ms
428- id: 3
350- id: 3
429 request:
351 request:
430 proto: HTTP/1.1
352 proto: HTTP/1.1
431 proto_major: 1
353 proto_major: 1
432 proto_minor: 1
354 proto_minor: 1
433− content_length: 36247
355+ content_length: 34261
434 host: ""
356 host: ""
435− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/download_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"download the file from https://example-files.online-convert.com/document/txt/example.txt and save it as example.txt\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_4cbf337c01e5b47c\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/download_tool/example.txt\\\", \\\"url\\\": \\\"https://example-files.online-convert.com/document/txt/example.txt\\\"}\",\"name\":\"download\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants to download a file from a URL and save it as example.txt.\"},{\"content\":\"Successfully downloaded 2574 bytes to example.txt (Content-Type: text/plain; charset=UTF-8)\",\"tool_call_id\":\"call_4cbf337c01e5b47c\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
357+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/download_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks 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\":\"019dc9e932849e04b9ddb567b3f8a419\",\"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\":\"019dc9e932849e04b9ddb567b3f8a419\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
436 headers:
358 headers:
437 Accept:
359 Accept:
438 - application/json
360 - application/json
@@ -449,29 +371,39 @@ interactions:
449 content_length: -1
371 content_length: -1
450 uncompressed: true
372 uncompressed: true
451 body: |+
373 body: |+
452− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-29e934e12b4180e28ce90701","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
375+
376+ data: {"id":"chatcmpl-29e934e12b4180e28ce90701","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Download"},"finish_reason":null}]}
377+
378+ data: {"id":"chatcmpl-29e934e12b4180e28ce90701","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ed"},"finish_reason":null}]}
379+
380+ data: {"id":"chatcmpl-29e934e12b4180e28ce90701","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
381+
382+ data: {"id":"chatcmpl-29e934e12b4180e28ce90701","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" saved"},"finish_reason":null}]}
383+
384+ data: {"id":"chatcmpl-29e934e12b4180e28ce90701","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" as"},"finish_reason":null}]}
453
385
454− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Download"},"finish_reason":null}]}
386+ data: {"id":"chatcmpl-29e934e12b4180e28ce90701","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
455
387
456− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ed"},"finish_reason":null}]}
388+ data: {"id":"chatcmpl-29e934e12b4180e28ce90701","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"example"},"finish_reason":null}]}
457
389
458− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
390+ data: {"id":"chatcmpl-29e934e12b4180e28ce90701","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
459
391
460− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" saved"},"finish_reason":null}]}
392+ data: {"id":"chatcmpl-29e934e12b4180e28ce90701","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
461
393
462− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" as"},"finish_reason":null}]}
394+ data: {"id":"chatcmpl-29e934e12b4180e28ce90701","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" ("},"finish_reason":null}]}
463
395
464− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
396+ data: {"id":"chatcmpl-29e934e12b4180e28ce90701","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"25"},"finish_reason":null}]}
465
397
466− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"example"},"finish_reason":null}]}
398+ data: {"id":"chatcmpl-29e934e12b4180e28ce90701","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"7"},"finish_reason":null}]}
467
399
468− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
400+ data: {"id":"chatcmpl-29e934e12b4180e28ce90701","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"4"},"finish_reason":null}]}
469
401
470− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
402+ data: {"id":"chatcmpl-29e934e12b4180e28ce90701","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" bytes"},"finish_reason":null}]}
471
403
472− data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
404+ data: {"id":"chatcmpl-29e934e12b4180e28ce90701","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":")."},"finish_reason":null}]}
473
405
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}}}
406+ data: {"id":"chatcmpl-29e934e12b4180e28ce90701","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":783,"completion_tokens":16,"total_tokens":7839}}
475
407
476 data: [DONE]
408 data: [DONE]
477
409
@@ -480,4 +412,4 @@ interactions:
480 - text/event-stream
412 - text/event-stream
481 status: 200 OK
413 status: 200 OK
482 code: 200
414 code: 200
483− duration: 1.486211917s
415+ duration: 1.72753425s
internal/agent/testdata/TestCoderAgent/glm-5.1/fetch_tool.yaml+402−278
@@ -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: 35715
9+ content_length: 895
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/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}"
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}'
12 headers:
12 headers:
13 Accept:
13 Accept:
14 - application/json
14 - application/json
@@ -25,483 +25,563 @@ interactions:
25 content_length: -1
25 content_length: -1
26 uncompressed: true
26 uncompressed: true
27 body: |+
27 body: |+
28− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29
29
30− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
31
31
32− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
33
33
34− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
35
35
36− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
37
37
38− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
39
39
40− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" fetch"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
41
41
42− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
43
43
44− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
45
45
46− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
47
47
48− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
49
49
50− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
51
51
52− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" check"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
53
53
54− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" if"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
55
55
56− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fetch"},"finish_reason":null}]}
57
57
58− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" contains"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
59
59
60− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
61
61
62− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
63
63
64− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" https"},"finish_reason":null}]}
65
65
66− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"://"},"finish_reason":null}]}
67
67
68− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"example"},"finish_reason":null}]}
69
69
70− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'."},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"-files"},"finish_reason":null}]}
71
71
72− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_60557666b1c79950","type":"function","index":0,"function":{"name":"fetch","arguments":""}}]},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".online"},"finish_reason":null}]}
73
73
74− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"format\": \""}}]},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"-con"},"finish_reason":null}]}
75
75
76− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"text"}}]},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"vert"},"finish_reason":null}]}
77
77
78− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".com"},"finish_reason":null}]}
79
79
80− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"url\": \""}}]},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/"},"finish_reason":null}]}
81
81
82− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"https"}}]},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"website"},"finish_reason":null}]}
83
83
84− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"://"}}]},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/html"},"finish_reason":null}]}
85
85
86− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"example"}}]},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/example"},"finish_reason":null}]}
87
87
88− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-files"}}]},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".html"},"finish_reason":null}]}
89
89
90− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".online"}}]},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
91
91
92− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" tell"},"finish_reason":null}]}
93
93
94− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"convert"}}]},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
95
95
96− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".com"}}]},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" if"},"finish_reason":null}]}
97
97
98− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/"}}]},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
99
99
100− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"website"}}]},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" contains"},"finish_reason":null}]}
101
101
102− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/html"}}]},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
103
103
104− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/example"}}]},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
105
105
106− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".html"}}]},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
107
107
108− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
109
109
110− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
111
111
112− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
112+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
113
113
114− data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":696,"completion_tokens":50,"total_tokens":8225,"prompt_tokens_details":{"cached_tokens":7479},"completion_tokens_details":{"reasoning_tokens":23},"cost":{"usd":0.0012956,"hypercredits":0.025912},"remaining":{"hypercredits":0}}}
114+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
115
115
116− data: [DONE]
116+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" We"},"finish_reason":null}]}
117
117
118− headers:
118+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
119− Content-Type:
119+
120− - text/event-stream
120+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
121− status: 200 OK
121+
122− code: 200
122+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
123− duration: 2.230852292s
123+
124−- id: 1
124+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
125− request:
125+
126− proto: HTTP/1.1
126+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
127− proto_major: 1
127+
128− proto_minor: 1
128+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
129− content_length: 895
129+
130− host: ""
130+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
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}'
131+
132− headers:
132+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
133− Accept:
133+
134− - application/json
134+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
135− Content-Type:
135+
136− - application/json
136+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
137− User-Agent:
137+
138− - Charm-Crush/devel (https://charm.land/crush)
138+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
139− url: https://hyper.charm.land/v1/chat/completions
139+
140− method: POST
140+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
141− response:
141+
142− proto: HTTP/2.0
142+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
143− proto_major: 2
143+
144− proto_minor: 0
144+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
145− content_length: -1
145+
146− uncompressed: true
146+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
147− body: |+
147+
148+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Check"},"finish_reason":null}]}
149+
150+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
151+
152+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".html"},"finish_reason":null}]}
153+
154+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
155+
156+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
157+
158+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
159+
160+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
161+
162+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
163+
164+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
165+
166+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
167+
168+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
169+
170+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
171+
172+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
173+
174+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
175+
148− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Perhaps"},"finish_reason":null}]}
149
177
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}]}
178+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
151
179
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}]}
180+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
153
181
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}]}
182+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Check"},"finish_reason":null}]}
155
183
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}]}
184+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" if"},"finish_reason":null}]}
157
185
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}]}
186+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
159
187
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}]}
188+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".html"},"finish_reason":null}]}
161
189
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}]}
190+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" contains"},"finish_reason":null}]}
163
191
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}]}
192+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" John"},"finish_reason":null}]}
165
193
166− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
167
195
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}]}
196+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
169
197
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}]}
198+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
171
199
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}]}
200+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
173
201
174− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
175
203
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}]}
204+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
177
205
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}]}
206+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Check"},"finish_reason":null}]}
179
207
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}]}
208+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" if"},"finish_reason":null}]}
181
209
182− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
183
211
184− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".html"},"finish_reason":null}]}
185
213
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}]}
214+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" contains"},"finish_reason":null}]}
187
215
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}]}
216+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" John"},"finish_reason":null}]}
189
217
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}]}
218+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
191
219
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}]}
220+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
193
221
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}]}
222+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
195
223
196− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
197
225
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}]}
226+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
199
227
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}]}
228+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
201
229
202− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
203
231
204− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" C"},"finish_reason":null}]}
205
233
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}]}
234+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
207
235
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}]}
236+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
209
237
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}]}
238+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
211
239
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}]}
240+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"h"},"finish_reason":null}]}
213
241
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}]}
242+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
215
243
216− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
217
245
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}]}
246+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
219
247
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}]}
248+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"c"},"finish_reason":null}]}
221
249
222− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
223
251
224− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"k"},"finish_reason":null}]}
225
253
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}]}
254+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
227
255
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}]}
256+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
229
257
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}]}
258+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
231
259
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}]}
260+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
233
261
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}]}
262+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
235
263
236− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
237
265
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}]}
266+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
239
267
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}]}
268+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"f"},"finish_reason":null}]}
241
269
242− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
243
271
244− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
245
273
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}]}
274+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
247
275
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}]}
276+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
249
277
250− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
251
279
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}]}
280+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
253
281
254− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
255
283
256− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"x"},"finish_reason":null}]}
257
285
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}]}
286+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
259
287
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}]}
288+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"a"},"finish_reason":null}]}
261
289
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}]}
290+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
263
291
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}]}
292+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"m"},"finish_reason":null}]}
265
293
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}]}
294+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
267
295
268− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"p"},"finish_reason":null}]}
269
297
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}]}
298+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
271
299
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}]}
300+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"l"},"finish_reason":null}]}
273
301
274− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'\""},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
275
303
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}]}
304+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
277
305
278− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
279
307
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}]}
308+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
281
309
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}]}
310+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
283
311
284− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"h"},"finish_reason":null}]}
285
313
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}]}
314+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
287
315
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}]}
316+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"t"},"finish_reason":null}]}
289
317
290− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
291
319
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}]}
320+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"m"},"finish_reason":null}]}
293
321
294− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
295
323
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}]}
324+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"l"},"finish_reason":null}]}
297
325
298− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
299
327
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}]}
328+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
301
329
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}]}
330+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
303
331
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}]}
332+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
305
333
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}]}
334+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
307
335
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}]}
336+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
309
337
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}]}
338+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
311
339
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}]}
340+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
313
341
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}]}
342+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
315
343
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}]}
344+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"n"},"finish_reason":null}]}
317
345
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}]}
346+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
319
347
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}]}
348+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"t"},"finish_reason":null}]}
321
349
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}]}
350+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
323
351
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}]}
352+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"a"},"finish_reason":null}]}
325
353
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}]}
354+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
327
355
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}]}
356+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"i"},"finish_reason":null}]}
329
357
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}]}
358+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
331
359
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}]}
360+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"n"},"finish_reason":null}]}
333
361
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}]}
362+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
335
363
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}]}
364+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"s"},"finish_reason":null}]}
337
365
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}]}
366+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
339
367
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}]}
368+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
341
369
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}]}
370+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
343
371
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}]}
372+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
345
373
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}]}
374+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
347
375
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}]}
376+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" J"},"finish_reason":null}]}
349
377
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}]}
378+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
351
379
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}]}
380+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
353
381
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}]}
382+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
355
383
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}]}
384+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"h"},"finish_reason":null}]}
357
385
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}]}
386+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
359
387
360− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
388+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"n"},"finish_reason":null}]}
361
389
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}]}
390+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
363
391
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}]}
392+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
365
393
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}]}
394+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
367
395
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}]}
396+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
369
397
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}]}
398+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
371
399
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}]}
400+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" D"},"finish_reason":null}]}
373
401
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}]}
402+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
375
403
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}]}
404+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
377
405
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}]}
406+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
379
407
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}]}
408+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
381
409
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}]}
410+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
383
411
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}]}
412+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
385
413
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}]}
414+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
387
415
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}]}
416+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
389
417
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}]}
418+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
391
419
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}]}
420+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
393
421
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}]}
422+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
395
423
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}]}
424+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
397
425
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}]}
426+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
399
427
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}]}
428+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
401
429
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}]}
430+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
403
431
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}]}
432+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
405
433
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}]}
434+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
407
435
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}]}
436+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
409
437
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}]}
438+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" One"},"finish_reason":null}]}
411
439
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}]}
440+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
413
441
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}]}
442+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
415
443
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}]}
444+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
417
445
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}]}
446+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Check"},"finish_reason":null}]}
419
447
420− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
448+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" if"},"finish_reason":null}]}
421
449
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}]}
450+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" example"},"finish_reason":null}]}
423
451
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}]}
452+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".html"},"finish_reason":null}]}
425
453
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}]}
454+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" contains"},"finish_reason":null}]}
427
455
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}]}
456+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" John"},"finish_reason":null}]}
429
457
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}]}
458+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Doe"},"finish_reason":null}]}
431
459
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}]}
460+ data: {"id":"chatcmpl-0e928dfa427df9741090ec34","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":51,"completion_tokens":224,"total_tokens":451}}
433
461
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}]}
462+ data: [DONE]
463+
464+ headers:
465+ Content-Type:
466+ - text/event-stream
467+ status: 200 OK
468+ code: 200
469+ duration: 469.455958ms
470+- id: 1
471+ request:
472+ proto: HTTP/1.1
473+ proto_major: 1
474+ proto_minor: 1
475+ content_length: 33707
476+ host: ""
477+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/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>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"fetch the content from https://example-files.online-convert.com/website/html/example.html and tell me if it contains the word 'John Doe'\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
478+ headers:
479+ Accept:
480+ - application/json
481+ Content-Type:
482+ - application/json
483+ User-Agent:
484+ - Charm-Crush/devel (https://charm.land/crush)
485+ url: https://hyper.charm.land/v1/chat/completions
486+ method: POST
487+ response:
488+ proto: HTTP/2.0
489+ proto_major: 2
490+ proto_minor: 0
491+ content_length: -1
492+ uncompressed: true
493+ body: |+
494+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
495+
496+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
497+
498+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
435
499
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}]}
500+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
437
501
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}]}
502+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
439
503
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}]}
504+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
441
505
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}]}
506+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" fetch"},"finish_reason":null}]}
443
507
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}]}
508+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
445
509
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}]}
510+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
447
511
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}]}
512+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
449
513
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}]}
514+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
451
515
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}]}
516+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
453
517
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}]}
518+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" check"},"finish_reason":null}]}
455
519
456− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
520+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" if"},"finish_reason":null}]}
457
521
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}]}
522+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
459
523
460− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
524+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" contains"},"finish_reason":null}]}
461
525
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}]}
526+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
463
527
464− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
528+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
465
529
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}]}
530+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
467
531
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}]}
532+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
469
533
470− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
534+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
471
535
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}]}
536+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'."},"finish_reason":null}]}
473
537
474− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
538+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"019dc9e95d6ffca809da4767a142d722","type":"function","index":0,"function":{"name":"fetch","arguments":""}}]},"finish_reason":null}]}
475
539
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}]}
540+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
477
541
478− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
542+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
479
543
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}]}
544+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"format\": "}}]},"finish_reason":null}]}
481
545
482− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
546+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"text"}}]},"finish_reason":null}]}
483
547
484− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Check"},"finish_reason":null}]}
548+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
485
549
486− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" if"},"finish_reason":null}]}
550+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", "}}]},"finish_reason":null}]}
487
551
488− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" example"},"finish_reason":null}]}
552+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"url\": "}}]},"finish_reason":null}]}
489
553
490− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".html"},"finish_reason":null}]}
554+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"https"}}]},"finish_reason":null}]}
491
555
492− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" contains"},"finish_reason":null}]}
556+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"://"}}]},"finish_reason":null}]}
493
557
494− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" '"},"finish_reason":null}]}
558+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"example"}}]},"finish_reason":null}]}
495
559
496− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"John"},"finish_reason":null}]}
560+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-files"}}]},"finish_reason":null}]}
497
561
498− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Doe"},"finish_reason":null}]}
562+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".online"}}]},"finish_reason":null}]}
499
563
500− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"'"},"finish_reason":null}]}
564+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
501
565
502− data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
566+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"convert"}}]},"finish_reason":null}]}
503
567
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}}}
568+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".com"}}]},"finish_reason":null}]}
569+
570+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/"}}]},"finish_reason":null}]}
571+
572+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"website"}}]},"finish_reason":null}]}
573+
574+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/html"}}]},"finish_reason":null}]}
575+
576+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/example"}}]},"finish_reason":null}]}
577+
578+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".html"}}]},"finish_reason":null}]}
579+
580+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
581+
582+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
583+
584+ data: {"id":"chatcmpl-761c4ee0ad99da99138d7cc0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":718,"completion_tokens":49,"total_tokens":7807}}
505
585
506 data: [DONE]
586 data: [DONE]
507
587
@@ -510,7 +590,7 @@ interactions:
510 - text/event-stream
590 - text/event-stream
511 status: 200 OK
591 status: 200 OK
512 code: 200
592 code: 200
513− duration: 1.005238292s
593+ duration: 6.783770833s
514- id: 2
594- id: 2
515 request:
595 request:
516 proto: HTTP/1.1
596 proto: HTTP/1.1
@@ -581,15 +661,15 @@ interactions:
581 - text/html; charset=UTF-8
661 - text/html; charset=UTF-8
582 status: 200 OK
662 status: 200 OK
583 code: 200
663 code: 200
584− duration: 147.645375ms
664+ duration: 135.104958ms
585- id: 3
665- id: 3
586 request:
666 request:
587 proto: HTTP/1.1
667 proto: HTTP/1.1
588 proto_major: 1
668 proto_major: 1
589 proto_minor: 1
669 proto_minor: 1
590− content_length: 36231
670+ content_length: 34245
591 host: ""
671 host: ""
592− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/fetch_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"fetch the content from https://example-files.online-convert.com/website/html/example.html and tell me if it contains the word 'John Doe'\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_60557666b1c79950\",\"function\":{\"arguments\":\"{\\\"format\\\": \\\"text\\\", \\\"url\\\": \\\"https://example-files.online-convert.com/website/html/example.html\\\"}\",\"name\":\"fetch\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to fetch content from a URL and check if it contains the word 'John Doe'.\"},{\"content\":\"HTML test file Purpose: Provide example of this file type Document file type: HTML Version: 1.0 Remark:\",\"tool_call_id\":\"call_60557666b1c79950\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
672+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/fetch_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks 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\":\"019dc9e95d6ffca809da4767a142d722\",\"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\":\"019dc9e95d6ffca809da4767a142d722\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
593 headers:
673 headers:
594 Accept:
674 Accept:
595 - application/json
675 - application/json
@@ -606,39 +686,83 @@ interactions:
606 content_length: -1
686 content_length: -1
607 uncompressed: true
687 uncompressed: true
608 body: |+
688 body: |+
609− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
689+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
690+
691+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"No"},"finish_reason":null}]}
692+
693+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
694+
695+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
696+
697+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" fetched"},"finish_reason":null}]}
698+
699+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}]}
700+
701+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" does"},"finish_reason":null}]}
702+
703+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" not"},"finish_reason":null}]}
704+
705+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" contain"},"finish_reason":null}]}
706+
707+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
708+
709+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" word"},"finish_reason":null}]}
710+
711+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" '"},"finish_reason":null}]}
712+
713+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"John"},"finish_reason":null}]}
714+
715+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Doe"},"finish_reason":null}]}
716+
717+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"'."},"finish_reason":null}]}
718+
719+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" The"},"finish_reason":null}]}
720+
721+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" page"},"finish_reason":null}]}
722+
723+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" only"},"finish_reason":null}]}
724+
725+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" contains"},"finish_reason":null}]}
726+
727+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}]}
728+
729+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" header"},"finish_reason":null}]}
730+
731+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" about"},"finish_reason":null}]}
732+
733+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" an"},"finish_reason":null}]}
610
734
611− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"No"},"finish_reason":null}]}
735+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" HTML"},"finish_reason":null}]}
612
736
613− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
737+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" test"},"finish_reason":null}]}
614
738
615− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
739+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
616
740
617− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" fetched"},"finish_reason":null}]}
741+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
618
742
619− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}]}
743+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" metadata"},"finish_reason":null}]}
620
744
621− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" does"},"finish_reason":null}]}
745+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" ("},"finish_reason":null}]}
622
746
623− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" not"},"finish_reason":null}]}
747+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"purpose"},"finish_reason":null}]}
624
748
625− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" contain"},"finish_reason":null}]}
749+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
626
750
627− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
751+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
628
752
629− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" word"},"finish_reason":null}]}
753+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" type"},"finish_reason":null}]}
630
754
631− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" \""},"finish_reason":null}]}
755+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
632
756
633− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"John"},"finish_reason":null}]}
757+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" version"},"finish_reason":null}]}
634
758
635− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Doe"},"finish_reason":null}]}
759+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
636
760
637− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"\"."},"finish_reason":null}]}
761+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" remark"},"finish_reason":null}]}
638
762
639− data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
763+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":")."},"finish_reason":null}]}
640
764
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}}}
765+ data: {"id":"chatcmpl-60927e07c2f453241687462a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":775,"completion_tokens":38,"total_tokens":7853}}
642
766
643 data: [DONE]
767 data: [DONE]
644
768
@@ -647,4 +771,4 @@ interactions:
647 - text/event-stream
771 - text/event-stream
648 status: 200 OK
772 status: 200 OK
649 code: 200
773 code: 200
650− duration: 977.248916ms
774+ duration: 1.400483417s
internal/agent/testdata/TestCoderAgent/glm-5.1/glob_tool.yaml+498−384
@@ -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: 35633
9+ content_length: 814
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\\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}"
11+ body: '{"messages":[{"content":"You will generate a short title based on the first message a user begins a conversation with.\n\n<rules>\n- Keep the title in the same language that the user wrote their message in.\n- Ensure it is not more than 50 characters long.\n- The title should be a summary of the user''s message.\n- It should be one line long.\n- Do not use quotes or colons.\n- The entire text you return will be used as the title.\n- Never return anything that is more than one sentence (one line) long.\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse glob to find all .go 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}'
12 headers:
12 headers:
13 Accept:
13 Accept:
14 - application/json
14 - application/json
@@ -25,707 +25,821 @@ interactions:
25 content_length: -1
25 content_length: -1
26 uncompressed: true
26 uncompressed: true
27 body: |+
27 body: |+
28− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29
29
30− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_ad74b69d4b477328","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
31
31
32− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"pattern\": \""}}]},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
33
33
34− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"**"}}]},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
35
35
36− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/*."}}]},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
37
37
38− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go"}}]},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
39
39
40− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
41
41
42− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
43
43
44− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
44+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
45
45
46− data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":679,"completion_tokens":13,"total_tokens":8171,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.0010077999999999999,"hypercredits":0.020155999999999997},"remaining":{"hypercredits":0}}}
46+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
47
47
48− data: [DONE]
48+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
49
49
50− headers:
50+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
51− Content-Type:
52− - text/event-stream
53− status: 200 OK
54− code: 200
55− duration: 2.191829958s
56−- id: 1
57− request:
58− proto: HTTP/1.1
59− proto_major: 1
60− proto_minor: 1
61− content_length: 35910
62− host: ""
63− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use glob to find all .go files in the current directory\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_ad74b69d4b477328\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/*.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool/main.go\",\"tool_call_id\":\"call_ad74b69d4b477328\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
64− headers:
65− Accept:
66− - application/json
67− Content-Type:
68− - application/json
69− User-Agent:
70− - Charm-Crush/devel (https://charm.land/crush)
71− url: https://hyper.charm.land/v1/chat/completions
72− method: POST
73− response:
74− proto: HTTP/2.0
75− proto_major: 2
76− proto_minor: 0
77− content_length: -1
78− uncompressed: true
79− body: |+
80− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
81
51
82− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
83
53
84− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
85
55
86− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
87
57
88− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `."},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
89
59
90− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
91
61
92− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
93
63
94− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
95
65
96− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
97
67
98− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
99
69
100− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
101
71
102− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
103
73
104− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
105
75
106− data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
76+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
107
77
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}}}
78+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
109
79
110− data: [DONE]
80+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
111
81
112− headers:
82+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
113− Content-Type:
83+
114− - text/event-stream
84+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
115− status: 200 OK
85+
116− code: 200
86+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" we"},"finish_reason":null}]}
117− duration: 1.449032542s
87+
118−- id: 2
88+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
119− request:
89+
120− proto: HTTP/1.1
90+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
121− proto_major: 1
91+
122− proto_minor: 1
92+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
123− content_length: 814
93+
124− host: ""
125− 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 glob to find all .go 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}'
126− headers:
127− Accept:
128− - application/json
129− Content-Type:
130− - application/json
131− User-Agent:
132− - Charm-Crush/devel (https://charm.land/crush)
133− url: https://hyper.charm.land/v1/chat/completions
134− method: POST
135− response:
136− proto: HTTP/2.0
137− proto_major: 2
138− proto_minor: 0
139− content_length: -1
140− uncompressed: true
141− body: |+
142− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
143
95
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}]}
96+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
145
97
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}]}
98+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
147
99
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}]}
100+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
149
101
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}]}
102+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
151
103
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}]}
104+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
153
105
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}]}
106+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
155
107
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}]}
108+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
157
109
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}]}
110+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
159
111
160− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
161
113
162− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
163
115
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}]}
116+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
165
117
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}]}
118+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
167
119
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}]}
120+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
169
121
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}]}
122+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
171
123
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}]}
124+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
173
125
174− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
175
127
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}]}
128+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
177
129
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}]}
130+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
179
131
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}]}
132+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
181
133
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}]}
134+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
183
135
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}]}
136+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
185
137
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}]}
138+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
187
139
188− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
189
141
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}]}
142+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
191
143
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}]}
144+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Possible"},"finish_reason":null}]}
193
145
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}]}
146+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
195
147
196− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
197
149
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}]}
150+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
199
151
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}]}
152+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Using"},"finish_reason":null}]}
201
153
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}]}
154+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
203
155
204− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
205
157
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}]}
158+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" locate"},"finish_reason":null}]}
207
159
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}]}
160+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
209
161
210− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
211
163
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}]}
164+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
213
165
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}]}
166+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
215
167
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}]}
168+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
217
169
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}]}
170+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
219
171
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}]}
172+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
221
173
222− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
223
175
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}]}
176+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
225
177
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}]}
178+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
227
179
228− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
229
181
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}]}
182+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Using"},"finish_reason":null}]}
231
183
232− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
233
185
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}]}
186+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
235
187
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}]}
188+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" locate"},"finish_reason":null}]}
237
189
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}]}
190+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
239
191
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}]}
192+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
241
193
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}]}
194+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
243
195
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}]}
196+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
245
197
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}]}
198+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
247
199
248− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
249
201
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}]}
202+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
251
203
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}]}
204+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
253
205
254− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
255
207
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}]}
208+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
257
209
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}]}
210+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
259
211
260− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
261
213
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}]}
214+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Using"},"finish_reason":null}]}
263
215
264− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
265
217
266− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
267
219
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}]}
220+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
269
221
270− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
271
223
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}]}
224+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
273
225
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}]}
226+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
275
227
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}]}
228+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
277
229
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}]}
230+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
279
231
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}]}
232+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
281
233
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}]}
234+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
283
235
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}]}
236+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
285
237
286− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
287
239
288− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
289
241
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}]}
242+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
291
243
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}]}
244+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
293
245
294− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
295
247
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}]}
248+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
297
249
298− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
299
251
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}]}
252+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
301
253
302− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
303
255
304− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
305
257
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}]}
258+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
307
259
308− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
309
261
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}]}
262+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
311
263
312− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
313
265
314− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
315
267
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}]}
268+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
317
269
318− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
319
271
320− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
321
273
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}]}
274+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" locate"},"finish_reason":null}]}
323
275
324− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
325
277
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}]}
278+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
327
279
328− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
329
281
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}]}
282+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
331
283
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}]}
284+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
333
285
334− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
335
287
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}]}
288+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
337
289
338− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
339
291
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}]}
292+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
341
293
342− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
343
295
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}]}
296+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
345
297
346− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
347
299
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}]}
300+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
349
301
350− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
351
303
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}]}
304+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
353
305
354− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
355
307
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}]}
308+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
357
309
358− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
359
311
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}]}
312+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
361
313
362− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
363
315
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}]}
316+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
365
317
366− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
367
319
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}]}
320+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
369
321
370− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
371
323
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}]}
324+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
373
325
374− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
375
327
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}]}
328+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
377
329
378− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
379
331
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}]}
332+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
381
333
382− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
383
335
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}]}
336+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
385
337
386− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
387
339
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}]}
340+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
389
341
390− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
391
343
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}]}
344+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
393
345
394− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
395
347
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}]}
348+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
397
349
398− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
399
351
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}]}
352+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
401
353
402− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
403
355
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}]}
356+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
405
357
406− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
407
359
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}]}
360+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
409
361
410− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
411
363
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}]}
364+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
413
365
414− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
415
367
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}]}
368+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
417
369
418− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
419
371
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}]}
372+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
421
373
422− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
423
375
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}]}
376+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
425
377
426− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
378+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
427
379
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}]}
380+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
429
381
430− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
382+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
431
383
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}]}
384+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"51"},"finish_reason":null}]}
433
385
434− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
386+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
435
387
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}]}
388+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
437
389
438− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
390+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
439
391
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}]}
392+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"51"},"finish_reason":null}]}
441
393
442− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
394+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" exceeds"},"finish_reason":null}]}
443
395
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}]}
396+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
445
397
446− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
398+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
447
399
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}]}
400+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
449
401
450− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
402+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
451
403
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}]}
404+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" shorter"},"finish_reason":null}]}
453
405
454− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
406+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
455
407
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}]}
408+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
457
409
458− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
410+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Using"},"finish_reason":null}]}
459
411
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}]}
412+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
461
413
462− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
414+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
463
415
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}]}
416+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
465
417
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}]}
418+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
467
419
468− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
420+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
469
421
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}]}
422+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
471
423
472− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
424+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
473
425
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}]}
426+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
475
427
476− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
428+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" dir"},"finish_reason":null}]}
477
429
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}]}
430+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
479
431
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}]}
432+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
481
433
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}]}
434+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
483
435
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}]}
436+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Using"},"finish_reason":null}]}
485
437
486− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
438+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
487
439
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}]}
440+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
489
441
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}]}
442+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
491
443
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}]}
444+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
493
445
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}]}
446+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
495
447
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}]}
448+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
497
449
498− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
450+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
499
451
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}]}
452+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
501
453
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}]}
454+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
503
455
504− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
456+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
505
457
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}]}
458+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
507
459
508− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
460+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
509
461
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}]}
462+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
511
463
512− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")+"},"finish_reason":null}]}
464+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
513
465
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}]}
466+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
515
467
516− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
468+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
517
469
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}]}
470+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
519
471
520− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
472+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
521
473
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}]}
474+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
523
475
524− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
476+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
525
477
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}]}
478+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
527
479
528− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
480+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
529
481
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}]}
482+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
531
483
532− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
484+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
533
485
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}]}
486+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
535
487
536− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
488+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
537
489
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}]}
490+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
539
491
540− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
492+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
541
493
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}]}
494+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
543
495
544− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
496+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
545
497
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}]}
498+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
547
499
548− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
500+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
549
501
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}]}
502+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
551
503
552− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
504+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
553
505
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}]}
506+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
555
507
556− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
508+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
557
509
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}]}
510+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
559
511
560− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
512+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
561
513
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}]}
514+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
563
515
564− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
516+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
565
517
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}]}
518+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
567
519
568− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
520+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
569
521
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}]}
522+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
571
523
572− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
524+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
573
525
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}]}
526+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
575
527
576− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
528+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
577
529
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}]}
530+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
579
531
580− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
532+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
581
533
582− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
534+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
583
535
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}]}
536+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
585
537
586− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
538+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
587
539
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}]}
540+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
589
541
590− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
542+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
591
543
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}]}
544+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
593
545
594− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
546+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
595
547
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}]}
548+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
597
549
598− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
550+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
599
551
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}]}
552+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
601
553
602− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
554+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
603
555
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}]}
556+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
605
557
606− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
558+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
607
559
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}]}
560+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
609
561
610− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
562+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
611
563
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}]}
564+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
613
565
614− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
566+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
615
567
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}]}
568+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
617
569
618− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
570+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
619
571
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}]}
572+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
621
573
622− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
574+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
623
575
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}]}
576+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
625
577
626− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
578+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
627
579
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}]}
580+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
629
581
630− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
582+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
631
583
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}]}
584+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
633
585
634− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
586+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
635
587
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}]}
588+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
637
589
638− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
590+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
639
591
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}]}
592+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
641
593
642− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
594+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
643
595
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}]}
596+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" dir"},"finish_reason":null}]}
645
597
646− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
598+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
647
599
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}]}
600+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
649
601
650− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
602+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
651
603
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}]}
604+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
653
605
654− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
606+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
655
607
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}]}
608+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
657
609
658− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
610+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
659
611
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}]}
612+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
661
613
662− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
614+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
663
615
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}]}
616+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
665
617
666− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
618+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" okay"},"finish_reason":null}]}
667
619
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}]}
620+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
669
621
670− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
622+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Thus"},"finish_reason":null}]}
671
623
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}]}
624+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" answer"},"finish_reason":null}]}
673
625
674− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
626+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
675
627
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}]}
628+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
677
629
678− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
630+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
679
631
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}]}
632+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Using"},"finish_reason":null}]}
681
633
682− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
634+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" glob"},"finish_reason":null}]}
683
635
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}]}
636+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
685
637
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}]}
638+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" find"},"finish_reason":null}]}
687
639
688− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
640+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ."},"finish_reason":null}]}
689
641
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}]}
642+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
691
643
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}]}
644+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
693
645
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}]}
646+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
695
647
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}]}
648+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" current"},"finish_reason":null}]}
697
649
698− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
650+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" dir"},"finish_reason":null}]}
699
651
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}]}
652+ data: {"id":"chatcmpl-e0b39d687c28068522e39b9e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":35,"completion_tokens":320,"total_tokens":531}}
701
653
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}]}
654+ data: [DONE]
655+
656+ headers:
657+ Content-Type:
658+ - text/event-stream
659+ status: 200 OK
660+ code: 200
661+ duration: 449.553ms
662+- id: 1
663+ request:
664+ proto: HTTP/1.1
665+ proto_major: 1
666+ proto_minor: 1
667+ content_length: 33625
668+ host: ""
669+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use glob to find all .go files in the current directory\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
670+ headers:
671+ Accept:
672+ - application/json
673+ Content-Type:
674+ - application/json
675+ User-Agent:
676+ - Charm-Crush/devel (https://charm.land/crush)
677+ url: https://hyper.charm.land/v1/chat/completions
678+ method: POST
679+ response:
680+ proto: HTTP/2.0
681+ proto_major: 2
682+ proto_minor: 0
683+ content_length: -1
684+ uncompressed: true
685+ body: |+
686+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
687+
688+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
689+
690+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
691+
692+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
693+
694+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
695+
696+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
697+
698+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
699+
700+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
701+
702+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
703+
704+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
705+
706+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
707+
708+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
709+
710+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
711+
712+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
713+
714+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
715+
716+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
717+
718+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
719+
720+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
721+
722+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
723+
724+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
725+
726+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
727+
728+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"019dc9e982b6101d04aa6be6b32a2644","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
729+
730+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
731+
732+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
733+
734+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"path\": "}}]},"finish_reason":null}]}
735+
736+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp"}}]},"finish_reason":null}]}
737+
738+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
739+
740+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
741+
742+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
743+
744+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
745+
746+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
747+
748+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
749+
750+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
751+
752+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
753+
754+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
755+
756+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
757+
758+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
759+
760+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
761+
762+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
763+
764+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lob"}}]},"finish_reason":null}]}
765+
766+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
767+
768+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
769+
770+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", "}}]},"finish_reason":null}]}
771+
772+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"pattern\": "}}]},"finish_reason":null}]}
773+
774+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"*."}}]},"finish_reason":null}]}
775+
776+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go"}}]},"finish_reason":null}]}
777+
778+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
779+
780+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
781+
782+ data: {"id":"chatcmpl-5076d019d023aeff89e38654","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":701,"completion_tokens":52,"total_tokens":7793}}
783+
784+ data: [DONE]
785+
786+ headers:
787+ Content-Type:
788+ - text/event-stream
789+ status: 200 OK
790+ code: 200
791+ duration: 4.963414083s
792+- id: 2
793+ request:
794+ proto: HTTP/1.1
795+ proto_major: 1
796+ proto_minor: 1
797+ content_length: 34094
798+ host: ""
799+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks 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\":\"019dc9e982b6101d04aa6be6b32a2644\",\"function\":{\"arguments\":\"{\\\"path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool\\\", \\\"pattern\\\": \\\"*.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to use the glob tool to find all .go files in the current directory.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool/main.go\",\"tool_call_id\":\"019dc9e982b6101d04aa6be6b32a2644\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
800+ headers:
801+ Accept:
802+ - application/json
803+ Content-Type:
804+ - application/json
805+ User-Agent:
806+ - Charm-Crush/devel (https://charm.land/crush)
807+ url: https://hyper.charm.land/v1/chat/completions
808+ method: POST
809+ response:
810+ proto: HTTP/2.0
811+ proto_major: 2
812+ proto_minor: 0
813+ content_length: -1
814+ uncompressed: true
815+ body: |+
816+ data: {"id":"chatcmpl-c835379a83b2fcc1595e9370","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
703
817
704− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
818+ data: {"id":"chatcmpl-c835379a83b2fcc1595e9370","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
705
819
706− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Use"},"finish_reason":null}]}
820+ data: {"id":"chatcmpl-c835379a83b2fcc1595e9370","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
707
821
708− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" glob"},"finish_reason":null}]}
822+ data: {"id":"chatcmpl-c835379a83b2fcc1595e9370","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
709
823
710− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
824+ data: {"id":"chatcmpl-c835379a83b2fcc1595e9370","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `."},"finish_reason":null}]}
711
825
712− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" locate"},"finish_reason":null}]}
826+ data: {"id":"chatcmpl-c835379a83b2fcc1595e9370","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
713
827
714− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ."},"finish_reason":null}]}
828+ data: {"id":"chatcmpl-c835379a83b2fcc1595e9370","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
715
829
716− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
830+ data: {"id":"chatcmpl-c835379a83b2fcc1595e9370","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
717
831
718− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
832+ data: {"id":"chatcmpl-c835379a83b2fcc1595e9370","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
719
833
720− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
834+ data: {"id":"chatcmpl-c835379a83b2fcc1595e9370","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
721
835
722− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" current"},"finish_reason":null}]}
836+ data: {"id":"chatcmpl-c835379a83b2fcc1595e9370","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
723
837
724− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
838+ data: {"id":"chatcmpl-c835379a83b2fcc1595e9370","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
725
839
726− data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
840+ data: {"id":"chatcmpl-c835379a83b2fcc1595e9370","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
727
841
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}}}
842+ data: {"id":"chatcmpl-c835379a83b2fcc1595e9370","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":116,"completion_tokens":13,"total_tokens":7809}}
729
843
730 data: [DONE]
844 data: [DONE]
731
845
@@ -734,4 +848,4 @@ interactions:
734 - text/event-stream
848 - text/event-stream
735 status: 200 OK
849 status: 200 OK
736 code: 200
850 code: 200
737− duration: 648.718041ms
851+ duration: 1.499959167s
internal/agent/testdata/TestCoderAgent/glm-5.1/grep_tool.yaml+379−237
@@ -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: 35631
9+ content_length: 812
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\\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}"
11+ body: '{"messages":[{"content":"You will generate a short title based on the first message a user begins a conversation with.\n\n<rules>\n- Keep the title in the same language that the user wrote their message in.\n- Ensure it is not more than 50 characters long.\n- The title should be a summary of the user''s message.\n- It should be one line long.\n- Do not use quotes or colons.\n- The entire text you return will be used as the title.\n- Never return anything that is more than one sentence (one line) long.\n</rules>\n\n /no_think","role":"system"},{"content":"Generate a concise title for the following content:\n\nuse grep to search for the word ''package'' in go files\n <think>\n\n</think>","role":"user"}],"model":"gpt-oss-120b","max_completion_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
12 headers:
12 headers:
13 Accept:
13 Accept:
14 - application/json
14 - application/json
@@ -25,401 +25,543 @@ interactions:
25 content_length: -1
25 content_length: -1
26 uncompressed: true
26 uncompressed: true
27 body: |+
27 body: |+
28− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29
29
30− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_a57bfe141bf85225","type":"function","index":0,"function":{"name":"grep","arguments":""}}]},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
31
31
32− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"include\": \""}}]},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
33
33
34− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"*."}}]},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
35
35
36− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go"}}]},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
37
37
38− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
39
39
40− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"pattern\": \""}}]},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
41
41
42− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"package"}}]},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
43
43
44− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
45
45
46− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
47
47
48− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
48+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
49
49
50− data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":680,"completion_tokens":18,"total_tokens":8177,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.0010312,"hypercredits":0.020623999999999997},"remaining":{"hypercredits":0}}}
50+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
51
51
52− data: [DONE]
52+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
53
53
54− headers:
54+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
55− Content-Type:
55+
56− - text/event-stream
56+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
57− status: 200 OK
57+
58− code: 200
58+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
59− duration: 1.505379s
59+
60−- id: 1
60+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" grep"},"finish_reason":null}]}
61− request:
61+
62− proto: HTTP/1.1
62+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
63− proto_major: 1
63+
64− proto_minor: 1
64+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
65− content_length: 812
65+
66− host: ""
66+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
67− 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 grep to search for the word ''package'' in go files\n <think>\n\n</think>","role":"user"}],"model":"gpt-oss-120b","max_completion_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
67+
68− headers:
68+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
69− Accept:
69+
70− - application/json
70+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
71− Content-Type:
71+
72− - application/json
72+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
73− User-Agent:
73+
74− - Charm-Crush/devel (https://charm.land/crush)
74+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
75− url: https://hyper.charm.land/v1/chat/completions
75+
76− method: POST
76+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
77− response:
77+
78− proto: HTTP/2.0
78+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
79− proto_major: 2
79+
80− proto_minor: 0
80+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
81− content_length: -1
81+
82− uncompressed: true
82+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
83− body: |+
83+
84− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
85+
86+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
87+
88+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
89+
90+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
91+
92+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
93+
94+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
95+
96+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
97+
98+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
99+
100+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
101+
102+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
103+
104+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
105+
106+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
107+
108+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
109+
110+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
111+
112+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
113+
114+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
115+
116+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
117+
118+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
119+
120+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Using"},"finish_reason":null}]}
121+
122+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" grep"},"finish_reason":null}]}
85
123
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}]}
124+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
87
125
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}]}
126+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
89
127
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}]}
128+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
91
129
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}]}
130+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
93
131
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}]}
132+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
95
133
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}]}
134+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
97
135
98− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
99
137
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}]}
138+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
101
139
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}]}
140+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
103
141
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}]}
142+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
105
143
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}]}
144+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
107
145
108− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
109
147
110− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
111
149
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}]}
150+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Using"},"finish_reason":null}]}
113
151
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}]}
152+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" grep"},"finish_reason":null}]}
115
153
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}]}
154+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
117
155
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}]}
156+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
119
157
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}]}
158+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
121
159
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}]}
160+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
123
161
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}]}
162+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
125
163
126− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
127
165
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}]}
166+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
129
167
130− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
131
169
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}]}
170+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
133
171
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}]}
172+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
135
173
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}]}
174+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
137
175
138− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
139
177
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}]}
178+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
141
179
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}]}
180+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Using"},"finish_reason":null}]}
143
181
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}]}
182+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
145
183
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}]}
184+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
147
185
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}]}
186+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
149
187
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}]}
188+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
151
189
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}]}
190+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
153
191
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}]}
192+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
155
193
156− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
157
195
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}]}
196+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
159
197
160− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
161
199
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}]}
200+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" grep"},"finish_reason":null}]}
163
201
164− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
165
203
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}]}
204+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
167
205
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}]}
206+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" -\u003e"},"finish_reason":null}]}
169
207
170− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
171
209
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}]}
210+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
173
211
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}]}
212+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
175
213
176− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
177
215
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}]}
216+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
179
217
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}]}
218+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
181
219
182− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
183
221
184− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
185
223
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}]}
224+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
187
225
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}]}
226+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" -\u003e"},"finish_reason":null}]}
189
227
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}]}
228+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
191
229
192− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
193
231
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}]}
232+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
195
233
196− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
197
235
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}]}
236+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
199
237
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}]}
238+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
201
239
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}]}
240+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
203
241
204− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
205
243
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}]}
244+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
207
245
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}]}
246+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" -\u003e"},"finish_reason":null}]}
209
247
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}]}
248+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
211
249
212− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
213
251
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}]}
252+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
215
253
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}]}
254+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
217
255
218− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
219
257
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}]}
258+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
221
259
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}]}
260+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
223
261
224− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
225
263
226− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'="},"finish_reason":null}]}
227
265
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}]}
266+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
229
267
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}]}
268+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" inc"},"finish_reason":null}]}
231
269
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}]}
270+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
233
271
234− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
235
273
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}]}
274+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Actually"},"finish_reason":null}]}
237
275
238− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" include"},"finish_reason":null}]}
239
277
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}]}
278+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
241
279
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}]}
280+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" counts"},"finish_reason":null}]}
243
281
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}]}
282+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
245
283
246− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
247
285
248− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" but"},"finish_reason":null}]}
249
287
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}]}
288+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" okay"},"finish_reason":null}]}
251
289
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}]}
290+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
253
291
254− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \"'"},"finish_reason":null}]}
255
293
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}]}
294+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
257
295
258− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'\""},"finish_reason":null}]}
259
297
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}]}
298+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
261
299
262− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
263
301
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}]}
302+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
265
303
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}]}
304+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
267
305
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}]}
306+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Actually"},"finish_reason":null}]}
269
307
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}]}
308+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
271
309
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}]}
310+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
273
311
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}]}
312+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" single"},"finish_reason":null}]}
275
313
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}]}
314+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quote"},"finish_reason":null}]}
277
315
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}]}
316+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
279
317
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}]}
318+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
281
319
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}]}
320+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":",a"},"finish_reason":null}]}
283
321
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}]}
322+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":",c"},"finish_reason":null}]}
285
323
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}]}
324+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":",k"},"finish_reason":null}]}
287
325
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}]}
326+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":",a"},"finish_reason":null}]}
289
327
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}]}
328+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":",g"},"finish_reason":null}]}
291
329
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}]}
330+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":",e"},"finish_reason":null}]}
293
331
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}]}
332+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
295
333
296− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" single"},"finish_reason":null}]}
297
335
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}]}
336+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quote"},"finish_reason":null}]}
299
337
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}]}
338+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
301
339
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}]}
340+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
303
341
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}]}
342+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
305
343
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}]}
344+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
307
345
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}]}
346+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
309
347
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}]}
348+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
311
349
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}]}
350+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
313
351
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}]}
352+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
315
353
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}]}
354+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
317
355
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}]}
356+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
319
357
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}]}
358+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
321
359
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}]}
360+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
323
361
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}]}
362+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
325
363
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}]}
364+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
327
365
328− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
329
367
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}]}
368+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
331
369
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}]}
370+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
333
371
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}]}
372+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
335
373
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}]}
374+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" -\u003e"},"finish_reason":null}]}
337
375
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}]}
376+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
339
377
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}]}
378+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
341
379
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}]}
380+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
343
381
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}]}
382+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
345
383
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}]}
384+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
347
385
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}]}
386+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
349
387
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}]}
388+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
351
389
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}]}
390+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
353
391
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}]}
392+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
355
393
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}]}
394+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" -\u003e"},"finish_reason":null}]}
357
395
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}]}
396+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
397+
398+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
399+
400+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
401+
402+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
403+
404+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
405+
406+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
407+
408+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
409+
410+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
411+
412+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
413+
414+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" -\u003e"},"finish_reason":null}]}
415+
416+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
417+
418+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
419+
420+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
421+
422+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" within"},"finish_reason":null}]}
423+
424+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
425+
426+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
427+
428+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
429+
430+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
431+
432+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
433+
434+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Provide"},"finish_reason":null}]}
435+
436+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
437+
438+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
439+
440+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
441+
442+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
443+
444+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
445+
446+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Using"},"finish_reason":null}]}
447+
448+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" grep"},"finish_reason":null}]}
449+
450+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
451+
452+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" find"},"finish_reason":null}]}
453+
454+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" '"},"finish_reason":null}]}
455+
456+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"package"},"finish_reason":null}]}
457+
458+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"'"},"finish_reason":null}]}
459+
460+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
461+
462+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
463+
464+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
465+
466+ data: {"id":"chatcmpl-14747695c84ec20a2a28b891","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":36,"completion_tokens":227,"total_tokens":439}}
467+
468+ data: [DONE]
469+
470+ headers:
471+ Content-Type:
472+ - text/event-stream
473+ status: 200 OK
474+ code: 200
475+ duration: 1.623395791s
476+- id: 1
477+ request:
478+ proto: HTTP/1.1
479+ proto_major: 1
480+ proto_minor: 1
481+ content_length: 33623
482+ 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 BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use grep to search for the word 'package' in go files\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
484+ headers:
485+ Accept:
486+ - application/json
487+ Content-Type:
488+ - application/json
489+ User-Agent:
490+ - Charm-Crush/devel (https://charm.land/crush)
491+ url: https://hyper.charm.land/v1/chat/completions
492+ method: POST
493+ response:
494+ proto: HTTP/2.0
495+ proto_major: 2
496+ proto_minor: 0
497+ content_length: -1
498+ uncompressed: true
499+ body: |+
500+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
359
501
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}]}
502+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"019dc9e9a3ada531d1f06e68f202aa79","type":"function","index":0,"function":{"name":"grep","arguments":""}}]},"finish_reason":null}]}
361
503
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}]}
504+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
363
505
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}]}
506+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
365
507
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}]}
508+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"include\": "}}]},"finish_reason":null}]}
367
509
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}]}
510+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"*."}}]},"finish_reason":null}]}
369
511
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}]}
512+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go"}}]},"finish_reason":null}]}
371
513
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}]}
514+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
373
515
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}]}
516+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", "}}]},"finish_reason":null}]}
375
517
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}]}
518+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"path\": "}}]},"finish_reason":null}]}
377
519
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}]}
520+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp"}}]},"finish_reason":null}]}
379
521
380− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
522+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
381
523
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}]}
524+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
383
525
384− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
526+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
385
527
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}]}
528+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
387
529
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}]}
530+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
389
531
390− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
532+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
391
533
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}]}
534+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
393
535
394− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
536+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
395
537
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}]}
538+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
397
539
398− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
540+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
399
541
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}]}
542+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
401
543
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}]}
544+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
403
545
404− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
546+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
405
547
406− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
548+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rep"}}]},"finish_reason":null}]}
407
549
408− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"rep"},"finish_reason":null}]}
550+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
409
551
410− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
552+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
411
553
412− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" '"},"finish_reason":null}]}
554+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", "}}]},"finish_reason":null}]}
413
555
414− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"package"},"finish_reason":null}]}
556+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"pattern\": "}}]},"finish_reason":null}]}
415
557
416− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"'"},"finish_reason":null}]}
558+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"package"}}]},"finish_reason":null}]}
417
559
418− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
560+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
419
561
420− data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
562+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
421
563
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}}}
564+ data: {"id":"chatcmpl-6c0f2202e61bc5f28c942f96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":702,"completion_tokens":38,"total_tokens":7780}}
423
565
424 data: [DONE]
566 data: [DONE]
425
567
@@ -428,15 +570,15 @@ interactions:
428 - text/event-stream
570 - text/event-stream
429 status: 200 OK
571 status: 200 OK
430 code: 200
572 code: 200
431− duration: 541.974834ms
573+ duration: 5.995592333s
432- id: 2
574- id: 2
433 request:
575 request:
434 proto: HTTP/1.1
576 proto: HTTP/1.1
435 proto_major: 1
577 proto_major: 1
436 proto_minor: 1
578 proto_minor: 1
437− content_length: 35983
579+ content_length: 34061
438 host: ""
580 host: ""
439− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use grep to search for the word 'package' in go files\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_a57bfe141bf85225\",\"function\":{\"arguments\":\"{\\\"include\\\": \\\"*.go\\\", \\\"pattern\\\": \\\"package\\\"}\",\"name\":\"grep\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"Found 1 matches\\n/tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool/main.go:\\n Line 1, Char 1: package main\\n\",\"tool_call_id\":\"call_a57bfe141bf85225\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
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 BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks 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\":\"019dc9e9a3ada531d1f06e68f202aa79\",\"function\":{\"arguments\":\"{\\\"include\\\": \\\"*.go\\\", \\\"path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool\\\", \\\"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\":\"019dc9e9a3ada531d1f06e68f202aa79\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
440 headers:
582 headers:
441 Accept:
583 Accept:
442 - application/json
584 - application/json
@@ -453,41 +595,41 @@ interactions:
453 content_length: -1
595 content_length: -1
454 uncompressed: true
596 uncompressed: true
455 body: |+
597 body: |+
456− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
598+ data: {"id":"chatcmpl-e6689d74d608bc271bd271f2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
457
599
458− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
600+ data: {"id":"chatcmpl-e6689d74d608bc271bd271f2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
459
601
460− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" match"},"finish_reason":null}]}
602+ data: {"id":"chatcmpl-e6689d74d608bc271bd271f2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
461
603
462− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" found"},"finish_reason":null}]}
604+ data: {"id":"chatcmpl-e6689d74d608bc271bd271f2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
463
605
464− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
606+ data: {"id":"chatcmpl-e6689d74d608bc271bd271f2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" match"},"finish_reason":null}]}
465
607
466− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
608+ data: {"id":"chatcmpl-e6689d74d608bc271bd271f2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
467
609
468− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
610+ data: {"id":"chatcmpl-e6689d74d608bc271bd271f2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
469
611
470− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
612+ data: {"id":"chatcmpl-e6689d74d608bc271bd271f2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
471
613
472− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
614+ data: {"id":"chatcmpl-e6689d74d608bc271bd271f2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
473
615
474− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
616+ data: {"id":"chatcmpl-e6689d74d608bc271bd271f2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
475
617
476− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
618+ data: {"id":"chatcmpl-e6689d74d608bc271bd271f2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
477
619
478− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" —"},"finish_reason":null}]}
620+ data: {"id":"chatcmpl-e6689d74d608bc271bd271f2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
479
621
480− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
622+ data: {"id":"chatcmpl-e6689d74d608bc271bd271f2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" —"},"finish_reason":null}]}
481
623
482− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"package"},"finish_reason":null}]}
624+ data: {"id":"chatcmpl-e6689d74d608bc271bd271f2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
483
625
484− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
626+ data: {"id":"chatcmpl-e6689d74d608bc271bd271f2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"package"},"finish_reason":null}]}
485
627
486− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
628+ data: {"id":"chatcmpl-e6689d74d608bc271bd271f2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
487
629
488− data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
630+ data: {"id":"chatcmpl-e6689d74d608bc271bd271f2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
489
631
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}}}
632+ data: {"id":"chatcmpl-e6689d74d608bc271bd271f2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":781,"completion_tokens":17,"total_tokens":7838}}
491
633
492 data: [DONE]
634 data: [DONE]
493
635
@@ -496,4 +638,4 @@ interactions:
496 - text/event-stream
638 - text/event-stream
497 status: 200 OK
639 status: 200 OK
498 code: 200
640 code: 200
499− duration: 1.500804s
641+ duration: 1.624892333s
internal/agent/testdata/TestCoderAgent/glm-5.1/ls_tool.yaml+149−307
@@ -2,48 +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: 35625
10− host: ""
11− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use ls to list the files in the current directory\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
12− headers:
13− Accept:
14− - application/json
15− Content-Type:
16− - application/json
17− User-Agent:
18− - Charm-Crush/devel (https://charm.land/crush)
19− url: https://hyper.charm.land/v1/chat/completions
20− method: POST
21− response:
22− proto: HTTP/2.0
23− proto_major: 2
24− proto_minor: 0
25− content_length: -1
26− uncompressed: true
27− body: |+
28− data: {"id":"chatcmpl-edc9f684f6145a18378c95dd","object":"chat.completion.chunk","created":1782413818,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29−
30− data: {"id":"chatcmpl-edc9f684f6145a18378c95dd","object":"chat.completion.chunk","created":1782413818,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_9fc14d4b22da05b9","type":"function","index":0,"function":{"name":"ls","arguments":""}}]},"finish_reason":null}]}
31−
32− data: {"id":"chatcmpl-edc9f684f6145a18378c95dd","object":"chat.completion.chunk","created":1782413818,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{}"}}]},"finish_reason":null}]}
33−
34− data: {"id":"chatcmpl-edc9f684f6145a18378c95dd","object":"chat.completion.chunk","created":1782413818,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
35−
36− data: {"id":"chatcmpl-edc9f684f6145a18378c95dd","object":"chat.completion.chunk","created":1782413818,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":677,"completion_tokens":5,"total_tokens":8161,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.0009697999999999999,"hypercredits":0.019395999999999997},"remaining":{"hypercredits":0}}}
37−
38− data: [DONE]
39−
40− headers:
41− Content-Type:
42− - text/event-stream
43− status: 200 OK
44− code: 200
45− duration: 1.511164s
46−- id: 1
47 request:
5 request:
48 proto: HTTP/1.1
6 proto: HTTP/1.1
49 proto_major: 1
7 proto_major: 1
@@ -67,341 +25,227 @@ interactions:
67 content_length: -1
25 content_length: -1
68 uncompressed: true
26 uncompressed: true
69 body: |+
27 body: |+
70− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
71−
72− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
73−
74− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
75−
76− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
77−
78− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
79−
80− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
81−
82− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
83−
84− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
85−
86− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
87−
88− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
89−
90− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
91−
92− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
93−
94− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
95−
96− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
97−
98− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
99−
100− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
101−
102− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
103−
104− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" list"},"finish_reason":null}]}
105−
106− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
107−
108− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
109−
110− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
111−
112− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
113−
114− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
115−
116− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
117−
118− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
119−
120− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
121−
122− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
123−
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}]}
125−
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}]}
127−
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}]}
129−
130− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
131−
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}]}
133−
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}]}
135−
136− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
137−
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}]}
139
29
140− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"),"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
141
31
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}]}
32+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
143
33
144− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
145
35
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}]}
36+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
147
37
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}]}
38+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
149
39
150− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
151
41
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}]}
42+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
153
43
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}]}
44+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
155
45
156− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
157
47
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}]}
48+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
159
49
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}]}
50+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
161
51
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}]}
52+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
163
53
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}]}
54+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
165
55
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}]}
56+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
167
57
168− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
169
59
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}]}
60+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
171
61
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}]}
62+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
173
63
174− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
175
65
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}]}
66+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
177
67
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}]}
68+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
179
69
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}]}
70+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
181
71
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}]}
72+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
183
73
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}]}
74+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
185
75
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}]}
76+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
187
77
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}]}
78+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
189
79
190− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" list"},"finish_reason":null}]}
191
81
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}]}
82+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
193
83
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}]}
84+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
195
85
196− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
197
87
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}]}
88+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
199
89
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}]}
90+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
201
91
202− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
203
93
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}]}
94+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
205
95
206− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
207
97
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}]}
98+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" could"},"finish_reason":null}]}
209
99
210− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
211
101
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}]}
102+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
213
103
214− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"List"},"finish_reason":null}]}
215
105
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}]}
106+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
217
107
218− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
219
109
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}]}
110+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
221
111
222− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
223
113
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}]}
114+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
225
115
226− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
227
117
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}]}
118+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
229
119
230− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
231
121
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}]}
122+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
233
123
234− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
235
125
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}]}
126+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"List"},"finish_reason":null}]}
237
127
238− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
239
129
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}]}
130+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
241
131
242− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
243
133
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}]}
134+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
245
135
246− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
247
137
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}]}
138+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
249
139
250− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
251
141
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}]}
142+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
253
143
254− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
255
145
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}]}
146+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
257
147
258− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
259
149
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}]}
150+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
261
151
262− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
263
153
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}]}
154+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
265
155
266− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"List"},"finish_reason":null}]}
267
157
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}]}
158+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" current"},"finish_reason":null}]}
269
159
270− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
271
161
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}]}
162+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
273
163
274− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
275
165
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}]}
166+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ls"},"finish_reason":null}]}
277
167
278− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-2c8aa2f4122002674240a9ca","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":33,"completion_tokens":78,"total_tokens":287}}
279
169
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}]}
170+ data: [DONE]
281−
282− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
283−
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}]}
285−
286− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
287−
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}]}
289−
290− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
291−
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}]}
293−
294− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
295−
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}]}
297−
298− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
299−
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}]}
301−
302− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
303−
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}]}
305−
306− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
307−
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}]}
309−
310− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
311−
312− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
313−
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}]}
315−
316− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
317−
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}]}
319−
320− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
321−
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}]}
323−
324− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
325−
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}]}
327−
328− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
329−
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}]}
331−
332− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
333−
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}]}
335−
336− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
337−
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}]}
339−
340− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
341−
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}]}
343−
344− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
345−
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}]}
347−
348− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
349−
350− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
351−
352− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
353−
354− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
355−
356− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
357
171
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}]}
172+ headers:
173+ Content-Type:
174+ - text/event-stream
175+ status: 200 OK
176+ code: 200
177+ duration: 416.5835ms
178+- id: 1
179+ request:
180+ proto: HTTP/1.1
181+ proto_major: 1
182+ proto_minor: 1
183+ content_length: 33617
184+ host: ""
185+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use ls to list the files in the current directory\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
186+ headers:
187+ Accept:
188+ - application/json
189+ Content-Type:
190+ - application/json
191+ User-Agent:
192+ - Charm-Crush/devel (https://charm.land/crush)
193+ url: https://hyper.charm.land/v1/chat/completions
194+ method: POST
195+ response:
196+ proto: HTTP/2.0
197+ proto_major: 2
198+ proto_minor: 0
199+ content_length: -1
200+ uncompressed: true
201+ body: |+
202+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
359
203
360− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"019dc9e9bc03f955ec83fde143436607","type":"function","index":0,"function":{"name":"ls","arguments":""}}]},"finish_reason":null}]}
361
205
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}]}
206+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
363
207
364− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
365
209
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}]}
210+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"path\": "}}]},"finish_reason":null}]}
367
211
368− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp"}}]},"finish_reason":null}]}
369
213
370− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
371
215
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}]}
216+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
373
217
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}]}
218+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
375
219
376− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
377
221
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}]}
222+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
379
223
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}]}
224+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
381
225
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}]}
226+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
383
227
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}]}
228+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
385
229
386− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
387
231
388− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"List"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
389
233
390− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
391
235
392− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
393
237
394− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" current"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/"}}]},"finish_reason":null}]}
395
239
396− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ls"}}]},"finish_reason":null}]}
397
241
398− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" using"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
399
243
400− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ls"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
401
245
402− data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
246+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
403
247
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}}}
248+ data: {"id":"chatcmpl-652562bbf9ed3ae4004cd04a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":699,"completion_tokens":25,"total_tokens":7764}}
405
249
406 data: [DONE]
250 data: [DONE]
407
251
@@ -410,15 +254,15 @@ interactions:
410 - text/event-stream
254 - text/event-stream
411 status: 200 OK
255 status: 200 OK
412 code: 200
256 code: 200
413− duration: 531.140917ms
257+ duration: 3.379309709s
414- id: 2
258- id: 2
415 request:
259 request:
416 proto: HTTP/1.1
260 proto: HTTP/1.1
417 proto_major: 1
261 proto_major: 1
418 proto_minor: 1
262 proto_minor: 1
419− content_length: 35898
263+ content_length: 33972
420 host: ""
264 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}"
265+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks 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\":\"019dc9e9bc03f955ec83fde143436607\",\"function\":{\"arguments\":\"{\\\"path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool\\\"}\",\"name\":\"ls\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"\\n- /tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool/\\n - go.mod\\n - main.go\\n\",\"tool_call_id\":\"019dc9e9bc03f955ec83fde143436607\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
422 headers:
266 headers:
423 Accept:
267 Accept:
424 - application/json
268 - application/json
@@ -435,45 +279,43 @@ interactions:
435 content_length: -1
279 content_length: -1
436 uncompressed: true
280 uncompressed: true
437 body: |+
281 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}]}
282+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
439−
440− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Two"},"finish_reason":null}]}
441
283
442− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Two"},"finish_reason":null}]}
443
285
444− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
445
287
446− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
447
289
448− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" current"},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
449
291
450− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" current"},"finish_reason":null}]}
451
293
452− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":\n"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
453
295
454− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":\n\n"},"finish_reason":null}]}
455
297
456− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
457
299
458− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
459
301
460− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
461
303
462− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`\n"},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
463
305
464− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`\n"},"finish_reason":null}]}
465
307
466− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
467
309
468− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
469
311
470− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
471
313
472− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
473
315
474− data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
316+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
475
317
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}}}
318+ data: {"id":"chatcmpl-f450c8aff7296e5f59b45ac6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":119,"completion_tokens":18,"total_tokens":7817}}
477
319
478 data: [DONE]
320 data: [DONE]
479
321
@@ -482,4 +324,4 @@ interactions:
482 - text/event-stream
324 - text/event-stream
483 status: 200 OK
325 status: 200 OK
484 code: 200
326 code: 200
485− duration: 1.065962584s
327+ duration: 1.577053417s
internal/agent/testdata/TestCoderAgent/glm-5.1/multiedit_tool.yaml+233−1077
@@ -2,116 +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: 35711
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\\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:
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-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29−
30− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Let"},"finish_reason":null}]}
31−
32− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
33−
34− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
35−
36− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" read"},"finish_reason":null}]}
37−
38− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
39−
40− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
41−
42− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
43−
44− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" see"},"finish_reason":null}]}
45−
46− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" its"},"finish_reason":null}]}
47−
48− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
49−
50− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" contents"},"finish_reason":null}]}
51−
52− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
53−
54− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_be8eea5daa27022a","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
55−
56− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \""}}]},"finish_reason":null}]}
57−
58− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
59−
60− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
61−
62− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
63−
64− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
65−
66− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
67−
68− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
69−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
90− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"it"}}]},"finish_reason":null}]}
91−
92− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
93−
94− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
95−
96− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
97−
98− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
99−
100− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
101−
102− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
103−
104− data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":702,"completion_tokens":43,"total_tokens":8224,"prompt_tokens_details":{"cached_tokens":7479},"completion_tokens_details":{"reasoning_tokens":14},"cost":{"usd":0.0012336,"hypercredits":0.024672},"remaining":{"hypercredits":0}}}
105−
106− data: [DONE]
107−
108− headers:
109− Content-Type:
110− - text/event-stream
111− status: 200 OK
112− code: 200
113− duration: 993.64425ms
114−- id: 1
115 request:
5 request:
116 proto: HTTP/1.1
6 proto: HTTP/1.1
117 proto_major: 1
7 proto_major: 1
@@ -135,747 +25,377 @@ interactions:
135 content_length: -1
25 content_length: -1
136 uncompressed: true
26 uncompressed: true
137 body: |+
27 body: |+
138− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"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}]}
225−
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}]}
227−
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}]}
229−
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}]}
231−
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}]}
233−
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}]}
235−
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}]}
237−
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}]}
239−
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}]}
241−
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}]}
243−
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}]}
245−
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}]}
247−
248− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
249−
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}]}
251−
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}]}
253−
254− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
255−
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}]}
257−
258− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"),"},"finish_reason":null}]}
259−
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}]}
261−
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}]}
263−
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}]}
265−
266− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
267−
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}]}
269−
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}]}
271−
272− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
273−
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}]}
275−
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}]}
277−
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}]}
279−
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}]}
281−
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}]}
283−
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}]}
285−
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}]}
287−
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}]}
289−
290− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
291−
292− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
293−
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}]}
295−
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}]}
297−
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}]}
299−
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}]}
301−
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}]}
303−
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}]}
305−
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}]}
307−
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}]}
309−
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}]}
311−
312− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
313−
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}]}
315−
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}]}
317−
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}]}
319−
320− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
321−
322− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
323−
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}]}
325−
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}]}
327−
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}]}
329−
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}]}
331−
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}]}
333−
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}]}
335−
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}]}
337−
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}]}
339−
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}]}
341−
342− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
343−
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}]}
345−
346− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
347−
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}]}
349−
350− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
351−
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}]}
353−
354− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
355−
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}]}
357−
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}]}
359−
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}]}
361−
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}]}
363−
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}]}
365−
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}]}
367−
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}]}
369−
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}]}
371−
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}]}
373−
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}]}
375−
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}]}
377−
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}]}
379−
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}]}
381−
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}]}
383−
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}]}
385−
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}]}
387−
388− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
389−
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}]}
391−
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}]}
393−
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}]}
395−
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}]}
397−
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}]}
399−
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}]}
401−
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}]}
403−
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}]}
405−
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}]}
407−
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}]}
409−
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}]}
411−
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}]}
413−
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}]}
415−
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}]}
417−
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}]}
419−
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}]}
421−
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}]}
423−
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}]}
425−
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}]}
427−
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}]}
429−
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}]}
431−
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}]}
433−
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}]}
435−
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}]}
437−
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}]}
439−
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}]}
441−
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}]}
443−
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}]}
445
29
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}]}
30+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
447
31
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}]}
32+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
449
33
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}]}
34+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
451
35
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}]}
36+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
453
37
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}]}
38+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
455
39
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}]}
40+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
457
41
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}]}
42+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
459
43
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}]}
44+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
461
45
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}]}
46+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
463
47
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}]}
48+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
465
49
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}]}
50+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
467
51
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}]}
52+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
469
53
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}]}
54+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
471
55
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}]}
56+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
473
57
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}]}
58+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
475
59
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}]}
60+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" mult"},"finish_reason":null}]}
477
61
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}]}
62+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
479
63
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}]}
64+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
481
65
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}]}
66+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ..."},"finish_reason":null}]}
483
67
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}]}
68+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
485
69
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}]}
70+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
487
71
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}]}
72+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
489
73
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}]}
74+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
491
75
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}]}
76+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
493
77
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}]}
78+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
495
79
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}]}
80+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
497
81
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}]}
82+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
499
83
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}]}
84+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
501
85
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}]}
86+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
503
87
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}]}
88+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
505
89
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}]}
90+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
507
91
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}]}
92+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ≤"},"finish_reason":null}]}
509
93
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}]}
94+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
511
95
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}]}
96+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
513
97
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}]}
98+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
515
99
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}]}
100+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
517
101
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}]}
102+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
519
103
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}]}
104+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
521
105
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}]}
106+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
523
107
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}]}
108+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
525
109
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}]}
110+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
527
111
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}]}
112+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
529
113
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}]}
114+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
531
115
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}]}
116+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
533
117
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}]}
118+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Possible"},"finish_reason":null}]}
535
119
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}]}
120+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
537
121
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}]}
122+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
539
123
540− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
541
125
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}]}
126+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Edit"},"finish_reason":null}]}
543
127
544− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
545
129
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}]}
130+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
547
131
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}]}
132+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
549
133
550− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" change"},"finish_reason":null}]}
551
135
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}]}
136+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
553
137
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}]}
138+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
555
139
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}]}
140+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
557
141
558− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
559
143
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}]}
144+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
561
145
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}]}
146+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
563
147
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}]}
148+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
565
149
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}]}
150+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
567
151
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}]}
152+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
569
153
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}]}
154+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Edit"},"finish_reason":null}]}
571
155
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}]}
156+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
573
157
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}]}
158+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
575
159
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}]}
160+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
577
161
578− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" change"},"finish_reason":null}]}
579
163
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}]}
164+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
581
165
582− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
583
167
584− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
585
169
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}]}
170+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
587
171
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}]}
172+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
589
173
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}]}
174+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
591
175
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}]}
176+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
593
177
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}]}
178+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
595
179
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}]}
180+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
597
181
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}]}
182+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
599
183
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}]}
184+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Edit"},"finish_reason":null}]}
601
185
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}]}
186+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
603
187
604− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
605
189
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}]}
190+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
607
191
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}]}
192+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
609
193
610− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
611
195
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}]}
196+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
613
197
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}]}
198+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
615
199
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}]}
200+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
617
201
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}]}
202+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
619
203
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}]}
204+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
621
205
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}]}
206+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
623
207
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}]}
208+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
625
209
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}]}
210+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
627
211
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}]}
212+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
629
213
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}]}
214+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
631
215
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}]}
216+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
633
217
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}]}
218+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
635
219
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}]}
220+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
637
221
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}]}
222+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
639
223
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}]}
224+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
641
225
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}]}
226+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
643
227
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}]}
228+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
645
229
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}]}
230+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
647
231
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}]}
232+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
649
233
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}]}
234+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
651
235
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}]}
236+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
653
237
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}]}
238+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
655
239
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}]}
240+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
657
241
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}]}
242+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
659
243
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}]}
244+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
661
245
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}]}
246+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
663
247
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}]}
248+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" change"},"finish_reason":null}]}
665
249
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}]}
250+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
667
251
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}]}
252+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
669
253
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}]}
254+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
671
255
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}]}
256+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
673
257
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}]}
258+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
675
259
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}]}
260+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
677
261
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}]}
262+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
679
263
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}]}
264+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
681
265
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}]}
266+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
683
267
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}]}
268+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
685
269
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}]}
270+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
687
271
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}]}
272+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
689
273
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}]}
274+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
691
275
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}]}
276+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
693
277
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}]}
278+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
695
279
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}]}
280+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
697
281
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}]}
282+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
699
283
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}]}
284+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
701
285
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}]}
286+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
703
287
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}]}
288+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
705
289
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}]}
290+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
707
291
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}]}
292+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
709
293
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}]}
294+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
711
295
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}]}
296+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
713
297
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}]}
298+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
715
299
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}]}
300+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
717
301
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}]}
302+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
719
303
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}]}
304+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
721
305
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}]}
306+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
723
307
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}]}
308+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
725
309
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}]}
310+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
727
311
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}]}
312+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
729
313
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}]}
314+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
731
315
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}]}
316+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
733
317
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}]}
318+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
735
319
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}]}
320+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
737
321
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}]}
322+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
739
323
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}]}
324+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
741
325
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}]}
326+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
743
327
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}]}
328+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
745
329
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}]}
330+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
747
331
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}]}
332+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
749
333
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}]}
334+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
751
335
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}]}
336+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
753
337
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}]}
338+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
755
339
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}]}
340+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
757
341
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}]}
342+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
759
343
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}]}
344+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
761
345
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}]}
346+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
763
347
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}]}
348+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
765
349
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}]}
350+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" within"},"finish_reason":null}]}
767
351
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}]}
352+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" limit"},"finish_reason":null}]}
769
353
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}]}
354+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
771
355
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}]}
356+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"No"},"finish_reason":null}]}
773
357
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}]}
358+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
775
359
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}]}
360+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/"},"finish_reason":null}]}
777
361
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}]}
362+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"col"},"finish_reason":null}]}
779
363
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}]}
364+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
781
365
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}]}
366+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
783
367
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}]}
368+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
785
369
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}]}
370+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
787
371
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}]}
372+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
789
373
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}]}
374+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
791
375
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}]}
376+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
793
377
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}]}
378+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
795
379
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}]}
380+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Edit"},"finish_reason":null}]}
797
381
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}]}
382+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
799
383
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}]}
384+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
801
385
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}]}
386+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
803
387
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}]}
388+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" change"},"finish_reason":null}]}
805
389
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}]}
390+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" greeting"},"finish_reason":null}]}
807
391
808− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
392+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
809
393
810− data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
394+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" add"},"finish_reason":null}]}
811
395
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}]}
396+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" comment"},"finish_reason":null}]}
813
397
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}]}
398+ data: {"id":"chatcmpl-9c5868646cc950b599874308","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":55,"completion_tokens":193,"total_tokens":424}}
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−
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}}}
879
399
880 data: [DONE]
400 data: [DONE]
881
401
@@ -884,15 +404,15 @@ interactions:
884 - text/event-stream
404 - text/event-stream
885 status: 200 OK
405 status: 200 OK
886 code: 200
406 code: 200
887− duration: 889.289875ms
407+ duration: 613.931542ms
888−- id: 2
408+- id: 1
889 request:
409 request:
890 proto: HTTP/1.1
410 proto: HTTP/1.1
891 proto_major: 1
411 proto_major: 1
892 proto_minor: 1
412 proto_minor: 1
893− content_length: 36227
413+ content_length: 33703
894 host: ""
414 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}"
415+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use multiedit to change 'Hello, World!' to 'Hello, Crush!' and add a comment '// Greeting' above the fmt.Println line in main.go\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
896 headers:
416 headers:
897 Accept:
417 Accept:
898 - application/json
418 - application/json
@@ -909,61 +429,27 @@ interactions:
909 content_length: -1
429 content_length: -1
910 uncompressed: true
430 uncompressed: true
911 body: |+
431 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}]}
432+ data: {"id":"chatcmpl-6dab4f87ef1f9bdc459a0aa2","object":"chat.completion.chunk","created":0,"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
433
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}]}
434+ data: {"id":"chatcmpl-6dab4f87ef1f9bdc459a0aa2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Let"},"finish_reason":null}]}
931
435
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}]}
436+ data: {"id":"chatcmpl-6dab4f87ef1f9bdc459a0aa2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me first read"},"finish_reason":null}]}
933
437
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}]}
438+ data: {"id":"chatcmpl-6dab4f87ef1f9bdc459a0aa2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the main.go file"},"finish_reason":null}]}
935
439
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}]}
440+ data: {"id":"chatcmpl-6dab4f87ef1f9bdc459a0aa2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to see"},"finish_reason":null}]}
937
441
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}]}
442+ data: {"id":"chatcmpl-6dab4f87ef1f9bdc459a0aa2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" its current"},"finish_reason":null}]}
939
443
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}]}
444+ data: {"id":"chatcmpl-6dab4f87ef1f9bdc459a0aa2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
941
445
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}]}
446+ data: {"id":"chatcmpl-6dab4f87ef1f9bdc459a0aa2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
943
447
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}]}
448+ data: {"id":"chatcmpl-6dab4f87ef1f9bdc459a0aa2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_8b62","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
945
449
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}]}
450+ data: {"id":"chatcmpl-6dab4f87ef1f9bdc459a0aa2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\"}"}}]},"finish_reason":null}]}
947
451
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}]}
452+ data: {"id":"chatcmpl-6dab4f87ef1f9bdc459a0aa2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":7732,"completion_tokens":44,"total_tokens":7808}}
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
453
968 data: [DONE]
454 data: [DONE]
969
455
@@ -972,15 +458,15 @@ interactions:
972 - text/event-stream
458 - text/event-stream
973 status: 200 OK
459 status: 200 OK
974 code: 200
460 code: 200
975− duration: 950.328ms
461+ duration: 4.356856959s
976−- id: 3
462+- id: 2
977 request:
463 request:
978 proto: HTTP/1.1
464 proto: HTTP/1.1
979 proto_major: 1
465 proto_major: 1
980 proto_minor: 1
466 proto_minor: 1
981− content_length: 36887
467+ content_length: 34193
982 host: ""
468 host: ""
983− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use multiedit to change 'Hello, World!' to 'Hello, Crush!' and add a comment '// Greeting' above the fmt.Println line in main.go\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_be8eea5daa27022a\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the file to see its current contents.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_be8eea5daa27022a\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_3cee374c3e013d11\",\"function\":{\"arguments\":\"{\\\"edits\\\": [{\\\"new_string\\\": \\\"Hello, Crush!\\\", \\\"old_string\\\": \\\"Hello, World!\\\"}, {\\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, World!\\\\\\\")\\\"}], \\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"multiedit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<result>\\nApplied 1 of 2 edits to file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go (1 edit(s) failed)\\n</result>\\n\",\"tool_call_id\":\"call_3cee374c3e013d11\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
469+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks 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_8b62\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the main.go file to see its current content.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n</file>\\n\",\"tool_call_id\":\"call_8b62\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
984 headers:
470 headers:
985 Accept:
471 Accept:
986 - application/json
472 - application/json
@@ -997,261 +483,13 @@ interactions:
997 content_length: -1
483 content_length: -1
998 uncompressed: true
484 uncompressed: true
999 body: |+
485 body: |+
1000− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
486+ data: {"id":"chatcmpl-effa993934686229b6fba6c1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
1001−
1002− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
1003−
1004− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
1005−
1006− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" edit"},"finish_reason":null}]}
1007−
1008− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" succeeded"},"finish_reason":null}]}
1009−
1010− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
1011−
1012− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"changing"},"finish_reason":null}]}
1013−
1014− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
1015−
1016− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
1017−
1018− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
1019−
1020− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
1021−
1022− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"!\""},"finish_reason":null}]}
1023−
1024− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
1025−
1026− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
1027−
1028− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
1029−
1030− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
1031−
1032− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
1033−
1034− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"!\")"},"finish_reason":null}]}
1035−
1036− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" but"},"finish_reason":null}]}
1037−
1038− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" then"},"finish_reason":null}]}
1039−
1040− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
1041−
1042− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" second"},"finish_reason":null}]}
1043−
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}]}
1045−
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}]}
1047−
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}]}
1049−
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}]}
1051−
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}]}
1053−
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}]}
1055−
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}]}
1057−
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}]}
1059−
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}]}
1061−
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}]}
1063−
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}]}
1065−
1066− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
1067−
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}]}
1069−
1070− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
1071−
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}]}
1073−
1074− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"!\""},"finish_reason":null}]}
1075−
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}]}
1077−
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}]}
1079−
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}]}
1081−
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}]}
1083−
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}]}
1085−
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}]}
1087−
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}]}
1089−
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}]}
1091−
1092− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
1093−
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}]}
1095−
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}]}
1097−
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}]}
1099−
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}]}
1101−
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}]}
1103−
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}]}
1105−
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}]}
1107−
1108− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
1109−
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}]}
1111−
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}]}
1113−
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}]}
1115−
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}]}
1117
487
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}]}
488+ data: {"id":"chatcmpl-effa993934686229b6fba6c1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_8129","type":"function","index":0,"function":{"name":"multiedit","arguments":""}}]},"finish_reason":null}]}
1119
489
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}]}
490+ data: {"id":"chatcmpl-effa993934686229b6fba6c1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"edits\": [{\"new_string\": \"\\t// Greeting\\n\\tfmt.Println(\\\"Hello, Crush!\\\")\", \"old_string\": \"\\tfmt.Println(\\\"Hello, World!\\\")\"}], \"file_path\": \"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\"}"}}]},"finish_reason":null}]}
1121
491
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}]}
492+ data: {"id":"chatcmpl-effa993934686229b6fba6c1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":7819,"completion_tokens":75,"total_tokens":7926}}
1123−
1124− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" already"},"finish_reason":null}]}
1125−
1126− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"-mod"},"finish_reason":null}]}
1127−
1128− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"ified"},"finish_reason":null}]}
1129−
1130− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
1131−
1132− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
1133−
1134− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Let"},"finish_reason":null}]}
1135−
1136− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
1137−
1138− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" fix"},"finish_reason":null}]}
1139−
1140− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
1141−
1142− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" second"},"finish_reason":null}]}
1143−
1144− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" edit"},"finish_reason":null}]}
1145−
1146− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" by"},"finish_reason":null}]}
1147−
1148− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
1149−
1150− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
1151−
1152− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" updated"},"finish_reason":null}]}
1153−
1154− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
1155−
1156− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
1157−
1158− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_5ca3b6e1898be023","type":"function","index":0,"function":{"name":"edit","arguments":""}}]},"finish_reason":null}]}
1159−
1160− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \""}}]},"finish_reason":null}]}
1161−
1162− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
1163−
1164− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
1165−
1166− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
1167−
1168− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
1169−
1170− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
1171−
1172− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
1173−
1174− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
1175−
1176− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
1177−
1178− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
1179−
1180− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
1181−
1182− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
1183−
1184− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
1185−
1186− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
1187−
1188− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/m"}}]},"finish_reason":null}]}
1189−
1190− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ult"}}]},"finish_reason":null}]}
1191−
1192− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ied"}}]},"finish_reason":null}]}
1193−
1194− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"it"}}]},"finish_reason":null}]}
1195−
1196− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
1197−
1198− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
1199−
1200− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
1201−
1202− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
1203−
1204− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"new_string\": \""}}]},"finish_reason":null}]}
1205−
1206− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\t"}}]},"finish_reason":null}]}
1207−
1208− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"//"}}]},"finish_reason":null}]}
1209−
1210− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" G"}}]},"finish_reason":null}]}
1211−
1212− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"reeting"}}]},"finish_reason":null}]}
1213−
1214− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\n"}}]},"finish_reason":null}]}
1215−
1216− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\tfmt"}}]},"finish_reason":null}]}
1217−
1218− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".Println"}}]},"finish_reason":null}]}
1219−
1220− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\""}}]},"finish_reason":null}]}
1221−
1222− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Hello"}}]},"finish_reason":null}]}
1223−
1224− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null}]}
1225−
1226− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Crush"}}]},"finish_reason":null}]}
1227−
1228− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"!\\\")"}}]},"finish_reason":null}]}
1229−
1230− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
1231−
1232− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"old_string\": \""}}]},"finish_reason":null}]}
1233−
1234− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\tfmt"}}]},"finish_reason":null}]}
1235−
1236− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".Println"}}]},"finish_reason":null}]}
1237−
1238− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\""}}]},"finish_reason":null}]}
1239−
1240− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Hello"}}]},"finish_reason":null}]}
1241−
1242− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null}]}
1243−
1244− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Crush"}}]},"finish_reason":null}]}
1245−
1246− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"!\\\")"}}]},"finish_reason":null}]}
1247−
1248− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
1249−
1250− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
1251−
1252− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
1253−
1254− data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":936,"completion_tokens":140,"total_tokens":8555,"prompt_tokens_details":{"cached_tokens":7479},"completion_tokens_details":{"reasoning_tokens":95},"cost":{"usd":0.0023444,"hypercredits":0.046888},"remaining":{"hypercredits":0}}}
1255
493
1256 data: [DONE]
494 data: [DONE]
1257
495
@@ -1260,15 +498,15 @@ interactions:
1260 - text/event-stream
498 - text/event-stream
1261 status: 200 OK
499 status: 200 OK
1262 code: 200
500 code: 200
1263− duration: 1.048298875s
501+ duration: 2.408553042s
1264−- id: 4
502+- id: 3
1265 request:
503 request:
1266 proto: HTTP/1.1
504 proto: HTTP/1.1
1267 proto_major: 1
505 proto_major: 1
1268 proto_minor: 1
506 proto_minor: 1
1269− content_length: 37817
507+ content_length: 34733
1270 host: ""
508 host: ""
1271− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use multiedit to change 'Hello, World!' to 'Hello, Crush!' and add a comment '// Greeting' above the fmt.Println line in main.go\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_be8eea5daa27022a\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the file to see its current contents.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_be8eea5daa27022a\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_3cee374c3e013d11\",\"function\":{\"arguments\":\"{\\\"edits\\\": [{\\\"new_string\\\": \\\"Hello, Crush!\\\", \\\"old_string\\\": \\\"Hello, World!\\\"}, {\\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, World!\\\\\\\")\\\"}], \\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"multiedit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<result>\\nApplied 1 of 2 edits to file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go (1 edit(s) failed)\\n</result>\\n\",\"tool_call_id\":\"call_3cee374c3e013d11\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_5ca3b6e1898be023\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\", \\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\"}\",\"name\":\"edit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The first edit succeeded (changing \\\"Hello, World!\\\" to \\\"Hello, Crush!\\\") but then the second edit failed because it was looking for the old string with \\\"Hello, World!\\\" which no longer exists after the first edit. Since multiedit applies edits sequentially, the second edit needs to reference the already-modified content.\\n\\nLet me fix the second edit by using the updated content.\"},{\"content\":\"<result>\\nContent replaced in file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\n</result>\\n\",\"tool_call_id\":\"call_5ca3b6e1898be023\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
509+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks 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_8b62\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the main.go file to see its current content.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n</file>\\n\",\"tool_call_id\":\"call_8b62\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_8129\",\"function\":{\"arguments\":\"{\\\"edits\\\": [{\\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, World!\\\\\\\")\\\"}], \\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"multiedit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<result>\\nApplied 1 edits to file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\n</result>\\n\",\"tool_call_id\":\"call_8129\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
1272 headers:
510 headers:
1273 Accept:
511 Accept:
1274 - application/json
512 - application/json
@@ -1285,59 +523,13 @@ interactions:
1285 content_length: -1
523 content_length: -1
1286 uncompressed: true
524 uncompressed: true
1287 body: |+
525 body: |+
1288− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
526+ data: {"id":"chatcmpl-94d03697ead90e33bed4048f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
1289−
1290− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_0740d7fb4460c2fe","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
1291−
1292− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \""}}]},"finish_reason":null}]}
1293−
1294− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
1295−
1296− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
1297−
1298− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
1299−
1300− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
1301−
1302− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
1303−
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}]}
1305−
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}]}
1307−
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}]}
1309−
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}]}
1311−
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}]}
1313−
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}]}
1315−
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}]}
1317−
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}]}
1319
527
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}]}
528+ data: {"id":"chatcmpl-94d03697ead90e33bed4048f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_8a23","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
1321
529
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}]}
530+ data: {"id":"chatcmpl-94d03697ead90e33bed4048f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\"}"}}]},"finish_reason":null}]}
1323
531
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}]}
532+ data: {"id":"chatcmpl-94d03697ead90e33bed4048f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":62,"completion_tokens":30,"total_tokens":7996}}
1325−
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}]}
1327−
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}]}
1329−
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}]}
1331−
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}]}
1333−
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}]}
1335−
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}]}
1337−
1338− data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
1339−
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}}}
1341
533
1342 data: [DONE]
534 data: [DONE]
1343
535
@@ -1346,15 +538,15 @@ interactions:
1346 - text/event-stream
538 - text/event-stream
1347 status: 200 OK
539 status: 200 OK
1348 code: 200
540 code: 200
1349− duration: 1.047383917s
541+ duration: 1.045456s
1350−- id: 5
542+- id: 4
1351 request:
543 request:
1352 proto: HTTP/1.1
544 proto: HTTP/1.1
1353 proto_major: 1
545 proto_major: 1
1354 proto_minor: 1
546 proto_minor: 1
1355− content_length: 38300
547+ content_length: 35183
1356 host: ""
548 host: ""
1357− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use multiedit to change 'Hello, World!' to 'Hello, Crush!' and add a comment '// Greeting' above the fmt.Println line in main.go\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_be8eea5daa27022a\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the file to see its current contents.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_be8eea5daa27022a\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_3cee374c3e013d11\",\"function\":{\"arguments\":\"{\\\"edits\\\": [{\\\"new_string\\\": \\\"Hello, Crush!\\\", \\\"old_string\\\": \\\"Hello, World!\\\"}, {\\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, World!\\\\\\\")\\\"}], \\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"multiedit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<result>\\nApplied 1 of 2 edits to file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go (1 edit(s) failed)\\n</result>\\n\",\"tool_call_id\":\"call_3cee374c3e013d11\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_5ca3b6e1898be023\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\", \\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\"}\",\"name\":\"edit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The first edit succeeded (changing \\\"Hello, World!\\\" to \\\"Hello, Crush!\\\") but then the second edit failed because it was looking for the old string with \\\"Hello, World!\\\" which no longer exists after the first edit. Since multiedit applies edits sequentially, the second edit needs to reference the already-modified content.\\n\\nLet me fix the second edit by using the updated content.\"},{\"content\":\"<result>\\nContent replaced in file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\n</result>\\n\",\"tool_call_id\":\"call_5ca3b6e1898be023\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_0740d7fb4460c2fe\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\t// Greeting\\n 7|\\tfmt.Println(\\\"Hello, Crush!\\\")\\n 8|}\\n 9|\\n</file>\\n\",\"tool_call_id\":\"call_0740d7fb4460c2fe\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
549+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/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>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks 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_8b62\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the main.go file to see its current content.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n</file>\\n\",\"tool_call_id\":\"call_8b62\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_8129\",\"function\":{\"arguments\":\"{\\\"edits\\\": [{\\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, World!\\\\\\\")\\\"}], \\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"multiedit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<result>\\nApplied 1 edits to file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\n</result>\\n\",\"tool_call_id\":\"call_8129\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_8a23\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\t// Greeting\\n 7|\\tfmt.Println(\\\"Hello, Crush!\\\")\\n 8|}\\n</file>\\n\",\"tool_call_id\":\"call_8a23\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
1358 headers:
550 headers:
1359 Accept:
551 Accept:
1360 - application/json
552 - application/json
@@ -1371,63 +563,27 @@ interactions:
1371 content_length: -1
563 content_length: -1
1372 uncompressed: true
564 uncompressed: true
1373 body: |+
565 body: |+
1374− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
566+ data: {"id":"chatcmpl-1c0ef90bae6a03ab457abd7c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
1375−
1376− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done"},"finish_reason":null}]}
1377−
1378− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" —"},"finish_reason":null}]}
1379−
1380− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1381−
1382− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
1383−
1384− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
1385−
1386− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
1387−
1388− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"6"},"finish_reason":null}]}
1389−
1390− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
1391−
1392− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"7"},"finish_reason":null}]}
1393−
1394− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1395−
1396− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" now"},"finish_reason":null}]}
1397−
1398− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" has"},"finish_reason":null}]}
1399−
1400− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
1401−
1402− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1403−
1404− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"//"},"finish_reason":null}]}
1405−
1406− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" G"},"finish_reason":null}]}
1407−
1408− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"reeting"},"finish_reason":null}]}
1409−
1410− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1411
567
1412− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" comment"},"finish_reason":null}]}
568+ data: {"id":"chatcmpl-1c0ef90bae6a03ab457abd7c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done. Changed"},"finish_reason":null}]}
1413
569
1414− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
570+ data: {"id":"chatcmpl-1c0ef90bae6a03ab457abd7c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
1415
571
1416− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `\""},"finish_reason":null}]}
572+ data: {"id":"chatcmpl-1c0ef90bae6a03ab457abd7c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" greeting text"},"finish_reason":null}]}
1417
573
1418− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
574+ data: {"id":"chatcmpl-1c0ef90bae6a03ab457abd7c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and added the"},"finish_reason":null}]}
1419
575
1420− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
576+ data: {"id":"chatcmpl-1c0ef90bae6a03ab457abd7c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `// Greeting"},"finish_reason":null}]}
1421
577
1422− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Crush"},"finish_reason":null}]}
578+ data: {"id":"chatcmpl-1c0ef90bae6a03ab457abd7c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"` comment above"},"finish_reason":null}]}
1423
579
1424− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"!\""},"finish_reason":null}]}
580+ data: {"id":"chatcmpl-1c0ef90bae6a03ab457abd7c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
1425
581
1426− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
582+ data: {"id":"chatcmpl-1c0ef90bae6a03ab457abd7c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `fmt.Println`"},"finish_reason":null}]}
1427
583
1428− data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
584+ data: {"id":"chatcmpl-1c0ef90bae6a03ab457abd7c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" line."},"finish_reason":null}]}
1429
585
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}}}
586+ data: {"id":"chatcmpl-1c0ef90bae6a03ab457abd7c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":94,"completion_tokens":24,"total_tokens":8086}}
1431
587
1432 data: [DONE]
588 data: [DONE]
1433
589
@@ -1436,4 +592,4 @@ interactions:
1436 - text/event-stream
592 - text/event-stream
1437 status: 200 OK
593 status: 200 OK
1438 code: 200
594 code: 200
1439− duration: 902.639042ms
595+ duration: 985.759ms
internal/agent/testdata/TestCoderAgent/glm-5.1/parallel_tool_calls.yaml+151−505
@@ -2,86 +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: 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
85 request:
5 request:
86 proto: HTTP/1.1
6 proto: HTTP/1.1
87 proto_major: 1
7 proto_major: 1
@@ -105,463 +25,251 @@ interactions:
105 content_length: -1
25 content_length: -1
106 uncompressed: true
26 uncompressed: true
107 body: |+
27 body: |+
108− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
109−
110− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
111−
112− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
113−
114− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
115−
116− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
117−
118− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
119−
120− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
121−
122− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
123−
124− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
125−
126− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
127−
128− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
129−
130− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
131−
132− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
133−
134− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
135−
136− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
137−
138− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
139−
140− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
141−
142− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
143−
144− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
145−
146− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
147−
148− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
149−
150− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
151−
152− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
153−
154− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
155−
156− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
157−
158− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" list"},"finish_reason":null}]}
159−
160− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
161−
162− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
163−
164− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
165−
166− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
167−
168− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
169−
170− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
171−
172− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" very"},"finish_reason":null}]}
173−
174− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" important"},"finish_reason":null}]}
175−
176− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
177−
178− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" you"},"finish_reason":null}]}
179−
180− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" run"},"finish_reason":null}]}
181−
182− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" both"},"finish_reason":null}]}
183−
184− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
185−
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}]}
187−
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}]}
189−
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}]}
191−
192− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
193−
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}]}
195−
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}]}
197−
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}]}
199−
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}]}
201−
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}]}
203−
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}]}
205−
206− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
207−
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}]}
209−
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}]}
211−
212− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
213−
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}]}
215−
216− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
217−
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}]}
219−
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}]}
221−
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}]}
223−
224− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
225−
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}]}
227−
228− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
229−
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}]}
231−
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}]}
233−
234− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
235−
236− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
237
29
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}]}
30+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
239
31
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}]}
32+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
241
33
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}]}
34+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
243
35
244− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
245
37
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}]}
38+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
247
39
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}]}
40+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
249
41
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}]}
42+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
251
43
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}]}
44+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
253
45
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}]}
46+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
255
47
256− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
257
49
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}]}
50+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
259
51
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}]}
52+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
261
53
262− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
263
55
264− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
265
57
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}]}
58+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
267
59
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}]}
60+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
269
61
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}]}
62+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
271
63
272− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
273
65
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}]}
66+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
275
67
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}]}
68+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
277
69
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}]}
70+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
279
71
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}]}
72+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
281
73
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}]}
74+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
283
75
284− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
285
77
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}]}
78+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
287
79
288− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" list"},"finish_reason":null}]}
289
81
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}]}
82+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
291
83
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}]}
84+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
293
85
294− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
295
87
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}]}
88+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
297
89
298− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
299
91
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}]}
92+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
301
93
302− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" very"},"finish_reason":null}]}
303
95
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}]}
96+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" important"},"finish_reason":null}]}
305
97
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}]}
98+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
307
99
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}]}
100+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" you"},"finish_reason":null}]}
309
101
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}]}
102+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" run"},"finish_reason":null}]}
311
103
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}]}
104+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" both"},"finish_reason":null}]}
313
105
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}]}
106+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
315
107
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}]}
108+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" calls"},"finish_reason":null}]}
317
109
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}]}
110+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
319
111
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}]}
112+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" parallel"},"finish_reason":null}]}
321
113
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}]}
114+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
323
115
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}]}
116+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
325
117
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}]}
118+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
327
119
328− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
329
121
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}]}
122+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
331
123
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}]}
124+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
333
125
334− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\u003c="},"finish_reason":null}]}
335
127
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}]}
128+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
337
129
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}]}
130+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
339
131
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}]}
132+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
341
133
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}]}
134+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
343
135
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}]}
136+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
345
137
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}]}
138+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
347
139
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}]}
140+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
349
141
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}]}
142+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
351
143
352− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
353
145
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}]}
146+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
355
147
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}]}
148+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
357
149
358− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
359
151
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}]}
152+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
361
153
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}]}
154+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
363
155
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}]}
156+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Parallel"},"finish_reason":null}]}
365
157
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}]}
158+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
367
159
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}]}
160+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
369
161
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}]}
162+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
371
163
372− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
373
165
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}]}
166+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
375
167
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}]}
168+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
377
169
378− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
379
171
380− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
381
173
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}]}
174+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
383
175
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}]}
176+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
385
177
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}]}
178+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
387
179
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}]}
180+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Run"},"finish_reason":null}]}
389
181
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}]}
182+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
391
183
392− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
393
185
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}]}
186+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
395
187
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}]}
188+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
397
189
398− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" parallel"},"finish_reason":null}]}
399
191
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}]}
192+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
401
193
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}]}
194+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That"},"finish_reason":null}]}
403
195
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}]}
196+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
405
197
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}]}
198+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
407
199
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}]}
200+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
409
201
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}]}
202+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
411
203
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}]}
204+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
413
205
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}]}
206+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That"},"finish_reason":null}]}
415
207
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}]}
208+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fits"},"finish_reason":null}]}
417
209
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}]}
210+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
419
211
420− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
421
213
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}]}
214+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Run"},"finish_reason":null}]}
423
215
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}]}
216+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" glob"},"finish_reason":null}]}
425
217
426− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
427
219
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}]}
220+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ls"},"finish_reason":null}]}
429
221
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}]}
222+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" commands"},"finish_reason":null}]}
431
223
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}]}
224+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
433
225
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}]}
226+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" parallel"},"finish_reason":null}]}
435
227
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}]}
228+ data: {"id":"chatcmpl-06b4087d62ee7ad908db54aa","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":36,"completion_tokens":108,"total_tokens":336}}
437
229
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}]}
230+ data: [DONE]
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
231
554− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
232+ headers:
233+ Content-Type:
234+ - text/event-stream
235+ status: 200 OK
236+ code: 200
237+ duration: 492.057167ms
238+- id: 1
239+ request:
240+ proto: HTTP/1.1
241+ proto_major: 1
242+ proto_minor: 1
243+ content_length: 33714
244+ host: ""
245+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use glob to find all .go files and use ls to list the current directory, it is very important that you run both tool calls in parallel\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
246+ headers:
247+ Accept:
248+ - application/json
249+ Content-Type:
250+ - application/json
251+ User-Agent:
252+ - Charm-Crush/devel (https://charm.land/crush)
253+ url: https://hyper.charm.land/v1/chat/completions
254+ method: POST
255+ response:
256+ proto: HTTP/2.0
257+ proto_major: 2
258+ proto_minor: 0
259+ content_length: -1
260+ uncompressed: true
261+ body: |+
262+ data: {"id":"chatcmpl-4e13d16170daa77ea5778bd0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
555
263
556− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-4e13d16170daa77ea5778bd0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_cb4f","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
557
265
558− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ls"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-4e13d16170daa77ea5778bd0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"pattern\": \"**/*.go\"}"}}]},"finish_reason":null}]}
559
267
560− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-4e13d16170daa77ea5778bd0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_9f4c","type":"function","index":1,"function":{"name":"ls","arguments":""}}]},"finish_reason":null}]}
561
269
562− data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
270+ data: {"id":"chatcmpl-4e13d16170daa77ea5778bd0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"{\"path\": \"/tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls\"}"}}]},"finish_reason":null}]}
563
271
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}}}
272+ data: {"id":"chatcmpl-4e13d16170daa77ea5778bd0","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":719,"completion_tokens":37,"total_tokens":7796}}
565
273
566 data: [DONE]
274 data: [DONE]
567
275
@@ -570,15 +278,15 @@ interactions:
570 - text/event-stream
278 - text/event-stream
571 status: 200 OK
279 status: 200 OK
572 code: 200
280 code: 200
573− duration: 587.031833ms
281+ duration: 3.360914459s
574- id: 2
282- id: 2
575 request:
283 request:
576 proto: HTTP/1.1
284 proto: HTTP/1.1
577 proto_major: 1
285 proto_major: 1
578 proto_minor: 1
286 proto_minor: 1
579− content_length: 36330
287+ content_length: 34274
580 host: ""
288 host: ""
581− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use glob to find all .go files and use ls to list the current directory, it is very important that you run both tool calls in parallel\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_863d2e4c3c1b490c\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/*.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"},{\"id\":\"call_ca7def41fb593fc5\",\"function\":{\"arguments\":\"{}\",\"name\":\"ls\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to run glob and ls in parallel.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls/main.go\",\"tool_call_id\":\"call_863d2e4c3c1b490c\",\"role\":\"tool\"},{\"content\":\"\\n- /tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls/\\n - go.mod\\n - main.go\\n\",\"tool_call_id\":\"call_ca7def41fb593fc5\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
289+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks 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_cb4f\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/*.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"},{\"id\":\"call_9f4c\",\"function\":{\"arguments\":\"{\\\"path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls\\\"}\",\"name\":\"ls\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls/main.go\",\"tool_call_id\":\"call_cb4f\",\"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_9f4c\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
582 headers:
290 headers:
583 Accept:
291 Accept:
584 - application/json
292 - application/json
@@ -595,85 +303,23 @@ interactions:
595 content_length: -1
303 content_length: -1
596 uncompressed: true
304 uncompressed: true
597 body: |+
305 body: |+
598− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-e5eb3ecd70173f67ef96ded5","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
599−
600− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
601−
602− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" **"},"finish_reason":null}]}
603−
604− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"glob"},"finish_reason":null}]}
605−
606− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null}]}
607−
608− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" found"},"finish_reason":null}]}
609−
610− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
611−
612− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
613−
614− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `."},"finish_reason":null}]}
615−
616− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
617−
618− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
619−
620− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
621−
622− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
623−
624− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
625−
626− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
627−
628− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
629−
630− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`\n"},"finish_reason":null}]}
631−
632− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
633−
634− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" **"},"finish_reason":null}]}
635−
636− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ls"},"finish_reason":null}]}
637−
638− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null}]}
639−
640− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" shows"},"finish_reason":null}]}
641−
642− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
643−
644− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"2"},"finish_reason":null}]}
645−
646− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" items"},"finish_reason":null}]}
647−
648− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
649−
650− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
651−
652− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
653−
654− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
655−
656− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
657−
658− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
659−
660− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
661
307
662− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-e5eb3ecd70173f67ef96ded5","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found "},"finish_reason":null}]}
663
309
664− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-e5eb3ecd70173f67ef96ded5","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1 `.go`"},"finish_reason":null}]}
665
311
666− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-e5eb3ecd70173f67ef96ded5","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file: `main"},"finish_reason":null}]}
667
313
668− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-e5eb3ecd70173f67ef96ded5","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go`. The directory"},"finish_reason":null}]}
669
315
670− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-e5eb3ecd70173f67ef96ded5","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" also"},"finish_reason":null}]}
671
317
672− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-e5eb3ecd70173f67ef96ded5","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" contains `go.mod"},"finish_reason":null}]}
673
319
674− data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
320+ data: {"id":"chatcmpl-e5eb3ecd70173f67ef96ded5","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
675
321
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}}}
322+ data: {"id":"chatcmpl-e5eb3ecd70173f67ef96ded5","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":77,"completion_tokens":21,"total_tokens":7874}}
677
323
678 data: [DONE]
324 data: [DONE]
679
325
@@ -682,4 +328,4 @@ interactions:
682 - text/event-stream
328 - text/event-stream
683 status: 200 OK
329 status: 200 OK
684 code: 200
330 code: 200
685− duration: 1.056707666s
331+ duration: 919.896166ms
internal/agent/testdata/TestCoderAgent/glm-5.1/read_a_file.yaml+129−218
@@ -18,6 +18,39 @@ interactions:
18 - Charm-Crush/devel (https://charm.land/crush)
18 - Charm-Crush/devel (https://charm.land/crush)
19 url: https://hyper.charm.land/v1/chat/completions
19 url: https://hyper.charm.land/v1/chat/completions
20 method: POST
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+ {"error":{"message":"stream error: internal server error: {\"detail\":\"We encountered an error processing your request. Please try again.\"}","type":"server_error","code":null}}
29+ headers:
30+ Content-Type:
31+ - application/json
32+ content-type:
33+ - application/json
34+ status: 500 Internal Server Error
35+ code: 500
36+ duration: 1m21.915543375s
37+- id: 1
38+ request:
39+ proto: HTTP/1.1
40+ proto_major: 1
41+ proto_minor: 1
42+ content_length: 33587
43+ host: ""
44+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"Read the go mod\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
45+ headers:
46+ Accept:
47+ - application/json
48+ Content-Type:
49+ - application/json
50+ User-Agent:
51+ - Charm-Crush/devel (https://charm.land/crush)
52+ url: https://hyper.charm.land/v1/chat/completions
53+ method: POST
21 response:
54 response:
22 proto: HTTP/2.0
55 proto: HTTP/2.0
23 proto_major: 2
56 proto_major: 2
@@ -25,149 +58,25 @@ interactions:
25 content_length: -1
58 content_length: -1
26 uncompressed: true
59 uncompressed: true
27 body: |+
60 body: |+
28− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
61+ data: {"id":"chatcmpl-4223837bb90de9821e63f999","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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
62
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}]}
63+ data: {"id":"chatcmpl-4223837bb90de9821e63f999","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"019dc9e71b7704014e96e52229b8325c","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
81
64
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}]}
65+ data: {"id":"chatcmpl-4223837bb90de9821e63f999","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
83
66
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}]}
67+ data: {"id":"chatcmpl-4223837bb90de9821e63f999","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
85
68
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}]}
69+ data: {"id":"chatcmpl-4223837bb90de9821e63f999","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"pattern\": "}}]},"finish_reason":null}]}
87
70
88− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
71+ data: {"id":"chatcmpl-4223837bb90de9821e63f999","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"go"}}]},"finish_reason":null}]}
89
72
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}]}
73+ data: {"id":"chatcmpl-4223837bb90de9821e63f999","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".mod"}}]},"finish_reason":null}]}
91
74
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}]}
75+ data: {"id":"chatcmpl-4223837bb90de9821e63f999","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
93
76
94− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
77+ data: {"id":"chatcmpl-4223837bb90de9821e63f999","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
95
78
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}]}
79+ data: {"id":"chatcmpl-4223837bb90de9821e63f999","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":693,"completion_tokens":11,"total_tokens":7744}}
97−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
168− data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
169−
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
80
172 data: [DONE]
81 data: [DONE]
173
82
@@ -176,15 +85,15 @@ interactions:
176 - text/event-stream
85 - text/event-stream
177 status: 200 OK
86 status: 200 OK
178 code: 200
87 code: 200
179− duration: 466.702584ms
88+ duration: 1m26.000111958s
180−- id: 1
89+- id: 2
181 request:
90 request:
182 proto: HTTP/1.1
91 proto: HTTP/1.1
183 proto_major: 1
92 proto_major: 1
184 proto_minor: 1
93 proto_minor: 1
185− content_length: 35595
94+ content_length: 774
186 host: ""
95 host: ""
187− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"Read the go mod\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
96+ 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\nRead the go mod\n <think>\n\n</think>","role":"user"}],"model":"gpt-oss-120b","max_completion_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
188 headers:
97 headers:
189 Accept:
98 Accept:
190 - application/json
99 - application/json
@@ -201,47 +110,43 @@ interactions:
201 content_length: -1
110 content_length: -1
202 uncompressed: true
111 uncompressed: true
203 body: |+
112 body: |+
204− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
113+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
205−
206− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
207−
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}]}
209
114
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}]}
115+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
211
116
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}]}
117+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
213
118
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}]}
119+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
215
120
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}]}
121+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
217
122
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}]}
123+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
219
124
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}]}
125+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
221
126
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}]}
127+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
223
128
224− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
129+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
225
130
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}]}
131+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
227
132
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}]}
133+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
229
134
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}]}
135+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
231
136
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}]}
137+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content:\\n\\n"},"finish_reason":null}]}
233
138
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}]}
139+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Read the go mod\". So we need a concise title, same language (English). Under "},"finish_reason":null}]}
235
140
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}]}
141+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50 chars. Summarize. So title could be \"Reading the Go Mod File\". That's under 50"},"finish_reason":null}]}
237
142
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}]}
143+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":". One line, no quotes. Return just that."},"finish_reason":null}]}
239
144
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}]}
145+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
241
146
242− data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
147+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Reading the Go Mod File"},"finish_reason":null}]}
243
148
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}}}
149+ data: {"id":"chatcmpl-637a7943e160ccbdc1842276","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":80,"completion_tokens":82,"total_tokens":290}}
245
150
246 data: [DONE]
151 data: [DONE]
247
152
@@ -250,15 +155,15 @@ interactions:
250 - text/event-stream
155 - text/event-stream
251 status: 200 OK
156 status: 200 OK
252 code: 200
157 code: 200
253− duration: 1.034875875s
158+ duration: 1m37.771368167s
254−- id: 2
159+- id: 3
255 request:
160 request:
256 proto: HTTP/1.1
161 proto: HTTP/1.1
257 proto_major: 1
162 proto_major: 1
258 proto_minor: 1
163 proto_minor: 1
259− content_length: 35935
164+ content_length: 33886
260 host: ""
165 host: ""
261− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"Read the go mod\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_6656c17dd769fe3b\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/go.mod\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants to read a go.mod file.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\",\"tool_call_id\":\"call_6656c17dd769fe3b\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
166+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks 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\":\"019dc9e71b7704014e96e52229b8325c\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"go.mod\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\",\"tool_call_id\":\"019dc9e71b7704014e96e52229b8325c\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
262 headers:
167 headers:
263 Accept:
168 Accept:
264 - application/json
169 - application/json
@@ -275,55 +180,57 @@ interactions:
275 content_length: -1
180 content_length: -1
276 uncompressed: true
181 uncompressed: true
277 body: |+
182 body: |+
278− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
183+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
184+
185+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"019dc9e89ba9bdaf396bf573a0c33872","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
279
186
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}]}
187+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
281
188
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}]}
189+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
283
190
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}]}
191+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"file_path\": "}}]},"finish_reason":null}]}
285
192
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}]}
193+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp"}}]},"finish_reason":null}]}
287
194
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}]}
195+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
289
196
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}]}
197+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
291
198
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}]}
199+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
293
200
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}]}
201+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
295
202
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}]}
203+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
297
204
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}]}
205+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
299
206
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}]}
207+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
301
208
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}]}
209+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
303
210
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}]}
211+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
305
212
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}]}
213+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
307
214
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}]}
215+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
309
216
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}]}
217+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
311
218
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}]}
219+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/read"}}]},"finish_reason":null}]}
313
220
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}]}
221+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_a"}}]},"finish_reason":null}]}
315
222
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}]}
223+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_file"}}]},"finish_reason":null}]}
317
224
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}]}
225+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/go"}}]},"finish_reason":null}]}
319
226
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}]}
227+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".mod"}}]},"finish_reason":null}]}
321
228
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}]}
229+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
323
230
324− data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
231+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
325
232
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}}}
233+ data: {"id":"chatcmpl-c4ccbee679f8446c24ec58b1","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":87,"completion_tokens":28,"total_tokens":7795}}
327
234
328 data: [DONE]
235 data: [DONE]
329
236
@@ -332,15 +239,15 @@ interactions:
332 - text/event-stream
239 - text/event-stream
333 status: 200 OK
240 status: 200 OK
334 code: 200
241 code: 200
335− duration: 965.956083ms
242+ duration: 1m38.08106325s
336−- id: 3
243+- id: 4
337 request:
244 request:
338 proto: HTTP/1.1
245 proto: HTTP/1.1
339 proto_major: 1
246 proto_major: 1
340 proto_minor: 1
247 proto_minor: 1
341− content_length: 36321
248+ content_length: 34262
342 host: ""
249 host: ""
343− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"Read the go mod\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_6656c17dd769fe3b\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/go.mod\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants to read a go.mod file.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\",\"tool_call_id\":\"call_6656c17dd769fe3b\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_a01214c04522706d\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<file>\\n 1|module example.com/testproject\\n 2|\\n 3|go 1.23\\n 4|\\n</file>\\n\",\"tool_call_id\":\"call_a01214c04522706d\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
250+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks 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\":\"019dc9e71b7704014e96e52229b8325c\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"go.mod\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\",\"tool_call_id\":\"019dc9e71b7704014e96e52229b8325c\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"019dc9e89ba9bdaf396bf573a0c33872\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"<file>\\n 1|module example.com/testproject\\n 2|\\n 3|go 1.23\\n</file>\\n\",\"tool_call_id\":\"019dc9e89ba9bdaf396bf573a0c33872\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
344 headers:
251 headers:
345 Accept:
252 Accept:
346 - application/json
253 - application/json
@@ -357,51 +264,55 @@ interactions:
357 content_length: -1
264 content_length: -1
358 uncompressed: true
265 uncompressed: true
359 body: |+
266 body: |+
360− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
267+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
268+
269+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"The"},"finish_reason":null}]}
270+
271+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
361
272
362− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"The"},"finish_reason":null}]}
273+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
363
274
364− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" module"},"finish_reason":null}]}
275+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
365
276
366− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" is"},"finish_reason":null}]}
277+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
367
278
368− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
279+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" defines"},"finish_reason":null}]}
369
280
370− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"example"},"finish_reason":null}]}
281+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" module"},"finish_reason":null}]}
371
282
372− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".com"},"finish_reason":null}]}
283+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
373
284
374− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/test"},"finish_reason":null}]}
285+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"example"},"finish_reason":null}]}
375
286
376− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"project"},"finish_reason":null}]}
287+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".com"},"finish_reason":null}]}
377
288
378− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
289+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/test"},"finish_reason":null}]}
379
290
380− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" using"},"finish_reason":null}]}
291+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"project"},"finish_reason":null}]}
381
292
382− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
293+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
383
294
384− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
295+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" on"},"finish_reason":null}]}
385
296
386− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
297+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
387
298
388− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
299+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
389
300
390− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"23"},"finish_reason":null}]}
301+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
391
302
392− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
303+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
393
304
394− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
305+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"23"},"finish_reason":null}]}
395
306
396− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" no"},"finish_reason":null}]}
307+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
397
308
398− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" dependencies"},"finish_reason":null}]}
309+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" no"},"finish_reason":null}]}
399
310
400− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
311+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" dependencies"},"finish_reason":null}]}
401
312
402− data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
313+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
403
314
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}}}
315+ data: {"id":"chatcmpl-7ab3c2ab193f34b1f0053694","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":86,"completion_tokens":24,"total_tokens":7854}}
405
316
406 data: [DONE]
317 data: [DONE]
407
318
@@ -410,4 +321,4 @@ interactions:
410 - text/event-stream
321 - text/event-stream
411 status: 200 OK
322 status: 200 OK
412 code: 200
323 code: 200
413− duration: 1.002548458s
324+ duration: 2.405249958s
internal/agent/testdata/TestCoderAgent/glm-5.1/simple_test.yaml+35−183
@@ -25,151 +25,17 @@ interactions:
25 content_length: -1
25 content_length: -1
26 uncompressed: true
26 uncompressed: true
27 body: |+
27 body: |+
28− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-468ac21fa0c852dd31d6c992","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29
29
30− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-468ac21fa0c852dd31d6c992","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User wants a concise title for the content \"Hello\". Title should be summary, under 50 chars, one line, no quotes, no colon."},"finish_reason":null}]}
31
31
32− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-468ac21fa0c852dd31d6c992","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Could be \"Greeting\". That is fine."},"finish_reason":null}]}
33
33
34− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-468ac21fa0c852dd31d6c992","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
35
35
36− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-468ac21fa0c852dd31d6c992","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Greeting"},"finish_reason":null}]}
37
37
38− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-468ac21fa0c852dd31d6c992","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":205,"completion_tokens":50,"total_tokens":255}}
39−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
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−
124− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
125−
126− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
127−
128− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
129−
130− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
131−
132− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
133−
134− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Greeting"},"finish_reason":null}]}
135−
136− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
137−
138− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
139−
140− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
141−
142− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
143−
144− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
145−
146− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
147−
148− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Should"},"finish_reason":null}]}
149−
150− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
151−
152− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
153−
154− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
155−
156− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
157−
158− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
159−
160− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
161−
162− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
163−
164− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Greeting"},"finish_reason":null}]}
165−
166− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
167−
168− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Greeting"},"finish_reason":null}]}
169−
170− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
171−
172− data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":146,"completion_tokens":77,"total_tokens":287,"prompt_tokens_details":{"cached_tokens":64},"cost":{"usd":0.0001,"hypercredits":0.002},"remaining":{"hypercredits":0}}}
173
39
174 data: [DONE]
40 data: [DONE]
175
41
@@ -178,15 +44,15 @@ interactions:
178 - text/event-stream
44 - text/event-stream
179 status: 200 OK
45 status: 200 OK
180 code: 200
46 code: 200
181− duration: 878.40675ms
47+ duration: 1m36.890318042s
182- id: 1
48- id: 1
183 request:
49 request:
184 proto: HTTP/1.1
50 proto: HTTP/1.1
185 proto_major: 1
51 proto_major: 1
186 proto_minor: 1
52 proto_minor: 1
187− content_length: 35585
53+ content_length: 33577
188 host: ""
54 host: ""
189− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/simple_test\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"Hello\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
55+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/simple_test\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"Hello\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
190 headers:
56 headers:
191 Accept:
57 Accept:
192 - application/json
58 - application/json
@@ -203,69 +69,55 @@ interactions:
203 content_length: -1
69 content_length: -1
204 uncompressed: true
70 uncompressed: true
205 body: |+
71 body: |+
206− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"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
73
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}]}
74+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
223
75
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}]}
76+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
225
77
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}]}
78+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" said"},"finish_reason":null}]}
227
79
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}]}
80+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
229
81
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}]}
82+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
231
83
232− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
233
85
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}]}
86+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" I"},"finish_reason":null}]}
235
87
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}]}
88+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'ll"},"finish_reason":null}]}
237
89
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}]}
90+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" respond"},"finish_reason":null}]}
239
91
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}]}
92+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" conc"},"finish_reason":null}]}
241
93
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}]}
94+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"is"},"finish_reason":null}]}
243
95
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}]}
96+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"ely"},"finish_reason":null}]}
245
97
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}]}
98+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
247
99
248− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
249
101
250− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Hi"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
251
103
252− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}
253
105
254− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" How"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" How"},"finish_reason":null}]}
255
107
256− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" can"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" can"},"finish_reason":null}]}
257
109
258− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" I"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" I"},"finish_reason":null}]}
259
111
260− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" help"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" help"},"finish_reason":null}]}
261
113
262− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" you"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" you"},"finish_reason":null}]}
263
115
264− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"?"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" today"},"finish_reason":null}]}
265
117
266− data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
118+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"?"},"finish_reason":null}]}
267
119
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}}}
120+ data: {"id":"chatcmpl-3dbfb9d460c6df217605c42e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":7729,"completion_tokens":23,"total_tokens":7752}}
269
121
270 data: [DONE]
122 data: [DONE]
271
123
@@ -274,4 +126,4 @@ interactions:
274 - text/event-stream
126 - text/event-stream
275 status: 200 OK
127 status: 200 OK
276 code: 200
128 code: 200
277− duration: 1.659991334s
129+ duration: 1m39.258842375s
internal/agent/testdata/TestCoderAgent/glm-5.1/sourcegraph_tool.yaml+190−1258
@@ -2,64 +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: 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
63 request:
5 request:
64 proto: HTTP/1.1
6 proto: HTTP/1.1
65 proto_major: 1
7 proto_major: 1
@@ -73,809 +15,235 @@ interactions:
73 Content-Type:
15 Content-Type:
74 - application/json
16 - application/json
75 User-Agent:
17 User-Agent:
76− - Charm-Crush/devel (https://charm.land/crush)
18+ - Charm-Crush/devel (https://charm.land/crush)
77− url: https://hyper.charm.land/v1/chat/completions
19+ url: https://hyper.charm.land/v1/chat/completions
78− method: POST
20+ method: POST
79− response:
21+ response:
80− proto: HTTP/2.0
22+ proto: HTTP/2.0
81− proto_major: 2
23+ proto_major: 2
82− proto_minor: 0
24+ proto_minor: 0
83− content_length: -1
25+ content_length: -1
84− uncompressed: true
26+ uncompressed: true
85− body: |+
27+ body: |+
86− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
87−
88− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
89−
90− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
91−
92− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
93−
94− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
95−
96− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
97−
98− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
99−
100− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
101−
102− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
103−
104− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
105−
106− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
107−
108− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
109−
110− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
111−
112− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" source"},"finish_reason":null}]}
113−
114− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
115−
116− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
117−
118− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
119−
120− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
121−
122− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
123−
124− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"func"},"finish_reason":null}]}
125−
126− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
127−
128− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
129−
130− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
131−
132− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
133−
134− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repositories"},"finish_reason":null}]}
135−
136− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
137−
138− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
139−
140− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
141−
142− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
143−
144− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
145−
146− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
147−
148− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
149−
150− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
151−
152− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
153−
154− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
155−
156− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
157−
158− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
159−
160− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
161−
162− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
163−
164− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
165−
166− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
167−
168− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
169−
170− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
171−
172− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
173−
174− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
175−
176− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
177−
178− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
179−
180− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
181−
182− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
183−
184− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
185−
186− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
187−
188− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
189−
190− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Possible"},"finish_reason":null}]}
191−
192− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
193−
194− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
195−
196− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
197−
198− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Searching"},"finish_reason":null}]}
199−
200− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
201−
202− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
203−
204− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
205−
206− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
207−
208− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
209−
210− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
211−
212− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
213−
214− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
215−
216− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
217−
218− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
219−
220− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Count"},"finish_reason":null}]}
221−
222− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
223−
224− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
225−
226− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
227−
228− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
229−
230− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
231−
232− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
233−
234− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Searching"},"finish_reason":null}]}
235−
236− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
237−
238− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
239−
240− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
241−
242− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
243−
244− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
245−
246− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
247−
248− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
249−
250− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
251−
252− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
253−
254− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
255−
256− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"S"},"finish_reason":null}]}
257−
258− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
259−
260− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
261−
262− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
263−
264− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
265−
266− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
267−
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}]}
269−
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}]}
271−
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}]}
273−
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}]}
275−
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}]}
277−
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}]}
279−
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}]}
281−
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}]}
283−
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}]}
285−
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}]}
287−
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}]}
289−
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}]}
291−
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}]}
293−
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}]}
295−
296− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
297−
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}]}
299−
300− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
301−
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}]}
303−
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}]}
305−
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}]}
307−
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}]}
309−
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}]}
311−
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}]}
313−
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}]}
315−
316− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
317−
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}]}
319−
320− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
321−
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}]}
323−
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}]}
325−
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}]}
327−
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}]}
329−
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}]}
331−
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}]}
333−
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}]}
335−
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}]}
337−
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}]}
339−
340− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
341−
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}]}
343−
344− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
345−
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}]}
347−
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}]}
349−
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}]}
351−
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}]}
353−
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}]}
355−
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}]}
357−
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}]}
359−
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}]}
361−
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}]}
363−
364− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
365−
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}]}
367−
368− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
369−
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}]}
371−
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}]}
373−
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}]}
375−
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}]}
377−
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}]}
379−
380− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
381−
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}]}
383−
384− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
385−
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}]}
387−
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}]}
389−
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}]}
391−
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}]}
393−
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}]}
395−
396− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
397−
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}]}
399−
400− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
401−
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}]}
403−
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}]}
405−
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}]}
407−
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}]}
409−
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}]}
411−
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}]}
413−
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}]}
415−
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}]}
417−
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}]}
419−
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}]}
421−
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}]}
423−
424− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
425−
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}]}
427−
428− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
429−
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}]}
431−
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}]}
433−
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}]}
435−
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}]}
437−
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}]}
439−
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}]}
441−
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}]}
443−
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}]}
445−
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}]}
447−
448− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
449−
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}]}
451−
452− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
453−
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}]}
455−
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}]}
457−
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}]}
459−
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}]}
461−
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}]}
463−
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}]}
465−
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}]}
467−
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}]}
469−
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}]}
471−
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}]}
473−
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}]}
475−
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}]}
477−
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}]}
479−
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}]}
481−
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}]}
483−
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}]}
485−
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}]}
487−
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}]}
489−
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}]}
491−
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}]}
493−
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}]}
495−
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}]}
497−
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}]}
499−
500− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
501−
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}]}
503−
504− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
505−
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}]}
507−
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}]}
509−
510− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
511−
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}]}
513−
514− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
515−
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}]}
517−
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}]}
519−
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}]}
521−
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}]}
523−
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}]}
525−
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}]}
527−
528− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
529−
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}]}
531−
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}]}
533−
534− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
535−
536− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
537−
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}]}
539−
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}]}
541−
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}]}
543−
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}]}
545−
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}]}
547−
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}]}
549−
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}]}
551−
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}]}
553−
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}]}
555−
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}]}
557−
558− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
559−
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}]}
561−
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
29
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}]}
30+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
693
31
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}]}
32+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
695
33
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}]}
34+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" says"},"finish_reason":null}]}
697
35
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}]}
36+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
699
37
700− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
701
39
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}]}
40+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
703
41
704− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
705
43
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}]}
44+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
707
45
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}]}
46+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
709
47
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}]}
48+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
711
49
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}]}
50+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
713
51
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}]}
52+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
715
53
716− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
717
55
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}]}
56+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
719
57
720− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
721
59
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}]}
60+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" source"},"finish_reason":null}]}
723
61
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}]}
62+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
725
63
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}]}
64+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
727
65
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}]}
66+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
729
67
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}]}
68+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
731
69
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}]}
70+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
733
71
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}]}
72+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"func"},"finish_reason":null}]}
735
73
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}]}
74+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
737
75
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}]}
76+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
739
77
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}]}
78+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
741
79
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}]}
80+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
743
81
744− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repositories"},"finish_reason":null}]}
745
83
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}]}
84+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
747
85
748− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
749
87
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}]}
88+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
751
89
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}]}
90+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
753
91
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}]}
92+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
755
93
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}]}
94+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
757
95
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}]}
96+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
759
97
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}]}
98+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
761
99
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}]}
100+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
763
101
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}]}
102+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
765
103
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}]}
104+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
767
105
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}]}
106+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
769
107
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}]}
108+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
771
109
772− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
773
111
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}]}
112+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
775
113
776− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
777
115
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}]}
116+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
779
117
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}]}
118+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
781
119
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}]}
120+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
783
121
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}]}
122+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Using"},"finish_reason":null}]}
785
123
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}]}
124+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
787
125
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}]}
126+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
789
127
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}]}
128+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
791
129
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}]}
130+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Find"},"finish_reason":null}]}
793
131
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}]}
132+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
795
133
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}]}
134+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
797
135
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}]}
136+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
799
137
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}]}
138+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
801
139
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}]}
140+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Re"},"finish_reason":null}]}
803
141
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}]}
142+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"pos"},"finish_reason":null}]}
805
143
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}]}
144+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
807
145
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}]}
146+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
809
147
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}]}
148+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
811
149
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}]}
150+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
813
151
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}]}
152+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
815
153
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}]}
154+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
817
155
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}]}
156+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
819
157
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}]}
158+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
821
159
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}]}
160+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
823
161
824− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Return"},"finish_reason":null}]}
825
163
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}]}
164+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
827
165
828− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
829
167
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}]}
168+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
831
169
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}]}
170+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
833
171
834− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Using"},"finish_reason":null}]}
835
173
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}]}
174+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Source"},"finish_reason":null}]}
837
175
838− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"graph"},"finish_reason":null}]}
839
177
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}]}
178+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
841
179
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}]}
180+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Find"},"finish_reason":null}]}
843
181
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}]}
182+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" func"},"finish_reason":null}]}
845
183
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}]}
184+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
847
185
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}]}
186+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
849
187
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}]}
188+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
851
189
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}]}
190+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Re"},"finish_reason":null}]}
853
191
854− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"positories"},"finish_reason":null}]}
855
193
856− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Search"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-99e996d1d5646d44dee5a04b","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":36,"completion_tokens":91,"total_tokens":303}}
857
195
858− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
196+ data: [DONE]
859
197
860− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" func"},"finish_reason":null}]}
198+ headers:
199+ Content-Type:
200+ - text/event-stream
201+ status: 200 OK
202+ code: 200
203+ duration: 398.013ms
204+- id: 1
205+ request:
206+ proto: HTTP/1.1
207+ proto_major: 1
208+ proto_minor: 1
209+ content_length: 33637
210+ host: ""
211+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/sourcegraph_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use sourcegraph to search for 'func main' in Go repositories\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
212+ headers:
213+ Accept:
214+ - application/json
215+ Content-Type:
216+ - application/json
217+ User-Agent:
218+ - Charm-Crush/devel (https://charm.land/crush)
219+ url: https://hyper.charm.land/v1/chat/completions
220+ method: POST
221+ response:
222+ proto: HTTP/2.0
223+ proto_major: 2
224+ proto_minor: 0
225+ content_length: -1
226+ uncompressed: true
227+ body: |+
228+ data: {"id":"chatcmpl-5a739f9b3d6f4c61d1539408","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
861
229
862− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-5a739f9b3d6f4c61d1539408","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
863
231
864− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-5a739f9b3d6f4c61d1539408","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user wants me"},"finish_reason":null}]}
865
233
866− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-5a739f9b3d6f4c61d1539408","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to search for '"},"finish_reason":null}]}
867
235
868− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" repos"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-5a739f9b3d6f4c61d1539408","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"func main' in"},"finish_reason":null}]}
869
237
870− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" using"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-5a739f9b3d6f4c61d1539408","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Go repositories using the"},"finish_reason":null}]}
871
239
872− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Source"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-5a739f9b3d6f4c61d1539408","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Sourcegraph tool."},"finish_reason":null}]}
873
241
874− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"graph"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-5a739f9b3d6f4c61d1539408","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_049d","type":"function","index":0,"function":{"name":"sourcegraph","arguments":""}}]},"finish_reason":null}]}
875
243
876− data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
244+ data: {"id":"chatcmpl-5a739f9b3d6f4c61d1539408","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"query\": \"func main lang:go\"}"}}]},"finish_reason":null}]}
877
245
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}}}
246+ data: {"id":"chatcmpl-5a739f9b3d6f4c61d1539408","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":702,"completion_tokens":35,"total_tokens":7777}}
879
247
880 data: [DONE]
248 data: [DONE]
881
249
@@ -884,7 +252,7 @@ interactions:
884 - text/event-stream
252 - text/event-stream
885 status: 200 OK
253 status: 200 OK
886 code: 200
254 code: 200
887− duration: 1.181730083s
255+ duration: 2.265197833s
888- id: 2
256- id: 2
889 request:
257 request:
890 proto: HTTP/1.1
258 proto: HTTP/1.1
@@ -892,7 +260,7 @@ interactions:
892 proto_minor: 1
260 proto_minor: 1
893 content_length: 424
261 content_length: 424
894 host: sourcegraph.com
262 host: sourcegraph.com
895− body: '{"query":"query Search($query: String!) { search(query: $query, version: V2, patternType: keyword ) { results { matchCount, limitHit, resultCount, approximateResultCount, missing { name }, timedout { name }, indexUnavailable, results { __typename, ... on FileMatch { repository { name }, file { path, url, content }, lineMatches { preview, lineNumber, offsetAndLengths } } } } } }","variables":{"query":"func main lang:Go"}}'
263+ body: '{"query":"query Search($query: String!) { search(query: $query, version: V2, patternType: keyword ) { results { matchCount, limitHit, resultCount, approximateResultCount, missing { name }, timedout { name }, indexUnavailable, results { __typename, ... on FileMatch { repository { name }, file { path, url, content }, lineMatches { preview, lineNumber, offsetAndLengths } } } } } }","variables":{"query":"func main lang:go"}}'
896 headers:
264 headers:
897 Content-Type:
265 Content-Type:
898 - application/json
266 - application/json
@@ -906,21 +274,21 @@ interactions:
906 proto_minor: 0
274 proto_minor: 0
907 content_length: -1
275 content_length: -1
908 uncompressed: true
276 uncompressed: true
909− body: '{"data":{"search":{"results":{"matchCount":30,"limitHit":true,"resultCount":30,"approximateResultCount":"30+","missing":[],"timedout":[],"indexUnavailable":false,"results":[{"__typename":"FileMatch","repository":{"name":"github.com/naeemaei/Golang-Tutorial"},"file":{"path":"14-Logging/03-LogToFile/main.go","url":"/r/github.com/naeemaei/Golang-Tutorial/-/blob/14-Logging/03-LogToFile/main.go","content":"package main\n\nimport (\n\t\"logToFile/core\"\n\n\t\"github.com/pkg/errors\"\n)\n\ntype myStruct struct {\n\tName string\n}\n\nvar logger = core.NewFileLogger()\n\nfunc main() {\n\n\tlogger.Print(\"test\")\n\tmyStruct := myStruct{Name: \"test\"}\n\tlogger.Info().Interface(\"Body\", myStruct).Str(\"Category\", \"Search\").\n\t\tInt(\"DurationTime\", 80).\n\t\tMsg(\"Searching for a thing\")\n\n\terr := errors.New(\"this is an error\")\n\n\tlogger.Error().Err(err).Msg(\"Error occurred\")\n\n\terr = func3()\n\tif err != nil {\n\n\t\tlogger.Error().Stack().Err(err).Msg(\"Error occurred (func3 error)\")\n\t}\n}\n\nfunc func1() error {\n\treturn errors.New(\"this is an error (func1)\")\n}\n\nfunc func2() error {\n\terr := func1()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc func3() error {\n\terr := func2()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// trace\n// debug\n// info\n// warn\n// error\n// fatal(critical)\n// panic\n"},"lineMatches":[{"preview":"func main() {","lineNumber":14,"offsetAndLengths":[[0,9]]},{"preview":"func func1() error {","lineNumber":33,"offsetAndLengths":[[0,4],[5,4]]},{"preview":"\treturn errors.New(\"this is an error (func1)\")","lineNumber":34,"offsetAndLengths":[[38,4]]},{"preview":"func func2() error {","lineNumber":37,"offsetAndLengths":[[0,4],[5,4]]},{"preview":"\terr := func1()","lineNumber":38,"offsetAndLengths":[[8,4]]},{"preview":"func func3() error {","lineNumber":45,"offsetAndLengths":[[0,4],[5,4]]},{"preview":"\terr := func2()","lineNumber":46,"offsetAndLengths":[[8,4]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"\terr = func3()","lineNumber":26,"offsetAndLengths":[[7,4]]},{"preview":"\t\tlogger.Error().Stack().Err(err).Msg(\"Error occurred (func3 error)\")","lineNumber":29,"offsetAndLengths":[[55,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/naeemaei/Golang-Tutorial"},"file":{"path":"02-Introduction/03-ProjectStructure/helloWorldInFunc.go","url":"/r/github.com/naeemaei/Golang-Tutorial/-/blob/02-Introduction/03-ProjectStructure/helloWorldInFunc.go","content":"package main\n\nimport \"fmt\"\n\nfunc main() {\n\thello()\n}\n\nfunc hello() {\n\tfmt.Println(\"Hello, World!\")\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":4,"offsetAndLengths":[[0,9]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"func hello() {","lineNumber":8,"offsetAndLengths":[[0,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/naeemaei/Golang-Tutorial"},"file":{"path":"08-Function/05-Anonymous/example2.go","url":"/r/github.com/naeemaei/Golang-Tutorial/-/blob/08-Function/05-Anonymous/example2.go","content":"package main\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n)\n\nfunc main() {\n\n\tnumbers := []int{12, 5, 48, 32, 1, 2, 74, 36, 90, 100, 95, 42}\n\n\tfmt.Printf(\"%v\\n\", numbers)\n\n\tsortingFunc := func(i, j int) bool {\n\t\treturn numbers[i] \u003c numbers[j]\n\t}\n\tsort.Slice(numbers, sortingFunc)\n\n\tfmt.Printf(\"%v\\n\", numbers)\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":7,"offsetAndLengths":[[0,9]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"\tsortingFunc := func(i, j int) bool {","lineNumber":13,"offsetAndLengths":[[8,4],[16,4]]},{"preview":"\tsort.Slice(numbers, sortingFunc)","lineNumber":16,"offsetAndLengths":[[28,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/naeemaei/Golang-Tutorial"},"file":{"path":"15-Concurrency/03-Intro/main.go","url":"/r/github.com/naeemaei/Golang-Tutorial/-/blob/15-Concurrency/03-Intro/main.go","content":"package main\n\nimport (\n\t\"runtime\"\n\t\"time\"\n)\n\nfunc main() {\n\truntime.GOMAXPROCS(runtime.NumCPU())\n\tvalue := 0\n\tgo task1() \n\tgo task2()\n\tgo task3()\n\n\tgo func() {\n\t\t// lock\n\t\tvalue++ //1\n\t\t//unlock\n\t}()\n\tgo func() {\n\t\t// lock\n\t\tvalue+=2 // 3\n\t\t//unlock\n\t}()\n\tgo func() {\n\t\t// lock\n\t\tvalue+=3 // 6\n\t\t//unlock\n\t}()\n\n\tprintln(value)\n\n\ttime.Sleep(time.Second)\n}\n\nfunc task1() {\n\tprintln(\"task1\")\n}\n\nfunc task2() {\n\tprintln(\"task2\")\n}\n\nfunc task3() {\n\tprintln(\"task3\")\n}\n\n// race condition\n//await"},"lineMatches":[{"preview":"func main() {","lineNumber":7,"offsetAndLengths":[[0,9]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"\tgo func() {","lineNumber":14,"offsetAndLengths":[[4,4]]},{"preview":"\tgo func() {","lineNumber":19,"offsetAndLengths":[[4,4]]},{"preview":"\tgo func() {","lineNumber":24,"offsetAndLengths":[[4,4]]},{"preview":"func task1() {","lineNumber":35,"offsetAndLengths":[[0,4]]},{"preview":"func task2() {","lineNumber":39,"offsetAndLengths":[[0,4]]},{"preview":"func task3() {","lineNumber":43,"offsetAndLengths":[[0,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/naeemaei/Golang-Tutorial"},"file":{"path":"08-Function/04-Variadic/example2.go","url":"/r/github.com/naeemaei/Golang-Tutorial/-/blob/08-Function/04-Variadic/example2.go","content":"package main\n\nimport \"fmt\"\n\nfunc main() {\n\tPrintLog(\"Ali\", 1, \"Reza\", 3, \"Error\", 5, 6, \"Info\", 8, 9, false)\n\n}\n\nfunc PrintLog(logs ...interface{}) {\n\tfor i, item := range logs {\n\t\tfmt.Printf(\"%d: %v\\n\", i, item)\n\t}\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":4,"offsetAndLengths":[[0,9]]}]}]}}}}'
277+ body: '{"data":{"search":{"results":{"matchCount":30,"limitHit":true,"resultCount":30,"approximateResultCount":"30+","missing":[],"timedout":[],"indexUnavailable":false,"results":[{"__typename":"FileMatch","repository":{"name":"github.com/RedHatOfficial/GoCourse"},"file":{"path":"lesson3/01_func_type.go","url":"/r/github.com/RedHatOfficial/GoCourse/-/blob/lesson3/01_func_type.go","content":"package main\n\nimport \"fmt\"\n\nfunc function1() {\n\tfmt.Println(\"function1\")\n}\n\nfunc function2() {\n\tfmt.Println(\"function2\")\n}\n\nfunc main() {\n\tvar a func()\n\tfmt.Println(a)\n\n\ta = function1\n\tfmt.Println(a)\n\ta()\n\n\ta = function2\n\tfmt.Println(a)\n\ta()\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":12,"offsetAndLengths":[[0,9]]},{"preview":"\tvar a func()","lineNumber":13,"offsetAndLengths":[[7,4]]},{"preview":"func function1() {","lineNumber":4,"offsetAndLengths":[[0,4],[5,4]]},{"preview":"\tfmt.Println(\"function1\")","lineNumber":5,"offsetAndLengths":[[14,4]]},{"preview":"func function2() {","lineNumber":8,"offsetAndLengths":[[0,4],[5,4]]},{"preview":"\tfmt.Println(\"function2\")","lineNumber":9,"offsetAndLengths":[[14,4]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"\ta = function1","lineNumber":16,"offsetAndLengths":[[5,4]]},{"preview":"\ta = function2","lineNumber":20,"offsetAndLengths":[[5,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/unknwon/the-way-to-go_ZH_CN"},"file":{"path":"eBook/examples/chapter_6/defer.go","url":"/r/github.com/unknwon/the-way-to-go_ZH_CN/-/blob/eBook/examples/chapter_6/defer.go","content":"package main\n\nimport \"fmt\"\n\nfunc main() {\n\tFunction1()\n}\n\nfunc Function1() {\n\tfmt.Printf(\"In Function1 at the top\\n\")\n\tdefer Function2()\n\tfmt.Printf(\"In Function1 at the bottom!\\n\")\n}\n\nfunc Function2() {\n\tfmt.Printf(\"Function2: Deferred until the end of the calling function!\")\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":4,"offsetAndLengths":[[0,9]]},{"preview":"\tFunction1()","lineNumber":5,"offsetAndLengths":[[1,4]]},{"preview":"func Function1() {","lineNumber":8,"offsetAndLengths":[[0,4],[5,4]]},{"preview":"\tfmt.Printf(\"In Function1 at the top\\n\")","lineNumber":9,"offsetAndLengths":[[16,4]]},{"preview":"\tdefer Function2()","lineNumber":10,"offsetAndLengths":[[7,4]]},{"preview":"\tfmt.Printf(\"In Function1 at the bottom!\\n\")","lineNumber":11,"offsetAndLengths":[[16,4]]},{"preview":"func Function2() {","lineNumber":14,"offsetAndLengths":[[0,4],[5,4]]},{"preview":"\tfmt.Printf(\"Function2: Deferred until the end of the calling function!\")","lineNumber":15,"offsetAndLengths":[[13,4],[62,4]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/unknwon/the-way-to-go_ZH_CN"},"file":{"path":"eBook/examples/chapter_4/function_calls_function.go","url":"/r/github.com/unknwon/the-way-to-go_ZH_CN/-/blob/eBook/examples/chapter_4/function_calls_function.go","content":"package main\n\nvar a string\n\nfunc main() {\n\ta = \"G\"\n\tprint(a)\n\tf1()\n}\nfunc f1() {\n\ta := \"O\"\n\tprint(a)\n\tf2()\n}\nfunc f2() {\n\tprint(a)\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":4,"offsetAndLengths":[[0,9]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"func f1() {","lineNumber":9,"offsetAndLengths":[[0,4]]},{"preview":"func f2() {","lineNumber":14,"offsetAndLengths":[[0,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/RedHatOfficial/GoCourse"},"file":{"path":"lesson3/02_func_type.go","url":"/r/github.com/RedHatOfficial/GoCourse/-/blob/lesson3/02_func_type.go","content":"package main\n\nimport \"fmt\"\n\nfunc function1(x, y int) int {\n\treturn x + y\n}\n\nfunc function2(x, y int) int {\n\treturn x * y\n}\n\nfunc main() {\n\tvar a func(int, int) int\n\tfmt.Println(a)\n\n\ta = function1\n\tfmt.Println(a)\n\tfmt.Println(a(10, 20))\n\n\ta = function2\n\tfmt.Println(a)\n\tfmt.Println(a(10, 20))\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":12,"offsetAndLengths":[[0,9]]},{"preview":"\tvar a func(int, int) int","lineNumber":13,"offsetAndLengths":[[7,4]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]}]}]}}}}'
910 headers:
278 headers:
911 Content-Type:
279 Content-Type:
912 - application/json
280 - application/json
913 status: 200 OK
281 status: 200 OK
914 code: 200
282 code: 200
915− duration: 2.192433792s
283+ duration: 9.216155791s
916- id: 3
284- id: 3
917 request:
285 request:
918 proto: HTTP/1.1
286 proto: HTTP/1.1
919 proto_major: 1
287 proto_major: 1
920 proto_minor: 1
288 proto_minor: 1
921− content_length: 46395
289+ content_length: 42450
922 host: ""
290 host: ""
923− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/sourcegraph_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use sourcegraph to search for 'func main' in Go repositories\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_ed4abf0a0b9be3a4\",\"function\":{\"arguments\":\"{\\\"count\\\": 20, \\\"query\\\": \\\"func main lang:Go\\\"}\",\"name\":\"sourcegraph\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"# Sourcegraph Search Results\\n\\nFound 30 matches across 30 results\\n(Result limit reached, try a more specific query)\\n\\n## Result 1: github.com/naeemaei/Golang-Tutorial/14-Logging/03-LogToFile/main.go\\n\\nURL: /r/github.com/naeemaei/Golang-Tutorial/-/blob/14-Logging/03-LogToFile/main.go\\n\\n```\\n4| \\t\\\"logToFile/core\\\"\\n5| \\n6| \\t\\\"github.com/pkg/errors\\\"\\n7| )\\n8| \\n9| type myStruct struct {\\n10| \\tName string\\n11| }\\n12| \\n13| var logger = core.NewFileLogger()\\n14| func main() {\\n15| func main() {\\n16| \\n17| \\tlogger.Print(\\\"test\\\")\\n18| \\tmyStruct := myStruct{Name: \\\"test\\\"}\\n19| \\tlogger.Info().Interface(\\\"Body\\\", myStruct).Str(\\\"Category\\\", \\\"Search\\\").\\n20| \\t\\tInt(\\\"DurationTime\\\", 80).\\n21| \\t\\tMsg(\\\"Searching for a thing\\\")\\n22| \\n23| \\terr := errors.New(\\\"this is an error\\\")\\n24| \\n```\\n\\n```\\n23| \\terr := errors.New(\\\"this is an error\\\")\\n24| \\n25| \\tlogger.Error().Err(err).Msg(\\\"Error occurred\\\")\\n26| \\n27| \\terr = func3()\\n28| \\tif err != nil {\\n29| \\n30| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n31| \\t}\\n32| }\\n33| func func1() error {\\n34| func func1() error {\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n37| \\n38| func func2() error {\\n39| \\terr := func1()\\n40| \\tif err != nil {\\n41| \\t\\treturn err\\n42| \\t}\\n43| \\treturn nil\\n```\\n\\n```\\n24| \\n25| \\tlogger.Error().Err(err).Msg(\\\"Error occurred\\\")\\n26| \\n27| \\terr = func3()\\n28| \\tif err != nil {\\n29| \\n30| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n31| \\t}\\n32| }\\n33| \\n34| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n37| \\n38| func func2() error {\\n39| \\terr := func1()\\n40| \\tif err != nil {\\n41| \\t\\treturn err\\n42| \\t}\\n43| \\treturn nil\\n44| }\\n```\\n\\n```\\n27| \\terr = func3()\\n28| \\tif err != nil {\\n29| \\n30| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n31| \\t}\\n32| }\\n33| \\n34| func func1() error {\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n37| func func2() error {\\n38| func func2() error {\\n39| \\terr := func1()\\n40| \\tif err != nil {\\n41| \\t\\treturn err\\n42| \\t}\\n43| \\treturn nil\\n44| }\\n45| \\n46| func func3() error {\\n47| \\terr := func2()\\n```\\n\\n```\\n28| \\tif err != nil {\\n29| \\n30| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n31| \\t}\\n32| }\\n33| \\n34| func func1() error {\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n37| \\n38| \\terr := func1()\\n39| \\terr := func1()\\n40| \\tif err != nil {\\n41| \\t\\treturn err\\n42| \\t}\\n43| \\treturn nil\\n44| }\\n45| \\n46| func func3() error {\\n47| \\terr := func2()\\n48| \\tif err != nil {\\n```\\n\\n```\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n37| \\n38| func func2() error {\\n39| \\terr := func1()\\n40| \\tif err != nil {\\n41| \\t\\treturn err\\n42| \\t}\\n43| \\treturn nil\\n44| }\\n45| func func3() error {\\n46| func func3() error {\\n47| \\terr := func2()\\n48| \\tif err != nil {\\n49| \\t\\treturn err\\n50| \\t}\\n51| \\treturn nil\\n52| }\\n53| \\n54| // trace\\n55| // debug\\n```\\n\\n```\\n36| }\\n37| \\n38| func func2() error {\\n39| \\terr := func1()\\n40| \\tif err != nil {\\n41| \\t\\treturn err\\n42| \\t}\\n43| \\treturn nil\\n44| }\\n45| \\n46| \\terr := func2()\\n47| \\terr := func2()\\n48| \\tif err != nil {\\n49| \\t\\treturn err\\n50| \\t}\\n51| \\treturn nil\\n52| }\\n53| \\n54| // trace\\n55| // debug\\n56| // info\\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import (\\n4| \\t\\\"logToFile/core\\\"\\n5| \\n6| \\t\\\"github.com/pkg/errors\\\"\\n7| )\\n8| \\n9| type myStruct struct {\\n10| \\tName string\\n```\\n\\n```\\n16| \\n17| \\tlogger.Print(\\\"test\\\")\\n18| \\tmyStruct := myStruct{Name: \\\"test\\\"}\\n19| \\tlogger.Info().Interface(\\\"Body\\\", myStruct).Str(\\\"Category\\\", \\\"Search\\\").\\n20| \\t\\tInt(\\\"DurationTime\\\", 80).\\n21| \\t\\tMsg(\\\"Searching for a thing\\\")\\n22| \\n23| \\terr := errors.New(\\\"this is an error\\\")\\n24| \\n25| \\tlogger.Error().Err(err).Msg(\\\"Error occurred\\\")\\n26| \\terr = func3()\\n27| \\terr = func3()\\n28| \\tif err != nil {\\n29| \\n30| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n31| \\t}\\n32| }\\n33| \\n34| func func1() error {\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n```\\n\\n```\\n19| \\tlogger.Info().Interface(\\\"Body\\\", myStruct).Str(\\\"Category\\\", \\\"Search\\\").\\n20| \\t\\tInt(\\\"DurationTime\\\", 80).\\n21| \\t\\tMsg(\\\"Searching for a thing\\\")\\n22| \\n23| \\terr := errors.New(\\\"this is an error\\\")\\n24| \\n25| \\tlogger.Error().Err(err).Msg(\\\"Error occurred\\\")\\n26| \\n27| \\terr = func3()\\n28| \\tif err != nil {\\n29| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n30| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n31| \\t}\\n32| }\\n33| \\n34| func func1() error {\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n37| \\n38| func func2() error {\\n39| \\terr := func1()\\n```\\n\\n## Result 2: github.com/naeemaei/Golang-Tutorial/02-Introduction/03-ProjectStructure/helloWorldInFunc.go\\n\\nURL: /r/github.com/naeemaei/Golang-Tutorial/-/blob/02-Introduction/03-ProjectStructure/helloWorldInFunc.go\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| func main() {\\n5| func main() {\\n6| \\thello()\\n7| }\\n8| \\n9| func hello() {\\n10| \\tfmt.Println(\\\"Hello, World!\\\")\\n11| }\\n12| \\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func main() {\\n6| \\thello()\\n7| }\\n8| \\n9| func hello() {\\n10| \\tfmt.Println(\\\"Hello, World!\\\")\\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func main() {\\n6| \\thello()\\n7| }\\n8| func hello() {\\n9| func hello() {\\n10| \\tfmt.Println(\\\"Hello, World!\\\")\\n11| }\\n12| \\n```\\n\\n## Result 3: github.com/naeemaei/Golang-Tutorial/08-Function/05-Anonymous/example2.go\\n\\nURL: /r/github.com/naeemaei/Golang-Tutorial/-/blob/08-Function/05-Anonymous/example2.go\\n\\n```\\n1| package main\\n2| \\n3| import (\\n4| \\t\\\"fmt\\\"\\n5| \\t\\\"sort\\\"\\n6| )\\n7| func main() {\\n8| func main() {\\n9| \\n10| \\tnumbers := []int{12, 5, 48, 32, 1, 2, 74, 36, 90, 100, 95, 42}\\n11| \\n12| \\tfmt.Printf(\\\"%v\\\\n\\\", numbers)\\n13| \\n14| \\tsortingFunc := func(i, j int) bool {\\n15| \\t\\treturn numbers[i] < numbers[j]\\n16| \\t}\\n17| \\tsort.Slice(numbers, sortingFunc)\\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import (\\n4| \\t\\\"fmt\\\"\\n5| \\t\\\"sort\\\"\\n6| )\\n7| \\n8| func main() {\\n9| \\n10| \\tnumbers := []int{12, 5, 48, 32, 1, 2, 74, 36, 90, 100, 95, 42}\\n```\\n\\n```\\n3| import (\\n4| \\t\\\"fmt\\\"\\n5| \\t\\\"sort\\\"\\n6| )\\n7| \\n8| func main() {\\n9| \\n10| \\tnumbers := []int{12, 5, 48, 32, 1, 2, 74, 36, 90, 100, 95, 42}\\n11| \\n12| \\tfmt.Printf(\\\"%v\\\\n\\\", numbers)\\n13| \\tsortingFunc := func(i, j int) bool {\\n14| \\tsortingFunc := func(i, j int) bool {\\n15| \\t\\treturn numbers[i] < numbers[j]\\n16| \\t}\\n17| \\tsort.Slice(numbers, sortingFunc)\\n18| \\n19| \\tfmt.Printf(\\\"%v\\\\n\\\", numbers)\\n20| }\\n21| \\n```\\n\\n```\\n6| )\\n7| \\n8| func main() {\\n9| \\n10| \\tnumbers := []int{12, 5, 48, 32, 1, 2, 74, 36, 90, 100, 95, 42}\\n11| \\n12| \\tfmt.Printf(\\\"%v\\\\n\\\", numbers)\\n13| \\n14| \\tsortingFunc := func(i, j int) bool {\\n15| \\t\\treturn numbers[i] < numbers[j]\\n16| \\tsort.Slice(numbers, sortingFunc)\\n17| \\tsort.Slice(numbers, sortingFunc)\\n18| \\n19| \\tfmt.Printf(\\\"%v\\\\n\\\", numbers)\\n20| }\\n21| \\n```\\n\\n## Result 4: github.com/naeemaei/Golang-Tutorial/15-Concurrency/03-Intro/main.go\\n\\nURL: /r/github.com/naeemaei/Golang-Tutorial/-/blob/15-Concurrency/03-Intro/main.go\\n\\n```\\n1| package main\\n2| \\n3| import (\\n4| \\t\\\"runtime\\\"\\n5| \\t\\\"time\\\"\\n6| )\\n7| func main() {\\n8| func main() {\\n9| \\truntime.GOMAXPROCS(runtime.NumCPU())\\n10| \\tvalue := 0\\n11| \\tgo task1() \\n12| \\tgo task2()\\n13| \\tgo task3()\\n14| \\n15| \\tgo func() {\\n16| \\t\\t// lock\\n17| \\t\\tvalue++ //1\\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import (\\n4| \\t\\\"runtime\\\"\\n5| \\t\\\"time\\\"\\n6| )\\n7| \\n8| func main() {\\n9| \\truntime.GOMAXPROCS(runtime.NumCPU())\\n10| \\tvalue := 0\\n```\\n\\n```\\n4| \\t\\\"runtime\\\"\\n5| \\t\\\"time\\\"\\n6| )\\n7| \\n8| func main() {\\n9| \\truntime.GOMAXPROCS(runtime.NumCPU())\\n10| \\tvalue := 0\\n11| \\tgo task1() \\n12| \\tgo task2()\\n13| \\tgo task3()\\n14| \\tgo func() {\\n15| \\tgo func() {\\n16| \\t\\t// lock\\n17| \\t\\tvalue++ //1\\n18| \\t\\t//unlock\\n19| \\t}()\\n20| \\tgo func() {\\n21| \\t\\t// lock\\n22| \\t\\tvalue+=2 // 3\\n23| \\t\\t//unlock\\n24| \\t}()\\n```\\n\\n```\\n9| \\truntime.GOMAXPROCS(runtime.NumCPU())\\n10| \\tvalue := 0\\n11| \\tgo task1() \\n12| \\tgo task2()\\n13| \\tgo task3()\\n14| \\n15| \\tgo func() {\\n16| \\t\\t// lock\\n17| \\t\\tvalue++ //1\\n18| \\t\\t//unlock\\n19| \\tgo func() {\\n20| \\tgo func() {\\n21| \\t\\t// lock\\n22| \\t\\tvalue+=2 // 3\\n23| \\t\\t//unlock\\n24| \\t}()\\n25| \\tgo func() {\\n26| \\t\\t// lock\\n27| \\t\\tvalue+=3 // 6\\n28| \\t\\t//unlock\\n29| \\t}()\\n```\\n\\n```\\n14| \\n15| \\tgo func() {\\n16| \\t\\t// lock\\n17| \\t\\tvalue++ //1\\n18| \\t\\t//unlock\\n19| \\t}()\\n20| \\tgo func() {\\n21| \\t\\t// lock\\n22| \\t\\tvalue+=2 // 3\\n23| \\t\\t//unlock\\n24| \\tgo func() {\\n25| \\tgo func() {\\n26| \\t\\t// lock\\n27| \\t\\tvalue+=3 // 6\\n28| \\t\\t//unlock\\n29| \\t}()\\n30| \\n31| \\tprintln(value)\\n32| \\n33| \\ttime.Sleep(time.Second)\\n34| }\\n```\\n\\n```\\n25| \\tgo func() {\\n26| \\t\\t// lock\\n27| \\t\\tvalue+=3 // 6\\n28| \\t\\t//unlock\\n29| \\t}()\\n30| \\n31| \\tprintln(value)\\n32| \\n33| \\ttime.Sleep(time.Second)\\n34| }\\n35| func task1() {\\n36| func task1() {\\n37| \\tprintln(\\\"task1\\\")\\n38| }\\n39| \\n40| func task2() {\\n41| \\tprintln(\\\"task2\\\")\\n42| }\\n43| \\n44| func task3() {\\n45| \\tprintln(\\\"task3\\\")\\n```\\n\\n```\\n29| \\t}()\\n30| \\n31| \\tprintln(value)\\n32| \\n33| \\ttime.Sleep(time.Second)\\n34| }\\n35| \\n36| func task1() {\\n37| \\tprintln(\\\"task1\\\")\\n38| }\\n39| func task2() {\\n40| func task2() {\\n41| \\tprintln(\\\"task2\\\")\\n42| }\\n43| \\n44| func task3() {\\n45| \\tprintln(\\\"task3\\\")\\n46| }\\n47| \\n48| // race condition\\n49| //await\\n```\\n\\n```\\n33| \\ttime.Sleep(time.Second)\\n34| }\\n35| \\n36| func task1() {\\n37| \\tprintln(\\\"task1\\\")\\n38| }\\n39| \\n40| func task2() {\\n41| \\tprintln(\\\"task2\\\")\\n42| }\\n43| func task3() {\\n44| func task3() {\\n45| \\tprintln(\\\"task3\\\")\\n46| }\\n47| \\n48| // race condition\\n49| //await\\n```\\n\\n## Result 5: github.com/naeemaei/Golang-Tutorial/08-Function/04-Variadic/example2.go\\n\\nURL: /r/github.com/naeemaei/Golang-Tutorial/-/blob/08-Function/04-Variadic/example2.go\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| func main() {\\n5| func main() {\\n6| \\tPrintLog(\\\"Ali\\\", 1, \\\"Reza\\\", 3, \\\"Error\\\", 5, 6, \\\"Info\\\", 8, 9, false)\\n7| \\n8| }\\n9| \\n10| func PrintLog(logs ...interface{}) {\\n11| \\tfor i, item := range logs {\\n12| \\t\\tfmt.Printf(\\\"%d: %v\\\\n\\\", i, item)\\n13| \\t}\\n14| }\\n```\\n\\n\",\"tool_call_id\":\"call_ed4abf0a0b9be3a4\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
291+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ BEFORE EDITING**: Never edit a file you haven't already read in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the file first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/sourcegraph_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Create, debug, and configure Crush hooks (user-defined shell commands that fire before tool execution). Use when the user wants to add a hook, write a hook script, troubleshoot hook behavior, or configure hooks 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_049d\",\"function\":{\"arguments\":\"{\\\"query\\\": \\\"func main lang:go\\\"}\",\"name\":\"sourcegraph\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to search for 'func main' in Go repositories using the Sourcegraph tool.\"},{\"content\":\"# Sourcegraph Search Results\\n\\nFound 30 matches across 30 results\\n(Result limit reached, try a more specific query)\\n\\n## Result 1: github.com/RedHatOfficial/GoCourse/lesson3/01_func_type.go\\n\\nURL: /r/github.com/RedHatOfficial/GoCourse/-/blob/lesson3/01_func_type.go\\n\\n```\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func function1() {\\n6| \\tfmt.Println(\\\"function1\\\")\\n7| }\\n8| \\n9| func function2() {\\n10| \\tfmt.Println(\\\"function2\\\")\\n11| }\\n12| func main() {\\n13| func main() {\\n14| \\tvar a func()\\n15| \\tfmt.Println(a)\\n16| \\n17| \\ta = function1\\n18| \\tfmt.Println(a)\\n19| \\ta()\\n20| \\n21| \\ta = function2\\n22| \\tfmt.Println(a)\\n```\\n\\n```\\n3| import \\\"fmt\\\"\\n4| \\n5| func function1() {\\n6| \\tfmt.Println(\\\"function1\\\")\\n7| }\\n8| \\n9| func function2() {\\n10| \\tfmt.Println(\\\"function2\\\")\\n11| }\\n12| \\n13| \\tvar a func()\\n14| \\tvar a func()\\n15| \\tfmt.Println(a)\\n16| \\n17| \\ta = function1\\n18| \\tfmt.Println(a)\\n19| \\ta()\\n20| \\n21| \\ta = function2\\n22| \\tfmt.Println(a)\\n23| \\ta()\\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| func function1() {\\n5| func function1() {\\n6| \\tfmt.Println(\\\"function1\\\")\\n7| }\\n8| \\n9| func function2() {\\n10| \\tfmt.Println(\\\"function2\\\")\\n11| }\\n12| \\n13| func main() {\\n14| \\tvar a func()\\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| \\tfmt.Println(\\\"function1\\\")\\n6| \\tfmt.Println(\\\"function1\\\")\\n7| }\\n8| \\n9| func function2() {\\n10| \\tfmt.Println(\\\"function2\\\")\\n11| }\\n12| \\n13| func main() {\\n14| \\tvar a func()\\n15| \\tfmt.Println(a)\\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func function1() {\\n6| \\tfmt.Println(\\\"function1\\\")\\n7| }\\n8| func function2() {\\n9| func function2() {\\n10| \\tfmt.Println(\\\"function2\\\")\\n11| }\\n12| \\n13| func main() {\\n14| \\tvar a func()\\n15| \\tfmt.Println(a)\\n16| \\n17| \\ta = function1\\n18| \\tfmt.Println(a)\\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func function1() {\\n6| \\tfmt.Println(\\\"function1\\\")\\n7| }\\n8| \\n9| \\tfmt.Println(\\\"function2\\\")\\n10| \\tfmt.Println(\\\"function2\\\")\\n11| }\\n12| \\n13| func main() {\\n14| \\tvar a func()\\n15| \\tfmt.Println(a)\\n16| \\n17| \\ta = function1\\n18| \\tfmt.Println(a)\\n19| \\ta()\\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func function1() {\\n6| \\tfmt.Println(\\\"function1\\\")\\n7| }\\n8| \\n9| func function2() {\\n10| \\tfmt.Println(\\\"function2\\\")\\n```\\n\\n```\\n6| \\tfmt.Println(\\\"function1\\\")\\n7| }\\n8| \\n9| func function2() {\\n10| \\tfmt.Println(\\\"function2\\\")\\n11| }\\n12| \\n13| func main() {\\n14| \\tvar a func()\\n15| \\tfmt.Println(a)\\n16| \\ta = function1\\n17| \\ta = function1\\n18| \\tfmt.Println(a)\\n19| \\ta()\\n20| \\n21| \\ta = function2\\n22| \\tfmt.Println(a)\\n23| \\ta()\\n24| }\\n25| \\n```\\n\\n```\\n10| \\tfmt.Println(\\\"function2\\\")\\n11| }\\n12| \\n13| func main() {\\n14| \\tvar a func()\\n15| \\tfmt.Println(a)\\n16| \\n17| \\ta = function1\\n18| \\tfmt.Println(a)\\n19| \\ta()\\n20| \\ta = function2\\n21| \\ta = function2\\n22| \\tfmt.Println(a)\\n23| \\ta()\\n24| }\\n25| \\n```\\n\\n## Result 2: github.com/unknwon/the-way-to-go_ZH_CN/eBook/examples/chapter_6/defer.go\\n\\nURL: /r/github.com/unknwon/the-way-to-go_ZH_CN/-/blob/eBook/examples/chapter_6/defer.go\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| func main() {\\n5| func main() {\\n6| \\tFunction1()\\n7| }\\n8| \\n9| func Function1() {\\n10| \\tfmt.Printf(\\\"In Function1 at the top\\\\n\\\")\\n11| \\tdefer Function2()\\n12| \\tfmt.Printf(\\\"In Function1 at the bottom!\\\\n\\\")\\n13| }\\n14| \\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| \\tFunction1()\\n6| \\tFunction1()\\n7| }\\n8| \\n9| func Function1() {\\n10| \\tfmt.Printf(\\\"In Function1 at the top\\\\n\\\")\\n11| \\tdefer Function2()\\n12| \\tfmt.Printf(\\\"In Function1 at the bottom!\\\\n\\\")\\n13| }\\n14| \\n15| func Function2() {\\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func main() {\\n6| \\tFunction1()\\n7| }\\n8| func Function1() {\\n9| func Function1() {\\n10| \\tfmt.Printf(\\\"In Function1 at the top\\\\n\\\")\\n11| \\tdefer Function2()\\n12| \\tfmt.Printf(\\\"In Function1 at the bottom!\\\\n\\\")\\n13| }\\n14| \\n15| func Function2() {\\n16| \\tfmt.Printf(\\\"Function2: Deferred until the end of the calling function!\\\")\\n17| }\\n18| \\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func main() {\\n6| \\tFunction1()\\n7| }\\n8| \\n9| \\tfmt.Printf(\\\"In Function1 at the top\\\\n\\\")\\n10| \\tfmt.Printf(\\\"In Function1 at the top\\\\n\\\")\\n11| \\tdefer Function2()\\n12| \\tfmt.Printf(\\\"In Function1 at the bottom!\\\\n\\\")\\n13| }\\n14| \\n15| func Function2() {\\n16| \\tfmt.Printf(\\\"Function2: Deferred until the end of the calling function!\\\")\\n17| }\\n18| \\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func main() {\\n6| \\tFunction1()\\n7| }\\n8| \\n9| func Function1() {\\n10| \\tdefer Function2()\\n11| \\tdefer Function2()\\n12| \\tfmt.Printf(\\\"In Function1 at the bottom!\\\\n\\\")\\n13| }\\n14| \\n15| func Function2() {\\n16| \\tfmt.Printf(\\\"Function2: Deferred until the end of the calling function!\\\")\\n17| }\\n18| \\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func main() {\\n6| \\tFunction1()\\n7| }\\n8| \\n9| func Function1() {\\n10| \\tfmt.Printf(\\\"In Function1 at the top\\\\n\\\")\\n11| \\tfmt.Printf(\\\"In Function1 at the bottom!\\\\n\\\")\\n12| \\tfmt.Printf(\\\"In Function1 at the bottom!\\\\n\\\")\\n13| }\\n14| \\n15| func Function2() {\\n16| \\tfmt.Printf(\\\"Function2: Deferred until the end of the calling function!\\\")\\n17| }\\n18| \\n```\\n\\n```\\n4| \\n5| func main() {\\n6| \\tFunction1()\\n7| }\\n8| \\n9| func Function1() {\\n10| \\tfmt.Printf(\\\"In Function1 at the top\\\\n\\\")\\n11| \\tdefer Function2()\\n12| \\tfmt.Printf(\\\"In Function1 at the bottom!\\\\n\\\")\\n13| }\\n14| func Function2() {\\n15| func Function2() {\\n16| \\tfmt.Printf(\\\"Function2: Deferred until the end of the calling function!\\\")\\n17| }\\n18| \\n```\\n\\n```\\n5| func main() {\\n6| \\tFunction1()\\n7| }\\n8| \\n9| func Function1() {\\n10| \\tfmt.Printf(\\\"In Function1 at the top\\\\n\\\")\\n11| \\tdefer Function2()\\n12| \\tfmt.Printf(\\\"In Function1 at the bottom!\\\\n\\\")\\n13| }\\n14| \\n15| \\tfmt.Printf(\\\"Function2: Deferred until the end of the calling function!\\\")\\n16| \\tfmt.Printf(\\\"Function2: Deferred until the end of the calling function!\\\")\\n17| }\\n18| \\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func main() {\\n6| \\tFunction1()\\n7| }\\n8| \\n9| func Function1() {\\n10| \\tfmt.Printf(\\\"In Function1 at the top\\\\n\\\")\\n```\\n\\n## Result 3: github.com/unknwon/the-way-to-go_ZH_CN/eBook/examples/chapter_4/function_calls_function.go\\n\\nURL: /r/github.com/unknwon/the-way-to-go_ZH_CN/-/blob/eBook/examples/chapter_4/function_calls_function.go\\n\\n```\\n1| package main\\n2| \\n3| var a string\\n4| func main() {\\n5| func main() {\\n6| \\ta = \\\"G\\\"\\n7| \\tprint(a)\\n8| \\tf1()\\n9| }\\n10| func f1() {\\n11| \\ta := \\\"O\\\"\\n12| \\tprint(a)\\n13| \\tf2()\\n14| }\\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| var a string\\n4| \\n5| func main() {\\n6| \\ta = \\\"G\\\"\\n7| \\tprint(a)\\n8| \\tf1()\\n9| }\\n10| func f1() {\\n```\\n\\n```\\n1| package main\\n2| \\n3| var a string\\n4| \\n5| func main() {\\n6| \\ta = \\\"G\\\"\\n7| \\tprint(a)\\n8| \\tf1()\\n9| func f1() {\\n10| func f1() {\\n11| \\ta := \\\"O\\\"\\n12| \\tprint(a)\\n13| \\tf2()\\n14| }\\n15| func f2() {\\n16| \\tprint(a)\\n17| }\\n18| \\n```\\n\\n```\\n4| \\n5| func main() {\\n6| \\ta = \\\"G\\\"\\n7| \\tprint(a)\\n8| \\tf1()\\n9| }\\n10| func f1() {\\n11| \\ta := \\\"O\\\"\\n12| \\tprint(a)\\n13| \\tf2()\\n14| func f2() {\\n15| func f2() {\\n16| \\tprint(a)\\n17| }\\n18| \\n```\\n\\n## Result 4: github.com/RedHatOfficial/GoCourse/lesson3/02_func_type.go\\n\\nURL: /r/github.com/RedHatOfficial/GoCourse/-/blob/lesson3/02_func_type.go\\n\\n```\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func function1(x, y int) int {\\n6| \\treturn x + y\\n7| }\\n8| \\n9| func function2(x, y int) int {\\n10| \\treturn x * y\\n11| }\\n12| func main() {\\n13| func main() {\\n14| \\tvar a func(int, int) int\\n15| \\tfmt.Println(a)\\n16| \\n17| \\ta = function1\\n18| \\tfmt.Println(a)\\n19| \\tfmt.Println(a(10, 20))\\n20| \\n21| \\ta = function2\\n22| \\tfmt.Println(a)\\n```\\n\\n```\\n3| import \\\"fmt\\\"\\n4| \\n5| func function1(x, y int) int {\\n6| \\treturn x + y\\n7| }\\n8| \\n9| func function2(x, y int) int {\\n10| \\treturn x * y\\n11| }\\n12| \\n13| \\tvar a func(int, int) int\\n14| \\tvar a func(int, int) int\\n15| \\tfmt.Println(a)\\n16| \\n17| \\ta = function1\\n18| \\tfmt.Println(a)\\n19| \\tfmt.Println(a(10, 20))\\n20| \\n21| \\ta = function2\\n22| \\tfmt.Println(a)\\n23| \\tfmt.Println(a(10, 20))\\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func function1(x, y int) int {\\n6| \\treturn x + y\\n7| }\\n8| \\n9| func function2(x, y int) int {\\n10| \\treturn x * y\\n```\\n\\n\",\"tool_call_id\":\"call_049d\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond git context\\n - Draft concise (1-2 sentences) message focusing on \\\"why\\\" not \\\"what\\\"\\n - Use clear language, accurate reflection (\\\"add\\\"=new feature, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix)\\n - Avoid generic messages, review draft\\n\\n4. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\n Commit message here.\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n\\n Co-Authored-By: Crush <crush@charm.land>\\n\\n\\n EOF\\n )\\\"\\n\\n5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n6. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response.\\n</git_commits>\\n\\n<pull_requests>\\nUse gh command for ALL GitHub tasks. When user asks to create PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n3. Commit changes if needed\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Clear, concise language\\n - Accurate reflection of changes and purpose\\n - Avoid generic summaries\\n - Review draft\\n\\n6. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n ## Summary\\n\\n &lt;1-3 bullet points>\\n\\n ## Test plan\\n\\n [Checklist of TODOs...]\\n\\n\\n \U0001F498 Generated with Crush\\n\\n\\n EOF\\n )\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 100MB); overwrites without warning. For reading content into context use fetch.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 2000)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
924 headers:
292 headers:
925 Accept:
293 Accept:
926 - application/json
294 - application/json
@@ -937,537 +305,101 @@ interactions:
937 content_length: -1
305 content_length: -1
938 uncompressed: true
306 uncompressed: true
939 body: |+
307 body: |+
940− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"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}]}
1275−
1276− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"15"},"finish_reason":null}]}
1277−
1278− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-Con"},"finish_reason":null}]}
1279−
1280− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"currency"},"finish_reason":null}]}
1281−
1282− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
1283−
1284− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"03"},"finish_reason":null}]}
1285−
1286− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
1287−
1288− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Intro"},"finish_reason":null}]}
1289−
1290− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main"},"finish_reason":null}]}
1291−
1292− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
1293−
1294− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1295−
1296− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1297−
1298− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Gor"},"finish_reason":null}]}
1299−
1300− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"outines"},"finish_reason":null}]}
1301−
1302− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
1303−
1304− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" race"},"finish_reason":null}]}
1305−
1306− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" condition"},"finish_reason":null}]}
1307−
1308− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" demo"},"finish_reason":null}]}
1309−
1310− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
1311−
1312− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
1313−
1314− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
1315−
1316− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"5"},"finish_reason":null}]}
1317−
1318− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1319−
1320− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1321−
1322− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"na"},"finish_reason":null}]}
1323−
1324− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"e"},"finish_reason":null}]}
1325−
1326− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"em"},"finish_reason":null}]}
1327−
1328− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ae"},"finish_reason":null}]}
1329−
1330− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"i"},"finish_reason":null}]}
1331−
1332− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
1333−
1334− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
1335−
1336− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-T"},"finish_reason":null}]}
1337−
1338− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"utorial"},"finish_reason":null}]}
1339−
1340− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1341−
1342− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1343−
1344− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1345−
1346− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"08"},"finish_reason":null}]}
1347−
1348− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
1349−
1350− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Function"},"finish_reason":null}]}
1351−
1352− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
1353−
1354− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"04"},"finish_reason":null}]}
1355−
1356− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-V"},"finish_reason":null}]}
1357−
1358− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ari"},"finish_reason":null}]}
1359−
1360− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"adic"},"finish_reason":null}]}
1361−
1362− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/example"},"finish_reason":null}]}
1363−
1364− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"2"},"finish_reason":null}]}
1365−
1366− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
1367−
1368− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1369−
1370− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1371−
1372− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Vari"},"finish_reason":null}]}
1373−
1374− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"adic"},"finish_reason":null}]}
1375−
1376− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" function"},"finish_reason":null}]}
1377
309
1378− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found 30 matches"},"finish_reason":null}]}
1379
311
1380− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
1381
313
1382− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"..."},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `func main`"},"finish_reason":null}]}
1383
315
1384− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"interface"},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" in Go repositories on"},"finish_reason":null}]}
1385
317
1386− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"{"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Sourcegraph. Key"},"finish_reason":null}]}
1387
319
1388− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"}`"},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results include:\n\n-"},"finish_reason":null}]}
1389
321
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}]}
322+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" **github"},"finish_reason":null}]}
1391
323
1392− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"The"},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".com/RedHat"},"finish_reason":null}]}
1393
325
1394− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" search"},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Official/GoCourse"},"finish_reason":null}]}
1395
327
1396− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" returned"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"** — `lesson"},"finish_reason":null}]}
1397
329
1398− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"3/01_func"},"finish_reason":null}]}
1399
331
1400− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"30"},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_type.go` and"},"finish_reason":null}]}
1401
333
1402− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results"},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `02"},"finish_reason":null}]}
1403
335
1404− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" ("},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func_type.go`"},"finish_reason":null}]}
1405
337
1406− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"max"},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" demonstrating Go function"},"finish_reason":null}]}
1407
339
1408− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" types\n- **"},"finish_reason":null}]}
1409
341
1410− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" this"},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"github.com/unk"},"finish_reason":null}]}
1411
343
1412− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" query"},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"nwon/the-way"},"finish_reason":null}]}
1413
345
1414− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":")."},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-to-go_ZH"},"finish_reason":null}]}
1415
347
1416− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" To"},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_CN** — examples"},"finish_reason":null}]}
1417
349
1418− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" narrow"},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" covering"},"finish_reason":null}]}
1419
351
1420− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results"},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `defer`,"},"finish_reason":null}]}
1421
353
1422− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" function calls, and"},"finish_reason":null}]}
1423
355
1424− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" you"},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" chapter"},"finish_reason":null}]}
1425
357
1426− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" could"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" 4/"},"finish_reason":null}]}
1427
359
1428− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" add"},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"6 patterns\n"},"finish_reason":null}]}
1429
361
1430− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repo"},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"- Results"},"finish_reason":null}]}
1431
363
1432− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" filters"},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" span educational"},"finish_reason":null}]}
1433
365
1434− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" like"},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repos"},"finish_reason":null}]}
1435
367
1436− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":", tutorials, and"},"finish_reason":null}]}
1437
369
1438− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"repo"},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" real"},"finish_reason":null}]}
1439
371
1440− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
372+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-world"},"finish_reason":null}]}
1441
373
1442− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"specific"},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" projects"},"finish_reason":null}]}
1443
375
1444− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-org"},"finish_reason":null}]}
376+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"\n\nTo"},"finish_reason":null}]}
1445
377
1446− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
378+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" narrow results"},"finish_reason":null}]}
1447
379
1448− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" or"},"finish_reason":null}]}
380+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":", you"},"finish_reason":null}]}
1449
381
1450− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
382+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" could"},"finish_reason":null}]}
1451
383
1452− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" patterns"},"finish_reason":null}]}
384+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" add filters"},"finish_reason":null}]}
1453
385
1454− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" like"},"finish_reason":null}]}
386+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" like `repo:`"},"finish_reason":null}]}
1455
387
1456− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
388+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" or `"},"finish_reason":null}]}
1457
389
1458− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"file"},"finish_reason":null}]}
390+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"file:` ("},"finish_reason":null}]}
1459
391
1460− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
392+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"e.g., `"},"finish_reason":null}]}
1461
393
1462− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
394+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"func main lang"},"finish_reason":null}]}
1463
395
1464− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
396+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":go"},"finish_reason":null}]}
1465
397
1466− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
398+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repo:my"},"finish_reason":null}]}
1467
399
1468− data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
400+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"project`)."},"finish_reason":null}]}
1469
401
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}}}
402+ data: {"id":"chatcmpl-795141b78ce9753bd7098249","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":2889,"completion_tokens":132,"total_tokens":10733}}
1471
403
1472 data: [DONE]
404 data: [DONE]
1473
405
@@ -1476,4 +408,4 @@ interactions:
1476 - text/event-stream
408 - text/event-stream
1477 status: 200 OK
409 status: 200 OK
1478 code: 200
410 code: 200
1479− duration: 924.067458ms
411+ duration: 1.076504s
internal/agent/testdata/TestCoderAgent/glm-5.1/update_a_file.yaml+419−335

This diff is too big to show here.

internal/agent/testdata/TestCoderAgent/glm-5.1/write_tool.yaml+130−332

This diff is too big to show here.

internal/agent/tools/bash.go+32−27

This diff is too big to show here.

internal/agent/tools/bash.md.tpl → internal/agent/tools/bash.tplrenamed+33−64

This diff is too big to show here.

internal/agent/tools/bash_test.go+3−113

This diff is too big to show here.

internal/agent/tools/crush_info.go+3−4

This diff is too big to show here.

internal/agent/tools/crush_logs.go+3−21

This diff is too big to show here.

internal/agent/tools/crush_logs.md.tpl → internal/agent/tools/crush_logs.mdrenamed+2−2

This diff is too big to show here.

internal/agent/tools/diagnostics.go+3−4

This diff is too big to show here.

internal/agent/tools/diagnostics.md+24−1

This diff is too big to show here.

internal/agent/tools/download.go+8−26

This diff is too big to show here.

internal/agent/tools/download.mdnew file+28

This diff is too big to show here.

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

This diff is too big to show here.

internal/agent/tools/edit.go+15−48

This diff is too big to show here.

internal/agent/tools/edit.md+147−1

This diff is too big to show here.

internal/agent/tools/fetch.go+17−37

This diff is too big to show here.

internal/agent/tools/fetch.mdnew file+45

This diff is too big to show here.

internal/agent/tools/fetch.md.tpldeleted−2

This diff is too big to show here.

internal/agent/tools/glob.go+25−97

This diff is too big to show here.

internal/agent/tools/glob.mdnew file+40

This diff is too big to show here.

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

This diff is too big to show here.

internal/agent/tools/glob_test.godeleted−74

This diff is too big to show here.

internal/agent/tools/grep.go+22−60

This diff is too big to show here.

internal/agent/tools/grep.mdnew file+49

This diff is too big to show here.

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

This diff is too big to show here.

internal/agent/tools/job_kill.go+3−4

This diff is too big to show here.

internal/agent/tools/job_kill.md+1−1

This diff is too big to show here.

internal/agent/tools/job_output.go+3−5

This diff is too big to show here.

internal/agent/tools/job_output.md+22−1

This diff is too big to show here.

internal/agent/tools/list_mcp_resources.go+3−4

This diff is too big to show here.

internal/agent/tools/list_mcp_resources.md+18−1

This diff is too big to show here.

internal/agent/tools/ls.go+6−24

This diff is too big to show here.

internal/agent/tools/ls.mdnew file+34

This diff is too big to show here.

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

This diff is too big to show here.

internal/agent/tools/lsp_restart.go+3−4

This diff is too big to show here.

internal/agent/tools/lsp_restart.md+25−1

This diff is too big to show here.

internal/agent/tools/mcp-tools.go+3−4

This diff is too big to show here.

internal/agent/tools/mcp/init.go+11−54

This diff is too big to show here.

internal/agent/tools/mcp/init_test.go−488

This diff is too big to show here.

internal/agent/tools/mcp/tools.go+11−38

This diff is too big to show here.

internal/agent/tools/mcp/tools_test.go−48

This diff is too big to show here.

internal/agent/tools/multiedit.go+8−28

This diff is too big to show here.

internal/agent/tools/multiedit.md+125−1

This diff is too big to show here.

internal/agent/tools/multiedit_test.go+3−5

This diff is too big to show here.

internal/agent/tools/read_mcp_resource.go+3−4

This diff is too big to show here.

internal/agent/tools/read_mcp_resource.md+20−1

This diff is too big to show here.

internal/agent/tools/references.go+11−4

This diff is too big to show here.

internal/agent/tools/references.md+26−1

This diff is too big to show here.

internal/agent/tools/rg.go+1−10

This diff is too big to show here.

internal/agent/tools/safe.go+6−99

This diff is too big to show here.

internal/agent/tools/safe_test.godeleted−74

This diff is too big to show here.

internal/agent/tools/sourcegraph.go+8−25

This diff is too big to show here.

internal/agent/tools/sourcegraph.mdnew file+55

This diff is too big to show here.

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

This diff is too big to show here.

internal/agent/tools/todos.go+3−4

This diff is too big to show here.

internal/agent/tools/todos.md+90−1

This diff is too big to show here.

internal/agent/tools/tools.go+17−34

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/agent/tools/view_test.go+2−219

This diff is too big to show here.

internal/agent/tools/web_fetch.go+8−15

This diff is too big to show here.

internal/agent/tools/web_fetch.mdnew file+28

This diff is too big to show here.

internal/agent/tools/web_fetch.md.tpldeleted−2

This diff is too big to show here.

internal/agent/tools/web_search.go+5−12

This diff is too big to show here.

internal/agent/tools/web_search.mdnew file+18

This diff is too big to show here.

internal/agent/tools/web_search.md.tpldeleted−2

This diff is too big to show here.

internal/agent/tools/write.go+24−30

This diff is too big to show here.

internal/agent/tools/write.md+30−1

This diff is too big to show here.

internal/agent/tools/write_test.godeleted−49

This diff is too big to show here.

internal/agent/usage_fallback.godeleted−167

This diff is too big to show here.

internal/agent/usage_fallback_test.godeleted−339

This diff is too big to show here.

internal/app/app.go+57−183

This diff is too big to show here.

internal/app/app_test.go+107−133

This diff is too big to show here.

internal/app/testing.godeleted−72

This diff is too big to show here.

internal/backend/accepted_run_integration_test.godeleted−131

This diff is too big to show here.

internal/backend/agent.go+5−134

This diff is too big to show here.

internal/backend/agent_runcomplete_test.godeleted−163

This diff is too big to show here.

internal/backend/agent_test.godeleted−164

This diff is too big to show here.

internal/backend/backend.go+39−627

This diff is too big to show here.

internal/backend/backend_skills_test.godeleted−167

This diff is too big to show here.

internal/backend/backend_test.godeleted−1241

This diff is too big to show here.

internal/backend/config.go+9−102

This diff is too big to show here.

internal/backend/config_test.godeleted−205

This diff is too big to show here.

internal/backend/events.go+3−5

This diff is too big to show here.

internal/backend/permission.go+8−9

This diff is too big to show here.

internal/backend/race_off_test.godeleted−5

This diff is too big to show here.

internal/backend/race_on_test.godeleted−5

This diff is too big to show here.

internal/backend/session.go−6

This diff is too big to show here.

internal/backend/shell_command_test.godeleted−54

This diff is too big to show here.

internal/backend/testing.godeleted−69

This diff is too big to show here.

internal/client/client.go+4−21

This diff is too big to show here.

internal/client/config.go+6−73

This diff is too big to show here.

internal/client/config_test.godeleted−101

This diff is too big to show here.

internal/client/dial_other.go+1

This diff is too big to show here.

internal/client/proto.go+36−147

This diff is too big to show here.

internal/client/proto_test.godeleted−178

This diff is too big to show here.

internal/clipboard/clipboard.godeleted−44

This diff is too big to show here.

internal/clipboard/clipboard_not_supported.godeleted−13

This diff is too big to show here.

internal/clipboard/clipboard_supported.godeleted−30

This diff is too big to show here.

internal/cmd/clientserverrace/race_test.godeleted−361

This diff is too big to show here.

internal/cmd/dirs.go+37−62

This diff is too big to show here.

internal/cmd/dirs_test.gonew file+48

This diff is too big to show here.

internal/cmd/login.go+19−34

This diff is too big to show here.

internal/cmd/login_test.godeleted−21

This diff is too big to show here.

internal/cmd/logout.godeleted−182

This diff is too big to show here.

internal/cmd/logout_test.godeleted−41

This diff is too big to show here.

internal/cmd/logs.go+3−3

This diff is too big to show here.

internal/cmd/models.go+29−74

This diff is too big to show here.

internal/cmd/root.go+79−300

This diff is too big to show here.

internal/cmd/root_other.go+1

This diff is too big to show here.

internal/cmd/run.go+37−168

This diff is too big to show here.

internal/cmd/run_stream_test.godeleted−417

This diff is too big to show here.

internal/cmd/schema.go+1−35

This diff is too big to show here.

internal/cmd/server.go+6−6

This diff is too big to show here.

internal/cmd/server_other.go+1

This diff is too big to show here.

internal/cmd/session.go+5−11

This diff is too big to show here.

internal/commands/commands.go−28

This diff is too big to show here.

internal/commands/commands_test.go−61

This diff is too big to show here.

internal/config/atomicwrite.godeleted−38

This diff is too big to show here.

internal/config/atomicwrite_test.godeleted−43

This diff is too big to show here.

internal/config/clone_test.godeleted−46

This diff is too big to show here.

internal/config/config.go+54−310

This diff is too big to show here.

internal/config/docker_mcp.go+16−23

This diff is too big to show here.

internal/config/docker_mcp_test.go+7−9

This diff is too big to show here.

internal/config/hyper.go+1−1

This diff is too big to show here.

internal/config/load.go+75−436

This diff is too big to show here.

internal/config/load_test.go+128−830

This diff is too big to show here.

internal/config/mcp_resolved_url_test.godeleted−105

This diff is too big to show here.

internal/config/provider.go+6−11

This diff is too big to show here.

internal/config/recent_models_test.go+170−67

This diff is too big to show here.

internal/config/refresh_singleflight_test.godeleted−175

This diff is too big to show here.

internal/config/reload_hooks_test.godeleted−102

This diff is too big to show here.

internal/config/resolve.go+131−126

This diff is too big to show here.

internal/config/resolve_real_test.godeleted−512

This diff is too big to show here.

internal/config/resolve_test.go+288−185

This diff is too big to show here.

internal/config/scopeb_race_test.godeleted−74

This diff is too big to show here.

internal/config/store.go+141−554

This diff is too big to show here.

internal/config/store_test.go+10−282

This diff is too big to show here.

internal/config/update_model_bench_test.godeleted−108

This diff is too big to show here.

internal/csync/maps.go+5−20

This diff is too big to show here.

internal/db/connect.go+7−155

This diff is too big to show here.

internal/db/connect_modernc.go−3

This diff is too big to show here.

internal/db/connect_ncruces.go+1−5

This diff is too big to show here.

internal/db/connect_test.godeleted−210

This diff is too big to show here.

internal/db/datadirlock.godeleted−131

This diff is too big to show here.

internal/db/db.go+4−24

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/db/models.go+1−1

This diff is too big to show here.

internal/db/querier.go+3−5

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/db/sql/messages.sql−7

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/discover/discover.godeleted−145

This diff is too big to show here.

internal/discover/discover_test.godeleted−221

This diff is too big to show here.

internal/discover/enricher.godeleted−60

This diff is too big to show here.

internal/discover/litellm.godeleted−87

This diff is too big to show here.

internal/discover/litellm_test.godeleted−173

This diff is too big to show here.

internal/discover/llamacpp.godeleted−83

This diff is too big to show here.

internal/discover/llamacpp_test.godeleted−135

This diff is too big to show here.

internal/discover/lmstudio.godeleted−95

This diff is too big to show here.

internal/discover/lmstudio_test.godeleted−154

This diff is too big to show here.

internal/discover/ollama.godeleted−105

This diff is too big to show here.

internal/discover/ollama_test.godeleted−131

This diff is too big to show here.

internal/discover/omlx.godeleted−73

This diff is too big to show here.

internal/discover/omlx_test.godeleted−92

This diff is too big to show here.

internal/dns/android.godeleted−41

This diff is too big to show here.

internal/event/event.go+5−24

This diff is too big to show here.

internal/event/event_test.go+1−2

This diff is too big to show here.

internal/filepathext/filepath.go−25

This diff is too big to show here.

internal/filepathext/filepath_test.godeleted−37

This diff is too big to show here.

internal/filetracker/service.go+2−19

This diff is too big to show here.

internal/fsext/fileutil.go+26−47

This diff is too big to show here.

internal/fsext/fileutil_dirtrim_test.godeleted−32

This diff is too big to show here.

internal/fsext/lookup.go+7−142

This diff is too big to show here.

internal/fsext/lookup_test.go−125

This diff is too big to show here.

internal/fsext/owner_others.go+5−8

This diff is too big to show here.

internal/fsext/owner_windows.go−7

This diff is too big to show here.

internal/herdr/client.godeleted−405

This diff is too big to show here.

internal/herdr/client_test.godeleted−158

This diff is too big to show here.

internal/herdr/translate.godeleted−150

This diff is too big to show here.

internal/herdr/translate_test.godeleted−145

This diff is too big to show here.

internal/history/file.go+15−20

This diff is too big to show here.

internal/hooks/hooks.go+1−2

This diff is too big to show here.

internal/hooks/hooks_test.go+3−138

This diff is too big to show here.

internal/hooks/input.go+2−8

This diff is too big to show here.

internal/hooks/runner.go+27−115

This diff is too big to show here.

internal/lock/lock.godeleted−75

This diff is too big to show here.

internal/lock/lock_test.godeleted−168

This diff is too big to show here.

internal/lock/lock_unix.godeleted−45

This diff is too big to show here.

internal/lock/lock_windows.godeleted−57

This diff is too big to show here.

internal/lsp/client.go+3−17

This diff is too big to show here.

internal/lsp/client_test.go+1−37

This diff is too big to show here.

internal/lsp/handlers.go+6−6

This diff is too big to show here.

internal/lsp/manager.go+8−28

This diff is too big to show here.

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

This diff is too big to show here.

internal/message/attachment.go+2−3

This diff is too big to show here.

internal/message/content.go+23−110

This diff is too big to show here.

internal/message/message.go+61−425

This diff is too big to show here.

internal/message/message_test.godeleted−695

This diff is too big to show here.

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

This diff is too big to show here.

internal/oauth/copilot/client_test.godeleted−70

This diff is too big to show here.

internal/oauth/token.go+4−33

This diff is too big to show here.

internal/permission/permission.go+92−132

This diff is too big to show here.

internal/permission/permission_test.go−286

This diff is too big to show here.

internal/proto/agent.go+2−9

This diff is too big to show here.

internal/proto/mcp.go+4−4

This diff is too big to show here.

internal/proto/message.go+7−69

This diff is too big to show here.

internal/proto/permission.go−6

This diff is too big to show here.

internal/proto/permission_test.godeleted−186

This diff is too big to show here.

internal/proto/proto.go+13−122

This diff is too big to show here.

internal/proto/requests.go+5−50

This diff is too big to show here.

internal/proto/requests_test.godeleted−106

This diff is too big to show here.

internal/proto/session.go−22

This diff is too big to show here.

internal/proto/skills.godeleted−28

This diff is too big to show here.

internal/proto/tools.go+38−22

This diff is too big to show here.

internal/proto/version.go−1

This diff is too big to show here.

internal/pubsub/broker.go+18−185

This diff is too big to show here.

internal/pubsub/broker_test.godeleted−117

This diff is too big to show here.

internal/pubsub/events.go−10

This diff is too big to show here.

internal/server/agent_cancel_test.godeleted−227

This diff is too big to show here.

internal/server/config.go+1−59

This diff is too big to show here.

internal/server/e2e_agent_test.godeleted−742

This diff is too big to show here.

internal/server/e2e_test.godeleted−612

This diff is too big to show here.

internal/server/events.go+4−101

This diff is too big to show here.

internal/server/events_test.godeleted−182

This diff is too big to show here.

internal/server/logging.go+2−4

This diff is too big to show here.

internal/server/multiclient_test.godeleted−230

This diff is too big to show here.

internal/server/net_other.go+4−54

This diff is too big to show here.

internal/server/net_windows.go+3−16

This diff is too big to show here.

internal/server/proto.go+15−175

This diff is too big to show here.

internal/server/recover.godeleted−59

This diff is too big to show here.

internal/server/recover_test.godeleted−94

This diff is too big to show here.

internal/server/server.go+7−59

This diff is too big to show here.

internal/server/sessions_isbusy_test.godeleted−334

This diff is too big to show here.

internal/server/socket.godeleted−10

This diff is too big to show here.

internal/server/socket_classify.godeleted−27

This diff is too big to show here.

internal/server/socket_test.godeleted−193

This diff is too big to show here.

internal/session/session.go+9−63

This diff is too big to show here.

internal/session/session_test.godeleted−81

This diff is too big to show here.

internal/shell/background.go+1−1

This diff is too big to show here.

internal/shell/background_test.go+6−2

This diff is too big to show here.

internal/shell/dispatch.godeleted−425

This diff is too big to show here.

internal/shell/dispatch_test.godeleted−594

This diff is too big to show here.

internal/shell/dispatch_windows_test.godeleted−40

This diff is too big to show here.

internal/shell/exec_unix.godeleted−108

This diff is too big to show here.

internal/shell/exec_windows.godeleted−23

This diff is too big to show here.

internal/shell/expand.godeleted−162

This diff is too big to show here.

internal/shell/expand_test.godeleted−241

This diff is too big to show here.

internal/shell/isolation_unix_test.godeleted−143

This diff is too big to show here.

internal/shell/jq.go+4−69

This diff is too big to show here.

internal/shell/jq_test.godeleted−212

This diff is too big to show here.

internal/shell/persist_message.godeleted−44

This diff is too big to show here.

internal/shell/persist_message_test.godeleted−69

This diff is too big to show here.

internal/shell/run.godeleted−345

This diff is too big to show here.

internal/shell/run_test.godeleted−364

This diff is too big to show here.

internal/shell/shell.go+68−26

This diff is too big to show here.

internal/shell/stream.godeleted−52

This diff is too big to show here.

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

This diff is too big to show here.

internal/skills/builtin/crush-hooks/SKILL.md+140−95

This diff is too big to show here.

internal/skills/catalog.godeleted−154

This diff is too big to show here.

internal/skills/diagnostics_test.go−42

This diff is too big to show here.

internal/skills/embed.go+1−1

This diff is too big to show here.

internal/skills/manager.godeleted−227

This diff is too big to show here.

internal/skills/manager_test.godeleted−249

This diff is too big to show here.

internal/skills/skills.go+18−123

This diff is too big to show here.

internal/skills/skills_test.go+27−36

This diff is too big to show here.

internal/swagger/docs.go+3−131

This diff is too big to show here.

internal/swagger/swagger.json+3−131

This diff is too big to show here.

internal/swagger/swagger.yaml+3−99

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/attachments/attachments.go+4−21

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/chat/applyhighlight_callback_test.godeleted−207

This diff is too big to show here.

internal/ui/chat/assistant.go+80−706

This diff is too big to show here.

internal/ui/chat/assistant_render_test.godeleted−78

This diff is too big to show here.

internal/ui/chat/assistant_section_cache_test.godeleted−464

This diff is too big to show here.

internal/ui/chat/assistant_test.godeleted−142

This diff is too big to show here.

internal/ui/chat/assistant_thinking_bench_test.godeleted−69

This diff is too big to show here.

internal/ui/chat/assistant_thinking_bound_test.godeleted−105

This diff is too big to show here.

internal/ui/chat/assistant_thinking_window_test.godeleted−500

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/chat/incremental_glamour_test.godeleted−981

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/chat/messages.go+8−122

This diff is too big to show here.

internal/ui/chat/prefix_cache_test.godeleted−197

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/chat/shell.godeleted−358

This diff is too big to show here.

internal/ui/chat/shell_test.godeleted−59

This diff is too big to show here.

internal/ui/chat/streaming_markdown.godeleted−721

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/chat/tools.go+76−247

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/chat/version_bump_test.godeleted−567

This diff is too big to show here.

internal/ui/common/ansi16.godeleted−128

This diff is too big to show here.

internal/ui/common/ansi16_test.godeleted−106

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/common/common.go+4−25

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/common/elements.go+8−50

This diff is too big to show here.

internal/ui/common/elements_test.godeleted−35

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/common/interface.go−9

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/completions/version_bump_test.godeleted−85

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/dialog/commands.go+164−56

This diff is too big to show here.

internal/ui/dialog/commands_item.go+18−78

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/dialog/notifications.godeleted−310

This diff is too big to show here.

internal/ui/dialog/oauth.go+19−17

This diff is too big to show here.

internal/ui/dialog/overlay_test.godeleted−189

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/dialog/permissions_test.godeleted−99

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/dialog/version_bump_test.godeleted−219

This diff is too big to show here.

internal/ui/difftastic/difftastic.godeleted−60

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/diffview/diffview_test.go+18

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/list/list_test.go−770

This diff is too big to show here.

internal/ui/logo/example/main.go+1−1

This diff is too big to show here.

internal/ui/logo/logo.go+4−12

This diff is too big to show here.

internal/ui/model/chat.go+31−291

This diff is too big to show here.

internal/ui/model/chat_draw_cache_test.go−334

This diff is too big to show here.

internal/ui/model/chat_expand_test.go−55

This diff is too big to show here.

internal/ui/model/clipboard.go+15

This diff is too big to show here.

internal/ui/model/clipboard_not_supported.go+7

This diff is too big to show here.

internal/ui/model/clipboard_supported.go+15

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/model/filter_test.go−162

This diff is too big to show here.

internal/ui/model/header.go+14−128

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/model/onboarding.go+12−15

This diff is too big to show here.

internal/ui/model/permission_test.go−96

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/model/session_test.go−142

This diff is too big to show here.

internal/ui/model/sidebar.go+26−183

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/model/skills_test.go+2−2

This diff is too big to show here.

internal/ui/model/status.go+4−6

This diff is too big to show here.

internal/ui/model/ui.go+219−1115

This diff is too big to show here.

internal/ui/notification/bell.go−27

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/notification/osc.go−135

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/styles/quickstyle.go−989

This diff is too big to show here.

internal/ui/styles/styles.go+950−63

This diff is too big to show here.

internal/ui/styles/themes.go−235

This diff is too big to show here.

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

This diff is too big to show here.

internal/version/version.go+6−34

This diff is too big to show here.

internal/workspace/app_workspace.go+8−83

This diff is too big to show here.

internal/workspace/client_workspace.go+24−215

This diff is too big to show here.

internal/workspace/client_workspace_test.go−213

This diff is too big to show here.

internal/workspace/export_test.go−14

This diff is too big to show here.

internal/workspace/multiclient_integration_test.go−176

This diff is too big to show here.

internal/workspace/workspace.go+3−22

This diff is too big to show here.

main.go−1

This diff is too big to show here.

schema.json+21−98

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

vendor/charm.land/catwalk/LICENSE−21

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

vendor/charm.land/fantasy/LICENSE−177

This diff is too big to show here.

vendor/charm.land/fantasy/NOTICE−13

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/tmpl/xml.go.tmpl−34

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/toast.go−225

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/bind.go−86

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/bind_noop.go−19

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/bind_windows.go−174

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/impl.go−179

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/procs.go−37

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/registry.go−110

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/CHANGELOG.md−849

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/LICENSE.txt−21

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/README.md−39

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/ci.yml−29

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/cloud.go−44

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/doc.go−53

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/core.go−173

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/doc.go−264

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/errors.go−17

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/etag.go−57

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/exported.go−175

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/pipeline.go−77

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/request.go−260

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/response_error.go−201

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log/log.go−50

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/async/async.go−159

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/body/body.go−135

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/fake/fake.go−133

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/loc/loc.go−123

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/op/op.go−148

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/poller.go−24

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/util.go−212

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/constants.go−44

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/shared.go−149

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/doc.go−10

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/log.go−55

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/doc.go−10

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/policy.go−198

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/doc.go−10

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/errors.go−27

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pager.go−138

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pipeline.go−94

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_api_version.go−75

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_bearer_token.go−236

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_body_download.go−72

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_header.go−40

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_trace.go−154

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_include_response.go−35

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_key_credential.go−64

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_logging.go−264

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_request_id.go−34

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_retry.go−276

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_sas_credential.go−55

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_telemetry.go−83

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/poller.go−396

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/request.go−281

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/response.go−109

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_other.go−15

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_wasm.go−15

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_http_client.go−48

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/doc.go−9

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/progress.go−89

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/constants.go−41

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/tracing.go−191

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/LICENSE.txt−21

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/diag.go−51

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/doc.go−7

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/doc.go−7

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/errorinfo.go−46

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/exported/exported.go−129

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/doc.go−7

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/log.go−104

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/poller/util.go−155

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/temporal/resource.go−123

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/doc.go−7

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/uuid.go−76

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/.gitignore−14

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/CONTRIBUTING.md

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/LICENSE−21

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/README.md−242

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/SECURITY.md−6

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/commonmark.go−393

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/escape/escape.go−65

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/from.go−464

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/logo_five_years.png

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/markdown.go−212

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/utils.go−533

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/.gitignore−16

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/.travis.yml−9

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/LICENSE−21

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/Makefile−32

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/README.md−232

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/depth.go−129

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/pkg.go−184

This diff is too big to show here.

vendor/github.com/MakeNowJust/heredoc/LICENSE−21

This diff is too big to show here.

vendor/github.com/MakeNowJust/heredoc/README.md−52

This diff is too big to show here.

vendor/github.com/MakeNowJust/heredoc/heredoc.go−105

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/.gitattributes−1

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/.gitignore−10

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/.golangci.yml−147

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/CODEOWNERS−1

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/LICENSE−22

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/README.md−89

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/SECURITY.md−41

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/backup.go−287

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/doc.go−22

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/ea.go−137

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/file.go−320

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/fileinfo.go−106

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/hvsock.go−582

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/fs/doc.go−2

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/fs/fs.go−262

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/fs/security.go−12

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go−61

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/socket/rawaddr.go−20

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/socket/socket.go−177

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go−69

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go−132

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pipe.go−586

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go−232

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pkg/guid/guid_nonwindows.go−16

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pkg/guid/guid_windows.go−13

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pkg/guid/variant_string.go−27

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/privilege.go−196

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/reparse.go−131

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/sd.go−133

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/syscall.go−5

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/zsyscall_windows.go−378

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/.gitattributes−1

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/.gitignore−16

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/LICENSE−12

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/README.md−218

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/array.go−124

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/doc.go−123

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/expand.go−70

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/filter.go−163

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/iteration.go−61

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/manipulation.go−679

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/property.go−275

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/query.go−49

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/traversal.go−704

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/type.go−203

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/utilities.go−177

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/.editorconfig−17

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/.gitignore−28

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/.golangci.yml−122

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/.goreleaser.yml−34

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/AGENTS.md−11

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/BUILD.bit−93

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/COPYING−118

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/Dockerfile−64

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/Justfile−59

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/README.md−309

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/biome.json−6

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/chroma.jpg

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/coalesce.go−35

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/colour.go−192

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/delegate.go−161

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/doc.go−7

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/emitters.go−233

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatter.go−43

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/api.go−57

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/html/html.go−692

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/json.go−39

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/svg/font_liberation_mono.go−51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/svg/svg.go−222

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/tokens.go−18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/tty_indexed.go−284

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/tty_truecolour.go−76

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/iterator.go−93

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexer.go−179

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/README.md−46

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/caddyfile.go−275

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/cl.go−243

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/dns.go−17

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/emacs.go−533

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/abap.xml−154

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/abnf.xml−66

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/actionscript.xml−68

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/actionscript_3.xml−163

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ada.xml−321

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/agda.xml−66

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/al.xml−75

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/alloy.xml−58

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ampl.xml−98

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/angular2.xml−109

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/antlr.xml−317

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/apacheconf.xml−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/apl.xml−59

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/applescript.xml−151

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arangodb_aql.xml−174

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arduino.xml−322

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/armasm.xml−126

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arturo.xml−119

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/atl.xml−165

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/autohotkey.xml−78

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/autoit.xml−70

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/awk.xml−95

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ballerina.xml−97

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bash.xml−222

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bash_session.xml−25

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/batchfile.xml−660

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/beef.xml−120

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bibtex.xml−152

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bicep.xml−84

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/blitzbasic.xml−141

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bnf.xml−28

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bqn.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/brainfuck.xml−51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c#.xml−121

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c++.xml−331

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c.xml−260

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c3.xml−374

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cap_n_proto.xml−122

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cassandra_cql.xml−137

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ceylon.xml−151

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cfengine3.xml−197

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cfstatement.xml−92

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/chaiscript.xml−134

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/chapel.xml−143

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cheetah.xml−55

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/clojure.xml−71

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cmake.xml−90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cobol.xml−90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/coffeescript.xml−210

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/common_lisp.xml−184

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/coq.xml−136

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/core.xml−79

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/crystal.xml−762

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/css.xml−323

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/csv.xml−53

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cue.xml−85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cython.xml−372

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/d.xml−133

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dart.xml−213

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dax.xml−39

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/desktop_entry.xml−17

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/devicetree.xml−251

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/diff.xml−52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/django_jinja.xml−153

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dns.xml−44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/docker.xml−68

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dtd.xml−168

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dylan.xml−176

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ebnf.xml−90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/elixir.xml−744

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/elm.xml−119

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/emacslisp.xml−132

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/erb.xml−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/erlang.xml−166

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/factor.xml−412

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fennel.xml−68

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fish.xml−159

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/forth.xml−78

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fortran.xml−102

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fortranfixed.xml−71

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fsharp.xml−245

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gas.xml−150

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gdscript.xml−259

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gdscript3.xml−270

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gemfile_lock.xml−81

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gettext.xml−24

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gherkin.xml−263

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gleam.xml−100

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/glsl.xml−65

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gnuplot.xml−289

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/go_template.xml−114

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/graphql.xml−92

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/groff.xml−90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/groovy.xml−135

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/handlebars.xml−147

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hare.xml−98

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/haskell.xml−275

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hcl.xml−143

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hexdump.xml−189

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hlb.xml−131

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hlsl.xml−110

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/holyc.xml−252

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/html.xml−159

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hy.xml−104

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/idris.xml−216

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/igor.xml−47

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ini.xml−52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/io.xml−71

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/iscdhcpd.xml−96

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/j.xml−157

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/janet.xml−48

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/java.xml−206

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/javascript.xml−160

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/json.xml−117

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jsonata.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jsonnet.xml−138

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/julia.xml−400

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jungle.xml−98

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kakoune.xml−96

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kdl.xml−75

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kotlin.xml−234

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lateralus.xml−184

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lean.xml−56

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lighttpd_configuration_file.xml−42

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lilypond.xml−133

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/llvm.xml−73

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lox.xml−78

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lua.xml−158

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/luau.xml−173

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/makefile.xml−131

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mako.xml−120

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mason.xml−89

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/materialize_sql_dialect.xml−155

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mathematica.xml−60

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/matlab.xml−114

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mcfunction.xml−138

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/meson.xml−86

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/metal.xml−270

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/microcad.xml−139

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/minizinc.xml−82

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mlir.xml−73

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/modelica.xml−106

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/modula-2.xml−245

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mojo.xml−228

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/monkeyc.xml−153

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/moonbit.xml−75

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/moonscript.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/morrowindscript.xml−90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/myghty.xml−77

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mysql.xml−121

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nasm.xml−126

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/natural.xml−143

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ndisasm.xml−123

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/newspeak.xml−121

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nginx_configuration_file.xml−101

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nim.xml−211

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nix.xml−258

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nsis.xml−59

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nu.xml−126

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/objective-c.xml−510

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/objectpascal.xml−142

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ocaml.xml−153

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/octave.xml−101

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/odin.xml−127

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/onesenterprise.xml−92

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/openedge_abl.xml−101

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/openscad.xml−96

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/org_mode.xml−329

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pacmanconf.xml−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/perl.xml−400

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/php.xml−258

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pig.xml−105

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pkgconfig.xml−73

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pl_pgsql.xml−119

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/plaintext.xml−21

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/plutus_core.xml−105

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pony.xml−135

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/postgresql_sql_dialect.xml−155

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/postscript.xml−93

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/povray.xml−58

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/powerquery.xml−51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/powershell.xml−230

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/prolog.xml−115

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/promela.xml−119

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/promql.xml−123

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/properties.xml−45

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/protocol_buffer.xml−124

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/prql.xml−161

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/psl.xml−213

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/puppet.xml−100

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/python.xml−595

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/python_2.xml−356

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/qbasic.xml−173

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/qml.xml−113

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/r.xml−128

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/racket.xml−260

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ragel.xml−149

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/react.xml−236

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/reasonml.xml−147

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/reg.xml−68

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rego.xml−94

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rexx.xml−127

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rgbasm.xml−239

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ring.xml−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rpgle.xml−176

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rpm_spec.xml−58

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ruby.xml−728

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rust.xml−375

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sas.xml−191

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sass.xml−362

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scala.xml−274

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scdoc.xml−115

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scheme.xml−106

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scilab.xml−98

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scss.xml−373

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sed.xml−92

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sieve.xml−61

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/smali.xml−73

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/smalltalk.xml−294

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/smarty.xml−79

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/snbt.xml−58

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/snobol.xml−95

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/solidity.xml−291

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sourcepawn.xml−59

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/spade.xml−292

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sparql.xml−160

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sql.xml−90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/squidconf.xml−63

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/standard_ml.xml−548

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/stas.xml−85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/stylus.xml−132

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/swift.xml−207

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/systemd.xml−63

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/systemverilog.xml−181

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tablegen.xml−69

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tal.xml−43

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tasm.xml−135

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tcl.xml−272

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tcsh.xml−121

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/templ.xml−315

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/termcap.xml−75

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/terminfo.xml−84

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/terraform.xml−149

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tex.xml−113

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/thrift.xml−154

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/toml.xml−45

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tradingview.xml−81

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/transact-sql.xml−137

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/turing.xml−82

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/turtle.xml−170

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/twig.xml−155

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/txtpb.xml−162

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typescript.xml−302

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typoscript.xml−178

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typoscriptcssdata.xml−52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typoscripthtmldata.xml−52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typst.xml−108

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ucode.xml−147

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/v.xml−355

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/v_shell.xml−365

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vala.xml−72

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vb_net.xml−162

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/verilog.xml−158

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vhdl.xml−171

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vhs.xml−48

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/viml.xml−85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vue.xml−295

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/wat.xml−149

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/wdte.xml−43

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/webgpu_shading_language.xml−142

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/webvtt.xml−283

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/whiley.xml−57

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/xml.xml−96

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/xorg.xml−35

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/yaml.xml−132

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/yang.xml−99

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/z80_assembly.xml−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/zed.xml−51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/zig.xml−187

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/erb.go−29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/gemtext.go−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/genshi.go−118

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/go.go−81

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/haxe.go−647

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/html.go−8

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/http.go−131

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/lexers.go−85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/markdown.go−107

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/markless.go−168

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/mysql.go−33

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/php.go−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/raku.go−1710

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/rst.go−89

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/svelte.go−70

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/typoscript.go−85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/yaml_jinja.go−20

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/zed.go−24

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/mutators.go−201

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/pygments-lexers.txt−605

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/quick/quick.go−44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/regexp.go−533

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/registry.go−228

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/remap.go−94

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/renovate.json5−25

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/serialise.go−483

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/style.go−530

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/abap.xml−11

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/algol.xml−18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/algol_nu.xml−18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/api.go−95

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/arduino.xml−18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/ashen.xml−69

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/aura-theme-dark-soft.xml−107

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/aura-theme-dark.xml−107

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/autumn.xml−36

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/average.xml−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/base16-snazzy.xml−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/borland.xml−26

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/bw.xml−23

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-frappe.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-latte.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-macchiato.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-mocha.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/colorful.xml−52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/compat.go−69

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/darcula.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/doom-one.xml−51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/doom-one2.xml−64

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/dracula.xml−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/emacs.xml−44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/evergarden.xml−33

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/friendly.xml−44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/fruity.xml−19

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/github-dark.xml−46

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/github.xml−39

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/gruvbox-light.xml−34

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/gruvbox.xml−34

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/hr_high_contrast.xml−12

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/hrdark.xml−10

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/igor.xml−9

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/kanagawa-dragon.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/kanagawa-lotus.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/kanagawa-wave.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/lovelace.xml−53

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/manni.xml−44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/modus-operandi.xml−13

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/modus-vivendi.xml−13

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/monokai.xml−29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/monokailight.xml−26

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/murphy.xml−52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/native.xml−35

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/nord.xml−46

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/nordic.xml−46

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/onedark.xml−25

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/onesenterprise.xml−10

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/paraiso-dark.xml−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/paraiso-light.xml−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/pastie.xml−45

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/perldoc.xml−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/pygments.xml−42

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rainbow_dash.xml−40

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rose-pine-dawn.xml−29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rose-pine-moon.xml−29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rose-pine.xml−29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rpgle.xml−30

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rrt.xml−19

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/solarized-dark.xml−39

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/solarized-dark256.xml−41

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/solarized-light.xml−17

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/swapoff.xml−18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tango.xml−72

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-day.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-moon.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-night.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-storm.xml−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/trac.xml−35

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/vim.xml−29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/vs.xml−16

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/vulcan.xml−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/witchhazel.xml−31

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/xcode-dark.xml−31

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/xcode.xml−22

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/table.py−31

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/test.jsonl−2

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/tokentype_enumer.go−588

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/types.go−357

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/.gitignore−2

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/LICENSE−19

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/README.md−19

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/backward_references.go−185

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/backward_references_hq.go−796

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/bit_cost.go−436

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/bit_reader.go−266

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/bitwriter.go−56

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/block_splitter.go−144

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/block_splitter_command.go−434

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/block_splitter_distance.go−433

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/block_splitter_literal.go−433

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/brotli_bit_stream.go−1435

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/cluster.go−30

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/cluster_command.go−164

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/cluster_distance.go−326

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/cluster_literal.go−326

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/command.go−254

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/compress_fragment.go−834

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/compress_fragment_two_pass.go−775

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/constants.go−77

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/context.go−2176

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/decode.go−2581

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/dictionary.go−122890

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/dictionary_hash.go−32779

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/encode.go−1220

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/encoder.go−177

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/encoder_dict.go−22

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/encoder_fast.go−197

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/entropy_encode.go−592

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/entropy_encode_static.go−4399

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/fast_log.go−290

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/find_match_length.go−45

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/LICENSE−27

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/README.md−2

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/gzip.go−65

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/huffman_bit_writer.go−517

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/huffman_code.go−346

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/token.go−80

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/writer.go−66

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/h10.go−287

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/h5.go−214

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/h6.go−216

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash.go−342

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash_composite.go−93

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash_forgetful_chain.go−252

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash_longest_match_quickly.go−214

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash_rolling.go−168

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/histogram.go−226

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/http.go−189

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/huffman.go−653

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/literal_cost.go−182

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/bargain1.go−212

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/bargain2.go−248

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/bargain3.go−278

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/emitter.go−34

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/m0.go−175

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/m4.go−339

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/matchfinder.go−103

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/pathfinder.go−328

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/textencoder.go−53

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/trio.go−326

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/zdfast.go−258

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/zfast.go−206

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/zm.go−301

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/memory.go−66

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/metablock.go−574

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/metablock_command.go−165

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/metablock_distance.go−165

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/metablock_literal.go−165

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/params.go−37

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/platform.go−103

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/prefix.go−30

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/prefix_dec.go−723

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/quality.go−196

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/reader.go−111

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/ringbuffer.go−134

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/state.go−294

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/static_dict.go−662

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/static_dict_lut.go−75094

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/symbol_list.go−22

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/transform.go−641

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/utf8_util.go−70

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/util.go−7

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/write_bits.go−52

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/writer.go−162

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/.travis.yml−14

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/LICENSE−24

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/README.md−144

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/parser.go−889

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/pseudo_classes.go−458

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/selector.go−586

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/serialize.go−176

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/specificity.go−26

This diff is too big to show here.

vendor/github.com/atotto/clipboard/.travis.yml−22

This diff is too big to show here.

vendor/github.com/atotto/clipboard/LICENSE−27

This diff is too big to show here.

vendor/github.com/atotto/clipboard/README.md−48

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard.go−20

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard_darwin.go−52

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard_plan9.go−42

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard_unix.go−149

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard_windows.go−157

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/NOTICE.txt−3

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/accountid_endpoint_mode.go−18

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/checksum.go−33

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/config.go−254

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/context.go−22

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/credential_cache.go−235

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/credentials.go−234

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/auto.go−38

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/configuration.go−43

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/defaults.go−50

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/doc.go−2

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaultsmode.go−95

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/doc.go−62

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/endpoints.go−247

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/errors.go−9

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/from_ptr.go−365

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/logging.go−119

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/logging_generate.go−95

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/metadata.go−213

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/middleware.go−168

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/osname.go−24

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/osname_go115.go−24

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/recursion_detection.go−94

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id.go−27

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id_retriever.go−57

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/user_agent.go−398

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/CHANGELOG.md−203

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/debug.go−144

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/decode.go−218

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/encode.go−167

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/error.go−23

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/headers.go−24

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/middleware.go−71

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/transport.go−13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/transport_go117.go−12

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/header.go−175

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/header_value.go−521

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/message.go−99

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/array.go−61

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/encoder.go−80

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/map.go−78

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/middleware.go−62

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/object.go−68

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/value.go−117

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/restjson/decoder_util.go−85

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/xml/error_utils.go−48

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/none.go−20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/token_bucket.go−96

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/token_rate_limit.go−83

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/request.go−25

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/restrict_file_permissions.go−21

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive.go−156

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive_ratelimit.go−158

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive_token_bucket.go−83

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/attempt_metrics.go−51

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/doc.go−80

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/errors.go−20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/jitter_backoff.go−124

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/metadata.go−52

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/middleware.go−487

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/retry.go−103

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/retryable_error.go−228

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/standard.go−343

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/throttle_error.go−60

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/timeout_error.go−52

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retryer.go−127

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/runtime.go−14

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/cache.go−115

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/const.go−40

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/header_rules.go−82

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/headers.go−70

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/hmac.go−13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/host.go−75

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/scope.go−13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/time.go−36

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/util.go−80

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/middleware.go−420

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/presign_middleware.go−127

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/stream.go−86

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/v4.go−564

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/to_ptr.go−297

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/client.go−355

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/content_type.go−42

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/response_error.go−33

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/response_error_middleware.go−56

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/timeout_read_closer.go−109

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/types.go−42

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/version.go−8

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/CHANGELOG.md−1097

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/auth_scheme_preference.go−19

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/config.go−237

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/defaultsmode.go−47

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/doc.go−20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/env_config.go−966

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/generate.go−4

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/errors.go−22

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/ini.go−56

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/parse.go−109

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/sections.go−157

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/strings.go−89

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/token.go−32

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/tokenize.go−92

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/value.go−93

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/load_options.go−1371

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/local.go−51

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/provider.go−802

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/resolve.go−458

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/resolve_bearer_token.go−122

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/resolve_credentials.go−650

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/shared_config.go−1704

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md−990

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/doc.go−4

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds/doc.go−58

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds/provider.go−241

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/auth.go−48

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/client.go−165

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/endpoints.go−20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/middleware.go−164

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/provider.go−207

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/dpop.go−150

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/file.go−14

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/provider.go−184

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/token.go−110

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/processcreds/doc.go−92

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/processcreds/provider.go−296

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/doc.go−81

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_cached_token.go−232

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_credentials_provider.go−165

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_token_provider.go−147

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/static_provider.go−63

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/stscreds/assume_role_provider.go−338

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/stscreds/web_identity_provider.go−181

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/CHANGELOG.md−584

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_client.go−358

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetDynamicData.go−77

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetIAMInfo.go−103

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetInstanceIdentityDocument.go−110

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetMetadata.go−77

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetRegion.go−73

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetToken.go−119

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetUserData.go−61

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/auth.go−48

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/doc.go−12

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/endpoints.go−20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/internal/config/resolvers.go−114

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/request_middleware.go−313

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/token_provider.go−261

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/auth.go−45

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/scheme.go−191

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/bearer_token_adapter.go−43

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/bearer_token_signer_adapter.go−35

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/credentials_adapter.go−46

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/smithy.go−2

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/v4signer_adapter.go−57

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/v4signer_adapter_eventstream.go−51

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md−544

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/config.go−65

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/endpoints.go−57

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/context/context.go−65

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/arn.go−94

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/doc.go−3

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/generate.go−7

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/host.go−51

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partition.go−76

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.go−496

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.json−267

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/endpoints.go−201

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md−519

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/endpoints.go−302

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/rand/rand.go−33

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sdk/interfaces.go−9

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sdk/time.go−74

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sdkio/byte.go−12

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/shareddefaults/shared_config.go−47

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/strings/strings.go−11

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/LICENSE−28

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/docs.go−7

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/singleflight.go−210

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/timeconv/duration.go−13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/CHANGELOG.md−486

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/credentials.go−141

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/error.go−17

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/crypto/compare.go−30

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/crypto/ecc.go−113

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/const.go−36

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/header_rules.go−82

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/headers.go−68

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/hmac.go−13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/host.go−75

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/time.go−36

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/util.go−64

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/middleware.go−118

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/presign_middleware.go−117

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/smithy.go−92

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/v4a.go−520

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/CHANGELOG.md−220

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/accept_encoding_gzip.go−176

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/doc.go−22

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/CHANGELOG.md−571

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/context.go−56

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/doc.go−3

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/middleware.go−110

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/CHANGELOG.md−85

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_client.go−945

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_CreateOAuth2Token.go−212

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_DeleteConsoleAuthorizationConfiguration.go−168

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_DeleteResourcePermissionStatement.go−196

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_GetConsoleAuthorizationConfiguration.go−168

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_GetResourcePolicy.go−155

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_ListResourcePermissionStatements.go−261

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_PutConsoleAuthorizationConfiguration.go−168

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_PutResourcePermissionStatement.go−216

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/auth.go−361

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/deserializers.go−2474

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/doc.go−9

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/endpoints.go−854

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/generated.json−40

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/internal/endpoints/endpoints.go−333

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/options.go−242

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/serializers.go−724

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/types/enums.go−46

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/types/errors.go−247

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/types/types.go−162

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/validators.go−111

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/CHANGELOG.md−792

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_client.go−929

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_GetRoleCredentials.go−165

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccountRoles.go−263

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccounts.go−261

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_Logout.go−164

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/auth.go−379

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/deserializers.go−1171

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/doc.go−27

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/endpoints.go−570

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/generated.json−35

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/internal/endpoints/endpoints.go−628

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/options.go−238

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/serializers.go−309

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/types/errors.go−115

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/types/types.go−63

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/validators.go−175

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/CHANGELOG.md−790

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_client.go−929

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateToken.go−235

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateTokenWithIAM.go−282

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_RegisterClient.go−206

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_StartDeviceAuthorization.go−188

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/auth.go−373

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/deserializers.go−2244

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/doc.go−49

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/endpoints.go−570

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/generated.json−36

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/internal/endpoints/endpoints.go−628

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/options.go−238

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/serializers.go−512

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/types/enums.go−44

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/types/errors.go−430

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/types/types.go−25

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/validators.go−184

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/CHANGELOG.md−832

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_client.go−1115

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRole.go−544

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithSAML.go−455

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithWebIdentity.go−472

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoot.go−229

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_DecodeAuthorizationMessage.go−189

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetAccessKeyInfo.go−180

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetCallerIdentity.go−192

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetDelegatedAccessToken.go−169

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetFederationToken.go−393

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetSessionToken.go−239

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetWebIdentityToken.go−192

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/auth.go−377

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/deserializers.go−3456

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/doc.go−13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/endpoints.go−683

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/generated.json−45

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/internal/endpoints/endpoints.go−585

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/options.go−286

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/serializers.go−1198

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/types/errors.go−363

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/types/types.go−144

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/validators.go−433

This diff is too big to show here.

vendor/github.com/aws/smithy-go/.gitignore−29

This diff is too big to show here.

vendor/github.com/aws/smithy-go/.travis.yml−28

This diff is too big to show here.

vendor/github.com/aws/smithy-go/AGENTS.md−172

This diff is too big to show here.

vendor/github.com/aws/smithy-go/CHANGELOG.md−454

This diff is too big to show here.

vendor/github.com/aws/smithy-go/CODE_OF_CONDUCT.md−4

This diff is too big to show here.

vendor/github.com/aws/smithy-go/CONTRIBUTING.md−90

This diff is too big to show here.

vendor/github.com/aws/smithy-go/LICENSE−175

This diff is too big to show here.

vendor/github.com/aws/smithy-go/Makefile−130

This diff is too big to show here.

vendor/github.com/aws/smithy-go/NOTICE−1

This diff is too big to show here.

vendor/github.com/aws/smithy-go/README.md−107

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/auth.go−3

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/bearer/docs.go−3

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/bearer/middleware.go−104

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/bearer/token.go−50

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/bearer/token_cache.go−208

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/identity.go−47

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/option.go−25

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/scheme_id.go−20

This diff is too big to show here.

vendor/github.com/aws/smithy-go/changelog-template.json−9

This diff is too big to show here.

vendor/github.com/aws/smithy-go/context/suppress_expired.go−81

This diff is too big to show here.

vendor/github.com/aws/smithy-go/doc.go−2

This diff is too big to show here.

vendor/github.com/aws/smithy-go/document.go−10

This diff is too big to show here.

vendor/github.com/aws/smithy-go/document/doc.go−12

This diff is too big to show here.

vendor/github.com/aws/smithy-go/document/document.go−239

This diff is too big to show here.

vendor/github.com/aws/smithy-go/document/errors.go−75

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/doc.go−4

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/encoding.go−40

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/encode.go−123

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/header.go−122

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/path_replace.go−108

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/query.go−107

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/uri.go−111

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/array.go−35

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/constants.go−15

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/decoder_util.go−139

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/encoder.go−30

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/escape.go−198

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/object.go−40

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/value.go−154

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/array.go−49

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/constants.go−10

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/doc.go−49

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/element.go−91

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/encoder.go−51

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/error_utils.go−51

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/escape.go−137

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/map.go−53

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/value.go−302

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/xml_decoder.go−154

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/endpoint.go−23

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/bdd/evaluate.go−35

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/doc.go−4

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/split.go−16

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/string_slice.go−18

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/strings.go−25

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/uri.go−133

This diff is too big to show here.

vendor/github.com/aws/smithy-go/errors.go−137

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/const.go−24

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/debug.go−144

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/decode.go−218

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/deserializer.go−294

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/encode.go−167

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/error.go−23

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/header.go−175

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/header_value.go−521

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/message.go−99

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/serializer.go−228

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/signer.go−82

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/types.go−26

This diff is too big to show here.

vendor/github.com/aws/smithy-go/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/smithy-go/internal/sync/singleflight/LICENSE−28

This diff is too big to show here.

vendor/github.com/aws/smithy-go/internal/sync/singleflight/docs.go−8

This diff is too big to show here.

vendor/github.com/aws/smithy-go/internal/sync/singleflight/singleflight.go−210

This diff is too big to show here.

vendor/github.com/aws/smithy-go/io/byte.go−12

This diff is too big to show here.

vendor/github.com/aws/smithy-go/io/doc.go−2

This diff is too big to show here.

vendor/github.com/aws/smithy-go/io/reader.go−16

This diff is too big to show here.

vendor/github.com/aws/smithy-go/io/ringbuffer.go−94

This diff is too big to show here.

vendor/github.com/aws/smithy-go/local-mod-replace.sh−39

This diff is too big to show here.

vendor/github.com/aws/smithy-go/logging/logger.go−82

This diff is too big to show here.

vendor/github.com/aws/smithy-go/metrics/metrics.go−136

This diff is too big to show here.

vendor/github.com/aws/smithy-go/metrics/nop.go−98

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/context.go−41

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/doc.go−67

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/eventstream_middleware.go−21

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/logging.go−46

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/metadata.go−65

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/middleware.go−71

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/ordered_group.go−270

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/stack.go−209

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/stack_values.go−100

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_build.go−298

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_deserialize.go−300

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_finalize.go−298

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_initialize.go−299

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_serialize.go−305

This diff is too big to show here.

vendor/github.com/aws/smithy-go/modman.toml−9

This diff is too big to show here.

vendor/github.com/aws/smithy-go/private/requestcompression/gzip.go−30

This diff is too big to show here.

vendor/github.com/aws/smithy-go/private/requestcompression/middleware_capture_request_compression.go−52

This diff is too big to show here.

vendor/github.com/aws/smithy-go/private/requestcompression/request_compression.go−103

This diff is too big to show here.

vendor/github.com/aws/smithy-go/properties.go−69

This diff is too big to show here.

vendor/github.com/aws/smithy-go/ptr/doc.go−5

This diff is too big to show here.

vendor/github.com/aws/smithy-go/ptr/from_ptr.go−601

This diff is too big to show here.

vendor/github.com/aws/smithy-go/ptr/gen_scalars.go−83

This diff is too big to show here.

vendor/github.com/aws/smithy-go/ptr/to_ptr.go−499

This diff is too big to show here.

vendor/github.com/aws/smithy-go/rand/doc.go−3

This diff is too big to show here.

vendor/github.com/aws/smithy-go/rand/rand.go−31

This diff is too big to show here.

vendor/github.com/aws/smithy-go/rand/uuid.go−87

This diff is too big to show here.

vendor/github.com/aws/smithy-go/schema.go−328

This diff is too big to show here.

vendor/github.com/aws/smithy-go/schema_ext.go−37

This diff is too big to show here.

vendor/github.com/aws/smithy-go/serde.go−229

This diff is too big to show here.

vendor/github.com/aws/smithy-go/sync/error.go−53

This diff is too big to show here.

vendor/github.com/aws/smithy-go/time/time.go−134

This diff is too big to show here.

vendor/github.com/aws/smithy-go/tracing/context.go−96

This diff is too big to show here.

vendor/github.com/aws/smithy-go/tracing/nop.go−32

This diff is too big to show here.

vendor/github.com/aws/smithy-go/tracing/tracing.go−95

This diff is too big to show here.

vendor/github.com/aws/smithy-go/trait.go−21

This diff is too big to show here.

vendor/github.com/aws/smithy-go/traits/http.go−69

This diff is too big to show here.

vendor/github.com/aws/smithy-go/traits/index.go−107

This diff is too big to show here.

vendor/github.com/aws/smithy-go/traits/serde.go−56

This diff is too big to show here.

vendor/github.com/aws/smithy-go/traits/traits.go−72

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/auth.go−30

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/auth_schemes.go−45

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/checksum_middleware.go−70

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/client.go−161

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/doc.go−5

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/eventstream.go−209

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/eventstream_middleware.go−69

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/headerlist.go−163

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/host.go−89

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/interceptor.go−321

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/interceptor_middleware.go−325

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/internal/io/safe.go−75

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/md5_checksum.go−25

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/metrics.go−204

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_close_response_body.go−79

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_content_length.go−84

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_header_comment.go−81

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_headers.go−167

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_http_logging.go−75

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_metadata.go−51

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_min_proto.go−79

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/properties.go−80

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/protocol.go−27

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/request.go−188

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/response.go−34

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/time.go−13

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/url.go−44

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/user_agent.go−37

This diff is too big to show here.

vendor/github.com/aws/smithy-go/type_registry.go−70

This diff is too big to show here.

vendor/github.com/aws/smithy-go/validation.go−140

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/LICENSE-BSD−27

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/LICENSE-MIT−21

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/Makefile−4

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/README.md−142

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/diff.go−177

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/export.go−16

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/common.go−179

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/doc.go−156

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/export.go−11

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/git.sh−33

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/labels.go−55

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/old.go−475

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/sequence.go−70

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/merge.go−81

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/ndiff.go−118

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/unified.go−314

This diff is too big to show here.

vendor/github.com/aymerick/douceur/LICENSE−22

This diff is too big to show here.

vendor/github.com/aymerick/douceur/css/declaration.go−60

This diff is too big to show here.

vendor/github.com/aymerick/douceur/css/rule.go−230

This diff is too big to show here.

vendor/github.com/aymerick/douceur/css/stylesheet.go−25

This diff is too big to show here.

vendor/github.com/aymerick/douceur/parser/parser.go−409

This diff is too big to show here.

vendor/github.com/bahlo/generic-list-go/LICENSE−27

This diff is too big to show here.

vendor/github.com/bahlo/generic-list-go/README.md−5

This diff is too big to show here.

vendor/github.com/bahlo/generic-list-go/list.go−235

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/.codecov.yml−10

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/.gitignore−32

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/LICENSE−22

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/README.md−495

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/UPGRADING.md−63

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/doublestar.go−13

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/glob.go−497

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/globoptions.go−188

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/globwalk.go−438

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/match.go−419

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/utils.go−165

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/utils_unix.go−19

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/utils_windows.go−43

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/validate.go−80

This diff is too big to show here.

vendor/github.com/buger/jsonparser/.gitignore−12

This diff is too big to show here.

vendor/github.com/buger/jsonparser/.travis.yml−12

This diff is too big to show here.

vendor/github.com/buger/jsonparser/Dockerfile−12

This diff is too big to show here.

vendor/github.com/buger/jsonparser/LICENSE−21

This diff is too big to show here.

vendor/github.com/buger/jsonparser/Makefile−36

This diff is too big to show here.

vendor/github.com/buger/jsonparser/README.md−361

This diff is too big to show here.

vendor/github.com/buger/jsonparser/bytes.go−47

This diff is too big to show here.

vendor/github.com/buger/jsonparser/bytes_safe.go−25

This diff is too big to show here.

vendor/github.com/buger/jsonparser/bytes_unsafe.go−44

This diff is too big to show here.

vendor/github.com/buger/jsonparser/escape.go−173

This diff is too big to show here.

vendor/github.com/buger/jsonparser/fuzz.go−117

This diff is too big to show here.

vendor/github.com/buger/jsonparser/oss-fuzz-build.sh−47

This diff is too big to show here.

vendor/github.com/buger/jsonparser/parser.go−1318

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/LICENSE.txt−22

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/README.md−74

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/testall.sh−10

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash.go−243

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s−209

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_arm64.s−183

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_asm.go−15

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_other.go−76

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_safe.go−16

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go−58

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/.gitignore−2

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/LICENSE−21

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/Makefile−101

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/README.md−193

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/adapters.go−102

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/dirent.go−73

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/dirent_portable.go−134

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/dirent_unix.go−146

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/entry_filter_portable.go−37

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/entry_filter_unix.go−59

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/entry_filter_windows.go−156

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/fastwalk.go−697

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/fastwalk_darwin.go−122

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/fastwalk_portable.go−65

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/fastwalk_unix.go−131

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/go.LICENSE−27

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent.go−85

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_aix.go−29

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_dragonfly.go−54

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_freebsd.go−46

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_js.go−27

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_linux.go−50

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_netbsd.go−46

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_openbsd.go−46

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_solaris.go−29

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/doc.go−2

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go120.go−31

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go121.go−15

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/zsyscall_darwin.go−93

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/zsyscall_darwin_amd64.1_13.s−22

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/zsyscall_darwin_arm64.1_13.s−22

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/.gitignore−4

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/.release-please-manifest.json−3

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/.stats.yml−4

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/Brewfile−1

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/CHANGELOG.md−641

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/CONTRIBUTING.md−65

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/LICENSE−8

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/README.md−999

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/SECURITY.md−27

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/aliases.go−72

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/api.md−545

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/bedrock/bedrock.go−295

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/beta.go−374

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betafile.go−273

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betamessage.go−11734

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betamessagebatch.go−925

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betamessageutil.go−459

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betamodel.go−151

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betaskill.go−362

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betaskillversion.go−373

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betatoolrunner.go−435

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/client.go−157

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/completion.go−196

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/field.go−46

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apierror/apierror.go−58

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/encoder.go−473

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/form.go−5

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/richparam.go−21

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/tag.go−51

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/decoder.go−709

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/encoder.go−392

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/enum.go−145

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/field.go−23

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/port.go−120

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/registry.go−59

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/subfield.go−68

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/tag.go−47

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/union.go−209

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/encoder.go−414

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/query.go−55

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/richparam.go−20

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/tag.go−44

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/decode.go−1325

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/encode.go−1396

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/fold.go−48

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/indent.go−182

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/scanner.go−610

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/sentinel/null.go−47

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/shims/shims.go−113

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/stream.go−512

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/tables.go−218

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/tags.go−38

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/time.go−62

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/paramutil/field.go−30

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/paramutil/union.go−49

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/requestconfig/requestconfig.go−638

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/version.go−5

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/message.go−9436

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/messagebatch.go−827

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/messageutil.go−413

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/model.go−151

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/option/middleware.go−38

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/option/requestoption.go−285

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/jsonl/jsonl.go−62

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/pagination/pagination.go−351

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/encoder.go−109

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/null.go−19

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/option.go−122

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/param.go−189

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/respjson/respjson.go−88

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/ssestream/ssestream.go−198

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/release-please-config.json−68

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/schemautil.go−244

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/shared/constant/constants.go−487

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/shared/shared.go−346

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/tools.md−292

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/vertex/vertex.go−134

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/.golangci.yml−47

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/.goreleaser.yml−6

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/README.md−109

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/doc.go−4

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/env.go−294

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/env_other.go−8

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/env_windows.go−40

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/profile.go−108

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/writer.go−171

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/.gitignore−4

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/.release-please-manifest.json−3

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/.stats.yml−4

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/Brewfile−1

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/CHANGELOG.md−1171

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/CONTRIBUTING.md−65

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/LICENSE−201

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/MIGRATION.md−284

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/README.md−1007

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/SECURITY.md−29

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/aliases.go−585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/api.md−774

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/audio.go−61

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/audiospeech.go−179

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/audiotranscription.go−950

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/audiotranslation.go−120

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/azure/azure.go−269

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/batch.go−464

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/beta.go−36

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betaassistant.go−2284

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betachatkit.go−125

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betachatkitsession.go−83

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betachatkitthread.go−1564

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betathread.go−1574

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betathreadmessage.go−1717

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betathreadrun.go−974

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betathreadrunstep.go−1396

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/chat.go−30

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/chatcompletion.go−3521

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/chatcompletionmessage.go−100

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/client.go−185

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/completion.go−436

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/container.go−648

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/containerfile.go−287

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/containerfilecontent.go−50

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/conversations/aliases.go−585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/conversations/api.md−31

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/conversations/conversation.go−493

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/conversations/item.go−1082

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/embedding.go−207

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/field.go−45

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/file.go−352

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuning.go−35

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningalpha.go−29

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningalphagrader.go−675

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningcheckpoint.go−29

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningcheckpointpermission.go−352

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningjob.go−884

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningjobcheckpoint.go−152

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningmethod.go−1487

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/grader.go−28

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/gradergradermodel.go−1753

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/image.go−1337

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apierror/apierror.go−58

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiform/encoder.go−473

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiform/form.go−5

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiform/richparam.go−20

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiform/tag.go−72

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/decoder.go−688

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/encoder.go−371

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/enum.go−140

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/field.go−23

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/port.go−120

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/registry.go−51

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/subfield.go−67

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/tag.go−69

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/union.go−208

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiquery/encoder.go−394

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiquery/query.go−55

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiquery/richparam.go−20

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiquery/tag.go−44

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/decode.go−1324

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/encode.go−1396

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/fold.go−48

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/indent.go−182

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/scanner.go−610

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/sentinel/null.go−46

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/shims/shims.go−113

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/stream.go−512

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/tables.go−218

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/tags.go−38

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/time.go−61

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/paramutil/field.go−30

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/paramutil/union.go−48

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/requestconfig/requestconfig.go−644

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/version.go−5

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/model.go−137

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/moderation.go−489

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/option/middleware.go−38

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/option/requestoption.go−299

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/pagination/pagination.go−329

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/param/encoder.go−109

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/param/null.go−19

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/param/option.go−122

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/param/param.go−186

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/respjson/respjson.go−88

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/ssestream/ssestream.go−247

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/polling.go−129

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/aliases.go−585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/api.md−55

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/call.go−133

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/clientsecret.go−1826

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/realtime.go−1979

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/release-please-config.json−68

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/aliases.go−585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/api.md−240

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/inputitem.go−135

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/inputtoken.go−336

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/response.go−21786

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/shared/constant/constants.go−1143

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/shared/shared.go−1183

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/skill.go−292

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/skillcontent.go−46

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/skillversion.go−283

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/skillversioncontent.go−50

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/streamaccumulator.go−215

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/upload.go−238

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/uploadpart.go−115

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/vectorstore.go−911

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/vectorstorefile.go−535

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/vectorstorefilebatch.go−427

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/video.go−677

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/webhooks/aliases.go−585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/webhooks/api.md−20

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/webhooks/webhook.go−1306

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/.gitattributes−1

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/.golangci.yml−48

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/.goreleaser.yml−5

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/README.md−161

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/TUTORIAL.md−175

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/border.go−231

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/buffer.go−831

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/cancelreader_other.go−16

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/cancelreader_windows.go−139

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/cell.go−465

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/console.go−219

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/console_unix.go−13

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/console_windows.go−13

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/cursor.go−22

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/decoder.go−2102

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/doc.go−46

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/environ.go−32

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/event.go−567

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/internal/casso/math.go−172

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/internal/casso/solver.go−275

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/internal/lru/lru.go−69

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/key.go−762

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/key_table.go−664

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/cache.go−29

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/constraint.go−174

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/flex.go−210

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/layout.go−973

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/padding.go−66

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/logger.go−6

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/mouse.go−150

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll.go−38

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_bsd.go−165

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_default.go−12

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_fallback.go−158

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_linux.go−175

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_select.go−156

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_solaris.go−12

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_windows.go−217

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/screen/context.go−379

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/screen/screen.go−117

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/styled.go−337

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tabstop.go−142

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal.go−394

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_bsdly.go−10

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_bsdly_other.go−8

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_other.go−22

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_reader.go−503

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_reader_other.go−13

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_reader_windows.go−336

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_renderer.go−1639

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_renderer_hardscroll.go−243

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_renderer_hashmap.go−298

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_screen.go−837

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_tabdly.go−10

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_tabdly_other.go−8

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_unix.go−56

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_windows.go−77

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tty.go−42

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tty_other.go−26

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tty_unix.go−39

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tty_windows.go−39

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/utils.go−15

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/uv.go−406

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/winch.go−62

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/winch_other.go−17

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/winch_unix.go−50

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/window.go−147

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/ansi.go−11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/ascii.go−8

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/background.go−178

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/c0.go−79

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/c1.go−72

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/charset.go−55

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/clipboard.go−75

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/color.go−784

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/ctrl.go−156

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/cursor.go−637

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/cwd.go−26

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/doc.go−7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/finalterm.go−67

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/focus.go−9

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/graphics.go−62

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/hyperlink.go−28

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/inband.go−24

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/iterm2.go−18

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/keypad.go−28

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty.go−90

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/decoder.go−86

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/encoder.go−64

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/graphics.go−414

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/options.go−373

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/writer.go−187

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/method.go−196

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/mode.go−690

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/mode_deprecated.go−495

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/modes.go−65

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/mouse.go−172

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/notification.go−32

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/palette.go−34

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser.go−417

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser/const.go−79

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser/seq.go−136

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser/transition_table.go−273

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser_decode.go−525

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser_handler.go−60

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser_sync.go−29

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/passthrough.go−60

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/paste.go−7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/progress.go−49

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/reset.go−11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/screen.go−410

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/sgr.go−79

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/status.go−168

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/style.go−819

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/termcap.go−41

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/title.go−48

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/truncate.go−290

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/urxvt.go−17

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/util.go−92

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/width.go−107

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/winop.go−59

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/wrap.go−472

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/xterm.go−138

This diff is too big to show here.

vendor/github.com/charmbracelet/x/editor/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/editor/editor.go−140

This diff is too big to show here.

vendor/github.com/charmbracelet/x/etag/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/etag/etag.go−48

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/charmtone/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/charmtone/charmtone.go−443

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/golden/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/golden/golden.go−83

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/ordered/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/ordered/ordered.go−42

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/slice/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/slice/slice.go−148

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/strings/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/strings/contains.go−16

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/strings/join.go−134

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/config/config.go−118

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/config/lsps.json−367

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/config/overrides.go−85

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/client.go−875

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/language.go−158

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol.go−50

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/LICENSE−27

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/interface.go−132

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/pattern_interfaces.go−79

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tables.go−31

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tsdocument-changes.go−83

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tsjson.go−3072

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tsprotocol.go−6963

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/uri.go−192

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/sync.go−240

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/types.go−93

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/transport/connection.go−130

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/transport/router.go−107

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/transport/transport.go−214

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term.go−51

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_other.go−39

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_plan9.go−118

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_unix.go−96

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_unix_bsd.go−11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_unix_other.go−11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_windows.go−87

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/terminal.go−12

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/util.go−47

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/bit_bsd.go−7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/bit_darwin.go−7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/bit_other.go−7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/syscalls_bsd.go−11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/syscalls_darwin.go−10

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/syscalls_linux.go−14

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios.go−249

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios_bsd.go−13

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios_linux.go−13

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios_other.go−15

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios_solaris.go−26

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/doc.go−4

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/syscall_windows.go−14

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/types.go−221

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/types_windows.go−142

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/zsyscall_windows.go−77

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/.gitignore−3

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/AGENTS.md−51

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/CHANGELOG.md−129

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/LICENSE−21

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/README.md−190

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/gen.go−3

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/graphemes.go−73

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/options.go−30

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/trie.go−1699

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/truncate.go−149

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/width.go−239

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/LICENSE−21

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/README.md−120

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/ansi.go−138

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/ansi8.go−79

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/iterator.go−144

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/reader.go−25

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/splitfunc.go−205

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/trie.go−1717

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/README.md−121

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/bleve_compat.go−104

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/iterator.go−126

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/joiners.go−41

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/reader.go−34

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/seek.go−43

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/splitfunc.go−269

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/trie.go−3774

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/.golangci.yml−60

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md−453

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/COPYING.md−447

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/LICENSE.BSD−28

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/LICENSE.MPL-2.0−373

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/README.md−184

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/VERSION−1

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/codecov.yml−29

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/doc.go−47

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/internal/consts/consts.go−15

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/join.go−169

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/vfs.go−37

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/LICENSE−15

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/bypass.go−145

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/bypasssafe.go−38

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/common.go−341

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/config.go−306

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/doc.go−211

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/dump.go−509

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/format.go−419

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/spew.go−148

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/.gitignore−29

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/LICENSE.md−22

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/README.md−182

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/helper.go−36

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id.go−45

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id_bsd.go−42

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id_darwin.go−37

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id_linux.go−27

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id_windows.go−23

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/logo.png

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/makefile−12

This diff is too big to show here.

vendor/github.com/disintegration/imaging/.travis.yml−12

This diff is too big to show here.

vendor/github.com/disintegration/imaging/LICENSE−21

This diff is too big to show here.

vendor/github.com/disintegration/imaging/README.md−226

This diff is too big to show here.

vendor/github.com/disintegration/imaging/adjust.go−253

This diff is too big to show here.

vendor/github.com/disintegration/imaging/convolution.go−148

This diff is too big to show here.

vendor/github.com/disintegration/imaging/doc.go−7

This diff is too big to show here.

vendor/github.com/disintegration/imaging/effects.go−169

This diff is too big to show here.

vendor/github.com/disintegration/imaging/histogram.go−52

This diff is too big to show here.

vendor/github.com/disintegration/imaging/io.go−444

This diff is too big to show here.

vendor/github.com/disintegration/imaging/resize.go−595

This diff is too big to show here.

vendor/github.com/disintegration/imaging/scanner.go−285

This diff is too big to show here.

vendor/github.com/disintegration/imaging/tools.go−249

This diff is too big to show here.

vendor/github.com/disintegration/imaging/transform.go−268

This diff is too big to show here.

vendor/github.com/disintegration/imaging/utils.go−167

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/.gitignore−29

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/ATTRIB−133

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/LICENSE−21

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/README.md−283

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/Taskfile.yml−64

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/bufferpool.go−76

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/fastclock.go−141

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/helpers/indexof.go−394

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/helpers/math.go−15

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/helpers/runes.go−58

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/helpers/searchvalues.go−180

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/match.go−455

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/options.go−157

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/regexp.go−717

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/regexp_codegen.go−70

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/replace.go−357

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/runner.go−2197

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/split.go−67

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/stringprefixfilter.go−375

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/charclass.go−1507

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/code.go−316

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/escape.go−94

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/fuzz.go−21

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/optimizations.go−672

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/parser.go−2529

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/prefix.go−943

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/prefixanalyzer.go−1491

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/replacerdata.go−87

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/tree.go−2362

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/unicode_alias_tables.go−6058

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/writer.go−500

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/.travis.yml−21

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/LICENSE−21

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/README.markdown−124

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/big.go−31

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/bigbytes.go−189

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/bytes.go−143

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/comma.go−116

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/commaf.go−41

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/ftoa.go−49

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/humanize.go−8

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/number.go−192

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/ordinals.go−25

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/si.go−127

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/times.go−117

This diff is too big to show here.

vendor/github.com/ebitengine/purego/.gitignore−1

This diff is too big to show here.

vendor/github.com/ebitengine/purego/LICENSE−201

This diff is too big to show here.

vendor/github.com/ebitengine/purego/README.md−119

This diff is too big to show here.

vendor/github.com/ebitengine/purego/abi_amd64.h−99

This diff is too big to show here.

vendor/github.com/ebitengine/purego/abi_arm64.h−39

This diff is too big to show here.

vendor/github.com/ebitengine/purego/abi_loong64.h−60

This diff is too big to show here.

vendor/github.com/ebitengine/purego/cgo.go−19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlerror.go−17

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn.go−99

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_android.go−34

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_darwin.go−20

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_freebsd.go−14

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_linux.go−16

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_netbsd.go−15

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_nocgo_freebsd.go−11

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_nocgo_linux.go−19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_nocgo_netbsd.go−9

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_playground.go−24

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_stubs.s−22

This diff is too big to show here.

vendor/github.com/ebitengine/purego/func.go−564

This diff is too big to show here.

vendor/github.com/ebitengine/purego/gen.go−6

This diff is too big to show here.

vendor/github.com/ebitengine/purego/go_runtime.go−13

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/cgo/dlfcn_cgo_unix.go−56

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/cgo/empty.go−6

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/cgo/syscall_cgo_unix.go−55

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/abi_amd64.h−99

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/abi_arm64.h−39

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/abi_loong64.h−60

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/abi_ppc64x.h−195

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_386.s−29

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_amd64.s−39

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_arm.s−52

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_arm64.s−36

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_loong64.s−40

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_ppc64le.s−82

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_riscv64.s−78

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_s390x.s−55

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/callbacks.go−93

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/doc.go−32

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/fakecgo.go−14

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/freebsd.go−27

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_darwin.go−88

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_freebsd.go−100

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_libinit.go−72

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_linux.go−100

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_netbsd.go−106

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_setenv.go−18

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_util.go−38

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/iscgo.go−19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo.go−39

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_darwin.go−26

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_freebsd.go−20

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_linux.go−20

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_netbsd.go−26

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/netbsd.go−23

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/setenv.go−19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_386.s−107

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_amd64.s−107

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_arm.s−81

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_arm64.s−84

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_loong64.s−88

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_ppc64le.s−227

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_riscv64.s−72

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols.go−165

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_darwin.go−59

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_freebsd.go−48

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_linux.go−48

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_netbsd.go−59

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_darwin.s−19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_freebsd.s−16

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_linux.s−16

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_netbsd.s−19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_stubs.s−55

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/strings/strings.go−40

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/xreflect/reflect_go124.go−15

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/xreflect/reflect_go125.go−12

This diff is too big to show here.

vendor/github.com/ebitengine/purego/is_ios.go−13

This diff is too big to show here.

vendor/github.com/ebitengine/purego/nocgo.go−25

This diff is too big to show here.

vendor/github.com/ebitengine/purego/objc/objc_block_darwin.go−272

This diff is too big to show here.

vendor/github.com/ebitengine/purego/objc/objc_runtime_darwin.go−709

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_386.go−41

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_amd64.go−286

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_arm.go−85

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_arm64.go−549

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_loong64.go−213

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_ppc64le.go−143

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_riscv64.go−143

This diff is too big to show here.

5096 more files changed are not listed.