summaryrefslogtreecommitdiffhomepage
path: root/packages/tui/internal/api
diff options
context:
space:
mode:
Diffstat (limited to 'packages/tui/internal/api')
-rw-r--r--packages/tui/internal/api/api.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/packages/tui/internal/api/api.go b/packages/tui/internal/api/api.go
new file mode 100644
index 000000000..b4d3adee2
--- /dev/null
+++ b/packages/tui/internal/api/api.go
@@ -0,0 +1,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
+ }
+}