fix: 2.0.15 — Claude Code edit/Bash tool流 + dashboard XSS收紧 + #84 proxy scope
三条线并发版:
1) Claude Code (VS Code 扩展) native Anthropic streaming 调 edit/Bash/Write
工具时, Cascade 上游会先发 arguments 再发 function.name, 老 translator
把首段 partial_json 丢了. AnthropicStreamTranslator.emitToolCallDelta
加 pendingArgs 缓冲, 等 id+name 到了再 flush, Claude Code 拿到完整 input.
pruneToolChoice 同时把指向被 strip 的 server-side tool 的 tool_choice
一起剔除, 否则上游 400.
2) Issue #84 chukangkang: dashboard windsurfLoginBatch() 引用 sibling
方法 windsurfLogin() 的局部变量 proxy, JS scope 跨不过去, 批量导入
catch 报 proxy is not defined. 从 PR #20 开始一直存在. 改用回调闭包
里的 item.proxy, getWindsurfProxyLabel 升级成 null/string/object 三态.
3) Dashboard system prompt 编辑器: key 不再直插 DOM id 与 onclick 字符串,
走 systemPromptDomId(key) = sp-\${encodeURIComponent(key).replace('%','_')},
DELETE 路径加 encodeURIComponent. runtime-config setSystemPrompts /
resetSystemPrompt 写入与删除都过 SYSTEM_PROMPT_KEYS 白名单.
附带:
- responses.js normalizeResponseTextFormat: 翻 OpenAI Responses API 的
text.format 到 chat response_format, 支持 flat 与 nested json_schema,
strict 默认 false (与 OpenAI 文档一致, 不再强制 strict 把宽 schema 拒了).
- chat.js / tool-emulation.js: emulateTools=false 时静默剥 Cascade <tool_call>
标签 (stripToolMarkupFromText), 不再 emit 工具调用. ToolCallStreamParser
加 parseToolCode/parseBareJson 选项.
测试: 251/251 passing. +9 新断言覆盖 tool_choice pruning, args-before-name
缓冲, JSON intent 只看最新 user turn, text.format 翻译, strict 默认值,
stripToolMarkupFromText 行为, dashboard systemPromptDomId 与 item.proxy
静态结构守卫.
Co-authored-by: ZLin98 <ZLin98@users.noreply.github.com> D
dwgx committed
c6c1ff24e9f16ae40112a63528479e1cab949186
Parent: d998451