Description
English Version
Title: resource.uri dropped when converting ACP resource ContentBlock, hiding file source from LLM
Problem: When an editor (e.g. Zed) sends a code selection via ACP, it uses a type: "resource" ContentBlock where resource.uri carries the file path (+ line range) and resource.text carries the selected text. However, contentBlockToParts() only extracts resource.text and discards resource.uri.
Root cause: packages/opencode/src/acp/content.ts:77-79
case "resource":
if ("text" in block.resource) {
return [{ type: "text", text: block.resource.text }] // ← resource.uri dropped
}
By contrast, both the resource_link type and the blob branch (lines 81-92) correctly use the URI — only the text branch ignores it entirely.
Impact: The LLM receives bare text with no source context, and session replays cannot trace back to the original file.
Suggested fix: In the text branch, check resource.uri. If it starts with file://, inject the file path (and #L line fragment) into the text content, e.g. [/path/file.md:12]\n{text}.
中文版
标题: ACP 中 resource类型的 ContentBlock 转换丢弃 resource.uri,LLM 无法获知文件来源
问题: 当编辑器(如 Zed)通过 ACP 发送代码选择时,使用 type: "resource" 的 ContentBlock,其中 resource.uri 携带文件路径(及行号)、resource.text 携带选中文本。但在 contentBlockToParts() 中,文本分支仅提取 resource.text,完全丢弃了 resource.uri。
根因文件: packages/opencode/src/acp/content.ts:77-79
case "resource":
if ("text" in block.resource) {
return [{ type: "text", text: block.resource.text }] // ← resource.uri 被丢弃
}
相比之下,resource_link 类型和第 81-92 行的 blob 分支均正确使用了 URI(分别构造 file part 和提取文件名),唯独文本分支忽略了 URI。
影响: LLM 收到的 PromptPart 只有纯文本,没有任何来源信息。会话回放也无法追溯原始位置。
建议修复: 在文本分支中检测 resource.uri,若为 file:// 前缀,将路径(及 #L fragment 中的行号)注入文本内容,例如 [/path/file.md:12]\n{文本}。
Plugins
/
OpenCode version
1.17.7
Steps to reproduce
To reproduce:**
- Select a line of text in any file in Zed, press
Ctrl-L to add it to the dialog
- Send the selection to opencode via Zed's ACP integration
- Observe the LLM response
Expected: The LLM can identify the source file path and line number
Actual: The LLM receives bare text with no source context
复现方式:
- 在 Zed 中任意文件中选中一段文本,按
Ctrl-L 添加到对话框
- 通过 Zed 的 ACP 功能将选中内容发送给 opencode
- 观察 LLM 回复
预期: LLM 应能识别源文件路径及行号
实际: LLM 仅看到纯文本,无法感知来源
Screenshot and/or share link
No response
Operating System
windows11
Terminal
zed
Description
English Version
Title:
resource.uridropped when converting ACPresourceContentBlock, hiding file source from LLMProblem: When an editor (e.g. Zed) sends a code selection via ACP, it uses a
type: "resource"ContentBlock whereresource.uricarries the file path (+ line range) andresource.textcarries the selected text. However,contentBlockToParts()only extractsresource.textand discardsresource.uri.Root cause:
packages/opencode/src/acp/content.ts:77-79By contrast, both the
resource_linktype and the blob branch (lines 81-92) correctly use the URI — only the text branch ignores it entirely.Impact: The LLM receives bare text with no source context, and session replays cannot trace back to the original file.
Suggested fix: In the text branch, check
resource.uri. If it starts withfile://, inject the file path (and#Lline fragment) into the text content, e.g.[/path/file.md:12]\n{text}.中文版
标题: ACP 中
resource类型的ContentBlock转换丢弃resource.uri,LLM 无法获知文件来源问题: 当编辑器(如 Zed)通过 ACP 发送代码选择时,使用
type: "resource"的 ContentBlock,其中resource.uri携带文件路径(及行号)、resource.text携带选中文本。但在contentBlockToParts()中,文本分支仅提取resource.text,完全丢弃了resource.uri。根因文件:
packages/opencode/src/acp/content.ts:77-79相比之下,
resource_link类型和第 81-92 行的 blob 分支均正确使用了 URI(分别构造 file part 和提取文件名),唯独文本分支忽略了 URI。影响: LLM 收到的 PromptPart 只有纯文本,没有任何来源信息。会话回放也无法追溯原始位置。
建议修复: 在文本分支中检测
resource.uri,若为file://前缀,将路径(及#Lfragment 中的行号)注入文本内容,例如[/path/file.md:12]\n{文本}。Plugins
/
OpenCode version
1.17.7
Steps to reproduce
To reproduce:**
Ctrl-Lto add it to the dialogExpected: The LLM can identify the source file path and line number
Actual: The LLM receives bare text with no source context
复现方式:
Ctrl-L添加到对话框预期: LLM 应能识别源文件路径及行号
实际: LLM 仅看到纯文本,无法感知来源
Screenshot and/or share link
No response
Operating System
windows11
Terminal
zed