149 Commits
Author SHA1 Message Date
Christian Rocha 30c16c2094 Merge branch 'main' into fast-ui 2026-05-13 16:28:56 -04:00
Kieran KlukasandKieran Klukas 61ee2d2e0e fix(db): use connection pool to avoid corrupted writes 2026-05-12 12:40:59 -04:00
Christian RochaandCharm Crush 6938dedd6c perf: batch streaming message updates
Group rapid streaming updates into one save and one notification per short
window instead of one per token. Important updates like finishes, tool
calls, and errors still go through immediately. Cuts database writes and
UI redraws by orders of magnitude during long responses.

Co-Authored-By: Charm Crush <crush@charm.land>
2026-05-12 10:51:28 -04:00
Tai GrootandGitHub 4d16e96bd3 fix(app): replace single events channel with pubsub.Broker for fan-out (#2663)
Fixes the SSE multi-consumer bug where multiple clients sharing the same
workspace received only a fraction of events (competing-consumer semantics
on a plain channel). Each caller to Events()/SubscribeEvents() now gets
its own dedicated channel via Broker.Subscribe(ctx).

💘 Generated with Crush

Assisted-by: AWS Claude Sonnet 4.6 via Crush <crush@charm.land>
2026-04-28 17:03:50 -04:00
Christian Rocha 9d4653e8c9 chore(styles): use hypercrush theme when hyper is selected 2026-04-27 17:00:43 -04:00
Christian Rocha 755f6fae6f chore(ui): theme prep 2026-04-26 11:19:19 -04:00
Christian Rocha 81daa26681 fix(styles): use semantic names in styles + drop deadcode 2026-04-24 09:15:35 -04:00
huaiyuWanghandGitHub b37649e452 feat(ui): add skills discovery status to sidebar and landing page (#2384)
- Display loaded/errored skills in sidebar and landing page
- Use pubsub event to carry skill states directly to UI, avoiding
  global mutable state
- Subscribe to skills discovery events via broker, consistent with
  MCP/LSP patterns
- Rename State to DiscoveryState for clarity
2026-04-16 17:40:02 -03:00
M1xAandGitHub fccf061d46 fix(app): derive shutdown context from context.Background() instead of cancelled globalCtx (#2242) 2026-04-08 16:24:01 -03:00
Ayman Bagabas ee13558119 Merge remote-tracking branch 'origin/main' into server-client-2 2026-03-17 01:01:49 +03:00
fad58e2c26 feat: be able to continue non-interactive sessions (#2401)
Co-authored-by: Andrey Nering <andreynering@users.noreply.github.com>
2026-03-16 20:40:29 +00:00
Ayman Bagabas 64f6cdf560 refactor: rename Permissions.SkipRequests to Overrides().SkipPermissionRequests 2026-03-12 14:31:26 +03:00
Ayman Bagabas 99108f0e80 Merge branch 'main' into server-client-2 2026-03-12 03:28:06 +03:00
Ayman BagabasandGitHub 5ff8d68760 refactor(config): introduce ConfigStore and Scope for better config m… (#2395)
* refactor(config): introduce ConfigStore and Scope for better config management

This makes config.Config immutable and introduces a ConfigStore that
manages the config and provides helper methods for accessing config
values with proper scoping (global, workspace). This allows us to avoid
passing around mutable config objects and ensures that all parts of the
code are accessing the most up-to-date config values. It also lays the
groundwork for future features like per-workspace config overrides.

* fixt: lint
2026-03-12 03:12:02 +03:00
AmolithandGitHub f8da538c50 feat(notification): alert on turn completion and permission request (#1356)
* feat(notification): add em'

Assisted-by: Claude Sonnet 4.5 via Crush

* refactor(permission): check allowlist first

* docs(notification): correct example, fix rendering

* fix(notification): bump godbus/dbus to v5.2.2

v5.1.0's FreeBSD SendNullByte() was in a CGO file, so it was excluded
when building with CGO_ENABLED=0, causing the freebsd/amd64 cross-build
to fail. v5.2.2 rewrites it in pure Go.
2026-03-11 18:12:11 +03:00
Ayman Bagabas 1b37d55bb6 feat: send server client version info 2026-03-10 22:04:32 +03:00
Ayman Bagabas 0f2e2f0526 feat(server): initial implementation of Crush RPC server/client 2026-03-10 18:00:16 +03:00
Christian RochaandGitHub 2dacfbd90c fix(noninteractive): actually use models to generate titles (#2372)
Prior to this, non-interactive titles would simply be the prompt, which
could be multiple lines and would include data piped in.

This revision also removes the "non-interactive:" title prefix as it's
irrelevant. Non-interactive sessions can be picked up in the TUI and are
treated no different than interactive sessions.
2026-03-09 10:00:19 -04:00
huaiyuWanghandGitHub dcc67b7845 fix(app): fix goroutine leak, shutdown context, and model matching (#2298)
- Add missing return after error send in RunNonInteractive goroutine
- Use context.WithoutCancel for shutdown to preserve tracing context
- Use strings.EqualFold for case-insensitive model matching
- Preserve LSP ConnectedAt across state transitions
2026-02-24 14:02:57 -03:00
5179b28efd feat(lsp): show user-configured LSPs in the UI (#2192)
* feat(lsp): show user-configured LSPs in the UI

This will show the user-configured LSPs as stopped in the UI.

Maybe we should have a different state for "waiting"?

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

* chore(lsp): mark "unstarted" LSPs as such, use named styles

* fix: add unstarted state

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>
2026-02-11 17:46:18 -03:00
63e009898a fix: improving shutdown (#2175)
* test: use t.Context() and synctest

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

* fix: passing down context to all shutdown funcs

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

* perf(lsp): kill all clients on shutdown

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

* fix: exit posthog earlier

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

* test: fix dirs test

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

* test: fix projects test

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>

* Update internal/lsp/manager.go

Co-authored-by: Andrey Nering <andreynering@users.noreply.github.com>

* fix: cleanup

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

* test: race

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: Andrey Nering <andreynering@users.noreply.github.com>
2026-02-09 11:32:01 -03:00
M1xAandGitHub 3b3a3d78c8 fix: prevent goroutine orphaning in mcp.Close() and shell.KillAll() (#2159) 2026-02-09 09:40:35 -03:00
02f66a2e86 feat(lsp): start LSPs on demand, improve auto-start (#2103)
* feat(lsp): start LSPs on demand, improve auto-start

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

* refactor: simplify

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

* chore: fmt

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

* feat: handle new session/load session

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

* refactor: manager holds client list reference

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

* fix: do io in cmd

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

* fix: better manager

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

* fix: nil

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

* fix: err

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

* fix: properly handle restart

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

* fix: add stopped state

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

* fix: root markers

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

* fix: load for read files as well

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

* chore(go.mod): move indirect dependency to the right block

---------

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Co-authored-by: Andrey Nering <andreynering@users.noreply.github.com>
2026-02-06 16:12:18 -03:00
0491b670e4 perf: timer leak in setupSubscriber (#2147)
* fix: fix timer leak in setupSubscriber causing resource exhaustion under high load

* fix: synctest

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

* test: improvements

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

* refactor: tests

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: AnyCPU <AnyCPU@users.noreply.github.com>
2026-02-06 15:55:04 -03:00
Kujtim HoxhaandGitHub 2c9670a890 refactor: remove global config (#2132)
* refactor: remove global config from ui

* refactor: remove global config from lsp

* refactor: remove global config
2026-02-06 11:57:59 +01:00
Kujtim HoxhaandGitHub 9013bb0122 refactor: remove old tui (#2008) 2026-02-05 12:02:16 +01:00
huaiyuWanghandGitHub ea8c39f4cf feat: add configurable timeout for LSP initialization (#2075)
* feat: add configurable timeout for LSP initialization

Add a timeout field to LSPConfig to allow users to customize
the initialization timeout for LSP servers. This is particularly
useful for slow-starting servers like kotlin-language-server that
may require more than the default 30 seconds to initialize.

Fixes #1865

* refactor: simplify timeout logic with cmp.Or

Simplified the timeout handling by using Go's cmp.Or() function instead
of manual conditional checks, reducing code from 5 lines to 1 line while
maintaining the same functionality.
2026-02-03 09:59:53 -03:00
Andrey NeringandGitHub b7e07a5927 fix: address potential panic on initialization (#2092)
Easily reproducible for a new setup (onboarding).
2026-02-02 13:30:15 -03:00
Carlos Alexandro BeckerandGitHub 4a03cbaf3c fix(lsp): improve lsp tools (#2089)
With auto discovery, the user configured lsps might be empty, but we
might still configure some LSPs. We need to check the proper places, as
well as refresh the tool list if LSPs are actually started.

This is an alternative implementation to #2079

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
2026-02-02 11:30:51 -03:00
Andrey Nering 1696e72e92 chore: update catwalk and its import paths to charm.land/catwalk 2026-01-30 13:02:04 -03:00
3a2a045c3e fix: improve logs, standardize capitalized (#2047)
* fix: improve logs, standarize capitalized

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

* Update Taskfile.yaml

Co-authored-by: Andrey Nering <andreynering@users.noreply.github.com>

* chore: lint

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: Andrey Nering <andreynering@users.noreply.github.com>
2026-01-29 21:12:43 -03:00
Carlos Alexandro BeckerandGitHub c0a8c7e821 feat: allow to disable indeterminate progress bar (#2048)
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
2026-01-29 15:33:52 -03:00
Carlos Alexandro BeckerandGitHub 3a929ffcff feat: filetracker per session (#2033)
* 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>
2026-01-29 10:19:00 -03:00
Carlos Alexandro BeckerandGitHub c81b02f440 feat(lsp): auto-discover LSPs (#1834)
* 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>
2026-01-27 16:26:00 -03:00
Kujtim HoxhaandGitHub abbee92df2 feat: delete sessions (#1963)
* feat: delete sessions

* chore: small cleanup

* chore: make delete transactional

* refactor: cleanup the delete logic
2026-01-26 14:31:12 +01:00
Andrey Nering 28e0ff3551 feat: implement onboarding flow on the new ui codebase 2026-01-23 17:20:52 -03:00
Carlos Alexandro BeckerandGitHub 366942352a feat: crush run --model, and crush models (#1889)
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
2026-01-21 17:41:38 -03:00
Christian Rocha 4261dfbf15 refactor: move domain-specific type out of generic pubsub package
💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-01-19 23:20:37 -05:00
Kujtim Hoxha c0662f13c0 fix: do not wait for MCP on interactive mode 2026-01-18 10:19:37 +01:00
Christian RochaandGitHub 75209207bc chore: fix more typos (#1863) 2026-01-14 15:28:26 -05:00
Kujtim HoxhaandGitHub 6f0f5197e3 Fix shutdown (#1833) 2026-01-12 15:11:51 +01:00
Carlos Alexandro BeckerandGitHub 6f646c9151 perf: improve startup and shutdown speed (#1829)
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
2026-01-12 14:37:05 +01:00
Carlos Alexandro BeckerandGitHub d1382bb55d perf: reduce memory usage (#1812)
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
2026-01-09 14:21:42 -03:00
Christian RochaandGitHub 59e4adc2fb chore: minor internal/app improvements (#1696) 2025-12-27 12:19:19 -08:00
Christian RochaandGitHub 36d471b682 fix(noninteractive): support output redirection (aka, pipes) (#1594) 2025-12-12 18:02:30 +01:00
Gustave-241021andGitHub 8ab8324be9 fix: prevent nil pointer dereference when updating agent model (#1560) 2025-12-08 15:42:26 +01:00
Carlos Alexandro BeckerandGitHub 95b9a4298e fix: faster shutdown (#1570)
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
2025-12-08 11:00:21 -03:00
Andrey Nering 12f093d83e feat: show a different message if crush is built from source 2025-11-18 16:01:10 -03:00
Andrey Nering fb7d5b6a93 style: small code style updates 2025-11-18 16:01:10 -03:00
afc8fd0be1 feat: notify about new crush versions (#361)
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Co-authored-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Co-authored-by: Andrey Nering <andreynering@users.noreply.github.com>
2025-11-18 12:22:40 +01:00