初始化

This commit is contained in:
李琦
2026-08-11 19:07:05 +08:00
commit d2aeb13a09
94 changed files with 8704 additions and 0 deletions

45
platform/path.go Normal file
View File

@@ -0,0 +1,45 @@
// Package platform 封装操作系统差异,包括隐藏子进程和 WSL 路径转换。
package platform
import (
"errors"
"path/filepath"
"strings"
)
// PathDescriptor 是项目路径的标准描述。WindowsPath 用于 Go 文件扫描LinuxPath 用于 WSL 内 Git。
type PathDescriptor struct {
Original string
WindowsPath string
Distro string
LinuxPath string
WSL bool
}
// ResolvePath 识别两种 WSL UNC 前缀,并转换为 WSL 内部可识别的 Linux 绝对路径。
func ResolvePath(raw string) (PathDescriptor, error) {
p := filepath.Clean(strings.TrimSpace(raw))
if p == "" {
return PathDescriptor{}, errors.New("PATH_REQUIRED")
}
slash := strings.ReplaceAll(p, "/", "\\")
lower := strings.ToLower(slash)
prefix := ""
switch {
case strings.HasPrefix(lower, "\\\\wsl.localhost\\"):
prefix = "\\\\wsl.localhost\\"
case strings.HasPrefix(lower, "\\\\wsl$\\"):
prefix = "\\\\wsl$\\"
default:
return PathDescriptor{Original: raw, WindowsPath: p}, nil
}
rest := strings.TrimPrefix(slash, prefix)
parts := strings.Split(rest, "\\")
if len(parts) < 2 || parts[0] == "" {
return PathDescriptor{}, errors.New("WSL_PATH_INVALID")
}
distro := parts[0]
linux := "/" + strings.Join(parts[1:], "/")
canonical := "\\\\wsl.localhost\\" + distro + "\\" + strings.Join(parts[1:], "\\")
return PathDescriptor{Original: raw, WindowsPath: canonical, Distro: distro, LinuxPath: linux, WSL: true}, nil
}