Files
ai-workflow-skill/packages/repo-memory-runtime/cmd/repo-memory/execute.go
T

92 lines
1.5 KiB
Go

package main
import (
"fmt"
"io"
"os"
"strings"
"sync"
)
var (
executeMu sync.Mutex
commandStdout io.Writer = os.Stdout
commandStderr io.Writer = os.Stderr
)
func Execute(args []string, stdout, stderr io.Writer) int {
executeMu.Lock()
defer executeMu.Unlock()
prevStdout := commandStdout
prevStderr := commandStderr
commandStdout = stdout
commandStderr = stderr
defer func() {
commandStdout = prevStdout
commandStderr = prevStderr
}()
if len(args) < 1 {
usage()
return 2
}
if args[0] == "help" {
if len(args) == 1 {
usage()
return 0
}
if err := runCommand([]string{args[1], "--help"}); err != nil {
_, _ = fmt.Fprintln(commandStderr, err)
return 1
}
return 0
}
if isHelpToken(args[0]) {
usage()
return 0
}
if err := runCommand(args); err != nil {
_, _ = fmt.Fprintln(commandStderr, err)
return 1
}
return 0
}
func isHelpToken(value string) bool {
switch strings.TrimSpace(value) {
case "-h", "--help":
return true
default:
return false
}
}
func runCommand(args []string) error {
switch args[0] {
case "init":
return runInit(args[1:])
case "add":
return runAdd(args[1:])
case "ingest":
return runIngest(args[1:])
case "search":
return runSearch(args[1:])
case "list":
return runList(args[1:])
case "events":
return runEvents(args[1:])
case "link":
return runLink(args[1:])
case "verify":
return runVerify(args[1:])
case "repos":
return runRepos(args[1:])
default:
usage()
return fmt.Errorf("unknown command %s", args[0])
}
}