Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions pkg/runtime/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -363,9 +363,9 @@ func (c *Client) runAgentWithAgentName(ctx context.Context, sessionID, agent, ag
case "stream_stopped":
eventChan <- StreamStopped(sessionID, event["agent_name"].(string))
case "authorization_required":
eventChan <- AuthorizationRequired(event["server_url"].(string), event["server_type"].(string), event["confirmation"].(string))
eventChan <- AuthorizationRequired(event["server_url"].(string), event["server_type"].(string), event["confirmation"].(string), event["agent_name"].(string))
case "session_compaction":
eventChan <- SessionCompaction(event["session_id"].(string), event["status"].(string))
eventChan <- SessionCompaction(event["session_id"].(string), event["status"].(string), event["agent_name"].(string))
case "token_usage":
usage := event["usage"].(map[string]any)
inputTokens, _ := usage["input_tokens"].(float64)
Expand All @@ -379,9 +379,9 @@ func (c *Client) runAgentWithAgentName(ctx context.Context, sessionID, agent, ag
maxIterations, _ := event["max_iterations"].(float64)
eventChan <- MaxIterationsReached(int(maxIterations))
case "session_title":
eventChan <- SessionTitle(event["session_id"].(string), event["title"].(string))
eventChan <- SessionTitle(event["session_id"].(string), event["title"].(string), event["agent_name"].(string))
case "session_summary":
eventChan <- SessionSummary(event["session_id"].(string), event["summary"].(string))
eventChan <- SessionSummary(event["session_id"].(string), event["summary"].(string), event["agent_name"].(string))
case "shell":
eventChan <- ShellOutput(event["output"].(string))
case "error":
Expand Down
19 changes: 15 additions & 4 deletions pkg/runtime/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -220,11 +220,14 @@ type SessionTitleEvent struct {
AgentContext
}

func SessionTitle(sessionID, title string) Event {
func SessionTitle(sessionID, title, agentName string) Event {
return &SessionTitleEvent{
Type: "session_title",
SessionID: sessionID,
Title: title,
AgentContext: AgentContext{
AgentName: agentName,
},
}
}
func (e *SessionTitleEvent) isEvent() {}
Expand All @@ -236,11 +239,14 @@ type SessionSummaryEvent struct {
AgentContext
}

func SessionSummary(sessionID, summary string) Event {
func SessionSummary(sessionID, summary, agentName string) Event {
return &SessionSummaryEvent{
Type: "session_summary",
SessionID: sessionID,
Summary: summary,
AgentContext: AgentContext{
AgentName: agentName,
},
}
}
func (e *SessionSummaryEvent) isEvent() {}
Expand All @@ -252,11 +258,14 @@ type SessionCompactionEvent struct {
AgentContext
}

func SessionCompaction(sessionID, status string) Event {
func SessionCompaction(sessionID, status, agentName string) Event {
return &SessionCompactionEvent{
Type: "session_compaction",
SessionID: sessionID,
Status: status,
AgentContext: AgentContext{
AgentName: agentName,
},
}
}
func (e *SessionCompactionEvent) isEvent() {}
Expand Down Expand Up @@ -286,14 +295,16 @@ type AuthorizationRequiredEvent struct {
ServerURL string `json:"server_url"`
ServerType string `json:"server_type"`
Confirmation string `json:"confirmation"` // only "pending" | "confirmed" | "denied"
AgentContext
}

func AuthorizationRequired(serverURL, serverType, confirmation string) Event {
func AuthorizationRequired(serverURL, serverType, confirmation, agentName string) Event {
return &AuthorizationRequiredEvent{
Type: "authorization_required",
ServerURL: serverURL,
ServerType: serverType,
Confirmation: confirmation,
AgentContext: AgentContext{AgentName: agentName},
}
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/runtime/remote_runtime.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ func (r *RemoteRuntime) Summarize(ctx context.Context, sess *session.Session, ev
// TODO: Implement summarization by either:
// 1. Adding a summarization endpoint to the remote API
// 2. Running a summarization agent through the remote client
events <- SessionSummary(sess.ID, "Summary generation not yet implemented for remote runtime")
events <- SessionSummary(sess.ID, "Summary generation not yet implemented for remote runtime", r.currentAgent)
}

// convertSessionMessages converts session messages to remote API message format
Expand Down
14 changes: 7 additions & 7 deletions pkg/runtime/runtime.go
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ func (r *runtime) handleOAuthAuthorizationFlow(ctx context.Context, sess *sessio
// Create OAuth manager if it doesn't exist
if r.oauthManager == nil {
emitAuthRequired := func(serverURL, serverType, status string) {
events <- AuthorizationRequired(serverURL, serverType, status)
events <- AuthorizationRequired(serverURL, serverType, status, r.currentAgent)
}
r.oauthManager = oauth.NewManager(emitAuthRequired)
defer func() {
Expand Down Expand Up @@ -317,10 +317,10 @@ func (r *runtime) RunStream(ctx context.Context, sess *session.Session) <-chan E

if m != nil && r.sessionCompaction {
if sess.InputTokens+sess.OutputTokens > int(float64(contextLimit)*0.9) {
events <- SessionCompaction(sess.ID, "start")
events <- SessionCompaction(sess.ID, "start", r.currentAgent)
r.Summarize(ctx, sess, events)
events <- TokenUsage(sess.InputTokens, sess.OutputTokens, sess.InputTokens+sess.OutputTokens, contextLimit, sess.Cost)
events <- SessionCompaction(sess.ID, "completed")
events <- SessionCompaction(sess.ID, "completed", r.currentAgent)
}
}

Expand Down Expand Up @@ -940,16 +940,16 @@ func (r *runtime) generateSessionTitle(ctx context.Context, sess *session.Sessio
}
sess.Title = title
slog.Debug("Generated session title", "session_id", sess.ID, "title", title)
events <- SessionTitle(sess.ID, title)
events <- SessionTitle(sess.ID, title, r.currentAgent)
}

// Summarize generates a summary for the session based on the conversation history
func (r *runtime) Summarize(ctx context.Context, sess *session.Session, events chan Event) {
slog.Debug("Generating summary for session", "session_id", sess.ID)

events <- SessionCompaction(sess.ID, "started")
events <- SessionCompaction(sess.ID, "started", r.currentAgent)
defer func() {
events <- SessionCompaction(sess.ID, "completed")
events <- SessionCompaction(sess.ID, "completed", r.currentAgent)
}()

// Create conversation history for summarization
Expand Down Expand Up @@ -1001,5 +1001,5 @@ func (r *runtime) Summarize(ctx context.Context, sess *session.Session, events c
// Add the summary to the session as a summary item
sess.Messages = append(sess.Messages, session.Item{Summary: summary})
slog.Debug("Generated session summary", "session_id", sess.ID, "summary_length", len(summary))
events <- SessionSummary(sess.ID, summary)
events <- SessionSummary(sess.ID, summary, r.currentAgent)
}
Loading