Skip to content

resource.uri dropped when converting ACP resource` ContentBlock, hiding file source from LLM #32558

@xwxxwk

Description

@xwxxwk

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:**

  1. Select a line of text in any file in Zed, press Ctrl-L to add it to the dialog
  2. Send the selection to opencode via Zed's ACP integration
  3. 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


复现方式:

  1. 在 Zed 中任意文件中选中一段文本,按 Ctrl-L 添加到对话框
  2. 通过 Zed 的 ACP 功能将选中内容发送给 opencode
  3. 观察 LLM 回复

预期: LLM 应能识别源文件路径及行号
实际: LLM 仅看到纯文本,无法感知来源

Screenshot and/or share link

No response

Operating System

windows11

Terminal

zed

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions