summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authoradamdottv <[email protected]>2025-06-04 12:57:13 -0500
committeradamdottv <[email protected]>2025-06-04 12:57:17 -0500
commitf34a3b6f67ff3cf255a0a9e547da31fa0b5b8912 (patch)
tree105ab07ef6a0801119bbbb4dba244c82c077ad48
parent484c90ed0093139c853792b4b3bff76092ea2ea8 (diff)
downloadopencode-f34a3b6f67ff3cf255a0a9e547da31fa0b5b8912.tar.gz
opencode-f34a3b6f67ff3cf255a0a9e547da31fa0b5b8912.zip
wip: refactoring tui
-rw-r--r--packages/opencode/src/provider/provider.ts2
-rw-r--r--packages/tui/internal/app/app.go31
2 files changed, 19 insertions, 14 deletions
diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts
index af841bbd1..419554f66 100644
--- a/packages/opencode/src/provider/provider.ts
+++ b/packages/opencode/src/provider/provider.ts
@@ -59,7 +59,7 @@ export namespace Provider {
const AUTODETECT: Record<string, string[]> = {
anthropic: ["ANTHROPIC_API_KEY"],
openai: ["OPENAI_API_KEY"],
- google: ["GOOGLE_GENERATIVE_AI_API_KEY", "GEMINI_API_KEY"],
+ google: ["GOOGLE_GENERATIVE_AI_API_KEY"], // TODO: support GEMINI_API_KEY?
}
const state = App.state("provider", async () => {
diff --git a/packages/tui/internal/app/app.go b/packages/tui/internal/app/app.go
index ca57961d1..65b0217ce 100644
--- a/packages/tui/internal/app/app.go
+++ b/packages/tui/internal/app/app.go
@@ -117,6 +117,15 @@ type Attachment struct {
Content []byte
}
+func (a *App) IsBusy() bool {
+ for _, message := range a.Messages {
+ if message.Metadata.Time.Completed == nil {
+ return true
+ }
+ }
+ return false
+}
+
func (a *App) SaveConfig() {
config.SaveConfig(a.ConfigPath, a.Config)
}
@@ -143,7 +152,7 @@ func (a *App) InitializeProject(ctx context.Context) tea.Cmd {
if err != nil {
status.Error(err.Error())
}
- if response.StatusCode != 200 {
+ if response != nil && response.StatusCode != 200 {
status.Error(fmt.Sprintf("failed to initialize project: %d", response.StatusCode))
}
}()
@@ -157,27 +166,18 @@ func (a *App) MarkProjectInitialized(ctx context.Context) error {
slog.Error("Failed to mark project as initialized", "error", err)
return err
}
- if response.StatusCode != 200 {
+ if response != nil && response.StatusCode != 200 {
return fmt.Errorf("failed to initialize project: %d", response.StatusCode)
}
return nil
}
-func (a *App) IsBusy() bool {
- for _, message := range a.Messages {
- if message.Metadata.Time.Completed == nil {
- return true
- }
- }
- return false
-}
-
func (a *App) CreateSession(ctx context.Context) (*client.SessionInfo, error) {
resp, err := a.Client.PostSessionCreateWithResponse(ctx)
if err != nil {
return nil, err
}
- if resp.StatusCode() != 200 {
+ if resp != nil && resp.StatusCode() != 200 {
return nil, fmt.Errorf("failed to create session: %d", resp.StatusCode())
}
session := resp.JSON200
@@ -210,15 +210,20 @@ func (a *App) SendChatMessage(ctx context.Context, text string, attachments []At
parts := []client.MessagePart{part}
go func() {
- _, err := a.Client.PostSessionChat(ctx, client.PostSessionChatJSONRequestBody{
+ response, err := a.Client.PostSessionChat(ctx, client.PostSessionChatJSONRequestBody{
SessionID: a.Session.Id,
Parts: parts,
ProviderID: a.Provider.Id,
ModelID: a.Model.Id,
})
if err != nil {
+ slog.Error("Failed to send message", "error", err)
status.Error(err.Error())
}
+ if response != nil && response.StatusCode != 200 {
+ slog.Error("Failed to send message", "error", fmt.Sprintf("failed to send message: %d", response.StatusCode))
+ status.Error(fmt.Sprintf("failed to send message: %d", response.StatusCode))
+ }
}()
// The actual response will come through SSE