12f0d9f
perf(tools/view): avoid scanning entire file to count lines
Christian Rocha created
12f0d9f
perf(tools/view): avoid scanning entire file to count lines
Christian Rocha created
41a931e
fix(mcp): restore handling for unsupported resources/list method
Christian Rocha created
773efbf
fix(tools/view): perform UTF-8 validity check only if read succeeds
Prior to this change the check would happen before we would know if the file read was successful.
Christian Rocha created
42aee6d
refactor: use params struct for runSubAgent and add unit tests
wanghuaiyu@qiniu.com created
6e5bbef
fix: use typed context keys in tests to satisfy staticcheck
- Define custom key types (testStringKey, testBoolKey, testIntKey) - Replace string literals with typed constants - Fixes SA1029: should not use built-in type string as key for value
wanghuaiyu@qiniu.com created
e0d5454
refactor: extract common sub-agent execution logic
- Add runSubAgent and runSubAgentWithOptions methods to coordinator - Simplify agent_tool.go from 106 to 60 lines (43.4% reduction) - Simplify agentic_fetch_tool.go from 235 to 200 lines (14.9% reduction) - Eliminate 81 lines of duplicated session management code - Support custom session setup via callback for special cases - Improve error handling with proper error wrapping - Add updateParentSessionCost helper for consistent cost propagation
wanghuaiyu@qiniu.com created
07d065d
refactor: simplify context value retrieval using generics
- Introduce generic getContextValue helper function to eliminate code duplication - Reduce code from 75 to 56 lines (25.3% reduction) - Simplify Get*FromContext functions from ~13 lines to 2 lines each - Add comprehensive test coverage (18 test cases) for context functions - Maintain backward compatibility with existing API
wanghuaiyu@qiniu.com created
2904a36
v0.46.0
Andrey Nering created
24f99f0
fix(lsp): replace recursive fastwalk with filepath.Glob in root marker detection (#2316)
hasRootMarkers used fsext.Glob which triggered a full recursive fastwalk of the working directory with no gitignore filtering. In large JS monorepos this walked millions of files in node_modules, causing 800% CPU usage. Root markers are simple filenames (go.mod, package.json, *.gpr, etc.) that only need a single-directory check. 🐘 Generated with Crush Assisted-by: AWS Claude Opus 4.6 via Crush <crush@charm.land>
Austin Cherry created
c6f8546
feat: add support for anthropic thinking effort (#2318)
Andrey Nering created
cd34bd6
feat: add minimax china provider (#2315)
Co-authored-by: Andrey Nering <andreynering@users.noreply.github.com>
AN Long and Andrey Nering created
b726b20
chore(legal): @aisk has signed the CLA
Charm created
398efd9
chore: "docker mcp" -> "docker mcp catalog"
Andrey Nering created
1dbde3e
chore(legal): @mavaa has signed the CLA
Charm created
234a87c
v0.45.1
Andrey Nering created
8d6433b
ci: notify me on winget prs
Andrey Nering created
c9fec16
chore: update catwalk
Andrey Nering created
4018154
fix(event): guard against panic (#2310)
Christian Rocha created
3994293
chore(events): log when crush stats is called
Christian Rocha created
655ce65
fix(ui): truncate status messages that would otherwise wrap (#2306)
Christian Rocha created
62b8c0b
fix(lsp): fix multiple bugs in lsp client lifecycle and handlers (#2305)
- Remove dead client from map when initialization fails to allow retry - Use client's cwd field instead of os.Getwd() in openKeyConfigFiles - Fix slog key-value pair in HandleServerMessage error logging - Remove redundant hardcoded timeout in WaitForServerReady
huaiyuWangh created
643919d
fix: initialize lsp manager callback to prevent nil pointer panic (#2307)
The `callback` field was `nil` when the app returned early before `SetCallback` was called, causing a segfault in `startServer`. 💘 Generated with Crush Assisted-by: Claude Opus 4.6 via Crush <crush@charm.land>
Andrey Nering created
d159984
v0.45.0
Andrey Nering created
841165e
feat: add support or gemini 3+ thinking levels
Andrey Nering created
a439237
chore: update catwalk to v0.22.0
Andrey Nering created
407ab1f
chore: update fantasy to v0.10.0
Andrey Nering created
1ecfc64
Merge branch 'main' into feat/docker-mcp-integration
Andrey Nering created
dff955f
fix(mcp): gracefully handle Method not found for resources/list (#2239)
Some MCP servers advertise resources capability but don't implement resources/list, causing the entire MCP client to fail. This change handles JSON-RPC error code -32601 gracefully by marking resources as unavailable instead of failing. Fixes #2227
0xarcher created
c046219
chore: update lip gloss, bubble tea and bubbles to v2.0.0 (#2299)
Andrey Nering created
dcc67b7
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
huaiyuWangh created
57a09a1
chore(deps): bump the all group with 3 updates (#2290)
Bumps the all group with 3 updates: [charm.land/catwalk](https://github.com/charmbracelet/catwalk), [github.com/clipperhouse/displaywidth](https://github.com/clipperhouse/displaywidth) and [github.com/pressly/goose/v3](https://github.com/pressly/goose). Updates `charm.land/catwalk` from 0.21.0 to 0.21.1 - [Release notes](https://github.com/charmbracelet/catwalk/releases) - [Commits](https://github.com/charmbracelet/catwalk/compare/v0.21.0...v0.21.1) Updates `github.com/clipperhouse/displaywidth` from 0.10.0 to 0.11.0 - [Release notes](https://github.com/clipperhouse/displaywidth/releases) - [Changelog](https://github.com/clipperhouse/displaywidth/blob/main/CHANGELOG.md) - [Commits](https://github.com/clipperhouse/displaywidth/compare/v0.10.0...v0.11.0) Updates `github.com/pressly/goose/v3` from 3.26.0 to 3.27.0 - [Release notes](https://github.com/pressly/goose/releases) - [Changelog](https://github.com/pressly/goose/blob/main/CHANGELOG.md) - [Commits](https://github.com/pressly/goose/compare/v3.26.0...v3.27.0) --- updated-dependencies: - dependency-name: charm.land/catwalk dependency-version: 0.21.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: github.com/clipperhouse/displaywidth dependency-version: 0.11.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: github.com/pressly/goose/v3 dependency-version: 3.27.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
dependabot[bot] and dependabot[bot] created
c65b807
ci: allow `MIT-0` dependencies (#2297)
One of our indirect dependencies switched to "MIT-0". This is even more permissive than MIT, so totally valid for us. * https://github.com/segmentio/asm/pull/86 Check failure: * https://github.com/charmbracelet/crush/pull/2290 * https://github.com/charmbracelet/crush/actions/runs/22323633569/job/64588201366?pr=2290 About the license: * https://github.com/aws/mit-0 * https://opensource.org/license/mit-0
Andrey Nering created
38c6632
fix: wrap correct error (#2296)
Fixes #2284
Andrey Nering created
0ac3d9a
chore(deps): bump goreleaser/goreleaser-action in the all group (#2289)
Bumps the all group with 1 update: [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action). Updates `goreleaser/goreleaser-action` from 6.4.0 to 7.0.0 - [Release notes](https://github.com/goreleaser/goreleaser-action/releases) - [Commits](https://github.com/goreleaser/goreleaser-action/compare/e435ccd777264be153ace6237001ef4d979d3a7a...ec59f474b9834571250b370d4735c50f8e2d1e29) --- updated-dependencies: - dependency-name: goreleaser/goreleaser-action dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: all ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
dependabot[bot] and dependabot[bot] created
eb12fbe
chore: update `x/powernap` (#2295)
* Closes https://github.com/charmbracelet/crush/discussions/2287 * Ref https://github.com/charmbracelet/x/pull/784
Andrey Nering created
262c74e
fix(agent): fix minor bugs in coordinator and view tool (#2276)
- Fix misleading error message: report "small model provider not configured" instead of "large" when the small model provider is missing - Fix error handling order in view tool: check readTextFile error before UTF-8 validation to avoid validating partial/empty content - Fix MCP tool filtering: move "MCP not allowed" log into correct branch and break after tool is added to prevent duplicate additions
huaiyuWangh created
6e019e9
chore(legal): @Jaylonnet has signed the CLA
Charm created
44f532e
v0.44.0
Christian Rocha created
c1d294d
feat(ui): indicate when skills are loaded
Christian Rocha created
d6312f4
chore(styles): create specific styles for image loading indicators
Christian Rocha created
e3376ad
fix(ui): fix cases where compact header and footer bleed off screen (#2279)
Christian Rocha created
12a6372
fix(ui): apply the message style to each line of the message items
Related: 46ebd20b63d8
Ayman Bagabas created
3f07c90
chore(legal): @erikstmartin has signed the CLA
Charm created
6bd3f26
v0.43.4
Andrey Nering created
c9074a0
ci: fix release action, update go to 1.26
Andrey Nering created
cabfede
v0.43.3
Andrey Nering created
54d924b
fix: more reliably detect windows drive (#2273)
Andrey Nering created
c43192c
fix(agent): pass correct model config to small provider builder (#2236)
When building the small model provider, we were incorrectly passing largeModelCfg instead of smallModelCfg to buildProvider. This caused isAnthropicThinking to check the wrong model config, preventing the small model from enabling Anthropic thinking mode even when configured. Fixes #2141
0xarcher created
9e31414
chore(deps): bump catwalk
Andrey Nering created
f89a9d8
fix: proper validate io.net api keys (#2272)
They changed the `/models` endpoint so it actually validates the API key header if given.
Andrey Nering created