path.join(claudeDir,‘plugins’,‘everything-claude-code@everything-claude-code’),path.join(claudeDir,‘plugins’,’
marketplaces’,‘everything-claude-code’)]){if(hasRunnerRoot(candidate))return candidate;}try{for(const slug of
[‘ecc’,‘everything-claude-code’]){const cacheBase=path.join(claudeDir,‘plugins’,‘cache’,slug);for(const org of
fs.readdirSync(cacheBase,{withFileTypes:true})){if(!org.isDirectory())continue;for(const version of
fs.readdirSync(path.join(cacheBase,org.name),{withFileTypes:true})){if(!version.isDirectory())continue;const
candidate=path.join(cacheBase,org.name,version.name);if(hasRunnerRoot(candidate))return
candidate;}}}}catch{}return claudeDir;})();const script=path.join(root,rel);if(fs.existsSync(script)){const
result=spawnSync(process.execPath,[script,‘stop:desktop-notify’,‘scripts/hooks/desktop-notify.js’,‘standard,st
rict’],{input:raw,encoding:‘utf8’,env:process.env,cwd:process.cwd(),timeout:30000});const stdout=typeof
result.stdout===‘string’?result.stdout:‘’;if(stdout)process.stdout.write(stdout);else
process.stdout.write(raw);if(result.stderr)process.stderr.write(result.stderr);if(result.error||result.status=
==null||result.signal){const reason=result.error?result.error.message:(result.signal?‘signal
‘+result.signal:‘missing exit status’);process.stderr.write(’[Stop] ERROR: hook runner failed:
‘+reason+String.fromCharCode(10));process.exit(1);}process.exit(Number.isInteger(result.status)?result.status:
0);}process.stderr.write(’[Stop] WARNING: could not resolve ECC plugin root; skipping
hook’+String.fromCharCode(10));process.stdout.write(raw);"
⎿ /grill-me xxxxx。
⎿ Stop hook error: JSON validation failed
客户端若支持选择协议,走 OpenAI /v1/chat/completions 调 glm-5.1(实测正常),但是CC需要路由中转一下接口。