MCPcopy Create free account
hub / github.com/ChatLab/ChatLab / resolveMentionedMembersFromContent

Function resolveMentionedMembersFromContent

src/stores/aiChat.ts:1361–1434  ·  view source on GitHub ↗
(
    state: AIChatSessionState,
    content: string
  )

Source from the content-addressed store, hash-verified

1359 }
1360
1361 async function resolveMentionedMembersFromContent(
1362 state: AIChatSessionState,
1363 content: string
1364 ): Promise<MentionedMemberContext[]> {
1365 const mentionTokens = new Set<string>()
1366 for (const match of content.matchAll(/@([^\s@]+)/g)) {
1367 const token = normalizeMentionLookupText(match[1] ?? '')
1368 if (token) {
1369 mentionTokens.add(token)
1370 }
1371 }
1372
1373 if (mentionTokens.size === 0) {
1374 return []
1375 }
1376
1377 try {
1378 const members = await useDataService().getMembers(state.sessionId)
1379 const displayNameCounts = new Map<string, number>()
1380 members.forEach((member) => {
1381 const displayName = member.groupNickname || member.accountName || member.platformId
1382 displayNameCounts.set(displayName, (displayNameCounts.get(displayName) ?? 0) + 1)
1383 })
1384
1385 const candidates = members.map((member) => {
1386 const displayName = member.groupNickname || member.accountName || member.platformId
1387 const insertName =
1388 (displayNameCounts.get(displayName) ?? 0) > 1 ? `${displayName}·${member.platformId}` : displayName
1389 const aliases = [...member.aliases]
1390 const lookupValues = [
1391 displayName,
1392 member.groupNickname || '',
1393 member.accountName || '',
1394 member.platformId,
1395 insertName,
1396 ...aliases,
1397 ]
1398 .map(normalizeMentionLookupText)
1399 .filter(Boolean)
1400
1401 return {
1402 memberId: member.id,
1403 platformId: member.platformId,
1404 displayName,
1405 aliases,
1406 mentionText: `@${insertName}`,
1407 lookupValues,
1408 }
1409 })
1410
1411 const selected: MentionedMemberContext[] = []
1412 const selectedIds = new Set<number>()
1413 for (const token of mentionTokens) {
1414 const candidate = candidates.find(
1415 (item) => !selectedIds.has(item.memberId) && item.lookupValues.includes(token)
1416 )
1417 if (!candidate) continue
1418

Callers 1

editCurrentRoundOnlyFunction · 0.85

Calls 7

useDataServiceFunction · 0.90
setMethod · 0.80
getMembersMethod · 0.65
getMethod · 0.65
errorMethod · 0.65
addMethod · 0.45

Tested by

no test coverage detected