对话落盘同一轮填写失败后可以按次数补写。

游玩投影不再送进只给程序用的壳源码。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-14 08:29:38 +08:00
co-authored by Cursor
parent bc77bc4a3c
commit b864591afa
23 changed files with 980 additions and 113 deletions
+4
View File
@@ -1405,6 +1405,10 @@ code {
background: var(--st-surface);
}
.settings-section .storage-card + .storage-card {
margin-top: 16px;
}
.storage-card h3 {
margin: 0 0 8px;
font-size: 15px;
+22
View File
@@ -18,6 +18,7 @@
<a class="st-brand" href="/">Writing Agent</a>
<nav class="st-nav" aria-label="主导航">
<a href="/">对话</a>
<a href="/chat.html">直聊</a>
<a href="/modules.html">技能</a>
<a href="/libraries.html">库</a>
<a href="/stats.html">Token</a>
@@ -133,6 +134,27 @@
<button type="button" class="btn-secondary danger-outline" id="btn-clear-context">清除全部痕迹</button>
</div>
</div>
<div class="settings-card storage-card">
<h3>对话落盘补写</h3>
<p class="settings-help">
同一句用户消息里,填写没通过时可以再自动补几枪。每一枪只改失败点:已经通过的产物不动,没通过的用上一份正文当底稿,已经填对的自评维度会带回去。次数用尽后仍标成失败待补,等下一句继续。
</p>
<label class="field">
同轮最多补写次数
<input
type="number"
id="dictate-fill-retries"
min="0"
max="12"
step="1"
value="0"
/>
</label>
<p class="settings-help muted">0 = 只填一次。最大 12。例如设为 7,就是第一次填写之外最多再试 7 次。</p>
<div class="storage-actions">
<button type="button" class="btn-primary" id="btn-save-fill-retries">保存次数</button>
</div>
</div>
</section>
</div>
</main>
+23 -1
View File
@@ -62,6 +62,7 @@ const preferenceCollectEveryEl = document.getElementById("preference-collect-eve
const activeSettingsBarEl = document.getElementById("active-settings-bar");
const settingsToastEl = document.getElementById("settings-toast");
const contextTraceKeepEl = document.getElementById("context-trace-keep");
const dictateFillRetriesEl = document.getElementById("dictate-fill-retries");
const probeDialog = document.getElementById("preset-probe-dialog");
const probePresetNameEl = document.getElementById("probe-preset-name");
const probeMessageEl = document.getElementById("probe-message");
@@ -193,7 +194,7 @@ function renderPanelHeader() {
panelActionsEl.appendChild(btn);
} else {
panelTitleEl.textContent = "上下文";
panelSubtitleEl.textContent = "控制每个对话保留多少条完整 prompt 痕迹";
panelSubtitleEl.textContent = "上下文痕迹,以及对话落盘同轮补写次数";
}
}
@@ -776,6 +777,9 @@ async function loadAll() {
state.settings.contextTraceKeepLatest ?? 5,
);
}
if (dictateFillRetriesEl) {
dictateFillRetriesEl.value = String(state.settings.dictateFillRetries ?? 0);
}
renderActiveBar();
renderProfiles();
renderPersonas();
@@ -1798,6 +1802,24 @@ probeMessageEl?.addEventListener("keydown", (e) => {
}
});
document.getElementById("btn-save-fill-retries")?.addEventListener("click", async () => {
try {
const n = Number(dictateFillRetriesEl?.value ?? 0);
const data = await api("/api/settings", {
method: "PUT",
body: JSON.stringify({ dictateFillRetries: n }),
});
state.settings = data.settings;
if (dictateFillRetriesEl) {
dictateFillRetriesEl.value = String(data.settings.dictateFillRetries ?? 0);
}
const saved = data.settings.dictateFillRetries ?? 0;
showToast(saved === 0 ? "已保存:对话落盘只填一次" : `已保存:同轮最多再补写 ${saved} 次`);
} catch (err) {
showToast(err.message, true);
}
});
document.getElementById("btn-save-context-keep")?.addEventListener("click", async () => {
try {
const n = Number(contextTraceKeepEl?.value ?? 5);