feat: web_scan iframe穿透 + plan_sop术语优化
This commit is contained in:
@@ -20,17 +20,17 @@
|
|||||||
查 insight 找相关 SOP 并读取——SOP 提供任务骨架,直接指导分解。无则跳过。不确定性最高的环节先探,其结果可能推翻整个计划。
|
查 insight 找相关 SOP 并读取——SOP 提供任务骨架,直接指导分解。无则跳过。不确定性最高的环节先探,其结果可能推翻整个计划。
|
||||||
|
|
||||||
### 1b. 分类
|
### 1b. 分类
|
||||||
从依赖关系读出结构:有依赖→Sequential | 无依赖→MapReduce | 条件未知→Branch。可嵌套。
|
从依赖关系读出结构:有依赖→Sequential | 无依赖→MAP | 条件未知→Branch。可嵌套。
|
||||||
|
|
||||||
### 1c. 分解
|
### 1c. 分解
|
||||||
按结构展开 checklist(每步须有独立完成判据,否则继续拆)。update checkpoint 并标 `[x] 规划`。
|
按结构展开 checklist。**每个子任务必须具体列出,禁止笼统描述**(如"批量处理所有文件"必须展开为每个文件的具体条目)。每步须有独立完成判据,否则继续拆。update checkpoint 并标 `[x] 规划`。
|
||||||
- Seq: `[ ]A → [ ]B → [ ]C`
|
- Seq: `[ ]A → [ ]B → [ ]C`
|
||||||
- MR: `MAP: [ ]D1 [ ]D2 … REDUCE: [ ]汇总`
|
- MAP: `[ ]D1 [ ]D2 [ ]D3 … → [ ]汇总`(汇总为最后一步,中心化执行)
|
||||||
- Branch: `[ ]尝试X → 成功:[ ]Y / 失败:[ ]Z`
|
- Branch: `[ ]尝试X → 成功:[ ]Y / 失败:[ ]Z`
|
||||||
|
|
||||||
## 2. 执行注意
|
## 2. 执行注意
|
||||||
|
|
||||||
- 计划有误时回到规划修正,不硬凑;不可逆操作前多验证一步
|
- 计划有误时回到规划修正,不硬凑;不可逆操作前多验证一步
|
||||||
- MapReduce 的 MAP 可用 subagent 并行执行
|
- MAP 的子任务可用 subagent 并行执行
|
||||||
- 步骤间用尽量用文件传递中间结果和汇总,不靠上下文记忆
|
- 步骤间用尽量用文件传递中间结果和汇总,不靠上下文记忆
|
||||||
- 收尾:全部 `[x]` 后汇总结果,清理 checkpoint
|
- 收尾:全部 `[x]` 后汇总结果,清理 checkpoint
|
||||||
16
simphtml.py
16
simphtml.py
@@ -29,6 +29,20 @@ function createEnhancedDOMCopy() {
|
|||||||
const childClone = cloneNode(child, keep || isSmallDropdown);
|
const childClone = cloneNode(child, keep || isSmallDropdown);
|
||||||
if (childClone) childNodes.push(childClone);
|
if (childClone) childNodes.push(childClone);
|
||||||
}
|
}
|
||||||
|
if (sourceNode.tagName === 'IFRAME') {
|
||||||
|
try {
|
||||||
|
const iDoc = sourceNode.contentDocument || sourceNode.contentWindow?.document;
|
||||||
|
if (iDoc && iDoc.body && iDoc.body.children.length > 0) {
|
||||||
|
const wrapper = document.createElement('div');
|
||||||
|
wrapper.setAttribute('data-iframe-content', sourceNode.src || '');
|
||||||
|
for (const ch of iDoc.body.childNodes) {
|
||||||
|
const c = cloneNode(ch, keep);
|
||||||
|
if (c) wrapper.appendChild(c);
|
||||||
|
}
|
||||||
|
if (wrapper.childNodes.length) childNodes.push(wrapper);
|
||||||
|
}
|
||||||
|
} catch(e) {}
|
||||||
|
}
|
||||||
|
|
||||||
const rect = sourceNode.getBoundingClientRect();
|
const rect = sourceNode.getBoundingClientRect();
|
||||||
const style = window.getComputedStyle(sourceNode);
|
const style = window.getComputedStyle(sourceNode);
|
||||||
@@ -841,7 +855,7 @@ def find_changed_elements(before_html, after_html):
|
|||||||
result["top_change"] = h if len(h) <= 2000 else h[:2000] + '...[TRUNCATED]'
|
result["top_change"] = h if len(h) <= 2000 else h[:2000] + '...[TRUNCATED]'
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def get_html(driver, cutlist=False, maxchars=28000, instruction="", extra_js=""):
|
def get_html(driver, cutlist=False, maxchars=38000, instruction="", extra_js=""):
|
||||||
page = get_main_block(driver, extra_js=extra_js)
|
page = get_main_block(driver, extra_js=extra_js)
|
||||||
soup = optimize_html_for_tokens(page)
|
soup = optimize_html_for_tokens(page)
|
||||||
html = str(soup)
|
html = str(soup)
|
||||||
|
|||||||
Reference in New Issue
Block a user