From e5f4b982e5539d0124ace62d227010ae63c425ac Mon Sep 17 00:00:00 2001 From: Nick Misasi Date: Tue, 10 Mar 2026 09:49:18 -0400 Subject: [PATCH] Add operation tracking fields to bridge client calls (#35514) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add operation tracking fields to bridge client CompletionRequest calls Populate UserID, Operation, and OperationSubType on CompletionRequest for recaps (SummarizePosts) and message rewrite (RewriteMessage) so token usage logs show correct values instead of defaults. Also bumps mattermost-plugin-ai v1.8.1 → v1.12.0 which adds the Operation/OperationSubType fields to the bridgeclient struct. Co-Authored-By: Claude Opus 4.6 (1M context) * Address PR feedback: normalize rewrite action and use session-derived userID - post.go: Add normalizeRewriteAction() that validates action against a whitelist of known RewriteAction values, mapping unknown values to "unknown" before assigning to OperationSubType. - summarization.go: Use sessionUserID (derived from rctx.Session().UserId) instead of the userID parameter for tracking, ensuring operation tracking always uses the authenticated session user. Co-Authored-By: Claude Opus 4.6 (1M context) --------- Co-authored-by: Claude Opus 4.6 (1M context) Co-authored-by: Mattermost Build --- server/channels/app/post.go | 20 ++++++++++++++++++++ server/channels/app/summarization.go | 3 +++ server/go.mod | 2 +- server/go.sum | 2 ++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/server/channels/app/post.go b/server/channels/app/post.go index 8463d6febfa..2875518662c 100644 --- a/server/channels/app/post.go +++ b/server/channels/app/post.go @@ -3232,6 +3232,9 @@ func (a *App) RewriteMessage( {Role: "system", Message: systemPrompt}, {Role: "user", Message: userPrompt}, }, + UserID: rctx.Session().UserId, + Operation: "message_rewrite", + OperationSubType: normalizeRewriteAction(action), } completion, err := client.AgentCompletion(agentID, completionRequest) @@ -3347,6 +3350,23 @@ func (a *App) buildThreadContextForRewrite(rctx request.CTX, rootID string) (str return contextBuilder.String(), nil } +// normalizeRewriteAction maps a RewriteAction to a known subtype string for +// operation tracking. Unknown actions are mapped to "unknown". +func normalizeRewriteAction(action model.RewriteAction) string { + switch action { + case model.RewriteActionCustom, + model.RewriteActionShorten, + model.RewriteActionElaborate, + model.RewriteActionImproveWriting, + model.RewriteActionFixSpelling, + model.RewriteActionSimplify, + model.RewriteActionSummarize: + return string(action) + default: + return "unknown" + } +} + // getRewritePromptForAction returns the appropriate prompt and system prompt for the given rewrite action func getRewritePromptForAction(action model.RewriteAction, message string, customPrompt string, threadContext string) string { var actionPrompt string diff --git a/server/channels/app/summarization.go b/server/channels/app/summarization.go index b0d1936d8f7..178e4cbb789 100644 --- a/server/channels/app/summarization.go +++ b/server/channels/app/summarization.go @@ -86,6 +86,9 @@ Your response must be compacted valid JSON only, with no additional text, format {Role: "user", Message: userPrompt}, }, JSONOutputFormat: summarizePostsJSONSchema, + UserID: sessionUserID, + Operation: "recaps", + OperationSubType: "summarize_channel", } rctx.Logger().Debug("Calling AI agent for post summarization", diff --git a/server/go.mod b/server/go.mod index 86fc2cc7008..927032204e7 100644 --- a/server/go.mod +++ b/server/go.mod @@ -43,7 +43,7 @@ require ( github.com/mattermost/gosaml2 v0.10.0 github.com/mattermost/ldap v0.0.0-20231116144001-0f480c025956 github.com/mattermost/logr/v2 v2.0.22 - github.com/mattermost/mattermost-plugin-ai v1.8.1 + github.com/mattermost/mattermost-plugin-ai v1.12.0 github.com/mattermost/mattermost/server/public v0.1.22-0.20251105210629-8bf4a00724e2 github.com/mattermost/morph v1.1.0 github.com/mattermost/rsc v0.0.0-20160330161541-bbaefb05eaa0 diff --git a/server/go.sum b/server/go.sum index a05c34ad1a5..c65c88fb3b9 100644 --- a/server/go.sum +++ b/server/go.sum @@ -409,6 +409,8 @@ github.com/mattermost/logr/v2 v2.0.22 h1:npFkXlkAWR9J8payh8ftPcCZvLbHSI125mAM5/r github.com/mattermost/logr/v2 v2.0.22/go.mod h1:0sUKpO+XNMZApeumaid7PYaUZPBIydfuWZ0dqixXo+s= github.com/mattermost/mattermost-plugin-ai v1.8.1 h1:qymxDayy3vJPhm59XA8q0oLR8uobPgx0SOB7IMG9ZMM= github.com/mattermost/mattermost-plugin-ai v1.8.1/go.mod h1:Uco4K7ypsrZWcD256ezvgZDqolJfHYiExN2lYiHmVDo= +github.com/mattermost/mattermost-plugin-ai v1.12.0 h1:cwRE2jjlqN5W42O9Xp0ncyHk7HL/ayMeypuINPX0WJ0= +github.com/mattermost/mattermost-plugin-ai v1.12.0/go.mod h1:L/I/IpdWNGbxRfUduCstCYbhyX59OEftxcpDHtCT4EI= github.com/mattermost/mattermost/server/public v0.1.22-0.20251105210629-8bf4a00724e2 h1:RJtCnj9nF/wb0Fb+O0qAPgUoWP5CTTDnHzHD5ciGlJ8= github.com/mattermost/mattermost/server/public v0.1.22-0.20251105210629-8bf4a00724e2/go.mod h1:X0RG3lk0XK0SFSH67JS/xporlz3TxItHEPlFIrsQIa8= github.com/mattermost/morph v1.1.0 h1:Q9vrJbeM3s2jfweGheq12EFIzdNp9a/6IovcbvOQ6Cw=