Add operation tracking fields to bridge client calls (#35514)

* 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) <noreply@anthropic.com>

* 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) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Mattermost Build <build@mattermost.com>
This commit is contained in:
Nick Misasi
2026-03-10 06:49:18 -07:00
committed by GitHub
co-authored by Claude Opus 4.6 Mattermost Build
parent 24f726fa37
commit e5f4b982e5
4 changed files with 26 additions and 1 deletions
+20
View File
@@ -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
+3
View File
@@ -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",
+1 -1
View File
@@ -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
+2
View File
@@ -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=