Cross platform file location and build
This commit is contained in:
parent
5b85423b45
commit
f24309f182
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1 +1 @@
|
|||
memory-mcp
|
||||
build/
|
22
build.sh
Executable file
22
build.sh
Executable 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
38
main.go
|
@ -25,24 +25,42 @@ type Memory struct {
|
|||
|
||||
// NewMemoryManager creates a new memory manager
|
||||
func NewMemoryManager() (*MemoryManager, error) {
|
||||
// Get XDG_STATE_HOME or use default
|
||||
stateHome := os.Getenv("XDG_STATE_HOME")
|
||||
if stateHome == "" {
|
||||
homeDir, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get home directory: %w", err)
|
||||
// Get application data directory in a cross-platform way
|
||||
var appDataDir string
|
||||
|
||||
// Try to get the directory based on OS-specific environment variables
|
||||
if dir := os.Getenv("XDG_STATE_HOME"); dir != "" {
|
||||
// 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
|
||||
err := os.MkdirAll(stateHome, 0755)
|
||||
err := os.MkdirAll(appDataDir, 0755)
|
||||
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{
|
||||
filePath: filepath.Join(stateHome, "memories.txt"),
|
||||
filePath: filepath.Join(appDataDir, "memories.txt"),
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue