發佈 0.1.8:支援傳圖/傳檔給使用者,新增連網開關

摘要:
1. 交件匣機制:每輪 prompt 附系統規則,Codex 把要給使用者的檔案放進
   工作目錄的 .tgcodex-outbox/,回覆後 bot 自動傳到 Telegram(圖片走
   sendPhoto、其餘或超過 10MB 走 sendDocument)並清空,一輪上限 10 個檔案。
2. bot 設定新增「允許 Codex 連網」開關(-c sandbox_workspace_write.network_access),
   開啟後可用 codex 的 imagegen 技能生圖,已實測產出 PNG 進交件匣。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-14 17:13:12 +08:00
co-authored by Claude Fable 5
parent d5c4464fe1
commit b80d6f0a1b
7 changed files with 83 additions and 6 deletions
+9 -2
View File
@@ -227,6 +227,10 @@
</select>
<div class="hint">共用模式下 /new 會清掉所有聊天室的記憶</div>
</div>
<div class="field">
<label class="check" style="margin-top:2px"><input type="checkbox" id="f-network"> 允許 Codex 連網</label>
<div class="hint">workspace-write 沙盒預設禁網;要呼叫外部 API(例如生圖服務)才需要打開</div>
</div>
<div class="field">
<label>逾時(分鐘)</label>
<input id="f-timeout" type="number" value="30" min="1">
@@ -382,8 +386,8 @@ function renderBots(bots) {
'<td>' + statusBadge(b.status) + '</td>' +
'<td><span class="mono" title="' + esc(b.workDir) + '">' + esc(shortPath(b.workDir)) + '</span></td>' +
'<td class="mono">' + esc(b.sandbox || '-') +
((b.model || b.reasoningEffort || b.sharedSession)
? '<br><span class="script-name">' + esc([b.model, b.reasoningEffort, b.sharedSession ? '共用會話' : ''].filter(Boolean).join(' / ')) + '</span>'
((b.model || b.reasoningEffort || b.sharedSession || b.networkAccess)
? '<br><span class="script-name">' + esc([b.model, b.reasoningEffort, b.sharedSession ? '共用會話' : '', b.networkAccess ? '可連網' : ''].filter(Boolean).join(' / ')) + '</span>'
: '') + '</td>' +
'<td class="mono">' + esc(b.tokenMasked || '-') + '</td>' +
'<td>' + fmtBytes(b.memory) + '</td>' +
@@ -453,6 +457,7 @@ function openCreate() {
document.getElementById('f-sandbox').value = 'workspace-write';
populateModelSelects('', '');
document.getElementById('f-session').value = 'per-chat';
document.getElementById('f-network').checked = false;
document.getElementById('f-timeout').value = '30';
document.getElementById('f-autostart-wrap').style.display = '';
document.getElementById('f-autostart').checked = true;
@@ -475,6 +480,7 @@ function openEdit(name) {
document.getElementById('f-sandbox').value = b.sandbox || 'workspace-write';
populateModelSelects(b.model || '', b.reasoningEffort || '');
document.getElementById('f-session').value = b.sharedSession ? 'shared' : 'per-chat';
document.getElementById('f-network').checked = !!b.networkAccess;
document.getElementById('f-timeout').value = b.timeoutMinutes || 30;
document.getElementById('f-autostart-wrap').style.display = 'none';
document.getElementById('bot-modal').classList.add('show');
@@ -496,6 +502,7 @@ async function saveBot() {
model: document.getElementById('f-model').value,
reasoningEffort: document.getElementById('f-effort').value,
sharedSession: document.getElementById('f-session').value === 'shared',
networkAccess: document.getElementById('f-network').checked,
timeoutMinutes: document.getElementById('f-timeout').value,
};
try {