Cross platform file location and build

This commit is contained in:
Tim Jagenberg 2025-05-14 22:19:42 +02:00
parent 5b85423b45
commit f24309f182
3 changed files with 51 additions and 11 deletions

2
.gitignore vendored
View file

@ -1 +1 @@
memory-mcp build/

22
build.sh Executable file
View file

@ -0,0 +1,22 @@
#!/bin/bash
# Create a build directory if it doesn't exist
mkdir -p build
# Build for Linux
GOOS=linux GOARCH=amd64 go build -o build/memory-mcp-linux-amd64
echo "Built for Linux (amd64)"
# Build for Windows
GOOS=windows GOARCH=amd64 go build -o build/memory-mcp-windows-amd64.exe
echo "Built for Windows (amd64)"
# Build for macOS (Intel)
GOOS=darwin GOARCH=amd64 go build -o build/memory-mcp-darwin-amd64
echo "Built for macOS (Intel/amd64)"
# Build for macOS (Apple Silicon)
GOOS=darwin GOARCH=arm64 go build -o build/memory-mcp-darwin-arm64
echo "Built for macOS (Apple Silicon/arm64)"
echo "All builds completed successfully!"

38
main.go
View file

@ -25,24 +25,42 @@ type Memory struct {
// NewMemoryManager creates a new memory manager // NewMemoryManager creates a new memory manager
func NewMemoryManager() (*MemoryManager, error) { func NewMemoryManager() (*MemoryManager, error) {
// Get XDG_STATE_HOME or use default // Get application data directory in a cross-platform way
stateHome := os.Getenv("XDG_STATE_HOME") var appDataDir string
if stateHome == "" {
homeDir, err := os.UserHomeDir() // Try to get the directory based on OS-specific environment variables
if err != nil { if dir := os.Getenv("XDG_STATE_HOME"); dir != "" {
return nil, fmt.Errorf("failed to get home directory: %w", err) // Linux with XDG
appDataDir = filepath.Join(dir, "memory-mcp")
} else if dir := os.Getenv("APPDATA"); dir != "" {
// Windows
appDataDir = filepath.Join(dir, "memory-mcp")
} else if dir := os.Getenv("HOME"); dir != "" {
// macOS or Linux fallback
if _, err := os.Stat(filepath.Join(dir, "Library")); err == nil {
// macOS likely
appDataDir = filepath.Join(dir, "Library", "Application Support", "memory-mcp")
} else {
// Linux fallback
appDataDir = filepath.Join(dir, ".local", "state", "memory-mcp")
}
} else {
// Last resort, use current directory
var err error
appDataDir, err = os.Getwd()
if err != nil {
return nil, fmt.Errorf("failed to determine app data directory: %w", err)
} }
stateHome = filepath.Join(homeDir, ".local", "state")
} }
// Create directory if it doesn't exist // Create directory if it doesn't exist
err := os.MkdirAll(stateHome, 0755) err := os.MkdirAll(appDataDir, 0755)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to create state directory: %w", err) return nil, fmt.Errorf("failed to create app data directory: %w", err)
} }
return &MemoryManager{ return &MemoryManager{
filePath: filepath.Join(stateHome, "memories.txt"), filePath: filepath.Join(appDataDir, "memories.txt"),
}, nil }, nil
} }