diff --git a/network-poc/static/index.html b/network-poc/static/index.html index 70cdec9..1c23e7e 100644 --- a/network-poc/static/index.html +++ b/network-poc/static/index.html @@ -1076,6 +1076,13 @@
+ @@ -1246,6 +1253,24 @@ textEl.value = sharedPrompt; sharedEl.style.display = 'block'; } + + // Näytetään viimeisin pipeline-prompti valitulle agentille + const lastPromptDiv = document.getElementById('agent-last-prompt'); + const lastPromptText = document.getElementById('agent-last-prompt-text'); + if (selectedAgents.size === 1) { + const agent = [...selectedAgents][0]; + const lastStep = [...pipelineSteps].reverse().find(s => s.agent === agent && s.status === 'done' && s.input); + if (lastStep) { + lastPromptDiv.style.display = 'block'; + lastPromptText.value = lastStep.input; + lastPromptText.dataset.agent = agent; + lastPromptText.dataset.label = lastStep.label; + } else { + lastPromptDiv.style.display = 'none'; + } + } else { + lastPromptDiv.style.display = 'none'; + } } window.selectAgent = function(agent) { @@ -1301,7 +1326,18 @@ clearTimeout(saved._t); saved._t = setTimeout(() => saved.style.opacity = '0', 1500); }); - + + // "Aja uudelleen" -nappi: ajaa editoidun promptin samalla agentilla + document.getElementById('agent-rerun-btn')?.addEventListener('click', () => { + const textEl = document.getElementById('agent-last-prompt-text'); + const prompt = textEl?.value?.trim(); + if (!prompt) return; + const agent = textEl.dataset.agent; + const model = agentPrompts[agent]?.model || 'qwen-coder'; + termLog(`$ ↻ Aja uudelleen: ${esc(agent)} — ${esc(prompt.substring(0, 60))}...`); + kpnRun(model, prompt); + }); + function checkAgentConfusion() { Object.keys(agentPrompts).forEach(agent => { const prompt = agentPrompts[agent].prompt || ""; @@ -2107,8 +2143,6 @@ termLog(`━━━ Pipeline käynnistyy ━━━`); // Vaihe 1: Manageri pilkkoo projektin tiedostoiksi - termLog(`\n[1] Manageri — projektin suunnittelu`); - pipelineStep('manager', 'Suunnittelu', 'active', task); const managerPrompt = `List the source files needed for this project. One file per line, format: filename.py: one-line description @@ -2121,9 +2155,11 @@ CONSTRAINTS — the coder can only generate ~400 tokens per file: - Prefer fewer, focused files over many small ones Project: ${task}`; + termLog(`\n[1] Manageri — projektin suunnittelu`); + pipelineStep('manager', 'Suunnittelu', 'active', managerPrompt); const plan = await kpnRun(agentPrompts.manager.model, managerPrompt, false, 200); if (!plan) { termLog(' ✗ Pipeline keskeytyi (manageri)', '#f85149'); return; } - pipelineStep('manager', 'Suunnittelu', 'done', task, plan); + pipelineStep('manager', 'Suunnittelu', 'done', managerPrompt, plan); // Parsitaan tiedostolista: "filename.py: description" TAI pelkkä "filename.py" const fileList = plan.split('\n') @@ -2160,7 +2196,7 @@ Project: ${task}`; for (let i = 0; i < fileList.length; i++) { const file = fileList[i]; termLog(`\n[${i + 2}] Koodari — ${esc(file.name)}`); - pipelineStep('coder', file.name, 'active', file.desc); + pipelineStep('coder', file.name, 'active', ''); // Rakennetaan konteksti: aiemmin generoidut tiedostot let context = ''; @@ -2196,7 +2232,7 @@ IMPORTANT: Keep the code SHORT and focused. Max ~50 lines. No comments, no docst return; } generatedFiles[file.name] = code; - pipelineStep('coder', file.name, 'done', file.desc, code); + pipelineStep('coder', file.name, 'done', coderPrompt, code); } // Vaihe 3: Testaaja arvioi koko projektin