(ctx context.Context, args *DeveloperAgentArgs)
| 47 | } |
| 48 | |
| 49 | func (t *DeveloperAgent) Handler(ctx context.Context, args *DeveloperAgentArgs) (*DeveloperAgentResult, error) { |
| 50 | // Generate the prompts |
| 51 | systemPrompt, err := t.systemPrompt() |
| 52 | if err != nil { |
| 53 | return nil, err |
| 54 | } |
| 55 | userPrompt, err := t.userPrompt(ctx, args) |
| 56 | if err != nil { |
| 57 | return nil, err |
| 58 | } |
| 59 | |
| 60 | // Pre-invoke some tool calls |
| 61 | s := GetSession(ctx) |
| 62 | _, err = s.CallTool(ctx, RoleAssistant, ListFilesName, nil, &ListFilesArgs{}) |
| 63 | if err != nil { |
| 64 | return nil, err |
| 65 | } |
| 66 | _, err = s.CallTool(ctx, RoleAssistant, ProjectStatusName, nil, &ProjectStatusArgs{}) |
| 67 | if err != nil { |
| 68 | return nil, err |
| 69 | } |
| 70 | if args.CurrentFilePath != "" { |
| 71 | _, _ = s.CallTool(ctx, RoleAssistant, ReadFileName, nil, &ReadFileArgs{ |
| 72 | Path: args.CurrentFilePath, |
| 73 | }) |
| 74 | if ctx.Err() != nil { // Ignore tool error since the file may not exist |
| 75 | return nil, ctx.Err() |
| 76 | } |
| 77 | } |
| 78 | |
| 79 | // Build initial completion messages |
| 80 | messages := []*aiv1.CompletionMessage{NewTextCompletionMessage(RoleSystem, systemPrompt)} |
| 81 | messages = append(messages, s.NewCompletionMessages(s.MessagesWithResults(FilterByType(MessageTypeCall), FilterByTool(DeveloperAgentName)))...) |
| 82 | messages = append(messages, NewTextCompletionMessage(RoleUser, userPrompt)) |
| 83 | messages = append(messages, s.NewCompletionMessages(s.MessagesWithResults(FilterByParent(s.ParentID)))...) |
| 84 | |
| 85 | // Run an LLM tool call loop |
| 86 | var response string |
| 87 | err = s.Complete(ctx, "Developer loop", &response, &CompleteOptions{ |
| 88 | Messages: messages, |
| 89 | Tools: []string{ |
| 90 | ProjectStatusName, |
| 91 | ListFilesName, |
| 92 | SearchFilesName, |
| 93 | ReadFileName, |
| 94 | ListBucketsName, |
| 95 | ListBucketObjectsName, |
| 96 | ListTablesName, |
| 97 | ShowTableName, |
| 98 | QuerySQLName, |
| 99 | DevelopFileName, |
| 100 | NavigateName, |
| 101 | }, |
| 102 | MaxIterations: 20, |
| 103 | UnwrapCall: true, |
| 104 | }) |
| 105 | if err != nil { |
| 106 | return nil, err |
nothing calls this directly
no test coverage detected