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
84 lines
2.2 KiB
Go
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 ""
|
|
}
|