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:
parent
cd1b1155c1
commit
f353e8db59
8 changed files with 350 additions and 15 deletions
|
|
@ -12,6 +12,7 @@ import (
|
|||
"github.com/jackc/pgx/v5"
|
||||
"github.com/jackc/pgx/v5/pgtype"
|
||||
"github.com/multica-ai/multica/server/internal/events"
|
||||
"github.com/multica-ai/multica/server/internal/mention"
|
||||
"github.com/multica-ai/multica/server/internal/realtime"
|
||||
"github.com/multica-ai/multica/server/internal/util"
|
||||
db "github.com/multica-ai/multica/server/pkg/db/generated"
|
||||
|
|
@ -454,6 +455,13 @@ func (s *TaskService) createAgentComment(ctx context.Context, issueID, agentID p
|
|||
if content == "" {
|
||||
return
|
||||
}
|
||||
// Look up issue to get workspace ID for mention expansion and broadcasting.
|
||||
issue, err := s.Queries.GetIssue(ctx, issueID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
// Expand bare issue identifiers (e.g. MUL-117) into mention links.
|
||||
content = mention.ExpandIssueIdentifiers(ctx, s.Queries, issue.WorkspaceID, content)
|
||||
comment, err := s.Queries.CreateComment(ctx, db.CreateCommentParams{
|
||||
IssueID: issueID,
|
||||
AuthorType: "agent",
|
||||
|
|
@ -465,11 +473,6 @@ func (s *TaskService) createAgentComment(ctx context.Context, issueID, agentID p
|
|||
if err != nil {
|
||||
return
|
||||
}
|
||||
// Look up issue to get workspace ID for broadcasting
|
||||
issue, err := s.Queries.GetIssue(ctx, issueID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
s.Bus.Publish(events.Event{
|
||||
Type: protocol.EventCommentCreated,
|
||||
WorkspaceID: util.UUIDToString(issue.WorkspaceID),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue