From 1887ee7a411333434d065f01cb380bc855199fcd Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sun, 12 Jul 2026 11:24:36 +0200 Subject: [PATCH] Feat: Add LLM-powered commit rewording and rewrite queue management --- renderer.js | 51 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/renderer.js b/renderer.js index 724892b..9ced0bf 100644 --- a/renderer.js +++ b/renderer.js @@ -9,6 +9,7 @@ window.addEventListener('DOMContentLoaded', async () => { const readmeBtn = document.getElementById('readmeBtn'); const initRepoBtn = document.getElementById('initRepoBtn'); const pushBtn = document.getElementById('pushBtn'); + const rewritePendingBtn = document.getElementById('rewritePendingBtn'); const panel = document.querySelector('.flex-1.p-4.overflow-y-auto'); const PAGE_SIZE = 50; @@ -107,6 +108,24 @@ window.addEventListener('DOMContentLoaded', async () => { } }); + rewritePendingBtn.addEventListener('click', async () => { + const selected = await window.electronAPI.getSelected(); + if (!selected?.path) return; + rewritePendingBtn.disabled = true; + rewritePendingBtn.textContent = 'Starting rewrite…'; + try { + const result = await window.electronAPI.rewritePendingCommits(selected.path); + if (!result?.success) { + alert('Rewrite could not start:\n' + (result?.error || 'Unknown error')); + } + } catch (err) { + alert('Rewrite could not start:\n' + (err.message || err)); + } finally { + const refreshed = await getFolderObjByPath(selected.path); + if (refreshed) await renderContent(refreshed, lastPage); + } + }); + // Drag and Drop document.body.addEventListener('dragover', e => { @@ -532,6 +551,7 @@ window.addEventListener('DOMContentLoaded', async () => { pushBtn.disabled = !isGit; pushBtn.classList.toggle('hidden', !isGit); if (!isGit) { + rewritePendingBtn.classList.add('hidden'); contentList.innerHTML = '
Not a Git repository. Click "Init Repo" to initialize.
'; paginationEl.innerHTML = ''; lastFolderPath = folder; @@ -558,19 +578,24 @@ window.addEventListener('DOMContentLoaded', async () => { lastFolderPath = folder; lastPage = usePage; - const { head, commits, total, page: currentPage, pageSize, pages } = + const { head, commits, total, page: currentPage, pageSize, pages, pendingRewriteCount } = await window.electronAPI.getCommits(folderObj, usePage, PAGE_SIZE); + const pendingCount = pendingRewriteCount || 0; + rewritePendingBtn.classList.toggle('hidden', pendingCount === 0 && !folderObj.rewriteInProgress); + rewritePendingBtn.disabled = !!folderObj.rewriteInProgress || pendingCount === 0; + rewritePendingBtn.textContent = folderObj.rewriteInProgress + ? 'Rewriting…' + : `Rewrite pending (${pendingCount})`; + if (!commits || !commits.length) { + rewritePendingBtn.classList.add('hidden'); contentList.innerHTML = '
No commits found.
'; paginationEl.innerHTML = ''; return; } contentList.innerHTML = commits.map(c => { - const isQueued = folderObj.llmCandidates && folderObj.llmCandidates.some(fullHash => - fullHash.startsWith(c.hash) - ); return `
  • @@ -605,6 +630,17 @@ window.addEventListener('DOMContentLoaded', async () => { Jump Here +
    ${ - isQueued + c.needsRewrite ? `In Rewrite Queue` : '' }