Files
ewoooc/.claude/hooks/audit-log.js
ogt cac7303e46 feat(devteam): 引進 my-claude-devteam 架構 V11.0
- 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>
2026-04-21 22:13:57 +08:00

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);
});