Skip to content

Commit 8283f64

Browse files
committed
fix: add stdin pipe support for opencode CLI execution
1 parent c0772db commit 8283f64

2 files changed

Lines changed: 25 additions & 4 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ providers:
8888
model: "opencode/minimax-m2.5-free" # Uses opencode CLI - no API key needed
8989
fallback_models:
9090
- "opencode/minimax-m2.5-free"
91-
- "opencode/linng-2.6-flash-free"
91+
- "opencode/ling-2.6-flash-free"
9292
- "opencode/hy3-preview-free"
9393
- "opencode/nemotron-3-super-free"
9494
num_suggestions: 10

internal/provider/opencode.go

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,14 +138,35 @@ func (o *OpencodeProvider) runCLI(ctx context.Context, prompt string) (string, e
138138
candidates := opencodeModelCandidates(o.model, o.fallbackModels)
139139
var errors []string
140140
for _, model := range candidates {
141-
cmd := exec.CommandContext(ctx, "opencode", "run", "--model", model, "--", prompt)
141+
cmd := exec.CommandContext(ctx, "opencode", "run", "--model", model)
142+
143+
stdin, err := cmd.StdinPipe()
144+
if err != nil {
145+
errors = append(errors, fmt.Sprintf("%s: error creating stdin pipe: %v", model, err))
146+
continue
147+
}
142148

143149
var stdoutBuf, stderrBuf strings.Builder
144150
cmd.Stdout = &stdoutBuf
145151
cmd.Stderr = &stderrBuf
146152

147-
if err := cmd.Run(); err != nil {
148-
errors = append(errors, fmt.Sprintf("%s: %v: %s", model, err, strings.TrimSpace(stderrBuf.String())))
153+
if err := cmd.Start(); err != nil {
154+
errors = append(errors, fmt.Sprintf("%s: error starting opencode CLI: %v", model, err))
155+
continue
156+
}
157+
158+
_, writeErr := stdin.Write([]byte(prompt))
159+
stdin.Close()
160+
161+
waitErr := cmd.Wait()
162+
163+
if writeErr != nil {
164+
errors = append(errors, fmt.Sprintf("%s: error writing to opencode CLI stdin: %v", model, writeErr))
165+
continue
166+
}
167+
168+
if waitErr != nil {
169+
errors = append(errors, fmt.Sprintf("%s: %v: %s", model, waitErr, strings.TrimSpace(stderrBuf.String())))
149170
continue
150171
}
151172

0 commit comments

Comments
 (0)