MCPcopy Create free account
hub / github.com/tiann/hapi / handleHookEvent

Function handleHookEvent

cli/src/opencode/opencodeLocalLauncher.ts:321–599  ·  view source on GitHub ↗
(event: OpencodeHookEvent)

Source from the content-addressed store, hash-verified

319 const toolExecutionQueues = new Map<string, string[]>();
320
321 const handleHookEvent = (event: OpencodeHookEvent) => {
322 const payload = event.payload;
323 const eventType = event.event;
324 const payloadRecord = isObject(payload) ? payload as Record<string, unknown> : null;
325 const sessionId = event.sessionId
326 || extractSessionId(payload)
327 || (payloadRecord ? extractSessionId(payloadRecord.info) : null);
328 if (sessionId) {
329 session.onSessionFound(sessionId);
330 storageScanner?.onNewSession(sessionId);
331 }
332
333 if (eventType === 'session.created' || eventType === 'session.updated') {
334 if (payloadRecord) {
335 const info = isObject(payloadRecord.info) ? payloadRecord.info as Record<string, unknown> : payloadRecord;
336 const sessionIdValue = extractSessionId(info) || getString(info.id);
337 if (sessionIdValue) {
338 session.onSessionFound(sessionIdValue);
339 storageScanner?.onNewSession(sessionIdValue);
340 }
341 }
342 return;
343 }
344
345 if (eventType === 'message.updated') {
346 const message = unwrapMessage(payload);
347 if (!message) {
348 return;
349 }
350 const messageId = getString(message.id) || getString(message.messageId);
351 const role = getString(message.role);
352 if (messageId && role) {
353 messageRoles.set(messageId, role);
354 }
355 return;
356 }
357
358 if (eventType === 'message.part.updated') {
359 const part = unwrapPart(payload);
360 if (!part) {
361 return;
362 }
363 const partType = getString(part.type);
364 const partId = getString(part.id);
365 const messageId = getString(part.messageID)
366 || getString(part.messageId)
367 || (payloadRecord ? getString(payloadRecord.messageID) || getString(payloadRecord.messageId) : null);
368 const delta = getTextDelta(payloadRecord);
369
370 if (partType === 'text') {
371 if (partId && sentTextParts.has(partId)) {
372 return;
373 }
374 const role = (messageId && messageRoles.get(messageId)) ?? 'assistant';
375 const key = partId ?? messageId;
376 const bufferValue = key ? textBuffers.get(key) ?? '' : '';
377 const textFromPart = getString(part.text);
378 const nextBuffer = delta ? bufferValue + delta : bufferValue;

Callers

nothing calls this directly

Calls 15

isObjectFunction · 0.85
unwrapMessageFunction · 0.85
unwrapPartFunction · 0.85
getTextDeltaFunction · 0.85
parseToolCallFunction · 0.85
parseToolResultFunction · 0.85
parseMaybeJsonFunction · 0.85
buildToolSignatureFunction · 0.85
shiftQueueFunction · 0.85
pushQueueFunction · 0.85
removeFromQueueFunction · 0.85
normalizeDecisionFunction · 0.85

Tested by

no test coverage detected