diff --git a/memory/plan_sop.md b/memory/plan_sop.md index b419468..e1f2d9f 100644 --- a/memory/plan_sop.md +++ b/memory/plan_sop.md @@ -20,17 +20,17 @@ 查 insight 找相关 SOP 并读取——SOP 提供任务骨架,直接指导分解。无则跳过。不确定性最高的环节先探,其结果可能推翻整个计划。 ### 1b. 分类 -从依赖关系读出结构:有依赖→Sequential | 无依赖→MapReduce | 条件未知→Branch。可嵌套。 +从依赖关系读出结构:有依赖→Sequential | 无依赖→MAP | 条件未知→Branch。可嵌套。 ### 1c. 分解 -按结构展开 checklist(每步须有独立完成判据,否则继续拆)。update checkpoint 并标 `[x] 规划`。 +按结构展开 checklist。**每个子任务必须具体列出,禁止笼统描述**(如"批量处理所有文件"必须展开为每个文件的具体条目)。每步须有独立完成判据,否则继续拆。update checkpoint 并标 `[x] 规划`。 - Seq: `[ ]A → [ ]B → [ ]C` -- MR: `MAP: [ ]D1 [ ]D2 … REDUCE: [ ]汇总` +- MAP: `[ ]D1 [ ]D2 [ ]D3 … → [ ]汇总`(汇总为最后一步,中心化执行) - Branch: `[ ]尝试X → 成功:[ ]Y / 失败:[ ]Z` ## 2. 执行注意 - 计划有误时回到规划修正,不硬凑;不可逆操作前多验证一步 -- MapReduce 的 MAP 可用 subagent 并行执行 +- MAP 的子任务可用 subagent 并行执行 - 步骤间用尽量用文件传递中间结果和汇总,不靠上下文记忆 - 收尾:全部 `[x]` 后汇总结果,清理 checkpoint \ No newline at end of file diff --git a/simphtml.py b/simphtml.py index 8cc4883..6ec92e2 100644 --- a/simphtml.py +++ b/simphtml.py @@ -29,6 +29,20 @@ function createEnhancedDOMCopy() { const childClone = cloneNode(child, keep || isSmallDropdown); 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 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]' 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) soup = optimize_html_for_tokens(page) html = str(soup)