import b4a from 'b4a'; import fs from 'fs'; const agentAvatarPath = './assets/agent.png'; let agentAvatar = ''; // Load the agent avatar once when the module is imported if (fs.existsSync(agentAvatarPath)) { const avatarBuffer = fs.readFileSync(agentAvatarPath); agentAvatar = `data:image/png;base64,${b4a.toString(avatarBuffer, 'base64')}`; } export default async function handleCommand(command, context) { const { eventEmitter, currentTopic, clearMessages, addMessage, joinRoom, leaveRoom, createRoom, listFiles, deleteFile, servePort } = context; console.log("Context received in handleCommand:", context); // Add logging const args = command.trim().split(' '); const cmd = args[0].toLowerCase(); const restArgs = args.slice(1).join(' '); console.log("Command received:", cmd); // Add logging console.log("Current topic:", currentTopic); // Add logging to check the current topic switch (cmd) { case '>clear': clearMessages(currentTopic); break; case '>ping': addMessage('LinkUp', 'pong', agentAvatar, currentTopic); break; case '>help': addMessage('LinkUp', 'Available commands:\n- >clear\n- >ping\n- >help\n- >join [topic]\n- >leave\n- >create [alias]\n- >list-files', agentAvatar, currentTopic); break; case '>join': if (restArgs) { await joinRoom(currentTopic, restArgs); } else { addMessage('LinkUp', 'Usage: >join [topic]', agentAvatar, currentTopic); } break; case '>leave': leaveRoom(currentTopic); break; case '>create': if (restArgs) { await createRoom(currentTopic, restArgs); } else { addMessage('LinkUp', 'Usage: >create [alias]', agentAvatar, currentTopic); } break; case '>list-files': const files = await listFiles(); const fileList = files.length > 0 ? files.map(file => `- ${file}`).join('\n') : 'No files available'; addMessage('LinkUp', `Available files:\n${fileList}`, agentAvatar, currentTopic); // Render the file list with delete buttons renderFileList(files, deleteFile, servePort); break; default: addMessage('LinkUp', `Unknown command: ${cmd}`, agentAvatar, currentTopic); console.log('Unknown command:', command); } } function renderFileList(files, deleteFile, servePort) { const container = document.querySelector('#messages'); if (!container) { console.error('Element #messages not found'); return; } const fileList = document.createElement('ul'); files.forEach(file => { const listItem = document.createElement('li'); const fileButton = document.createElement('button'); fileButton.textContent = file.trim(); fileButton.onclick = () => downloadFile(file.trim(), servePort); const deleteButton = document.createElement('button'); deleteButton.textContent = 'Delete'; deleteButton.onclick = async () => { await deleteFile(file); listItem.remove(); }; listItem.appendChild(fileButton); listItem.appendChild(deleteButton); fileList.appendChild(listItem); }); container.appendChild(fileList); } function downloadFile(filename, servePort) { const url = `http://localhost:${servePort}/files/${filename}`; const link = document.createElement('a'); link.href = url; link.download = filename; document.body.appendChild(link); link.click(); document.body.removeChild(link); }