Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/awtsmoos_awtsmoos.com.json
T
OpenCode 68a9071cf1 feat: reconcile local master with origin (exa/hot-platform hunters, leaks ledger, latest results)
Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
2026-08-07 12:53:47 +08:00

1 line
28 KiB
JSON

{"repo": "awtsmoos/awtsmoos.com", "files": {"geelooy/apps/code/js/vibe/view/manager/GatekeeperBox.js": {"f80f026c091385b5e6367d172e28348b6400addb": {"t": 1785674016.1427135, "n": 6848, "h": "0fdcb1f7f6663865", "c": "\n// B\"H\n/**\n * @file GatekeeperBox.js\n * @brief THE PALACE OF THE DIMENSIONAL KEYS.\n */\n\nimport { ModelManager } from '../../model-manager.js';\nimport { UI } from '../../../ui.js';\n\nexport const GatekeeperBox = {\n /**\n * B\"H - Constructs the API Credentials Sphere.\n */\n build(gKey, orKey, groqKey, cerebrasKey, openaiKey, xaiKey, togetherKey, minimaxKey, models) {\n return {\n className: 'vibe-manager-box gatekeepers',\n children: [\n {\n className: 'vibe-manager-title-row',\n children: [\n { tag: 'h3', className: 'vibe-manager-box-title', text: '◈ The Gatekeepers' },\n { tag: 'span', style: { color: 'var(--neon-lime)', fontSize: '0.7em', fontWeight: 'bold' }, text: 'API INTEGRITY :: ACTIVE' }\n ]\n },\n // Google Section\n this._credentialPalace('Google Gemini', 'AIzaSy...', gKey, 'mgr-api-key-google', 'mgr-save-key-g'),\n // OpenRouter Section\n this._credentialPalace('OpenRouter Multi-Vessel', 'sk-or-v1-...', orKey, 'mgr-api-key-or', 'mgr-save-key-o', 'https://openrouter.ai/keys'),\n // Groq Section\n this._credentialPalace('Groq', 'gsk_...', groqKey, 'mgr-api-key-groq', 'mgr-save-key-groq', 'https://console.groq.com/keys'),\n // Cerebras Section\n this._credentialPalace('Cerebras', 'csk-...', cerebrasKey, 'mgr-api-key-cerebras', 'mgr-save-key-cerebras', 'https://cloud.cerebras.ai/platform/api-keys'),\n // OpenAI Section\n this._credentialPalace('OpenAI', 'sk-...', openaiKey, 'mgr-api-key-openai', 'mgr-save-key-openai', 'https://platform.openai.com/api-keys'),\n // xAI Section\n this._credentialPalace('xAI (Grok)', 'xai-...', xaiKey, 'mgr-api-key-xai', 'mgr-save-key-xai', 'https://console.x.ai'),\n // Together Section\n this._credentialPalace('Together AI', 'together-...', togetherKey, 'mgr-api-key-together', 'mgr-save-key-together', 'https://api.together.xyz/settings/api-keys'),\n // MiniMax Section\n this._credentialPalace('MiniMax', 'sk-cp-...', ModelManager.getKey('minimax') || '', 'mgr-api-key-minimax', 'mgr-save-key-minimax', 'https://api.minimax.io/'),\n \n // Model Selection Sphere\n {\n style: { marginTop: '10px' },\n children: [\n { tag: 'label', className: 'vibe-manager-label', style: { color: 'var(--neon-magenta)', fontSize: '0.85em' }, text: 'Manifestation Vessel (Current Model)' },\n {\n tag: 'select', id: 'mgr-model-select', className: 'vibe-manager-select',\n children: models.length > 0 ? models.map(m => {\n const pIcon = m.provider === 'openrouter' ? '🌐' : '⚡';\n let info = '';\n if (m.costPrompt !== undefined && m.costPrompt !== null) {\n info = ' ($' + m.costPrompt + ' / $' + m.costCompletion + ')';\n }\n \n return {\n tag: 'option', value: m.id,\n attributes: m.id === ModelManager.currentModel ? { selected: 'true' } : {},\n text: pIcon + ' ' + m.displayName + info\n };\n }) : [{ tag: 'option', text: 'Synthesize Credentials to View Models' }]\n }\n ]\n }\n ]\n };\n },\n\n _credentialPalace(title, hint, val, inputId, btnId, link = null) {\n const parts = [\n { tag: 'label', className: 'vibe-manager-label', text: title + ' Identifier' },\n {\n className: 'vibe-manager-input-group',\n children: [\n { tag: 'input', type: 'password', id: inputId, className: 'vibe-manager-input', value: val, placeholder: hint },\n { tag: 'button', id: btnId, className: 'primary-btn', style: { minHeight: 0, padding: '0 25px', borderRadius: '4px' }, text: 'BIND' }\n ]\n }\n ];\n\n if (link) {\n parts.push({ \n tag: 'a', href: link, target: '_blank', \n style: { display: 'inline-block', marginBottom: '15px', color: 'var(--neon-cyan)', fontSize: '0.7em', textDecoration: 'underline' }, \n text: 'Invoke Portal for New Key' \n });\n }\n\n return { children: parts };\n },\n\n bind(container, refresh) {\n const bindKey = async (id, provider) => {\n const el = container.querySelector(id);\n if (el) {\n const k = el.value.trim();\n await ModelManager.addKey(k);\n refresh();\n UI.showToast('Credential Bound: ' + provider, 'success');\n }\n };\n\n const gBtn = container.querySelector('#mgr-save-key-g');\n if (gBtn) gBtn.onclick = () => bindKey('#mgr-api-key-google', 'google');\n \n const oBtn = container.querySelector('#mgr-save-key-o');\n if (oBtn) oBtn.onclick = () => bindKey('#mgr-api-key-or', 'openrouter');\n\n const groqBtn = container.querySelector('#mgr-save-key-groq');\n if (groqBtn) groqBtn.onclick = () => bindKey('#mgr-api-key-groq', 'groq');\n\n const cerebrasBtn = container.querySelector('#mgr-save-key-cerebras');\n if (cerebrasBtn) cerebrasBtn.onclick = () => bindKey('#mgr-api-key-cerebras', 'cerebras');\n\n const openaiBtn = container.querySelector('#mgr-save-key-openai');\n if (openaiBtn) openaiBtn.onclick = () => bindKey('#mgr-api-key-openai', 'openai');\n\n const xaiBtn = container.querySelector('#mgr-save-key-xai');\n if (xaiBtn) xaiBtn.onclick = () => bindKey('#mgr-api-key-xai', 'xai');\n\n const togetherBtn = container.querySelector('#mgr-save-key-together');\n if (togetherBtn) togetherBtn.onclick = () => bindKey('#mgr-api-key-together', 'together');\n\n const minimaxBtn = container.querySelector('#mgr-save-key-minimax');\n if (minimaxBtn) minimaxBtn.onclick = () => bindKey('#mgr-api-key-minimax', 'minimax');\n\n const sel = container.querySelector('#mgr-model-select');\n if (sel) {\n sel.onchange = (e) => {\n ModelManager.currentModel = e.target.value;\n ModelManager.save();\n UI.showToast('Active Portal Shipped: ' + e.target.value, 'info');\n };\n }\n }\n};\n"}, "04b2815bc60dba84135067688ec64737fe8b2a5d": {"t": 1785846815.12362, "n": 6848, "h": "0fdcb1f7f6663865", "c": "\n// B\"H\n/**\n * @file GatekeeperBox.js\n * @brief THE PALACE OF THE DIMENSIONAL KEYS.\n */\n\nimport { ModelManager } from '../../model-manager.js';\nimport { UI } from '../../../ui.js';\n\nexport const GatekeeperBox = {\n /**\n * B\"H - Constructs the API Credentials Sphere.\n */\n build(gKey, orKey, groqKey, cerebrasKey, openaiKey, xaiKey, togetherKey, minimaxKey, models) {\n return {\n className: 'vibe-manager-box gatekeepers',\n children: [\n {\n className: 'vibe-manager-title-row',\n children: [\n { tag: 'h3', className: 'vibe-manager-box-title', text: '◈ The Gatekeepers' },\n { tag: 'span', style: { color: 'var(--neon-lime)', fontSize: '0.7em', fontWeight: 'bold' }, text: 'API INTEGRITY :: ACTIVE' }\n ]\n },\n // Google Section\n this._credentialPalace('Google Gemini', 'AIzaSy...', gKey, 'mgr-api-key-google', 'mgr-save-key-g'),\n // OpenRouter Section\n this._credentialPalace('OpenRouter Multi-Vessel', 'sk-or-v1-...', orKey, 'mgr-api-key-or', 'mgr-save-key-o', 'https://openrouter.ai/keys'),\n // Groq Section\n this._credentialPalace('Groq', 'gsk_...', groqKey, 'mgr-api-key-groq', 'mgr-save-key-groq', 'https://console.groq.com/keys'),\n // Cerebras Section\n this._credentialPalace('Cerebras', 'csk-...', cerebrasKey, 'mgr-api-key-cerebras', 'mgr-save-key-cerebras', 'https://cloud.cerebras.ai/platform/api-keys'),\n // OpenAI Section\n this._credentialPalace('OpenAI', 'sk-...', openaiKey, 'mgr-api-key-openai', 'mgr-save-key-openai', 'https://platform.openai.com/api-keys'),\n // xAI Section\n this._credentialPalace('xAI (Grok)', 'xai-...', xaiKey, 'mgr-api-key-xai', 'mgr-save-key-xai', 'https://console.x.ai'),\n // Together Section\n this._credentialPalace('Together AI', 'together-...', togetherKey, 'mgr-api-key-together', 'mgr-save-key-together', 'https://api.together.xyz/settings/api-keys'),\n // MiniMax Section\n this._credentialPalace('MiniMax', 'sk-cp-...', ModelManager.getKey('minimax') || '', 'mgr-api-key-minimax', 'mgr-save-key-minimax', 'https://api.minimax.io/'),\n \n // Model Selection Sphere\n {\n style: { marginTop: '10px' },\n children: [\n { tag: 'label', className: 'vibe-manager-label', style: { color: 'var(--neon-magenta)', fontSize: '0.85em' }, text: 'Manifestation Vessel (Current Model)' },\n {\n tag: 'select', id: 'mgr-model-select', className: 'vibe-manager-select',\n children: models.length > 0 ? models.map(m => {\n const pIcon = m.provider === 'openrouter' ? '🌐' : '⚡';\n let info = '';\n if (m.costPrompt !== undefined && m.costPrompt !== null) {\n info = ' ($' + m.costPrompt + ' / $' + m.costCompletion + ')';\n }\n \n return {\n tag: 'option', value: m.id,\n attributes: m.id === ModelManager.currentModel ? { selected: 'true' } : {},\n text: pIcon + ' ' + m.displayName + info\n };\n }) : [{ tag: 'option', text: 'Synthesize Credentials to View Models' }]\n }\n ]\n }\n ]\n };\n },\n\n _credentialPalace(title, hint, val, inputId, btnId, link = null) {\n const parts = [\n { tag: 'label', className: 'vibe-manager-label', text: title + ' Identifier' },\n {\n className: 'vibe-manager-input-group',\n children: [\n { tag: 'input', type: 'password', id: inputId, className: 'vibe-manager-input', value: val, placeholder: hint },\n { tag: 'button', id: btnId, className: 'primary-btn', style: { minHeight: 0, padding: '0 25px', borderRadius: '4px' }, text: 'BIND' }\n ]\n }\n ];\n\n if (link) {\n parts.push({ \n tag: 'a', href: link, target: '_blank', \n style: { display: 'inline-block', marginBottom: '15px', color: 'var(--neon-cyan)', fontSize: '0.7em', textDecoration: 'underline' }, \n text: 'Invoke Portal for New Key' \n });\n }\n\n return { children: parts };\n },\n\n bind(container, refresh) {\n const bindKey = async (id, provider) => {\n const el = container.querySelector(id);\n if (el) {\n const k = el.value.trim();\n await ModelManager.addKey(k);\n refresh();\n UI.showToast('Credential Bound: ' + provider, 'success');\n }\n };\n\n const gBtn = container.querySelector('#mgr-save-key-g');\n if (gBtn) gBtn.onclick = () => bindKey('#mgr-api-key-google', 'google');\n \n const oBtn = container.querySelector('#mgr-save-key-o');\n if (oBtn) oBtn.onclick = () => bindKey('#mgr-api-key-or', 'openrouter');\n\n const groqBtn = container.querySelector('#mgr-save-key-groq');\n if (groqBtn) groqBtn.onclick = () => bindKey('#mgr-api-key-groq', 'groq');\n\n const cerebrasBtn = container.querySelector('#mgr-save-key-cerebras');\n if (cerebrasBtn) cerebrasBtn.onclick = () => bindKey('#mgr-api-key-cerebras', 'cerebras');\n\n const openaiBtn = container.querySelector('#mgr-save-key-openai');\n if (openaiBtn) openaiBtn.onclick = () => bindKey('#mgr-api-key-openai', 'openai');\n\n const xaiBtn = container.querySelector('#mgr-save-key-xai');\n if (xaiBtn) xaiBtn.onclick = () => bindKey('#mgr-api-key-xai', 'xai');\n\n const togetherBtn = container.querySelector('#mgr-save-key-together');\n if (togetherBtn) togetherBtn.onclick = () => bindKey('#mgr-api-key-together', 'together');\n\n const minimaxBtn = container.querySelector('#mgr-save-key-minimax');\n if (minimaxBtn) minimaxBtn.onclick = () => bindKey('#mgr-api-key-minimax', 'minimax');\n\n const sel = container.querySelector('#mgr-model-select');\n if (sel) {\n sel.onchange = (e) => {\n ModelManager.currentModel = e.target.value;\n ModelManager.save();\n UI.showToast('Active Portal Shipped: ' + e.target.value, 'info');\n };\n }\n }\n};\n"}}, "geelooy/apps/code/js/vibe/agent/state/ProviderRegistry.js": {"f80f026c091385b5e6367d172e28348b6400addb": {"t": 1785674016.470038, "n": 2511, "h": "ee09d6992b9f926d", "c": "// B\"H\n/**\n * @file ProviderRegistry.js\n * @brief Provider metadata and API key prefix detection.\n */\n\nexport const Providers = {\n minimax: {\n id: 'minimax',\n name: 'MiniMax',\n link: 'https://platform.minimax.io/docs/api-reference/text-openai-api',\n icon: '🔬',\n color: 'var(--neon-cyan)',\n prefix: 'sk-cp-'\n },\n google: {\n id: 'google',\n name: 'Google Gemini',\n link: 'https://aistudio.google.com/app/apikey',\n icon: '⚡',\n color: 'var(--neon-cyan)',\n prefix: 'AIza'\n },\n openrouter: {\n id: 'openrouter',\n name: 'OpenRouter',\n link: 'https://openrouter.ai/keys',\n icon: '🌐',\n color: 'var(--neon-magenta)',\n prefix: 'sk-or'\n },\n groq: {\n id: 'groq',\n name: 'Groq',\n link: 'https://console.groq.com/keys',\n icon: '🚀',\n color: 'var(--neon-lime)',\n prefix: 'gsk_'\n },\n cerebras: {\n id: 'cerebras',\n name: 'Cerebras',\n link: 'https://cloud.cerebras.ai/platform/api-keys',\n icon: '🧠',\n color: 'var(--neon-cyan)',\n prefix: 'csk-'\n },\n openai: {\n id: 'openai',\n name: 'OpenAI',\n link: 'https://platform.openai.com/api-keys',\n icon: '🤖',\n color: 'var(--neon-cyan)',\n prefix: 'sk-'\n },\n xai: {\n id: 'xai',\n name: 'xAI (Grok)',\n link: 'https://console.x.ai',\n icon: '🛰️',\n color: 'var(--neon-magenta)',\n prefix: 'xai-'\n },\n together: {\n id: 'together',\n name: 'Together AI',\n link: 'https://api.together.xyz/settings/api-keys',\n icon: '🧩',\n color: 'var(--neon-lime)',\n prefix: 'together-'\n }\n};\n\nexport const ProviderUtils = {\n detect(rawKey = '') {\n if (rawKey.startsWith(Providers.minimax.prefix)) return Providers.minimax;\n if (rawKey.startsWith(Providers.openrouter.prefix)) return Providers.openrouter;\n if (rawKey.startsWith(Providers.groq.prefix)) return Providers.groq;\n if (rawKey.startsWith(Providers.cerebras.prefix)) return Providers.cerebras;\n if (rawKey.startsWith(Providers.xai.prefix)) return Providers.xai;\n if (rawKey.startsWith(Providers.together.prefix)) return Providers.together;\n if (rawKey.startsWith(Providers.google.prefix)) return Providers.google;\n if (rawKey.startsWith(Providers.openai.prefix)) return Providers.openai;\n return null;\n }\n};\n"}, "04b2815bc60dba84135067688ec64737fe8b2a5d": {"t": 1785846815.188388, "n": 2511, "h": "ee09d6992b9f926d", "c": "// B\"H\n/**\n * @file ProviderRegistry.js\n * @brief Provider metadata and API key prefix detection.\n */\n\nexport const Providers = {\n minimax: {\n id: 'minimax',\n name: 'MiniMax',\n link: 'https://platform.minimax.io/docs/api-reference/text-openai-api',\n icon: '🔬',\n color: 'var(--neon-cyan)',\n prefix: 'sk-cp-'\n },\n google: {\n id: 'google',\n name: 'Google Gemini',\n link: 'https://aistudio.google.com/app/apikey',\n icon: '⚡',\n color: 'var(--neon-cyan)',\n prefix: 'AIza'\n },\n openrouter: {\n id: 'openrouter',\n name: 'OpenRouter',\n link: 'https://openrouter.ai/keys',\n icon: '🌐',\n color: 'var(--neon-magenta)',\n prefix: 'sk-or'\n },\n groq: {\n id: 'groq',\n name: 'Groq',\n link: 'https://console.groq.com/keys',\n icon: '🚀',\n color: 'var(--neon-lime)',\n prefix: 'gsk_'\n },\n cerebras: {\n id: 'cerebras',\n name: 'Cerebras',\n link: 'https://cloud.cerebras.ai/platform/api-keys',\n icon: '🧠',\n color: 'var(--neon-cyan)',\n prefix: 'csk-'\n },\n openai: {\n id: 'openai',\n name: 'OpenAI',\n link: 'https://platform.openai.com/api-keys',\n icon: '🤖',\n color: 'var(--neon-cyan)',\n prefix: 'sk-'\n },\n xai: {\n id: 'xai',\n name: 'xAI (Grok)',\n link: 'https://console.x.ai',\n icon: '🛰️',\n color: 'var(--neon-magenta)',\n prefix: 'xai-'\n },\n together: {\n id: 'together',\n name: 'Together AI',\n link: 'https://api.together.xyz/settings/api-keys',\n icon: '🧩',\n color: 'var(--neon-lime)',\n prefix: 'together-'\n }\n};\n\nexport const ProviderUtils = {\n detect(rawKey = '') {\n if (rawKey.startsWith(Providers.minimax.prefix)) return Providers.minimax;\n if (rawKey.startsWith(Providers.openrouter.prefix)) return Providers.openrouter;\n if (rawKey.startsWith(Providers.groq.prefix)) return Providers.groq;\n if (rawKey.startsWith(Providers.cerebras.prefix)) return Providers.cerebras;\n if (rawKey.startsWith(Providers.xai.prefix)) return Providers.xai;\n if (rawKey.startsWith(Providers.together.prefix)) return Providers.together;\n if (rawKey.startsWith(Providers.google.prefix)) return Providers.google;\n if (rawKey.startsWith(Providers.openai.prefix)) return Providers.openai;\n return null;\n }\n};\n"}}, "tools/meluket-translation-job/testWholePostDeepSeek.js": {"7ea17827a584911e861fc359edc69097ee1cfffd": {"t": 1786068268.789241, "n": 8108, "h": "cf4f175522dc6812", "c": "// B\"H\n/**\n * Full-post DeepSeek XML alignment test.\n * One whole Meluket maamar, one network request, zero database writes.\n */\nconst fs = require('fs');\nconst path = require('path');\nconst AwtsmoosDB = require('../../ayzarim/DosDB/awtsmoosBinary/awtsmoosDB/index.js');\nconst awts = require('../../ayzarim/DosDB/awtsmoosBinary/awtsmoosBinaryJSON/index.js');\nconst { buildWholePostPrompt } = require('./meluketWholePostPrompt.js');\n\nconst apiKey = process.env.DEEPSEEK_API_KEY;\nconst outDir = path.join(process.env.AWTSMOOS_JOB_ROOT || '/Users/awtsmoos/Documents/awtsmoos-jobs/meluket-translation-job', 'generated', 'whole-post-test');\nconst postsDbFile = '/Users/awtsmoos/Documents/awtsmoos/dayuhChadash/socialPacked/social.heichel.ikar.posts.fs.awtsdb';\nconst seriesId = process.argv.find(a => a.startsWith('--series='))?.split('=')[1] || 'כסלו_meluket';\nconst postIdArg = process.argv.find(a => a.startsWith('--post='))?.split('=')[1] || null;\nconst model = process.argv.find(a => a.startsWith('--model='))?.split('=')[1] || 'deepseek-chat';\n\nfunction stripHtml(text) { return String(text || '').replace(/<[^>]+>/g, '').replace(/\\s+/g, ' ').trim(); }\nfunction escapeRegExp(s) { return String(s).replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); }\nfunction openDb() { const db = new AwtsmoosDB(postsDbFile, { compression: false, reuseFreedSpace: 'verified', readOnly: true, processLockMode: 'shared', lockMode: 'shared' }); db.open(); return db; }\nfunction closeDb(db) { try { db.pager?.close?.(); db.processLock?.release?.(); } catch {} }\nfunction readPosts(db, id) { const p = `/social/heichelos/ikar/series/${id}/posts.awtsmoosJSON`; const st = db.fs.stat(p); return awts.deserializeBinary(db.fs.readRange(p, 0, st.size)); }\nfunction keys(o) { return o && typeof o === 'object' && !Array.isArray(o) ? Object.keys(o).filter(k => !k.startsWith('__')) : []; }\nfunction sectionParts(section) { if (Array.isArray(section)) return section.map(stripHtml).filter(Boolean); const single = stripHtml(section); return single ? [single] : []; }\nfunction pickPost(posts) { if (postIdArg) return postIdArg; return keys(posts).find(id => (posts[id]?.dayuh?.sections || []).reduce((n, sec) => n + sectionParts(sec).length, 0) > 30) || keys(posts)[0]; }\nfunction collectPostBatch() {\n const db = openDb();\n try {\n const posts = readPosts(db, seriesId);\n const postId = pickPost(posts);\n const post = posts[postId];\n const sections = [];\n for (let v = 0; v < (post.dayuh?.sections || []).length; v++) {\n const items = sectionParts(post.dayuh.sections[v]).map((text, s) => ({ s, text }));\n if (items.length) sections.push({ v, items });\n }\n return { batchId: `whole-post-${Date.now()}`, seriesId, postId, title: post.title, sections };\n } finally { closeDb(db); }\n}\nfunction attr(text, name) { const m = text.match(new RegExp(`${name}=\"([^\"]*)\"`)); return m ? m[1] : ''; }\nfunction unescapeXml(text) { return String(text).replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&amp;/g, '&'); }\nfunction textTag(xml, name) { return unescapeXml((xml.match(new RegExp(`<${name}>([\\\\s\\\\S]*?)<\\\\/${name}>`)) || [])[1] || '').trim(); }\nfunction stripMarkdownFences(xml) { return xml.replace(/^\\s*```(?:xml)?\\s*/i, '').replace(/\\s*```\\s*$/i, '').trim(); }\nfunction parseReturned(rawXml) {\n const xml = stripMarkdownFences(rawXml);\n const rootOpen = xml.match(/<awtsmoosMeluketTranslation\\b[^>]*>/)?.[0] || '';\n const returned = [];\n for (const sectionBlock of [...xml.matchAll(/<section\\b[^>]*>[\\s\\S]*?<\\/section>/g)].map(m => m[0])) {\n const sectionOpen = sectionBlock.match(/<section\\b[^>]*>/)?.[0] || '';\n const v = Number(attr(sectionOpen, 'v'));\n const summaryShort = textTag(sectionBlock, 'sectionSummaryShort');\n const summaryLong = textTag(sectionBlock, 'sectionSummaryLong');\n for (const tBlock of [...sectionBlock.matchAll(/<t\\b[^>]*>[\\s\\S]*?<\\/t>/g)].map(m => m[0])) {\n const tOpen = tBlock.match(/<t\\b[^>]*>/)?.[0] || '';\n const s = Number(attr(tOpen, 's'));\n const translation = unescapeXml((tBlock.match(/<t\\b[^>]*>([\\s\\S]*?)<\\/t>/) || [])[1] || '').trim();\n returned.push({ v, s, translation });\n }\n returned.push({ v, __summary: true, summaryShort, summaryLong });\n }\n return { xml, root: { heichel: attr(rootOpen, 'heichel'), alias: attr(rootOpen, 'alias'), seriesId: attr(rootOpen, 'seriesId'), postId: attr(rootOpen, 'postId'), batchId: attr(rootOpen, 'batchId') }, postSummaryShort: textTag(xml, 'postSummaryShort'), postSummaryEpic: textTag(xml, 'postSummaryEpic'), returned };\n}\nfunction validate(batch, parsed) {\n const expected = new Set();\n for (const section of batch.sections) for (const item of section.items) expected.add(`${section.v}:${item.s}`);\n const actual = new Set(parsed.returned.filter(x => !x.__summary).map(x => `${x.v}:${x.s}`));\n const missing = [...expected].filter(x => !actual.has(x));\n const extra = [...actual].filter(x => !expected.has(x));\n const emptyTranslations = parsed.returned.filter(x => !x.__summary && !x.translation).map(x => `${x.v}:${x.s}`);\n const expectedSections = new Set(batch.sections.map(x => String(x.v)));\n const summarySections = new Set(parsed.returned.filter(x => x.__summary && x.summaryShort && x.summaryLong).map(x => String(x.v)));\n const missingSummaries = [...expectedSections].filter(x => !summarySections.has(x));\n const rootOk = parsed.root.seriesId === batch.seriesId && parsed.root.postId === batch.postId && parsed.root.batchId === batch.batchId && parsed.root.alias === 'meluket_translation_en';\n const hasPostSummaries = !!parsed.postSummaryShort && !!parsed.postSummaryEpic;\n return { ok: rootOk && hasPostSummaries && !missing.length && !extra.length && !emptyTranslations.length && !missingSummaries.length, rootOk, hasPostSummaries, expectedTranslations: expected.size, returnedTranslations: actual.size, missing, extra, emptyTranslations, expectedSectionSummaries: expectedSections.size, missingSummaries, markdownFencePresent: /^\\s*```/i.test(parsed.xml) };\n}\nasync function callDeepSeek(prompt) {\n const res = await fetch('https://api.deepseek.com/chat/completions', { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${apiKey}` }, body: JSON.stringify({ model, temperature: 0.1, messages: [{ role: 'user', content: prompt }] }) });\n const text = await res.text();\n let json; try { json = JSON.parse(text); } catch {}\n if (!res.ok) throw new Error(`DeepSeek HTTP ${res.status}: ${text.slice(0, 1000)}`);\n return { status: res.status, rawJson: json, content: json?.choices?.[0]?.message?.content || '' };\n}\nasync function main() {\n if (!apiKey) throw new Error('DEEPSEEK_API_KEY is not set');\n fs.mkdirSync(outDir, { recursive: true });\n const batch = collectPostBatch();\n const prompt = buildWholePostPrompt(batch);\n fs.writeFileSync(path.join(outDir, 'prompt.xml.txt'), prompt);\n fs.writeFileSync(path.join(outDir, 'source-batch.json'), JSON.stringify(batch, null, 2));\n const sourceSubsections = batch.sections.reduce((n, sec) => n + sec.items.length, 0);\n const response = await callDeepSeek(prompt);\n fs.writeFileSync(path.join(outDir, 'response.raw.json'), JSON.stringify(response.rawJson, null, 2));\n fs.writeFileSync(path.join(outDir, 'response.xml'), response.content.trim());\n const parsed = parseReturned(response.content);\n const validation = validate(batch, parsed);\n const report = { B_H: true, wroteNothingToDatabase: true, outDir, source: { seriesId: batch.seriesId, postId: batch.postId, title: batch.title, sections: batch.sections.length, sourceSubsections }, deepseekStatus: response.status, validation, postSummaryShort: parsed.postSummaryShort, postSummaryEpicPreview: parsed.postSummaryEpic.slice(0, 1200), sampleTranslations: parsed.returned.filter(x => !x.__summary).slice(0, 12) };\n fs.writeFileSync(path.join(outDir, 'validation-report.json'), JSON.stringify({ ...report, parsed }, null, 2));\n console.log(JSON.stringify(report, null, 2));\n if (!validation.ok) process.exitCode = 4;\n}\nmain().catch(err => { console.error(err.stack || err.message); process.exit(1); });\n"}}}}