- CLAUDE.md 升版至 V11.0:整合 P7/P9/P10 工作模式、12 人專家團隊、 委派鐵律、三條紅線(保留狙擊手模式精神) - .claude/hooks/:新增 8 個 Hook(momo-prod-guard / commit-quality / large-file-warner / mcp-health / audit-log / suggest-compact / cost-tracker / session-summary) - .claude/agents/:新增 11 個 Agent 定義(critic / debugger / db-expert / vuln-verifier / fullstack-engineer / planner / refactor-specialist / migration-engineer / onboarder / tool-expert / web-researcher) - .claude/settings.json:啟用 bypassPermissions + Hook 自動政策架構 - .gitignore:加入 settings.local.json 防止 Secret 意外 commit Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
30 lines
1.2 KiB
JavaScript
30 lines
1.2 KiB
JavaScript
/**
|
|
* audit-log.js — PostToolUse Hook
|
|
* 稽核所有 Bash 指令,自動 redact momo 敏感 Token。
|
|
*/
|
|
const fs = require('fs');
|
|
const os = require('os');
|
|
const path = require('path');
|
|
let d = '';
|
|
process.stdin.on('data', c => d += c);
|
|
process.stdin.on('end', () => {
|
|
try {
|
|
const input = JSON.parse(d);
|
|
let cmd = input.tool_input?.command || '';
|
|
if (!cmd) { process.stdout.write(d); return; }
|
|
// Redact
|
|
cmd = cmd.replace(/\d{8,12}:[A-Za-z0-9_-]{35}/g, '<TELEGRAM_TOKEN>');
|
|
cmd = cmd.replace(/sk-ant-api[0-9a-zA-Z_-]{20,}/g, '<ANTHROPIC_KEY>');
|
|
cmd = cmd.replace(/AIza[a-zA-Z0-9_-]{35}/g, '<GOOGLE_KEY>');
|
|
cmd = cmd.replace(/glpat-[a-zA-Z0-9_-]{20}/g, '<GITEA_PAT>');
|
|
cmd = cmd.replace(/sk-[a-zA-Z0-9]{20,}/g, '<API_KEY>');
|
|
cmd = cmd.replace(/(password\s*=\s*)[^\s'"]+/gi, '$1<REDACTED>');
|
|
cmd = cmd.replace(/\n/g, ' ');
|
|
const logPath = path.join(os.homedir(), '.claude', 'bash-commands.log');
|
|
const logDir = path.dirname(logPath);
|
|
if (!fs.existsSync(logDir)) fs.mkdirSync(logDir, { recursive: true });
|
|
fs.appendFileSync(logPath, `[${new Date().toISOString()}] ${cmd}\n`);
|
|
} catch (e) {}
|
|
process.stdout.write(d);
|
|
});
|