SIGN IN SIGN UP

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