summaryrefslogtreecommitdiffhomepage
path: root/packages/tui/internal/api
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-07-21 19:53:22 -0400
committerDax Raad <[email protected]>2025-07-21 19:53:58 -0400
commitf20ef61bc72ad830549c8a885f063b47e4a75557 (patch)
tree3232940032f5c8e2a25b036c0290b22dc407cb63 /packages/tui/internal/api
parent5611ef8b28216aa9dd2ceb6ed17d5779a29154f6 (diff)
downloadopencode-f20ef61bc72ad830549c8a885f063b47e4a75557.tar.gz
opencode-f20ef61bc72ad830549c8a885f063b47e4a75557.zip
wip: api for tui
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
+ }
+}