feat: init sproutclaw-web — Go+Gin backend + React frontend
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
77
backend/internal/config/config.go
Normal file
77
backend/internal/config/config.go
Normal file
@@ -0,0 +1,77 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Port int
|
||||
AgentDir string
|
||||
PiCmd string // pi CLI 启动命令(完整路径)
|
||||
PiArgs []string
|
||||
|
||||
// 派生路径(从 AgentDir 推导)
|
||||
SessionsDir string
|
||||
SystemPromptFile string
|
||||
ModelsConfigFile string
|
||||
McpConfigFile string
|
||||
McpCacheFile string
|
||||
SettingsFile string
|
||||
SkillsDir string
|
||||
SkillsDisabledDir string
|
||||
ExtensionsDir string
|
||||
FrontendDist string // ../frontend/dist 相对于可执行文件
|
||||
}
|
||||
|
||||
func New() *Config {
|
||||
port := flag.Int("port", 19133, "HTTP port")
|
||||
agentDir := flag.String("agent-dir", "", "pi agent directory (e.g. /path/to/.pi/agent)")
|
||||
piCmd := flag.String("pi-cmd", "", "pi CLI executable path")
|
||||
flag.Parse()
|
||||
|
||||
if *agentDir == "" {
|
||||
// 默认值:当前目录的 .pi/agent
|
||||
cwd, _ := os.Getwd()
|
||||
*agentDir = filepath.Join(cwd, ".pi", "agent")
|
||||
}
|
||||
|
||||
cfg := &Config{
|
||||
Port: *port,
|
||||
AgentDir: *agentDir,
|
||||
PiCmd: *piCmd,
|
||||
}
|
||||
cfg.derivePaths()
|
||||
return cfg
|
||||
}
|
||||
|
||||
func (c *Config) derivePaths() {
|
||||
a := c.AgentDir
|
||||
c.SessionsDir = filepath.Join(a, "sessions")
|
||||
c.SystemPromptFile = filepath.Join(a, "AGENTS.md")
|
||||
c.ModelsConfigFile = filepath.Join(a, "models.json")
|
||||
c.McpConfigFile = filepath.Join(a, "mcp.json")
|
||||
c.McpCacheFile = filepath.Join(a, "mcp-cache.json")
|
||||
c.SettingsFile = filepath.Join(a, "settings.json")
|
||||
c.SkillsDir = filepath.Join(a, "skills")
|
||||
c.SkillsDisabledDir = filepath.Join(a, "skills-disabled")
|
||||
c.ExtensionsDir = filepath.Join(a, "extensions")
|
||||
|
||||
// frontend/dist 相对于二进制所在目录的上级
|
||||
exe, err := os.Executable()
|
||||
if err != nil {
|
||||
exe, _ = os.Getwd()
|
||||
}
|
||||
exeDir := filepath.Dir(exe)
|
||||
c.FrontendDist = filepath.Join(exeDir, "..", "frontend", "dist")
|
||||
}
|
||||
|
||||
func Platform() string {
|
||||
return runtime.GOOS
|
||||
}
|
||||
|
||||
func Arch() string {
|
||||
return runtime.GOARCH
|
||||
}
|
||||
Reference in New Issue
Block a user