When a user @mentions an agent in any issue's comment, the system now enqueues a task for that agent. The agent reads the issue context and replies to the triggering comment thread. Changes: - Add shared util.ParseMentions for mention parsing (used by both comment handler and notification listeners) - Add EnqueueTaskForMention to TaskService for explicit agent targeting - Add on_mention trigger type support in agent trigger config - Add HasPendingTaskForIssueAndAgent SQL query for per-agent dedup - Add enqueueMentionedAgentTasks in CreateComment handler Safety: prevents self-trigger (agent mentioning itself), dedup with assignee on_comment trigger, terminal issue status check, and per-agent pending task dedup.
28 lines
761 B
Go
28 lines
761 B
Go
package util
|
|
|
|
import "regexp"
|
|
|
|
// Mention represents a parsed @mention from markdown content.
|
|
type Mention struct {
|
|
Type string // "member" or "agent"
|
|
ID string // user_id or agent_id
|
|
}
|
|
|
|
// MentionRe matches [@Label](mention://type/id) in markdown.
|
|
var MentionRe = regexp.MustCompile(`\[@[^\]]*\]\(mention://(member|agent)/([0-9a-fA-F-]+)\)`)
|
|
|
|
// ParseMentions extracts deduplicated mentions from markdown content.
|
|
func ParseMentions(content string) []Mention {
|
|
matches := MentionRe.FindAllStringSubmatch(content, -1)
|
|
seen := make(map[string]bool)
|
|
var result []Mention
|
|
for _, m := range matches {
|
|
key := m[1] + ":" + m[2]
|
|
if seen[key] {
|
|
continue
|
|
}
|
|
seen[key] = true
|
|
result = append(result, Mention{Type: m[1], ID: m[2]})
|
|
}
|
|
return result
|
|
}
|