opendia/extension/popup.js
2025-06-11 16:29:16 +02:00

93 lines
2.7 KiB
JavaScript

// Popup script for status display
let logContainer = document.getElementById("log");
let statusIndicator = document.getElementById("statusIndicator");
let statusText = document.getElementById("statusText");
let toolCount = document.getElementById("toolCount");
// Get initial tool count
const tools = 13; // Number of tools we expose
toolCount.textContent = tools;
// Check connection status
function checkStatus() {
if (chrome.runtime?.id) {
chrome.runtime.sendMessage({ action: "getStatus" }, (response) => {
if (chrome.runtime.lastError) {
console.error("Runtime error:", chrome.runtime.lastError);
updateStatus(false);
addLog("Error: Extension background script not responding");
} else {
updateStatus(response?.connected || false);
}
});
} else {
updateStatus(false);
addLog("Error: Extension context invalid");
}
}
// Check status on load and periodically
checkStatus();
setInterval(checkStatus, 2000);
// Update UI based on connection status
function updateStatus(connected) {
if (connected) {
statusIndicator.className = "status-indicator connected";
statusText.textContent = "Connected to MCP server";
} else {
statusIndicator.className = "status-indicator disconnected";
statusText.textContent = "Disconnected from MCP server";
}
}
// Reconnect button
document.getElementById("reconnectBtn").addEventListener("click", () => {
if (chrome.runtime?.id) {
chrome.runtime.sendMessage({ action: "reconnect" }, (response) => {
if (chrome.runtime.lastError) {
addLog("Error: " + chrome.runtime.lastError.message);
} else {
addLog("Attempting to reconnect...");
setTimeout(checkStatus, 1000);
}
});
}
});
// Test button
document.getElementById("testBtn").addEventListener("click", () => {
if (chrome.runtime?.id) {
chrome.runtime.sendMessage({ action: "test" }, (response) => {
if (chrome.runtime.lastError) {
addLog("Error: " + chrome.runtime.lastError.message);
} else {
addLog("Sending test message...");
}
});
}
});
// Add log entry
function addLog(message) {
const entry = document.createElement("div");
entry.textContent = `[${new Date().toLocaleTimeString()}] ${message}`;
logContainer.appendChild(entry);
// Keep only last 20 entries
while (logContainer.children.length > 20) {
logContainer.removeChild(logContainer.firstChild);
}
logContainer.scrollTop = logContainer.scrollHeight;
}
// Listen for updates from background script
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.type === "statusUpdate") {
updateStatus(message.connected);
} else if (message.type === "log") {
addLog(message.message);
}
});