Christian Rocha
30c16c2094
Merge branch 'main' into fast-ui
2026-05-13 16:28:56 -04:00
Kieran Klukas and Kieran Klukas
61ee2d2e0e
fix(db): use connection pool to avoid corrupted writes
2026-05-12 12:40:59 -04:00
Christian Rocha and Charm 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 Groot and GitHub
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
huaiyuWangh and GitHub
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
M1xA and GitHub
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 Bagabas and GitHub
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
Amolith and GitHub
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 Rocha and GitHub
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
huaiyuWangh and GitHub
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
M1xA and GitHub
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 Hoxha and GitHub
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 Hoxha and GitHub
9013bb0122
refactor: remove old tui ( #2008 )
2026-02-05 12:02:16 +01:00
huaiyuWangh and GitHub
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 Nering and GitHub
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 Becker and GitHub
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 Becker and GitHub
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 Becker and GitHub
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 Becker and GitHub
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 Hoxha and GitHub
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 Becker and GitHub
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 Rocha and GitHub
75209207bc
chore: fix more typos ( #1863 )
2026-01-14 15:28:26 -05:00
Kujtim Hoxha and GitHub
6f0f5197e3
Fix shutdown ( #1833 )
2026-01-12 15:11:51 +01:00
Carlos Alexandro Becker and GitHub
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 Becker and GitHub
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 Rocha and GitHub
59e4adc2fb
chore: minor internal/app improvements ( #1696 )
2025-12-27 12:19:19 -08:00
Christian Rocha and GitHub
36d471b682
fix(noninteractive): support output redirection (aka, pipes) ( #1594 )
2025-12-12 18:02:30 +01:00
Gustave-241021 and GitHub
8ab8324be9
fix: prevent nil pointer dereference when updating agent model ( #1560 )
2025-12-08 15:42:26 +01:00
Carlos Alexandro Becker and GitHub
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