|
<!DOCTYPE html> |
|
<html lang="en"> |
|
<head> |
|
<meta charset="UTF-8"> |
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
<title>MCP CyberChat Interface</title> |
|
<script src="https://cdn.tailwindcss.com"></script> |
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
|
<style> |
|
@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700&family=Roboto+Mono:wght@300;400;600&display=swap'); |
|
|
|
:root { |
|
--primary: #00ff9d; |
|
--secondary: #00b4ff; |
|
--dark: #0a0a0a; |
|
--darker: #050505; |
|
--light: #f0f0f0; |
|
--neon-glow: 0 0 10px rgba(0, 255, 157, 0.7); |
|
} |
|
|
|
body { |
|
font-family: 'Roboto Mono', monospace; |
|
background-color: var(--dark); |
|
color: var(--light); |
|
margin: 0; |
|
padding: 0; |
|
min-height: 100vh; |
|
overflow-x: hidden; |
|
} |
|
|
|
.cyber-font { |
|
font-family: 'Orbitron', sans-serif; |
|
} |
|
|
|
.cyber-border { |
|
border: 1px solid var(--primary); |
|
box-shadow: var(--neon-glow); |
|
} |
|
|
|
.cyber-btn { |
|
background: linear-gradient(45deg, var(--primary), var(--secondary)); |
|
color: var(--dark); |
|
border: none; |
|
transition: all 0.3s ease; |
|
} |
|
|
|
.cyber-btn:hover { |
|
transform: translateY(-2px); |
|
box-shadow: 0 0 15px rgba(0, 255, 157, 0.9); |
|
} |
|
|
|
.cyber-input { |
|
background-color: rgba(15, 15, 15, 0.8); |
|
border: 1px solid var(--secondary); |
|
color: var(--light); |
|
transition: all 0.3s ease; |
|
} |
|
|
|
.cyber-input:focus { |
|
outline: none; |
|
border-color: var(--primary); |
|
box-shadow: var(--neon-glow); |
|
} |
|
|
|
.pulse { |
|
animation: pulse 2s infinite; |
|
} |
|
|
|
@keyframes pulse { |
|
0% { |
|
box-shadow: 0 0 0 0 rgba(0, 255, 157, 0.7); |
|
} |
|
70% { |
|
box-shadow: 0 0 0 10px rgba(0, 255, 157, 0); |
|
} |
|
100% { |
|
box-shadow: 0 0 0 0 rgba(0, 255, 157, 0); |
|
} |
|
} |
|
|
|
.chat-container { |
|
height: 65vh; |
|
background: linear-gradient(135deg, rgba(10, 10, 10, 0.9), rgba(5, 5, 5, 0.95)); |
|
backdrop-filter: blur(5px); |
|
} |
|
|
|
.message { |
|
max-width: 80%; |
|
border-radius: 8px; |
|
padding: 12px 16px; |
|
margin-bottom: 12px; |
|
position: relative; |
|
word-wrap: break-word; |
|
} |
|
|
|
.user-message { |
|
background: linear-gradient(45deg, rgba(0, 180, 255, 0.2), rgba(0, 255, 157, 0.2)); |
|
border-left: 3px solid var(--secondary); |
|
margin-left: auto; |
|
} |
|
|
|
.bot-message { |
|
background: linear-gradient(45deg, rgba(0, 255, 157, 0.1), rgba(0, 180, 255, 0.1)); |
|
border-right: 3px solid var(--primary); |
|
margin-right: auto; |
|
} |
|
|
|
.typing-indicator::after { |
|
content: '...'; |
|
display: inline-block; |
|
animation: typing 1.5s infinite; |
|
} |
|
|
|
@keyframes typing { |
|
0% { content: '.'; } |
|
33% { content: '..'; } |
|
66% { content: '...'; } |
|
} |
|
|
|
.status-connected { |
|
background-color: rgba(0, 255, 157, 0.2); |
|
color: var(--primary); |
|
} |
|
|
|
.status-disconnected { |
|
background-color: rgba(255, 0, 0, 0.2); |
|
color: #ff0000; |
|
} |
|
|
|
.glitch { |
|
position: relative; |
|
} |
|
|
|
.glitch::before, .glitch::after { |
|
content: attr(data-text); |
|
position: absolute; |
|
top: 0; |
|
left: 0; |
|
width: 100%; |
|
height: 100%; |
|
background: var(--dark); |
|
} |
|
|
|
.glitch::before { |
|
left: 2px; |
|
text-shadow: -2px 0 #ff00c1; |
|
clip: rect(24px, 550px, 90px, 0); |
|
animation: glitch-anim-1 2s infinite linear alternate-reverse; |
|
} |
|
|
|
.glitch::after { |
|
left: -2px; |
|
text-shadow: -2px 0 #00fff9, 2px 2px #ff00c1; |
|
clip: rect(85px, 550px, 140px, 0); |
|
animation: glitch-anim-2 2s infinite linear alternate-reverse; |
|
} |
|
|
|
@keyframes glitch-anim-1 { |
|
0% { clip: rect(32px, 9999px, 72px, 0); } |
|
20% { clip: rect(48px, 9999px, 115px, 0); } |
|
40% { clip: rect(15px, 9999px, 95px, 0); } |
|
60% { clip: rect(78px, 9999px, 130px, 0); } |
|
80% { clip: rect(63px, 9999px, 92px, 0); } |
|
100% { clip: rect(39px, 9999px, 108px, 0); } |
|
} |
|
|
|
@keyframes glitch-anim-2 { |
|
0% { clip: rect(102px, 9999px, 76px, 0); } |
|
20% { clip: rect(145px, 9999px, 53px, 0); } |
|
40% { clip: rect(120px, 9999px, 24px, 0); } |
|
60% { clip: rect(86px, 9999px, 15px, 0); } |
|
80% { clip: rect(67px, 9999px, 32px, 0); } |
|
100% { clip: rect(91px, 9999px, 58px, 0); } |
|
} |
|
|
|
.scanline { |
|
position: absolute; |
|
top: 0; |
|
left: 0; |
|
width: 100%; |
|
height: 100%; |
|
background: linear-gradient( |
|
to bottom, |
|
transparent 0%, |
|
rgba(0, 255, 157, 0.05) 50%, |
|
transparent 100% |
|
); |
|
background-size: 100% 8px; |
|
animation: scanline 8s linear infinite; |
|
pointer-events: none; |
|
z-index: 10; |
|
} |
|
|
|
@keyframes scanline { |
|
0% { background-position: 0 0; } |
|
100% { background-position: 0 100vh; } |
|
} |
|
</style> |
|
</head> |
|
<body class="relative overflow-hidden"> |
|
|
|
<div class="scanline"></div> |
|
|
|
|
|
<div class="container mx-auto px-4 py-8 max-w-6xl"> |
|
|
|
<header class="flex flex-col md:flex-row justify-between items-center mb-8"> |
|
<div class="flex items-center mb-4 md:mb-0"> |
|
<div class="w-12 h-12 rounded-full cyber-border flex items-center justify-center mr-4"> |
|
<i class="fas fa-robot text-2xl text-primary"></i> |
|
</div> |
|
<h1 class="cyber-font text-3xl md:text-4xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-primary to-secondary"> |
|
<span class="glitch" data-text="MCP CHAT INTERFACE">MCP CHAT INTERFACE</span> |
|
</h1> |
|
</div> |
|
|
|
<div class="flex items-center space-x-4"> |
|
<div class="flex items-center"> |
|
<div class="w-3 h-3 rounded-full bg-primary pulse mr-2"></div> |
|
<span id="connection-status" class="status-connected px-3 py-1 rounded-full text-xs font-bold">CONNECTED</span> |
|
</div> |
|
<button id="settings-btn" class="cyber-btn px-4 py-2 rounded-md text-sm font-bold"> |
|
<i class="fas fa-cog mr-2"></i>SETTINGS |
|
</button> |
|
</div> |
|
</header> |
|
|
|
|
|
<main class="grid grid-cols-1 lg:grid-cols-4 gap-6"> |
|
|
|
<div class="lg:col-span-1 cyber-border rounded-lg p-4 hidden lg:block"> |
|
<h2 class="cyber-font text-xl font-bold mb-4 text-primary">SYSTEM STATUS</h2> |
|
|
|
<div class="space-y-4"> |
|
<div class="bg-darker rounded-md p-3"> |
|
<div class="flex justify-between items-center mb-1"> |
|
<span class="text-xs text-gray-400">MCP PROTOCOL</span> |
|
<span class="text-xs text-primary font-bold">ACTIVE</span> |
|
</div> |
|
<div class="w-full bg-dark rounded-full h-2"> |
|
<div class="bg-primary rounded-full h-2" style="width: 92%"></div> |
|
</div> |
|
</div> |
|
|
|
<div class="bg-darker rounded-md p-3"> |
|
<div class="flex justify-between items-center mb-1"> |
|
<span class="text-xs text-gray-400">ENCRYPTION</span> |
|
<span class="text-xs text-secondary font-bold">AES-256</span> |
|
</div> |
|
<div class="w-full bg-dark rounded-full h-2"> |
|
<div class="bg-secondary rounded-full h-2" style="width: 100%"></div> |
|
</div> |
|
</div> |
|
|
|
<div class="bg-darker rounded-md p-3"> |
|
<div class="flex justify-between items-center mb-1"> |
|
<span class="text-xs text-gray-400">BANDWIDTH</span> |
|
<span class="text-xs text-primary font-bold">4.7 MB/s</span> |
|
</div> |
|
<div class="w-full bg-dark rounded-full h-2"> |
|
<div class="bg-gradient-to-r from-primary to-secondary rounded-full h-2" style="width: 65%"></div> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
<h2 class="cyber-font text-xl font-bold mt-6 mb-4 text-primary">QUICK COMMANDS</h2> |
|
|
|
<div class="grid grid-cols-2 gap-2"> |
|
<button class="cyber-input text-xs py-2 px-2 rounded hover:bg-primary hover:text-dark transition-colors"> |
|
/status |
|
</button> |
|
<button class="cyber-input text-xs py-2 px-2 rounded hover:bg-primary hover:text-dark transition-colors"> |
|
/help |
|
</button> |
|
<button class="cyber-input text-xs py-2 px-2 rounded hover:bg-primary hover:text-dark transition-colors"> |
|
/clear |
|
</button> |
|
<button class="cyber-input text-xs py-2 px-2 rounded hover:bg-primary hover:text-dark transition-colors"> |
|
/ping |
|
</button> |
|
<button class="cyber-input text-xs py-2 px-2 rounded hover:bg-primary hover:text-dark transition-colors"> |
|
/debug |
|
</button> |
|
<button class="cyber-input text-xs py-2 px-2 rounded hover:bg-primary hover:text-dark transition-colors"> |
|
/encrypt |
|
</button> |
|
</div> |
|
|
|
<div class="mt-6 text-xs text-gray-400"> |
|
<p>MCP v3.2.1</p> |
|
<p>Last sync: <span id="last-sync">just now</span></p> |
|
</div> |
|
</div> |
|
|
|
|
|
<div class="lg:col-span-3"> |
|
<div class="chat-container cyber-border rounded-lg p-4 overflow-y-auto mb-4"> |
|
<div id="chat-messages" class="space-y-3"> |
|
|
|
<div class="message bot-message"> |
|
<div class="flex items-start"> |
|
<div class="w-6 h-6 rounded-full bg-dark border border-primary flex items-center justify-center mr-2 flex-shrink-0"> |
|
<i class="fas fa-robot text-xs text-primary"></i> |
|
</div> |
|
<div> |
|
<p class="font-bold text-primary text-xs mb-1">MCP SYSTEM</p> |
|
<p>Connection established. MCP protocol initialized. How can I assist you today?</p> |
|
</div> |
|
</div> |
|
<div class="text-right mt-1"> |
|
<span class="text-xs text-gray-500">just now</span> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
<div class="flex space-x-2"> |
|
<input |
|
id="message-input" |
|
type="text" |
|
placeholder="Type your message..." |
|
class="cyber-input flex-grow rounded-md px-4 py-3 focus:outline-none" |
|
autocomplete="off" |
|
> |
|
<button |
|
id="send-btn" |
|
class="cyber-btn px-6 py-3 rounded-md font-bold" |
|
> |
|
<i class="fas fa-paper-plane mr-2"></i>SEND |
|
</button> |
|
</div> |
|
|
|
<div class="flex justify-between items-center mt-3 text-xs text-gray-400"> |
|
<div> |
|
<span>Press <span class="text-primary font-bold">Enter</span> to send</span> |
|
</div> |
|
<div class="flex items-center"> |
|
<i class="fas fa-lock mr-1"></i> |
|
<span>End-to-end encrypted</span> |
|
</div> |
|
</div> |
|
</div> |
|
</main> |
|
</div> |
|
|
|
|
|
<div id="settings-modal" class="fixed inset-0 bg-black bg-opacity-80 flex items-center justify-center z-50 hidden"> |
|
<div class="cyber-border rounded-lg p-6 w-full max-w-md relative"> |
|
<button id="close-settings" class="absolute top-4 right-4 text-gray-400 hover:text-primary"> |
|
<i class="fas fa-times"></i> |
|
</button> |
|
|
|
<h2 class="cyber-font text-2xl font-bold mb-6 text-primary">SYSTEM SETTINGS</h2> |
|
|
|
<div class="space-y-4"> |
|
<div> |
|
<label class="block text-sm font-bold mb-2 text-gray-300">MCP Server</label> |
|
<input type="text" class="cyber-input w-full px-3 py-2 rounded" value="mcp.cybernet.io:443"> |
|
</div> |
|
|
|
<div> |
|
<label class="block text-sm font-bold mb-2 text-gray-300">Encryption Level</label> |
|
<select class="cyber-input w-full px-3 py-2 rounded"> |
|
<option>AES-256 (Recommended)</option> |
|
<option>ChaCha20-Poly1305</option> |
|
<option>Twofish</option> |
|
</select> |
|
</div> |
|
|
|
<div class="flex items-center"> |
|
<input type="checkbox" id="dark-mode" class="mr-2" checked> |
|
<label for="dark-mode" class="text-sm text-gray-300">Dark Mode</label> |
|
</div> |
|
|
|
<div class="flex items-center"> |
|
<input type="checkbox" id="typing-indicator" class="mr-2" checked> |
|
<label for="typing-indicator" class="text-sm text-gray-300">Show Typing Indicator</label> |
|
</div> |
|
|
|
<div class="pt-4"> |
|
<button class="cyber-btn w-full py-2 rounded-md font-bold"> |
|
SAVE SETTINGS |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
<script> |
|
document.addEventListener('DOMContentLoaded', function() { |
|
|
|
const messageInput = document.getElementById('message-input'); |
|
const sendBtn = document.getElementById('send-btn'); |
|
const chatMessages = document.getElementById('chat-messages'); |
|
const settingsBtn = document.getElementById('settings-btn'); |
|
const settingsModal = document.getElementById('settings-modal'); |
|
const closeSettings = document.getElementById('close-settings'); |
|
const connectionStatus = document.getElementById('connection-status'); |
|
|
|
|
|
let isConnected = true; |
|
|
|
|
|
messageInput.addEventListener('keypress', function(e) { |
|
if (e.key === 'Enter') { |
|
sendMessage(); |
|
} |
|
}); |
|
|
|
sendBtn.addEventListener('click', sendMessage); |
|
|
|
settingsBtn.addEventListener('click', function() { |
|
settingsModal.classList.remove('hidden'); |
|
}); |
|
|
|
closeSettings.addEventListener('click', function() { |
|
settingsModal.classList.add('hidden'); |
|
}); |
|
|
|
|
|
function sendMessage() { |
|
const messageText = messageInput.value.trim(); |
|
if (messageText === '') return; |
|
|
|
|
|
addMessage(messageText, 'user'); |
|
messageInput.value = ''; |
|
|
|
|
|
const typingIndicator = document.createElement('div'); |
|
typingIndicator.className = 'message bot-message typing-indicator'; |
|
typingIndicator.innerHTML = ` |
|
<div class="flex items-start"> |
|
<div class="w-6 h-6 rounded-full bg-dark border border-primary flex items-center justify-center mr-2 flex-shrink-0"> |
|
<i class="fas fa-robot text-xs text-primary"></i> |
|
</div> |
|
<div> |
|
<p class="font-bold text-primary text-xs mb-1">MCP SYSTEM</p> |
|
<p>Processing request</p> |
|
</div> |
|
</div> |
|
`; |
|
chatMessages.appendChild(typingIndicator); |
|
chatMessages.scrollTop = chatMessages.scrollHeight; |
|
|
|
|
|
setTimeout(() => { |
|
|
|
const indicators = document.querySelectorAll('.typing-indicator'); |
|
indicators.forEach(indicator => indicator.remove()); |
|
|
|
|
|
const botResponse = generateBotResponse(messageText); |
|
addMessage(botResponse, 'bot'); |
|
}, 1000 + Math.random() * 2000); |
|
} |
|
|
|
|
|
function addMessage(text, sender) { |
|
const messageDiv = document.createElement('div'); |
|
messageDiv.className = `message ${sender}-message`; |
|
|
|
const timestamp = new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); |
|
|
|
messageDiv.innerHTML = ` |
|
<div class="flex items-start"> |
|
<div class="w-6 h-6 rounded-full bg-dark border ${sender === 'bot' ? 'border-primary' : 'border-secondary'} flex items-center justify-center mr-2 flex-shrink-0"> |
|
<i class="fas ${sender === 'bot' ? 'fa-robot text-primary' : 'fa-user text-secondary'} text-xs"></i> |
|
</div> |
|
<div> |
|
<p class="font-bold ${sender === 'bot' ? 'text-primary' : 'text-secondary'} text-xs mb-1">${sender === 'bot' ? 'MCP SYSTEM' : 'YOU'}</p> |
|
<p>${text}</p> |
|
</div> |
|
</div> |
|
<div class="text-right mt-1"> |
|
<span class="text-xs text-gray-500">${timestamp}</span> |
|
</div> |
|
`; |
|
|
|
chatMessages.appendChild(messageDiv); |
|
chatMessages.scrollTop = chatMessages.scrollHeight; |
|
} |
|
|
|
|
|
function generateBotResponse(userMessage) { |
|
const lowerMsg = userMessage.toLowerCase(); |
|
|
|
if (lowerMsg.includes('hello') || lowerMsg.includes('hi')) { |
|
return "Greetings, user. MCP protocol engaged. How may I assist you today?"; |
|
} else if (lowerMsg.includes('status')) { |
|
return "System status: Optimal\nProtocol: MCP v3.2.1\nEncryption: AES-256 active\nBandwidth: 4.7MB/s"; |
|
} else if (lowerMsg.includes('help')) { |
|
return "Available commands:\n/status - Check system status\n/help - Display this message\n/clear - Clear chat history\n/ping - Test connection\n/debug - Show debug info"; |
|
} else if (lowerMsg.includes('ping')) { |
|
return "PONG! Latency: " + Math.floor(Math.random() * 50) + "ms"; |
|
} else if (lowerMsg.includes('time')) { |
|
return "Current system time: " + new Date().toLocaleTimeString(); |
|
} else if (lowerMsg.includes('date')) { |
|
return "Current date: " + new Date().toLocaleDateString(); |
|
} else if (lowerMsg.includes('encrypt')) { |
|
return "Encryption protocol confirmed. All communications are secured with AES-256 bit encryption."; |
|
} else if (lowerMsg.includes('disconnect')) { |
|
|
|
isConnected = false; |
|
connectionStatus.textContent = "DISCONNECTED"; |
|
connectionStatus.className = "status-disconnected px-3 py-1 rounded-full text-xs font-bold"; |
|
return "Warning: Connection terminated. Attempting to reconnect..."; |
|
} else if (lowerMsg.includes('reconnect')) { |
|
|
|
isConnected = true; |
|
connectionStatus.textContent = "CONNECTED"; |
|
connectionStatus.className = "status-connected px-3 py-1 rounded-full text-xs font-bold"; |
|
return "Connection re-established. MCP protocol resumed."; |
|
} else { |
|
const randomResponses = [ |
|
"Processing request... Command understood.", |
|
"Affirmative. Request logged in system.", |
|
"MCP protocol confirms receipt of your message.", |
|
"Understood. Further parameters required?", |
|
"Command executed. Awaiting next instruction.", |
|
"System acknowledges your input.", |
|
"Data received. Processing complete.", |
|
"Directive confirmed. Standing by." |
|
]; |
|
return randomResponses[Math.floor(Math.random() * randomResponses.length)]; |
|
} |
|
} |
|
|
|
|
|
setInterval(() => { |
|
if (isConnected) { |
|
|
|
const bandwidthElements = document.querySelectorAll('.bg-gradient-to-r.from-primary.to-secondary'); |
|
bandwidthElements.forEach(el => { |
|
const newWidth = Math.floor(30 + Math.random() * 70); |
|
el.style.width = `${newWidth}%`; |
|
}); |
|
|
|
|
|
const lastSync = document.getElementById('last-sync'); |
|
const minutesAgo = Math.floor(Math.random() * 5); |
|
lastSync.textContent = minutesAgo === 0 ? 'just now' : `${minutesAgo} min ago`; |
|
} |
|
}, 5000); |
|
}); |
|
</script> |
|
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=Maximelat/test" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> |
|
</html> |