posimai-root/tools/posimai-scribe/src/event-collector.js

46 lines
1.4 KiB
JavaScript

/**
* event-collector.js
* Called automatically by Claude Code PostToolUse hook.
* Reads tool payload from stdin, appends a lightweight JSONL entry to logs/events.jsonl.
* Never throws — a crash here would interrupt Claude Code sessions.
*/
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const LOG_FILE = path.join(__dirname, '../logs/events.jsonl');
// Only track tools that indicate real work
const TRACKED_TOOLS = new Set(['Edit', 'Write', 'Bash', 'NotebookEdit']);
let raw = '';
process.stdin.setEncoding('utf8');
process.stdin.on('data', chunk => { raw += chunk; });
process.stdin.on('end', () => {
try {
const payload = JSON.parse(raw);
const tool = payload.tool_name;
if (!TRACKED_TOOLS.has(tool)) process.exit(0);
const input = payload.tool_input || {};
const entry = {
ts: new Date().toISOString(),
tool,
// file_path for Edit/Write, truncated command for Bash
target: input.file_path
? path.basename(input.file_path)
: (input.command || '').slice(0, 80) || null,
ok: !(payload.tool_response?.is_error ?? false)
};
fs.appendFileSync(LOG_FILE, JSON.stringify(entry) + '\n', 'utf8');
} catch {
// Silent fail — never interrupt Claude Code
}
process.exit(0);
});