on main help sign in
Merge remote-tracking branch 'origin/main' into ui
ad4c848Kujtim Hoxha
.github/cla-signatures.json+8
@@ -951,6 +951,14 @@
951 "created_at": "2025-12-11T23:09:21Z",
951 "created_at": "2025-12-11T23:09:21Z",
952 "repoId": 987670088,
952 "repoId": 987670088,
953 "pullRequestNo": 1611
953 "pullRequestNo": 1611
954+ },
955+ {
956+ "name": "strawberry-code",
957+ "id": 18684103,
958+ "comment_id": 3650628850,
959+ "created_at": "2025-12-14T09:41:12Z",
960+ "repoId": 987670088,
961+ "pullRequestNo": 1628
954 }
962 }
955 ]
963 ]
956}
964}
go.mod+4−4
@@ -4,9 +4,11 @@ go 1.25.5
4
4
5require (
5require (
6 charm.land/bubbles/v2 v2.0.0-rc.1
6 charm.land/bubbles/v2 v2.0.0-rc.1
7− charm.land/bubbletea/v2 v2.0.0-rc.2.0.20251212022530-7adbf082fd25
7+ charm.land/bubbletea/v2 v2.0.0-rc.2.0.20251212194116-6348bd4b7475
8 charm.land/fantasy v0.5.2
8 charm.land/fantasy v0.5.2
9+ charm.land/glamour/v2 v2.0.0-20251110203732-69649f93d3b1
9 charm.land/lipgloss/v2 v2.0.0-beta.3.0.20251205162909-7869489d8971
10 charm.land/lipgloss/v2 v2.0.0-beta.3.0.20251205162909-7869489d8971
11+ charm.land/log/v2 v2.0.0-20251110204020-529bb77f35da
10 charm.land/x/vcr v0.1.1
12 charm.land/x/vcr v0.1.1
11 github.com/JohannesKaufmann/html-to-markdown v1.6.0
13 github.com/JohannesKaufmann/html-to-markdown v1.6.0
12 github.com/MakeNowJust/heredoc v1.0.0
14 github.com/MakeNowJust/heredoc v1.0.0
@@ -19,9 +21,7 @@ require (
19 github.com/charmbracelet/catwalk v0.10.1
21 github.com/charmbracelet/catwalk v0.10.1
20 github.com/charmbracelet/colorprofile v0.4.1
22 github.com/charmbracelet/colorprofile v0.4.1
21 github.com/charmbracelet/fang v0.4.4
23 github.com/charmbracelet/fang v0.4.4
22− github.com/charmbracelet/glamour/v2 v2.0.0-20251106195642-800eb8175930
24+ github.com/charmbracelet/ultraviolet v0.0.0-20251212194010-b927aa605560
23− github.com/charmbracelet/log/v2 v2.0.0-20251106192421-eb64aaa963a0
24− github.com/charmbracelet/ultraviolet v0.0.0-20251211195649-3a51f4048cae
25 github.com/charmbracelet/x/ansi v0.11.3
25 github.com/charmbracelet/x/ansi v0.11.3
26 github.com/charmbracelet/x/exp/charmtone v0.0.0-20250708181618-a60a724ba6c3
26 github.com/charmbracelet/x/exp/charmtone v0.0.0-20250708181618-a60a724ba6c3
27 github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f
27 github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f
go.sum+8−8
@@ -1,11 +1,15 @@
1charm.land/bubbles/v2 v2.0.0-rc.1 h1:EiIFVAc3Zi/yY86td+79mPhHR7AqZ1OxF+6ztpOCRaM=
1charm.land/bubbles/v2 v2.0.0-rc.1 h1:EiIFVAc3Zi/yY86td+79mPhHR7AqZ1OxF+6ztpOCRaM=
2charm.land/bubbles/v2 v2.0.0-rc.1/go.mod h1:5AbN6cEd/47gkEf8TgiQ2O3RZ5QxMS14l9W+7F9fPC4=
2charm.land/bubbles/v2 v2.0.0-rc.1/go.mod h1:5AbN6cEd/47gkEf8TgiQ2O3RZ5QxMS14l9W+7F9fPC4=
3−charm.land/bubbletea/v2 v2.0.0-rc.2.0.20251212022530-7adbf082fd25 h1:qmVU/kDsds1L+caeJ2LghFyFOn/1iEx9RRbQ6YQkxb4=
3+charm.land/bubbletea/v2 v2.0.0-rc.2.0.20251212194116-6348bd4b7475 h1:73ohAau8fvq3d54i1bQxVKhBf/vmPYDtV3JZgb+SIQk=
4−charm.land/bubbletea/v2 v2.0.0-rc.2.0.20251212022530-7adbf082fd25/go.mod h1:C1MMjbspGDebEITrYpuJd6gB42cSTqWgR4/vQPjD224=
4+charm.land/bubbletea/v2 v2.0.0-rc.2.0.20251212194116-6348bd4b7475/go.mod h1:pDM18flq3Z4njKZPA3zCvyVSSIJbMcoqlE82BdGUtL8=
5charm.land/fantasy v0.5.2 h1:4zlNsIcsyF3Jr+1onEuhHqZRzuH1LlxBle/gInS00QY=
5charm.land/fantasy v0.5.2 h1:4zlNsIcsyF3Jr+1onEuhHqZRzuH1LlxBle/gInS00QY=
6charm.land/fantasy v0.5.2/go.mod h1:SPOsnIlkBKnhw2Wnasv+wZ82EmCMIGesx0je3tgR6+M=
6charm.land/fantasy v0.5.2/go.mod h1:SPOsnIlkBKnhw2Wnasv+wZ82EmCMIGesx0je3tgR6+M=
7+charm.land/glamour/v2 v2.0.0-20251110203732-69649f93d3b1 h1:9q4+yyU7105T3OrOx0csMyKnw89yMSijJ+rVld/Z2ek=
8+charm.land/glamour/v2 v2.0.0-20251110203732-69649f93d3b1/go.mod h1:J3kVhY6oHXZq5f+8vC3hmDO95fEvbqj3z7xDwxrfzU8=
7charm.land/lipgloss/v2 v2.0.0-beta.3.0.20251205162909-7869489d8971 h1:xZFcNsJMiIDbFtWRyDmkKNk1sjojfaom4Zoe0cyH/8c=
9charm.land/lipgloss/v2 v2.0.0-beta.3.0.20251205162909-7869489d8971 h1:xZFcNsJMiIDbFtWRyDmkKNk1sjojfaom4Zoe0cyH/8c=
8charm.land/lipgloss/v2 v2.0.0-beta.3.0.20251205162909-7869489d8971/go.mod h1:i61Y3FmdbcBNSKa+pKB3DaE4uVQmBLMs/xlvRyHcXAE=
10charm.land/lipgloss/v2 v2.0.0-beta.3.0.20251205162909-7869489d8971/go.mod h1:i61Y3FmdbcBNSKa+pKB3DaE4uVQmBLMs/xlvRyHcXAE=
11+charm.land/log/v2 v2.0.0-20251110204020-529bb77f35da h1:vZa/Ow0uLclpfaDY0ubjzE+B0eLQqi2zanmpeALanow=
12+charm.land/log/v2 v2.0.0-20251110204020-529bb77f35da/go.mod h1:Tj12StbPc4GwksDF6XwhC9wdXouinIVxRGKKmmmzdSU=
9charm.land/x/vcr v0.1.1 h1:PXCFMUG0rPtyk35rhfzYCJEduOzWXCIbrXTFq4OF/9Q=
13charm.land/x/vcr v0.1.1 h1:PXCFMUG0rPtyk35rhfzYCJEduOzWXCIbrXTFq4OF/9Q=
10charm.land/x/vcr v0.1.1/go.mod h1:eByq2gqzWvcct/8XE2XO5KznoWEBiXH56+y2gphbltM=
14charm.land/x/vcr v0.1.1/go.mod h1:eByq2gqzWvcct/8XE2XO5KznoWEBiXH56+y2gphbltM=
11cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE=
15cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE=
@@ -94,12 +98,8 @@ github.com/charmbracelet/colorprofile v0.4.1 h1:a1lO03qTrSIRaK8c3JRxJDZOvhvIeSco
94github.com/charmbracelet/colorprofile v0.4.1/go.mod h1:U1d9Dljmdf9DLegaJ0nGZNJvoXAhayhmidOdcBwAvKk=
98github.com/charmbracelet/colorprofile v0.4.1/go.mod h1:U1d9Dljmdf9DLegaJ0nGZNJvoXAhayhmidOdcBwAvKk=
95github.com/charmbracelet/fang v0.4.4 h1:G4qKxF6or/eTPgmAolwPuRNyuci3hTUGGX1rj1YkHJY=
99github.com/charmbracelet/fang v0.4.4 h1:G4qKxF6or/eTPgmAolwPuRNyuci3hTUGGX1rj1YkHJY=
96github.com/charmbracelet/fang v0.4.4/go.mod h1:P5/DNb9DddQ0Z0dbc0P3ol4/ix5Po7Ofr2KMBfAqoCo=
100github.com/charmbracelet/fang v0.4.4/go.mod h1:P5/DNb9DddQ0Z0dbc0P3ol4/ix5Po7Ofr2KMBfAqoCo=
97−github.com/charmbracelet/glamour/v2 v2.0.0-20251106195642-800eb8175930 h1:+47Z2jVAWPSLGjPRbfZizW3OpcAYsu7EUk2DR+66FyM=
101+github.com/charmbracelet/ultraviolet v0.0.0-20251212194010-b927aa605560 h1:j3PW2hypGoPKBy3ooKzW0TFxaxhyHK3NbkLLn4KeRFc=
98−github.com/charmbracelet/glamour/v2 v2.0.0-20251106195642-800eb8175930/go.mod h1:izs11tnkYaT3DTEH2E0V/lCb18VGZ7k9HLYEGuvgXGA=
99−github.com/charmbracelet/log/v2 v2.0.0-20251106192421-eb64aaa963a0 h1:lxHzxsHd4P7o7+5D5OcEItYkQ1xY3ovNg8Dc5ftd3rI=
100−github.com/charmbracelet/log/v2 v2.0.0-20251106192421-eb64aaa963a0/go.mod h1:Q7oMtlboDPnnrYiJDXNwdWmJblOmuOnycPKczlVju6I=
101−github.com/charmbracelet/ultraviolet v0.0.0-20251211195649-3a51f4048cae h1:njFQJDtNiWgKXHmYruigCG+9q5Ptq6rWW400UvG/Tpc=
102−github.com/charmbracelet/ultraviolet v0.0.0-20251211195649-3a51f4048cae/go.mod h1:VWATWLRwYP06VYCEur7FsNR2B1xAo7Y+xl1PTbd1ePc=
102+github.com/charmbracelet/ultraviolet v0.0.0-20251212194010-b927aa605560/go.mod h1:VWATWLRwYP06VYCEur7FsNR2B1xAo7Y+xl1PTbd1ePc=
103github.com/charmbracelet/x/ansi v0.11.3 h1:6DcVaqWI82BBVM/atTyq6yBoRLZFBsnoDoX9GCu2YOI=
103github.com/charmbracelet/x/ansi v0.11.3 h1:6DcVaqWI82BBVM/atTyq6yBoRLZFBsnoDoX9GCu2YOI=
104github.com/charmbracelet/x/ansi v0.11.3/go.mod h1:yI7Zslym9tCJcedxz5+WBq+eUGMJT0bM06Fqy1/Y4dI=
104github.com/charmbracelet/x/ansi v0.11.3/go.mod h1:yI7Zslym9tCJcedxz5+WBq+eUGMJT0bM06Fqy1/Y4dI=
105github.com/charmbracelet/x/etag v0.2.0 h1:Euj1VkheoHfTYA9y+TCwkeXF/hN8Fb9l4LqZl79pt04=
105github.com/charmbracelet/x/etag v0.2.0 h1:Euj1VkheoHfTYA9y+TCwkeXF/hN8Fb9l4LqZl79pt04=
internal/cmd/logs.go+1−1
@@ -10,9 +10,9 @@ import (
10 "slices"
10 "slices"
11 "time"
11 "time"
12
12
13+ "charm.land/log/v2"
13 "github.com/charmbracelet/colorprofile"
14 "github.com/charmbracelet/colorprofile"
14 "github.com/charmbracelet/crush/internal/config"
15 "github.com/charmbracelet/crush/internal/config"
15− "github.com/charmbracelet/log/v2"
16 "github.com/charmbracelet/x/term"
16 "github.com/charmbracelet/x/term"
17 "github.com/nxadm/tail"
17 "github.com/nxadm/tail"
18 "github.com/spf13/cobra"
18 "github.com/spf13/cobra"
internal/history/file.go+1−1
@@ -26,7 +26,7 @@ type File struct {
26}
26}
27
27
28type Service interface {
28type Service interface {
29− pubsub.Suscriber[File]
29+ pubsub.Subscriber[File]
30 Create(ctx context.Context, sessionID, path, content string) (File, error)
30 Create(ctx context.Context, sessionID, path, content string) (File, error)
31 CreateVersion(ctx context.Context, sessionID, path, content string) (File, error)
31 CreateVersion(ctx context.Context, sessionID, path, content string) (File, error)
32 Get(ctx context.Context, id string) (File, error)
32 Get(ctx context.Context, id string) (File, error)
internal/message/message.go+1−1
@@ -21,7 +21,7 @@ type CreateMessageParams struct {
21}
21}
22
22
23type Service interface {
23type Service interface {
24− pubsub.Suscriber[Message]
24+ pubsub.Subscriber[Message]
25 Create(ctx context.Context, sessionID string, params CreateMessageParams) (Message, error)
25 Create(ctx context.Context, sessionID string, params CreateMessageParams) (Message, error)
26 Update(ctx context.Context, message Message) error
26 Update(ctx context.Context, message Message) error
27 Get(ctx context.Context, id string) (Message, error)
27 Get(ctx context.Context, id string) (Message, error)
internal/permission/permission.go+1−1
@@ -43,7 +43,7 @@ type PermissionRequest struct {
43}
43}
44
44
45type Service interface {
45type Service interface {
46− pubsub.Suscriber[PermissionRequest]
46+ pubsub.Subscriber[PermissionRequest]
47 GrantPersistent(permission PermissionRequest)
47 GrantPersistent(permission PermissionRequest)
48 Grant(permission PermissionRequest)
48 Grant(permission PermissionRequest)
49 Deny(permission PermissionRequest)
49 Deny(permission PermissionRequest)
internal/pubsub/events.go+1−1
@@ -8,7 +8,7 @@ const (
8 DeletedEvent EventType = "deleted"
8 DeletedEvent EventType = "deleted"
9)
9)
10
10
11−type Suscriber[T any] interface {
11+type Subscriber[T any] interface {
12 Subscribe(context.Context) <-chan Event[T]
12 Subscribe(context.Context) <-chan Event[T]
13}
13}
14
14
internal/session/session.go+1−1
@@ -43,7 +43,7 @@ type Session struct {
43}
43}
44
44
45type Service interface {
45type Service interface {
46− pubsub.Suscriber[Session]
46+ pubsub.Subscriber[Session]
47 Create(ctx context.Context, title string) (Session, error)
47 Create(ctx context.Context, title string) (Session, error)
48 CreateTitleSession(ctx context.Context, parentSessionID string) (Session, error)
48 CreateTitleSession(ctx context.Context, parentSessionID string) (Session, error)
49 CreateTaskSession(ctx context.Context, toolCallID, parentSessionID, title string) (Session, error)
49 CreateTaskSession(ctx context.Context, toolCallID, parentSessionID, title string) (Session, error)
internal/tui/styles/chroma.go+1−1
@@ -1,8 +1,8 @@
1package styles
1package styles
2
2
3import (
3import (
4+ "charm.land/glamour/v2/ansi"
4 "github.com/alecthomas/chroma/v2"
5 "github.com/alecthomas/chroma/v2"
5− "github.com/charmbracelet/glamour/v2/ansi"
6)
6)
7
7
8func chromaStyle(style ansi.StylePrimitive) string {
8func chromaStyle(style ansi.StylePrimitive) string {
internal/tui/styles/markdown.go+2−2
@@ -4,8 +4,8 @@ import (
4 "fmt"
4 "fmt"
5 "image/color"
5 "image/color"
6
6
7− "github.com/charmbracelet/glamour/v2"
7+ "charm.land/glamour/v2"
8− "github.com/charmbracelet/glamour/v2/ansi"
8+ "charm.land/glamour/v2/ansi"
9)
9)
10
10
11// lipglossColorToHex converts a color.Color to hex string
11// lipglossColorToHex converts a color.Color to hex string
internal/tui/styles/theme.go+1−1
@@ -10,9 +10,9 @@ import (
10 "charm.land/bubbles/v2/textarea"
10 "charm.land/bubbles/v2/textarea"
11 "charm.land/bubbles/v2/textinput"
11 "charm.land/bubbles/v2/textinput"
12 tea "charm.land/bubbletea/v2"
12 tea "charm.land/bubbletea/v2"
13+ "charm.land/glamour/v2/ansi"
13 "charm.land/lipgloss/v2"
14 "charm.land/lipgloss/v2"
14 "github.com/charmbracelet/crush/internal/tui/exp/diffview"
15 "github.com/charmbracelet/crush/internal/tui/exp/diffview"
15− "github.com/charmbracelet/glamour/v2/ansi"
16 "github.com/charmbracelet/x/exp/charmtone"
16 "github.com/charmbracelet/x/exp/charmtone"
17 "github.com/lucasb-eyer/go-colorful"
17 "github.com/lucasb-eyer/go-colorful"
18 "github.com/rivo/uniseg"
18 "github.com/rivo/uniseg"