Initial commit on Forgejo
Fresh repository history for elektrine/tarakan-client hosted at https://git.elektrine.com/elektrine/tarakan-client.
This commit is contained in:
commit
58b29a7f84
70 changed files with 12994 additions and 0 deletions
43
internal/headless/headless.go
Normal file
43
internal/headless/headless.go
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
package headless
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
"github.com/atomine-elektrine/tarakan-client/internal/agent"
|
||||
repoctx "github.com/atomine-elektrine/tarakan-client/internal/context"
|
||||
"github.com/atomine-elektrine/tarakan-client/internal/reviewdoc"
|
||||
)
|
||||
|
||||
type Event struct {
|
||||
Type string `json:"type"`
|
||||
Repository *repoctx.Info `json:"repository,omitempty"`
|
||||
Agent *agent.Provider `json:"agent,omitempty"`
|
||||
Content string `json:"content,omitempty"`
|
||||
Error string `json:"error,omitempty"`
|
||||
}
|
||||
|
||||
func Run(ctx context.Context, output io.Writer, repository repoctx.Info, provider agent.Provider, prompt string) error {
|
||||
encoder := json.NewEncoder(output)
|
||||
if err := encoder.Encode(Event{Type: "session.started", Repository: &repository, Agent: &provider}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
content, err := agent.Run(ctx, provider, agent.Request{
|
||||
Prompt: reviewdoc.FreeformPrompt(prompt),
|
||||
Directory: repository.Root,
|
||||
})
|
||||
if err != nil {
|
||||
encodeErr := encoder.Encode(Event{Type: "session.error", Agent: &provider, Content: content, Error: err.Error()})
|
||||
if encodeErr != nil {
|
||||
return encodeErr
|
||||
}
|
||||
return err
|
||||
}
|
||||
if err := encoder.Encode(Event{Type: "session.completed", Agent: &provider, Content: content}); err != nil {
|
||||
return fmt.Errorf("encode result: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue