api.go 809 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package api
  2. import (
  3. "context"
  4. "encoding/json"
  5. "log"
  6. tea "github.com/charmbracelet/bubbletea/v2"
  7. "github.com/sst/opencode-sdk-go"
  8. )
  9. type Request struct {
  10. Path string `json:"path"`
  11. Body json.RawMessage `json:"body"`
  12. }
  13. func Start(ctx context.Context, program *tea.Program, client *opencode.Client) {
  14. for {
  15. select {
  16. case <-ctx.Done():
  17. return
  18. default:
  19. var req Request
  20. if err := client.Get(ctx, "/tui/control/next", nil, &req); err != nil {
  21. log.Printf("Error getting next request: %v", err)
  22. continue
  23. }
  24. program.Send(req)
  25. }
  26. }
  27. }
  28. func Reply(ctx context.Context, client *opencode.Client, response interface{}) tea.Cmd {
  29. return func() tea.Msg {
  30. err := client.Post(ctx, "/tui/control/response", response, nil)
  31. if err != nil {
  32. return err
  33. }
  34. return nil
  35. }
  36. }