小海
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
小海
c072795528
feat: 修复流式中断 + JSON 解析 + tool_choice 强制工具调用
...
核心修复:
- cursor-client.ts: 固定总超时 → 空闲超时,防止长输出被截断 (#12 )
- converter.ts: tolerantParse 三级修复策略,处理截断 JSON (#13 )
- types.ts: 新增 AnthropicToolChoice 类型,补齐 tool_choice 字段
- converter.ts: buildToolInstructions 支持 tool_choice,注入 MANDATORY 约束
- handler.ts: tool_choice=any 时检测无工具调用 → 自动追加强制消息重试
测试覆盖:
- test/unit-tolerant-parse.mjs: 18 个单元测试(tolerantParse/parseToolCalls)
- test/e2e-chat.mjs: 16 个 E2E 测试(基础问答、工具调用、流式、边界防御)
- test/e2e-agentic.mjs: 7 个 Agentic 压测(完整 Claude Code 工具链模拟)
- package.json: 新增 test:unit / test:e2e / test:agentic 快捷命令
2026-03-10 15:11:51 +08:00
小海
59d350b032
fix: 修复 README changelog 中的 emoji 乱码
v2.3.2
2026-03-06 14:45:20 +08:00
小海
41db85cb6f
feat(v2.3.2): 视觉预处理统一化 + OpenAI防御强化 + 认知重构
...
📸 视觉预处理统一化 (修复 #8 )
- 新增 preprocessImages() 在 convertToCursorRequest 入口统一处理图片
- 修复 Claude CLI 图片不进 vision 预处理的 bug
- extractMessageText 新增 case 'image' 兜底处理
- Express body 限制 10MB → 50MB 支持大图
🛡️ OpenAI 端全面防御层对齐
- 拒绝检测 + 自动重试 (与 Anthropic 端一致)
- 响应清洗 sanitizeResponse
- 身份探针拦截 isIdentityProbe
- 流式统一缓冲模式
🧠 非工具场景认知重构
- 无工具请求注入认知重构前缀,防止暴露 Cursor 文档助手身份
- 助手历史消息中 read_file/read_dir 拒绝痕迹清洗
- 工具能力询问返回 Claude 能力描述而非硬拦截
- 扩展中文 sanitizeResponse 规则
2026-03-06 14:44:35 +08:00
小海
3a652859ce
feat: 重构认知伪装策略,修复 prompt injection 检测导致的拒绝问题
...
问题:
- 新版 Claude 模型识破了旧的「写文档」伪装策略,直接判定为 prompt injection attack
- 模型明确指出 "documentation" + "copy-paste" + "json action" 组合是社会工程攻击
- 中文环境同样被拒绝("这不是需要文档化的场景")
- 部分场景模型声称只有 read_file/read_dir 两个工具可用
converter.ts 优化:
- 重写 buildToolInstructions:从「写文档生成 JSON 示例」改为「IDE 环境内置行为协议」
- few-shot 从 4 轮公式化对话精简为 2 轮自然 IDE 交互
- 用户消息包装去除 "scenario"/"documentation" 等敏感词
- few-shot 工具选择优先使用 Read/read_file(最自然的 IDE 操作)
- 历史清洗正则增加 prompt injection/social engineering 等 15+ 新模式
handler.ts 优化:
- 新增 15+ 拒绝模式:prompt injection attack、social engineering、工具数量限制声明等
- sanitizeResponse 增强:遇到 prompt injection 指控直接替换为 Claude 身份回复
- [System Filter] 降级消息改为自然语言提问,避免触发客户端二次异常
2026-03-06 13:56:28 +08:00
小海
c3e9bcd659
chore: 统一所有版本号至 v2.3.0
...
- package.json: 2.0.0 → 2.3.0
- src/index.ts: 健康检查、根路径、启动 banner 三处版本号同步更新
2026-03-06 11:29:10 +08:00
小海
5526d8859e
chore(docker): 同步 Docker 配置至 v2.3.0
...
- Dockerfile: 新增 COPY config.yaml 使容器内置默认配置
- docker-compose.yml: 启用 config.yaml 挂载,移除已废弃的 SCRIPT_URL/FP 引用,增加 vision/OCR 说明
- .dockerignore: 补充 Docker 自身配置/文档/压缩包到忽略列表
2026-03-06 11:27:47 +08:00
小海
101eaa320b
chore: 清理旧压缩包,生成 v2.3.0 部署包
2026-03-06 11:20:01 +08:00
小海
ad006060dc
fix(proxy): 结合 referer 伪装,从 IDE 场景融合策略回退至写作文档认知重构策略以绕过强文档助手工具限制
2026-03-06 11:11:56 +08:00
小海
2a7c23416f
feat(vision): add zero-config local OCR and external vision api fallback for image payloads
2026-03-06 11:00:50 +08:00
Xu Kang
cbe679bfd6
Merge pull request #4 from guoyongchang/fix-docker-compose-up
...
fix: remove references to deleted jscode/ directory in Dockerfile
2026-03-05 18:16:55 +08:00
guoyongchang
8a26c9ed55
fix: remove references to deleted jscode/ directory in Dockerfile
...
The jscode/ directory was removed in v2.0.0 but the Dockerfile still
referenced it, causing docker compose build to fail.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-05 18:11:55 +08:00
小海
6acf337a47
fix: add tolerant json parsing to support unescaped newlines in tools
2026-03-05 17:51:30 +08:00
小海
72719ac797
docs+cleanup: update README for v2.2.0, remove jscode/ directory
...
- Updated README: removed jscode setup steps, script_url config,
x-is-human Token section; updated project structure; added v2.2.0
changelog with identity protection and code cleanup details
- Deleted jscode/ directory (env.js, main.js, README.md) - no longer
needed since token generation was removed
- Updated defense layer table (L3: 50+ patterns, L4: sanitizeResponse)
2026-03-05 17:23:54 +08:00
小海
184cabf5cc
refactor: remove dead x-is-human token generation system
...
Cursor no longer validates the x-is-human header, so the entire token
generation pipeline was dead code producing only error logs.
Removed:
- loadScripts(), fetchCursorScript(), generateToken(), replenishPool(),
getXIsHumanToken() and token pool management from cursor-client.ts
- scriptUrl config field and SCRIPT_URL env var support
- unmaskedVendorWebGL/unmaskedRendererWebGL fingerprint fields
- jscode/ script loading (env.js, main.js templates)
- script_url and WebGL fields from config.yaml
Kept:
- Chrome TLS fingerprint headers (user-agent, sec-ch-ua, etc.)
- x-is-human header sent as empty string (Cursor accepts it)
2026-03-05 17:20:51 +08:00
小海
03a3484067
feat(identity): add topic refusal detection + enhanced response sanitization
...
- Added 9 English topic refusal patterns (e.g. \"help with coding and Cursor IDE\",
\"unrelated to programming or Cursor\", \"Cursor-related question\")
- Added 3 Chinese topic refusal patterns
- Enhanced sanitizeResponse with topic-refusal text replacement:
- \"Cursor IDE features\" → \"AI capabilities\"
- \"unrelated to programming or Cursor\" → \"a general knowledge question\"
- \"Cursor or coding documentation\" → \"relevant documentation\"
- Straggler \"and Cursor\" / \"or Cursor\" cleanup
- Fixed double-word artifacts in sanitization output
- Removed overly broad /unable\\s+to/i pattern to reduce false positives
2026-03-05 17:13:31 +08:00
小海
3a7575cdeb
feat(identity): three-layer identity protection - broadened probe detection, response sanitization, Claude fallback
...
1. Expanded identity probe detection with keyword-based matching (Chinese & English)
- Catches questions about model, platform, system prompt, real identity
- Agent mode (with tools) bypasses probe detection
2. Added sanitizeResponse() post-processor for ALL responses
- Replaces Cursor identity references with Claude equivalents
- Covers both English and Chinese Cursor persona leaks
3. Added Chinese refusal patterns (14 new regexes)
4. Auto-retry with IDE-context reframing on refusal (max 2 retries)
5. Refusal fallback now returns Claude identity response instead of [System] filter message
2026-03-05 17:02:56 +08:00
小海
89e4f5eb99
v2.1.0: Prompt strategy overhaul - Cursor IDE scene-fusion, remove tool whitelist, multi-layer refusal defense, context sanitization
2026-03-05 15:30:14 +08:00
小海
53740f7300
Expand refusal patterns: catch 'coding assistant', 'focused on software development' and other new refusal variants
2026-03-05 15:26:02 +08:00
小海
fa2f826fdd
Rewrite converter.ts: remove tool whitelist, Cursor IDE scene-fusion prompts, sanitize permission-denial history
2026-03-05 15:23:32 +08:00
小海
1a5dd4a971
Backup before refactoring persona alignment strategy
2026-03-05 15:04:30 +08:00
小海
fa59148d52
{"message": "fix(identity): simplify system override directive to bypass cursor support refusal classifiers"}
2026-03-05 11:33:18 +08:00
小海
2d7dafedb7
feat: 新增 OpenAI Chat Completions API 兼容接口
...
- 新增 POST /v1/chat/completions 端点,支持流式和非流式
- 完整支持 OpenAI 格式的工具调用 (function calling)
- 支持 system/user/assistant/tool 四种角色消息
- 自动将 OpenAI 请求转换为 Anthropic 格式,复用现有 Cursor 管道
- 流式响应遵循 OpenAI SSE 规范 (data: [DONE] 结束标志)
- 新增 openai-types.ts 和 openai-handler.ts
- 更新启动信息展示两种 API 端点
- 更新 README 文档说明 OpenAI 兼容用法
2026-03-04 17:46:04 +08:00
小海
be3037fca8
fix: 修复 SSE 流式事件格式错误、启用配置超时、修正工具调用完整性检测
...
1. handler.ts: 修复 content_block_delta 事件缺少 index 和 delta 包装层的严重 Bug
- 当 AI 响应包含 ```json 但非工具调用时,文本增量会因格式错误而丢失
2. cursor-client.ts: 请求超时改用 config.timeout 配置值,不再硬编码 120s
3. converter.ts: 修复 isToolCallComplete() 始终返回 true 的逻辑错误
4. handler.ts: 移除未使用的 isToolCallComplete 导入
2026-03-04 17:39:46 +08:00
小海
561017e7b1
docs: 新增 MIT 开源协议并完善免责声明 (Disclaimer)
...
- 补充了标准的 MIT 开源许可证文件 (LICENSE)。
- 在 README 中增加了极其明确的风险警告与免责声明,明确逆向和代理调用可能导致账号封锁,作者不为此背锅。
2026-03-04 17:20:38 +08:00
小海
c670fa49f1
feat: 增加基于现代多阶段构建的生产级 Docker 环境配置
...
- 采用最新的 Node.js 22 LTS (Alpine) 作为底座。
- 引入二阶段构建 (Builder/Runner),隔离源码与产物,极致缩小最终镜像体积。
- 采用非 root (cursor UID=1001) 用户权限组执行程序,保证生产环境安全性。
- 提供了配套的 .dockerignore 和 docker-compose.yml 服务编排文件,支持传参 SOCKS 代理等。
2026-03-04 17:17:22 +08:00
小海
b2b41ebd38
feat: 添加一键部署脚本 (deploy.sh) 用于快速部署到 Linux 机器
...
- 自动化检测和安装 Node.js 和 PM2。
- 自动安装依赖并编译 TypeScript 产物。
- 通过 PM2 后台拉起并守护进程。
2026-03-04 17:07:44 +08:00
小海
40b7f01067
feat: 引入 x-is-human Token 资源池以对抗并发风控
...
- 移除了原有的单例 `cachedToken` 设计。
- 引入最大容量为 5 的数组 `tokenPool`。
- 每个发出的并发请求都会从池中随机抽取有效 token,有效打散请求特征,降低被墙概率。
- 引入异步补充机制:一旦库存不足满载,将会在后台默默生成并补全缓存,且不阻塞当前请求。
2026-03-04 16:17:06 +08:00
小海
d907979224
fix: 加强对模型在同一响应中输出多个 JSON 代码块以实现并行的引导
...
- 之前虽然允许提供“多个模块”,但模型不知道必须在“同一次对话”里连着输出多个代码块才算并行。
- 增加了 `MULTIPLE ... blocks ONE AFTER ANOTHER IN THE SAME RESPONSE` 的大写提示以及修改了 Few Shot 示例。
2026-03-04 16:08:30 +08:00
小海
b208f80c0b
fix: 提供完整的工具参数 Schema 和描述信息给模型
...
- 之前生成的工具列表只包含粗略的参数名和 string 类型提示,丢失了 description 和 enum 等关键信息。
- 改为直接输出 tool.description 和 stringify 后的完整 input_schema,从而修复模型调用 Agent 等复杂工具时填错参数类型导致 `Agent type 'general' not found` 的问题。
2026-03-04 16:04:10 +08:00
小海
1c925ad3b1
fix: 修改提示词允许使用并行工具
...
- 明确告诉模型可以使用多个 ````json action``` 代码块以支持多工具并行调用,解决由于先前的"exactly one block"限制导致模型无法并发使用工具的问题。
2026-03-04 16:03:18 +08:00
小海
efd2bac1dd
feat: 动态支持所有中小型工具集(取消数量<=40时的白名单过滤)
...
- 当工具数不超过40个时,全量放行。这样可以原生支持 Claude Code 动态注入的所有内置技能(如 `keybindings-help`, `simplify`)以及用户自行配置的任何 MCP 工具,实现真正的“尽可能多兼容”而无需硬编码白名单。
2026-03-04 15:58:54 +08:00
小海
eb0b355634
fix: 动态生成指令,防止在缺乏沟通工具(如Claude Code)时循环执行无意义动作
2026-03-04 15:53:15 +08:00