mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-03-31 06:03:29 +08:00
64 lines
1.5 KiB
JavaScript
64 lines
1.5 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* Doc file warning hook (PreToolUse - Write)
|
|
* Warns about non-standard documentation files.
|
|
* Exit code 0 always (warns only, never blocks).
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
const path = require('path');
|
|
|
|
const MAX_STDIN = 1024 * 1024;
|
|
let data = '';
|
|
|
|
function isAllowedDocPath(filePath) {
|
|
const normalized = filePath.replace(/\\/g, '/');
|
|
const basename = path.basename(filePath);
|
|
|
|
if (!/\.(md|txt)$/i.test(filePath)) return true;
|
|
|
|
if (/^(README|CLAUDE|AGENTS|CONTRIBUTING|CHANGELOG|LICENSE|SKILL|MEMORY|WORKLOG)\.md$/i.test(basename)) {
|
|
return true;
|
|
}
|
|
|
|
if (/\.claude\/(commands|plans|projects)\//.test(normalized)) {
|
|
return true;
|
|
}
|
|
|
|
if (/(^|\/)(docs|skills|\.history|memory)\//.test(normalized)) {
|
|
return true;
|
|
}
|
|
|
|
if (/\.plan\.md$/i.test(basename)) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
process.stdin.setEncoding('utf8');
|
|
process.stdin.on('data', c => {
|
|
if (data.length < MAX_STDIN) {
|
|
const remaining = MAX_STDIN - data.length;
|
|
data += c.substring(0, remaining);
|
|
}
|
|
});
|
|
|
|
process.stdin.on('end', () => {
|
|
try {
|
|
const input = JSON.parse(data);
|
|
const filePath = String(input.tool_input?.file_path || '');
|
|
|
|
if (filePath && !isAllowedDocPath(filePath)) {
|
|
console.error('[Hook] WARNING: Non-standard documentation file detected');
|
|
console.error(`[Hook] File: ${filePath}`);
|
|
console.error('[Hook] Consider consolidating into README.md or docs/ directory');
|
|
}
|
|
} catch {
|
|
// ignore parse errors
|
|
}
|
|
|
|
process.stdout.write(data);
|
|
});
|