Commit log

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>

Kujtim Hoxha created

ff212d6 chore: auto-update files

Charm created

2c9670a refactor: remove global config (#2132)

Click to expand commit body
* refactor: remove global config from ui

* refactor: remove global config from lsp

* refactor: remove global config

Kujtim Hoxha created

ef1ba40 chore(legal): @francescoalemanno has signed the CLA

Charm created

74aff5d chore: update fantasy to v0.7.1 (#2139)

Andrey Nering created

989b0d2 fix: cap posthog shutdown timeout (#2138)

Christian Rocha created

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

d6590aa v0.39.3

Andrey Nering 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.

Ayman Bagabas created

9316a7a v0.39.2

Andrey Nering created

f0c9985 revert: the width changes in #2127 (#2135)

Click to expand commit body
This reverts commit fd437468b74e250f4d197b29c7857ce1ebbb406e.

Kujtim Hoxha created

d29d0e2 fix: realtime session file changes (#2134)

Kujtim Hoxha created

8adfe70 fix: hyper provider cancel (#2133)

Kujtim Hoxha created

9013bb0 refactor: remove old tui (#2008)

Kujtim Hoxha created

fd43746 fix(ui): consistent box sizing (#2127)

Click to expand commit body
* 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

Charm created

afed74c fix(ui): api key dialog typo (#2131)

Nick Grimshaw created

2d0a0e2 fix(ui): fix bug preventing pasting text on windows (#2126)

Click to expand commit body
Fixes #2118

Andrey Nering created

b28f4ce fix(ui): completions popup gets too narrow on single item (#2125)

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

Carlos Alexandro Becker created

d558340 chore(legal): @inquam has signed the CLA

Charm created

874c1ca chore: update ui/agents.md (#2122)

Click to expand commit body
* 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>

Carlos Alexandro Becker created

142c854 fix: change hyper url (#2120)

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

Carlos Alexandro Becker created

e008795 v0.39.1

Carlos Alexandro Becker created

247d89e ci: use OIDC for npm login (#2094)

Click to expand commit body
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.

Ayman Bagabas created

f53402d fix(ui): context percentage updates (#2115)

Click to expand commit body
* 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

Charm created

fd35a87 fix(ui): padding in the view (#2107)

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

Carlos Alexandro Becker created

8d6384e v0.39.0

Andrey Nering created

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.

Andrey Nering created

02ec682 chore: auto-update files

Charm created

d0ed2c5 feat(ui): transparent mode (#2087)

Click to expand commit body
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>

Carlos Alexandro Becker created

bf1c65e feat: release new ui refactor (#2105)

Andrey Nering created

7c5d6ca chore(styles): make rename style definitions match UI language

Christian Rocha created

d4b9b35 chore(style): add specific style for session rename placeholder

Christian Rocha created