Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -939,12 +939,18 @@ func withActivityLogging(pool *db.Pool, agentID uuid.UUID, toolName string, next
|
||||
|
||||
correlationID := uuid.New().String()
|
||||
|
||||
entityID := resolveArgEntityID(ctx, pool, argsMap(req))
|
||||
var entityIDArg any
|
||||
if entityID != uuid.Nil {
|
||||
entityIDArg = entityID
|
||||
}
|
||||
|
||||
_, logErr := pool.Exec(ctx, `
|
||||
INSERT INTO agent_activity
|
||||
(agent_id, activity_type, tool_name, input_summary, output_summary,
|
||||
(agent_id, activity_type, tool_name, entity_id, input_summary, output_summary,
|
||||
duration_ms, success, correlation_id)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)`,
|
||||
agentID, "tool_call", toolName, inputSummary, outputSummary,
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)`,
|
||||
agentID, "tool_call", toolName, entityIDArg, inputSummary, outputSummary,
|
||||
duration, success, correlationID)
|
||||
if logErr != nil {
|
||||
slog.Warn("mcp: log agent_activity", "error", logErr)
|
||||
@@ -954,6 +960,37 @@ func withActivityLogging(pool *db.Pool, agentID uuid.UUID, toolName string, next
|
||||
}
|
||||
}
|
||||
|
||||
// entityArgKeys lists tool-argument keys, in priority order, that commonly
|
||||
// carry the target entity's slug or UUID. Tool input schemas aren't
|
||||
// consistent about naming this (target, entity_slug, slug, service_slug,
|
||||
// lxc_slug, entity_id all appear across server.go's tool registrations), so
|
||||
// this is a best-effort lookup used to tag agent_activity rows with the
|
||||
// entity a tool call acted on.
|
||||
var entityArgKeys = []string{
|
||||
"target", "entity_slug", "slug", "slug_or_id",
|
||||
"service_slug", "lxc_slug", "entity_id", "about",
|
||||
}
|
||||
|
||||
// resolveArgEntityID best-effort resolves the entity a tool call acted on
|
||||
// from its arguments, trying entityArgKeys in order. Returns uuid.Nil if no
|
||||
// key is present or none resolves to a known entity.
|
||||
func resolveArgEntityID(ctx context.Context, pool *db.Pool, args map[string]any) uuid.UUID {
|
||||
for _, key := range entityArgKeys {
|
||||
v, _ := args[key].(string)
|
||||
if v == "" {
|
||||
continue
|
||||
}
|
||||
if u, err := uuid.Parse(v); err == nil {
|
||||
return u
|
||||
}
|
||||
var id uuid.UUID
|
||||
if err := pool.QueryRow(ctx, "SELECT id FROM entities WHERE slug = $1", v).Scan(&id); err == nil {
|
||||
return id
|
||||
}
|
||||
}
|
||||
return uuid.Nil
|
||||
}
|
||||
|
||||
// ─── Helpers ──────────────────────────────────────────────────────────
|
||||
|
||||
func argsMap(req *mcp.CallToolRequest) map[string]any {
|
||||
|
||||
Reference in New Issue
Block a user