diff --git a/Makefile b/Makefile
index 98473bd..d8990f2 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-all: build build_rd build_free build_rpylib run_free
+all: build build_rd build_free build_rpylib run
 
 # Variables for compiler and flags
 CC = gcc
diff --git a/indexer.h b/indexer.h
index dfc8837..2a2e33d 100644
--- a/indexer.h
+++ b/indexer.h
@@ -13,7 +13,15 @@
 
 static const char *extensions[] = {
     ".c", ".cpp", ".h", ".py", ".java", ".js", ".mk", ".html",
-    "Makefile", ".css", ".json", ".cs", ".csproj", ".sln", ".toml", ".rs"
+    "Makefile", ".css", ".json", ".cs", ".csproj", ".sln", ".toml", ".rs",
+    ".go", ".rb", ".swift", ".php", ".pl", ".sh", ".bash", ".sql",
+    ".xml", ".yaml", ".yml", ".kt", ".dart", ".scala", ".clj", ".asm",
+    ".m", ".r", ".lua", ".groovy", ".v", ".pas", ".d", ".f90", ".f95",
+    ".for", ".s", ".tcl", ".vhdl", ".verilog", ".coffee", ".less", ".scss",
+    ".ps1", ".psm1", ".cmd", ".bat", ".json5", ".cxx", ".cc", ".hpp",
+    ".hxx", ".inc", ".nsi", ".ninja", ".cmake", ".cmake.in", ".mk.in",
+    ".make", ".makefile", ".gyp", ".gypi", ".pro", ".qml", ".ui", ".wxs",
+    ".wxl", ".wxi", ".wxl", ".wxs", ".wxi", ".wxl", ".wxs", ".wxi"
 };
 static const size_t ext_count = sizeof(extensions) / sizeof(extensions[0]);
 
@@ -101,4 +109,4 @@ char *index_directory(const char *dir_path) {
     char *result = strdup(json_object_to_json_string(jarray));
     json_object_put(jarray);
     return result;
-}
+}
\ No newline at end of file
diff --git a/main.c b/main.c
index 39687a9..e82784d 100644
--- a/main.c
+++ b/main.c
@@ -139,6 +139,7 @@ void repl() {
         line = line_read("> ");
         if (!line || !*line) continue;
 
+
         if (!strncmp(line, "!dump", 5)) {
             printf("%s\n", message_json());
             continue;
@@ -218,7 +219,6 @@ void init() {
     line_init();
     auth_init();
     db_initialize();
-
     char *schema = db_get_schema();
     char payload[1024 * 1024] = {0};
     snprintf(payload, sizeof(payload),
diff --git a/messages.h b/messages.h
index 069d83b..683036e 100644
--- a/messages.h
+++ b/messages.h
@@ -28,7 +28,7 @@
 #include "json-c/json.h"
 #include "tools.h"
 #include <string.h>
-
+#include "db_utils.h"
 struct json_object *message_array = NULL;
 
 struct json_object *message_list() {
@@ -77,6 +77,9 @@ void message_add_object(json_object *message) {
   json_object_array_add(messages, message);
 }
 
+
+struct json_object *message_add(const char *role, const char *content);
+
 struct json_object *message_add(const char *role, const char *content) {
   struct json_object *messages = message_list();
   struct json_object *message = json_object_new_object();
diff --git a/rpylib.so b/rpylib.so
index 3595647..c59d3aa 100755
Binary files a/rpylib.so and b/rpylib.so differ
diff --git a/utils.h b/utils.h
index 8f50822..88f1cad 100644
--- a/utils.h
+++ b/utils.h
@@ -20,38 +20,77 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+
+
+#ifdef _WIN32
+#include <windows.h>
+#else
 #include <unistd.h>
-
-char *expand_home_directory(const char *path) {
-  if (path == NULL)
-    return NULL;
-
-  if (path[0] == '~' && path[1] == '/') {
-    const char *home_dir = getenv("HOME");
-    if (home_dir == NULL) {
+#include <limits.h>
 #include <pwd.h>
-#include <unistd.h>
-      struct passwd *pw = getpwuid(getuid());
-      if (pw == NULL)
-        return NULL;
-      home_dir = pw->pw_dir;
+#endif
+
+void get_current_directory() {
+    char buffer[PATH_MAX];
+
+#ifdef _WIN32
+    DWORD length = GetCurrentDirectory(PATH_MAX, buffer);
+    if (length > 0 && length < PATH_MAX) {
+        printf("Current Directory: %s\n", buffer);
+    } else {
+        printf("Error getting current directory.\n");
+    }
+#else
+    if (getcwd(buffer, sizeof(buffer)) != NULL) {
+        printf("Current Directory: %s\n", buffer);
+    } else {
+        perror("Error getting current directory");
+    }
+#endif
+}
+
+char* expand_home_directory(const char* path) {
+    if (path[0] != '~') {
+        return strdup(path); // Return the original path if it doesn't start with ~
     }
 
-    size_t home_len = strlen(home_dir);
-    size_t path_len = strlen(path) - 1;
-    char *expanded_path = malloc(home_len + path_len + 1);
+    char* home_dir;
 
-    if (expanded_path == NULL)
-      return NULL;
+#ifdef _WIN32
+    home_dir = getenv("USERPROFILE"); // Get home directory on Windows
+#else
+    struct passwd* pw = getpwuid(getuid());
+    home_dir = pw->pw_dir; // Get home directory on Linux
+#endif
 
-    strcpy(expanded_path, home_dir);
-    strcat(expanded_path, path + 1);
+    if (home_dir == NULL) {
+        return NULL; // Error getting home directory
+    }
 
+    // Allocate memory for the expanded path
+    size_t expanded_size = strlen(home_dir) + strlen(path);
+    char* expanded_path = (char *)malloc(expanded_size);
+    if (expanded_path == NULL) {
+        return NULL; // Memory allocation error
+    }
+
+    // Construct the expanded path
+    snprintf(expanded_path, expanded_size, "%s%s", home_dir, path + 1);
     return expanded_path;
-  } else {
-    return strdup(path);
-  }
 }
+
+unsigned long hash(const char *str) {
+    unsigned long hash = 5381; // Starting value
+    int c;
+
+    while ((c = *str++)) {
+        hash = ((hash << 5) + hash) + c; // hash * 33 + c
+    }
+
+    return hash;
+}
+
+
 char *read_file(const char *path) {
   char *expanded_path = expand_home_directory(path);
   FILE *file = fopen(expanded_path, "r");