Commit log

aae4c30 fix(ui): fix selection of code blocks with tabs inside markdown (#2039)

Click to expand commit body
Yes, this is very specific. You need a code block, inside markdown,
that uses tabs instead of spaces for indentation, like Go code.

This affected both how the code is present on the TUI as well as the text
copied to clipboard.

We need to convert tabs into 4 spaces on the highlighter to match how
it's shown in the TUI.

Centralized this into a function to ensure we're doing the exact same
thing everywhere.

Andrey Nering created

87fad18 fix: make the commands dialog less taller (#2035)

Andrey Nering created

3a929ff feat: filetracker per session (#2033)

Click to expand commit body
* feat: filetracker per session

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: only in the new ui

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: tests, lint

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: old tui

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* test: added test, improve schema

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* test: synctest

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* test: fix race

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: relpath

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: simplify

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* chore: trigger ci

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

---------

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

Carlos Alexandro Becker created

a81443c chore(legal): @liannnix has signed the CLA

Charm created

daf786f fix(stats): resizing breaks pie charts (#2030)

Click to expand commit body
resizing the browser would "break" the pie charts, cutting them off

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

Carlos Alexandro Becker created

de64b00 fix: decouple thinking/reasoning from provider type (#2032)

Click to expand commit body
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

Carlos Alexandro Becker created

5011ba2 docs: improve clarity and fluency of mandarin tagline (#2022)

Tommy Guo created

008be3f chore(legal): @oug-t has signed the CLA

Charm created

9602140 ci: format nix (#2009)

Click to expand commit body
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

Carlos Alexandro Becker created

fea878e feat(mcp): support server side instructions (#2015)

Click to expand commit body
* feat(mcp): support server side instructions

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: empty lines

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

---------

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

Carlos Alexandro Becker created

c6b0a8a refactor: terminal capability handling (#2014)

Ayman Bagabas created

99aabb0 fix: schema incorrectly marks optional fields as required (#1996)

Click to expand commit body
This fixes two schema validation issues:

1. tools.ls incorrectly marked as required
   - Changed Tools.Ls and Config.Tools from omitzero to omitempty
   - The invopop/jsonschema library doesn't recognize Go 1.25's omitzero tag

2. lsp.command incorrectly marked as required
   - Removed jsonschema:"required" tag from LSPConfig.Command
   - The project's own crush.json doesn't include command field for gopls

After this fix, users can use minimal configurations without being
forced to specify tools.ls or lsp.command fields.

huaiyuWangh created

50ae9f2 chore: auto-update files

Charm created

c81b02f feat(lsp): auto-discover LSPs (#1834)

Click to expand commit body
* feat(lsp): auto-discover LSPs

- auto-discover LSPs defined in powernap
- faster startup by walking dir only once to check root markers from all
  LSPs
- errors on auto-found LSPs are ignored (e.g. it might match
  golangci-lint-server but if you don't have it installed it shouldn't
  show in the list)

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: sidebar improvement

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: if

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: startup, disabled

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: lint

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: remove unneeded func

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* perf: skip empty

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: server names

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: do not show failing non configured lsps

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: allow to disable auto lsp

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* chore: update powernap

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

---------

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

Carlos Alexandro Becker created

df2c001 fix(lsp): scope client to working directory (#1792)

Click to expand commit body
Files outside the working directory are now rejected by HandlesFile(),
preventing external files from being opened on the LSP and triggering
spurious diagnostics.

Assisted-by: Claude Opus 4.5 via Crush

Amolith created

632666e chore: fix typo on `crush stats` html page

Andrey Nering created

033584c feat: implement prompt history (#2005)

Kujtim Hoxha created

c5f0e4d Handle unknown tool calls in the TUI (#2001)

Kujtim Hoxha created

115adeb fix(ui): use setState method to change UI state and focus (#1994)

Click to expand commit body
This change introduces a setState method in the UI model to encapsulate
the logic for changing the UI state and focus. This ensures that any
time the state or focus is changed, the layout and size are updated
accordingly.

Ayman Bagabas created

699ae40 fix: make the check for sidebar toggle inclusive (#2013)

Kujtim Hoxha created

8d3064f fix: layout calculations when editor has attachments (#2012)

Kujtim Hoxha created

5e384b2 fix(ui): ensure the message list does not scroll beyond the last item (#1993)

Click to expand commit body
* fix(ui): ensure the message list does not scroll beyond the last item

Ensure that when scrolling down, the message list does not scroll beyond
the last item, preventing empty space from appearing below the last
message.

* fix: lint

---------

Co-authored-by: Kujtim Hoxha <kujtimii.h@gmail.com>

Ayman Bagabas and Kujtim Hoxha created

4a0af71 v0.36.0

Andrey Nering created

5ddf9d1 fix: token calculation (#2004)

Kujtim Hoxha created

b944952 feat: add ability to drag & drop multiple file at once + support windows (#1992)

Click to expand commit body
Before, only dragging a single file was working. If you tried to drag &
drop multiple, it would fail.

Also, because Windows paste in a totally different format, it wasn't
working at all before.

Andrey Nering created

668adcc ci(goreleaser): fix aur_sorces build to properly set the version (#1978)

Click to expand commit body
it seems that the variable provided to -ldflags, at some point changed from `main.version` to `github.com/charmbracelet/crush/internal/version.Version`.

so reflect that to the build script for the AUR package.

expected change in the PKGBUILD is:
```
diff --git a/PKGBUILD b/PKGBUILD
index e9afb74..58779bf 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -23,7 +23,7 @@ build() {
   export CGO_CXXFLAGS="${CXXFLAGS}"
   export CGO_LDFLAGS="${LDFLAGS}"
   export GOFLAGS="-buildmode=pie -trimpath -mod=readonly -modcacherw"
-  go build -ldflags="-w -s -buildid='' -linkmode=external -X main.version=v${pkgver}" .
+  go build -ldflags="-w -s -buildid='' -linkmode=external -X github.com/charmbracelet/crush/internal/version.Version=v${pkgver}" .
   ./crush completion bash >./completions/crush.bash
   ./crush completion zsh >./completions/crush.zsh
   ./crush completion fish >./completions/crush.fish
```

Дамјан Георгиевски created

13c28e6 chore(deps): bump the all group with 6 updates (#1985)

Click to expand commit body
Bumps the all group with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [github.com/alecthomas/chroma/v2](https://github.com/alecthomas/chroma) | `2.23.0` | `2.23.1` |
| [github.com/bmatcuk/doublestar/v4](https://github.com/bmatcuk/doublestar) | `4.9.2` | `4.10.0` |
| [github.com/ncruces/go-sqlite3](https://github.com/ncruces/go-sqlite3) | `0.30.4` | `0.30.5` |
| [github.com/posthog/posthog-go](https://github.com/posthog/posthog-go) | `1.9.0` | `1.9.1` |
| [github.com/zeebo/xxh3](https://github.com/zeebo/xxh3) | `1.0.2` | `1.1.0` |
| [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) | `1.44.2` | `1.44.3` |


Updates `github.com/alecthomas/chroma/v2` from 2.23.0 to 2.23.1
- [Release notes](https://github.com/alecthomas/chroma/releases)
- [Commits](https://github.com/alecthomas/chroma/compare/v2.23.0...v2.23.1)

Updates `github.com/bmatcuk/doublestar/v4` from 4.9.2 to 4.10.0
- [Release notes](https://github.com/bmatcuk/doublestar/releases)
- [Commits](https://github.com/bmatcuk/doublestar/compare/v4.9.2...v4.10.0)

Updates `github.com/ncruces/go-sqlite3` from 0.30.4 to 0.30.5
- [Release notes](https://github.com/ncruces/go-sqlite3/releases)
- [Commits](https://github.com/ncruces/go-sqlite3/compare/v0.30.4...v0.30.5)

Updates `github.com/posthog/posthog-go` from 1.9.0 to 1.9.1
- [Release notes](https://github.com/posthog/posthog-go/releases)
- [Changelog](https://github.com/PostHog/posthog-go/blob/master/CHANGELOG.md)
- [Commits](https://github.com/posthog/posthog-go/compare/v1.9.0...v1.9.1)

Updates `github.com/zeebo/xxh3` from 1.0.2 to 1.1.0
- [Commits](https://github.com/zeebo/xxh3/compare/v1.0.2...v1.1.0)

Updates `modernc.org/sqlite` from 1.44.2 to 1.44.3
- [Changelog](https://gitlab.com/cznic/sqlite/blob/master/CHANGELOG.md)
- [Commits](https://gitlab.com/cznic/sqlite/compare/v1.44.2...v1.44.3)

---
updated-dependencies:
- dependency-name: github.com/alecthomas/chroma/v2
  dependency-version: 2.23.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
- dependency-name: github.com/bmatcuk/doublestar/v4
  dependency-version: 4.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: github.com/ncruces/go-sqlite3
  dependency-version: 0.30.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
- dependency-name: github.com/posthog/posthog-go
  dependency-version: 1.9.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
- dependency-name: github.com/zeebo/xxh3
  dependency-version: 1.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: modernc.org/sqlite
  dependency-version: 1.44.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

dependabot[bot] and dependabot[bot] created

53d065e chore(deps): bump the all group with 5 updates (#1986)

Click to expand commit body
Bumps the all group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [actions/checkout](https://github.com/actions/checkout) | `6.0.1` | `6.0.2` |
| [actions/setup-go](https://github.com/actions/setup-go) | `6.1.0` | `6.2.0` |
| [github/codeql-action](https://github.com/github/codeql-action) | `4.31.10` | `4.31.11` |
| [anchore/scan-action](https://github.com/anchore/scan-action) | `7.2.3` | `7.3.0` |
| [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action) | `6.3.0` | `6.4.0` |


Updates `actions/checkout` from 6.0.1 to 6.0.2
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/8e8c483db84b4bee98b60c0593521ed34d9990e8...de0fac2e4500dabe0009e67214ff5f5447ce83dd)

Updates `actions/setup-go` from 6.1.0 to 6.2.0
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/v6.1.0...7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5)

Updates `github/codeql-action` from 4.31.10 to 4.31.11
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/cdefb33c0f6224e58673d9004f47f7cb3e328b89...19b2f06db2b6f5108140aeb04014ef02b648f789)

Updates `anchore/scan-action` from 7.2.3 to 7.3.0
- [Release notes](https://github.com/anchore/scan-action/releases)
- [Changelog](https://github.com/anchore/scan-action/blob/main/RELEASE.md)
- [Commits](https://github.com/anchore/scan-action/compare/62b74fb7bb810d2c45b1865f47a77655621862a5...0d444ed77d83ee2ba7f5ced0d90d640a1281d762)

Updates `goreleaser/goreleaser-action` from 6.3.0 to 6.4.0
- [Release notes](https://github.com/goreleaser/goreleaser-action/releases)
- [Commits](https://github.com/goreleaser/goreleaser-action/compare/9c156ee8a17a598857849441385a2041ef570552...e435ccd777264be153ace6237001ef4d979d3a7a)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
- dependency-name: actions/setup-go
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: github/codeql-action
  dependency-version: 4.31.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
- dependency-name: anchore/scan-action
  dependency-version: 7.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: goreleaser/goreleaser-action
  dependency-version: 6.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

dependabot[bot] and dependabot[bot] created

5edc4cb ci: use goreleaser nightly (#1987)

Click to expand commit body
* ci: use goreleaser nightly

reason: https://github.com/goreleaser/goreleaser/commit/20d273bf4a96d2cebd0d99dcd9b10dc17cf71d61

should fix https://github.com/charmbracelet/nur/issues/42

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* chore: comment

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

---------

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

Carlos Alexandro Becker created

99a896d refactor: use `ContainsAnyOf` from `x`

Andrey Nering created

b490a3b chore(deps): update `github.com/charmbracelet/x/exp/strings`

Andrey Nering created

f791446 fix: stats chart don't account for cached tokens

Click to expand commit body
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

Carlos Alexandro Becker created

dd3834a fix(agent): read step data for summarization check (#1787)

Amolith created

9faa8b2 fix: enable left/right scrolling of diff (#1984)

Click to expand commit body
* fix: enable left/rigth scrolling of diff

this also fixes an issue introduced in #1931 where the model info was
not showing in the landing page.

* chore: simplify model info

Kujtim Hoxha created

7154e46 feat: update session title (#1988)

Click to expand commit body
* feat: update session title

* chore: implement review requests

Kujtim Hoxha created

0eee061 feat: crush stats (#1920)

Click to expand commit body
* wip: stats

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* wip

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* wip

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fixup! wip

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: css

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: cleanup

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* wip

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* wip

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* logo

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: cast

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* wip

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* wip

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* wip

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* wip

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* wip

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* wip

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* cleanup

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* improvements

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* provider donut

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: improvements

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* wip

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* wip

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* wip

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* wip

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* jetbrains mono

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fixes

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: rm border

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* chore: update footer/header

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: footer class

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* refactor: move stuff around

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* refactor: improving

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: anims

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: rename vars

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* chore: remove all card borders

* chore: adjust easing

* fix: fail if no sessions

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: improvements

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: generated by

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

* fix: header hazy

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

---------

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Co-authored-by: Christian Rocha <christian@rocha.is>

Carlos Alexandro Becker and Christian Rocha created

9622c25 fix: should also copy on `y` (additionally to `c`) (#1989)

Andrey Nering created

a0e9d35 ci(labeler): add automation for `area: crush run` label

Andrey Nering created

abbee92 feat: delete sessions (#1963)

Click to expand commit body
* feat: delete sessions

* chore: small cleanup

* chore: make delete transactional

* refactor: cleanup the delete logic

Kujtim Hoxha created

77bfd1a chore(legal): @gdamjan has signed the CLA

Charm created

8e7a331 docs(readme): add Z.ai API key info

Christian Rocha created

3193895 docs(readme): add SYNTHETIC_API_KEY (#1971)

Billy Cao created

d2f23b2 chore(legal): @billycao has signed the CLA

Charm created

a9c7538 ci: fix snapshot goreleaser dist

Click to expand commit body
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

Carlos Alexandro Becker created

38ec868 chore: bump glamour to v2.0.0-20260123212943-6014aa153a9b

Click to expand commit body
Fixes: https://github.com/charmbracelet/crush/issues/1845

Ayman Bagabas created

d853206 v0.35.0

Andrey Nering created

28e0ff3 feat: implement onboarding flow on the new ui codebase

Andrey Nering created

1e691e0 fix: ensure hyper is the first provider in the list

Andrey Nering created

44e1ca7 fix(dialogs): prevent panic due to negative index

Andrey Nering created

1073723 fix(list): prevent panic due to negative index

Andrey Nering created