Skip to content

PLAN-FNOS-032 OpenCode 辅助调用补齐会话头 ​

字段内容
计划编号PLAN-FNOS-032
计划日期2026-10-26
对应需求FNOS-032 OpenCode 辅助调用补齐会话头
计划状态阶段一、二、四完成,待真实会话验证(阶段三)

计划目标 ​

实现 FNOS-032 的两项功能:辅助调用不再因缺会话头中断(FNOS-032-01)、主对话会话头语义不变(FNOS-032-02)。

技术边界:只改 plugins/dsh-opencode-plugin/src/host/provider.ts 与其测试;不改 DSH 上游、不改自动审查插件、不改插件配置面。

当前实现与目标设计 ​

领域当前实现目标实现迁移影响
会话头注入pi-ai 的 withOpenCodeSessionHeader 仅在 options.sessionId 存在时注入在四个协议族外再包一层兜底:无会话身份时补稳定常量辅助调用不再 400;主对话仍用真实 id
兜底值稳定性无导出常量 OPENCODE_FALLBACK_SESSION_ID,固定字符串上游按会话路由/缓存语义不被随机值破坏
显式头调用方已设置时不重复注入大小写不敏感检测,已存在则不覆盖保持调用方控制权
可观测性无专项日志依托上游错误可读性;不新增日志面无新增噪声

交互重编排 ​

mermaid
sequenceDiagram
  participant L as DSH llm
  participant P as dsh-opencode
  participant H as 会话头兜底
  participant G as OpenCode Go
  L->>P: generate(无 sessionId 的辅助调用)
  P->>H: 检查 headers / sessionId
  alt 已有 x-opencode-session
    H-->>P: 原样保留
  else 有 sessionId
    H-->>P: 使用会话 id
  else 都没有
    H-->>P: 使用稳定兜底常量
  end
  P->>G: 请求带 x-opencode-session
  G-->>P: 200

分阶段任务 ​

阶段一:实现 ​

任务关联验收内容依赖验证
PLAN-FNOS-032-T01-01FNOS-032-01 / AC-01;FNOS-032-02 / AC-01、AC-02provider.ts 增加会话头常量与纯函数:大小写不敏感检测、sessionId 优先、缺失/空串用兜底值、已有头不覆盖无单测
PLAN-FNOS-032-T01-02FNOS-032-02 / AC-03四个协议族(openai-completions / openai-responses / anthropic-messages / google-generative-ai)统一包上兜底;保持 withWireModelId 与 pi-ai 现有注入顺序T01-01单测 + 代码走查

阶段二:包级验证 ​

任务关联验收内容依赖验证
PLAN-FNOS-032-T02-01全部单测覆盖:无 sessionId、有 sessionId、空串、已有头(大小写)、streamSimple 路径、原 options 不被修改T01-01、T01-02对应包 check 全绿
PLAN-FNOS-032-T02-02FNOS-032-02 / AC-04跑插件既有全部测试,确认主对话/目录/用量等行为无回归T02-01包级 check 全绿

阶段三:真实会话验证 ​

任务关联验收内容依赖验证
PLAN-FNOS-032-T03-01FNOS-032-01 / AC-02在 DSH Web 用 Auto 权限预设 + OpenCode 模型触发一次工具调用,确认不再出现 MissingSessionIDT02-02会话事件/界面记录回填测试文档

阶段四:文档与版本 ​

任务关联验收内容依赖验证
PLAN-FNOS-032-T04-01全部建立测试用例文档 docs/tests/FNOS-032-opencode-aux-session-header.md 并回填结果T03-01pnpm run check -- --sdd 与文档构建通过
PLAN-FNOS-032-T04-02全部状态回写(需求/计划/三个索引与 sidebar);版本按 fix 推进(待确认后执行)T04-01版本串一致;tag 只留本地

风险与回滚 ​

风险影响缓解
兜底值被所有无会话调用共用上游按会话缓存/路由收益下降仅用于无会话身份的辅助调用;普通对话仍用真实 id。若上游后续补 sessionId,本兜底自动不再生效
已有显式头被覆盖调用方定制失效大小写不敏感检测,存在即跳过
误把会话头用于其它供应商请求带多余头仅包在 dsh-opencode 的四个协议族内,不影响其它路由
上游 pi-ai 升级改变头名或注入逻辑兜底失效单测钉住行为;升级时 check 会暴露

回滚:删除 ensureOpenCodeSessionHeader 与四行包装即可恢复原行为,无数据迁移负担。

任务状态 ​

阶段状态
阶段一:实现已完成
阶段二:包级验证已完成(插件 207 条测试全绿)
阶段三:真实会话验证待执行(需更新本机插件后切 Auto 权限预设)
阶段四:文档与版本已完成(测试用例文档、状态回写与 v6.0.5 版本提交)

变更记录 ​

日期变更说明
2026-10-26建立计划依据 FNOS-032 建立四阶段任务;确定只改插件、固定兜底常量、不覆盖显式头
2026-10-26回填阶段一、二、四代码与单测完成(插件 207 条测试全绿);测试用例文档建立;版本推进到 v6.0.5。阶段三需在更新本机插件后切 Auto 权限预设验证

基于 VitePress 构建