on main help sign in
fix(ui): restore pills to-do in client/server mode
0bbc8a8Christian Rocha
internal/proto/proto.go+1−1
@@ -56,7 +56,7 @@ type AgentSession struct {
56
56
57// IsZero checks if the AgentSession is zero-valued.
57// IsZero checks if the AgentSession is zero-valued.
58func (a AgentSession) IsZero() bool {
58func (a AgentSession) IsZero() bool {
59− return a == AgentSession{}
59+ return a.ID == "" && !a.IsBusy
60}
60}
61
61
62// PermissionAction represents an action taken on a permission request.
62// PermissionAction represents an action taken on a permission request.
internal/proto/session.go+8
@@ -10,6 +10,14 @@ type Session struct {
10 CompletionTokens int64 `json:"completion_tokens"`
10 CompletionTokens int64 `json:"completion_tokens"`
11 SummaryMessageID string `json:"summary_message_id"`
11 SummaryMessageID string `json:"summary_message_id"`
12 Cost float64 `json:"cost"`
12 Cost float64 `json:"cost"`
13+ Todos []Todo `json:"todos,omitempty"`
13 CreatedAt int64 `json:"created_at"`
14 CreatedAt int64 `json:"created_at"`
14 UpdatedAt int64 `json:"updated_at"`
15 UpdatedAt int64 `json:"updated_at"`
15}
16}
17+
18+// Todo represents a single todo entry on a session in the proto layer.
19+type Todo struct {
20+ Content string `json:"content"`
21+ Status string `json:"status"`
22+ ActiveForm string `json:"active_form"`
23+}
internal/server/events.go+16
@@ -135,11 +135,27 @@ func sessionToProto(s session.Session) proto.Session {
135 PromptTokens: s.PromptTokens,
135 PromptTokens: s.PromptTokens,
136 CompletionTokens: s.CompletionTokens,
136 CompletionTokens: s.CompletionTokens,
137 Cost: s.Cost,
137 Cost: s.Cost,
138+ Todos: todosToProto(s.Todos),
138 CreatedAt: s.CreatedAt,
139 CreatedAt: s.CreatedAt,
139 UpdatedAt: s.UpdatedAt,
140 UpdatedAt: s.UpdatedAt,
140 }
141 }
141}
142}
142
143
144+func todosToProto(todos []session.Todo) []proto.Todo {
145+ if len(todos) == 0 {
146+ return nil
147+ }
148+ out := make([]proto.Todo, len(todos))
149+ for i, t := range todos {
150+ out[i] = proto.Todo{
151+ Content: t.Content,
152+ Status: string(t.Status),
153+ ActiveForm: t.ActiveForm,
154+ }
155+ }
156+ return out
157+}
158+
143func fileToProto(f history.File) proto.File {
159func fileToProto(f history.File) proto.File {
144 return proto.File{
160 return proto.File{
145 ID: f.ID,
161 ID: f.ID,
internal/workspace/client_workspace.go+32
@@ -671,11 +671,27 @@ func protoToSession(s proto.Session) session.Session {
671 PromptTokens: s.PromptTokens,
671 PromptTokens: s.PromptTokens,
672 CompletionTokens: s.CompletionTokens,
672 CompletionTokens: s.CompletionTokens,
673 Cost: s.Cost,
673 Cost: s.Cost,
674+ Todos: protoToTodos(s.Todos),
674 CreatedAt: s.CreatedAt,
675 CreatedAt: s.CreatedAt,
675 UpdatedAt: s.UpdatedAt,
676 UpdatedAt: s.UpdatedAt,
676 }
677 }
677}
678}
678
679
680+func protoToTodos(todos []proto.Todo) []session.Todo {
681+ if len(todos) == 0 {
682+ return nil
683+ }
684+ out := make([]session.Todo, len(todos))
685+ for i, t := range todos {
686+ out[i] = session.Todo{
687+ Content: t.Content,
688+ Status: session.TodoStatus(t.Status),
689+ ActiveForm: t.ActiveForm,
690+ }
691+ }
692+ return out
693+}
694+
679func protoToFile(f proto.File) history.File {
695func protoToFile(f proto.File) history.File {
680 return history.File{
696 return history.File{
681 ID: f.ID,
697 ID: f.ID,
@@ -770,7 +786,23 @@ func sessionToProto(s session.Session) proto.Session {
770 PromptTokens: s.PromptTokens,
786 PromptTokens: s.PromptTokens,
771 CompletionTokens: s.CompletionTokens,
787 CompletionTokens: s.CompletionTokens,
772 Cost: s.Cost,
788 Cost: s.Cost,
789+ Todos: todosToProto(s.Todos),
773 CreatedAt: s.CreatedAt,
790 CreatedAt: s.CreatedAt,
774 UpdatedAt: s.UpdatedAt,
791 UpdatedAt: s.UpdatedAt,
775 }
792 }
776}
793}
794+
795+func todosToProto(todos []session.Todo) []proto.Todo {
796+ if len(todos) == 0 {
797+ return nil
798+ }
799+ out := make([]proto.Todo, len(todos))
800+ for i, t := range todos {
801+ out[i] = proto.Todo{
802+ Content: t.Content,
803+ Status: string(t.Status),
804+ ActiveForm: t.ActiveForm,
805+ }
806+ }
807+ return out
808+}