async onListConversations()

in server/aws-lsp-codewhisperer/src/language-server/agenticChat/tabBarController.ts [49:100]


    async onListConversations(params: ListConversationsParams): Promise<ListConversationsResult> {
        const searchFilter = params.filter?.['search']

        if (this.#searchTimeout) {
            clearTimeout(this.#searchTimeout)
        }

        const attachActionsToConversationList = (list: ConversationItemGroup[]) => {
            return list.map(group => {
                const items =
                    group.items?.map(item => ({
                        ...item,
                        ...(item.id !== EMPTY_CONVERSATION_LIST_ID
                            ? { actions: this.getConversationActions(item.id) }
                            : {}),
                    })) || []

                return {
                    ...group,
                    ...(items.length > 0 ? { items } : {}),
                }
            })
        }

        if (searchFilter) {
            let list: ConversationItemGroup[] = await new Promise<any[]>(resolve => {
                this.#searchTimeout = setTimeout(() => {
                    const results = this.#chatHistoryDb.searchMessages(searchFilter)
                    resolve(results)
                }, this.#DebounceTime)
            })
            list = attachActionsToConversationList(list)

            return { list }
        }

        let list = this.#chatHistoryDb.getHistory()
        list = attachActionsToConversationList(list)

        return {
            header: { title: 'Chat history' },
            filterOptions: [
                {
                    type: 'textinput',
                    icon: 'search',
                    id: 'search',
                    placeholder: 'Search...',
                },
            ],
            list,
        }
    }