Files
.sune/flash.sune

1 line
30 KiB
Plaintext

[{"id":"xpbsi6l","name":"Flash Girl","pinned":true,"avatar":"data:image/webp;base64,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","url":"gh://multipleof4/.sune/flash.sune","updatedAt":1757278223362,"settings":{"model":"g:gemini-2.5-flash","temperature":"","top_p":"","top_k":"","frequency_penalty":"","presence_penalty":"","repetition_penalty":"","min_p":"","top_a":"","max_tokens":"","verbosity":"","reasoning_effort":"default","system_prompt":"","html":"<!-- GitHub Blob Fetch Sune (multi-URL with +) — compact, Fetch All on top -->\n<div id=\"ghFetchSune\" class=\"p-2 border-b border-gray-200\">\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center gap-2\">\n <i data-lucide=\"github\" class=\"h-4 w-4\"></i>\n <span class=\"text-xs font-medium\">GitHub Fetch</span>\n </div>\n <div class=\"flex items-center gap-1\">\n <button id=\"ghFetchAllBtn\" type=\"button\" class=\"rounded-lg px-2 py-1 text-xs bg-black text-white hover:bg-black/90\">\n Fetch All\n </button>\n <button type=\"button\" id=\"ghAddRowBtn\" class=\"h-8 w-8 rounded-lg bg-gray-100 hover:bg-gray-200 flex items-center justify-center\" title=\"Add another URL\">\n <i data-lucide=\"plus\" class=\"h-4 w-4\"></i>\n </button>\n <button type=\"button\" id=\"ghHelpBtn\" class=\"text-[11px] px-2 py-1 rounded-lg bg-gray-100 hover:bg-gray-200\">Help</button>\n </div>\n </div>\n\n <div id=\"ghRows\" class=\"mt-2 space-y-1\"></div>\n\n <div class=\"mt-2\">\n <div id=\"ghStatus\" class=\"text-[11px] text-gray-600\"></div>\n </div>\n</div>\n\n<script>\n(() => {\n const root = document.getElementById('ghFetchSune');\n if (!root) return;\n\n const $ = (sel, ctx = root) => ctx.querySelector(sel);\n const $$ = (sel, ctx = root) => Array.from(ctx.querySelectorAll(sel));\n\n const els = {\n rows: $('#ghRows'),\n addBtn: $('#ghAddRowBtn'),\n fetchAllBtn: $('#ghFetchAllBtn'),\n helpBtn: $('#ghHelpBtn'),\n status: $('#ghStatus'),\n };\n\n const icons = () => { try { window.lucide && window.lucide.createIcons({ attrs: { 'aria-hidden': 'true' } }); } catch {} };\n\n // Storage keys (migrate from single URL if present)\n function storageKeyBase() {\n const t = document.getElementById('settingsBtnTop')?.title || '';\n const m = t.match(/Settings — (.+)$/);\n const name = (m ? m[1] : 'default').toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/^_+|_+$/g, '');\n return 'gh_fetch_' + name;\n }\n const KEY_SINGLE = () => storageKeyBase(); // old single value\n const KEY_MULTI = () => storageKeyBase() + '_v2'; // new array value\n\n function loadUrls() {\n try {\n const multi = localStorage.getItem(KEY_MULTI());\n if (multi) {\n const arr = JSON.parse(multi);\n if (Array.isArray(arr)) return arr.map(x => String(x||''));\n }\n const old = localStorage.getItem(KEY_SINGLE());\n if (old && typeof old === 'string') return [old];\n } catch {}\n return [''];\n }\n\n function saveUrls(urls) {\n try {\n localStorage.setItem(KEY_MULTI(), JSON.stringify(urls.map(u => String(u||'').trim())));\n } catch {}\n }\n\n function setGlobalStatus(msg, kind = 'info') {\n els.status.textContent = msg || '';\n els.status.className = 'text-[11px] ' + (kind === 'error' ? 'text-red-600' : kind === 'ok' ? 'text-green-600' : 'text-gray-600');\n }\n\n function spinnerSvg(cls='h-3 w-3') {\n return `<svg class=\"animate-spin ${cls}\" viewBox=\"0 0 24 24\"><circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\" fill=\"none\"></circle><path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8v4A4 4 0 004 12z\"></path></svg>`;\n }\n\n // URL parsing and helpers\n function normalizeNewlines(s) { return s.replace(/\\r\\n/g, '\\n'); }\n\n function parseGitHubUrl(u) {\n try {\n const url = new URL(u);\n let owner, repo, ref, path, raw, blob, lines = null;\n\n // parse #Lx or #Lx-Ly\n if (url.hash && /L\\d+/i.test(url.hash)) {\n const m = url.hash.match(/L(\\d+)(?:-L(\\d+))?/i);\n if (m) lines = { start: Math.max(1, +m[1] || 1), end: Math.max(+m[1] || 1, +m[2] || +m[1] || 1) };\n }\n\n if (url.hostname === 'github.com') {\n const parts = url.pathname.split('/').filter(Boolean);\n // owner/repo/blob/raw/ref/...path\n if (parts.length >= 5 && (parts[2] === 'blob' || parts[2] === 'raw')) {\n owner = parts[0]; repo = parts[1]; ref = parts[3];\n path = parts.slice(4).join('/');\n raw = `https://raw.githubusercontent.com/${owner}/${repo}/${ref}/${path}`;\n blob = `https://github.com/${owner}/${repo}/blob/${ref}/${path}${url.hash || ''}`;\n return { raw, blob, owner, repo, ref, path, lines };\n }\n } else if (url.hostname === 'raw.githubusercontent.com') {\n const parts = url.pathname.split('/').filter(Boolean);\n if (parts.length >= 4) {\n owner = parts[0]; repo = parts[1]; ref = parts[2];\n path = parts.slice(3).join('/');\n raw = url.origin + url.pathname;\n blob = `https://github.com/${owner}/${repo}/blob/${ref}/${path}${url.hash || ''}`;\n return { raw, blob, owner, repo, ref, path, lines };\n }\n }\n return null;\n } catch { return null; }\n }\n\n function guessLangFromPath(p = '') {\n const name = p.toLowerCase();\n const ext = (name.split('.').pop() || '').trim();\n if (/\\.dockerfile$/.test(name) || /(^|\\/)dockerfile$/.test(name)) return 'dockerfile';\n if (/(^|\\/)makefile$/.test(name)) return 'makefile';\n const map = {\n js: 'javascript', mjs: 'javascript', cjs: 'javascript',\n ts: 'typescript', tsx: 'tsx', jsx: 'jsx',\n json: 'json', md: 'markdown',\n py: 'python', rb: 'ruby', go: 'go', rs: 'rust',\n java: 'java', kt: 'kotlin', swift: 'swift',\n c: 'c', h: 'c', cc: 'cpp', cpp: 'cpp', cxx: 'cpp', hpp: 'cpp', hh: 'cpp',\n cs: 'csharp', php: 'php',\n sh: 'bash', bash: 'bash', zsh: 'bash',\n env: 'dotenv', dotenv: 'dotenv',\n yml: 'yaml', yaml: 'yaml',\n toml: 'ini', ini: 'ini', cfg: 'ini',\n sql: 'sql', html: 'html', htm: 'html',\n css: 'css', scss: 'scss', less: 'less',\n vue: 'vue', svelte: 'svelte',\n gradle: 'groovy', groovy: 'groovy',\n txt: '', lock: '', log: ''\n };\n return map[ext] ?? '';\n }\n\n async function fetchOne(rawInput) {\n const input = (rawInput || '').trim();\n if (!input) throw new Error('Empty URL');\n const parsed = parseGitHubUrl(input);\n if (!parsed) throw new Error('Invalid GitHub URL. Use blob/raw format.');\n const res = await fetch(parsed.raw, { cache: 'no-store' });\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n let content = await res.text();\n content = normalizeNewlines(content);\n\n if (parsed.lines) {\n const lines = content.split('\\n');\n const s = Math.max(1, parsed.lines.start), e = Math.max(s, parsed.lines.end);\n content = lines.slice(s - 1, e).join('\\n');\n }\n\n const lang = guessLangFromPath(parsed.path);\n const header = `From: ${parsed.blob}`;\n const md = `${header}\\n\\n\\`\\`\\`${lang}\\n${content}\\n\\`\\`\\``;\n return { md, blob: parsed.blob };\n }\n\n // Row rendering\n let urls = loadUrls();\n\n function rowTpl(idx, value='') {\n const id = `ghRow_${idx}`;\n return `\n <div class=\"rounded-lg border border-gray-200 p-2\">\n <div class=\"flex items-stretch gap-2\">\n <input\n data-role=\"url\"\n data-index=\"${idx}\"\n id=\"${id}\"\n type=\"url\"\n inputmode=\"url\"\n placeholder=\"https://github.com/owner/repo/blob/branch/file#L1-L20\"\n class=\"flex-1 rounded-md border border-gray-300 px-2 py-1 text-xs\"\n aria-label=\"GitHub blob or raw URL\"\n value=\"${(value || '').replace(/\"/g, '&quot;')}\"\n />\n <button data-role=\"paste\" data-index=\"${idx}\" type=\"button\" class=\"rounded-md border px-2 py-1 text-xs bg-white hover:bg-gray-50\" title=\"Paste from clipboard\">\n <i data-lucide=\"clipboard\" class=\"h-4 w-4\"></i>\n </button>\n <button data-role=\"fetch-one\" data-index=\"${idx}\" type=\"button\" class=\"rounded-md px-2 py-1 text-xs bg-black text-white hover:bg-black/90\">\n Fetch\n </button>\n <button data-role=\"remove\" data-index=\"${idx}\" type=\"button\" class=\"rounded-md border px-2 py-1 text-xs bg-white hover:bg-gray-50\" title=\"Remove\">\n <i data-lucide=\"trash-2\" class=\"h-4 w-4\"></i>\n </button>\n </div>\n <div data-role=\"row-status\" data-index=\"${idx}\" class=\"mt-1 text-[11px] text-gray-500\"></div>\n </div>\n `;\n }\n\n function renderRows() {\n if (!urls.length) urls = [''];\n els.rows.innerHTML = urls.map((u, i) => rowTpl(i, u)).join('');\n icons();\n }\n\n function setRowStatus(index, msg, kind='info') {\n const node = els.rows.querySelector(`[data-role=\"row-status\"][data-index=\"${index}\"]`);\n if (!node) return;\n node.textContent = msg || '';\n node.className = 'mt-1 text-[11px] ' + (kind === 'error' ? 'text-red-600' : kind === 'ok' ? 'text-green-600' : 'text-gray-500');\n }\n\n async function postToChat(md) {\n if (window.USER && typeof window.USER.log === 'function') {\n await window.USER.log(md);\n return true;\n }\n throw new Error('window.USER.log is not available');\n }\n\n async function fetchRow(index) {\n const input = els.rows.querySelector(`input[data-role=\"url\"][data-index=\"${index}\"]`);\n const fetchBtn = els.rows.querySelector(`button[data-role=\"fetch-one\"][data-index=\"${index}\"]`);\n if (!input || !fetchBtn) return;\n\n setRowStatus(index, '');\n const url = (input.value || '').trim();\n if (!url) {\n setRowStatus(index, 'Enter a GitHub blob or raw URL.', 'error');\n return;\n }\n\n fetchBtn.dataset._prev = fetchBtn.innerHTML;\n fetchBtn.innerHTML = spinnerSvg();\n fetchBtn.classList.add('bg-gray-800');\n input.disabled = true;\n\n try {\n const { md, blob } = await fetchOne(url);\n await postToChat(md);\n urls[index] = blob; // store canonical blob\n saveUrls(urls);\n setRowStatus(index, 'Added to chat.', 'ok');\n } catch (err) {\n setRowStatus(index, (err && err.message) ? err.message : String(err), 'error');\n } finally {\n input.disabled = false;\n if (fetchBtn.dataset._prev) fetchBtn.innerHTML = fetchBtn.dataset._prev;\n fetchBtn.classList.remove('bg-gray-800');\n }\n }\n\n // Events - delegation for rows\n els.rows.addEventListener('click', async (e) => {\n const btn = e.target.closest('button[data-role]');\n if (!btn) return;\n const role = btn.getAttribute('data-role');\n const index = +btn.getAttribute('data-index');\n if (Number.isNaN(index)) return;\n\n if (role === 'paste') {\n try {\n const t = await navigator.clipboard.readText();\n if (t) {\n const input = els.rows.querySelector(`input[data-role=\"url\"][data-index=\"${index}\"]`);\n input.value = t.trim();\n urls[index] = input.value;\n saveUrls(urls);\n setRowStatus(index, 'Pasted from clipboard.');\n }\n } catch {\n setRowStatus(index, 'Clipboard read failed. Paste manually.', 'error');\n }\n } else if (role === 'fetch-one') {\n await fetchRow(index);\n } else if (role === 'remove') {\n if (urls.length === 1) {\n urls[0] = '';\n } else {\n urls.splice(index, 1);\n }\n saveUrls(urls);\n renderRows();\n }\n });\n\n els.rows.addEventListener('change', (e) => {\n const input = e.target.closest('input[data-role=\"url\"]');\n if (!input) return;\n const index = +input.getAttribute('data-index');\n if (Number.isNaN(index)) return;\n urls[index] = input.value.trim();\n saveUrls(urls);\n });\n\n els.rows.addEventListener('keydown', (e) => {\n const input = e.target.closest('input[data-role=\"url\"]');\n if (!input) return;\n if (e.key === 'Enter') {\n e.preventDefault();\n const index = +input.getAttribute('data-index');\n if (!Number.isNaN(index)) fetchRow(index);\n }\n });\n\n // Top controls\n els.addBtn.addEventListener('click', () => {\n urls.push('');\n saveUrls(urls);\n renderRows();\n requestAnimationFrame(() => {\n const lastIndex = urls.length - 1;\n const input = els.rows.querySelector(`input[data-role=\"url\"][data-index=\"${lastIndex}\"]`);\n input?.focus();\n });\n });\n\n els.fetchAllBtn.addEventListener('click', async () => {\n const list = urls.map((u, i) => ({ url: (u||'').trim(), i })).filter(x => x.url);\n if (!list.length) {\n setGlobalStatus('No URLs to fetch. Add with + or paste into a field.', 'error');\n return;\n }\n\n els.fetchAllBtn.dataset._prev = els.fetchAllBtn.innerHTML;\n els.fetchAllBtn.innerHTML = spinnerSvg('h-3 w-3');\n els.fetchAllBtn.classList.add('bg-gray-800');\n els.fetchAllBtn.disabled = true;\n setGlobalStatus('Fetching…');\n\n let ok = 0, fail = 0;\n for (const it of list) {\n try {\n await fetchRow(it.i);\n ok++;\n } catch {\n fail++;\n }\n }\n\n els.fetchAllBtn.innerHTML = els.fetchAllBtn.dataset._prev || 'Fetch All';\n els.fetchAllBtn.classList.remove('bg-gray-800');\n els.fetchAllBtn.disabled = false;\n\n if (fail === 0) setGlobalStatus(`Fetched ${ok} item(s).`, 'ok');\n else setGlobalStatus(`Fetched ${ok}, ${fail} failed.`, 'error');\n });\n\n els.helpBtn.addEventListener('click', () => {\n const tip = [\n 'How to use:',\n '• Click + to add more URL fields.',\n '• Enter GitHub blob URLs, e.g.:',\n ' https://github.com/owner/repo/blob/branch/path/to/file.ext#L10-L42',\n ' or raw URLs like:',\n ' https://raw.githubusercontent.com/owner/repo/branch/path/to/file.ext',\n '• Click Fetch on a row (or Fetch All) to post into the chat.',\n '',\n 'Notes:',\n '- #Lx or #Lx-Ly anchors will select line(s).',\n '- Private repos are not supported.',\n '- URLs are stored locally per sune.'\n ].join('\\n');\n alert(tip);\n });\n\n // Initial render\n function setGlobalStatus(msg, kind = 'info') {\n els.status.textContent = msg || '';\n els.status.className = 'text-[11px] ' + (kind === 'error' ? 'text-red-600' : kind === 'ok' ? 'text-green-600' : 'text-gray-600');\n }\n\n renderRows();\n icons();\n})();\n</script>","extension_html":"<sune src='https://raw.githubusercontent.com/sune-org/store/refs/heads/main/sync.sune' private />","hide_composer":false,"script":""},"storage":{}}]