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

84 lines
2.2 KiB
Go

package agentcontext
import (
"encoding/json"
"fmt"
"os"
"strings"
hostservicespkg "github.com/tutti-os/tutti/packages/agent/daemon/internal/hostservices"
runtimepaths "github.com/tutti-os/tutti/packages/agent/daemon/internal/runtimepaths"
)
const ServiceGroup = "agent-context"
var DefaultAgentContextConfigPath = runtimepaths.Default().AgentPath("codex", "tutti", "current", "agent-context.json")
type ConfigInput struct {
RoomID string
CWD string
ConfigPath string
}
type Config struct {
SchemaVersion int `json:"schema_version"`
RoomID string `json:"room_id"`
WorkspaceID string `json:"workspace_id"`
ServiceGroup string `json:"service_group"`
Endpoint hostservicespkg.HostEndpoint `json:"endpoint"`
CWD string `json:"-"`
ConfigPath string `json:"-"`
}
func ResolveConfig(input ConfigInput) (Config, error) {
roomID := firstNonEmpty(strings.TrimSpace(input.RoomID), strings.TrimSpace(os.Getenv("TUTTI_WORKSPACE_ID")))
cwd := strings.TrimSpace(input.CWD)
configPath := firstNonEmpty(strings.TrimSpace(input.ConfigPath), strings.TrimSpace(os.Getenv("TUTTI_AGENT_CONTEXT_CONFIG")))
var cfg Config
if configPath != "" {
loaded, err := ReadConfig(configPath)
if err == nil {
cfg = loaded
}
}
if cfg.RoomID == "" && configPath == "" {
if loaded, err := ReadConfig(DefaultAgentContextConfigPath); err == nil {
cfg = loaded
configPath = DefaultAgentContextConfigPath
}
}
if roomID != "" {
cfg.RoomID = roomID
}
cfg.CWD = cwd
cfg.ConfigPath = configPath
if strings.TrimSpace(cfg.ServiceGroup) == "" {
cfg.ServiceGroup = ServiceGroup
}
return cfg, nil
}
func ReadConfig(path string) (Config, error) {
raw, err := os.ReadFile(path)
if err != nil {
return Config{}, fmt.Errorf("read agent context config: %w", err)
}
var cfg Config
if err := json.Unmarshal(raw, &cfg); err != nil {
return Config{}, fmt.Errorf("parse agent context config: %w", err)
}
cfg.ConfigPath = path
return cfg, nil
}
func firstNonEmpty(values ...string) string {
for _, value := range values {
if strings.TrimSpace(value) != "" {
return value
}
}
return ""
}