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

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
+4 -3
View File
@@ -91,9 +91,10 @@ AI 要傳檔案給你:寫進工作目錄的 `.tgbot-outbox/`,bot 回覆後自動
4. **工作目錄**:按「📂 瀏覽…」會在這台機器桌面跳出原生資料夾視窗,選完自動帶入
5. **模型 / 推理強度**:下拉選單,預設值自動帶你機器上該引擎的全域設定;換模型時強度選項會連動
6. **會話模式**:各聊天室獨立 / 所有聊天室共用 / 每則訊息獨立(不保留記憶,最快)
7. **可讀寫成員**(選填):填 Telegram username(逗號分隔),清單外的人一律以 read-only 沙盒執行,由 CLI 層硬擋;留空 = 所有人都依沙盒設定
8. **回覆規範**(選填):每則訊息開頭附加的規則,例如「只回答本專案相關問題」「@xxx 是後端工程師,回覆用 API 契約視角」;專案本身的規範仍放工作目錄的 `AGENTS.md` / `CLAUDE.md`
9. 勾「建立後立即啟動」→ 儲存,bot 就上線了
7. **額外選項**(打勾才展開;取消打勾儲存會清空):
- **可讀寫成員**:填 Telegram username(逗號分隔),清單外的人一律以 read-only 沙盒執行,由 CLI 層硬擋;留空 = 所有人都依沙盒設定
- **回覆規範**:每則訊息開頭附加的規則,例如「只回答本專案相關問題」「@xxx 是後端工程師,回覆用 API 契約視角」;專案本身的規範仍放工作目錄的 `AGENTS.md` / `CLAUDE.md`
8. 勾「建立後立即啟動」→ 儲存,bot 就上線了
![新增 Bot 表單](https://jianmiau.ddns.net/AI/telegram-codex-bot/media/branch/master/docs/02-create.png)
Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 KiB

After

Width:  |  Height:  |  Size: 130 KiB

+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 {