小海
8a5117bbb1
v2.7.4: 截断安全 + 代理续写禁用 + 日志提示词对比视图
...
- 截断时跳过工具解析,防止损坏的工具调用(写入半截文件)
- maxAutoContinue 默认 0,交由 Claude Code 原生续写
- 系统提示词身份声明清除(防 prompt injection 拒绝)
- 流式热身窗口 96→300 chars(拒绝检测前不释放文本)
- 日志查看器「提示词对比」视图:原始 vs Cursor 转换后
- 转换摘要面板:工具数/消息数/上下文大小一目了然
- 标题提取增强:通用 XML 标签清除 + 更多引导语过滤
2026-03-18 11:56:26 +08:00
小海
e6f3a06416
chore: 从版本控制中移除 .claude 本地配置
2026-03-18 10:37:04 +08:00
小海
59e9ef51c0
chore: 添加 CTF 测试脚本,更新 .gitignore
...
- 添加 e2e-ctf-bypass.mjs 和 e2e-ctf-proxy.mjs 测试脚本
- .gitignore: 忽略测试结果 JSON 文件 (test/*-results*.json)
- .gitignore: 忽略 .claude/ 本地配置目录
2026-03-18 10:36:08 +08:00
小海
8a6b11a4c7
perf: optimize prompt efficiency via A/B tested behaviorRules
...
- behaviorRules: append action-first directive reducing narration 37% (32%→20%)
\"Each response must be maximally efficient: omit preamble and planning text
when the next step is clear—go straight to the action block.\"
- Continuation suffix: shorten from ~180 chars to ~30 chars (83% token saving)
\"Based on the output above, continue working...\" → \"Continue with the next action.\"
- Add A/B test harnesses (e2e-prompt-ab.mjs, e2e-prompt-ab2.mjs) for future prompt tuning
Tested 4 variants × 17 scenarios. Candidate B won with:
- Narration ratio: 32% → 20%
- Response latency: 2372ms → 1795ms (↓24%)
- Zero over-action side effects
- 9/9 continuation scenarios passed
2026-03-18 10:34:38 +08:00
Xu Kang
af6449300f
Merge pull request #62 from majorcheng/main
...
Fix OpenAI stream usage in final chunk
2026-03-18 09:48:47 +08:00
小海
c06755c46c
perf: 早期中止拒绝检测 + 降低重试/续写上限 + 续写上下文截断
...
性能优化:
- sendCursorRequest 支持外部 AbortSignal,允许调用方提前中止流
- 工具模式 executeStream 在前 200-400 字符即检测拒绝,立即中止流
(原先等完整响应再检测,浪费 2-5s/次)
- MAX_REFUSAL_RETRIES 2→1,减少最差情况 API 调用次数
- maxAutoContinue 默认 3→2,减少续写开销
- 续写请求只发最后 2000 字符作为上下文(原先发完整响应,可能 10K+)
测试:
- 重写 perf-diag.mjs 公平对比:直连也使用相同 reframing 提示词
- 公平测试结果:代理平均 0.78x(比直连更快),无性能瓶颈
2026-03-18 09:46:36 +08:00
majorcheng
0768c52790
Merge branch '7836246:main' into main
2026-03-18 09:34:40 +08:00
majorcheng
ee8a7135dd
Fix OpenAI stream usage in final chunk
2026-03-18 09:19:37 +08:00
小海
18c90e0720
feat: 续写次数可配置 + 历史消息条数硬限制 ( #61 )
...
采纳社区建议,新增两个配置项:
1. max_auto_continue(默认 3,设 0 禁用)
- 替换了 handler.ts 中 4 处硬编码的 MAX_AUTO_CONTINUE = 3
- 设为 0 时 while 循环直接短路,完全禁用自动续写
- 用户可在对话中自行要求续写,往往更精准
2. max_history_messages(默认 100,-1 不限制)
- 在 converter.ts 消息转换后、压缩步骤前执行裁剪
- 保留 few-shot 示例(工具模式前 2 条),删除最早的非 few-shot 消息
- 防止 800+ 条消息导致请求体积过大、响应变慢
两项配置均支持 config.yaml 和环境变量(MAX_AUTO_CONTINUE / MAX_HISTORY_MESSAGES)
2026-03-18 09:10:08 +08:00
小海
5e0c9a3ce7
fix: 修复工具模式误续写导致的截断终止
...
避免短参数 tool_use 在已可恢复时继续隐式续写,减少 OpenClaw/Telegram 场景下的长时间挂起与 terminated。
同时统一 Anthropic 与 OpenAI 兼容接口的截断续写判定,并补充对应回归测试。
Made-with: Cursor
v2.7.3
2026-03-17 15:11:22 +08:00
小海
ed6181a5a9
fix: harden OpenAI multimodal compatibility and image handling
...
Tighten image path normalization, preserve multimodal request content across OpenAI-compatible endpoints, and fail fast on unsupported image_file inputs so clients get predictable behavior instead of silent degradation.
Made-with: Cursor
2026-03-17 15:03:39 +08:00
小海
447dad8c03
fix: thinking 未配置时不再自动注入,跟随客户端请求
...
Made-with: Cursor
2026-03-17 14:42:33 +08:00
小海
e7ffa90a94
fix: Dockerfile 补充 COPY public 目录(日志查看器静态资源)
...
Made-with: Cursor
2026-03-17 14:40:04 +08:00
小海
fd9d17a49e
release: v2.7.3 — 统一 thinking 剥离 + 拒绝检测增强 + Docker 部署优化
...
Made-with: Cursor
2026-03-17 14:28:31 +08:00
小海
70d8da273d
feat: implement proper OpenAI Responses API streaming format for Codex compatibility
...
Fix "stream disconnected before completion: stream closed before response.completed"
error when using Codex CLI. The /v1/responses endpoint was outputting Chat Completions
SSE format (data-only) instead of the Responses API SSE format with event: prefixes.
Codex expects specific SSE events:
- response.created / response.in_progress
- response.output_text.delta (incremental text)
- response.function_call_arguments.delta (tool calls)
- response.completed (★ the critical event Codex waits for)
Changes:
- Rewrite handleOpenAIResponses() with dedicated stream/non-stream handlers
- Add writeResponsesSSE() for event: + data: format
- Support function_call output items for tool calls
- Add error recovery that always emits response.completed
- Add identity probe mock responses in Responses API format
2026-03-17 13:52:05 +08:00
小海
85d8666eeb
fix: 修复纯字符串 content 中的图片路径无法提取的根因 ( #39 )
...
核心修复:
- Phase 1.5 现在同时处理 string content 和 array content
(之前仅处理 Array.isArray 的情况,跳过了纯字符串)
- 重写正则引擎:使用 [^\\s\"')\\]] 替代 [\\w.\\/-]
匹配含 UUID/连字符的路径 (如 file_362---eb90f5a2-xxx.jpg)
- 新增图片诊断日志:记录客户端发送的 content 格式
帮助定位不同客户端的图片格式差异
2026-03-17 12:27:51 +08:00
小海
292c8c4557
fix: 修复 CC 自动压缩后模型丢失任务上下文的问题
...
- 检测 XML 标签剥离后 actualQuery 为空的情况(压缩产物),
回退到不分离模式,保留完整消息内容
- 增强 tool_result 续航指令,明确引导模型继续执行上下文中的任务
2026-03-17 11:54:38 +08:00
小海
e2acdd186d
fix: 修复 OpenClaw/Telegram 等客户端图片处理失败问题 ( #39 )
...
- 新增本地文件路径图片读取支持 (readFileSync)
- 新增文本消息中嵌入图片 URL/路径自动提取
- 新增 file:// URL 解析支持
- OpenAI handler 新增 image_file、扁平 url、通用兜底等格式兼容
- 修复 OpenClaw {{MediaPath}} 本地路径无法被 fetch() 处理的根因
2026-03-17 10:56:38 +08:00
小海
a0af1c8934
feat: 可配置工具处理 + 修复 URL 图片兼容性
...
tools 配置:
- schema_mode: compact/full/names_only 三种 Schema 呈现模式
- description_max_length: 工具描述截断长度 (0=不截断)
- include_only/exclude: 工具白名单/黑名单过滤
- 启动 banner 显示 tools 配置摘要
- 日志记录完整工具描述(不再截断200字符)
图片 URL 修复:
- 归一化 Anthropic API source.url → source.data
- 支持 image/input_image 等多种客户端格式
- 图片下载添加 User-Agent 头(解决 Telegram 403)
- 增强日志:记录每张图片下载过程和结果
v2.7.2
2026-03-17 10:13:09 +08:00
小海
73651d1bc9
release: v2.7.2 — 日志查看器升级 + 工程化改进
...
- 日/夜主题切换、标题提取修复、前端静态文件分离
- 移除 WELL_KNOWN_TOOLS、config.yaml 模板化、Thinking 默认关闭
- README 新增日志查看器说明、配置表格、环境变量参考
2026-03-17 09:46:39 +08:00
小海
5b4210a270
chore: 默认关闭 thinking
2026-03-17 09:43:05 +08:00
小海
f40bfaee64
refactor: 移除 WELL_KNOWN_TOOLS 工具白名单
...
所有工具现在统一保留描述(截取前50字符),不再对特定工具名跳过描述。
2026-03-17 09:40:10 +08:00
小海
222485ca93
chore: 移除 config.yaml 跟踪 + 更新 README 使用说明
...
- config.yaml 加入 .gitignore(含敏感 token,不再上传)
- 新增 config.yaml.example 作为配置模板
- README 新增:日志查看器功能介绍、配置表格、环境变量参考
- README 更新:项目结构增加 public/ 目录说明
- .gitignore 清理重复条目 + 排除截图文件
2026-03-17 09:37:34 +08:00
小海
d388fefa21
feat(log-viewer): 日夜主题切换 + 标题提取修复
...
- 新增日/夜主题切换按钮(☀️ /🌙 ),支持 localStorage 持久化,首次自动检测系统偏好
- 完整暗色主题 CSS 变量覆盖,所有 UI 元素适配
- 修复标题提取:过滤 <system-reminder> 注入内容和 Claude Code 引导语
- 日志页面前端重构为独立 HTML/CSS/JS 静态文件
- 登录页面样式同步更新为现代玻璃态主题
- Express 静态文件服务配置修复(兼容 v5 path-to-regexp)
2026-03-17 09:33:00 +08:00
小海
91679d39b3
fix: 修复 thinking 内容泄漏到正文 + PR#51 keepalive 定时器泄漏 ( #53 )
...
1. Thinking 提取修复 (Issue #53 ):
- 用 indexOf/lastIndexOf 替换所有非贪婪正则 [\\s\\S]*?
- 防止 thinking 内容包含 </thinking> 字面量时提前截断
- 新增 extractThinking() 工具函数统一处理
- 修复涉及 handler.ts、openai-handler.ts、streaming-text.ts
2. PR#51 keepalive 修复:
- handleDirectTextStream 新增独立 keepalive + try/finally 清理
- handleStream 的 keepalive 仅在工具模式分支创建,避免泄漏
2026-03-17 09:00:34 +08:00
Xu Kang
66b5d5d0b3
Merge pull request #51 from xiaoyun172/feat/streaming-text-output
...
改进普通响应的流式文本输出
2026-03-17 08:54:42 +08:00
xiaoyun172
ece889101c
Improve incremental text streaming output
2026-03-16 21:58:09 +08:00
小海
a7994ccbd5
feat: add thinking toggle in config.yaml with highest priority
...
- Add `thinking.enabled` config option to globally control thinking on/off
- Config priority: env THINKING_ENABLED > config.yaml > client request
- When disabled, removes thinking param even if client requests it
- Applies to both Anthropic and OpenAI format handlers
2026-03-16 18:25:53 +08:00
小海
d366125a56
feat(v2.7.1): 智能压缩算法 + 可配置压缩系统 + 日志鉴权 + Thinking 修复
...
🗜️ 智能历史压缩算法:
- 修复 JSON Action 块截断: 工具调用消息摘要化, 不再切断代码块
- 工具结果 60% 头 + 40% 尾保留, 错误信息不丢失
- 修复非工具模式 few-shot 偏移量 Bug
- 普通文本在自然边界(换行符)处截断
⚙️ 可配置压缩系统 (config.yaml):
- compression.enabled: 开关
- compression.level: 1(轻度) / 2(中等) / 3(激进)
- compression.keep_recent / early_msg_max_chars: 高级覆盖
- 支持 COMPRESSION_ENABLED / COMPRESSION_LEVEL 环境变量
🔐 日志查看器鉴权:
- 配置 auth_tokens 后 /logs 及 API 端点需验证
- 精美登录页, token 缓存到 localStorage
- 支持 query/header/x-api-key 三种传入方式
🧠 Thinking 修复:
- 拒绝检测先剥离 <thinking> 标签, 防止误判
- OpenAI 格式默认启用 thinking
v2.7.1
2026-03-16 17:11:01 +08:00
小海
3458de0ac8
feat: 支持 Claude Code thinking 显示 (adaptive 模式)
...
- 修复 thinking 类型检测:支持 Claude Code 的 `adaptive` 类型(之前只检查 `enabled`)
- 区分 GUI/CLI thinking 策略:GUI(enabled)发 content block,CLI(adaptive)保留标签在正文中
- few-shot 示例包含 thinking:当 thinking 启用时,assistant 回复中演示 `<thinking>` 标签
- 优化短响应重试:仅在响应 <3 字符且不含数字时重试,避免 `2` `25岁` 等短回答被误判
- 验证发现 Claude Code signature 为密码学签名,无法伪造
2026-03-16 16:48:58 +08:00
小海
a848706613
refactor: 精简控制台输出 — 详细日志转移到 Web UI
...
- 移除 converter.ts 中 20+ 行诊断日志 (消息摘要/工具统计/图片处理)
- 移除 openai-handler.ts 中 3 行冗余日志
- 移除 vision.ts/tool-fixer.ts 中的过程日志
- 精简 index.ts 启动 banner (从 25 行大框→7 行树形)
- 仅保留: 错误/警告 + 启动信息 + logger.ts 核心请求一行日志
- 所有详细信息均可通过 /logs Web UI 查看
2026-03-16 15:59:57 +08:00
小海
84c26aa332
feat: 全链路日志系统 — Web UI + 详细请求/响应追踪
...
- 新增 logger.ts: 全链路日志记录器,支持完整请求/响应 payload 存储
- 新增 log-viewer.ts: Web UI 日志查看器 (/logs),SSE 实时推送
- UI 支持四个标签页: 日志、请求参数、提示词、响应内容
- 存储完整消息内容 (100K/条上限),支持展开/折叠查看
- 阶段耗时可视化 (receive → convert → send → response → stream)
- 修复 Cursor 消息格式 parts vs content 导致的 500 错误
- handler/openai-handler 集成全链路日志记录
- 控制台仅打印核心简短日志
2026-03-16 15:22:31 +08:00
小海
0e16861b2c
fix: 连接保活 + 续写收敛优化 + 拒绝模式扩充
...
- 流式路径:每 15s 发送 SSE 注释 keepalive,防止 504 网关超时
- 非流式路径:chunked 空白字符保活,JSON.parse 天然兼容
- MAX_AUTO_CONTINUE 6→3,新增最小进展阈值(<100 chars 停止)
- 新增连续小增量检测(2 次 <500 chars 停止挤牙膏)
- 追加 15 条 REFUSAL_PATTERNS(EN scope/expertise + CN 中文拒绝)
v2.7.0
2026-03-16 11:43:16 +08:00
小海
f0ab29056f
docs: 添加版本说明 — v2.7.0 基于 v2.5.6 回滚优化,v2.6.x 见 Tags
2026-03-16 09:52:53 +08:00
小海
85147d2fef
fix: 远程URL图片下载转base64 — 修复OpenClaw/Telegram/ccagents等客户端的URL图片处理
...
- preprocessImages() 中检测 source.type='url' 的图片块
- 自动下载远程图片并转为 base64 格式
- 使用 vision proxy 下载(支持代理环境)
- 下载失败优雅降级为错误提示文本
- 同时更新 README(用户删除旧版更新日志)
2026-03-16 09:51:34 +08:00
小海
db41b741a5
docs: 更新 README 至 v2.7.0 — 新增功能说明 + 项目结构 + 配置项 + 更新日志
2026-03-16 09:48:12 +08:00
小海
48de59cba7
feat: v2.7.0 — API鉴权 + Thinking支持 + 动态预算 + response_format + Vision独立代理 + 拒绝模式更新
...
✨ 新功能:
- API Token 鉴权 (auth_tokens): 公网部署安全,Bearer token / x-api-key 双模式
- Thinking 支持 (客户端驱动): Anthropic thinking block + OpenAI reasoning_content
- response_format 支持: json_object / json_schema + markdown 自动剥离
- Vision 独立代理 (vision.proxy): 图片API走代理,Cursor API保持直连
🔧 优化:
- 已知工具跳过描述 (WELL_KNOWN_TOOLS): 减少 ~30% 工具指令输入
- 动态工具结果预算 (getToolResultBudget): 替代固定 15K 限制
- isTruncated 重写: 消除反引号误判导致的无限重试
- 计费头清除: 清除 x-anthropic-billing-header 防注入警告
🛡️ 防御:
- 新增 4 个 Cursor 拒绝措辞匹配模式
2026-03-16 09:44:15 +08:00
小海
cb0bf5c632
feat: v2.5.6 — 渐进式历史压缩 + 续写智能去重 + 非流式续写对齐 + Token估算优化 + JSON解析器加固
v2.5.6
2026-03-12 10:48:54 +08:00
小海
3dceac115c
fix: 修复长响应误判为拒绝 + 减少 tolerantParse 日志噪音 (v2.5.5)
...
- 工具模式下长文本(8654 chars)正文碰巧含拒绝关键词被误判,导致 Claude Code 死循环
- 截断响应(max_tokens)跳过拒绝检测;长响应仅检查前300字符
- tolerantParse 对非工具调用的 JSON 代码块降为 warn 级别日志
v2.5.5
2026-03-12 10:05:31 +08:00
小海
13098fb84d
feat: 内网代理支持 (Issue #17 )
...
- 新增 proxy-agent.ts: 基于 undici.ProxyAgent 让 Node.js fetch 走代理
- cursor-client.ts / vision.ts: 接入代理 dispatcher
- config.yaml: 补充代理配置说明 (含认证格式)
- 新增 16 个单元测试覆盖代理模块逻辑
- 版本升级至 v2.5.4
v2.5.4
2026-03-11 14:42:17 +08:00
小海
2bea3ce4d8
chore(release): v2.5.3 - Schema压缩+JSON感知解析器+续写重写
v2.5.3
2026-03-11 10:24:41 +08:00
小海
4b3715700b
fix: 修复截断问题 - Schema压缩+JSON感知解析器+续写机制重写
...
三个关键修复:
1. Schema 压缩(converter.ts)
- 新增 compactSchema() 将完整 JSON Schema 压缩为紧凑类型签名
- 90 工具的 Schema 从 ~135k chars 降至 ~15k chars
- 工具描述截断至 200 chars
- 直接增大 Cursor API 输出预算(输入越小→输出越大)
2. JSON-string-aware 解析器(converter.ts)
- 替换 parseToolCalls 的 lazy regex 为手动扫描器
- 正确跳过 JSON 字符串内部的 ``` 标记
- 修复 Write/Edit 工具 content 含 markdown 代码块时被提前截断的 bug
- 新增截断代码块恢复(无闭合 ``` 时仍可解析工具调用)
3. 续写机制重写(handler.ts)
- 续写请求增加 user 引导消息(解决模型返回空响应的问题)
- 每次基于原始消息快照重建(防止上下文膨胀)
- 提取最后 300 chars 作为续写锚点
- 空响应时立即停止,避免无效循环
- MAX_AUTO_CONTINUE 从 4 提升至 6
2026-03-11 10:21:27 +08:00
小海
ecf4fa82ee
{ "message": "fix: stop renaming file_path to path implicitly, and remove compression tests" }
v2.5.2
2026-03-11 09:55:15 +08:00
小海
74f1a632a9
chore(release): v2.5.2 - Remove context compression and implement internal auto-continue
2026-03-11 09:54:10 +08:00
小海
d9c423027d
docs: 更新 README 至 v2.5.1,新增压缩和截断检测特性说明
v2.5.1
2026-03-10 17:32:07 +08:00
小海
5f0f9b7936
feat: v2.5.1 - 上下文智能压缩 + 截断检测 + tolerantParse 增强
...
🗜️ 智能压缩
- 长对话老消息压缩而非丢弃,保留因果链语义
- 工具结果压缩为摘要,助手消息保留工具名
- 压缩率 70-80%,解决 Cursor 上下文溢出问题
⚠️ 截断检测
- 代码块/XML 未闭合时返回 stop_reason=max_tokens
- Claude Code 自动继续,无需手动点击"继续"
🔧 tolerantParse
- 新增正则兜底层,处理未转义双引号的 JSON
- 解决 position 5384 等长参数解析崩溃
🛡️ 拒绝 fallback 优化
- 工具模式下返回极短引导文本
2026-03-10 17:29:49 +08:00
小海
f12ca30893
feat(v2.5.0): Cursor IDE 完整适配 + 工具参数自动修复 + 增量流式优化
...
🖥️ Cursor IDE 适配:
- 新增 /v1/responses 端点(Responses API → Chat Completions 自动转换)
- 兼容 Cursor 扁平工具格式 { name, input_schema }
- 扩展 /v1/models 模型列表(claude-sonnet-4-5/4/3.5)
- 连续同角色消息自动合并(mergeConsecutiveRoles)
- content 数组中 tool_use/tool_result 块直接透传
🔧 工具参数自动修复 (tool-fixer.ts):
- normalizeToolArguments: file_path → path 字段名映射
- replaceSmartQuotes: 中文/法文智能引号替换
- repairExactMatchToolArguments: 模糊匹配修复
- extractToolResultNatural: 自然语言 tool_result 转换
🚀 流式增量优化:
- input_json_delta / tool_calls 按 128 字节分块
- 拒绝重试扩展到工具模式
- 极短响应自动重试
🧪 新增 44 个单元测试 (tool-fixer + openai-compat)
v2.5.0
2026-03-10 16:27:19 +08:00
小海
be9341af7c
refactor: 版本号统一从 package.json 动态读取,去除所有硬编码
2026-03-10 15:16:22 +08:00
小海
24da706ffe
chore: 同步 index.ts 版本号 + README changelog 至 v2.4.0
2026-03-10 15:15:38 +08:00
小海
ef9d36e8c4
chore: 升级版本号至 v2.4.0
v2.4.0
2026-03-10 15:13:24 +08:00