feat(ui): add self-improve panel and proposal rendering

This commit is contained in:
Carl Niklas Rydberg 2026-02-14 21:41:09 +01:00
parent 47ae5891e1
commit c5b2776978
2 changed files with 49 additions and 0 deletions

View file

@ -216,6 +216,41 @@ async function sendChat() {
}
}
async function runSelfImprove() {
const cfg = getConfig();
const objective = document.getElementById("improveObjective").value.trim() || "Improve assistant quality and reliability";
const maxRaw = Number(document.getElementById("improveMax").value || 5);
const maxProposals = Math.max(1, Math.min(20, Number.isFinite(maxRaw) ? maxRaw : 5));
const summary = document.getElementById("improveSummary");
const list = document.getElementById("improveProposals");
summary.textContent = "Generating proposals...";
list.innerHTML = "";
try {
const data = await apiPost("/assistant/self-improve", {
objective,
release_name: cfg.releaseName || null,
max_proposals: maxProposals,
feedback_limit: 50,
action_limit: 50,
include_edited_feedback: true,
include_rejected_feedback: true,
include_blocked_actions: true,
apply: false,
});
summary.textContent = `${data.summary || ""}\n\nsignals: feedback=${data.signals?.feedback_rows ?? 0}, blocked_actions=${data.signals?.blocked_action_rows ?? 0}`;
renderRows(list, data.proposals || [], (p) => `
<div><strong>${p.proposal_id}: ${p.title}</strong></div>
<div>${p.problem}</div>
<div class="meta">risk=${p.risk} | auto_apply_safe=${p.auto_apply_safe}</div>
<div class="meta">files=${(p.files || []).join(", ") || "-"}</div>
<div class="meta">tests=${(p.tests || []).join(" | ") || "-"}</div>
<div style="margin-top:6px">${p.change || ""}</div>
`);
} catch (e) {
summary.textContent = `Error: ${String(e)}`;
}
}
document.getElementById("saveConfig").addEventListener("click", saveConfig);
document.getElementById("refreshMeta").addEventListener("click", loadMeta);
document.getElementById("loadInbox").addEventListener("click", loadInbox);
@ -223,6 +258,7 @@ document.getElementById("loadTasks").addEventListener("click", loadTasks);
document.getElementById("makeDraft").addEventListener("click", makeDraft);
document.getElementById("saveLearn").addEventListener("click", saveLearn);
document.getElementById("sendChat").addEventListener("click", sendChat);
document.getElementById("runImprove").addEventListener("click", runSelfImprove);
loadConfig();
loadMeta();

View file

@ -77,6 +77,19 @@
<textarea id="chatMessage" rows="2" placeholder="Ask the assistant..."></textarea>
<div id="chatTranscript" class="list"></div>
</section>
<section class="panel">
<div class="panel-header">
<h2>Self-Improve</h2>
<div class="controls">
<input id="improveObjective" type="text" placeholder="Objective" />
<input id="improveMax" type="number" min="1" max="20" value="5" style="width:90px" />
<button id="runImprove">Generate Proposals</button>
</div>
</div>
<pre id="improveSummary" class="output"></pre>
<div id="improveProposals" class="list"></div>
</section>
</main>
<script src="/ui/assets/app.js"></script>