Kagi Assistant Auto-Scroll

Automatically scroll down when new content is added to Kagi Assistant

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Kagi Assistant Auto-Scroll
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Automatically scroll down when new content is added to Kagi Assistant
// @author       You
// @match        *://kagi.com/assistant*
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // The main container that holds the chat messages
    const targetSelector = '.main-center-box';

    // Function to scroll to bottom
    function scrollToBottom() {
        const container = document.querySelector(targetSelector);
        if (container) {
            container.scrollTop = container.scrollHeight;
        }
    }

    // Set up a mutation observer to watch for changes
    const observer = new MutationObserver((mutations) => {
        let shouldScroll = false;

        // Check if content was added
        mutations.forEach((mutation) => {
            if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
                shouldScroll = true;
            } else if (mutation.type === 'characterData') {
                shouldScroll = true;
            }
        });

        if (shouldScroll) {
            scrollToBottom();
        }
    });

    // Function to initialize the observer when the target element exists
    function initObserver() {
        const target = document.querySelector(targetSelector);
        if (target) {
            observer.observe(target, {
                childList: true,
                subtree: true,
                characterData: true
            });
            console.log('Kagi Assistant Auto-Scroll: Observer initialized');

            // Initial scroll to bottom
            scrollToBottom();
        } else {
            // If target doesn't exist yet, try again shortly
            setTimeout(initObserver, 1000);
        }
    }

    // Start the initialization process
    initObserver();

    // Also scroll on window resize
    window.addEventListener('resize', scrollToBottom);
})();