0593b06
refactor: rename ConfigService() to Config() throughout
Click to expand commit body
Rename App.ConfigService() to App.Config(), Common.ConfigService()
to Common.Config(), and app.configService field to app.cfg.
🐾 Generated with Crush
Assisted-by: Claude Opus 4.6 via Crush <crush@charm.land>
Kujtim Hoxha
created
04110b2
refactor: add RWMutex to Service for goroutine safety
Click to expand commit body
Agent goroutines and bubbletea Cmd goroutines read config state
concurrently with UI Update mutations. Add sync.RWMutex to
Service: read methods that access mutable state (Providers, Models,
Agents, Permissions, Attribution, etc.) take RLock; write methods
(SetProvider, UpdatePreferredModel, SetupAgents, RefreshOAuthToken,
SetProviderAPIKey, ImportCopilot, etc.) take Lock.
🐾 Generated with Crush
Assisted-by: Claude Opus 4.6 via Crush <crush@charm.land>
Kujtim Hoxha
created
b0daf0e
refactor: remove Config() escape hatch, eliminate all direct Config access
Click to expand commit body
Remove Service.Config() method entirely. Remove Config.Agents field.
Add Provider, SetProvider, AllProviders, SetAttribution,
SetSkillsPaths, SetLSP to Service. Migrate all remaining callers
(chat, coordinator, app, UI, commands, MCP, prompt, init) to use
Service methods exclusively. No code outside the config package
touches Config directly.
🐾 Generated with Crush
Assisted-by: Claude Opus 4.6 via Crush <crush@charm.land>
Kujtim Hoxha
created
726840e
refactor: change Config.Providers from csync.Map to plain map
Click to expand commit body
Replace *csync.Map[string, ProviderConfig] with
map[string]ProviderConfig on Config. Update all .Get/.Set/.Del/.Len
/.Seq2/.Copy calls to plain map operations across the codebase.
Remove csync dependency from config package.
🐾 Generated with Crush
Assisted-by: Claude Opus 4.6 via Crush <crush@charm.land>
Kujtim Hoxha
created
70585e9
refactor: remove internal fields from Config, change csync.Map callers
Click to expand commit body
Remove workingDir, resolver, and knownProviders from Config struct.
Remove WorkingDir(), Resolve(), and Resolver() methods from Config.
Change prompt.Build, MCP Initialize, commands, and init functions
to accept *Service instead of *Config. Config is now a pure data
struct with only read-only computed methods remaining.
🐾 Generated with Crush
Assisted-by: Claude Opus 4.6 via Crush <crush@charm.land>
Kujtim Hoxha
created
2b9164c
refactor: remove Config() from App and Common, drop App.config field
Click to expand commit body
Remove Config() accessor from App and Common. All callers now use
ConfigService() or ConfigService().Config() when passing *Config
to functions that still require it. Remove the config field from
App struct — only configService remains.
🐾 Generated with Crush
Assisted-by: Claude Opus 4.6 via Crush <crush@charm.land>
Kujtim Hoxha
created
6beb4de
refactor: handle remaining Config writes through Service
Click to expand commit body
Add OverrideModel to Service for non-interactive model overrides.
Move Permissions writes in root.go to use Service.SetPermissions.
Remove unused setConfigField, removeConfigField, configStore, store,
and dataConfigDir from Config.
🐾 Generated with Crush
Assisted-by: Claude Opus 4.6 via Crush <crush@charm.land>
Kujtim Hoxha
created
e4880ac
refactor: add Service getters for Config fields, migrate callers
Click to expand commit body
Add DataDirectory, Debug, DebugLSP, DisableAutoSummarize,
Attribution, ContextPaths, SkillsPaths, Progress, DisableMetrics,
SelectedModel, Agent, MCP, LSP, Permissions, ToolLsConfig,
CompactMode, DiffMode, CompletionLimits, and more to Service.
Migrate coordinator, app, cmd, and UI callers to use Service
getters instead of direct Config field access.
🐾 Generated with Crush
Assisted-by: Claude Opus 4.6 via Crush <crush@charm.land>
Kujtim Hoxha
created
7d4f136
refactor: move SetupAgents from Config to Service
Click to expand commit body
Agents are now owned by Service. SetupAgents() builds agents on
the Service and syncs to Config.Agents for backward compatibility.
🐾 Generated with Crush
Assisted-by: Claude Opus 4.6 via Crush <crush@charm.land>
Kujtim Hoxha
created
00aa396
refactor: move provider configuration logic from Config to Service
Click to expand commit body
Move configureProviders, configureSelectedModels, and
defaultModelSelection from Config receiver to Service receiver.
Load() now calls svc.configureProviders() and
svc.configureSelectedModels(). Tests use a serviceFor() helper.
🐾 Generated with Crush
Assisted-by: Claude Opus 4.6 via Crush <crush@charm.land>
Kujtim Hoxha
created
f1c794f
refactor: add read accessor methods to Service, migrate callers
Click to expand commit body
Add WorkingDir, EnabledProviders, IsConfigured, GetModel,
GetProviderForModel, GetModelByType, LargeModel, SmallModel,
Resolve, and Resolver to Service. Migrate callers in coordinator,
app, and UI to use ConfigService() instead of Config() for these
methods. Config retains the methods for prompt.Build and internal
load flow compatibility.
🐾 Generated with Crush
Assisted-by: Claude Opus 4.6 via Crush <crush@charm.land>
Kujtim Hoxha
created
678c8f7
refactor: move mutation methods from Config to Service
Click to expand commit body
Move SetCompactMode, UpdatePreferredModel, SetProviderAPIKey,
RefreshOAuthToken, ImportCopilot, SetConfigField, RemoveConfigField,
HasConfigField, and recordRecentModel to Service. Add ConfigService()
accessor to App and Common for callers that need mutations. Config
retains only unexported setConfigField/removeConfigField for the
internal load flow.
🐾 Generated with Crush
Assisted-by: Claude Opus 4.6 via Crush <crush@charm.land>
Kujtim Hoxha
created
fa69420
refactor: introduce config.Service, Load/Init now return *Service
Click to expand commit body
Service wraps *Config and owns internal state (store, resolver,
knownProviders, workingDir). A temporary Config() escape hatch
lets callers access the underlying struct during the migration.
🐾 Generated with Crush
Assisted-by: Claude Opus 4.6 via Crush <crush@charm.land>
Kujtim Hoxha
created
1a3657d
refactor: extract config persistence into Store abstraction
Click to expand commit body
Introduce a Store interface and FileStore implementation that
encapsulate JSON config read/write with pretty-printed output.
Config.SetConfigField, RemoveConfigField, and HasConfigField now
delegate to the store instead of doing raw file I/O inline.
🐾 Generated with Crush
Assisted-by: Claude Opus 4.6 via Crush <crush@charm.land>
3a9d95d
fix(ui): use plain letters for lsp status (#2121)
Click to expand commit body
* fix(ui): use plain letters for lsp status
symbols might be wrongly interpreted by some terminals, so this might be a good idea
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
* chore(ui): use consts for LSP symbols
* fix: missing icon usage
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
f22a6f9
fix(ui): list: ensure the offset line does not go negative when scrolling up
Click to expand commit body
When scrolling up in the list, the offset line could become negative if
there was a gap between items. This change ensures that the offset line
is clamped to zero in such cases, preventing potential rendering issues.
This also adds a check to avoid unnecessary scrolling when already at
the bottom of the list. The calculation of item height has been
simplified by using strings.Count directly.
* fix(ui): width
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
* fix: simplify
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
dd78d5d
chore(legal): @nickgrim has signed the CLA
* chore: update ui/agents.md
it should always do io inside a tea.cmd
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
* Apply suggestion from @caarlos0
---------
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
needs https://github.com/charmbracelet/meta/pull/274
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Carlos Alexandro Becker
created
15a729c
fix(ui): only scroll to selected item if item collapsed
Ayman Bagabas
created
3bda767
fix(ui): ensure we anchor the chat view to the bottom when toggling (#2117)
Click to expand commit body
an item at the bottom of the chat
When toggling an item in the chat, if that item is at the bottom of the
chat, we want to ensure that we stay anchored to the bottom. This
prevents a gap from appearing at the bottom of the chat when toggling an
item that is currently selected and at the bottom.
* fix(ui): context percentage updates
When the agent is performing tasks, the context percentage in the header
was not updating correctly. This commit fixes the issue by ensuring that
the header always draws the context details.
* fix(ui): always turn off compact mode when going to landing state
Ayman Bagabas
created
112fea8
fix(ui): cursor mispositioned when pasting large blocks of text in textarea (#2113)
Ayman Bagabas
created
6ff14c1
chore(legal): @zhiquanchi has signed the CLA
3c8be69
fix: fix pasting files on some terminal emulators (#2106)
Click to expand commit body
* Check `WT_SESSION` instead of `GOOS` for Windows Terminal.
* Be more strict on Windows Terminal: do not allow chars outside quotes
(prevents false positives).
* Some terminals just paste the literal paths (Rio as separate events,
Kitty separated by a line break). If it contains valid path(s) for
existing file(s), just use that.
* Workaround Rio on Windows that adds NULL chars to the string.
optional transparent mode.
this is enabled by default on apple terminal as it doesn't reset
properly.
refs #1140
refs #1137
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>