mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-08 08:36:37 +08:00
98 lines
2.6 KiB
JavaScript
Executable File
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);
|
|
}
|
|
});
|