Repository navigation
fix(llm): 后台调用统一带固定 session id,OpenCode 路由不再 400 (#668) - #670
modusensus wants to merge 1 commit into
Conversation
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
|
No actionable comments were generated in the recent review. Walkthrough
Merge Risk:
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
背景
#668 报告:插件后台 LLM 调用走 OpenCode 路由必然 400(缺
x-opencode-session)。根因已核实:pi-ai 的
dist/providers/opencode-headers.js中withSessionHeader只在options.sessionId存在时注入该头;而本插件 7 处llm.stream调用全部没传sessionId。多数网关对此无声无息,OpenCode 直接 400。改动
新增
src/llm-session.js:BACKGROUND_SESSION_ID = "dsh-mneme"withBackgroundSession(options):options.sessionId已存在时原样返回不覆盖;否则浅拷贝补上固定标识7 个调用点全部经它包一层(
src/dream.js与src/dream/sleep.js各有本地streamText,改单点即覆盖全部 7 个 dream/sleep 相位;另五处src/index.js、src/summarize.js、src/pre-inject-gate.js、src/api.js、src/image-describe.js)。为什么固定标识而不是按 run id 派生:按 run id 会让网关把每次整理当一个新会话,限流按会话计数时更容易撞墙,排障时分不清来源层。固定一个既满足头部要求,也让网关侧能认出这是插件的后台流量。
为什么不覆盖宿主的真会话:注入链路上宿主可能带真实用户会话进来,那时换掉 id 等于伪造来源。
测试
test/llm-session.test.js6 条:填 id 且不改入参 / 已给真 id 不覆盖 / 容忍 undefined、null / 7 个调用点源码各含预期 needle /src全域不得再出现裸.stream(options)或.stream({ ...route,/ 常量就是"dsh-mneme"且长度 1–64。变异自证五轮,每处各自变红后复原:
src/dream.js接线src/image-describe.js接线src/summarize.js接线全量
npm test:3407 tests / 3406 pass / 0 fail / 1 skipped;node scripts/check-sync.js✓ 124 文件。兼容性
sessionId的调用路径行为不变llm_audit_logs.session_key仍为 NULL——那是另一件事)已知边界(本 PR 不修)
MissingSessionID0 条:当前宿主走 xdpool/workbuddy,不受影响。这条修的是换到 OpenCode 或其它严格网关时的硬失败group.ext),不在本 PR 范围Summary by CodeRabbit