Files
OpenFlare/.grok/hooks/dmux-status-hook.cjs
T

98 lines
2.6 KiB
JavaScript
Executable File

#!/usr/bin/env node
const fs = require('fs');
function normalizeHookEventName(value) {
const raw = String(value || '');
const normalized = raw.trim().toLowerCase().replace(/-/g, '_');
switch (normalized) {
case 'stop':
return 'Stop';
case 'notification':
return 'Notification';
case 'user_prompt_submit':
case 'userpromptsubmit':
return 'UserPromptSubmit';
case 'pre_tool_use':
case 'pretooluse':
return 'PreToolUse';
case 'post_tool_use':
case 'posttooluse':
return 'PostToolUse';
case 'post_tool_use_failure':
case 'posttoolusefailure':
return 'PostToolUseFailure';
case 'session_start':
case 'sessionstart':
return 'SessionStart';
case 'session_end':
case 'sessionend':
return 'SessionEnd';
default:
return raw;
}
}
function stringValue(...values) {
for (const value of values) {
if (typeof value === 'string' && value.trim()) {
return value;
}
}
return '';
}
let input = '';
process.stdin.setEncoding('utf8');
process.stdin.on('data', (chunk) => {
input += chunk;
});
process.stdin.on('end', () => {
let payload = {};
try {
payload = input.trim() ? JSON.parse(input) : {};
} catch (error) {
payload = { parse_error: String(error), raw: input };
}
const hookEventName = normalizeHookEventName(
payload.hookEventName || payload.hook_event_name || process.env.GROK_HOOK_EVENT
);
const sessionId = stringValue(
payload.sessionId,
payload.session_id,
process.env.GROK_SESSION_ID
);
const message = stringValue(
payload.lastAssistantMessage,
payload.last_assistant_message,
payload.message,
payload.notificationMessage,
payload.notification_message
);
const event = {
source: 'grok-status-hook',
dmuxPaneId: process.env.DMUX_PANE_ID || '',
tmuxPaneId: process.env.DMUX_TMUX_PANE_ID || '',
expectedDmuxPaneId: 'dmux-1781749411085',
expectedTmuxPaneId: '%2',
hookEventName,
sessionId,
turnId: stringValue(payload.turnId, payload.turn_id, sessionId),
lastAssistantMessage: message || null,
transcriptPath: stringValue(payload.transcriptPath, payload.transcript_path) || null,
cwd: stringValue(payload.cwd, payload.workspaceRoot, process.env.GROK_WORKSPACE_ROOT) || process.cwd(),
timestamp: Date.now()
};
if (event.dmuxPaneId !== event.expectedDmuxPaneId) {
process.exit(0);
}
try {
fs.writeFileSync('/Users/ryan/DEV/Go/Wavelet/.dmux/worktrees/handler-model-logics-user/.grok/dmux/dmux-1781749411085.json', JSON.stringify(event, null, 2));
} catch (error) {
process.exit(0);
}
});