Skip to content

Commit 510a7f0

Browse files
committed
chore: update tests
1 parent 4519799 commit 510a7f0

File tree

6 files changed

+84
-87
lines changed

6 files changed

+84
-87
lines changed

lib/cli/cli_handler.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func convertStatus(status st.ConversationStatus) types.AgentStatus {
3939
}
4040
}
4141

42-
func NewCLIHandler(ctx context.Context, agentio *termexec.Process, agentType mf.AgentType) *CLIHandler {
42+
func NewCLIHandler(ctx context.Context, logger *slog.Logger, agentio *termexec.Process, agentType mf.AgentType) *CLIHandler {
4343
formatMessage := func(message string, userInput string) string {
4444
return mf.FormatAgentMessage(agentType, message, userInput)
4545
}
@@ -61,10 +61,9 @@ func NewCLIHandler(ctx context.Context, agentio *termexec.Process, agentType mf.
6161
conversation: conversation,
6262
agentio: agentio,
6363
agentType: agentType,
64+
logger: logger,
6465
}
6566

66-
handler.StartSnapshotLoop(ctx)
67-
6867
return handler
6968
}
7069

lib/cli/events.go

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package cli
33
import (
44
"strings"
55
"sync"
6-
"time"
76

87
mf "github.com/coder/agentapi/lib/cli/msgfmt"
98
st "github.com/coder/agentapi/lib/cli/screentracker"
@@ -18,21 +17,6 @@ const (
1817
EventTypeScreenUpdate EventType = "screen_update"
1918
)
2019

21-
type MessageUpdateBody struct {
22-
Id int `json:"id" doc:"Unique identifier for the message. This identifier also represents the order of the message in the conversation history."`
23-
Role types.ConversationRole `json:"role" doc:"Role of the message author"`
24-
Message string `json:"message" doc:"Message content. The message is formatted as it appears in the agent's terminal session, meaning that, by default, it consists of lines of text with 80 characters per line."`
25-
Time time.Time `json:"time" doc:"Timestamp of the message"`
26-
}
27-
28-
type StatusChangeBody struct {
29-
Status types.AgentStatus `json:"status" doc:"Agent status"`
30-
}
31-
32-
type ScreenUpdateBody struct {
33-
Screen string `json:"screen"`
34-
}
35-
3620
type Event struct {
3721
Type EventType
3822
Payload any
@@ -104,7 +88,7 @@ func (e *EventEmitter) UpdateMessagesAndEmitChanges(newMessages []types.Conversa
10488
newMsg = newMessages[i]
10589
}
10690
if oldMsg != newMsg {
107-
e.notifyChannels(EventTypeMessageUpdate, MessageUpdateBody{
91+
e.notifyChannels(EventTypeMessageUpdate, types.MessageUpdateBody{
10892
Id: newMessages[i].Id,
10993
Role: newMessages[i].Role,
11094
Message: newMessages[i].Message,
@@ -125,7 +109,7 @@ func (e *EventEmitter) UpdateStatusAndEmitChanges(newStatus st.ConversationStatu
125109
return
126110
}
127111

128-
e.notifyChannels(EventTypeStatusChange, StatusChangeBody{Status: newAgentStatus})
112+
e.notifyChannels(EventTypeStatusChange, types.StatusChangeBody{Status: newAgentStatus})
129113
e.status = newAgentStatus
130114
}
131115

@@ -137,7 +121,7 @@ func (e *EventEmitter) UpdateScreenAndEmitChanges(newScreen string) {
137121
return
138122
}
139123

140-
e.notifyChannels(EventTypeScreenUpdate, ScreenUpdateBody{Screen: strings.TrimRight(newScreen, mf.WhiteSpaceChars)})
124+
e.notifyChannels(EventTypeScreenUpdate, types.ScreenUpdateBody{Screen: strings.TrimRight(newScreen, mf.WhiteSpaceChars)})
141125
e.screen = newScreen
142126
}
143127

@@ -147,16 +131,16 @@ func (e *EventEmitter) currentStateAsEvents() []Event {
147131
for _, msg := range e.messages {
148132
events = append(events, Event{
149133
Type: EventTypeMessageUpdate,
150-
Payload: MessageUpdateBody{Id: msg.Id, Role: msg.Role, Message: msg.Message, Time: msg.Time},
134+
Payload: types.MessageUpdateBody{Id: msg.Id, Role: msg.Role, Message: msg.Message, Time: msg.Time},
151135
})
152136
}
153137
events = append(events, Event{
154138
Type: EventTypeStatusChange,
155-
Payload: StatusChangeBody{Status: e.status},
139+
Payload: types.StatusChangeBody{Status: e.status},
156140
})
157141
events = append(events, Event{
158142
Type: EventTypeScreenUpdate,
159-
Payload: ScreenUpdateBody{Screen: strings.TrimRight(e.screen, mf.WhiteSpaceChars)},
143+
Payload: types.ScreenUpdateBody{Screen: strings.TrimRight(e.screen, mf.WhiteSpaceChars)},
160144
})
161145
return events
162146
}

lib/cli/screentracker/conversation_test.go

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
"github.com/coder/agentapi/lib/cli/msgfmt"
1212
st "github.com/coder/agentapi/lib/cli/screentracker"
13+
"github.com/coder/agentapi/lib/types"
1314
"github.com/stretchr/testify/assert"
1415
)
1516

@@ -116,16 +117,16 @@ func TestConversation(t *testing.T) {
116117

117118
func TestMessages(t *testing.T) {
118119
now := time.Now()
119-
agentMsg := func(id int, msg string) st.ConversationMessage {
120-
return st.ConversationMessage{
120+
agentMsg := func(id int, msg string) types.ConversationMessage {
121+
return types.ConversationMessage{
121122
Id: id,
122123
Message: msg,
123124
Role: st.ConversationRoleAgent,
124125
Time: now,
125126
}
126127
}
127-
userMsg := func(id int, msg string) st.ConversationMessage {
128-
return st.ConversationMessage{
128+
userMsg := func(id int, msg string) types.ConversationMessage {
129+
return types.ConversationMessage{
129130
Id: id,
130131
Message: msg,
131132
Role: st.ConversationRoleUser,
@@ -152,13 +153,13 @@ func TestMessages(t *testing.T) {
152153
t.Run("messages are copied", func(t *testing.T) {
153154
c := newConversation()
154155
messages := c.Messages()
155-
assert.Equal(t, []st.ConversationMessage{
156+
assert.Equal(t, []types.ConversationMessage{
156157
agentMsg(0, ""),
157158
}, messages)
158159

159160
messages[0].Message = "modification"
160161

161-
assert.Equal(t, []st.ConversationMessage{
162+
assert.Equal(t, []types.ConversationMessage{
162163
agentMsg(0, ""),
163164
}, c.Messages())
164165
})
@@ -183,7 +184,7 @@ func TestMessages(t *testing.T) {
183184

184185
c.AddSnapshot("1")
185186
msgs := c.Messages()
186-
assert.Equal(t, []st.ConversationMessage{
187+
assert.Equal(t, []types.ConversationMessage{
187188
agentMsg(0, "1"),
188189
}, msgs)
189190
nowWrapper.Time = nowWrapper.Add(1 * time.Second)
@@ -198,27 +199,27 @@ func TestMessages(t *testing.T) {
198199
})
199200
// agent message is recorded when the first snapshot is added
200201
c.AddSnapshot("1")
201-
assert.Equal(t, []st.ConversationMessage{
202+
assert.Equal(t, []types.ConversationMessage{
202203
agentMsg(0, "1"),
203204
}, c.Messages())
204205

205206
// agent message is updated when the screen changes
206207
c.AddSnapshot("2")
207-
assert.Equal(t, []st.ConversationMessage{
208+
assert.Equal(t, []types.ConversationMessage{
208209
agentMsg(0, "2"),
209210
}, c.Messages())
210211

211212
// user message is recorded
212213
agent.screen = "2"
213214
assert.NoError(t, sendMsg(c, "3"))
214-
assert.Equal(t, []st.ConversationMessage{
215+
assert.Equal(t, []types.ConversationMessage{
215216
agentMsg(0, "2"),
216217
userMsg(1, "3"),
217218
}, c.Messages())
218219

219220
// agent message is added after a user message
220221
c.AddSnapshot("4")
221-
assert.Equal(t, []st.ConversationMessage{
222+
assert.Equal(t, []types.ConversationMessage{
222223
agentMsg(0, "2"),
223224
userMsg(1, "3"),
224225
agentMsg(2, "4"),
@@ -227,7 +228,7 @@ func TestMessages(t *testing.T) {
227228
// agent message is updated when the screen changes before a user message
228229
agent.screen = "5"
229230
assert.NoError(t, sendMsg(c, "6"))
230-
assert.Equal(t, []st.ConversationMessage{
231+
assert.Equal(t, []types.ConversationMessage{
231232
agentMsg(0, "2"),
232233
userMsg(1, "3"),
233234
agentMsg(2, "5"),
@@ -241,7 +242,7 @@ func TestMessages(t *testing.T) {
241242
assert.Equal(t, st.ConversationStatusStable, c.Status())
242243
agent.screen = "7"
243244
assert.NoError(t, sendMsg(c, "8"))
244-
assert.Equal(t, []st.ConversationMessage{
245+
assert.Equal(t, []types.ConversationMessage{
245246
agentMsg(0, "2"),
246247
userMsg(1, "3"),
247248
agentMsg(2, "5"),
@@ -268,7 +269,7 @@ func TestMessages(t *testing.T) {
268269
agent.screen = "1"
269270
assert.NoError(t, sendMsg(c, "2"))
270271
c.AddSnapshot("1\n3")
271-
assert.Equal(t, []st.ConversationMessage{
272+
assert.Equal(t, []types.ConversationMessage{
272273
agentMsg(0, "1"),
273274
userMsg(1, "2"),
274275
agentMsg(2, "3"),
@@ -277,7 +278,7 @@ func TestMessages(t *testing.T) {
277278
agent.screen = "1\n3x"
278279
assert.NoError(t, sendMsg(c, "4"))
279280
c.AddSnapshot("1\n3x\n5")
280-
assert.Equal(t, []st.ConversationMessage{
281+
assert.Equal(t, []types.ConversationMessage{
281282
agentMsg(0, "1"),
282283
userMsg(1, "2"),
283284
agentMsg(2, "3x"),
@@ -296,13 +297,13 @@ func TestMessages(t *testing.T) {
296297
})
297298
agent.screen = "1"
298299
assert.NoError(t, sendMsg(c, "2"))
299-
assert.Equal(t, []st.ConversationMessage{
300+
assert.Equal(t, []types.ConversationMessage{
300301
agentMsg(0, "1 "),
301302
userMsg(1, "2"),
302303
}, c.Messages())
303304
agent.screen = "x"
304305
c.AddSnapshot("x")
305-
assert.Equal(t, []st.ConversationMessage{
306+
assert.Equal(t, []types.ConversationMessage{
306307
agentMsg(0, "1 "),
307308
userMsg(1, "2"),
308309
agentMsg(2, "x 2"),
@@ -317,7 +318,7 @@ func TestMessages(t *testing.T) {
317318
return "formatted"
318319
}
319320
})
320-
assert.Equal(t, []st.ConversationMessage{
321+
assert.Equal(t, []types.ConversationMessage{
321322
{
322323
Id: 0,
323324
Message: "",

lib/httpapi/handler.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ type AgentHandler interface {
1313
CreateMessage(ctx context.Context, input *types.MessageRequest) (*types.MessageResponse, error)
1414
GetMessages(ctx context.Context, input *struct{}) (*types.MessagesResponse, error)
1515
SubscribeEvents(ctx context.Context, input *struct{}, send sse.Sender)
16+
1617
// SubscribeConversations Was Initially SubscribeScreen, tbd whether we want to expose this in SDK mode TODO 1
1718
SubscribeConversations(ctx context.Context, input *struct{}, send sse.Sender)
19+
StartSnapshotLoop(ctx context.Context)
1820
}

lib/httpapi/server.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,16 +201,18 @@ func NewServer(ctx context.Context, config ServerConfig) (*Server, error) {
201201

202202
// Get the appropriate Interaction Handler
203203
if config.InteractionType == types.CLIInteractionType {
204-
s.AgentHandler = cli.NewCLIHandler(ctx, config.Process, config.AgentType)
204+
s.AgentHandler = cli.NewCLIHandler(ctx, logger, config.Process, config.AgentType)
205205
} else if config.InteractionType == types.SDKInteractionType {
206206
// TODO add a SDKHandler for SDK
207207
} else {
208-
return nil, xerrors.Errorf("")
208+
return nil, xerrors.Errorf("%s", config.InteractionType)
209209
}
210210

211211
// Register API routes
212212
s.registerRoutes()
213213

214+
s.AgentHandler.StartSnapshotLoop(ctx)
215+
214216
return s, nil
215217
}
216218

0 commit comments

Comments
 (0)