mirror of
https://github.com/cheikh2shift/godex.git
synced 2026-10-19 01:29:53 -05:00
Refactor main execution flow, clean up unused functions, and improve test readability
This commit is contained in:
1 parent
53a41cb943
commit
6829203b9d
11 files changed
+58
-89
No files matched your search
+9
-22
@@ -321,6 +321,15 @@ func main() {
|
||||
setter.SetStatusChannel(statusCh)
|
||||
}
|
||||
|
||||
if prompt != "" {
|
||||
err = runSinglePrompt(ctx, provider, prompt, autoConfirm, debugMode, servers)
|
||||
cleanup(servers)
|
||||
if err != nil {
|
||||
log.Fatalf("prompt failed: %v", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
sched, err = scheduler.NewDefault()
|
||||
if err != nil {
|
||||
log.Printf("[Scheduler] Failed to initialize: %v", err)
|
||||
@@ -354,17 +363,6 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println()
|
||||
|
||||
if prompt != "" {
|
||||
err = runSinglePrompt(ctx, provider, prompt, autoConfirm, debugMode, servers)
|
||||
cleanup(servers)
|
||||
if err != nil {
|
||||
log.Fatalf("prompt failed: %v", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Get working directory for session files
|
||||
wd, _ := os.Getwd()
|
||||
|
||||
@@ -1859,17 +1857,6 @@ func handleKill(servers []MCPServer, input string) {
|
||||
fmt.Println("No bash server found")
|
||||
}
|
||||
|
||||
func getToolDescription(servers []MCPServer, toolName string) string {
|
||||
for _, server := range servers {
|
||||
for _, tool := range server.Tools() {
|
||||
if tool.Name == toolName {
|
||||
return tool.Description
|
||||
}
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func handleListBg(servers []MCPServer) {
|
||||
for _, server := range servers {
|
||||
if bs, ok := server.(*mcp.BashServer); ok {
|
||||
|
||||
@@ -11,8 +11,8 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
maxTreeLines = 500
|
||||
treeCacheName = ".gtree"
|
||||
maxTreeLines = 500
|
||||
treeCacheName = ".gtree"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -81,7 +81,6 @@ func BuildTree(root string) (string, error) {
|
||||
return tree, nil
|
||||
}
|
||||
|
||||
|
||||
func loadGitignore(root string) *ignore.GitIgnore {
|
||||
path := filepath.Join(root, ".gitignore")
|
||||
data, err := os.ReadFile(path)
|
||||
|
||||
@@ -168,13 +168,13 @@ func (t *JobTracker) JobStatus(id string) (string, bool) {
|
||||
}
|
||||
|
||||
type BashServer struct {
|
||||
allowedPaths []string
|
||||
tools []Tool
|
||||
jobTracker *JobTracker
|
||||
autoConfirm bool
|
||||
mu sync.RWMutex
|
||||
failedMu sync.Mutex
|
||||
failedStarts []string
|
||||
allowedPaths []string
|
||||
tools []Tool
|
||||
jobTracker *JobTracker
|
||||
autoConfirm bool
|
||||
mu sync.RWMutex
|
||||
failedMu sync.Mutex
|
||||
failedStarts []string
|
||||
}
|
||||
|
||||
var (
|
||||
@@ -867,7 +867,6 @@ func (s *BashServer) SetAllowedPaths(paths []string) {
|
||||
|
||||
func (s *BashServer) AllowedPathsUpdated() {}
|
||||
|
||||
|
||||
// Aliases for backwards compatibility with main.go
|
||||
func (s *BashServer) ListBackground() (string, error) {
|
||||
return s.ListBackgroundJobs(), nil
|
||||
|
||||
@@ -39,13 +39,11 @@ func setProcessGroup(cmd *exec.Cmd) {
|
||||
cmd.SysProcAttr.CreationFlags |= syscall.CREATE_NEW_PROCESS_GROUP
|
||||
}
|
||||
|
||||
|
||||
// GetUnixTools returns an empty list on Windows (not supported)
|
||||
func GetUnixTools() []Tool {
|
||||
return []Tool{}
|
||||
}
|
||||
|
||||
|
||||
// HandleRunBashScript is not supported on Windows
|
||||
func (s *BashServer) HandleRunBashScript(ctx context.Context, args map[string]interface{}) (string, error) {
|
||||
return "", fmt.Errorf("run_bash_script is not supported on Windows")
|
||||
|
||||
@@ -27,9 +27,9 @@ func (f *fakeScheduler) AddTaskWithRepeat(prompt string, intervalSec int, runAt
|
||||
return &fakeTask{ID: "ABCD", Prompt: prompt, IntervalSec: intervalSec, RunAt: runAt, IsRepeating: isRepeating}, nil
|
||||
}
|
||||
|
||||
func (f *fakeScheduler) StopTask(id string) bool { return true }
|
||||
func (f *fakeScheduler) RemoveTask(id string) bool { return true }
|
||||
func (f *fakeScheduler) ListTasks() []interface{} { return nil }
|
||||
func (f *fakeScheduler) StopTask(id string) bool { return true }
|
||||
func (f *fakeScheduler) RemoveTask(id string) bool { return true }
|
||||
func (f *fakeScheduler) ListTasks() []interface{} { return nil }
|
||||
func (f *fakeScheduler) GetTask(id string) interface{} { return nil }
|
||||
|
||||
func TestSchedulerTool_RunOnceForcesNonRepeating(t *testing.T) {
|
||||
@@ -37,9 +37,9 @@ func TestSchedulerTool_RunOnceForcesNonRepeating(t *testing.T) {
|
||||
server := NewSchedulerServer(fs, nil)
|
||||
|
||||
_, err := server.CallTool(context.Background(), "scheduler", map[string]interface{}{
|
||||
"prompt": "hi",
|
||||
"interval_sec": float64(60),
|
||||
"run_once": true,
|
||||
"prompt": "hi",
|
||||
"interval_sec": float64(60),
|
||||
"run_once": true,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("CallTool: %v", err)
|
||||
|
||||
@@ -559,30 +559,30 @@ func (s *Scheduler) executeWithTools(ctx context.Context, task *ScheduledTask) (
|
||||
return finalResp, nil
|
||||
}
|
||||
|
||||
prevNoTool = false
|
||||
prevNoTool = false
|
||||
|
||||
var toolResults []string
|
||||
seenThisRound := make(map[string]bool)
|
||||
for _, tc := range toolCalls {
|
||||
toolName, ok := tc["name"].(string)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
args, ok := tc["arguments"].(map[string]interface{})
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
argsJSON, _ := json.Marshal(args)
|
||||
sig := fmt.Sprintf("%s:%s", toolName, string(argsJSON))
|
||||
if seenThisRound[sig] {
|
||||
continue
|
||||
}
|
||||
seenThisRound[sig] = true
|
||||
var toolResults []string
|
||||
seenThisRound := make(map[string]bool)
|
||||
for _, tc := range toolCalls {
|
||||
toolName, ok := tc["name"].(string)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
args, ok := tc["arguments"].(map[string]interface{})
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
argsJSON, _ := json.Marshal(args)
|
||||
sig := fmt.Sprintf("%s:%s", toolName, string(argsJSON))
|
||||
if seenThisRound[sig] {
|
||||
continue
|
||||
}
|
||||
seenThisRound[sig] = true
|
||||
|
||||
result, err := s.callTool(ctx, toolName, args, toolTimeout)
|
||||
if err != nil {
|
||||
toolResults = append(toolResults, fmt.Sprintf("ERROR: %v", err))
|
||||
} else {
|
||||
result, err := s.callTool(ctx, toolName, args, toolTimeout)
|
||||
if err != nil {
|
||||
toolResults = append(toolResults, fmt.Sprintf("ERROR: %v", err))
|
||||
} else {
|
||||
toolResults = append(toolResults, s.truncate(result, 2500))
|
||||
}
|
||||
}
|
||||
@@ -591,16 +591,16 @@ func (s *Scheduler) executeWithTools(ctx context.Context, task *ScheduledTask) (
|
||||
return finalResp, nil
|
||||
}
|
||||
|
||||
currentToolCalls := make(map[string]bool)
|
||||
for _, tc := range toolCalls {
|
||||
name, ok := tc["name"].(string)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
args := tc["arguments"]
|
||||
argsJSON, _ := json.Marshal(args)
|
||||
currentToolCalls[fmt.Sprintf("%s:%s", name, string(argsJSON))] = true
|
||||
currentToolCalls := make(map[string]bool)
|
||||
for _, tc := range toolCalls {
|
||||
name, ok := tc["name"].(string)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
args := tc["arguments"]
|
||||
argsJSON, _ := json.Marshal(args)
|
||||
currentToolCalls[fmt.Sprintf("%s:%s", name, string(argsJSON))] = true
|
||||
}
|
||||
|
||||
hasRepeatedCalls := false
|
||||
for sig := range currentToolCalls {
|
||||
@@ -838,12 +838,3 @@ type providerConfig struct {
|
||||
Name string `json:"name"`
|
||||
Model string `json:"model"`
|
||||
}
|
||||
|
||||
func GetProviderFromConfig(cfg *providerConfig) (interface{}, error) {
|
||||
if cfg == nil {
|
||||
return nil, fmt.Errorf("nil config")
|
||||
}
|
||||
|
||||
cfgJSON, _ := json.Marshal(cfg)
|
||||
return string(cfgJSON), nil
|
||||
}
|
||||
@@ -38,4 +38,3 @@ func TestScheduler_OnTaskFinishedCalled(t *testing.T) {
|
||||
t.Fatalf("expected callback called once, got %d", atomic.LoadInt32(&called))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ func (f *fakeLLMProvider) Send(ctx context.Context, prompt string) (string, erro
|
||||
return f.resp, nil
|
||||
}
|
||||
func (f *fakeLLMProvider) SetThinkCallback(cb func(string)) {}
|
||||
func (f *fakeLLMProvider) SupportsNativeToolCalls() bool { return false }
|
||||
func (f *fakeLLMProvider) SupportsNativeToolCalls() bool { return false }
|
||||
|
||||
type countingToolServer struct {
|
||||
name string
|
||||
@@ -32,8 +32,8 @@ type countingToolServer struct {
|
||||
calls int
|
||||
}
|
||||
|
||||
func (c *countingToolServer) Name() string { return c.name }
|
||||
func (c *countingToolServer) Tools() []mcp.Tool { return c.tools }
|
||||
func (c *countingToolServer) Name() string { return c.name }
|
||||
func (c *countingToolServer) Tools() []mcp.Tool { return c.tools }
|
||||
func (c *countingToolServer) CallTool(ctx context.Context, name string, args map[string]interface{}) (string, error) {
|
||||
c.calls++
|
||||
return "ok", nil
|
||||
@@ -78,4 +78,3 @@ func TestExecuteWithTools_DedupesIdenticalToolCallsInOneResponse(t *testing.T) {
|
||||
t.Fatalf("expected 1 tool execution, got %d", server.calls)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,4 +71,3 @@ func TestScheduler_DefaultWDUsesProcessWD(t *testing.T) {
|
||||
t.Fatalf("expected scheduler wd to default to process wd %q, got %q", pwd, s.wd)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -367,4 +367,3 @@ func parseToolArgs(data map[string]interface{}) map[string]interface{} {
|
||||
}
|
||||
return make(map[string]interface{})
|
||||
}
|
||||
|
||||
@@ -46,4 +46,3 @@ func TestExtractAllToolCalls_JSONArray(t *testing.T) {
|
||||
t.Fatalf("expected 2 tool calls, got %d", len(calls))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user