Refactor main execution flow, clean up unused functions, and improve test readability

This commit is contained in:
Cheikh Seck committed 2026-04-19 09:41:38 +00:00
1 parent 53a41cb943
commit 6829203b9d
11 files changed
+58 -89

No files matched your search

+9 -22
View File
@@ -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 {
+2 -3
View File
@@ -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)
+7 -8
View File
@@ -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
-2
View File
@@ -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")
+6 -6
View File
@@ -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)
+31 -40
View File
@@ -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))
}
}
+3 -4
View File
@@ -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)
}
}
-1
View File
@@ -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)
}
}
-1
View File
@@ -367,4 +367,3 @@ func parseToolArgs(data map[string]interface{}) map[string]interface{} {
}
return make(map[string]interface{})
}
-1
View File
@@ -46,4 +46,3 @@ func TestExtractAllToolCalls_JSONArray(t *testing.T) {
t.Fatalf("expected 2 tool calls, got %d", len(calls))
}
}