summaryrefslogtreecommitdiffhomepage
path: root/packages/tui/internal/api/api.go
blob: b4d3adee2df55445a72e881beb0c9fa8ad541159 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package api

import (
	"context"
	"encoding/json"
	"log"

	tea "github.com/charmbracelet/bubbletea/v2"
	"github.com/sst/opencode-sdk-go"
)

type Request struct {
	Path string          `json:"path"`
	Body json.RawMessage `json:"body"`
}

func Start(ctx context.Context, program *tea.Program, client *opencode.Client) {
	for {
		select {
		case <-ctx.Done():
			return
		default:
			var req Request
			if err := client.Get(ctx, "/tui/control/next", nil, &req); err != nil {
				log.Printf("Error getting next request: %v", err)
				continue
			}
			program.Send(req)
		}
	}
}

func Reply(ctx context.Context, client *opencode.Client, response interface{}) tea.Cmd {
	return func() tea.Msg {
		err := client.Post(ctx, "/tui/control/response", response, nil)
		if err != nil {
			return err
		}
		return nil
	}
}