fix: show docs chat GitHub sign-in link

This commit is contained in:
Peter Steinberger 2026-05-06 09:05:06 +01:00
parent 5f4a5d9a16
commit 0109b31467
No known key found for this signature in database

View File

@ -42,7 +42,7 @@ function addChatMessage(kind,text){const log=document.querySelector("[data-chat-
function addChatThinking(){const log=document.querySelector("[data-chat-log]");if(!log)return null;const item=document.createElement("div");item.className="docs-chat-message assistant thinking";item.setAttribute("aria-label","Thinking");item.innerHTML='<div class="docs-chat-thinking" role="status" aria-live="polite"><span></span><span></span><span></span></div>';log.appendChild(item);log.scrollTop=log.scrollHeight;return item}
function setChatClearVisible(visible){const btn=document.querySelector("[data-chat-clear]");if(!btn)return;if(visible)btn.removeAttribute("hidden");else btn.setAttribute("hidden","")}
function clearChat(){const log=document.querySelector("[data-chat-log]");if(!log)return;log.innerHTML='<div class="docs-chat-message assistant"><p>Ask about install, channels, gateway config, or plugin APIs.</p></div>';log.scrollTop=0;setChatClearVisible(false);document.querySelector("[data-chat-input]")?.focus()}
function initChat(){const chat=document.querySelector("[data-docs-chat]");const form=document.querySelector("[data-chat-form]");const input=document.querySelector("[data-chat-input]");const submit=document.querySelector("[data-chat-submit]");if(!chat||!form||!input)return;const setOpen=open=>{chat.classList.toggle("open",open);document.querySelector("[data-chat-toggle]")?.setAttribute("aria-expanded",String(open));if(open)setTimeout(()=>input.focus(),0)};document.addEventListener("click",e=>{if(e.target.closest("[data-chat-toggle]")){setOpen(!chat.classList.contains("open"));return}if(e.target.closest("[data-chat-close]")){setOpen(false);return}if(e.target.closest("[data-chat-clear]")){clearChat();return}});input.addEventListener("keydown",e=>{if(e.key==="Enter"&&!e.shiftKey){e.preventDefault();form.requestSubmit()}});form.addEventListener("submit",async e=>{e.preventDefault();const api=window.OPENCLAW_DOCS_CHAT_API;const message=input.value.trim();if(!api||!message)return;input.value="";addChatMessage("user",message);setChatClearVisible(true);const reply=addChatThinking();submit.disabled=true;try{const res=await fetch(api,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message,retrieval:"auto",confidenceThreshold:.3})});if(!res.ok)throw new Error("Docs agent returned "+res.status);if(!res.body)throw new Error("Docs agent did not stream a response");const reader=res.body.getReader();const decoder=new TextDecoder();let raw="";while(true){const {done,value}=await reader.read();if(done)break;raw+=decoder.decode(value,{stream:true});if(reply&&raw.trim()){if(reply.classList.contains("thinking"))reply.classList.remove("thinking");reply.innerHTML="<p>"+renderChatText(raw)+"</p>";reply.parentElement.scrollTop=reply.parentElement.scrollHeight}}if(!raw&&reply){reply.classList.remove("thinking");reply.innerHTML="<p>No response.</p>"}}catch(err){if(reply){reply.className="docs-chat-message error";reply.innerHTML="<p>"+escapeHtml(err?.message||"Docs agent failed.")+"</p>"}}finally{submit.disabled=false;input.focus()}})}
function initChat(){const chat=document.querySelector("[data-docs-chat]");const form=document.querySelector("[data-chat-form]");const input=document.querySelector("[data-chat-input]");const submit=document.querySelector("[data-chat-submit]");if(!chat||!form||!input)return;const setOpen=open=>{chat.classList.toggle("open",open);document.querySelector("[data-chat-toggle]")?.setAttribute("aria-expanded",String(open));if(open)setTimeout(()=>input.focus(),0)};document.addEventListener("click",e=>{if(e.target.closest("[data-chat-toggle]")){setOpen(!chat.classList.contains("open"));return}if(e.target.closest("[data-chat-close]")){setOpen(false);return}if(e.target.closest("[data-chat-clear]")){clearChat();return}});input.addEventListener("keydown",e=>{if(e.key==="Enter"&&!e.shiftKey){e.preventDefault();form.requestSubmit()}});form.addEventListener("submit",async e=>{e.preventDefault();const api=window.OPENCLAW_DOCS_CHAT_API;const message=input.value.trim();if(!api||!message)return;input.value="";addChatMessage("user",message);setChatClearVisible(true);const reply=addChatThinking();submit.disabled=true;try{const res=await fetch(api,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message,retrieval:"auto",confidenceThreshold:.3})});if(res.redirected||res.status===401||res.status===403)throw new Error("AUTH_REQUIRED");if(!res.ok)throw new Error("Docs agent returned "+res.status);if(!res.body)throw new Error("Docs agent did not stream a response");const reader=res.body.getReader();const decoder=new TextDecoder();let raw="";while(true){const {done,value}=await reader.read();if(done)break;raw+=decoder.decode(value,{stream:true});if(reply&&raw.trim()){if(reply.classList.contains("thinking"))reply.classList.remove("thinking");reply.innerHTML="<p>"+renderChatText(raw)+"</p>";reply.parentElement.scrollTop=reply.parentElement.scrollHeight}}if(!raw&&reply){reply.classList.remove("thinking");reply.innerHTML="<p>No response.</p>"}}catch(err){if(reply){const msg=err?.message==="AUTH_REQUIRED"?"[Sign in with GitHub](https://documentation.openclaw.ai/ask-molty/sign-in), then ask again.":err?.message||"Docs agent failed.";reply.className="docs-chat-message error";reply.innerHTML="<p>"+renderChatText(msg)+"</p>"}}finally{submit.disabled=false;input.focus()}})}
initChat();
document.addEventListener("click",async e=>{const theme=e.target.closest("[data-theme-toggle]");if(theme){const next=root.dataset.theme==="dark"?"light":"dark";root.dataset.theme=next;localStorage.setItem("theme",next);return}const trigger=e.target.closest("[data-language-trigger]");if(trigger){e.stopPropagation();toggleLanguage();return}const picker=document.querySelector("[data-language-picker]");if(picker&&!picker.contains(e.target))closeLanguage();const navToggle=e.target.closest("[data-nav-toggle]");if(navToggle){document.querySelector(".sidebar")?.classList.toggle("open");return}if(e.target.closest("[data-search-open]")){openSearch();return}if(e.target.closest("[data-search-close]")){modal?.classList.remove("open");return}const link=e.target.closest("a[href]");if(!link)return;if(link.closest("[data-language-picker]"))return;if(link.target||link.download||!isPlainLeftClick(e))return;const url=new URL(link.href,location.href);if(url.pathname===location.pathname&&url.search===location.search&&url.hash)return;if(!isDocsPage(url))return;e.preventDefault();modal?.classList.remove("open");const ok=await navigateTo(url);if(!ok)location.href=url.href});
modal?.addEventListener("click",e=>{if(e.target===modal)modal.classList.remove("open")});addEventListener("keydown",e=>{if((e.metaKey||e.ctrlKey)&&e.key.toLowerCase()==="k"){e.preventDefault();openSearch()}if(e.key==="Escape"){modal?.classList.remove("open");closeLanguage()}});