Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

zcode-auto-continue

ZCode 自动继续插件:检测模型回复被截断或为空,自动请求模型继续输出。

解决"干一半自己停了":模型回复因 max-tokens 截断或空响应(empty_model_response)导致回合死亡时,Stop hook 自动触发续写,无需手动发"继续"。

背景

ZCode 的 Stop hook 原生支持"请求继续":回合结束时 hook 返回 {"continue": true, "additionalContext": "..."},客户端会自动让模型再跑一轮(每回合最多 3 次)。

但旧版 hook 脚本读错了 stdin 字段(读 message.content,实际在顶层 responseText),导致:

  • 截断检测从未生效——所有对话"干一半停了"都不会自动继续;
  • 空响应重发误判所有回复为空 → 疯狂重发 → 被禁用。

本仓库提供修复后的脚本 + 实测确认的 stdin 格式。

实测确认的 Stop hook stdin 格式

{
  "cwd": "G:\\Zcode\\插件开发",
  "hookEventName": "Stop",
  "responsePreview": "...",
  "responseText": "...",
  "sessionId": "sess_...",
  "turnId": "turn_...",
  "mode": "yolo",
  "toolCallCount": 14,
  "stopHookActive": false,
  "transcriptPath": "C:\\Users\\...\\zcode-claude-hook-xxx\\transcript.jsonl",
  "timestamp": "2026-08-29T09:56:28.120Z"
}
  • 回复文本在顶层 responseText(responsePreview 是截断预览,可作兜底)。
  • 没有 message.content 字段(旧脚本的解析路径)。
  • 输出格式:{"continue": true, "additionalContext": "..."},两个字段必须同时存在才生效。

安装

# 1. 复制脚本到 ZCode tools 目录
cp hooks/*.py ~/.zcode/tools/

# 2. 在 ~/.zcode/cli/config.json 的 hooks.events.Stop 注册(示例):
{
  "hooks": {
    "enabled": true,
    "events": {
      "Stop": [
        {
          "hooks": [
            {
              "type": "command",
              "command": "python C:/Users/<you>/.zcode/tools/continue-on-truncation.py",
              "timeout": 10,
              "statusMessage": "检测回复是否被截断..."
            },
            {
              "type": "command",
              "command": "python C:/Users/<you>/.zcode/tools/auto-retry-empty-response.py",
              "timeout": 10,
              "statusMessage": "检测空响应并自动重发..."
            }
          ]
        }
      ]
    }
  }
}

注意:客户端启动时加载配置,改完需重启 ZCode 才生效。

脚本说明

脚本 作用 触发条件
continue-on-truncation.py 截断/空响应自动继续 未闭合代码块、长回复尾部省略号、悬空标点、空回复
auto-retry-empty-response.py 空响应自动重发 回复文本为空(responseText 为空)
stop-hook-debug.py 调试用:dump stdin 到日志 手动注册,排查格式问题

测试

# 构造合法 JSON 输入(注意 Git Bash 的 echo 会破坏反斜杠转义,用 python 生成)
python -c "
import json, subprocess
cases = [
    ('正常回复', {'responseText': '正常回复内容'}),
    ('空回复', {'responseText': ''}),
    ('未闭合代码块', {'responseText': '内容被截断了,最后是\`\`\`'}),
]
for name, payload in cases:
    inp = json.dumps(payload, ensure_ascii=False).encode('utf-8')
    r = subprocess.run(['python', 'hooks/continue-on-truncation.py'], input=inp, capture_output=True)
    print(f'{name}: {r.stdout.decode()!r}')
"

相关

License

MIT

About

ZCode 自动继续插件:检测回复截断/空响应,Stop hook 自动续写(修复 stdin 字段路径)

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages