feat: projeto buddie-chat - interface nativa linux para MCPs

- aplicação GTK4/Python para servidores MCP
- interface moderna com Libadwaita
- suporte OpenAI e OpenRouter
- configuração múltiplos MCPs
- chat em tempo real

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Emanuel Almeida
2025-09-12 01:42:29 +01:00
parent 042362677e
commit 48a3b98914
1027 changed files with 191388 additions and 3 deletions

43
src/main.ts Normal file
View File

@@ -0,0 +1,43 @@
/**
* Buddie Chat - Main Process
* Descomplicar® Crescimento Digital
* https://descomplicar.pt
*/
import { app, BrowserWindow } from 'electron';
import * as path from 'path';
function createWindow(): void {
const mainWindow = new BrowserWindow({
height: 800,
width: 1200,
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
nodeIntegration: false,
contextIsolation: true
}
});
// Load the index.html
mainWindow.loadFile(path.join(__dirname, '../dist/index.html'));
// Open DevTools in development
if (!app.isPackaged) {
mainWindow.webContents.openDevTools();
}
}
// App event handlers
app.whenReady().then(createWindow);
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});

47
src/renderer.ts Normal file
View File

@@ -0,0 +1,47 @@
/**
* Buddie Chat - Renderer Process
* Descomplicar® Crescimento Digital
* https://descomplicar.pt
*/
console.log('Buddie Chat Renderer iniciado');
// Inicializar interface do chat
document.addEventListener('DOMContentLoaded', () => {
const chatContainer = document.getElementById('chat-container');
const messageInput = document.getElementById('message-input') as HTMLInputElement;
const sendButton = document.getElementById('send-button');
if (sendButton && messageInput) {
sendButton.addEventListener('click', () => {
const message = messageInput.value.trim();
if (message) {
addMessage('user', message);
messageInput.value = '';
// Simular resposta do assistente (substituir por integração OpenAI)
setTimeout(() => {
addMessage('assistant', 'Olá! Sou o Buddie, seu assistente AI. Como posso ajudar?');
}, 1000);
}
});
messageInput.addEventListener('keypress', (e) => {
if (e.key === 'Enter') {
sendButton.click();
}
});
}
});
function addMessage(sender: 'user' | 'assistant', message: string): void {
const chatContainer = document.getElementById('chat-container');
if (!chatContainer) return;
const messageElement = document.createElement('div');
messageElement.className = `message ${sender}-message`;
messageElement.textContent = message;
chatContainer.appendChild(messageElement);
chatContainer.scrollTop = chatContainer.scrollHeight;
}