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

Function handler

packages/tools/src/definitions/search-messages.ts:23–54  ·  view source on GitHub ↗
(params: Record<string, unknown>, context: ToolExecutionContext)

Source from the content-addressed store, hash-verified

21}
22
23async function handler(params: Record<string, unknown>, context: ToolExecutionContext): Promise<ToolResult> {
24 const { locale, timeFilter: contextTimeFilter, maxMessagesLimit } = context
25 const keywords = params.keywords as string[]
26 const limit = Math.min(maxMessagesLimit || (params.limit as number) || 1000, 50000)
27 const effectiveTimeFilter = parseExtendedTimeParams(params as any, contextTimeFilter)
28
29 const result = await context.dataProvider!.searchMessages(keywords, {
30 timeFilter: effectiveTimeFilter,
31 limit,
32 senderId: params.sender_id as number | undefined,
33 })
34
35 const contextBefore = context.searchContextBefore ?? 2
36 const contextAfter = context.searchContextAfter ?? 2
37 let finalMessages = result.messages
38
39 if ((contextBefore > 0 || contextAfter > 0) && result.messages.length > 0) {
40 const hitIds = result.messages.map((m) => m.id).filter((id): id is number => id != null)
41 if (hitIds.length > 0) {
42 finalMessages = await context.dataProvider!.getSearchMessageContext(hitIds, contextBefore, contextAfter)
43 }
44 }
45
46 const data = {
47 total: result.total,
48 returned: finalMessages.length,
49 timeRange: formatTimeRange(effectiveTimeFilter, locale),
50 rawMessages: finalMessages,
51 }
52
53 return { content: JSON.stringify(data), data, rawMessages: finalMessages }
54}
55
56export const searchMessagesTool: ToolDefinition = {
57 name: 'search_messages',

Callers

nothing calls this directly

Calls 4

parseExtendedTimeParamsFunction · 0.90
formatTimeRangeFunction · 0.90
searchMessagesMethod · 0.65

Tested by

no test coverage detected