Files
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

54 lines
1.1 KiB
Go

package runtimepaths
import (
"os"
"path/filepath"
"strings"
)
const BundlePreloadSOPath = ""
type Paths struct {
root string
}
func Default() Paths {
return Paths{root: filepath.Join(defaultStateDir(), "agent")}
}
func (p Paths) AgentPath(parts ...string) string {
all := append([]string{p.root}, parts...)
return filepath.Join(all...)
}
func defaultStateDir() string {
if override := strings.TrimSpace(os.Getenv("TUTTI_STATE_DIR")); override != "" {
return override
}
homeDir, err := os.UserHomeDir()
if err != nil || strings.TrimSpace(homeDir) == "" {
if IsDevelopmentEnv() {
return ".tutti-dev"
}
return ".tutti"
}
dirName := ".tutti"
if IsDevelopmentEnv() {
dirName = ".tutti-dev"
}
return filepath.Join(homeDir, dirName)
}
// IsDevelopmentEnv reports whether this process runs against the development
// state root, which also selects the development Tutti CLI binary name.
func IsDevelopmentEnv() bool {
switch strings.ToLower(strings.TrimSpace(os.Getenv("TUTTI_ENV"))) {
case "dev", "development", "local":
return true
default:
return false
}
}