diff --git a/README.md b/README.md index 94a8f95..53ebc4d 100644 --- a/README.md +++ b/README.md @@ -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) diff --git a/docs/02-create.png b/docs/02-create.png index 240ae34..9f67f76 100644 Binary files a/docs/02-create.png and b/docs/02-create.png differ diff --git a/docs/05-edit-claude.png b/docs/05-edit-claude.png index ccc8c78..db1e2a4 100644 Binary files a/docs/05-edit-claude.png and b/docs/05-edit-claude.png differ diff --git a/src/web/public/index.html b/src/web/public/index.html index 57a7eea..c510bbe 100644 --- a/src/web/public/index.html +++ b/src/web/public/index.html @@ -255,14 +255,20 @@
workspace-write 沙盒預設禁網;要呼叫外部 API(例如生圖服務)才需要打開。目前只有 Codex 引擎有此選項
- - -
有填時,清單外的人一律以 read-only 沙盒執行(只能查詢、不能改檔或跑指令),由 CLI 層硬擋
+ +
打勾才會設定;取消打勾儲存時會清空這兩項
-
- - -
選填。適合放「專案守門」「成員身分」這類每輪都要提醒的規則;專案本身的規範請放工作目錄的 AGENTS.md / CLAUDE.md
+
@@ -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 {