mirror of
https://github.com/sune-org/store.git
synced 2026-01-13 16:17:58 +00:00
Sync: Update sune 'Log'
This commit is contained in:
2
log.sune
2
log.sune
@@ -1 +1 @@
|
||||
[{"id":"bthcn7s","name":"Log","pinned":false,"avatar":"","url":"gh://sune-org/store/log.sune","updatedAt":1757442013709,"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=>({'&':'&','<':'<','>':'>','\\'':''','\\\"':'"'}[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 />","hide_composer":false},"storage":{}}]
|
||||
[{"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=>({'&':'&','<':'<','>':'>','\\'':''','\\\"':'"'}[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":{}}]
|
||||
Reference in New Issue
Block a user