Files
store/log.sune
2025-09-09 11:24:53 -07:00

1 line
3.9 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[{"id":"bthcn7s","name":"Log","pinned":false,"avatar":"","url":"gh://sune-org/store/log.sune","updatedAt":1757442294269,"settings":{"model":"openai/gpt-5-chat","temperature":"","top_p":"","top_k":"","frequency_penalty":"","repetition_penalty":"","min_p":"","top_a":"","verbosity":"","reasoning_effort":"default","system_prompt":"","html":"<!-- SuneBuilderGPT: Log Catcher v1.0.1 -->\n<div x-data=\"{ open: JSON.parse(localStorage.getItem(window.SUNE.id + '_logbox_open') || 'false'), toggle() { this.open = !this.open; localStorage.setItem(window.SUNE.id + '_logbox_open', this.open) } }\" class=\"text-sm border rounded-lg m-2 bg-white shadow-sm\">\n <div @click=\"toggle()\" class=\"flex items-center justify-between p-2 cursor-pointer border-b select-none\">\n <div class=\"flex items-center gap-2 font-medium\">\n <i data-lucide=\"terminal\" class=\"h-4 w-4\"></i>\n <span>Console Log</span>\n </div>\n <div class=\"flex items-center gap-2\">\n <span class=\"text-xs text-gray-400\">v1.0.1</span>\n <button @click.stop=\"document.getElementById('sune_logbox').innerHTML=''\" class=\"p-1 rounded hover:bg-gray-100\" title=\"Clear logs\">\n <i data-lucide=\"trash-2\" class=\"h-4 w-4\"></i>\n </button>\n <button class=\"p-1 rounded hover:bg-gray-100\" :aria-expanded=\"open\" aria-controls=\"sune_logbox_wrapper\">\n <i x-show=\"!open\" data-lucide=\"chevron-down\" class=\"h-4 w-4\"></i>\n <i x-show=\"open\" data-lucide=\"chevron-up\" class=\"h-4 w-4\"></i>\n </button>\n </div>\n </div>\n <div id=\"sune_logbox_wrapper\" x-show=\"open\" x-transition class=\"bg-gray-900 text-white font-mono text-xs p-2 max-h-60 overflow-y-auto\">\n <div id=\"sune_logbox\" class=\"whitespace-pre-wrap break-words\"></div>\n </div>\n</div>\n<script>\n(() => {\n const suneEl=document.currentScript.parentElement;\n const logbox=suneEl.querySelector('#sune_logbox');\n if(!logbox){console.error('Logbox element not found');return}\n const oldConsole={...console};\n const esc=s=>s.replace(/[&<>'\"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','\\'':'&#39;','\\\"':'&quot;'}[c]));\n const formatArg=a=>{\n if(typeof a==='string')return esc(a);\n if(a instanceof Error)return esc(a.stack||a.message);\n try{return esc(JSON.stringify(a,null,2))}catch{return '[Unserializable]'}\n };\n const print=(level,...args)=>{\n if(!logbox)return;\n const c={log:'text-gray-300',info:'text-blue-400',warn:'text-yellow-400',error:'text-red-500',debug:'text-purple-400'};\n const i={log:'»',info:'',warn:'⚠',error:'✖',debug:'⚬'};\n const time=new Date().toLocaleTimeString([],{hour12:!1});\n const content=args.map(formatArg).join(' ');\n logbox.innerHTML+=`<div class=\"flex gap-2 items-start ${c[level]||'text-gray-300'}\"><span class=\"opacity-50\">${time}</span><span class=\"font-bold\">${i[level]||''}</span><span class=\"flex-1\">${content}</span></div>`;\n logbox.parentElement.scrollTop=logbox.parentElement.scrollHeight;\n };\n const hook=level=>{console[level]=(...a)=>{oldConsole[level](...a);print(level,...a)}};\n ['log','warn','error','info','debug'].forEach(hook);\n const errHandler=e=>print('error',e.error||e.reason||e.message||'Unknown error');\n const rejectHandler=e=>print('error','Unhandled Promise Rejection:',e.reason);\n window.addEventListener('error',errHandler);\n window.addEventListener('unhandledrejection',rejectHandler);\n const cleanup=()=>{\n Object.assign(console,oldConsole);\n window.removeEventListener('error',errHandler);\n window.removeEventListener('unhandledrejection',rejectHandler);\n };\n suneEl.closest('#suneHtml')?.addEventListener('sune:unmount',cleanup,{once:true});\n print('info','Log catcher initialized.');\n})();\n</script>\n","extension_html":"<sune src='https://raw.githubusercontent.com/sune-org/store/refs/heads/main/sync.sune' private></sune>","hide_composer":false},"storage":{}}]