Files
Elydora-Go-SDK/cmd/elydora/plugins/grok_io.go
T
雷电芽衣 34ff4c1ea8 chore(go): audit providers kimi grok qwen letta
Move Kimi, Grok, and Qwen onto managed_runtime.go and shell_command.go;
share the encoded and shell command builders and the quoted Windows
legacy parser with Droid; split managed_changes.go; dedupe Letta's hook
entry filtering and stop swallowing settings read errors.

Claude-Session: https://claude.ai/code/session_01Agoc9bRVE9KL7mmWtey9Vq
2026-09-03 02:16:58 -04:00

102 lines
2.1 KiB
Go

package plugins
import (
"fmt"
"os"
"path/filepath"
)
func grokHomePath() (string, error) {
configured := os.Getenv("GROK_HOME")
if configured == "" {
home, err := os.UserHomeDir()
if err != nil {
return "", fmt.Errorf("resolve home directory: %w", err)
}
return filepath.Join(home, ".grok"), nil
}
home, err := filepath.Abs(configured)
if err != nil {
return "", fmt.Errorf("resolve GROK_HOME at %s: %w", configured, err)
}
return home, nil
}
func grokConfigPath() (string, error) {
home, err := grokHomePath()
if err != nil {
return "", err
}
return filepath.Join(home, "hooks", grokConfigFile), nil
}
func readGrokDocument() (*grokDocument, error) {
configPath, err := grokConfigPath()
if err != nil {
return nil, err
}
home := filepath.Dir(filepath.Dir(configPath))
if _, err := managedPhysicalDirectoryExists(home, "Grok home directory"); err != nil {
return nil, err
}
hooksDirectory := filepath.Dir(configPath)
if _, err := managedPhysicalDirectoryExists(
hooksDirectory,
"Grok hooks directory",
); err != nil {
return nil, err
}
snapshot, err := readManagedFile(
configPath,
"Grok user hooks",
maxManagedSourceBytes,
)
if err != nil {
return nil, err
}
if snapshot == nil {
return createGrokDocument(configPath), nil
}
return parseGrokDocument(configPath, snapshot.contents)
}
func prepareRenderedGrokChange(
rendered *grokRenderedDocument,
) (*fileChange, error) {
if rendered == nil || !rendered.changed {
return nil, nil
}
return prepareSourceChange(
rendered.document.configPath,
"Grok user hooks",
rendered.document.raw,
rendered.document.exists,
rendered.next,
0600,
rendered.remove,
)
}
func writeGrokChanges(
changes []*fileChange,
label string,
rename renameFunc,
runtimeRoot string,
agentDirectory string,
hooksDirectory string,
) error {
if !hasFileChanges(changes) {
return nil
}
if err := ensureManagedDirectory(
filepath.Dir(hooksDirectory),
"Grok home directory",
); err != nil {
return err
}
return writeManagedChanges(
changes, label, rename, runtimeRoot, agentDirectory,
hooksDirectory, "Grok hooks directory",
)
}