@@ -448,10 +448,14 @@ function getCookie(name) {
448448
449449let studyCluesConversationId = - 1 ;
450450
451- function appendStudyCluesMessage ( messagesEl , role , text ) {
451+ function appendStudyCluesMessage ( messagesEl , role , text , isHtml = false ) {
452452 const bubble = document . createElement ( "div" ) ;
453453 bubble . className = `studyclues-message ${ role } ` ;
454- bubble . textContent = text ;
454+ if ( isHtml ) {
455+ bubble . innerHTML = text ;
456+ } else {
457+ bubble . textContent = text ;
458+ }
455459 messagesEl . appendChild ( bubble ) ;
456460 messagesEl . scrollTop = messagesEl . scrollHeight ;
457461}
@@ -671,7 +675,7 @@ function createStudyCluesWidget() {
671675 <div class="studyclues-header">
672676 <span>StudyClues</span>
673677 <label class="studyclues-coach-toggle">
674- <input type="checkbox" id="studyclues-coach-mode" />
678+ <input type="checkbox" id="studyclues-coach-mode" checked />
675679 Coach Mode
676680 </label>
677681 <button class="studyclues-close" aria-label="Close chat">✕</button>
@@ -692,7 +696,7 @@ function createStudyCluesWidget() {
692696 const sendBtn = chat . querySelector ( ".studyclues-inputbar button" ) ;
693697 const coachToggle = chat . querySelector ( "#studyclues-coach-mode" ) ;
694698
695- let coachMode = false ;
699+ let coachMode = coachToggle . checked ;
696700 coachToggle . addEventListener ( "change" , ( ) => {
697701 coachMode = coachToggle . checked ;
698702 } ) ;
@@ -755,15 +759,25 @@ function createStudyCluesWidget() {
755759 const detail = payload ?. detail || { } ;
756760 const studycluesResponse = detail ?. response || { } ;
757761 const llmResponse = studycluesResponse ?. llm_response ;
762+ const references = studycluesResponse ?. references || { } ;
758763
759764 if ( typeof detail . conversation_id === "number" ) {
760765 studyCluesConversationId = detail . conversation_id ;
761766 }
762767
768+ const formattedResponse = ( llmResponse || "No response available from StudyClues." ) . replace (
769+ / \[ ( [ ^ \] ] + ) \] \( ( [ ^ ) ] + ) \) / g,
770+ ( match , text , key ) => {
771+ const url = references [ key ] ?. content_url ;
772+ return url ? `<a href="${ url } " target="_blank" rel="noopener noreferrer">${ text } </a>` : match ;
773+ }
774+ ) ;
775+
763776 appendStudyCluesMessage (
764777 messagesEl ,
765778 "assistant" ,
766- llmResponse || "No response available from StudyClues." ,
779+ formattedResponse ,
780+ true ,
767781 ) ;
768782 } catch ( err ) {
769783 appendStudyCluesMessage (
0 commit comments