diff --git a/ui/client-app/src/App.js b/ui/client-app/src/App.js
index 8a9f0d9..ae36ee6 100644
--- a/ui/client-app/src/App.js
+++ b/ui/client-app/src/App.js
@@ -2,6 +2,7 @@
import Navbar from "./components/Navbar";
import HomePage from "./pages/HomePage"; // Import the new HomePage
import VoiceChatPage from "./pages/VoiceChatPage";
+import CodingAssistantPage from "./pages/CodingAssistantPage";
import LoginPage from "./pages/LoginPage";
const Icon = ({ path, onClick, className }) => (
@@ -34,6 +35,8 @@
return ;
case "voice-chat":
return ;
+ case "coding-assistant" :
+ return
case "login":
return ;
default:
diff --git a/ui/client-app/src/App.js b/ui/client-app/src/App.js
index 8a9f0d9..ae36ee6 100644
--- a/ui/client-app/src/App.js
+++ b/ui/client-app/src/App.js
@@ -2,6 +2,7 @@
import Navbar from "./components/Navbar";
import HomePage from "./pages/HomePage"; // Import the new HomePage
import VoiceChatPage from "./pages/VoiceChatPage";
+import CodingAssistantPage from "./pages/CodingAssistantPage";
import LoginPage from "./pages/LoginPage";
const Icon = ({ path, onClick, className }) => (
@@ -34,6 +35,8 @@
return ;
case "voice-chat":
return ;
+ case "coding-assistant" :
+ return
case "login":
return ;
default:
diff --git a/ui/client-app/src/components/ChatArea.js b/ui/client-app/src/components/ChatArea.js
new file mode 100644
index 0000000..be3cf35
--- /dev/null
+++ b/ui/client-app/src/components/ChatArea.js
@@ -0,0 +1,57 @@
+// src/components/ChatArea.js
+import React, { useState, useRef, useEffect } from "react";
+import ChatWindow from "./ChatWindow";
+
+const ChatArea = ({ chatHistory, onSendMessage, isProcessing }) => {
+ const [inputValue, setInputValue] = useState("");
+ const inputRef = useRef(null);
+
+ const handleSendMessage = (e) => {
+ e.preventDefault();
+ if (inputValue.trim() !== "") {
+ onSendMessage(inputValue);
+ setInputValue("");
+ }
+ };
+
+ useEffect(() => {
+ if (inputRef.current) {
+ inputRef.current.focus();
+ }
+ }, [isProcessing]);
+
+ return (
+
+ {/* Chat history display area */}
+
+
+
+
+ {/* Message input and send button area */}
+
+
+ );
+};
+
+export default ChatArea;
\ No newline at end of file
diff --git a/ui/client-app/src/App.js b/ui/client-app/src/App.js
index 8a9f0d9..ae36ee6 100644
--- a/ui/client-app/src/App.js
+++ b/ui/client-app/src/App.js
@@ -2,6 +2,7 @@
import Navbar from "./components/Navbar";
import HomePage from "./pages/HomePage"; // Import the new HomePage
import VoiceChatPage from "./pages/VoiceChatPage";
+import CodingAssistantPage from "./pages/CodingAssistantPage";
import LoginPage from "./pages/LoginPage";
const Icon = ({ path, onClick, className }) => (
@@ -34,6 +35,8 @@
return ;
case "voice-chat":
return ;
+ case "coding-assistant" :
+ return
case "login":
return ;
default:
diff --git a/ui/client-app/src/components/ChatArea.js b/ui/client-app/src/components/ChatArea.js
new file mode 100644
index 0000000..be3cf35
--- /dev/null
+++ b/ui/client-app/src/components/ChatArea.js
@@ -0,0 +1,57 @@
+// src/components/ChatArea.js
+import React, { useState, useRef, useEffect } from "react";
+import ChatWindow from "./ChatWindow";
+
+const ChatArea = ({ chatHistory, onSendMessage, isProcessing }) => {
+ const [inputValue, setInputValue] = useState("");
+ const inputRef = useRef(null);
+
+ const handleSendMessage = (e) => {
+ e.preventDefault();
+ if (inputValue.trim() !== "") {
+ onSendMessage(inputValue);
+ setInputValue("");
+ }
+ };
+
+ useEffect(() => {
+ if (inputRef.current) {
+ inputRef.current.focus();
+ }
+ }, [isProcessing]);
+
+ return (
+
+ {/* Chat history display area */}
+
+
+
+
+ {/* Message input and send button area */}
+
+
+ );
+};
+
+export default ChatArea;
\ No newline at end of file
diff --git a/ui/client-app/src/components/CodeFolderAccess.js b/ui/client-app/src/components/CodeFolderAccess.js
new file mode 100644
index 0000000..37d4617
--- /dev/null
+++ b/ui/client-app/src/components/CodeFolderAccess.js
@@ -0,0 +1,42 @@
+// src/components/CodeFolderAccess.js
+import React from "react";
+
+const CodeFolderAccess = ({ selectedFolder, onSelectFolder }) => {
+ const handleFolderChange = async () => {
+ // This is a placeholder. In a real application, you would use a browser API
+ // or a desktop framework like Electron to access the file system.
+ // Example using the File System Access API (requires user gesture)
+ try {
+ const directoryHandle = await window.showDirectoryPicker();
+ const folderPath = directoryHandle.name; // Simplified path, you might get a full path in a real app
+ onSelectFolder(folderPath);
+ } catch (err) {
+ console.error("Failed to select directory:", err);
+ // You might want to handle user cancellation here
+ }
+ };
+
+ return (
+
+ {/* Button to trigger the folder selection dialog */}
+
+
+ {/* Display the selected folder path */}
+
+
+ Selected Folder:
+
+
+ {selectedFolder || "No folder selected"}
+
+
+
+ );
+};
+
+export default CodeFolderAccess;
\ No newline at end of file
diff --git a/ui/client-app/src/App.js b/ui/client-app/src/App.js
index 8a9f0d9..ae36ee6 100644
--- a/ui/client-app/src/App.js
+++ b/ui/client-app/src/App.js
@@ -2,6 +2,7 @@
import Navbar from "./components/Navbar";
import HomePage from "./pages/HomePage"; // Import the new HomePage
import VoiceChatPage from "./pages/VoiceChatPage";
+import CodingAssistantPage from "./pages/CodingAssistantPage";
import LoginPage from "./pages/LoginPage";
const Icon = ({ path, onClick, className }) => (
@@ -34,6 +35,8 @@
return ;
case "voice-chat":
return ;
+ case "coding-assistant" :
+ return
case "login":
return ;
default:
diff --git a/ui/client-app/src/components/ChatArea.js b/ui/client-app/src/components/ChatArea.js
new file mode 100644
index 0000000..be3cf35
--- /dev/null
+++ b/ui/client-app/src/components/ChatArea.js
@@ -0,0 +1,57 @@
+// src/components/ChatArea.js
+import React, { useState, useRef, useEffect } from "react";
+import ChatWindow from "./ChatWindow";
+
+const ChatArea = ({ chatHistory, onSendMessage, isProcessing }) => {
+ const [inputValue, setInputValue] = useState("");
+ const inputRef = useRef(null);
+
+ const handleSendMessage = (e) => {
+ e.preventDefault();
+ if (inputValue.trim() !== "") {
+ onSendMessage(inputValue);
+ setInputValue("");
+ }
+ };
+
+ useEffect(() => {
+ if (inputRef.current) {
+ inputRef.current.focus();
+ }
+ }, [isProcessing]);
+
+ return (
+
+ {/* Chat history display area */}
+
+
+
+
+ {/* Message input and send button area */}
+
+
+ );
+};
+
+export default ChatArea;
\ No newline at end of file
diff --git a/ui/client-app/src/components/CodeFolderAccess.js b/ui/client-app/src/components/CodeFolderAccess.js
new file mode 100644
index 0000000..37d4617
--- /dev/null
+++ b/ui/client-app/src/components/CodeFolderAccess.js
@@ -0,0 +1,42 @@
+// src/components/CodeFolderAccess.js
+import React from "react";
+
+const CodeFolderAccess = ({ selectedFolder, onSelectFolder }) => {
+ const handleFolderChange = async () => {
+ // This is a placeholder. In a real application, you would use a browser API
+ // or a desktop framework like Electron to access the file system.
+ // Example using the File System Access API (requires user gesture)
+ try {
+ const directoryHandle = await window.showDirectoryPicker();
+ const folderPath = directoryHandle.name; // Simplified path, you might get a full path in a real app
+ onSelectFolder(folderPath);
+ } catch (err) {
+ console.error("Failed to select directory:", err);
+ // You might want to handle user cancellation here
+ }
+ };
+
+ return (
+
+ {/* Button to trigger the folder selection dialog */}
+
+
+ {/* Display the selected folder path */}
+
+
+ Selected Folder:
+
+
+ {selectedFolder || "No folder selected"}
+
+
+
+ );
+};
+
+export default CodeFolderAccess;
\ No newline at end of file
diff --git a/ui/client-app/src/components/InteractionLog.js b/ui/client-app/src/components/InteractionLog.js
new file mode 100644
index 0000000..4057b18
--- /dev/null
+++ b/ui/client-app/src/components/InteractionLog.js
@@ -0,0 +1,40 @@
+// src/components/InteractionLog.js
+import React from "react";
+
+const InteractionLog = ({ logs }) => {
+ return (
+
+ );
+};
+
+export default InteractionLog;
\ No newline at end of file
diff --git a/ui/client-app/src/App.js b/ui/client-app/src/App.js
index 8a9f0d9..ae36ee6 100644
--- a/ui/client-app/src/App.js
+++ b/ui/client-app/src/App.js
@@ -2,6 +2,7 @@
import Navbar from "./components/Navbar";
import HomePage from "./pages/HomePage"; // Import the new HomePage
import VoiceChatPage from "./pages/VoiceChatPage";
+import CodingAssistantPage from "./pages/CodingAssistantPage";
import LoginPage from "./pages/LoginPage";
const Icon = ({ path, onClick, className }) => (
@@ -34,6 +35,8 @@
return ;
case "voice-chat":
return ;
+ case "coding-assistant" :
+ return
case "login":
return ;
default:
diff --git a/ui/client-app/src/components/ChatArea.js b/ui/client-app/src/components/ChatArea.js
new file mode 100644
index 0000000..be3cf35
--- /dev/null
+++ b/ui/client-app/src/components/ChatArea.js
@@ -0,0 +1,57 @@
+// src/components/ChatArea.js
+import React, { useState, useRef, useEffect } from "react";
+import ChatWindow from "./ChatWindow";
+
+const ChatArea = ({ chatHistory, onSendMessage, isProcessing }) => {
+ const [inputValue, setInputValue] = useState("");
+ const inputRef = useRef(null);
+
+ const handleSendMessage = (e) => {
+ e.preventDefault();
+ if (inputValue.trim() !== "") {
+ onSendMessage(inputValue);
+ setInputValue("");
+ }
+ };
+
+ useEffect(() => {
+ if (inputRef.current) {
+ inputRef.current.focus();
+ }
+ }, [isProcessing]);
+
+ return (
+
+ {/* Chat history display area */}
+
+
+
+
+ {/* Message input and send button area */}
+
+
+ );
+};
+
+export default ChatArea;
\ No newline at end of file
diff --git a/ui/client-app/src/components/CodeFolderAccess.js b/ui/client-app/src/components/CodeFolderAccess.js
new file mode 100644
index 0000000..37d4617
--- /dev/null
+++ b/ui/client-app/src/components/CodeFolderAccess.js
@@ -0,0 +1,42 @@
+// src/components/CodeFolderAccess.js
+import React from "react";
+
+const CodeFolderAccess = ({ selectedFolder, onSelectFolder }) => {
+ const handleFolderChange = async () => {
+ // This is a placeholder. In a real application, you would use a browser API
+ // or a desktop framework like Electron to access the file system.
+ // Example using the File System Access API (requires user gesture)
+ try {
+ const directoryHandle = await window.showDirectoryPicker();
+ const folderPath = directoryHandle.name; // Simplified path, you might get a full path in a real app
+ onSelectFolder(folderPath);
+ } catch (err) {
+ console.error("Failed to select directory:", err);
+ // You might want to handle user cancellation here
+ }
+ };
+
+ return (
+
+ {/* Button to trigger the folder selection dialog */}
+
+
+ {/* Display the selected folder path */}
+
+
+ Selected Folder:
+
+
+ {selectedFolder || "No folder selected"}
+
+
+
+ );
+};
+
+export default CodeFolderAccess;
\ No newline at end of file
diff --git a/ui/client-app/src/components/InteractionLog.js b/ui/client-app/src/components/InteractionLog.js
new file mode 100644
index 0000000..4057b18
--- /dev/null
+++ b/ui/client-app/src/components/InteractionLog.js
@@ -0,0 +1,40 @@
+// src/components/InteractionLog.js
+import React from "react";
+
+const InteractionLog = ({ logs }) => {
+ return (
+
+
+ {/* Message input and send button area */}
+
+
+ );
+};
+
+export default ChatArea;
\ No newline at end of file
diff --git a/ui/client-app/src/components/CodeFolderAccess.js b/ui/client-app/src/components/CodeFolderAccess.js
new file mode 100644
index 0000000..37d4617
--- /dev/null
+++ b/ui/client-app/src/components/CodeFolderAccess.js
@@ -0,0 +1,42 @@
+// src/components/CodeFolderAccess.js
+import React from "react";
+
+const CodeFolderAccess = ({ selectedFolder, onSelectFolder }) => {
+ const handleFolderChange = async () => {
+ // This is a placeholder. In a real application, you would use a browser API
+ // or a desktop framework like Electron to access the file system.
+ // Example using the File System Access API (requires user gesture)
+ try {
+ const directoryHandle = await window.showDirectoryPicker();
+ const folderPath = directoryHandle.name; // Simplified path, you might get a full path in a real app
+ onSelectFolder(folderPath);
+ } catch (err) {
+ console.error("Failed to select directory:", err);
+ // You might want to handle user cancellation here
+ }
+ };
+
+ return (
+
+ {/* Button to trigger the folder selection dialog */}
+
+
+ {/* Display the selected folder path */}
+
+
+ Selected Folder:
+
+
+ {selectedFolder || "No folder selected"}
+
+
+
+ );
+};
+
+export default CodeFolderAccess;
\ No newline at end of file
diff --git a/ui/client-app/src/components/InteractionLog.js b/ui/client-app/src/components/InteractionLog.js
new file mode 100644
index 0000000..4057b18
--- /dev/null
+++ b/ui/client-app/src/components/InteractionLog.js
@@ -0,0 +1,40 @@
+// src/components/InteractionLog.js
+import React from "react";
+
+const InteractionLog = ({ logs }) => {
+ return (
+
+
+ {/* Message input and send button area */}
+
+
+ );
+};
+
+export default ChatArea;
\ No newline at end of file
diff --git a/ui/client-app/src/components/CodeFolderAccess.js b/ui/client-app/src/components/CodeFolderAccess.js
new file mode 100644
index 0000000..37d4617
--- /dev/null
+++ b/ui/client-app/src/components/CodeFolderAccess.js
@@ -0,0 +1,42 @@
+// src/components/CodeFolderAccess.js
+import React from "react";
+
+const CodeFolderAccess = ({ selectedFolder, onSelectFolder }) => {
+ const handleFolderChange = async () => {
+ // This is a placeholder. In a real application, you would use a browser API
+ // or a desktop framework like Electron to access the file system.
+ // Example using the File System Access API (requires user gesture)
+ try {
+ const directoryHandle = await window.showDirectoryPicker();
+ const folderPath = directoryHandle.name; // Simplified path, you might get a full path in a real app
+ onSelectFolder(folderPath);
+ } catch (err) {
+ console.error("Failed to select directory:", err);
+ // You might want to handle user cancellation here
+ }
+ };
+
+ return (
+
+ {/* Button to trigger the folder selection dialog */}
+
+
+ {/* Display the selected folder path */}
+
+
+ Selected Folder:
+
+
+ {selectedFolder || "No folder selected"}
+
+
+
+ );
+};
+
+export default CodeFolderAccess;
\ No newline at end of file
diff --git a/ui/client-app/src/components/InteractionLog.js b/ui/client-app/src/components/InteractionLog.js
new file mode 100644
index 0000000..4057b18
--- /dev/null
+++ b/ui/client-app/src/components/InteractionLog.js
@@ -0,0 +1,40 @@
+// src/components/InteractionLog.js
+import React from "react";
+
+const InteractionLog = ({ logs }) => {
+ return (
+