feat: add contentSettings cmd to CDP bridge (bypass multi-download dialog); minor agentmain cleanup

This commit is contained in:
Liang Jiaqing committed 2026-05-05 11:57:40 +08:00
1 parent f0ff7ee49e
commit a1a0cb815b
4 files changed
+20 -6

No files matched your search

+2 -5
View File
@@ -127,7 +127,7 @@ class GeneraticAgent:
def run(self):
while True:
task = self.task_queue.get()
raw_query, source, images, display_queue = task["query"], task["source"], task.get("images") or [], task["output"]
raw_query, source, display_queue = task["query"], task["source"], task["output"]
raw_query = self._handle_slash_cmd(raw_query, display_queue)
if raw_query is None:
self.task_queue.task_done(); continue
@@ -165,13 +165,10 @@ class GeneraticAgent:
print(f"Backend Error: {format_error(e)}")
display_queue.put({'done': full_resp + f'\n```\n{format_error(e)}\n```', 'source': source})
finally:
if self.stop_sig:
print('User aborted the task.')
#with self.task_queue.mutex: self.task_queue.queue.clear()
if self.stop_sig: print('User aborted the task.')
self.is_running = self.stop_sig = False
self.task_queue.task_done()
if self.handler is not None: self.handler.code_stop_signal.append(1)
if __name__ == '__main__':
import argparse
+12
View File
@@ -53,6 +53,18 @@ async function handleExtMessage(msg, sender) {
return { ok: false, error: 'Unknown method: ' + msg.method };
} catch (e) { return { ok: false, error: e.message }; }
}
if (msg.cmd === 'contentSettings') {
try {
const type = msg.type || 'automaticDownloads';
const setting = msg.setting || 'allow';
const pattern = msg.pattern || '<all_urls>';
await chrome.contentSettings[type].set({
primaryPattern: pattern,
setting: setting
});
return { ok: true };
} catch (e) { return { ok: false, error: e.message }; }
}
return { ok: false, error: 'Unknown cmd: ' + msg.cmd };
}
+2 -1
View File
@@ -11,7 +11,8 @@
"scripting",
"alarms",
"declarativeNetRequest",
"management"
"management",
"contentSettings"
],
"host_permissions": ["<all_urls>"],
"background": {
+4
View File
@@ -54,6 +54,10 @@ web_execute_js script='{"cmd": "batch", "commands": [...]}'
通信方式:⭐JSON字符串直传(首选) | TID DOM方式(TID元素+MutationObserver,web_scan/execute_js底层依赖)
单命令:`{cmd:'tabs'}` | `{cmd:'cookies'}` | `{cmd:'cdp', tabId:N, method:'...', params:{...}}` | `{cmd:'management', method:'list|reload|disable|enable', extId:'...'}`
- management:list返回所有扩展信息;reload/disable/enable需传extId
- contentSettings:`{cmd:'contentSettings', type:'automaticDownloads', pattern:'https://*/*', setting:'allow'}`
- 绕过Chrome"下载多个文件"对话框(该对话框会阻塞整个浏览器JS执行)
- type可选:automaticDownloads/popups/notifications等;setting:allow/block/ask
- ⚠CDP的Browser.setDownloadBehavior在扩展中不可用(chrome.debugger仅tab级),此为替代方案
- ⭐batch混合:`{cmd:'batch', commands:[{cmd:'cookies'},{cmd:'tabs'},{cmd:'cdp',...},...]}`
- 返回`{ok:true, results:[...]}`,一次请求多命令,CDP懒attach复用session
- 子命令会自动继承外层batch的tabId(如cookies命令可正确获取当前页面URL)