Files
Elydora-Go-SDK/cmd/elydora/plugins/claudecode_io.go
T
雷电芽衣 a7fc75bf6b chore(go): audit providers claudecode codex cursor gemini
Add managed_runtime.go (paths, config validation, identity, runtime file
changes, status checks) and shell_command.go (quoting, PowerShell
encoding, command parsing) and move the four providers onto them.

Claude-Session: https://claude.ai/code/session_01Agoc9bRVE9KL7mmWtey9Vq
2026-09-03 01:42:27 -04:00

74 lines
1.6 KiB
Go

package plugins
import (
"fmt"
"os"
"path/filepath"
)
func claudeConfigDirectory() (string, error) {
configured, exists := os.LookupEnv("CLAUDE_CONFIG_DIR")
if !exists {
home, err := os.UserHomeDir()
if err != nil {
return "", fmt.Errorf("resolve home directory: %w", err)
}
return filepath.Join(home, ".claude"), nil
}
resolved, err := filepath.Abs(configured)
if err != nil {
return "", fmt.Errorf("resolve CLAUDE_CONFIG_DIR at %s: %w", configured, err)
}
return resolved, nil
}
func claudeSettingsPath() (string, error) {
directory, err := claudeConfigDirectory()
if err != nil {
return "", err
}
return filepath.Join(directory, claudeConfigFile), nil
}
func readClaudeDocument() (*claudeDocument, error) {
filePath, err := claudeSettingsPath()
if err != nil {
return nil, err
}
if _, err := managedPhysicalDirectoryExists(
filepath.Dir(filePath),
"Claude Code configuration directory",
); err != nil {
return nil, err
}
snapshot, err := readManagedFile(
filePath,
"Claude Code user settings",
maxManagedSourceBytes,
)
if err != nil {
return nil, err
}
if snapshot == nil {
return createClaudeDocument(filePath), nil
}
return parseClaudeDocument(filePath, snapshot.contents)
}
func prepareRenderedClaudeChange(
rendered *claudeRenderedDocument,
) (*fileChange, error) {
if rendered == nil || !rendered.changed {
return nil, nil
}
return prepareSourceChange(
rendered.document.filePath,
"Claude Code user settings",
rendered.document.raw,
rendered.document.exists,
rendered.next,
0600,
rendered.remove,
)
}