Skip to content

feat(extensions): add OpenCode prompt command sources - #1586

Merged
limityan merged 1 commit into
GCWing:mainfrom
limityan:yanzhn/opencode-command-sources
Jul 16, 2026
Merged

feat(extensions): add OpenCode prompt command sources#1586
limityan merged 1 commit into
GCWing:mainfrom
limityan:yanzhn/opencode-command-sources

Conversation

@limityan

@limityan limityan commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

概述

  • 建立生态中立的外部来源契约与生命周期协调器,并以 OpenCode Prompt Command 完成首个端到端纵向切片。
  • 支持用户全局与项目级 OpenCode JSON/JSONC/Markdown command 的发现、覆盖、参数展开、刷新、删除与隔离降级。
  • Desktop 设置新增“外部 AI 应用”来源视图;CLI/TUI 可列出并执行受支持的 prompt-only command。
  • 更新外部 AI 来源、OpenCode 配置适配与渐进式 PR1/PR2/PR3 设计,后续 Codex、Claude Code 通过独立 adapter 接入。

产品体验

  • 首次发现后台运行且不阻塞普通聊天;完成前显示中性检查状态,未限定 slash command 不猜测冲突结果,显式 /builtin:<name> 仍可立即执行。
  • 无冲突的低风险 prompt command 可直接使用;与 BitFun 本地命令或独立 provider 同名时不静默接管。
  • 冲突由用户明确选择:候选未变化时只询问一次;更新、删除、恢复或参与集合变化后重新确认,即使只剩一个实现也不静默切换。
  • CLI 提供 /builtin:<name>/external:<name>/external:<provider>:<name>;键盘、鼠标与直接输入共用同一持久化确认路径。保存失败时只执行当前一次,并明确提示下次仍会询问。
  • 不支持的文件、shell、agent/model/variant/subtask 语义整条标为受限,不做部分执行;单条解析失败只影响该命令或来源,稳定删除会撤下新调用。
  • Remote workspace 明确返回不支持,不在本机误读远端项目配置。

架构与可靠性边界

  • product-domains 只定义开放生态 ID、来源限定身份、状态/诊断和 Prompt Command provider 契约。
  • assembly/external-sources 单点维护 provider-neutral 的代次、冲突谱系、抑制和降级规则,不按生态 ID 分支。
  • OpenCode 路径、格式、优先级和展开语义只存在于独立 adapter;Product Assembly 仅注册具体 adapter。
  • 全局偏好使用独立文件、跨进程锁、锁内读改写与严格同卷原子替换;写入失败保留旧文件。冲突偏好按执行域/命令族只保留当前指纹及去重候选身份,不随内容版本线性膨胀。
  • 单个 Markdown command 限制 256 KiB,单 provider 模板正文总量限制 8 MiB;Desktop IPC 只返回设置页摘要,不传输模板正文。
  • 本 PR 不新增通用任意 payload,也不接管 Tool/Subagent runtime;后续生态和能力分别进入独立 adapter 与既有能力 owner。

独立对抗性复审

  • 架构终审确认:严格原子替换无删除旧文件或直接覆盖 fallback;冲突规则只有协调器单一实现;Windows 文件细节没有上泄到产品层。
  • 产品终审确认:键盘/鼠标确认、保存失败降级、更新/删除/恢复及首次发现流程无阻塞问题;范围仍限定 OpenCode Prompt Command。
  • 两轮终审均未发现剩余 PR blocker 或产品边界膨胀。

验证

  • JSON 严格替换单测(1/1)与跨进程存储契约(4/4)
  • Product domain 契约(8/8)、外部来源协调器(7/7)、Core 外部来源(4/4)
  • OpenCode adapter(22/22)、文件观察契约(6/6)
  • CLI chat(11/11)与 command menu(13/13)
  • Desktop IPC 摘要(1/1)、Web 设置页 focused tests(6/6)与 pnpm run type-check:web
  • cargo check --workspace
  • i18n contract(37/37)与 pnpm run i18n:audit(0 warnings)
  • core boundary(15/15)、repo hygiene、git diff --check
  • pnpm run lint:web(0 errors;12 个既有 warnings)

当前范围

本 PR 不执行 OpenCode JS/TS Tool、Hook、MCP、Subagent 或 package plugin,也不声称完整 OpenCode 配置兼容。后续按设计中的 PR2 Tool、PR3 Subagent 渐进接入真实能力 owner,不修改本 PR 已稳定的来源契约与 adapter 边界。

非阻断后续

当前只注册 OpenCode 一个真实 provider;引入第二个真实生态前,为设置页补充“已解决冲突 / 更改选择”入口。当前 CLI 已可通过显式限定别名切换选择。

@limityan
limityan force-pushed the yanzhn/opencode-command-sources branch from 1f7f233 to c08bffa Compare July 16, 2026 17:05
@limityan
limityan merged commit 89519ee into GCWing:main Jul 16, 2026
5 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