Initial commit on Forgejo
Some checks failed
CI and releases / Test and vet (push) Failing after 1s
CI and releases / Build release binaries (push) Has been skipped
CI and releases / Publish GitHub release (push) Has been skipped

Fresh repository history for elektrine/tarakan-client hosted at
https://git.elektrine.com/elektrine/tarakan-client.
This commit is contained in:
Maxfield Luke 2026-07-29 04:56:36 -04:00
commit 58b29a7f84
70 changed files with 12994 additions and 0 deletions

View 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
}