summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authoradamdottv <[email protected]>2025-07-08 13:02:13 -0500
committeradamdottv <[email protected]>2025-07-08 13:02:13 -0500
commitf31cbf2744cd14e5350d054e78d047a36b218f6c (patch)
treef9620381c804255d71d78893a0d736c2f74a5e60
parent8322f18e0339fa015346c6700b4e71d2b193b402 (diff)
downloadopencode-f31cbf2744cd14e5350d054e78d047a36b218f6c.tar.gz
opencode-f31cbf2744cd14e5350d054e78d047a36b218f6c.zip
fix: image reading
-rw-r--r--packages/opencode/src/session/index.ts4
-rw-r--r--packages/opencode/src/tool/read.txt2
-rw-r--r--packages/tui/internal/components/chat/editor.go16
-rw-r--r--packages/tui/sdk/packages/ssestream/ssestream.go2
4 files changed, 16 insertions, 8 deletions
diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts
index 41454307c..ed9dff24a 100644
--- a/packages/opencode/src/session/index.ts
+++ b/packages/opencode/src/session/index.ts
@@ -372,11 +372,11 @@ export namespace Session {
return [
{
type: "text",
- text: ["Called the Read tool on " + url.pathname].join("\n"),
+ text: `Called the Read tool with the following input: {\"filePath\":\"${url.pathname}\"}`,
},
{
type: "file",
- url: `data:${part.mime};base64,` + Buffer.from(await file.bytes()).toString("base64url"),
+ url: `data:${part.mime};base64,` + Buffer.from(await file.bytes()).toString("base64"),
mime: part.mime,
filename: part.filename!,
},
diff --git a/packages/opencode/src/tool/read.txt b/packages/opencode/src/tool/read.txt
index d1bf8c5d9..be9e9e0c3 100644
--- a/packages/opencode/src/tool/read.txt
+++ b/packages/opencode/src/tool/read.txt
@@ -2,7 +2,7 @@ Reads a file from the local filesystem. You can access any file directly by usin
Assume this tool is able to read all files on the machine. If the User provides a path to a file assume that path is valid. It is okay to read a file that does not exist; an error will be returned.
Usage:
-- The file_path parameter must be an absolute path, not a relative path
+- The filePath parameter must be an absolute path, not a relative path
- By default, it reads up to 2000 lines starting from the beginning of the file
- You can optionally specify a line offset and limit (especially handy for long files), but it's recommended to read the whole file by not providing these parameters
- Any lines longer than 2000 characters will be truncated
diff --git a/packages/tui/internal/components/chat/editor.go b/packages/tui/internal/components/chat/editor.go
index cc31fbef2..82b3bf71e 100644
--- a/packages/tui/internal/components/chat/editor.go
+++ b/packages/tui/internal/components/chat/editor.go
@@ -104,13 +104,19 @@ func (m *editorComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
}
base64EncodedFile := base64.StdEncoding.EncodeToString(fileBytes)
url := fmt.Sprintf("data:%s;base64,%s", mediaType, base64EncodedFile)
+ attachmentCount := len(m.textarea.GetAttachments())
+ attachmentIndex := attachmentCount + 1
+ label := "File"
+ if strings.HasPrefix(mediaType, "image/") {
+ label = "Image"
+ }
attachment := &textarea.Attachment{
ID: uuid.NewString(),
- Display: fmt.Sprintf("<%s>", filePath),
+ MediaType: mediaType,
+ Display: fmt.Sprintf("[%s #%d]", label, attachmentIndex),
URL: url,
Filename: filePath,
- MediaType: mediaType,
}
m.textarea.InsertAttachment(attachment)
m.textarea.InsertString(" ")
@@ -325,12 +331,14 @@ func (m *editorComponent) Clear() (tea.Model, tea.Cmd) {
func (m *editorComponent) Paste() (tea.Model, tea.Cmd) {
imageBytes := clipboard.Read(clipboard.FmtImage)
if imageBytes != nil {
+ attachmentCount := len(m.textarea.GetAttachments())
+ attachmentIndex := attachmentCount + 1
base64EncodedFile := base64.StdEncoding.EncodeToString(imageBytes)
attachment := &textarea.Attachment{
ID: uuid.NewString(),
- Display: "<clipboard-image>",
- Filename: "clipboard-image",
MediaType: "image/png",
+ Display: fmt.Sprintf("[Image #%d]", attachmentIndex),
+ Filename: fmt.Sprintf("image-%d.png", attachmentIndex),
URL: fmt.Sprintf("data:image/png;base64,%s", base64EncodedFile),
}
m.textarea.InsertAttachment(attachment)
diff --git a/packages/tui/sdk/packages/ssestream/ssestream.go b/packages/tui/sdk/packages/ssestream/ssestream.go
index 81adbd69b..87ab56f2c 100644
--- a/packages/tui/sdk/packages/ssestream/ssestream.go
+++ b/packages/tui/sdk/packages/ssestream/ssestream.go
@@ -29,7 +29,7 @@ func NewDecoder(res *http.Response) Decoder {
decoder = t(res.Body)
} else {
scn := bufio.NewScanner(res.Body)
- scn.Buffer(nil, bufio.MaxScanTokenSize<<4)
+ scn.Buffer(nil, (bufio.MaxScanTokenSize<<4)*10)
decoder = &eventStreamDecoder{rc: res.Body, scn: scn}
}
return decoder