From 0e50090ab702afdf60989f9020b723fe2efa4c6b Mon Sep 17 00:00:00 2001 From: Trung Nguyen Date: Mon, 29 Sep 2025 22:36:12 +0200 Subject: [PATCH] Make agent name explicit for all events Signed-off-by: Trung Nguyen --- pkg/runtime/client.go | 8 ++++---- pkg/runtime/event.go | 19 +++++++++++++++---- pkg/runtime/remote_runtime.go | 2 +- pkg/runtime/runtime.go | 14 +++++++------- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/pkg/runtime/client.go b/pkg/runtime/client.go index 0426cc80b..f7d9aeb6c 100644 --- a/pkg/runtime/client.go +++ b/pkg/runtime/client.go @@ -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) @@ -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": diff --git a/pkg/runtime/event.go b/pkg/runtime/event.go index 615a005ab..3f970b99c 100644 --- a/pkg/runtime/event.go +++ b/pkg/runtime/event.go @@ -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() {} @@ -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() {} @@ -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() {} @@ -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}, } } diff --git a/pkg/runtime/remote_runtime.go b/pkg/runtime/remote_runtime.go index 90188305a..57973942d 100644 --- a/pkg/runtime/remote_runtime.go +++ b/pkg/runtime/remote_runtime.go @@ -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 diff --git a/pkg/runtime/runtime.go b/pkg/runtime/runtime.go index 05e23ee6a..b9e5cc614 100644 --- a/pkg/runtime/runtime.go +++ b/pkg/runtime/runtime.go @@ -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() { @@ -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) } } @@ -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 @@ -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) }