From fa8c764c4025faeab96c9e3f5eb434ec3f69f2ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jan 2026 14:51:20 -0300 Subject: [PATCH 1/8] chore(deps): bump the all group with 3 updates (#1918) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- .github/workflows/schema-update.yml | 2 +- .github/workflows/security.yml | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 39b5923298e2f7fa8d5452327a6e8b2a08f0df97..39e104129f0c3c059b116acabb0a86f5e53e6dc4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,7 +18,7 @@ jobs: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: persist-credentials: false - - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 + - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 with: go-version-file: go.mod - run: go mod tidy diff --git a/.github/workflows/schema-update.yml b/.github/workflows/schema-update.yml index 5bc1f29d91969f32757f9ad78f7742e7e20b7f3e..b02ad11ebd556490b6f2abbb4af172166a458d18 100644 --- a/.github/workflows/schema-update.yml +++ b/.github/workflows/schema-update.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} - - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 + - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 with: go-version-file: go.mod - run: go run . schema > ./schema.json diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml index 3a90ea316c3d86f5b2f93224fd2b35eaa572e704..b0e1a82cb63e020221a32abdf9534f610ec82b43 100644 --- a/.github/workflows/security.yml +++ b/.github/workflows/security.yml @@ -30,11 +30,11 @@ jobs: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: persist-credentials: false - - uses: github/codeql-action/init@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7 + - uses: github/codeql-action/init@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10 with: languages: ${{ matrix.language }} - - uses: github/codeql-action/autobuild@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7 - - uses: github/codeql-action/analyze@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7 + - uses: github/codeql-action/autobuild@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10 + - uses: github/codeql-action/analyze@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10 grype: runs-on: ubuntu-latest @@ -46,13 +46,13 @@ jobs: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: persist-credentials: false - - uses: anchore/scan-action@40a61b52209e9d50e87917c5b901783d546b12d0 # v7.2.1 + - uses: anchore/scan-action@62b74fb7bb810d2c45b1865f47a77655621862a5 # v7.2.3 id: scan with: path: "." fail-build: true severity-cutoff: critical - - uses: github/codeql-action/upload-sarif@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7 + - uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10 with: sarif_file: ${{ steps.scan.outputs.sarif }} @@ -73,7 +73,7 @@ jobs: - name: Run govulncheck run: | govulncheck -C . -format sarif ./... > results.sarif - - uses: github/codeql-action/upload-sarif@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7 + - uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10 with: sarif_file: results.sarif From 1ca8abc0a1f24778c64091b2a0cd96e00a6b03f2 Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Sun, 18 Jan 2026 17:37:33 -0500 Subject: [PATCH 2/8] chore: remove unnecessary testing concerns from env.New MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 💘 Generated with Crush Assisted-by: GLM-4.7 via Crush --- internal/env/env.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/internal/env/env.go b/internal/env/env.go index fa7546f8ebd28ed0c44528f7d9b8ae4b03db8b89..f4bf8ff5a7ace08496a5f56d7372db91212b33fe 100644 --- a/internal/env/env.go +++ b/internal/env/env.go @@ -2,7 +2,6 @@ package env import ( "os" - "testing" ) type Env interface { @@ -26,9 +25,6 @@ func (o *osEnv) Env() []string { } func New() Env { - if testing.Testing() { - return NewFromMap(nil) - } return &osEnv{} } From 2f845cc20e1b01310886a7dcbd440011e80cc8d4 Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Sun, 18 Jan 2026 17:41:40 -0500 Subject: [PATCH 3/8] chore: return empty slices instead of nil for safety MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 💘 Generated with Crush Assisted-by: GLM-4.7 via Crush --- internal/env/env.go | 9 +-------- internal/env/env_test.go | 6 ++++-- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/internal/env/env.go b/internal/env/env.go index f4bf8ff5a7ace08496a5f56d7372db91212b33fe..2fe19cc20bdd8771cff98da3dd24d7b25c3cba1e 100644 --- a/internal/env/env.go +++ b/internal/env/env.go @@ -17,11 +17,7 @@ func (o *osEnv) Get(key string) string { } func (o *osEnv) Env() []string { - env := os.Environ() - if len(env) == 0 { - return nil - } - return env + return os.Environ() } func New() Env { @@ -42,9 +38,6 @@ func (m *mapEnv) Get(key string) string { // Env implements Env. func (m *mapEnv) Env() []string { - if len(m.m) == 0 { - return nil - } env := make([]string, 0, len(m.m)) for k, v := range m.m { env = append(env, k+"="+v) diff --git a/internal/env/env_test.go b/internal/env/env_test.go index a86b8f4140a57d564797f260b24262472c9ad058..e8e19cf8b6356e19e4f61cb3bfb2eef7b93ad9fc 100644 --- a/internal/env/env_test.go +++ b/internal/env/env_test.go @@ -90,13 +90,15 @@ func TestMapEnv_Env(t *testing.T) { t.Run("empty map", func(t *testing.T) { env := NewFromMap(map[string]string{}) envVars := env.Env() - require.Nil(t, envVars) + require.NotNil(t, envVars) + require.Len(t, envVars, 0) }) t.Run("nil map", func(t *testing.T) { env := NewFromMap(nil) envVars := env.Env() - require.Nil(t, envVars) + require.NotNil(t, envVars) + require.Len(t, envVars, 0) }) } From 36354358f302018ba173bd3f2866580ed228098a Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Sun, 18 Jan 2026 18:11:05 -0500 Subject: [PATCH 4/8] chore: remove redundant zero value initialization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 💘 Generated with Crush Assisted-by: GLM-4.7 via Crush --- internal/pubsub/broker.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/pubsub/broker.go b/internal/pubsub/broker.go index ed14cbfed6c8fd44355501e16457e0dd92a494bc..d14877353819d4462f42d4e41997e92527843c98 100644 --- a/internal/pubsub/broker.go +++ b/internal/pubsub/broker.go @@ -23,7 +23,6 @@ func NewBrokerWithOptions[T any](channelBufferSize, maxEvents int) *Broker[T] { b := &Broker[T]{ subs: make(map[chan Event[T]]struct{}), done: make(chan struct{}), - subCount: 0, maxEvents: maxEvents, } return b From b7c128a33cfa79a8ae45b1865b453c7b9353a3c8 Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Sun, 18 Jan 2026 18:11:27 -0500 Subject: [PATCH 5/8] chore: simplify struct initialization to direct return MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 💘 Generated with Crush Assisted-by: GLM-4.7 via Crush --- internal/pubsub/broker.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/internal/pubsub/broker.go b/internal/pubsub/broker.go index d14877353819d4462f42d4e41997e92527843c98..2faf7f89b7c982950bfc69801a7901526e37eec4 100644 --- a/internal/pubsub/broker.go +++ b/internal/pubsub/broker.go @@ -20,12 +20,11 @@ func NewBroker[T any]() *Broker[T] { } func NewBrokerWithOptions[T any](channelBufferSize, maxEvents int) *Broker[T] { - b := &Broker[T]{ + return &Broker[T]{ subs: make(map[chan Event[T]]struct{}), done: make(chan struct{}), maxEvents: maxEvents, } - return b } func (b *Broker[T]) Shutdown() { From 4261dfbf156ae6c82e5e0d534eacd2651bd1f896 Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Sun, 18 Jan 2026 18:13:19 -0500 Subject: [PATCH 6/8] refactor: move domain-specific type out of generic pubsub package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 💘 Generated with Crush Assisted-by: GLM-4.7 via Crush --- internal/app/app.go | 9 ++++++++- internal/pubsub/events.go | 7 ------- internal/tui/tui.go | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/app/app.go b/internal/app/app.go index 0f98a8383124274d8aaae12b40146411ed969c8d..96750a453e63c79b7363fef5b3aa9b09632de940 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -40,6 +40,13 @@ import ( "github.com/charmbracelet/x/term" ) +// UpdateAvailableMsg is sent when a new version is available. +type UpdateAvailableMsg struct { + CurrentVersion string + LatestVersion string + IsDevelopment bool +} + type App struct { Sessions session.Service Messages message.Service @@ -452,7 +459,7 @@ func (app *App) checkForUpdates(ctx context.Context) { if err != nil || !info.Available() { return } - app.events <- pubsub.UpdateAvailableMsg{ + app.events <- UpdateAvailableMsg{ CurrentVersion: info.Current, LatestVersion: info.Latest, IsDevelopment: info.IsDevelopment(), diff --git a/internal/pubsub/events.go b/internal/pubsub/events.go index 016cc10c9f8a51039ce9eeda6210f5f59bdc1e6c..827158d52fd671aeda828c0383fce98850e27fc7 100644 --- a/internal/pubsub/events.go +++ b/internal/pubsub/events.go @@ -26,10 +26,3 @@ type ( Publish(EventType, T) } ) - -// UpdateAvailableMsg is sent when a new version is available. -type UpdateAvailableMsg struct { - CurrentVersion string - LatestVersion string - IsDevelopment bool -} diff --git a/internal/tui/tui.go b/internal/tui/tui.go index e91fae5592b8d51963e524d0662d868cbfed6869..519b0e6aca73fb276d4137e00830b29798a391c7 100644 --- a/internal/tui/tui.go +++ b/internal/tui/tui.go @@ -385,7 +385,7 @@ func (a *appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } return a, tea.Batch(cmds...) // Update Available - case pubsub.UpdateAvailableMsg: + case app.UpdateAvailableMsg: // Show update notification in status bar statusMsg := fmt.Sprintf("Crush update available: v%s → v%s.", msg.CurrentVersion, msg.LatestVersion) if msg.IsDevelopment { From 2fa1f4dd56d9edced17df1942973d925a4d6cbb8 Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Sun, 18 Jan 2026 18:41:06 -0500 Subject: [PATCH 7/8] fix: correct spelling from marshall to marshal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 💘 Generated with Crush Assisted-by: GLM-4.7 via Crush --- internal/message/message.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/message/message.go b/internal/message/message.go index a09d0acbf590e840541a7d5e057fb89513cc0618..04eb8252bbe9a68444eba81fc581c6b49231734b 100644 --- a/internal/message/message.go +++ b/internal/message/message.go @@ -63,7 +63,7 @@ func (s *service) Create(ctx context.Context, sessionID string, params CreateMes Reason: "stop", }) } - partsJSON, err := marshallParts(params.Parts) + partsJSON, err := marshalParts(params.Parts) if err != nil { return Message{}, err } @@ -110,7 +110,7 @@ func (s *service) DeleteSessionMessages(ctx context.Context, sessionID string) e } func (s *service) Update(ctx context.Context, message Message) error { - parts, err := marshallParts(message.Parts) + parts, err := marshalParts(message.Parts) if err != nil { return err } @@ -158,7 +158,7 @@ func (s *service) List(ctx context.Context, sessionID string) ([]Message, error) } func (s *service) fromDBItem(item db.Message) (Message, error) { - parts, err := unmarshallParts([]byte(item.Parts)) + parts, err := unmarshalParts([]byte(item.Parts)) if err != nil { return Message{}, err } @@ -192,7 +192,7 @@ type partWrapper struct { Data ContentPart `json:"data"` } -func marshallParts(parts []ContentPart) ([]byte, error) { +func marshalParts(parts []ContentPart) ([]byte, error) { wrappedParts := make([]partWrapper, len(parts)) for i, part := range parts { @@ -225,7 +225,7 @@ func marshallParts(parts []ContentPart) ([]byte, error) { return json.Marshal(wrappedParts) } -func unmarshallParts(data []byte) ([]ContentPart, error) { +func unmarshalParts(data []byte) ([]ContentPart, error) { temp := []json.RawMessage{} if err := json.Unmarshal(data, &temp); err != nil { From 4403170ac0af2eb076d23fa9ed4d85ee667cf98d Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Sun, 18 Jan 2026 18:44:11 -0500 Subject: [PATCH 8/8] fix: correct typo in log message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 💘 Generated with Crush Assisted-by: GLM-4.7 via Crush --- internal/lsp/client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/lsp/client.go b/internal/lsp/client.go index 79220cc1f315fec30a1bee2aa0dcd106bc311a02..df28a30bbcce9504fb8a4a0eaba98a820028e705 100644 --- a/internal/lsp/client.go +++ b/internal/lsp/client.go @@ -345,7 +345,7 @@ func (c *Client) CloseAllFiles(ctx context.Context) { slog.Debug("Closing file", "file", uri) } if err := c.client.NotifyDidCloseTextDocument(ctx, uri); err != nil { - slog.Warn("Error closing rile", "uri", uri, "error", err) + slog.Warn("Error closing file", "uri", uri, "error", err) continue } c.openFiles.Del(uri)