File size: 4,943 Bytes
ede5511
1d3a7b4
 
 
 
 
ac54ec5
1d3a7b4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ac54ec5
 
1d3a7b4
 
ac54ec5
3b24fc9
1d3a7b4
ac54ec5
3b24fc9
 
1d3a7b4
ac54ec5
3b24fc9
ac54ec5
3b24fc9
1d3a7b4
 
ac54ec5
 
 
 
 
1d3a7b4
ac54ec5
1d3a7b4
 
 
ede5511
1d3a7b4
 
e892728
 
 
1d3a7b4
ede5511
3b24fc9
e892728
ac54ec5
e892728
1d3a7b4
ede5511
e892728
 
 
 
ede5511
 
 
1d3a7b4
ede5511
1d3a7b4
ede5511
 
3b24fc9
ede5511
ac54ec5
3b24fc9
ede5511
 
 
3b24fc9
ede5511
 
 
e892728
ede5511
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
document.addEventListener("DOMContentLoaded", () => {
    const workerUrl = "https://ctmresearchagent.aiagents.workers.dev"; // Replace if your URL is different
    
    // Event Listeners
    document.getElementById("uploadForm").addEventListener("submit", handleFileUpload);
    document.getElementById("submitButton").addEventListener("click", handleAiQuerySubmit);

    // Initial data load
    loadReportsFromRss();
    loadResearchHistory();

    /**
     * Fetches and displays the list of reports from the backend's RSS parser
     */
    async function loadReportsFromRss() {
        const reportsList = document.getElementById("reportsList");
        reportsList.innerHTML = "<p>Fetching reports...</p>";
        try {
            const response = await fetch(`${workerUrl}/api/rss`);
            if (!response.ok) throw new Error('Failed to fetch RSS feed.');
            const items = await response.json();
            
            reportsList.innerHTML = "";
            if (items.length === 0) { reportsList.innerHTML = "<p>No reports found in the feed.</p>"; return; }
            
            items.forEach(item => {
                const entryDiv = document.createElement("div");
                entryDiv.className = "report-entry";
                entryDiv.innerHTML = `<a href="${item.link}" target="_blank" rel="noopener noreferrer">${item.title}</a><p>${item.description}</p>`;
                reportsList.appendChild(entryDiv);
            });
        } catch (error) {
            reportsList.innerHTML = `<p>Could not load reports: ${error.message}</p>`;
        }
    }
    
    // Simplified File Upload
    async function handleFileUpload(event) {
        event.preventDefault();
        const fileInput = document.getElementById("fileInput");
        const uploadStatus = document.getElementById("uploadStatus");
        const file = fileInput.files[0];
        if (!file) { uploadStatus.textContent = 'Please select a file.'; return; }
        
        uploadStatus.textContent = `Uploading ${file.name}...`;
        const formData = new FormData();
        formData.append('file', file);
        
        try {
            const response = await fetch(`${workerUrl}/api/upload`, { method: 'POST', body: formData });
            const data = await response.json();
            if (!response.ok) throw new Error(data.error || 'Upload failed');
            uploadStatus.textContent = `Success: ${data.message}`;
            fileInput.value = ''; // Clear the file input
        } catch (error) {
            uploadStatus.textContent = `Error: ${error.message}`;
        }
    }

    // Simplified AI Query
    async function handleAiQuerySubmit() {
        const researchQueryInput = document.getElementById("researchQuery");
        const resultDisplay = document.getElementById("resultDisplay");
        const submitButton = document.getElementById("submitButton");
        const query = researchQueryInput.value.trim();
        if (!query) { alert("Please enter a query."); return; }
        
        submitButton.disabled = true;
        submitButton.innerText = "Thinking...";
        resultDisplay.innerHTML = "<p>Generating response...</p>";
        
        try {
            const response = await fetch(`${workerUrl}/api/query`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ query: query }) });
            const data = await response.json();
            if (!response.ok) throw new Error(data.error || "An unknown error occurred.");
            resultDisplay.innerText = data.result;
            await loadResearchHistory(); // Refresh history after a successful query
        } catch (error) {
            resultDisplay.innerText = `Error: ${error.message}`;
        } finally {
            submitButton.disabled = false;
            submitButton.innerText = "Submit";
        }
    }

    // Unchanged History Loader
    async function loadResearchHistory() {
        const historyContainer = document.getElementById("historyContainer");
        try {
            const response = await fetch(`${workerUrl}/api/research`);
            if (!response.ok) throw new Error('Failed to load history.');
            const logs = await response.json();
            historyContainer.innerHTML = "";
            if (logs.length === 0) { historyContainer.innerHTML = "<p>No research history found.</p>"; return; }
            logs.forEach(log => {
                const entryDiv = document.createElement("div");
                entryDiv.className = "history-entry";
                entryDiv.innerHTML = `<p><strong>Query:</strong> ${log.query}</p><p><strong>Result:</strong> ${log.result}</p><p><small><em>${new Date(log.timestamp).toLocaleString()}</em></small></p>`;
                historyContainer.appendChild(entryDiv);
            });
        } catch (error) {
            historyContainer.innerHTML = "<p>Error loading research history.</p>";
        }
    }
});