chatService->getMessage($sessionId, $triggerMessageId); if (! $triggerMessage) { throw (new ModelNotFoundException())->setModel(Message::class, [$triggerMessageId]); } $existingForTrigger = Message::query() ->where('session_id', $sessionId) ->where('type', 'run.status') ->where('payload->trigger_message_id', $triggerMessageId) ->orderByDesc('seq') ->first(); if ($existingForTrigger && ($existingForTrigger->payload['run_id'] ?? null)) { return $existingForTrigger->payload['run_id']; } $latestStatus = Message::query() ->where('session_id', $sessionId) ->where('type', 'run.status') ->orderByDesc('seq') ->first(); if ($latestStatus && ($latestStatus->payload['status'] ?? null) === 'RUNNING' && ($latestStatus->payload['run_id'] ?? null)) { return $latestStatus->payload['run_id']; } $runId = (string) Str::uuid(); $this->outputSink->appendRunStatus($sessionId, $runId, 'RUNNING', [ 'trigger_message_id' => $triggerMessageId, 'dedupe_key' => 'run:trigger:'.$triggerMessageId, ]); dispatch(new AgentRunJob($sessionId, $runId)); return $runId; } }