Loading...
Loading...
Compare original and translation side by side
undefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedstdio: 'ignore'// This pattern hides errors!
spawn(cmd, args, { detached: true, stdio: 'ignore' })const logFile = fs.openSync('.claude/cache/debug.log', 'a');
spawn(cmd, args, {
detached: true,
stdio: ['ignore', logFile, logFile] // capture stdout/stderr
});stdio: 'ignore'// 这种模式会隐藏错误!
spawn(cmd, args, { detached: true, stdio: 'ignore' })const logFile = fs.openSync('.claude/cache/debug.log', 'a');
spawn(cmd, args, {
detached: true,
stdio: ['ignore', logFile, logFile] // 捕获stdout/stderr
});cd $CLAUDE_PROJECT_DIR/.claude/hooks
npx esbuild src/session-end-cleanup.ts \
--bundle --platform=node --format=esm \
--outfile=dist/session-end-cleanup.mjs.mjscd $CLAUDE_PROJECT_DIR/.claude/hooks
npx esbuild src/session-end-cleanup.ts \
--bundle --platform=node --format=esm \
--outfile=dist/session-end-cleanup.mjs.mjs| Symptom | Likely Cause | Fix |
|---|---|---|
| Hook never runs | Not registered in settings.json | Add to correct event in settings |
| Hook runs but no output | Detached spawn hiding errors | Add logging, check manually |
| Wrong session ID | Using "most recent" query | Pass ID explicitly |
| Works locally, not in CI | Missing dependencies | Check npx/node availability |
| Runs twice | Registered in both global + project | Remove duplicate |
| 症状 | 可能原因 | 修复方案 |
|---|---|---|
| Hook从未运行 | 未在settings.json中注册 | 在设置中添加到对应事件 |
| Hook运行但无输出 | 分离式spawn隐藏了错误 | 添加日志记录,手动检查 |
| 会话ID错误 | 使用了“最近的”查询 | 显式传递ID |
| 本地可用,CI环境不可用 | 缺少依赖项 | 检查npx/node是否可用 |
| 运行两次 | 同时在全局和项目中注册 | 移除重复项 |
ls -la .claude/cache/grep -A10 '"hooks"' .claude/settings.jsonls .claude/hooks/*.shls -la .claude/hooks/dist/echo '{}' | ./hook.shstdio: 'ignore'ls -la .claude/cache/grep -A10 '"hooks"' .claude/settings.jsonls .claude/hooks/*.shls -la .claude/hooks/dist/echo '{}' | ./hook.shstdio: 'ignore'