Skip to content

feat(extensions): add OpenCode workspace references - #1940

Merged
limityan merged 1 commit into
GCWing:mainfrom
limityan:yanzhn/opencode-workspace-references
Jul 31, 2026
Merged

feat(extensions): add OpenCode workspace references#1940
limityan merged 1 commit into
GCWing:mainfrom
limityan:yanzhn/opencode-workspace-references

Conversation

@limityan

Copy link
Copy Markdown
Collaborator

摘要

  • 增加 OpenCode 本地 Workspace References 兼容:解析 references/旧 reference 的 path、description、hidden,并保持确定性的 alias 覆盖语义。
  • 复用现有 Workspace 关联目录与 @ 目录选择器,形成单一 native-first 有效目录快照;原生关联目录继续由 Workspace owner 管理,外部声明只读展示。
  • 将 Reference 接入现有 External Source discovery lane、策略、抑制、watch 与 last-valid 生命周期,没有新增第二套 Workspace/扫描/权限系统。

设计取舍

  • 来源优先级按本地审计的 OpenCode Core V2 e4bd9757 固定:OPENCODE_CONFIG_DIR 替换默认全局根,随后依次应用 project direct root-to-nearest 与 project .opencode root-to-nearest;高优先级无效/Git entry 不回退到低优先级同 alias。
  • BitFun 原生 WorkspaceInfo.related_paths 始终在外部引用之前;不同 alias 即使指向同一路径也保留,因为 alias 是用户可见身份。
  • DiscoverOnly 可发现但不进入有效目录;仅 Auto/AskBeforeUse 能投影到消费点。
  • 声明路径可以尚未创建;只 watch 配置来源,不为目标目录再造生命周期。

安全与范围

  • Reference 不自动进入 Agent Prompt,也不授予工作区外文件权限;只有用户在现有选择器中显式导航/选择后,才沿用既有权限裁决。
  • Desktop 将 workspaceId 与注册根绑定;worktree 例外由服务端实时解析 live Git repository identity,缓存中的 stale/prunable 路径不能授权扫描。
  • 配置枚举仅把 NotFound 当作缺失,权限/其他 metadata 错误按 transient 处理并保留 last-valid。
  • 限制配置文件 1 MiB、引用 1024、诊断 256(含截断汇总)。
  • 明确不实现 Git/Remote reference、下载/缓存或任何 Plugin Host Runtime 临时路径。

验证

  • cargo check --workspace
  • OpenCode Workspace Reference:9/9
  • Product contract:3/3;Reference coordinator:2/2
  • live/stale worktree identity:1/1;Desktop workspace reference policy:3/3
  • pnpm run type-check:web;前端聚焦测试:26/26
  • pnpm run i18n:audit
  • Core boundary checker + self-test
  • repository hygiene、GitHub config、git diff --check

规模:单一 commit,44 files,+3314/-86

@limityan
limityan merged commit e2e60c3 into GCWing:main Jul 31, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant