表單:可讀寫成員與回覆規範收進「額外選項」,打勾才顯示並設定

This commit is contained in:
2026-08-24 12:06:45 +08:00
parent ce8ba3cd5a
commit c112c56676
4 changed files with 27 additions and 12 deletions
+23 -9
View File
@@ -255,14 +255,20 @@
<div class="hint">workspace-write 沙盒預設禁網;要呼叫外部 API(例如生圖服務)才需要打開。目前只有 Codex 引擎有此選項</div>
</div>
<div class="field">
<label>可讀寫成員(Telegram username</label>
<input id="f-writeusers" placeholder="例:JianMiau, someone(留空 = 所有人都依沙盒設定)" autocomplete="off">
<div class="hint">有填時,清單外的人一律以 read-only 沙盒執行(只能查詢、不能改檔或跑指令),由 CLI 層硬擋</div>
<label class="check"><input type="checkbox" id="f-extra" onchange="toggleExtra()"> 額外選項(可讀寫成員、回覆規範</label>
<div class="hint">打勾才會設定;取消打勾儲存時會清空這兩項</div>
</div>
<div class="field">
<label>回覆規範(每則訊息開頭附加)</label>
<textarea id="f-rules" placeholder="例:只回答與本專案相關的問題;@xxx 是後端工程師,回覆用 API 契約視角…"></textarea>
<div class="hint">選填。適合放「專案守門」「成員身分」這類每輪都要提醒的規則;專案本身的規範請放工作目錄的 AGENTS.md / CLAUDE.md</div>
<div id="f-extra-fields" style="display:none;border-left:2px solid #2e3345;padding-left:12px;margin-bottom:13px">
<div class="field">
<label>可讀寫成員(Telegram username</label>
<input id="f-writeusers" placeholder="例:JianMiau, someone(留空 = 所有人都依沙盒設定)" autocomplete="off">
<div class="hint">有填時,清單外的人一律以 read-only 沙盒執行(只能查詢、不能改檔或跑指令),由 CLI 層硬擋</div>
</div>
<div class="field" style="margin-bottom:0">
<label>回覆規範(每則訊息開頭附加)</label>
<textarea id="f-rules" placeholder="例:只回答與本專案相關的問題;@xxx 是後端工程師,回覆用 API 契約視角…"></textarea>
<div class="hint">適合放「專案守門」「成員身分」這類每輪都要提醒的規則;專案本身的規範請放工作目錄的 AGENTS.md / CLAUDE.md</div>
</div>
</div>
<div class="field">
<label>逾時(分鐘)</label>
@@ -365,6 +371,12 @@ const ENGINE_UI = {
},
};
function currentEngine() { return document.getElementById('f-engine').value || 'codex'; }
// 額外選項(可讀寫成員、回覆規範):打勾才顯示;沒打勾儲存時兩項清空
function toggleExtra(on) {
const cb = document.getElementById('f-extra');
if (on !== undefined) cb.checked = !!on;
document.getElementById('f-extra-fields').style.display = cb.checked ? '' : 'none';
}
function engineData() { return enginesCache[currentEngine()] || { models: [], defaults: {} }; }
function engineTag(engine) {
const e = engine === 'claude' ? 'claude' : 'codex';
@@ -549,6 +561,7 @@ function openCreate() {
document.getElementById('f-network').checked = false;
document.getElementById('f-writeusers').value = '';
document.getElementById('f-rules').value = '';
toggleExtra(false);
document.getElementById('f-timeout').value = '30';
document.getElementById('f-autostart-wrap').style.display = '';
document.getElementById('f-autostart').checked = true;
@@ -575,6 +588,7 @@ function openEdit(name) {
document.getElementById('f-network').checked = !!b.networkAccess;
document.getElementById('f-writeusers').value = (b.writeUsers || []).join(', ');
document.getElementById('f-rules').value = b.promptRules || '';
toggleExtra(!!((b.writeUsers && b.writeUsers.length) || b.promptRules));
document.getElementById('f-timeout').value = b.timeoutMinutes || 30;
document.getElementById('f-autostart-wrap').style.display = 'none';
document.getElementById('bot-modal').classList.add('show');
@@ -598,8 +612,8 @@ async function saveBot() {
reasoningEffort: document.getElementById('f-effort').value,
sessionMode: document.getElementById('f-session').value,
networkAccess: document.getElementById('f-network').checked,
writeUsers: document.getElementById('f-writeusers').value,
promptRules: document.getElementById('f-rules').value,
writeUsers: document.getElementById('f-extra').checked ? document.getElementById('f-writeusers').value : '',
promptRules: document.getElementById('f-extra').checked ? document.getElementById('f-rules').value : '',
timeoutMinutes: document.getElementById('f-timeout').value,
};
try {