113 lines
3.3 KiB
JavaScript
Raw Normal View History

2025-06-13 23:21:32 +02:00
// 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) {
updateStatus(false);
addLog("Extension background script not responding", "error");
} else {
updateStatus(response?.connected || false);
}
});
} else {
updateStatus(false);
addLog("Extension context invalid", "error");
}
}
// 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(chrome.runtime.lastError.message, "error");
} else {
addLog("Attempting to reconnect...", "info");
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(chrome.runtime.lastError.message, "error");
} else {
addLog("Sending test message...", "info");
}
});
}
});
// Add log entry
function addLog(message, type = "info") {
const entry = document.createElement("div");
entry.className = "log-entry";
const time = document.createElement("span");
time.className = "log-time";
time.textContent = `[${new Date().toLocaleTimeString()}]`;
const content = document.createElement("span");
content.textContent = message;
if (type === "error") {
content.style.color = "var(--error-color)";
} else if (type === "success") {
content.style.color = "var(--success-color)";
}
entry.appendChild(time);
entry.appendChild(content);
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);
if (message.connected) {
addLog("Connected to MCP server", "success");
} else {
addLog("Disconnected from MCP server", "error");
}
} else if (message.type === "log") {
addLog(message.message, message.type || "info");
}
});