feat(mentions): support @mentioning issues + server-side auto-expansion (#242)

* feat(mentions): support @mentioning issues in comments

- Extend MentionItem type to include "issue" alongside "member"/"agent"
- Add issue search (by identifier and title) to mention suggestion dropdown
- Render issue mentions with CircleDot icon in autocomplete popup
- Issue mentions serialize as [MUL-117 Title](mention://issue/id) (no @ prefix)
- Markdown renderer shows issue mentions as clickable links to /issues/:id
- Backend mentionRe regex updated to match issue mention type

* feat(mentions): auto-expand issue identifiers and add mention format to agent instructions

1. Path A — CLAUDE.md template (runtime_config.go):
   Add a "## Mentions" section teaching agents the mention serialization
   format for issues, members, and agents. All agents automatically
   receive this via the auto-generated CLAUDE.md.

2. Approach 2 — Server-side auto-conversion (internal/mention/):
   New ExpandIssueIdentifiers() utility that scans comment content for
   bare issue identifiers (e.g. MUL-117) and replaces them with
   [MUL-117](mention://issue/<uuid>) mention links. Skips code blocks,
   inline code, and existing markdown links. Integrated into both:
   - handler.CreateComment (HTTP API path)
   - service.createAgentComment (agent task output path)
This commit is contained in:
Bohan Jiang 2026-04-02 13:48:53 +08:00 committed by GitHub
parent cd1b1155c1
commit f353e8db59
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 350 additions and 15 deletions

View file

@ -14,10 +14,11 @@ import (
// mention represents a parsed @mention from markdown content (local alias).
type mention struct {
Type string // "member", "agent", or "all"
ID string // user_id, agent_id, or "all"
Type string // "member", "agent", "issue", or "all"
ID string // user_id, agent_id, issue_id, or "all"
}
// statusLabels maps DB status values to human-readable labels for notifications.
var statusLabels = map[string]string{
"backlog": "Backlog",