392 Commits
Author SHA1 Message Date
Christian RochaandGitHub 4686002d64 Merge pull request #2908 from charmbracelet/fast-ui
perf(ui): tui performance improvements
2026-05-15 14:30:47 -04:00
Andrey NeringandGitHub f34f890edf fix(deepseek): fix 400 bad request for deepseek provider (#2923)
Closes #2919
2026-05-15 10:06:16 -03:00
Christian Rocha f012b46976 Merge remote-tracking branch 'origin/main' into fast-ui 2026-05-14 21:21:44 -04:00
Kieran KlukasandKieran Klukas f6dc495d97 feat(responses): opt in specific copilot models to responses 2026-05-14 15:38:46 -04:00
Christian Rocha 55205401ad Merge branch 'main' into fast-ui 2026-05-14 15:34:53 -04:00
Kieran KlukasandKieran Klukas 08c5c7d8af fix(reasoning): enforce can reason from catwalk before sending reasoning_effor 2026-05-14 15:23:05 -04:00
Andrey NeringandGitHub 0a2de47f0e fix: address thinking on/off toggle for provider (#2916) 2026-05-14 16:00:46 -03:00
Charm 3413970fee chore: auto-update files 2026-05-14 18:02:01 +00:00
IlgazandKieran Klukas 8e7451fc1e fix(ui): show custom skills reliably on startup
Resolve race condition by implementing a package-level cache for skill discovery states. Add ~/.agents/skills/ and ~/.claude/skills/ as global skill scan paths.
2026-05-14 14:00:23 -04:00
Christian Rocha 30c16c2094 Merge branch 'main' into fast-ui 2026-05-13 16:28:56 -04:00
Andrey Nering 4373f63e2e chore: fetch updated info from hyper
Closes #2900
2026-05-13 10:21:00 -03:00
Andrey Nering ea847f2890 fix: make thinking on/off toggle work for deepseek provider
* Ref: https://github.com/charmbracelet/catwalk/pull/271
* Docs: https://api-docs.deepseek.com/guides/thinking_mode
2026-05-13 10:15:31 -03:00
Kieran KlukasandGitHub 6f91b0ca22 fix(tools): switch bufio scanner for reader (#2884)
* fix(tools): switch bufio scanner for reader

* chore(tests): update golden files
2026-05-12 17:00:19 -04:00
0490a8a6b4 fix(bedrock): honor reasoning_effort for Anthropic-on-Bedrock models (#2887)
Bedrock routes through Fantasy's Anthropic implementation with a
different display name, so provider options must still be filed under
anthropic.Name for the language model to pick them up. Previously the
bedrock provider type was missing from getProviderOptions entirely, so
reasoning_effort and think were silently dropped.

Co-authored-by: JJ Bot <john.jansen+bot@me.com>
2026-05-12 17:31:49 -03:00
Bruno KrugelandGitHub 959bf7e289 feat(tools): create an allow list for MCP tools (#2800) 2026-05-12 13:49:35 -04:00
Kieran KlukasandKieran Klukas 0485adc477 chore(tests): update golden files 2026-05-12 12:16:03 -04:00
Kieran KlukasandKieran Klukas 9b8b888efe fix(prompts): don't include ripgrep and gh prompts in testing 2026-05-12 12:16:03 -04:00
Kieran KlukasandKieran Klukas 0c1014e5f7 feat(prompts): extend templating system to more prompts 2026-05-12 12:16:03 -04:00
5ad8beee37 feat(prompts): template prompts and add github and ripgrep info
Co-authored-by: Tai Groot <tai@taigrr.com>
2026-05-12 12:16:03 -04:00
Kieran KlukasandKieran Klukas 651abb48ae chore(golden): rerecord vhs 2026-05-12 10:54:58 -04:00
Kieran KlukasandKieran Klukas efb3b03390 feat(prompts): remove long prompt option 2026-05-12 10:54:58 -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
Charm 7b34700a8f chore: auto-update files 2026-05-12 14:39:29 +00:00
c853a939ef fix(config): always resolve the data directory to an absolute path (#2883)
Co-authored-by: Charm Crush <crush@charm.land>
2026-05-12 10:37:49 -04:00
Greg SlepakandGitHub 2235a49d0d fix: limit view size checks to returned content (#2785) 2026-05-11 20:36:11 +00:00
Andrey NeringandGitHub 24da509486 fix: properly follow the Assisted-by header spec (#2871)
We were not using the correct format. According to the SPEC it should be:

    Assisted-by: AGENT_NAME:MODEL_VERSION

So now it'll look like this:

    Assisted-by: Crush:kimi-k2.6

See:

https://docs.kernel.org/process/coding-assistants.html#attribution
2026-05-11 17:23:49 -03:00
Charm 3b0d5de2b8 chore: auto-update files 2026-05-11 18:08:17 +00:00
Sven OlsenandKieran Klukas 9d34668858 fix(agent): release activeRequests before publishing TypeAgentFinished
I keep hitting a bug where a turn finishes -- desktop notification
fires, agent is clearly done -- but the terminal stays stuck on
the spinner with input blocked until something unrelated wakes
the TUI up.

The TUI polls IsSessionBusy() inside its TypeAgentFinished
handler and only re-evaluates on incoming tea.Msgs.  Run() right
now publishes the notification while activeRequests still holds
the session's cancel func, so the poll on receipt sees true and
the busy gates stay stuck.  Reorder so cleanup runs first.

💘 Generated with Crush

Assisted-by: Claude Opus 4.7 via Crush <crush@charm.land>
2026-05-11 09:47:47 -04:00
vorticalboxandKieran Klukas 7da38da0b0 refactor(tools): remove touch tool; allow empty write content 2026-05-10 16:43:56 -04:00
vorticalboxandKieran Klukas 0da13d7699 fix(tools/touch): gate outside-workingDir paths via permission prompt
Mirrors the view.go sanitizer pattern (filepath.Abs + filepath.Rel +
".." check) so CodeQL no longer flags os.Stat/MkdirAll/OpenFile in the
touch tool as uncontrolled path expressions.
2026-05-10 16:43:56 -04:00
vorticalboxandKieran Klukas 010ca2f5bf feat: add touch tool for empty files 2026-05-10 16:43:56 -04:00
Christian RochaandGitHub ac79e5bb03 fix(tools/view): detect image mime type; don't rely on extension (#2757) 2026-05-09 20:23:48 -04:00
Christian RochaandGitHub 8f2fd3d5ad Merge pull request #2788 from charmbracelet/revolve-env-vars-round-two
config: lenient shell expansion default, uniform coverage across MCP, LSP, and providers
2026-05-09 20:23:05 -04:00
Charm b7607a0bdb chore: auto-update files 2026-05-10 00:18:44 +00:00
Christian RochaandGitHub 2814e40835 Merge pull request #2782 from charmbracelet/resolve-env-vars
fix(config): restore full shell expansion in MCP config values
2026-05-09 20:17:10 -04:00
Kieran KlukasandKieran Klukas 44ece2c849 fix(tools): truncate long running background commands to 30k chars 2026-05-08 13:44:35 -04:00
Kieran KlukasandKieran Klukas 89181a6809 fix(tools): don't return a go error on glob tool failure 2026-05-08 11:20:52 -04:00
huaiyuWanghandGitHub 5816fada93 fix(agent): support flat_rate cost handling (#2116) 2026-05-08 10:55:28 -03:00
Kieran KlukasandKieran Klukas 11eabdfc6e fix(errors): surface errors in subagents 2026-05-07 15:08:43 -04:00
Kieran KlukasandKieran Klukas 5aad7904db fix(tools): fix a potential nill crash in cached glob results 2026-05-07 10:28:11 -04:00
Andrey Nering 8cd4786cc6 refactor(coordinator): extract token refresh helpers to reduce duplication
Extract `refreshTokenIfExpired` and `retryAfterUnauthorized` functions
to eliminate duplicated OAuth/API key refresh logic in both `Run` and
`Summarize`.

💘 Generated with Crush

Assisted-by: Kimi K2.6 via Crush <crush@charm.land>
2026-05-06 17:38:29 -03:00
Kieran KlukasandAndrey Nering 6bdd233b03 fix(ui): display error on summarization instead of leaving spinning 2026-05-06 17:38:29 -03:00
Kieran KlukasandAndrey Nering a4020df627 fix(summarize): reauthenticate oauth tokens when used to summarize 2026-05-06 17:38:29 -03:00
Andrey NeringandGitHub 6d95ecc5c7 fix: skip image attachments in history when model doesn't support them (#2818)
When switching from a vision-capable model to one without image support
mid-conversation, historical user messages containing image attachments
would cause API errors. Now those attachments are filtered out from the
prompt history based on the current model's SupportsImages capability.

💘 Generated with Crush

Assisted-by: Kimi K2.6 via Crush <crush@charm.land>
2026-05-06 17:05:11 -03:00
Kieran KlukasandKieran Klukas 61f49b23ed fix(agent): drain queued messages after manual session summarize 2026-05-06 15:00:18 -04:00
Charm ecebe91e2c chore: auto-update files 2026-05-04 21:15:22 +00:00
Christian RochaandCharm Crush a28aded746 test: realign MCP init tests with lenient shell expansion
Several MCP startup tests were written against the old "unset
variable is an error" behavior and no longer tripped now that
missing variables quietly expand to empty. The fixtures switch to
$(false) or an empty URL so the failing and empty paths are still
covered, and a couple of new subtests pin the new quiet behavior so
it cannot silently regress.

Co-Authored-By: Charm Crush <crush@charm.land>
2026-05-03 17:02:27 -04:00
Christian Rocha 240e5c2ccb test: cover shell expansion in MCP config resolution 2026-05-02 15:49:47 -04:00
Christian Rocha f71645753f feat(config): resolve MCP url through shell expansion
m.URL now runs through the same resolver as command, args, env, and
headers so $VAR / $(cmd) work in http and sse endpoints. The empty-url
guard runs after resolution so ${X:-} still fails cleanly, and failing
expansions surface via the existing StateError path.
2026-05-02 15:49:44 -04:00
Christian Rocha dbd40d82dc feat(config): resolve MCP args and thread resolver through env/headers/args
Adds MCPConfig.ResolvedArgs and changes ResolvedEnv/ResolvedHeaders to
take a VariableResolver, so createTransport threads one resolver through
command, args, env, and headers. Client mode (IdentityResolver) now
keeps all four fields literal for server-side expansion; server mode
expands uniformly via the shell resolver.
2026-05-02 15:48:37 -04:00