@customize-agent/server 4.11.2 → 4.11.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/4680.js +2 -2
- package/.next/server/chunks/5321.js +6 -6
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/asset-library.html +1 -1
- package/.next/server/pages/document-roles.html +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/guide.html +1 -1
- package/.next/server/pages/index.html +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/overview.html +1 -1
- package/.next/server/pages/prompt.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages/template-references.html +1 -1
- package/.next/server/pages-manifest.json +30 -30
- package/package.json +1 -1
- /package/.next/static/{4IhJtVksF6vvUSuNe_Clh → qi-3P151evCMcG0GRwE4Z}/_buildManifest.js +0 -0
- /package/.next/static/{4IhJtVksF6vvUSuNe_Clh → qi-3P151evCMcG0GRwE4Z}/_ssgManifest.js +0 -0
|
@@ -26,7 +26,7 @@ ${l}`,{signal:e,maxTokens:1800,temperature:.1,diagnostics:f});return((0,z.Te)(e)
|
|
|
26
26
|
${Y(b.content)}`;if(f>0&&f+a.length>d)break;e.push(a),f+=a.length}let g=e.join("\n\n");if(!g.trim())return c;let h=function(a){let b=0x811c9dc5;for(let c=0;c<a.length;c+=1)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193);return(b>>>0).toString(16)}(g.slice(0,6e3)),i=await (0,N.bb)('你是招标文件“要求与标准”结构化提取器。\n从施工项目绑定资料(招标文件/合同条款/技术标准/检查规范等)中提取文本性评分项要求——这些是评标专家会核对文档是否响应、且影响否决与得分的实质要求。\n只提取资料中明确写出的要求,绝不臆造;资料没有该类别时输出空数组或缺省。\ncoreTerms 是用于在正文中核对该要求是否被响应的核心词(2-4 个),必须选最能代表该要求的专有名词/等级/体系名(如“黄山杯”“二星级”“六个百分百”),不要泛化词。\ndateFabricationProhibited:资料写明“以开工令为准/开工日期以监理开工令为准/不得自定开工日期”时为 true,否则 false。\nsystematicBenchmarks 提取体系化基准要求(如“扬尘治理六个百分百”“四节一环保”),单条零散要求放 prohibitionNotes。\nfrontScheduleClauses:从“投标人须知前附表/投标人须知”章节提取施工组织设计必须响应的实质条款——计划工期与质量要求、创优目标与奖惩(如“确保黄山杯,支付300万元”)、缺陷责任期与质保金、履约担保、工期延误赔偿、项目经理/关键人员要求、分包限制、装配式/绿色建筑/智慧工地等级、安全文明与扬尘要求、付款方式(影响资金安排)。只提取施组正文需要写入或必须遵守的条款;投标程序类条款(开标时间地点、保证金账户、投标文件递交/解密方式、评标委员会组成等纯程序信息)一律不提取。\npageLimit:资料含篇幅/编制要求(如“不超过 50 页”)时提取。\nevaluationScheme:从评标办法章节提取结构性评分信息——评标办法类型、分值构成(技术文件/商务文件/报价文件分值)、技术文件详细评审内容项(逐项列出)、评分档位线(一般/良好/优秀分值区间)。text 用“;”分隔罗列原文关键信息;资料无评标办法章节时省略。\n工程量清单的项目特征描述不是评分项要求,不要提取。\n必须输出且仅输出一个 JSON 对象,字段结构如下(没有内容的字段输出空数组 [] 或省略可选字段,绝不输出其他字段名):\n{\n "awardObjectives": [{ "text": "创优目标原文", "coreTerms": ["核心词"], "source": "来源文件" }],\n "specialQualityStandards": [{ "text": "...", "coreTerms": [], "source": "..." }],\n "awardClauses": [{ "text": "...", "coreTerms": [], "source": "..." }],\n "greenBuildingGrade": { "text": "...", "coreTerms": [], "source": "..." },\n "smartSiteGrade": { "text": "...", "coreTerms": [], "source": "..." },\n "assemblyRate": { "text": "...", "coreTerms": [], "source": "..." },\n "systematicBenchmarks": [{ "text": "...", "coreTerms": [], "source": "..." }],\n "frontScheduleClauses": [{ "text": "...", "coreTerms": [], "source": "..." }],\n "dateFabricationProhibited": false,\n "prohibitionNotes": [{ "text": "...", "coreTerms": [], "source": "..." }],\n "pageLimit": { "text": "...", "coreTerms": [], "source": "..." },\n "evaluationScheme": { "text": "...", "coreTerms": [], "source": "..." }\n}\n只返回 JSON。',g,{maxTokens:5e3,temperature:.1,signal:b.signal,diagnostics:b.diagnostics,schema:an,taskKind:"structuredGeneration"});return i?{awardObjectives:ap(i.awardObjectives),specialQualityStandards:ap(i.specialQualityStandards),awardClauses:ap(i.awardClauses),greenBuildingGrade:ao(i.greenBuildingGrade),smartSiteGrade:ao(i.smartSiteGrade),assemblyRate:ao(i.assemblyRate),systematicBenchmarks:ap(i.systematicBenchmarks),frontScheduleClauses:ap(i.frontScheduleClauses),dateFabricationProhibited:!0===i.dateFabricationProhibited,prohibitionNotes:ap(i.prohibitionNotes),pageLimit:ao(i.pageLimit),evaluationScheme:ao(i.evaluationScheme),extracted:!0,sourceHash:h}:{...c,sourceHash:h}}let ar=["工程创优奖项申报要求:争创或确保获得市级、省级或国家级优质工程奖,含具体奖项名称","绿色建筑星级等级要求","智慧工地等级要求","装配式建筑装配率要求","特殊质量标准与质量要求条款","扬尘治理六个百分百要求","质量目标必须确保达到合格或优良标准的要求"];async function as(a){if(0===a.length)return[];let b=a.slice(0,160),c=b.map(a=>Y(`${a.sectionTitle||""}
|
|
27
27
|
${a.content||""}`).slice(0,400)),d=await (0,M.Mv)(ar,c),e=b.map((a,b)=>({item:a,text:c[b],score:Math.max(...ar.map(a=>d(a,c[b])))})).filter(a=>a.score>=.5).sort((a,b)=>b.score-a.score).slice(0,40),f=new Set,g=[];for(let a of e){let b=Y(`${a.item.sectionTitle||""}
|
|
28
28
|
${a.item.content||""}`),c=`${a.item.filePath}|${a.item.sectionTitle||""}|${b.slice(0,120)}`;f.has(c)||(f.add(c),g.push({...a.item,content:b}))}return g}function at(a){return!!a&&(a.awardObjectives.length>0||a.specialQualityStandards.length>0||a.awardClauses.length>0||!!a.greenBuildingGrade||!!a.smartSiteGrade||!!a.assemblyRate||a.systematicBenchmarks.length>0||a.frontScheduleClauses.length>0||a.dateFabricationProhibited||a.prohibitionNotes.length>0||!!a.evaluationScheme)}function au(a){return a.coreTerms.length>0?a.coreTerms.join(" "):a.text}function av(a){if(!a)return[];let b=[];for(let c of a.awardObjectives)b.push({kind:"创优目标",item:c});for(let c of a.specialQualityStandards)b.push({kind:"特殊质量标准",item:c});for(let c of a.awardClauses)b.push({kind:"奖项条款",item:c});for(let c of a.systematicBenchmarks)b.push({kind:"体系基准要求",item:c});for(let c of a.frontScheduleClauses)b.push({kind:"前附表响应条款",item:c});return a.greenBuildingGrade&&b.push({kind:"绿色建筑等级",item:a.greenBuildingGrade}),a.smartSiteGrade&&b.push({kind:"智慧工地等级",item:a.smartSiteGrade}),a.assemblyRate&&b.push({kind:"装配率要求",item:a.assemblyRate}),b}let aw={type:"object",required:["results"],properties:{results:{type:"array",required:!0,minItems:1,items:{type:"object",required:!0,properties:{index:{type:"number",required:!0},responsive:{type:"boolean",required:!0}}}}}};async function ax(a,b={}){let c=a.map(a=>({kind:a.kind,text:a.text.trim()})).filter(a=>a.text.length>0);if(0===c.length)return new Map;let d=await (0,N.bb)("你是招标文件要求项程序性/实质性分类器。\n对每个要求项判定其是否属于施工组织设计正文必须响应的实质要求:\n- 实质要求(responsive=true):创优目标与奖项、质量/工期/安全/环保目标、绿色建筑/智慧工地/装配式等级、扬尘治理、四节一环保、人员与分包要求、付款履约约束等施组需写入或遵守的条款\n- 程序性条款(responsive=false):开标时间地点、保证金账户、投标文件递交/解密方式、评标委员会组成、投标有效期等纯投标程序信息\n只输出 JSON,不得输出其他内容。",c.map((a,b)=>`${b+1}. [${a.kind}] ${a.text}`).join("\n"),{maxTokens:2e3,temperature:.1,signal:b.signal,diagnostics:b.diagnostics,schema:aw,taskKind:"structuredGeneration"});if(!d?.results?.length)return new Map(c.map((a,b)=>[b,!0]));let e=new Map;for(let a of d.results)"number"==typeof a.index&&e.set(a.index,!1!==a.responsive);return new Map(c.map((a,b)=>[b,e.get(b)??!0]))}async function ay(a,b,c){let d=[],e=av(b);if(0===e.length)return d;let f=a.replace(/\s+/gu,""),g=a.split(/\n/u).filter(a=>/^#{2,4}\s/u.test(a.trim())).map(a=>az(a)).filter(Boolean).slice(0,80),h=await ax(e.map(a=>({kind:a.kind,text:a.item.text})),{signal:c.signal,diagnostics:c.diagnostics}),i=c.bodyTexts&&c.bodyTexts.length>0?[...g,...c.bodyTexts]:g;for(let[a,{kind:b,item:f}]of e.entries()){if(!1===h.get(a))continue;let e=au(f),g=0;for(let a of i){let b=c.semanticSimilarity(e,a);b>g&&(g=b)}g>=.6||d.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`评分项要求未响应:${b}“${f.text}”在正文中零命中(最佳语义相似度 ${g.toFixed(2)})`,suggestion:`招标文件明确要求的${b}必须显性响应:在对应章节补写“${f.text}”及配套保证措施。`})}if(b){let a=[...b.awardObjectives,...b.awardClauses].map(a=>a.text);if(a.length>0){let b=a=>{let b=a;for(;;){let a=b.replace(/^(?:争创|争取|力争|争获|确保|获得|创建|力创|评为|荣获|标为|目标为|承诺|为)/u,"");if(a===b||!a)break;b=a}return b},c=new Set;for(let a of f.matchAll(/[杯奖]/gu)){let d=(a.index||0)+1,e=f.slice(Math.max(0,d-13),d-1),g=e.match(/(?:(|\(|\u201c)([\u4e00-\u9fa5]{2,6})$/u),h=g?g[1]:e.match(/[\u4e00-\u9fa5]{2,6}$/u)?.[0];if(!h)continue;let i=b(h)+a[0];/^[\u4e00-\u9fa5]{2,7}$/u.test(i)&&c.add(i)}for(let b of c)!/优质工程|优良工程|样板工程|示范工程|文明工地|标准化工地/u.test(b)&&(a.some(a=>a.includes(b))||d.unshift({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`奖项名称疑似杜撰/替换:正文出现“${b}”,不在招标文件奖项要求原文中(招标文件要求:${a.map(a=>a.slice(0,60)).join(";")})`,suggestion:`奖项名称必须与招标文件原文逐字一致:把正文“${b}”改为招标文件原文奖项名称,禁止替换、降级或省略;招标文件“确保/达到”类要求不得弱化为“争创/争取”。`}));if(a.some(a=>/确保|必须|须/u.test(a)))for(let b of c)a.some(a=>a.includes(b))&&RegExp(`(?:争创|争取|力争|争获)${b}`).test(f)&&d.unshift({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`奖项承诺强度弱化:“${b}”前使用了争取类措辞(争创/争取/力争),招标文件要求为“确保/必须”级别`,suggestion:`招标文件“确保/达到”类等级要求不得弱化为“争创/争取”:把正文争取类措辞改为“确保${b}”并配套创优保证措施。`})}}return d.slice(0,8)}function az(a){return a.trim().replace(/^#{2,4}\s+/u,"").replace(/^\d+(?:\.\d+)*[\s、.]+/u,"").trim()}async function aA(a,b,c,d={}){let e=[];if(!a)return e;let f=b.map(a=>az(a.title)).filter(Boolean);if(0===f.length)return e;let g=av(a),h=await ax(g.map(a=>({kind:a.kind,text:a.item.text})),{signal:d.signal,diagnostics:d.diagnostics});for(let[a,{kind:b,item:d}]of g.entries()){if(!1===h.get(a))continue;let g=au(d),i="",j=0;for(let a of f){let b=c(g,a);b>j&&(j=b,i=a)}j>=.45&&e.push({kind:b,item:d,chapterTitle:i,score:j})}return e}function aB(a){if(!a)return[];let b=[];return a.extracted&&b.push(`已从绑定资料结构化提取评分项要求(哈希 ${a.sourceHash?.slice(0,8)})`),a.awardObjectives.length&&b.push(`创优目标 ${a.awardObjectives.length} 条:${a.awardObjectives.map(a=>a.text).join("、")}`),a.specialQualityStandards.length&&b.push(`特殊质量标准 ${a.specialQualityStandards.length} 条`),a.awardClauses.length&&b.push(`奖项条款 ${a.awardClauses.length} 条`),a.greenBuildingGrade&&b.push(`绿色建筑等级:${a.greenBuildingGrade.text}`),a.smartSiteGrade&&b.push(`智慧工地等级:${a.smartSiteGrade.text}`),a.assemblyRate&&b.push(`装配率:${a.assemblyRate.text}`),a.systematicBenchmarks.length&&b.push(`体系基准 ${a.systematicBenchmarks.length} 条:${a.systematicBenchmarks.map(a=>a.text).join("、")}`),a.frontScheduleClauses.length&&b.push(`前附表响应条款 ${a.frontScheduleClauses.length} 条:${a.frontScheduleClauses.map(a=>a.text).slice(0,8).join("、")}`),a.evaluationScheme&&b.push(`评标办法:${a.evaluationScheme.text.slice(0,80)}`),a.dateFabricationProhibited&&b.push("禁编日期:以开工令为准"),a.pageLimit&&b.push(`篇幅建议:${a.pageLimit.text}`),a.extracted||b.push("评分项要求未提取(无绑定资料或模型不可用),零响应检测跳过"),b}let aC=["计划总工期为300日历天","合同工期为300日历天","施工总工期为300日历天","招标控制价为6000万元","合同估算价为6000万元","投资估算为6000万元","总建筑面积为28000平方米","总用地面积为15000平方米","总占地面积为15000平方米","建设规模为28000平方米"],aD=["专项应急演练4次","每日巡查2次","每周检查1次","每月安全培训2次","监理旁站24小时","三级安全教育培训20学时"];function aE(a,b){let c=Math.min(a.length,b.length),d=0;for(let e=0;e<c;e+=1)d+=a[e]*b[e];return d}async function aF(){let a=(0,M.VN)(),[b,c]=await Promise.all([a.embedDocuments([...aC]),a.embedDocuments([...aD])]);if(b.length!==aC.length||c.length!==aD.length)throw Error(`本地语义模型锚点嵌入数量不一致:范围锚点 ${b.length}/${aC.length},计数锚点 ${c.length}/${aD.length}`);return{async batchClassify(d){if(0===d.length)return[];let e=await a.embedDocuments(d);return d.map((a,d)=>{let f=e[d];if(!f||0===f.length)return"other";let g=Math.max(...b.map(a=>aE(f,a))),h=Math.max(...c.map(a=>aE(f,a)));return h>=.62&&h>g?"other":g>=.6?"scope":"other"})}}}let aG={factuality:["本章关键数据以招标文件、工程量清单与施工图纸为依据","正文引用的工期、面积、金额与绑定资料口径一致","施工内容与项目实际工程范围对应而非通用模板描述"],structure:["内容按施工准备、工艺流程、施工方法、验收标准的顺序组织","章节内有清晰的工作阶段划分与工序步骤","段落之间有先后衔接与层次递进关系"],depth:["包含关键工序控制点、隐蔽工程验收与检验批划分","关键技术环节给出工艺参数与质量标准","针对本项目特点展开专业分析而非通用做法罗列"],executable:["明确责任主体、检查频次与记录台账要求","给出可执行的资源进场、调配与投入安排","措施可落地执行并配验收复核机制"],specificity:["结合本项目建设地点、工程规模与计划工期展开","引用本项目工程量数据支撑施工部署","措施针对本项目工程特点制定而非通用套话"],consistency:["章节间工期、质量、安全数据口径一致","本章内容与总进度计划、质量目标相互呼应","章节内前后表述无矛盾冲突"]},aH={schedule:["采用关键线路法编制进度计划,明确关键节点与动态纠偏措施","计划节点与资源投入相匹配,含穿插施工与资源保障安排"],quality:["材料进场验收与复验、隐蔽工程验收、质量问题整改与复验闭环","质量资料归档与检验批验收记录"],safety:["风险源辨识、临电消防管理、安全检查与隐患整改闭环","应急预案、应急物资与演练安排"],resource:["劳动力、材料、设备进场计划、验收、保管与调配","资源投入与进度节点相匹配"],construction:["施工准备、工艺流程、工序控制点与验收标准交底","施工方法与工艺参数明确具体"]},aI=["材料进场验收、工序控制点、隐蔽工程验收记录","检验批划分、技术交底、整改复查闭环","引用本项目工程量清单与设计图纸参数"],aJ=["自检互检交接检、整改复查、资料归档","风险辨识、专项交底、现场检查、隐患整改、复查销项","计划分解、偏差识别、资源纠偏、节点复核"];function aK(a,b){let c=0;for(let d of a)for(let a of b){let b=function(a,b){let c=Math.min(a.length,b.length),d=0;for(let e=0;e<c;e+=1)d+=a[e]*b[e];return d}(d,a);b>c&&(c=b)}return c}async function aL(){let a=(0,M.VN)(),b=[...Object.keys(aG).map(a=>[`dimension:${a}`,aG[a]]),...Object.keys(aH).map(a=>[`need:${a}`,aH[a]]),["concrete",[...aI]],["closedLoop",[...aJ]]],c=new Map;for(let[d,e]of b){let b=await a.embedDocuments(e);if(b.length!==e.length)throw Error(`本地语义模型锚点嵌入数量不一致:${d} ${b.length}/${e.length}`);c.set(d,b)}let d=new Map,e=async b=>{let c=d.get(b);if(void 0!==c)return c;let e=function(a){let b=a.split(/\n+/u).map(a=>a.trim()).filter(Boolean),c=[],d="";for(let a of b)d&&d.length+a.length+1>400?(c.push(d),d=a):d=d?`${d}
|
|
29
|
-
${a}`:a;if(d&&c.push(d),c.length<=20)return c;let e=[c[0]],f=(c.length-2)/18;for(let a=1;a<19;a+=1)e.push(c[Math.min(c.length-2,Math.round(1+(a-1)*f))]);return e.push(c[c.length-1]),e}(b),f=await a.embedDocuments(e);return d.set(b,f),f};return{async analyze(a){if(!a.trim())return;let b=await e(a);if(0!==b.length)return{dimensions:function(a,b){let c={};for(let d of Object.keys(aG)){let e=b.get(`dimension:${d}`)||[];c[d]=aK(a,e)>=M.Eh}return c}(b,c),contentNeeds:function(a,b){let c={};for(let d of Object.keys(aH)){let e=b.get(`need:${d}`)||[];c[d]=aK(a,e)>=M.Eh}return c}(b,c),concrete:aK(b,c.get("concrete")||[])>=M.Eh,closedLoop:aK(b,c.get("closedLoop")||[])>=M.Eh}}}}let aM=[{pattern:/概况|总体|理解|说明|编制/u,goal:"以项目资料已确认的事实卡片展开工程概况与总体理解,不得空泛概述",mustCover:["工程名称、建设地点、建设规模、计划工期、质量标准等资料已确认事实","现场条件与招标范围边界","编制依据与适用范围"]},{pattern:/主要施工内容/u,goal:"按专业工程展开施工概况、施工流程、施工方法三段式卡片,落到工程量与工艺参数",mustCover:["资料识别的专业工程(不少于5个)","每个专业工程的施工概况/施工流程/施工方法","工程量、材料设备规格、检测验收与资料闭环"]},{pattern:/主要分部分项工程施工方案|主要施工方法/u,goal:"按分项工程方案展开施工概况、工艺流程、施工方法三段式,落到工艺参数与工序顺序",mustCover:["资料明确的专业工程范围(逐项展开分项工程方案)","每个分项方案的施工概况/工艺流程/施工方法","每个分项方案不少于4个工艺参数与至少1处3环节以上工序顺序表达","工艺参数来自绑定材料或行业通用规范值,不得编造"]},{pattern:/重点|难点/u,goal:"识别项目重点难点并给出针对性对策,每项落到责任岗位与验收节点",mustCover:["重点难点成因与影响范围","对应施工内容与专项措施","责任岗位、检查频次、整改闭环"]},{pattern:/部署|总体|流水|顺序/u,goal:"明确施工部署逻辑、流水段划分与资源调配机制",mustCover:["施工区段与流水划分","各阶段施工顺序与穿插关系","资源动态调配机制"]},{pattern:/进度|工期/u,goal:"围绕总工期与关键节点展开进度保障",mustCover:["总进度计划与关键节点","周/日计划分解","进度偏差识别与纠偏措施"]},{pattern:/质量/u,goal:"覆盖材料验收、过程控制、隐蔽验收、整改复验的质量闭环",mustCover:["质量目标与验收依据","三检制度与样板引路","隐蔽工程验收与材料复试","质量通病防治与闭环整改","保修与缺陷责任期承诺"]},{pattern:/安全|危大|风险/u,goal:"覆盖风险识别、危大工程专项方案、检查整改与应急响应",mustCover:["危险源辨识与风险分级","危大工程清单与专项方案","安全交底与隐患排查闭环"]},{pattern:/资源|材料|设备|劳动力|人材机/u,goal:"说明资源配置依据、进场验收与保管调配",mustCover:["机械设备投入计划","分阶段劳动力计划","材料进场计划与验收"]},{pattern:/文明|绿色|环保|扬尘|噪声/u,goal:"覆盖扬尘噪声管控、四节一环保与智慧监测",mustCover:["扬尘噪声分时段管控","四节一环保措施","监测预警与台账"]},{pattern:/应急|预案/u,goal:"覆盖应急组织、物资储备与专项预案",mustCover:["应急组织架构","应急物资储备","专项预案与演练计划"]},{pattern:/竣工|验收|移交|保修/u,goal:"覆盖竣工清理、验收移交与保修响应",mustCover:["竣工清理与垃圾外运","缺陷修补与复查销项","验收移交与保修响应"]},{pattern:/工资|劳务|实名/u,goal:"覆盖劳务实名制与农民工工资保障闭环",mustCover:["劳务实名制管理","工资专用账户与银行代发","考勤与工资支付台账"]}];var aN=c(8667);async function aO(a){(0,z.Te)(a.signal);let b=[];if(0===a.scopedFilePaths.length)return b;let c=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.chapter.title),d=(c?1.6:1)*(/[、,,与和及]/.test(a.chapter.title)?1.4:1),e=Math.ceil((a.highRisk?18:10)*d),f=Math.ceil((a.highRisk?24:14)*(c?1.4:1)),g=Math.ceil((a.highRisk?72:42)*d),h=Math.ceil((a.highRisk?72e3:42e3)*d),i=(a.requiredNeeds||[]).slice(0,8),j=(function(a,b=[]){let c=a.sections||[],d=[...a.requiredFacts,...b],e=(0,A.Cr)(c,a=>(0,A.Ox)(a),{maxItems:16,maxChars:1200},"retrieval-sections").selected,f=(0,A.Cr)(d,a=>(0,A.Ox)(a),{maxItems:16,maxChars:1200},"retrieval-facts").selected,g=/[、,,与和及]/.test(a.title),h=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.title),i=/进度|工期|节点/u.test(a.title)?["合同工期","计划工期","日历天","开工","竣工","关键线路","进度计划","施工进度"]:/质量|验收/u.test(a.title)?["质量标准","验收规范","检验批","复验","合格","质量保证","隐蔽验收"]:/安全|危大|风险/u.test(a.title)?["安全措施","风险源","危大工程","应急","检查整改","安全防护","应急预案"]:h?["工程量清单","项目特征","材料设备","规格型号","数量单位","劳动力","机械设备","进场计划","资源保障","主要材料","施工机具","材料供应","设备配置"]:/施工|方案|方法|技术|工艺/u.test(a.title)?["施工方法","工艺流程","技术标准","构造做法","控制要点","施工准备"]:["工程范围","施工方法","控制要点","验收要求"],j=g?[...i,...a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4)]:i,k=[...new Set([a.title,...e,...f,...j].flatMap(a=>a.split(/[\s、,,。;;::()()《》【】\-/]+/u)).map(a=>a.trim()).filter(a=>a.length>=2))],l=(0,A.Cr)(k,a=>(0,A.Ox)(a),{maxItems:36,maxChars:1200},"retrieval-tokens").selected,m=g?a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4).map(a=>`${a} ${e.slice(0,6).join(" ")} ${f.slice(0,4).join(" ")}`.trim()):[];return[...new Set([`${a.title} ${e.join(" ")}`.trim(),...f.map(b=>`${a.title} ${b}`.trim()),...e.map(b=>`${a.title} ${b} ${f.slice(0,6).join(" ")}`.trim()),`${a.title} ${j.join(" ")}`.trim(),...m,l.join(" ")].filter(Boolean))]})(a.chapter,a.requiredNeeds).slice(0,e),k=[...i.map(b=>`${a.chapter.title} ${b} ${(a.chapter.sections||[]).join(" ")}`.trim()).filter(a=>!j.includes(a)).map(a=>({text:a,boost:2,source:"required-fact-evidence"})),...j.map(a=>({text:a,boost:2.4,source:"deep-retrieval"}))];return b.push(...(await (0,z.l$)(k,async b=>{var c;(0,z.Te)(a.signal);let d=await a.manager.search(a.projectRoot,b.text,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:f,weights:{keyword:.62,vector:.32,rewrite:.9,hybridBonus:.28},generationMode:!1});return(c={chapter:a.chapter,results:d.results.filter(b=>a.scopedFilePaths.includes(b.filePath)),fileRoleByPath:a.fileRoleByPath,fileProcessingByPath:a.fileProcessingByPath,boost:b.boost,source:b.source}).results.map(a=>{let b=c.fileProcessingByPath.get(a.filePath);return{chapterId:c.chapter.id,filePath:a.filePath,score:a.score+c.boost+("table"===b?3:"structured_data"===b?2.6:3.2*("bill_of_quantities"===b)),content:a.content,roleId:c.fileRoleByPath.get(a.filePath),processingType:b,sectionTitle:a.sectionTitle,source:c.source}})},{kind:"deepRetrieval",highRisk:a.highRisk})).flat()),[...(0,s.QR)(b.filter(a=>"required-fact-evidence"===a.source),{maxItems:Math.max(6,3*i.length),maxChars:18e3,preservePinned:!0}),...(0,s.QR)(b.filter(a=>"required-fact-evidence"!==a.source),{maxItems:g,maxChars:h,preservePinned:!0})]}var aP=c(80439),aQ=c(34680),aR=c(79227),aS=c(2773),aT=c(92817),aU=c(3063);function aV(a){return(0,t.GQ)(a.replace(/\*+/gu,"")).replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分、..\s-]*/u,"").replace(/^\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^[-—–]\s*/u,"").replace(/[<>]/gu,"").replace(/[::。;;,.,]+$/gu,"").replace(/\s*[((][^()()]{0,40}[a-zA-Z]{3,}[^()()]{0,40}[))]\s*$/u,"").trim()}function aW(a,b){let c=aV(a);return!!(c.length<4||c.length>60||c===aV(b)||/^(?:目录|章节|大纲|要求|说明|注意|输出|格式|示例|占位|提示|概述|总体要求)$/u.test(c)||/如需|应由|大模型|提示词|上下文|OUTLINE|JSON|小节标题/u.test(c)||/(.)\1/u.test(c))}function aX(a,b){let c=a=>{let b=new Set;for(let c=0;c<a.length-1;c+=1)b.add(a.slice(c,c+2));return b},d=c(b),e=[...c(a)];return 0===e.length?0:e.filter(a=>d.has(a)).length/e.length}function aY(a){return/工期|进度|节点|计划|纠偏|预警/u.test(a)?"工期进度":/质量|验收|三检|样板|隐蔽|复试|实测|通病/u.test(a)?"质量验收":/安全|危大|风险|隐患|应急|临边|洞口|消防|临电/u.test(a)?"安全风险":/文明|扬尘|噪声|绿色|废水|垃圾|环保|智慧/u.test(a)?"文明绿色":/劳务|工资|实名|银行|考勤|人员|岗位|组织|职责/u.test(a)?"组织劳务":/资源|材料|设备|机械|人材机|调配/u.test(a)?"资源保障":/施工|工艺|流程|顺序|穿插|部署|区段|流水/u.test(a)?"施工组织":"综合管理"}function aZ(a){let b=new Set,c=[];for(let d of a.sections||[]){let e=aV(d);if(!e||aW(e,a.title))continue;let f=e.replace(/\s+/gu,"");b.has(f)||(b.add(f),c.push(e))}return c}function a$(a,b){let c=a.replace(/\s+/gu,""),d=b.replace(/\s+/gu,"");return c===d||c.includes(d)||d.includes(c)}function a_(a,b,c){let d=new Map;for(let b of a){let a=aY(b),c=d.get(a)||[];c.push(b),d.set(a,c)}let e=a=>{let b=[];for(let c of a){let a=b[b.length-1],d=a?a.sources[a.sources.length-1]:"";!(0,aU.tZ)(c)&&a&&(a$(c,d)||aX(c,d)>=.75)?(a.sources.push(c),c.length>a.title.length&&(a.title=c.slice(0,30))):b.push({title:c.slice(0,30),sources:[c]})}return b},f=[];for(let a of d.values()){let d=e(a);for(let a=0;a<d.length;a+=6){let e=d.slice(a,a+6),g=d.length;f.push({title:e[0].title||b,subPoints:e,facts:[],targetWords:Math.min(2200,Math.max(1200,Math.floor(c/Math.max(1,Math.ceil(g/6)))))})}}return{blocks:f,coveredSections:a.slice(),fallbackSections:[],llmPlanned:!1}}let a0={type:"object",required:["title","subPoints"],properties:{title:{type:"string",required:!0,minLength:2,maxLength:80},subPoints:{type:"array",required:!0,minItems:1,maxItems:6,items:{type:"object",required:!0,properties:{title:{type:"string",required:!0,minLength:2,maxLength:60},sources:{type:"array",required:!0,maxItems:8,items:{type:"string",maxLength:120}}}}},facts:{type:"array",maxItems:2,items:{type:"string",maxLength:100}}}};async function a1(a){let b=aZ(a.chapter);if(b.length<=8)return;let c=await (0,M.Mv)(b,b,a.semanticEmbedder),d=function(a,b){let c=new Map;for(let b of a){let a=aY(b),d=c.get(a)||[];d.push(b),c.set(a,d)}let d=[];for(let a of c.values()){let c=[];for(let d of a){let a,e=-1;for(let f of c){if(f.length>=8)continue;let c=Math.max(...f.map(a=>b(d,a)));c>e&&(e=c,a=f)}a&&e>=.5?a.push(d):c.push([d])}d.push(...c)}return d}(b,c),e=Math.max(800,Math.floor(a.targetWords/Math.max(1,d.length))),f=async(b,c)=>{let d=function(a,b){let c=a.flatMap(a=>[a.slice(0,4),a.slice(-4)]).filter(a=>a.length>=2);return b.map(a=>({item:a,score:c.reduce((b,c)=>b+ +!!a.content.includes(c),0)})).filter(a=>a.score>0).sort((a,b)=>b.score-a.score).slice(0,8).map(a=>({...a.item,content:a.item.content.slice(0,800)}))}(b,a.evidence),f=(0,s.ks)((0,s.QO)(a.chapter,d),{maxChars:(0,s.Pc)(e,2500,5e3)}),g=["你是专业施工组织设计文档结构规划专家。","任务:把一个主题块内的输入细目重排为 H4 要点结构;语义相近、内容连贯的细目必须合并进同一个 H4 要点。","硬性规则:",`1. 合并决策:语义相近、内容连贯的输入细目必须合并进同一个 H4 要点;H4 要点标题必须重写为更概括、更专业的标题(16 字以内),不得直接照抄任一输入细目标题;每个 H4 要点的 sources 字段逐字列出它所覆盖的全部输入细目标题,不得改写、不得遗漏、不得重复映射。例外:含评标必查关键词的输入细目(${aU.Dr.join("/")}等)必须保留为独立 H4 要点,不得与其他细目合并吞并,其 H4 标题必须保留该关键词。`,`2. 合并依据:优先参考项目图谱与文档蓝图,把对应同一套工程对象/管理闭环的细目合并(如「三检制度」「样板引路」「隐蔽工程验收」同属质量管控闭环);不得把内容无关的细目强行合并。`,`3. 主题块标题必须具体、专业、能承载其要点(16 字以内),不得使用"目标与范围""资料依据""总体要求"等通用占位标题。`,`4. 数量约束:本主题块 1~6 个 H4 要点。`,"5. facts 字段:从绑定资料中摘取与本主题块直接相关的关键事实短句(每条 ≤60 字,0~2 条)。","6. 只返回 JSON,不要输出任何其他文字。",'JSON 格式:{"title":"主题块标题","subPoints":[{"title":"H4要点标题","sources":["输入细目原文"]}],"facts":["事实短句"]}'],h=[`文档模板:${a.template.name}`,`章节标题:${a.chapter.title}`,a.requirement?`用户要求:${a.requirement}`:"",a.graphContext?`项目图谱(本章定向):${a.graphContext.slice(0,1500)}`:"",a.blueprintContext?`文档蓝图(本章任务卡与实施方案):${a.blueprintContext.slice(0,2e3)}`:"",a.projectContext?`上下文:${a.projectContext.slice(0,1e3)}`:"",a.roleContext?`角色要求:${a.roleContext.slice(0,1e3)}`:"",f?`真实绑定资料:${f}`:"",`输入细目清单(本主题块共 ${b.length} 条,必须全部覆盖,允许合并进同一 H4):${b.join("、")}`,`请输出 1 个主题块,1~6 个 H4 要点,确保所有输入细目被覆盖。`],i={},j=await (0,N.bb)(g.join("\n"),h.filter(Boolean).join("\n\n"),{maxTokens:4096,temperature:.1,signal:a.signal,diagnostics:a.diagnostics,schema:a0,disableThinkingBoost:!0,outFailure:i});if(!j){let d=i.value?`第 ${c+1} 块未通过校验(${i.value})`:`第 ${c+1} 块 LLM 无响应`;return{blocks:a_(b,a.chapter.title,e).blocks,llmPlanned:!1,failure:d}}let k=function(a,b,c){let d=aV(a.title||"");if(!d||aW(d,c))return;let e=(a.subPoints||[]).map(a=>{let c=Array.isArray(a.sources)&&a.sources.length>0?a.sources:a.source?[a.source]:[],d=[];for(let a of c){let c=aV(a||"");!(c.length<4)&&b.some(a=>a$(c,a))&&(d.some(a=>a$(a,c))||d.push(c))}let e=aV(a.title||"");return!e||e.length<4?d.length>0?{title:d[0].slice(0,30),sources:d}:void 0:{title:(e&&!d.some(a=>a$(e,a))?e:d[0]||e).slice(0,30),sources:d}}).filter(a=>!!a);if(0!==e.length)return{title:d,subPoints:e,facts:(a.facts||[]).map(a=>a.trim().slice(0,80)).filter(Boolean).slice(0,2),targetWords:1200}}(j,b,a.chapter.title);return k?{blocks:[k],llmPlanned:!0}:{blocks:a_(b,a.chapter.title,e).blocks,llmPlanned:!1,failure:`第 ${c+1} 块 LLM 结构无效(title/subPoints 缺失或未对齐)`}},g=await Promise.all(d.map((a,b)=>f(a,b))),h=g.flatMap(a=>a.blocks),i=g.map(a=>a.failure).filter(Boolean);if(0===h.length)return{blocks:[],coveredSections:[],fallbackSections:[],llmPlanned:!1,llmFailure:i.join(";")||"未知原因"};var j=a.targetWords;let k=h.reduce((a,b)=>a+b.subPoints.length,0)||h.length;for(let a of h){let b=Math.floor(.75*Math.max(1200,Math.floor(j/Math.max(1,h.length)))+.25*j*(a.subPoints.length/k));a.targetWords=Math.min(2200,Math.max(1200,b))}return{...function(a){let b=[],c=a.blocks.map(a=>({...a,subPoints:a.subPoints.map(a=>{let c=a.sources.filter(a=>!b.some(b=>a$(b,a))&&(b.push(a),!0));return{...a,sources:c}}).filter(a=>a.sources.length>0)}));return{...a,blocks:c}}(function(a,b){let c=[],d=[],e=b.map(a=>({...a,subPoints:[...a.subPoints]}));for(let b of a){let a,f;if(e.some(a=>(function(a,b){return!!a$(b.title,a)||b.subPoints.some(b=>b.sources.some(b=>a$(b,a))||a$(b.title,a))})(b,a))){c.push(b);continue}let g=-1;for(let c of e)for(let d of c.subPoints){let e=Math.max(aX(b,d.title),...d.sources.map(a=>aX(b,a)));e>g&&(g=e,a=d,f=c)}if((0,aU.tZ)(b)){let a=f||e[e.length-1];if(a){a.subPoints.push({title:b.slice(0,30),sources:[b]}),d.push(b);continue}}a&&g>=.5?(a.sources.push(b),d.push(b)):f?(f.subPoints.push({title:b.slice(0,30),sources:[b]}),d.push(b)):c.push(b)}return{blocks:e,coveredSections:c,fallbackSections:d,llmPlanned:b.length>0}}(b,h)),llmPlanned:g.some(a=>a.llmPlanned),llmFailure:i.length>0?`块级降级(${i.join(";")})`:void 0}}async function a2(a){let b=await a1(a).catch(a=>({blocks:[],coveredSections:[],fallbackSections:[],llmPlanned:!1,llmFailure:a instanceof Error?a.message:String(a)}))??{blocks:[],coveredSections:[],fallbackSections:[],llmPlanned:!1,llmFailure:"LLM 调用异常"};return b.blocks.length>0?b:{...a_(aZ(a.chapter),a.chapter.title,a.targetWords),llmFailure:b.llmFailure||"LLM 调用异常"}}function a3(a){let b=(0,v.r4)(a.content);return 0===b.length?[]:b.flatMap(b=>{let c=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),d=a.content.match(RegExp(`^###\\s+(?:\\d+(?:\\.\\d+)*[、..\\s]*\\s+)?${c}\\s*\\n([\\s\\S]*?)(?=^#{2,3}\\s+|$)`,"mu")),e=d?.[1]||"",f=(0,aT.AI)(b,(0,aT.Ym)(b,a.chapter,a.evidence)),g=(0,aT.uQ)(b,e,f);return g?[`${b}:${g}`]:[]})}function a4(a,b){let c=a.trim();if(!c)return[];let d=Math.max(1e3,Math.ceil(b)),e=[],f=0;for(;f<c.length;){let a=Math.min(f+d,c.length),b=c.lastIndexOf("\n\n",a);(b<=f||a-b>.25*d)&&(b=c.lastIndexOf("\n",a)),(b<=f||a-b>.2*d)&&(b=a),e.push(c.slice(f,b).trim()),f=b}return e.filter(Boolean)}function a5(a){return"string"==typeof a?a:a&&"object"==typeof a&&"message"in a?String(a.message):JSON.stringify(a)}function a6(a){let b=Number(process.env[a]);return Number.isFinite(b)&&b>0?Math.ceil(b):0}async function a7(a){(0,z.Te)(a.signal);let b=a.chapters.map(a=>{let b=a.content.replace(/#{1,6}\s+/gu,"").replace(/\*\*/gu,"").replace(/\|/gu," ").replace(/[\n\r]+/gu," ").trim(),c=function(a){let b=[];for(let c of[/(?:总建筑面积|建设规模|总用地面积|总占地面积)[^\n。;;]{0,18}\d+(?:[.,]\d+)?\s*万?\s*(?:㎡|m²|m2|平方米)/gu,/(?:合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价|工程总投资|总投资|工程造价)[^\n。;;]{0,18}\d+(?:[.,]\d+)?\s*万?\s*(?:万元|亿元|元)/gu,/(?:计划工期|合同工期|总工期|施工周期)[^\n。;;]{0,18}\d+\s*(?:日历天|天|个月|月)/gu,/(?:质量标准|质量目标)[^\n。;;]{0,26}/gu,/(?:找平层|抹灰层|防水层|保温层|结合层|垫层|面层|粘结层)[^\n。;;]{0,24}\d+:\d+(?:\.\d+)?/gu]){let d=[...new Set(a.match(c)||[])].slice(0,4);b.push(...d)}return[...new Set(b.map(a=>a.replace(/\s+/gu," ").trim()).filter(Boolean))].join(";")}(a.content);return`章节:${a.title}
|
|
29
|
+
${a}`:a;if(d&&c.push(d),c.length<=20)return c;let e=[c[0]],f=(c.length-2)/18;for(let a=1;a<19;a+=1)e.push(c[Math.min(c.length-2,Math.round(1+(a-1)*f))]);return e.push(c[c.length-1]),e}(b),f=await a.embedDocuments(e);return d.set(b,f),f};return{async analyze(a){if(!a.trim())return;let b=await e(a);if(0!==b.length)return{dimensions:function(a,b){let c={};for(let d of Object.keys(aG)){let e=b.get(`dimension:${d}`)||[];c[d]=aK(a,e)>=M.Eh}return c}(b,c),contentNeeds:function(a,b){let c={};for(let d of Object.keys(aH)){let e=b.get(`need:${d}`)||[];c[d]=aK(a,e)>=M.Eh}return c}(b,c),concrete:aK(b,c.get("concrete")||[])>=M.Eh,closedLoop:aK(b,c.get("closedLoop")||[])>=M.Eh}}}}let aM=[{pattern:/概况|总体|理解|说明|编制/u,goal:"以项目资料已确认的事实卡片展开工程概况与总体理解,不得空泛概述",mustCover:["工程名称、建设地点、建设规模、计划工期、质量标准等资料已确认事实","现场条件与招标范围边界","编制依据与适用范围"]},{pattern:/主要施工内容/u,goal:"按专业工程展开施工概况、施工流程、施工方法三段式卡片,落到工程量与工艺参数",mustCover:["资料识别的专业工程(不少于5个)","每个专业工程的施工概况/施工流程/施工方法","工程量、材料设备规格、检测验收与资料闭环"]},{pattern:/主要分部分项工程施工方案|主要施工方法/u,goal:"按分项工程方案展开施工概况、工艺流程、施工方法三段式,落到工艺参数与工序顺序",mustCover:["资料明确的专业工程范围(逐项展开分项工程方案)","每个分项方案的施工概况/工艺流程/施工方法","每个分项方案不少于4个工艺参数与至少1处3环节以上工序顺序表达","工艺参数来自绑定材料或行业通用规范值,不得编造"]},{pattern:/重点|难点/u,goal:"识别项目重点难点并给出针对性对策,每项落到责任岗位与验收节点",mustCover:["重点难点成因与影响范围","对应施工内容与专项措施","责任岗位、检查频次、整改闭环"]},{pattern:/部署|总体|流水|顺序/u,goal:"明确施工部署逻辑、流水段划分与资源调配机制",mustCover:["施工区段与流水划分","各阶段施工顺序与穿插关系","资源动态调配机制"]},{pattern:/进度|工期/u,goal:"围绕总工期与关键节点展开进度保障",mustCover:["总进度计划与关键节点","周/日计划分解","进度偏差识别与纠偏措施"]},{pattern:/质量/u,goal:"覆盖材料验收、过程控制、隐蔽验收、整改复验的质量闭环",mustCover:["质量目标与验收依据","三检制度与样板引路","隐蔽工程验收与材料复试","质量通病防治与闭环整改","保修与缺陷责任期承诺"]},{pattern:/安全|危大|风险/u,goal:"覆盖风险识别、危大工程专项方案、检查整改与应急响应",mustCover:["危险源辨识与风险分级","危大工程清单与专项方案","安全交底与隐患排查闭环"]},{pattern:/资源|材料|设备|劳动力|人材机/u,goal:"说明资源配置依据、进场验收与保管调配",mustCover:["机械设备投入计划","分阶段劳动力计划","材料进场计划与验收"]},{pattern:/文明|绿色|环保|扬尘|噪声/u,goal:"覆盖扬尘噪声管控、四节一环保与智慧监测",mustCover:["扬尘噪声分时段管控","四节一环保措施","监测预警与台账"]},{pattern:/应急|预案/u,goal:"覆盖应急组织、物资储备与专项预案",mustCover:["应急组织架构","应急物资储备","专项预案与演练计划"]},{pattern:/竣工|验收|移交|保修/u,goal:"覆盖竣工清理、验收移交与保修响应",mustCover:["竣工清理与垃圾外运","缺陷修补与复查销项","验收移交与保修响应"]},{pattern:/工资|劳务|实名/u,goal:"覆盖劳务实名制与农民工工资保障闭环",mustCover:["劳务实名制管理","工资专用账户与银行代发","考勤与工资支付台账"]}];var aN=c(8667);async function aO(a){(0,z.Te)(a.signal);let b=[];if(0===a.scopedFilePaths.length)return b;let c=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.chapter.title),d=(c?1.6:1)*(/[、,,与和及]/.test(a.chapter.title)?1.4:1),e=Math.ceil((a.highRisk?18:10)*d),f=Math.ceil((a.highRisk?24:14)*(c?1.4:1)),g=Math.ceil((a.highRisk?72:42)*d),h=Math.ceil((a.highRisk?72e3:42e3)*d),i=(a.requiredNeeds||[]).slice(0,8),j=(function(a,b=[]){let c=a.sections||[],d=[...a.requiredFacts,...b],e=(0,A.Cr)(c,a=>(0,A.Ox)(a),{maxItems:16,maxChars:1200},"retrieval-sections").selected,f=(0,A.Cr)(d,a=>(0,A.Ox)(a),{maxItems:16,maxChars:1200},"retrieval-facts").selected,g=/[、,,与和及]/.test(a.title),h=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.title),i=/进度|工期|节点/u.test(a.title)?["合同工期","计划工期","日历天","开工","竣工","关键线路","进度计划","施工进度"]:/质量|验收/u.test(a.title)?["质量标准","验收规范","检验批","复验","合格","质量保证","隐蔽验收"]:/安全|危大|风险/u.test(a.title)?["安全措施","风险源","危大工程","应急","检查整改","安全防护","应急预案"]:h?["工程量清单","项目特征","材料设备","规格型号","数量单位","劳动力","机械设备","进场计划","资源保障","主要材料","施工机具","材料供应","设备配置"]:/施工|方案|方法|技术|工艺/u.test(a.title)?["施工方法","工艺流程","技术标准","构造做法","控制要点","施工准备"]:["工程范围","施工方法","控制要点","验收要求"],j=g?[...i,...a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4)]:i,k=[...new Set([a.title,...e,...f,...j].flatMap(a=>a.split(/[\s、,,。;;::()()《》【】\-/]+/u)).map(a=>a.trim()).filter(a=>a.length>=2))],l=(0,A.Cr)(k,a=>(0,A.Ox)(a),{maxItems:36,maxChars:1200},"retrieval-tokens").selected,m=g?a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4).map(a=>`${a} ${e.slice(0,6).join(" ")} ${f.slice(0,4).join(" ")}`.trim()):[];return[...new Set([`${a.title} ${e.join(" ")}`.trim(),...f.map(b=>`${a.title} ${b}`.trim()),...e.map(b=>`${a.title} ${b} ${f.slice(0,6).join(" ")}`.trim()),`${a.title} ${j.join(" ")}`.trim(),...m,l.join(" ")].filter(Boolean))]})(a.chapter,a.requiredNeeds).slice(0,e),k=[...i.map(b=>`${a.chapter.title} ${b} ${(a.chapter.sections||[]).join(" ")}`.trim()).filter(a=>!j.includes(a)).map(a=>({text:a,boost:2,source:"required-fact-evidence"})),...j.map(a=>({text:a,boost:2.4,source:"deep-retrieval"}))];return b.push(...(await (0,z.l$)(k,async b=>{var c;(0,z.Te)(a.signal);let d=await a.manager.search(a.projectRoot,b.text,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:f,weights:{keyword:.62,vector:.32,rewrite:.9,hybridBonus:.28},generationMode:!1});return(c={chapter:a.chapter,results:d.results.filter(b=>a.scopedFilePaths.includes(b.filePath)),fileRoleByPath:a.fileRoleByPath,fileProcessingByPath:a.fileProcessingByPath,boost:b.boost,source:b.source}).results.map(a=>{let b=c.fileProcessingByPath.get(a.filePath);return{chapterId:c.chapter.id,filePath:a.filePath,score:a.score+c.boost+("table"===b?3:"structured_data"===b?2.6:3.2*("bill_of_quantities"===b)),content:a.content,roleId:c.fileRoleByPath.get(a.filePath),processingType:b,sectionTitle:a.sectionTitle,source:c.source}})},{kind:"deepRetrieval",highRisk:a.highRisk})).flat()),[...(0,s.QR)(b.filter(a=>"required-fact-evidence"===a.source),{maxItems:Math.max(6,3*i.length),maxChars:18e3,preservePinned:!0}),...(0,s.QR)(b.filter(a=>"required-fact-evidence"!==a.source),{maxItems:g,maxChars:h,preservePinned:!0})]}var aP=c(80439),aQ=c(34680),aR=c(79227),aS=c(2773),aT=c(92817),aU=c(3063);function aV(a){return(0,t.GQ)(a.replace(/\*+/gu,"")).replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分、..\s-]*/u,"").replace(/^\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^[-—–]\s*/u,"").replace(/[<>]/gu,"").replace(/[::。;;,.,]+$/gu,"").replace(/\s*[((][^()()]{0,40}[a-zA-Z]{3,}[^()()]{0,40}[))]\s*$/u,"").trim()}function aW(a,b){let c=aV(a);return!!(c.length<4||c.length>60||c===aV(b)||/^(?:目录|章节|大纲|要求|说明|注意|输出|格式|示例|占位|提示|概述|总体要求)$/u.test(c)||/如需|应由|大模型|提示词|上下文|OUTLINE|JSON|小节标题/u.test(c)||/(.)\1/u.test(c))}function aX(a,b){let c=a=>{let b=new Set;for(let c=0;c<a.length-1;c+=1)b.add(a.slice(c,c+2));return b},d=c(b),e=[...c(a)];return 0===e.length?0:e.filter(a=>d.has(a)).length/e.length}function aY(a){return/工期|进度|节点|计划|纠偏|预警/u.test(a)?"工期进度":/质量|验收|三检|样板|隐蔽|复试|实测|通病/u.test(a)?"质量验收":/安全|危大|风险|隐患|应急|临边|洞口|消防|临电/u.test(a)?"安全风险":/文明|扬尘|噪声|绿色|废水|垃圾|环保|智慧/u.test(a)?"文明绿色":/劳务|工资|实名|银行|考勤|人员|岗位|组织|职责/u.test(a)?"组织劳务":/资源|材料|设备|机械|人材机|调配/u.test(a)?"资源保障":/施工|工艺|流程|顺序|穿插|部署|区段|流水/u.test(a)?"施工组织":"综合管理"}function aZ(a){let b=new Set,c=[];for(let d of a.sections||[]){let e=aV(d);if(!e||aW(e,a.title))continue;let f=e.replace(/\s+/gu,"");b.has(f)||(b.add(f),c.push(e))}return c}function a$(a,b){let c=a.replace(/\s+/gu,""),d=b.replace(/\s+/gu,"");return c===d||c.includes(d)||d.includes(c)}function a_(a,b,c){let d=new Map;for(let b of a){let a=aY(b),c=d.get(a)||[];c.push(b),d.set(a,c)}let e=a=>{let b=[];for(let c of a){let a=b[b.length-1],d=a?a.sources[a.sources.length-1]:"";!(0,aU.tZ)(c)&&a&&(a$(c,d)||aX(c,d)>=.75)?(a.sources.push(c),c.length>a.title.length&&(a.title=c.slice(0,30))):b.push({title:c.slice(0,30),sources:[c]})}return b},f=[];for(let a of d.values()){let d=e(a);for(let a=0;a<d.length;a+=6){let e=d.slice(a,a+6),g=d.length;f.push({title:e[0].title||b,subPoints:e,facts:[],targetWords:Math.min(4e3,Math.max(1200,Math.floor(c/Math.max(1,Math.ceil(g/6)))))})}}return{blocks:f,coveredSections:a.slice(),fallbackSections:[],llmPlanned:!1}}let a0={type:"object",required:["title","subPoints"],properties:{title:{type:"string",required:!0,minLength:2,maxLength:80},subPoints:{type:"array",required:!0,minItems:1,maxItems:6,items:{type:"object",required:!0,properties:{title:{type:"string",required:!0,minLength:2,maxLength:60},sources:{type:"array",required:!0,maxItems:8,items:{type:"string",maxLength:120}}}}},facts:{type:"array",maxItems:2,items:{type:"string",maxLength:100}}}};async function a1(a){let b=aZ(a.chapter);if(b.length<=8)return;let c=await (0,M.Mv)(b,b,a.semanticEmbedder),d=function(a,b){let c=new Map;for(let b of a){let a=aY(b),d=c.get(a)||[];d.push(b),c.set(a,d)}let d=[];for(let a of c.values()){let c=[];for(let d of a){let a,e=-1;for(let f of c){if(f.length>=8)continue;let c=Math.max(...f.map(a=>b(d,a)));c>e&&(e=c,a=f)}a&&e>=.5?a.push(d):c.push([d])}d.push(...c)}return d}(b,c),e=Math.max(800,Math.floor(a.targetWords/Math.max(1,d.length))),f=async(b,c)=>{let d=function(a,b){let c=a.flatMap(a=>[a.slice(0,4),a.slice(-4)]).filter(a=>a.length>=2);return b.map(a=>({item:a,score:c.reduce((b,c)=>b+ +!!a.content.includes(c),0)})).filter(a=>a.score>0).sort((a,b)=>b.score-a.score).slice(0,8).map(a=>({...a.item,content:a.item.content.slice(0,800)}))}(b,a.evidence),f=(0,s.ks)((0,s.QO)(a.chapter,d),{maxChars:(0,s.Pc)(e,2500,5e3)}),g=["你是专业施工组织设计文档结构规划专家。","任务:把一个主题块内的输入细目重排为 H4 要点结构;语义相近、内容连贯的细目必须合并进同一个 H4 要点。","硬性规则:",`1. 合并决策:语义相近、内容连贯的输入细目必须合并进同一个 H4 要点;H4 要点标题必须重写为更概括、更专业的标题(16 字以内),不得直接照抄任一输入细目标题;每个 H4 要点的 sources 字段逐字列出它所覆盖的全部输入细目标题,不得改写、不得遗漏、不得重复映射。例外:含评标必查关键词的输入细目(${aU.Dr.join("/")}等)必须保留为独立 H4 要点,不得与其他细目合并吞并,其 H4 标题必须保留该关键词。`,`2. 合并依据:优先参考项目图谱与文档蓝图,把对应同一套工程对象/管理闭环的细目合并(如「三检制度」「样板引路」「隐蔽工程验收」同属质量管控闭环);不得把内容无关的细目强行合并。`,`3. 主题块标题必须具体、专业、能承载其要点(16 字以内),不得使用"目标与范围""资料依据""总体要求"等通用占位标题。`,`4. 数量约束:本主题块 1~6 个 H4 要点。`,"5. facts 字段:从绑定资料中摘取与本主题块直接相关的关键事实短句(每条 ≤60 字,0~2 条)。","6. 只返回 JSON,不要输出任何其他文字。",'JSON 格式:{"title":"主题块标题","subPoints":[{"title":"H4要点标题","sources":["输入细目原文"]}],"facts":["事实短句"]}'],h=[`文档模板:${a.template.name}`,`章节标题:${a.chapter.title}`,a.requirement?`用户要求:${a.requirement}`:"",a.graphContext?`项目图谱(本章定向):${a.graphContext.slice(0,1500)}`:"",a.blueprintContext?`文档蓝图(本章任务卡与实施方案):${a.blueprintContext.slice(0,2e3)}`:"",a.projectContext?`上下文:${a.projectContext.slice(0,1e3)}`:"",a.roleContext?`角色要求:${a.roleContext.slice(0,1e3)}`:"",f?`真实绑定资料:${f}`:"",`输入细目清单(本主题块共 ${b.length} 条,必须全部覆盖,允许合并进同一 H4):${b.join("、")}`,`请输出 1 个主题块,1~6 个 H4 要点,确保所有输入细目被覆盖。`],i={},j=await (0,N.bb)(g.join("\n"),h.filter(Boolean).join("\n\n"),{maxTokens:4096,temperature:.1,signal:a.signal,diagnostics:a.diagnostics,schema:a0,disableThinkingBoost:!0,outFailure:i});if(!j){let d=i.value?`第 ${c+1} 块未通过校验(${i.value})`:`第 ${c+1} 块 LLM 无响应`;return{blocks:a_(b,a.chapter.title,e).blocks,llmPlanned:!1,failure:d}}let k=function(a,b,c){let d=aV(a.title||"");if(!d||aW(d,c))return;let e=(a.subPoints||[]).map(a=>{let c=Array.isArray(a.sources)&&a.sources.length>0?a.sources:a.source?[a.source]:[],d=[];for(let a of c){let c=aV(a||"");!(c.length<4)&&b.some(a=>a$(c,a))&&(d.some(a=>a$(a,c))||d.push(c))}let e=aV(a.title||"");return!e||e.length<4?d.length>0?{title:d[0].slice(0,30),sources:d}:void 0:{title:(e&&!d.some(a=>a$(e,a))?e:d[0]||e).slice(0,30),sources:d}}).filter(a=>!!a);if(0!==e.length)return{title:d,subPoints:e,facts:(a.facts||[]).map(a=>a.trim().slice(0,80)).filter(Boolean).slice(0,2),targetWords:1200}}(j,b,a.chapter.title);return k?{blocks:[k],llmPlanned:!0}:{blocks:a_(b,a.chapter.title,e).blocks,llmPlanned:!1,failure:`第 ${c+1} 块 LLM 结构无效(title/subPoints 缺失或未对齐)`}},g=await Promise.all(d.map((a,b)=>f(a,b))),h=g.flatMap(a=>a.blocks),i=g.map(a=>a.failure).filter(Boolean);return 0===h.length?{blocks:[],coveredSections:[],fallbackSections:[],llmPlanned:!1,llmFailure:i.join(";")||"未知原因"}:(!function(a,b){for(let c=0;c<2&&a.length>0&&!(4e3>=Math.floor(b/a.length));c+=1){let b=a.reduce((a,b)=>b.subPoints.length>a.subPoints.length?b:a,a[0]);if(b.subPoints.length<2)break;let c=Math.ceil(b.subPoints.length/2);a.push({title:b.subPoints[c].title||b.title,subPoints:b.subPoints.slice(c),facts:[],targetWords:0}),b.subPoints=b.subPoints.slice(0,c)}let c=a.reduce((a,b)=>a+b.subPoints.length,0)||a.length;for(let d of a){let e=Math.floor(.75*Math.max(1200,Math.floor(b/Math.max(1,a.length)))+.25*b*(d.subPoints.length/c));d.targetWords=Math.min(4e3,Math.max(1200,e))}}(h,a.targetWords),{...function(a){let b=[],c=a.blocks.map(a=>({...a,subPoints:a.subPoints.map(a=>{let c=a.sources.filter(a=>!b.some(b=>a$(b,a))&&(b.push(a),!0));return{...a,sources:c}}).filter(a=>a.sources.length>0)}));return{...a,blocks:c}}(function(a,b){let c=[],d=[],e=b.map(a=>({...a,subPoints:[...a.subPoints]}));for(let b of a){let a,f;if(e.some(a=>(function(a,b){return!!a$(b.title,a)||b.subPoints.some(b=>b.sources.some(b=>a$(b,a))||a$(b.title,a))})(b,a))){c.push(b);continue}let g=-1;for(let c of e)for(let d of c.subPoints){let e=Math.max(aX(b,d.title),...d.sources.map(a=>aX(b,a)));e>g&&(g=e,a=d,f=c)}if((0,aU.tZ)(b)){let a=f||e[e.length-1];if(a){a.subPoints.push({title:b.slice(0,30),sources:[b]}),d.push(b);continue}}a&&g>=.5?(a.sources.push(b),d.push(b)):f?(f.subPoints.push({title:b.slice(0,30),sources:[b]}),d.push(b)):c.push(b)}return{blocks:e,coveredSections:c,fallbackSections:d,llmPlanned:b.length>0}}(b,h)),llmPlanned:g.some(a=>a.llmPlanned),llmFailure:i.length>0?`块级降级(${i.join(";")})`:void 0})}async function a2(a){let b=await a1(a).catch(a=>({blocks:[],coveredSections:[],fallbackSections:[],llmPlanned:!1,llmFailure:a instanceof Error?a.message:String(a)}))??{blocks:[],coveredSections:[],fallbackSections:[],llmPlanned:!1,llmFailure:"LLM 调用异常"};return b.blocks.length>0?b:{...a_(aZ(a.chapter),a.chapter.title,a.targetWords),llmFailure:b.llmFailure||"LLM 调用异常"}}function a3(a){let b=(0,v.r4)(a.content);return 0===b.length?[]:b.flatMap(b=>{let c=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),d=a.content.match(RegExp(`^###\\s+(?:\\d+(?:\\.\\d+)*[、..\\s]*\\s+)?${c}\\s*\\n([\\s\\S]*?)(?=^#{2,3}\\s+|$)`,"mu")),e=d?.[1]||"",f=(0,aT.AI)(b,(0,aT.Ym)(b,a.chapter,a.evidence)),g=(0,aT.uQ)(b,e,f);return g?[`${b}:${g}`]:[]})}function a4(a,b){let c=a.trim();if(!c)return[];let d=Math.max(1e3,Math.ceil(b)),e=[],f=0;for(;f<c.length;){let a=Math.min(f+d,c.length),b=c.lastIndexOf("\n\n",a);(b<=f||a-b>.25*d)&&(b=c.lastIndexOf("\n",a)),(b<=f||a-b>.2*d)&&(b=a),e.push(c.slice(f,b).trim()),f=b}return e.filter(Boolean)}function a5(a){return"string"==typeof a?a:a&&"object"==typeof a&&"message"in a?String(a.message):JSON.stringify(a)}function a6(a){let b=Number(process.env[a]);return Number.isFinite(b)&&b>0?Math.ceil(b):0}async function a7(a){(0,z.Te)(a.signal);let b=a.chapters.map(a=>{let b=a.content.replace(/#{1,6}\s+/gu,"").replace(/\*\*/gu,"").replace(/\|/gu," ").replace(/[\n\r]+/gu," ").trim(),c=function(a){let b=[];for(let c of[/(?:总建筑面积|建设规模|总用地面积|总占地面积)[^\n。;;]{0,18}\d+(?:[.,]\d+)?\s*万?\s*(?:㎡|m²|m2|平方米)/gu,/(?:合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价|工程总投资|总投资|工程造价)[^\n。;;]{0,18}\d+(?:[.,]\d+)?\s*万?\s*(?:万元|亿元|元)/gu,/(?:计划工期|合同工期|总工期|施工周期)[^\n。;;]{0,18}\d+\s*(?:日历天|天|个月|月)/gu,/(?:质量标准|质量目标)[^\n。;;]{0,26}/gu,/(?:找平层|抹灰层|防水层|保温层|结合层|垫层|面层|粘结层)[^\n。;;]{0,24}\d+:\d+(?:\.\d+)?/gu]){let d=[...new Set(a.match(c)||[])].slice(0,4);b.push(...d)}return[...new Set(b.map(a=>a.replace(/\s+/gu," ").trim()).filter(Boolean))].join(";")}(a.content);return`章节:${a.title}
|
|
30
30
|
数值口径清单:${c||"(未提取到总量口径数字)"}
|
|
31
31
|
正文摘要:${b.slice(0,600)}`}).join("\n\n---\n\n"),c=function(a){let b=Math.ceil(a.totalChars/Math.max(1e3,a.chunkChars)),c="chapter"===a.phase?a6("DOCUMENT_CHAPTER_REVIEW_MAX_CHUNKS")||Math.min(Math.max(2,Math.floor(a.totalChars/a.chapterCount/4e3)),b):"global"===a.phase?a6("DOCUMENT_GLOBAL_REVIEW_MAX_CHUNKS")||Math.min(4,b):a6("DOCUMENT_FINAL_REVIEW_MAX_CHUNKS")||Math.min(6,b);return{chunks:c,budgetPerChunk:Math.ceil(a.totalChars/Math.max(1,c)),maxIssues:Math.max(4,Math.min(28,Math.ceil(2.5*c)))}}({totalChars:b.length,chapterCount:a.chapters.length,chunkChars:16e3,phase:"global"}),d=a4(b,16e3).map((a,c)=>`**第 ${c+1}/${a4(b,16e3).length} 部分**
|
|
32
32
|
|
|
@@ -38,7 +38,7 @@ ${b}
|
|
|
38
38
|
|
|
39
39
|
返回 JSON:{"issues":[]}`,{maxTokens:1e3,temperature:.1,signal:a.signal,diagnostics:a.diagnostics})))).flatMap(a=>Array.isArray(a?.issues)?a.issues:[]).map(a5).filter(Boolean))];return{issues:e,stage:(0,aP.X5)({type:"llm_review",roleId:"global-consistency-review",status:e.length>0?"failed":"success",message:e.length>0?`全局一致性审查完成:发现 ${e.length} 个跨章问题`:"全局一致性审查通过"},{subtitle:"全局一致性审查"})}}var a8=c(71001);let a9=/安全|文明|质量|绿色施工|环保|扬尘|消防|应急|危大|风险|规范|标准|管理要求|施工工艺|技术措施|验收/u,ba=/项目名称|工程名称|建设地点|建设单位|招标人|发包人|建设规模|招标范围|合同工期|计划工期|质量标准|危大工程清单|工程量|材料规格|设备型号|图纸参数|报价|单价|利润|税率|合同金额|联系方式|品牌/u,bb=/报价|单价|合价|金额|利润|税率|增值税|招标控制价|最高投标限价|中标价|合同价|暂列金额/u,bc=/联网增强|联网检索|网页资料|搜索结果|根据网页|互联网资料|在线资料|浏览器|搜索引擎/u,bd=["项目名称","工程名称","建设地点","建设单位","招标人","发包人","建设规模","招标范围","合同工期","计划工期","工程量","报价","单价"];function be(a){return a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,'"').replace(/'/gu,"'").replace(/<[^>]+>/gu,"").replace(/\s+/gu," ").trim()}async function bf(a,b,c,d,e){let f=`https://duckduckgo.com/html/?q=${encodeURIComponent(a)}`,g=new AbortController,h=setTimeout(()=>g.abort(),8e3),i=()=>g.abort();e?.addEventListener("abort",i,{once:!0});let j=await fetch(f,{headers:{"User-Agent":"Mozilla/5.0 compatible; customize-agent web research"},signal:g.signal}).finally(()=>{clearTimeout(h),e?.removeEventListener("abort",i)});return j.ok?[...(await j.text()).matchAll(/<a[^>]+class="result__a"[^>]+href="([^"]+)"[^>]*>([\s\S]*?)<\/a>[\s\S]*?<a[^>]+class="result__snippet"[^>]*>([\s\S]*?)<\/a>/giu)].map(a=>{let b=be(a[1]||""),c=be(a[2]||""),d=be(a[3]||""),e=/uddg=([^&]+)/u.exec(b)?.[1];return{url:e?decodeURIComponent(e):b,title:c,snippet:d}}).filter(a=>{let b=`${a.title} ${a.snippet} ${a.url}`;return!(!a.url||!a.snippet||ba.test(b)||bb.test(b)||bc.test(b)||d.some(a=>a&&b.includes(a)))&&(0===c.length||c.some(b=>a.url.includes(b)))}).slice(0,b):[]}async function bg(a){if(!a.config.enabled||!function(a,b){let c=`${a} ${b.join(" ")}`;return!(!a9.test(c)||/项目概况|工程概况|建设地点|建设规模|招标范围|工程量|报价|造价/u.test(c)&&!/安全|文明|质量|危大|环保|工艺|措施/u.test(c))}(a.chapterTitle,a.sectionTitles))return{evidence:[],queries:[],filtered:0};let b=function(a,b,c){let d=`${a} ${b.join(" ")}`,e=[/危大/u.test(d)?"危大工程 专项施工方案 管理规定 安全措施":"",/安全|文明/u.test(d)?"建筑工程 安全文明施工 管理要求":"",/质量|验收/u.test(d)?"建筑工程 质量控制 质量验收 通用要求":"",/扬尘|环保|绿色/u.test(d)?"施工现场 扬尘治理 绿色施工 环保要求":"",/消防|应急/u.test(d)?"施工现场 消防 应急管理 要求":"",/工艺|技术措施/u.test(d)?"建筑工程 施工工艺 技术措施 通用要求":""].filter(Boolean),f=`${a.replace(ba,"")} 公开规范 通用要求`.trim();return[...new Set(e.length?e:[f])].slice(0,c)}(a.chapterTitle,a.sectionTitles,a.config.maxQueriesPerChapter),c=[],d=0;for(let e of b)try{for(let b of(await bf(e,a.config.maxResultsPerQuery,a.config.trustedDomains,a.runtimeRules.forbiddenTerms||[],a.signal))){let e=function(a,b){let c=a;for(let a of bd)c=c.replace(RegExp(`${a}[^。;;
|
|
40
40
|
]{0,80}`,"gu"),"");for(let a of b.map(a=>{var b;return null==(b=a.value)?"":"string"==typeof b||"number"==typeof b||"boolean"==typeof b?String(b).trim():""}).filter(a=>a.length>=3&&a.length<=80))c=c.replace(RegExp(a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"gu"),"");return c.replace(bb,"").trim()}(b.snippet,a.localFacts);if(!e||e.length<20){d+=1;continue}c.push({chapterId:a.chapterId,filePath:b.url,score:.42,content:`参考依据:${b.title}
|
|
41
|
-
${e}`,source:function(a){let b=a.toLowerCase();return b.includes(".gov.cn")||b.includes("mohurd")||b.includes("zjt")||a.includes("住建")?"web-policy":"web-evidence"}(b.url),sectionTitle:a.chapterTitle})}}catch{d+=1}return{evidence:c,queries:b,filtered:d}}function bh(a){return e.resolve(a).replace(/\\/gu,"/").toLowerCase()}function bi(a,b=[]){return{projectId:a,allowedFilePaths:[...new Set(b.filter(Boolean).map(bh))]}}function bj(a){return!!a?.allowedFilePaths.length}function bk(a,b){if(!bj(b))return!0;if(!a)return!1;let c=bh(a);return b.allowedFilePaths.includes(c)}function bl(a,b){return a.filter(a=>bk(a.filePath,b))}function bm(a,b){return a.filter(a=>bk(a.sourceFile,b))}function bn(a,b,c){if(!bj(b))return;let d=a.filter(a=>!bk(a.filePath,b));if(d.length>0){let a=d.slice(0,5).map(a=>a.filePath).join(";");throw Error(`EVIDENCE_SCOPE_VIOLATION:${c}:${a}`)}}function bo(a){return/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|\d{1,2}\.\d{1,2}/u.test(a)}function bp(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/[\s,。,.;;::《》“”‘’()()_-]+/gu,"").toLowerCase()}function bq(a,b){let c=bp(b);if(!c||c.length<4)return!0;let d=bp(a);return!!d.includes(c)||c.length>=12&&d.includes(c.slice(0,Math.max(8,Math.floor(.72*c.length))))}function br(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/\s+/gu,"").replace(/[,。,.;;::《》“”‘’()()_-]/gu,"").toLowerCase()}function bs(a,b){let c=a.trim();if(p(b,c)||o(b,c)||/签章|盖章|联系人|联系电话|电话|邮箱|解密|开标|评标|保证金|交易系统|空白|填写|上传|下载|递交|投标文件制作|电子服务系统|交易平台/u.test(c)||/\|/u.test(c)||/^#+\s*/u.test(c)||/见(?:招标公告|投标人须知|前附表|本项目|补疑)|资料参数行摘要|公共资源交易监督管理|开评标程序|监管部门|招标代理机构|监督管理部门|行政监督部门/u.test(c)||/是否|符合|采购范围|规定的投标截止时间|电子交易系统|投标人须知|招标文件正文/u.test(c)&&/\d{3,}/u.test(c)||/项目名称|工程名称/u.test(c)&&/项目编号|工程概况|建筑面积|本项目分为|现状建筑物|改造工程|标段/u.test(c)||/项目编号[::]|工程概况[::]|本项目分为|现状建筑物|总建筑面积|本次改造工程|清单编制说明/u.test(c))return"";let d=/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月)/u.exec(c)?.[0],e=br(d&&/工期|总工期|合同工期|计划工期|施工周期/u.test(c)?d:c);return!e||e.length>80?"":e}let bt=/(\d{4})\s*年\s*(\d{1,2})\s*月\s*(\d{1,2})\s*日/gu,bu=/进度计划|里程碑|节点安排|验收时间|完成日期|竣工日期|移交日期|合同签订/u;function bv(a,b){let c=[],d=function(a){let b=new Set;for(let c of[...a.project,...a.schedule,...a.quality,...a.resources,...a.preciseFacts].map(a=>`${a.key||""}${a.fieldName||""}${(0,z.lG)(a.value)}`))for(let a of c.matchAll(bt))b.add(`${a[1]}年${a[2]}月${a[3]}日`);return b}(b),e=[...b.schedule,...b.project].map(a=>`${a.key||""}${(0,z.lG)(a.value)}`).join(" "),f=bt.test(e);for(let b of(bt.lastIndex=0,a.matchAll(bt))){let e=`${b[1]}年${b[2]}月${b[3]}日`;if(d.has(e))continue;let g=Math.max(0,(b.index||0)-40),h=a.slice(g,(b.index||0)+e.length+40);f&&bu.test(h)||c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文编造开工日期“${e}”:绑定资料未提供该具体日历日期(招标文件以开工令时间为准)`,suggestion:`删除自行设定的具体日期,统一改写为“以开工令时间为准”;如为进度计划节点日期,必须标注为计划推算节点并保持与总工期一致。`})}return c.slice(0,3)}let bw=/(单体建筑面积|总建筑面积|建筑面积)[^。;;\n]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)/gu;function bx(a,b){let c=[],d=function(a){let b=[];for(let c of[...a.project,...a.preciseFacts].map(a=>`${a.fieldName||a.key||""}:${(0,z.lG)(a.value)}`)){let a=/(总占地面积|占地面积|单体建筑面积|总建筑面积|建筑面积|地上建筑面积|地下建筑面积|总用地面积)/u.exec(c)?.[1],d=/([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)/u.exec(c);if(!a||!d)continue;let e=Number(d[1].replace(/[,,]/gu,""));Number.isFinite(e)&&e>0&&b.push({label:a,value:e})}return b}(b),e=new Set(d.filter(a=>/占地面积/u.test(a.label)).map(a=>a.value)),f=new Set(d.filter(a=>/建筑面积/u.test(a.label)&&!/地上|地下/u.test(a.label)).map(a=>a.value));if(0===e.size||0===f.size)return c;for(let b of a.matchAll(bw)){let a=Number(b[2].replace(/[,,]/gu,""));if(!Number.isFinite(a)||a<=0||!e.has(a)||f.has(a))continue;let d=b[1],g=[...f].join("、");c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`字段-数值错配:“${d} ${b[2]}㎡”将总占地面积误作${d}(绑定资料${d}口径为 ${g}㎡)`,suggestion:`总占地面积与建筑面积是两个独立字段,必须严格区分:将“${d} ${b[2]}㎡”改为资料口径“${d} ${g}㎡”,总占地面积保持独立表述。`})}return c.slice(0,3)}let by=/(地上[^。;;]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)[^。;;]{0,40}?地下[^。;;]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)[^。;;]{0,60}?(?:单体建筑面积|总建筑面积)[^。;;]{0,20}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米))/gu;function bz(a){let b=[];for(let c of a.matchAll(by)){let a=Number(c[2].replace(/[,,]/gu,"")),d=Number(c[3].replace(/[,,]/gu,"")),e=Number(c[4].replace(/[,,]/gu,""));if(![a,d,e].every(Number.isFinite))continue;let f=a+d,g=Math.max(1,.001*e);Math.abs(f-e)>g&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`面积算术矛盾:地上 ${a}㎡ + 地下 ${d}㎡ = ${f}㎡,与同句“单体建筑面积 ${e}㎡”不符(差 ${Math.abs(f-e).toFixed(2)}㎡)`,suggestion:`地上与地下面积之和必须等于单体建筑面积:按绑定资料口径统一三者数值,删除错误数值表述。`})}return b.slice(0,3)}let bA=/(?:高峰期|高峰|峰值)[^。;;\n]{0,20}?(?:约)?\s*([\d,]+)\s*人/g;function bB(a){let b=[],c=[];for(let b of a.matchAll(bA)){let a=Number(b[1].replace(/[,,]/gu,""));Number.isFinite(a)&&a>0&&c.push({value:a,text:b[0].trim().slice(0,40)})}let d=function(a){let b=[],c=a.split(/\r?\n/u),d=/^\|.+\|$/u,e=/阶段|时期|工期|工序|进度/u,f=/人数|劳动力|作业人员|施工人员|投入人数/u,g=/^:?-{3,}:?$/u,h=a=>a.replace(/[*_`~]/gu,"").trim();for(let a=0;a<c.length;a+=1){let i,j,k;if(!d.test(c[a].trim()))continue;let l=[];for(;a<c.length&&d.test(c[a].trim());)l.push(c[a].trim()),a+=1;if(a-=1,l.length<3)continue;let m=a=>a.split("|").map(a=>a.trim()).slice(1,-1),n=l.findIndex((a,b)=>b>0&&m(a).every(a=>g.test(a)));if(1===n&&l.length>=3)i=m(l[0]).map(h),j=l.slice(2);else{if(-1!==n||!(l.length>=2))continue;let a=m(l[0]).map(h);if(!(e.test(a.join("|"))&&f.test(a.join("|"))))continue;i=a,j=l.slice(1)}let o=i.findIndex(a=>e.test(a)),p=i.findIndex(a=>f.test(a));if(p<0||o>=0&&o===p)continue;let q=[],r=0;for(let a of j){let b=m(a),c=b[p]||"",d=/^([\d,]+)\s*人?$/u.exec(c);if(!d)continue;let e=Number(d[1].replace(/[,,]/gu,""));if(Number.isFinite(e)&&!(e<=0)){if(b.some((a,b)=>b!==p&&/合计|总计|小计/u.test(a))){k=e;continue}q.push(e),r+=e}}if(0===q.length&&void 0===k)continue;let s=Math.max(...q.length>0?q:[k||0]);b.push({countCells:q,totalCell:k,detailSum:r,peak:s})}return b}(a),e=d.map(a=>a.peak),f=(a,c)=>b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:a,suggestion:c});for(let a=0;a<c.length;a+=1)for(let b=a+1;b<c.length;b+=1){let[d,e]=[c[a],c[b]],g=Math.abs(d.value-e.value)/Math.max(d.value,e.value);if(g>.3){f(`劳动力数据矛盾:正文“${d.text}”(${d.value} 人)与“${e.text}”(${e.value} 人)互斥(相差 ${Math.round(100*g)}%)`,"劳动力峰值口径必须全文唯一:以分阶段投入明细表为准统一正文各处峰值表述,删除矛盾数字。"),a=c.length;break}}if(e.length>=2){let a=Math.max(...e),b=Math.min(...e),c=Math.abs(a-b)/a;c>.3&&f(`劳动力数据矛盾:分阶段投入明细表峰值 ${b} 人与另一劳动力表峰值 ${a} 人互斥(相差 ${Math.round(100*c)}%)`,"劳动力峰值口径必须全文唯一:统一各劳动力表格的峰值数据,删除矛盾表格数字。")}let g=c.reduce((a,b)=>Math.max(a,b.value),0),h=e.length>0?Math.max(...e):void 0;if(void 0!==h&&g>0&&g>1.3*h){let a=c.find(a=>a.value===g)?.text||"";f(`劳动力数据矛盾:正文表述“${a}”达 ${g} 人,而分阶段投入明细表最大峰值为 ${h} 人(超出 ${Math.round((g-h)/h*100)}%)`,"劳动力投入口径必须全文统一:以分阶段明细表为准复核正文峰值表述,删除与表格矛盾的“高峰期 X 人”措辞或调整表格数据。")}for(let a of d){if(void 0===a.totalCell||a.countCells.length<2)continue;let b=Math.abs(a.totalCell-a.detailSum)/Math.max(a.totalCell,a.detailSum);b>.1&&f(`劳动力数据矛盾:劳动力表合计行 ${a.totalCell} 人与明细行之和 ${a.detailSum} 人不符(差 ${Math.round(100*b)}%)`,"劳动力表合计必须等于各明细行人数之和:统一合计行与明细行数据,删除矛盾数字。")}let i=[...a.matchAll(/([\d,]+)\s*(?:个)?工日/gu)].map(a=>Number(a[1].replace(/[,,]/gu,""))).filter(a=>Number.isFinite(a)&&a>0),j=[...a.matchAll(/(?:工期|总工期|计划工期)[^。;;\n]{0,16}?(\d{2,4})\s*(?:个)?(?:日历)?天/gu)].map(a=>Number(a[1])).filter(a=>Number.isFinite(a)&&a>=30&&a<=3e3);if(i.length>0&&g>0&&j.length>0){let a=Math.max(...i),b=Math.max(...j),c=g*b*1.3,d=g*b*.1;(a>c||a<d)&&f(`劳动力数据矛盾:总工日 ${a} 个与峰值 ${g} 人\xd7总工期 ${b} 天不自洽(合理区间约 ${Math.round(d)}~${Math.round(c)} 个)`,"总工日必须与劳动力峰值和总工期量级自洽:按各阶段人数\xd7阶段工期重算总工日,或修正峰值人数/总工期表述。")}return b.slice(0,5)}let bC={slope:"基坑放坡开挖、土钉墙喷锚支护坡面",pile:"钻孔灌注桩、排桩、地下连续墙围护结构"};async function bD(a){let b=[],c=a.split(/\n{2,}/u).filter(a=>a.trim().length>=30);if(0===c.length)return b;let d=await (0,M.Mv)(c,Object.values(bC)),e=a=>d(a,bC.slope)>=M.Eh,f=/钻孔灌注桩|灌注桩|排桩|地下连续墙|咬合桩|支护桩/u,g=a=>f.test(a)&&d(a,bC.pile)>=M.Eh,h=c.filter(a=>e(a)&&!g(a)),i=c.filter(a=>g(a)&&!e(a));return 0===h.length||0===i.length||b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基坑支护方案前后不一致:放坡喷锚类支护表述与灌注桩排桩类支护表述分别成段出现(放坡喷锚类 ${h.length} 段、灌注桩排桩类 ${i.length} 段),属跨模板拼接断裂`,suggestion:"支护形式必须全文统一为一种体系(以图纸/地质条件为准):确定采用放坡喷锚或灌注桩排桩后,删除另一种体系的表述,并补充基坑开挖深度数值支撑危大分级判定。"}),b}let bE=/^#{2,4}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]*(?:危大工程(?:辨识)?(?:清单|识别)|危大(?:工程)?(?:及超危大)?(?:清单|识别|辨识))[^\n]*$/gmu;function bF(a){let b=[],c=function(a){let b=a.split(/\r?\n/u),c=[];for(let a=0;a<b.length;a+=1){if(!bE.test(b[a].trim()))continue;let d=[];for(let c=a+1;c<Math.min(b.length,a+30);c+=1){let a=b[c].trim();if(/^#{1,6}\s/u.test(a))break;let e=/^(?:\d+[.、.)]|[-*•])?\s*([^。;;|]{2,40})$/u.exec(a)?.[1];e&&d.push(e.replace(/^[\s\d.、()()【】-]+/u,"").replace(/[((【][^))】]*[))】]/gu,"").replace(/施工$/u,"").replace(/作业$/u,"").replace(/\s+/gu,"").trim())}d.length>=2&&c.push({title:b[a].trim(),items:[...new Set(d)]})}return c}(a);if(c.length<2)return b;for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a],f=c[d],g=e.items.filter(a=>!f.items.includes(a)),h=f.items.filter(a=>!e.items.includes(a));(0!==g.length||0!==h.length)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`危大工程辨识清单不一致:“${e.title.slice(0,30)}”(${e.items.length} 项)与“${f.title.slice(0,30)}”(${f.items.length} 项)存在差异:前者独有【${g.join("、")||"无"}】,后者独有【${h.join("、")||"无"}】`,suggestion:"全文危大工程辨识清单必须唯一且一致:合并两处清单,统一项名、数量与分级表述,避免评标专家以清单矛盾质疑辨识深度。"})}return b.slice(0,3)}let bG=[{name:"施工工地周边100%围挡",query:"施工工地周边设置围挡封闭管理"},{name:"物料堆放100%覆盖",query:"物料堆放覆盖防尘"},{name:"出入车辆100%冲洗",query:"出入车辆冲洗设施清洗出场"},{name:"施工现场地面100%硬化",query:"施工现场场地地面硬化"},{name:"拆迁工地100%湿法作业",query:"湿法作业洒水降尘"},{name:"渣土车辆100%密闭运输",query:"渣土车辆密闭运输防止遗撒"}];function bH(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=c.trim();if(!(!a||/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a)))for(let c of a.split(/(?<=[。!?!?;;])/u)){let a=c.trim();a.length>=8&&a.length<=120&&b.push(a)}}let c=[...new Set(b)];if(c.length<=400)return c;let d=Math.ceil(c.length/400);return c.filter((a,b)=>b%d==0).slice(0,400)}async function bI(a,b){if(0===b.length||0===a.length)return new Map;let c=await (0,M.Mv)(a.map(a=>a.text),b);return new Map(a.map(a=>[a.key,b.some(b=>c(a.text,b)>=.6)]))}async function bJ(a){let b=[];if(!/扬尘|环保|文明施工|绿色施工/u.test(a))return b;let c=await bI(bG.map(a=>({key:a.name,text:a.query})),bH(a)),d=bG.filter(a=>!c.get(a.name)).map(a=>a.name);return 0===d.length||b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`“扬尘治理六个百分百”未逐项落实:缺少【${d.join("、")}】(${bG.length-d.length}/${bG.length} 项命中)`,suggestion:"按检查规范第七部分要求逐条表述六项措施:工地周边100%围挡、物料堆放100%覆盖、出入车辆100%冲洗、施工现场地面100%硬化、拆迁工地100%湿法作业、渣土车辆100%密闭运输。"}),b}let bK=/建设地点|工程地点|项目地点|实施地点|服务地点|交付地点|建设地址/u,bL=["安徽","合肥","芜湖","蚌埠","淮南","马鞍山","淮北","铜陵","安庆","黄山","滁州","阜阳","宿州","六安","亳州","池州","宣城"];async function bM(a,b){let c=[],d=b.project.some(a=>bK.test(`${a.fieldName||""}${a.key||""}`)&&bL.some(b=>(0,z.lG)(a.value).includes(b))),e=[];if(d&&(e.push({key:"award",text:"争创省市级优质工程奖、安全文明标准化工地"}),e.push({key:"greenQuant",text:"非传统水源利用率、废弃物回收率等绿色施工量化指标"})),e.push({key:"workInjury",text:"按规定为作业人员办理工伤保险"}),0===e.length)return c;let f=await bI(e,bH(a));return d&&(f.get("award")||c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:"属地创优目标缺失:正文未提及省市级优质工程/文明标准化工地等创优目标(安徽省属地适配项)",suggestion:"在质量目标或创优规划小节补写与项目实际规模相符的创优目标表述;奖项名称必须以评分项要求提取结果(招标文件原文)为准逐字落位,禁止自行编造或替换为其他奖项名称。"}),/四节一环保|绿色施工|节水|节材|节能/u.test(a)&&!f.get("greenQuant")&&c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:"四节一环保量化指标缺失:非传统水源利用率/漏损率/土方平衡率/废弃物回收率等均未量化(附录八基准对照项)",suggestion:"在绿色施工章节补充量化指标(非传统水源利用率、管网漏损率、土方平衡率、可回收废弃物回收率等)与模板周转次数,数值参考行业通用水平与附录八基准,不得编造极端值。"})),/劳务|农民工|工资/u.test(a)&&!f.get("workInjury")&&c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:"工伤保险表述缺失:正文有劳务/农民工管理内容但未提及工伤保险缴纳(政策合规漏项)",suggestion:"在劳务管理/农民工工资保障小节补充“按规定为作业人员办理工伤保险”表述。"}),c}let bN=RegExp(`(?:^|
|
|
41
|
+
${e}`,source:function(a){let b=a.toLowerCase();return b.includes(".gov.cn")||b.includes("mohurd")||b.includes("zjt")||a.includes("住建")?"web-policy":"web-evidence"}(b.url),sectionTitle:a.chapterTitle})}}catch{d+=1}return{evidence:c,queries:b,filtered:d}}function bh(a){return e.resolve(a).replace(/\\/gu,"/").toLowerCase()}function bi(a,b=[]){return{projectId:a,allowedFilePaths:[...new Set(b.filter(Boolean).map(bh))]}}function bj(a){return!!a?.allowedFilePaths.length}function bk(a,b){if(!bj(b))return!0;if(!a)return!1;let c=bh(a);return b.allowedFilePaths.includes(c)}function bl(a,b){return a.filter(a=>bk(a.filePath,b))}function bm(a,b){return a.filter(a=>bk(a.sourceFile,b))}function bn(a,b,c){if(!bj(b))return;let d=a.filter(a=>!bk(a.filePath,b));if(d.length>0){let a=d.slice(0,5).map(a=>a.filePath).join(";");throw Error(`EVIDENCE_SCOPE_VIOLATION:${c}:${a}`)}}function bo(a){return/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|\d{1,2}\.\d{1,2}/u.test(a)}function bp(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/[\s,。,.;;::《》“”‘’()()_-]+/gu,"").toLowerCase()}function bq(a,b){let c=bp(b);if(!c||c.length<4)return!0;let d=bp(a);return!!d.includes(c)||c.length>=12&&d.includes(c.slice(0,Math.max(8,Math.floor(.72*c.length))))}function br(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/\s+/gu,"").replace(/[,。,.;;::《》“”‘’()()_-]/gu,"").toLowerCase()}function bs(a,b){let c=a.trim();if(p(b,c)||o(b,c)||/签章|盖章|联系人|联系电话|电话|邮箱|解密|开标|评标|保证金|交易系统|空白|填写|上传|下载|递交|投标文件制作|电子服务系统|交易平台/u.test(c)||/\|/u.test(c)||/^#+\s*/u.test(c)||/见(?:招标公告|投标人须知|前附表|本项目|补疑)|资料参数行摘要|公共资源交易监督管理|开评标程序|监管部门|招标代理机构|监督管理部门|行政监督部门/u.test(c)||/是否|符合|采购范围|规定的投标截止时间|电子交易系统|投标人须知|招标文件正文/u.test(c)&&/\d{3,}/u.test(c)||/项目名称|工程名称/u.test(c)&&/项目编号|工程概况|建筑面积|本项目分为|现状建筑物|改造工程|标段/u.test(c)||/项目编号[::]|工程概况[::]|本项目分为|现状建筑物|总建筑面积|本次改造工程|清单编制说明/u.test(c))return"";let d=/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月)/u.exec(c)?.[0],e=br(d&&/工期|总工期|合同工期|计划工期|施工周期/u.test(c)?d:c);return!e||e.length>80?"":e}let bt=/(\d{4})\s*年\s*(\d{1,2})\s*月\s*(\d{1,2})\s*日/gu,bu=/进度计划|里程碑|节点安排|验收时间|完成日期|竣工日期|移交日期|合同签订/u;function bv(a,b){let c=[],d=function(a){let b=new Set;for(let c of[...a.project,...a.schedule,...a.quality,...a.resources,...a.preciseFacts].map(a=>`${a.key||""}${a.fieldName||""}${(0,z.lG)(a.value)}`))for(let a of c.matchAll(bt))b.add(`${a[1]}年${a[2]}月${a[3]}日`);return b}(b),e=[...b.schedule,...b.project].map(a=>`${a.key||""}${(0,z.lG)(a.value)}`).join(" "),f=bt.test(e);for(let b of(bt.lastIndex=0,a.matchAll(bt))){let e=`${b[1]}年${b[2]}月${b[3]}日`;if(d.has(e))continue;let g=Math.max(0,(b.index||0)-40),h=a.slice(g,(b.index||0)+e.length+40);f&&bu.test(h)||c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文编造开工日期“${e}”:绑定资料未提供该具体日历日期(招标文件以开工令时间为准)`,suggestion:`删除自行设定的具体日期,统一改写为“以开工令时间为准”;如为进度计划节点日期,必须标注为计划推算节点并保持与总工期一致。`})}return c.slice(0,3)}let bw=/(单体建筑面积|总建筑面积|建筑面积)[^。;;\n]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)/gu;function bx(a,b){let c=[],d=function(a){let b=[];for(let c of[...a.project,...a.preciseFacts].map(a=>`${a.fieldName||a.key||""}:${(0,z.lG)(a.value)}`)){let a=/(总占地面积|占地面积|单体建筑面积|总建筑面积|建筑面积|地上建筑面积|地下建筑面积|总用地面积)/u.exec(c)?.[1],d=/([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)/u.exec(c);if(!a||!d)continue;let e=Number(d[1].replace(/[,,]/gu,""));Number.isFinite(e)&&e>0&&b.push({label:a,value:e})}return b}(b),e=new Set(d.filter(a=>/占地面积/u.test(a.label)).map(a=>a.value)),f=new Set(d.filter(a=>/建筑面积/u.test(a.label)&&!/地上|地下/u.test(a.label)).map(a=>a.value));if(0===e.size||0===f.size)return c;for(let b of a.matchAll(bw)){let a=Number(b[2].replace(/[,,]/gu,""));if(!Number.isFinite(a)||a<=0||!e.has(a)||f.has(a))continue;let d=b[1],g=[...f].join("、");c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`字段-数值错配:“${d} ${b[2]}㎡”将总占地面积误作${d}(绑定资料${d}口径为 ${g}㎡)`,suggestion:`总占地面积与建筑面积是两个独立字段,必须严格区分:将“${d} ${b[2]}㎡”改为资料口径“${d} ${g}㎡”,总占地面积保持独立表述。`})}return c.slice(0,3)}let by=/(地上[^。;;]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)[^。;;]{0,40}?地下[^。;;]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)[^。;;]{0,60}?(?:单体建筑面积|总建筑面积)[^。;;]{0,20}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米))/gu;function bz(a){let b=[];for(let c of a.matchAll(by)){let a=Number(c[2].replace(/[,,]/gu,"")),d=Number(c[3].replace(/[,,]/gu,"")),e=Number(c[4].replace(/[,,]/gu,""));if(![a,d,e].every(Number.isFinite))continue;let f=a+d,g=Math.max(1,.001*e);Math.abs(f-e)>g&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`面积算术矛盾:地上 ${a}㎡ + 地下 ${d}㎡ = ${f}㎡,与同句“单体建筑面积 ${e}㎡”不符(差 ${Math.abs(f-e).toFixed(2)}㎡)`,suggestion:`地上与地下面积之和必须等于单体建筑面积:按绑定资料口径统一三者数值,删除错误数值表述。`})}return b.slice(0,3)}let bA=/(?:高峰期|高峰|峰值)[^。;;\n]{0,20}?(?:约)?\s*([\d,]+)\s*人/g;function bB(a){let b=[],c=[];for(let b of a.matchAll(bA)){let a=Number(b[1].replace(/[,,]/gu,""));Number.isFinite(a)&&a>0&&c.push({value:a,text:b[0].trim().slice(0,40)})}let d=function(a){let b=[],c=a.split(/\r?\n/u),d=/^\|.+\|$/u,e=/阶段|时期|工期|工序|进度/u,f=/人数|劳动力|作业人员|施工人员|投入人数/u,g=/^:?-{3,}:?$/u,h=a=>a.replace(/[*_`~]/gu,"").trim();for(let a=0;a<c.length;a+=1){let i,j,k;if(!d.test(c[a].trim()))continue;let l=[];for(;a<c.length&&d.test(c[a].trim());)l.push(c[a].trim()),a+=1;if(a-=1,l.length<3)continue;let m=a=>a.split("|").map(a=>a.trim()).slice(1,-1),n=l.findIndex((a,b)=>b>0&&m(a).every(a=>g.test(a)));if(1===n&&l.length>=3)i=m(l[0]).map(h),j=l.slice(2);else{if(-1!==n||!(l.length>=2))continue;let a=m(l[0]).map(h);if(!(e.test(a.join("|"))&&f.test(a.join("|"))))continue;i=a,j=l.slice(1)}let o=i.findIndex(a=>e.test(a)),p=i.findIndex(a=>f.test(a));if(p<0||o>=0&&o===p||/岗位/u.test(i.join("|"))&&/职责|持证|职称/u.test(i.join("|")))continue;let q=[],r=0;for(let a of j){let b=m(a),c=b[p]||"",d=/^([\d,]+)\s*人?$/u.exec(c);if(!d)continue;let e=Number(d[1].replace(/[,,]/gu,""));if(Number.isFinite(e)&&!(e<=0)){if(b.some((a,b)=>b!==p&&/合计|总计|小计/u.test(a))){k=e;continue}q.push(e),r+=e}}if(0===q.length&&void 0===k)continue;let s=Math.max(...q.length>0?q:[k||0]);b.push({countCells:q,totalCell:k,detailSum:r,peak:s})}return b}(a),e=d.map(a=>a.peak),f=(a,c)=>b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:a,suggestion:c});for(let a=0;a<c.length;a+=1)for(let b=a+1;b<c.length;b+=1){let[d,e]=[c[a],c[b]],g=Math.abs(d.value-e.value)/Math.max(d.value,e.value);if(g>.3){f(`劳动力数据矛盾:正文“${d.text}”(${d.value} 人)与“${e.text}”(${e.value} 人)互斥(相差 ${Math.round(100*g)}%)`,"劳动力峰值口径必须全文唯一:以分阶段投入明细表为准统一正文各处峰值表述,删除矛盾数字。"),a=c.length;break}}if(e.length>=2){let a=Math.max(...e),b=Math.min(...e),c=Math.abs(a-b)/a;c>.3&&f(`劳动力数据矛盾:分阶段投入明细表峰值 ${b} 人与另一劳动力表峰值 ${a} 人互斥(相差 ${Math.round(100*c)}%)`,"劳动力峰值口径必须全文唯一:统一各劳动力表格的峰值数据,删除矛盾表格数字。")}let g=c.reduce((a,b)=>Math.max(a,b.value),0),h=e.length>0?Math.max(...e):void 0;if(void 0!==h&&g>0&&g>1.3*h){let a=c.find(a=>a.value===g)?.text||"";f(`劳动力数据矛盾:正文表述“${a}”达 ${g} 人,而分阶段投入明细表最大峰值为 ${h} 人(超出 ${Math.round((g-h)/h*100)}%)`,"劳动力投入口径必须全文统一:以分阶段明细表为准复核正文峰值表述,删除与表格矛盾的“高峰期 X 人”措辞或调整表格数据。")}for(let a of d){if(void 0===a.totalCell||a.countCells.length<2)continue;let b=Math.abs(a.totalCell-a.detailSum)/Math.max(a.totalCell,a.detailSum);b>.1&&f(`劳动力数据矛盾:劳动力表合计行 ${a.totalCell} 人与明细行之和 ${a.detailSum} 人不符(差 ${Math.round(100*b)}%)`,"劳动力表合计必须等于各明细行人数之和:统一合计行与明细行数据,删除矛盾数字。")}let i=[...a.matchAll(/([\d,]+)\s*(?:个)?工日/gu)].map(a=>Number(a[1].replace(/[,,]/gu,""))).filter(a=>Number.isFinite(a)&&a>0),j=[...a.matchAll(/(?:工期|总工期|计划工期)[^。;;\n]{0,16}?(\d{2,4})\s*(?:个)?(?:日历)?天/gu)].map(a=>Number(a[1])).filter(a=>Number.isFinite(a)&&a>=30&&a<=3e3);if(i.length>0&&g>0&&j.length>0){let a=Math.max(...i),b=Math.max(...j),c=g*b*1.3,d=g*b*.1;(a>c||a<d)&&f(`劳动力数据矛盾:总工日 ${a} 个与峰值 ${g} 人\xd7总工期 ${b} 天不自洽(合理区间约 ${Math.round(d)}~${Math.round(c)} 个)`,"总工日必须与劳动力峰值和总工期量级自洽:按各阶段人数\xd7阶段工期重算总工日,或修正峰值人数/总工期表述。")}return b.slice(0,5)}let bC={slope:"基坑放坡开挖、土钉墙喷锚支护坡面",pile:"钻孔灌注桩、排桩、地下连续墙围护结构"};async function bD(a){let b=[],c=a.split(/\n{2,}/u).filter(a=>a.trim().length>=30);if(0===c.length)return b;let d=await (0,M.Mv)(c,Object.values(bC)),e=a=>d(a,bC.slope)>=M.Eh,f=/钻孔灌注桩|灌注桩|排桩|地下连续墙|咬合桩|支护桩/u,g=a=>f.test(a)&&d(a,bC.pile)>=M.Eh,h=c.filter(a=>e(a)&&!g(a)),i=c.filter(a=>g(a)&&!e(a));return 0===h.length||0===i.length||b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基坑支护方案前后不一致:放坡喷锚类支护表述与灌注桩排桩类支护表述分别成段出现(放坡喷锚类 ${h.length} 段、灌注桩排桩类 ${i.length} 段),属跨模板拼接断裂`,suggestion:"支护形式必须全文统一为一种体系(以图纸/地质条件为准):确定采用放坡喷锚或灌注桩排桩后,删除另一种体系的表述,并补充基坑开挖深度数值支撑危大分级判定。"}),b}let bE=/^#{2,4}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]*(?:危大工程(?:辨识)?(?:清单|识别)|危大(?:工程)?(?:及超危大)?(?:清单|识别|辨识))[^\n]*$/gmu;function bF(a){let b=[],c=function(a){let b=a.split(/\r?\n/u),c=[];for(let a=0;a<b.length;a+=1){if(!bE.test(b[a].trim()))continue;let d=[];for(let c=a+1;c<Math.min(b.length,a+30);c+=1){let a=b[c].trim();if(/^#{1,6}\s/u.test(a))break;let e=/^(?:\d+[.、.)]|[-*•])?\s*([^。;;|]{2,40})$/u.exec(a)?.[1];e&&d.push(e.replace(/^[\s\d.、()()【】-]+/u,"").replace(/[((【][^))】]*[))】]/gu,"").replace(/施工$/u,"").replace(/作业$/u,"").replace(/\s+/gu,"").trim())}d.length>=2&&c.push({title:b[a].trim(),items:[...new Set(d)]})}return c}(a);if(c.length<2)return b;for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a],f=c[d],g=e.items.filter(a=>!f.items.includes(a)),h=f.items.filter(a=>!e.items.includes(a));(0!==g.length||0!==h.length)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`危大工程辨识清单不一致:“${e.title.slice(0,30)}”(${e.items.length} 项)与“${f.title.slice(0,30)}”(${f.items.length} 项)存在差异:前者独有【${g.join("、")||"无"}】,后者独有【${h.join("、")||"无"}】`,suggestion:"全文危大工程辨识清单必须唯一且一致:合并两处清单,统一项名、数量与分级表述,避免评标专家以清单矛盾质疑辨识深度。"})}return b.slice(0,3)}let bG=[{name:"施工工地周边100%围挡",query:"施工工地周边设置围挡封闭管理"},{name:"物料堆放100%覆盖",query:"物料堆放覆盖防尘"},{name:"出入车辆100%冲洗",query:"出入车辆冲洗设施清洗出场"},{name:"施工现场地面100%硬化",query:"施工现场场地地面硬化"},{name:"拆迁工地100%湿法作业",query:"湿法作业洒水降尘"},{name:"渣土车辆100%密闭运输",query:"渣土车辆密闭运输防止遗撒"}];function bH(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=c.trim();if(!(!a||/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a)))for(let c of a.split(/(?<=[。!?!?;;])/u)){let a=c.trim();a.length>=8&&a.length<=120&&b.push(a)}}let c=[...new Set(b)];if(c.length<=400)return c;let d=Math.ceil(c.length/400);return c.filter((a,b)=>b%d==0).slice(0,400)}async function bI(a,b){if(0===b.length||0===a.length)return new Map;let c=await (0,M.Mv)(a.map(a=>a.text),b);return new Map(a.map(a=>[a.key,b.some(b=>c(a.text,b)>=.6)]))}async function bJ(a){let b=[];if(!/扬尘|环保|文明施工|绿色施工/u.test(a))return b;let c=await bI(bG.map(a=>({key:a.name,text:a.query})),bH(a)),d=bG.filter(a=>!c.get(a.name)).map(a=>a.name);return 0===d.length||b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`“扬尘治理六个百分百”未逐项落实:缺少【${d.join("、")}】(${bG.length-d.length}/${bG.length} 项命中)`,suggestion:"按检查规范第七部分要求逐条表述六项措施:工地周边100%围挡、物料堆放100%覆盖、出入车辆100%冲洗、施工现场地面100%硬化、拆迁工地100%湿法作业、渣土车辆100%密闭运输。"}),b}let bK=/建设地点|工程地点|项目地点|实施地点|服务地点|交付地点|建设地址/u,bL=["安徽","合肥","芜湖","蚌埠","淮南","马鞍山","淮北","铜陵","安庆","黄山","滁州","阜阳","宿州","六安","亳州","池州","宣城"];async function bM(a,b){let c=[],d=b.project.some(a=>bK.test(`${a.fieldName||""}${a.key||""}`)&&bL.some(b=>(0,z.lG)(a.value).includes(b))),e=[];if(d&&(e.push({key:"award",text:"争创省市级优质工程奖、安全文明标准化工地"}),e.push({key:"greenQuant",text:"非传统水源利用率、废弃物回收率等绿色施工量化指标"})),e.push({key:"workInjury",text:"按规定为作业人员办理工伤保险"}),0===e.length)return c;let f=await bI(e,bH(a));return d&&(f.get("award")||c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:"属地创优目标缺失:正文未提及省市级优质工程/文明标准化工地等创优目标(安徽省属地适配项)",suggestion:"在质量目标或创优规划小节补写与项目实际规模相符的创优目标表述;奖项名称必须以评分项要求提取结果(招标文件原文)为准逐字落位,禁止自行编造或替换为其他奖项名称。"}),/四节一环保|绿色施工|节水|节材|节能/u.test(a)&&!f.get("greenQuant")&&c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:"四节一环保量化指标缺失:非传统水源利用率/漏损率/土方平衡率/废弃物回收率等均未量化(附录八基准对照项)",suggestion:"在绿色施工章节补充量化指标(非传统水源利用率、管网漏损率、土方平衡率、可回收废弃物回收率等)与模板周转次数,数值参考行业通用水平与附录八基准,不得编造极端值。"})),/劳务|农民工|工资/u.test(a)&&!f.get("workInjury")&&c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:"工伤保险表述缺失:正文有劳务/农民工管理内容但未提及工伤保险缴纳(政策合规漏项)",suggestion:"在劳务管理/农民工工资保障小节补充“按规定为作业人员办理工伤保险”表述。"}),c}let bN=RegExp(`(?:^|
|
|
42
42
|
)(?:#{1,6}\\s+[^
|
|
43
43
|
]*
|
|
44
44
|
+)?([^
|
|
@@ -97,11 +97,11 @@ ${m.slice(0,2e3)}
|
|
|
97
97
|
修复后表格原文(逐格检查仍然为空的单元格,立即填入具体值):
|
|
98
98
|
${b.slice(0,2e3)}
|
|
99
99
|
空单元格所在列若正文已有对应内容(如“验收标准”列),从本节正文对应段落逐项摘录填入;正文没有的按专业惯例推算具体值;无法推算的删除该行并说明原因。
|
|
100
|
-
合计/小计/总计/累计行空单元格填“—”;表名占用表头第一格时必须移出表格。`,e=await Y(()=>(0,aQ.l8)({template:g,chapter:{id:i.id,title:i.title,content:q,evidence:i.evidence,missingFacts:i.missingFacts,sections:i.sections},issues:a.map(a=>a.message),promptTexts:c,requirement:$,forbidDrawingImages:!1,diagnostics:p,signal:Z}));e.content&&e.content!==q&&(q=e.content)}}(q=function(a,b){let c=d7(a,b);if(!c)return{content:a,removed:0};let d=d8(c.split(/\r?\n/u));return d.removed>0?{content:a.replace(c,d.lines.join("\n")),removed:d.removed}:{content:a,removed:0}}(q,d).content)!==i.content&&(aD[h]={...i,content:k?dq(q,k):q},a+=1);let r=(0,x.NS)(q).some(a=>"error"===a.level&&/空单元格|占位符单元格|列数不一致/u.test(a.message)&&a.message.includes(d)),s=(0,aP.X5)({type:"llm_review",roleId:`agent-table-fix-${i.id}-${b}`,status:r?"failed":"success",message:r?`表格数据修复未生效:${i.title}`:`表格数据修复完成:${i.title}`,details:[c.message]},{subtitle:"表格数据修复"});(0,aP.fx)(j,s),(0,aP.fx)(aV,s),X(aD,j)}a>0&&(aE=dr(d6((0,v.bR)((0,v.kT)((0,v.K7)(d4(dk(d9({template:g,requirement:$,projectRoot:A,projectId:B,facts:af,structuredFacts:ak,factsModel:ao,chapters:aD,sources:ar,missingItems:F,validation:aq,validationIssues:at,executionStages:aC,assets:aA,promptDocumentRules:t}),ak),l)))),g)),await aY())}let a_=/封面|页眉|页脚|附图|图片引用|CAD图|示意图|插图/u,a0=await cr(aE,{signal:Z,diagnostics:p});if(a0.length>0){let a=new Set,b=a0.map(a=>cs(a)).filter(b=>{let c=[...new Set([...b.message.matchAll(/[\d,]+(?:\.\d+)?/gu)].map(a=>a[0].replace(/[,,]/gu,"")).filter(a=>a.length>=2))].sort((a,b)=>Number(a)-Number(b)).join("|");return!(!c||a.has(c))&&(a.add(c),!0)});at=[...at,...b]}let a1=/属地创优目标缺失|四节一环保量化指标缺失|工伤保险表述缺失/u,a2=(()=>{let a=at.filter(a=>"error"===a.level&&!a_.test(a.message)&&!/表格|标题重复|目录/u.test(a.message));return[...a.filter(a=>!a1.test(a.message)).slice(0,8),...a.filter(a=>a1.test(a.message))]})(),a4=a=>(a.content||"").replace(/[\s,,]/gu,""),a5=[{code:"source-phrase",match:/资料来源罗列话术/u},{code:"internal-term",match:/后台内部术语|后台内部话术/u},{code:"overview-recap",match:/概况段跨章复述/u},{code:"fact-verification",match:/生成后事实反查失败/u},{code:"major-content-dirty",match:/主要施工内容存在脏事实或标题污染/u},{code:"major-content-flow",match:/主要施工内容存在.*流程污染/u},{code:"major-content-method",match:/主要施工内容存在.*施工方法过弱/u},{code:"major-content-dup",match:/主要施工内容存在.*重复专业工程小节/u},{code:"duplicate-subsection",match:/同名小节重复/u},{code:"major-content-structure",match:/主要施工内容/u},{code:"requirement-unresponded",match:/评分项要求未响应/u},{code:"self-undermining",match:/自伤表述候选/u},{code:"fabricated-date",match:/正文编造开工日期/u},{code:"field-value-mismatch",match:/字段-数值错配/u},{code:"area-arithmetic",match:/面积算术矛盾/u},{code:"labor-contradiction",match:/劳动力数据矛盾/u},{code:"data-consistency",match:/数据一致性矛盾/u},{code:"support-conflict",match:/基坑支护方案前后不一致/u},{code:"dangerous-list-inconsistent",match:/危大工程辨识清单不一致/u},{code:"six-hundred-percent",match:/扬尘治理六个百分百/u},{code:"local-award",match:/本地创优目标缺失/u},{code:"green-quant",match:/四节一环保量化指标缺失/u},{code:"work-injury",match:/工伤保险表述缺失/u},{code:"param-conflict",match:/同一参数概念出现多口径数值冲突/u},{code:"system-zero-coverage",match:/专业工程系统在正文零覆盖/u},{code:"dangerous-list-missing",match:/危大工程辨识清单遗漏|未编制危大工程辨识清单/u},{code:"repeated-word",match:/正文存在叠词重复表述/u},{code:"commercial-data",match:/正文出现商务条款数据/u},{code:"boq-placement",match:/清单项落位不足/u},{code:"precise-param",match:/可靠精确参数使用不足/u},{code:"stage-phrasing",match:/施工阶段划分口径不统一/u},{code:"emergency-depth",match:/应急预案小节深度不足/u}],a6=a=>a5.find(b=>b.match.test(a))?.code||"",a7=a=>({"source-phrase":"【资料来源罗列话术定向修复】\n该章节正文包含“根据/依据招标文件、工程量清单、施工图纸…”等资料来源罗列句,正式交付文档不得出现。\n请以局部 patch 方式删除罗列表述:直接陈述项目事实、施工内容与控制措施;句中携带的实质数据(工期、规模、金额、编号等)必须保留,改为直接陈述方式重写,不得丢失事实。只修改相关句子,不得改动其他内容。","internal-term":"【后台内部术语定向修复】\n该章节正文包含后台内部术语或内部话术(生成系统概念,缺陷描述中已列命中句子),正式交付文档禁止出现。\n请以局部 patch 方式将每一处该表述按上下文语义改写为面向评标人的正式表述(如“按工作包逐项说明”→“按专业工程逐项说明”,“根据已确认资料”→“根据现场实测与图纸要求”),保持段落结构与事实数据不变,不得新增或删除小节。","overview-recap":"【概况段跨章复述定向修复】\n该章节正文包含以“本项目为”开头整段复述项目概况的内容(与概况章正文重复),正式交付文档不得跨章复述概况。\n请以局部 patch 方式删除这些复述句:整段概况陈述必须删除;句中如含本章必需的事实数据,改写为局部引用(一句话内点到即止)。只修改复述句,不得改动其他内容。","fact-verification":"【总量口径数字定向修复】\n该章节正文出现资料事实主表中未找到的总量口径数字。\n请以局部 patch 方式逐项核对:主表已确认的口径必须一字不改引用;无法在主表中反查到的数字一律删除或改为定性表述(如“按计划配置”“满足规范要求”),禁止编造具体数值。只修改相关数字所在句子。","major-content-dirty":"【主要施工内容污染清理】\n该章节“主要施工内容”小节混入了项目概况复述句(本项目为…/总建筑面积…/保留现状…等)、嵌入的正文标题或伪标题。\n请以局部 patch 方式逐段清理:删除概况复述句与“未尽事宜”类说明;本小节只保留各专业工程的“施工概况:”“施工流程:”“施工方法:”正式正文;概况数据确需引用时只写与专业工程直接相关的具体数字,不复述完整概况段。只修改污染段落,不得删除已有事实数据。","major-content-flow":"【专业工程流程污染清理】\n该章节“主要施工内容”小节的“施工流程”混入了项目概况、总建筑面积、招标范围、未尽事宜等说明性事实。\n请以局部 patch 方式重写被污染的“施工流程:”段:只保留纯工序链(每个专业工程至少 4 个环节,工序顺序表达形式由模型自然选择:顺序词叙述、编号步骤、有序/无序列表或箭头链均可),将混入的概况说明删除或移至“施工概况”段。","major-content-method":"【专业工程施工方法强化】\n该章节部分专业工程的“施工方法”只有工程名称或范围罗列,缺少实质工艺。\n请以局部 patch 方式强化对应“施工方法:”段:写入资料已确认的工程量、材料规格、检测、调试、验收或记录要求,至少 4 个带单位工艺参数;资料未明确的参数不得编造。","major-content-dup":"【专业工程重复小节合并】\n该章节“主要施工内容”存在同名或近似专业工程小节重复铺陈。\n请以局部 patch 方式合并:同一专业工程只保留一个小节,将重复小节的独有内容并入保留小节后删除冗余小节(含其标题),保留小节仍须含“施工概况:”“施工流程:”“施工方法:”三标签。","duplicate-subsection":"【同名小节重复合并】\n该章节存在同名 H4 小节重复出现(缺陷描述已列重复小节名与次数),目录重复堆叠属评标硬扣分点。\n请以局部 patch 方式修复:同一主题只保留一个小节——将重复小节中的独有内容合并进保留小节(含正文与表格),删除冗余小节的标题与重复内容;若两小节主题确实不同,则将后者标题重命名为可区分的具体主题(禁止只加“一/二”序号敷衍)。合并后全文不得出现两个同名标题。","major-content-structure":"【主要施工内容结构定向修复】\n该章节的主要施工内容小节结构不达标。\n请以局部 patch 方式修复:①将“项目主要施工内容”写成三级标题(### 项目主要施工内容),内部专业工程写成四级标题(#### 专业工程名称);②同一专业工程只保留一个小节,重复小节的独有内容合并后删除冗余小节;③每个专业工程小节必须含“施工概况:”“施工流程:”“施工方法:”三个标签,施工流程至少有 1 处 4 个环节以上的工序顺序表达(形式由模型自然选择:顺序词叙述、编号步骤、有序/无序列表或箭头链均可),施工方法至少 4 个带单位工艺参数。不得删除已有的事实数据。","requirement-unresponded":"【评分项要求定向补写】\n招标文件明确要求该评分项必须显性响应,当前正文零命中,零响应即评标失分。\n请以局部 patch 方式在该章节合适位置补写一段响应文本:逐字写明该要求原文(含核心词),并配套本项目落实措施与保证体系(组织、技术、检查、验收闭环);不新增小节、不改动其他内容。","self-undermining":"【自伤表述定向改写】\n该章节正文包含暴露投标短板的表述,正式投标文件不得主动示弱。\n请以局部 patch 方式将该句改写为正向落实表述(如“按施工图绿色建筑专篇编制专项方案,逐项落实评分项并跟踪验收”);若该表述属现场条件类合理风险描述(地质/管线尚不明确),保留但必须补充勘查计划与应对措施。只修改相关句子。","fabricated-date":"【编造开工日期定向修复】\n该章节正文出现招标资料未提供、且违反“以开工令时间为准”条款的具体日历日期。\n请以局部 patch 方式删除该具体日期,统一改写为“以开工令时间为准”;如为进度计划节点,必须标注为计划推算节点并保持与总工期一致。只修改相关句子。","field-value-mismatch":"【字段数值错配定向修复】\n该章节正文将总占地面积误作建筑面积(或其他相近槽位混淆)。\n请以局部 patch 方式按绑定资料口径修正该数值并保持字段标签正确:总占地面积与建筑面积必须分开表述,不得互换数值。只修改相关句子。","area-arithmetic":"【面积算术一致性定向修复】\n该章节正文同一语句内地上+地下面积之和不等于单体建筑面积。\n请以局部 patch 方式按绑定资料口径统一三者数值,使地上+地下=总/单体面积,删除错误数值表述。只修改相关句子。","labor-contradiction":"【劳动力口径定向修复】\n该章节正文“高峰期 X 人”与分阶段投入明细表峰值矛盾(缺陷描述中的数值对即矛盾数字)。\n请以局部 patch 方式以分阶段明细表为准统一劳动力峰值口径:正文峰值表述与表格数据必须一致,删除矛盾数字或调整表格。只修改相关句子。","data-consistency":"【数据一致性矛盾定向修复】\n该章节正文存在数据口径矛盾(缺陷描述中的原文 A 与原文 B 为矛盾数值对,必须统一)。\n请以局部 patch 方式统一口径:以绑定资料(图纸/工程量清单/招标文件)为准选定唯一数值,将矛盾数值对中的错误表述删除或修正为一致值;资料未明确的改为定性表述(如“按规范要求取值”),禁止编造。只修改相关数值所在句子。","support-conflict":"【支护体系一致性定向修复】\n该章节正文放坡喷锚类与灌注桩排桩类两套支护体系并存。\n请以局部 patch 方式统一为一种支护体系(以图纸/地质条件为准),删除另一种体系的表述,并补充基坑开挖深度数值支撑危大分级判定。只修改相关句子。","dangerous-list-inconsistent":"【危大清单一致性定向修复】\n该章节正文存在多处危大工程辨识清单且项名/数量不一致。\n请以局部 patch 方式将两处清单合并统一:项名、数量与分级表述唯一且一致,删除重复清单。只修改相关列表。","six-hundred-percent":"【六个百分百逐项补写】\n该章节正文的扬尘治理措施未逐项覆盖“六个百分百”全部六项。\n请以局部 patch 方式逐条补齐缺失项(工地周边100%围挡、物料堆放100%覆盖、出入车辆100%冲洗、施工现场地面100%硬化、拆迁工地100%湿法作业、渣土车辆100%密闭运输),每项一句落实措施。不新增小节。","local-award":"【属地创优目标补写】\n该章节正文未提及省市级优质工程/文明标准化工地等创优目标(安徽省属地适配项)。\n请以局部 patch 方式在质量目标或创优规划位置补写与项目实际规模相符的创优目标表述;奖项名称必须以评分项要求提取结果(招标文件原文)为准逐字落位,禁止自行编造或替换为其他奖项名称。只修改目标表述相关句子。","green-quant":"【四节一环保量化指标补写】\n该章节绿色施工内容无任何量化指标(非传统水源利用率/漏损率/土方平衡率/废弃物回收率等)。\n请以局部 patch 方式补充量化指标与模板周转次数:数值参考行业通用水平与附录八基准(如可回收废弃物回收率≥80%、模板周转≥8次),不得编造极端值;每个指标配一句落实措施。只修改绿色施工相关句子。","work-injury":"【工伤保险表述补写】\n该章节正文有劳务/农民工管理内容但未提及工伤保险缴纳(政策合规关键词漏项)。\n请以局部 patch 方式在劳务管理/农民工工资保障位置补充“按规定为作业人员办理工伤保险”表述。只修改劳务管理相关句子。","param-conflict":"【参数口径统一定向修复】\n该章节正文同一参数概念出现多口径数值(详见缺陷描述中的数值原文),自相矛盾即评审硬伤。\n请以局部 patch 方式统一口径:以绑定资料(图纸/工程量清单/规范)为准选定唯一数值,删除其余矛盾表述;资料未明确的参数改为定性表述(如“按规范要求取值”),禁止编造。只修改相关数值所在句子。","system-zero-coverage":"【专业工程系统零覆盖补写】\n该章节大纲涉及某专业工程系统(详见缺陷描述中的系统名),但正文对该系统零覆盖,零覆盖即评标失分。\n请以局部 patch 方式在该章节合适位置补写该系统施工方案正文:含施工概况(工程量与作业条件)、施工流程(不少于 4 个环节的工序顺序表达,形式由模型自然选择:顺序词叙述、编号步骤、有序/无序列表或箭头链均可)、施工方法(至少 4 个带单位工艺参数,参数必须来自绑定资料,不得编造)。不得删除已有内容。","dangerous-list-missing":"【危大工程辨识清单补全】\n正文已出现危大工程适用前提(基坑深度/脚手架高度/起重设备等),但辨识清单遗漏适用项或全文未编制辨识清单,遗漏即合规硬伤。\n请以局部 patch 方式按建办质〔2018〕31号补全辨识:将遗漏项写入危大工程辨识清单并标注分级,超过一定规模的专项施工方案注明专家论证要求;清单项名与全文其他清单保持唯一一致。只修改清单相关段落。","repeated-word":"【叠词重复表述定向修复】\n该章节正文存在同一双字词紧邻重复(如“执行执行”“进行进行”)。\n请以局部 patch 方式删除紧邻重复字词,保持语句完整通顺;其余内容与事实数据不得改动。","commercial-data":"【商务条款数据定向清理】\n该章节正文出现商务条款数据(暂列金额/暂估价/综合单价/税率等),施组正文禁止出现商务数据。\n请以局部 patch 方式删除含商务数据的句子:句中的商务数字(金额/单价/税率)一律删除,不得改写为其他商务表述;如删除后语义不完整,改写为定性表述(如“按合同约定执行”)。只修改相关句子。","boq-placement":"【清单项落位定向补写】\n该章节对应专业工程的工程量清单项在正文零落位或落位率不足,零落位即评审失分。\n请以局部 patch 方式在“主要施工内容”小节按专业工程分组补写未落位清单项(缺陷描述中已列明细,最多 30 项,其余同类项按已列名称分组归并):每条写“施工概况:”工程名称+工程量+作业条件;“施工流程:”不少于 4 个环节的工序顺序表达(形式由模型自然选择:顺序词叙述、编号步骤、有序/无序列表或箭头链均可);“施工方法:”至少 4 个带单位工艺参数。清单项名称必须逐字引用缺陷描述中的原文(不得改写为近似词),参数必须来自缺陷描述或绑定资料,禁止编造。不新增小节标题。","precise-param":"【关键参数落位定向补写】\n该章节正文缺少资料中的关键工程参数(工期/面积/强度等级/材料规格/规范编号,缺陷描述中已列缺失参数)。\n请以局部 patch 方式将缺失的关键参数自然补入相关句子:参数值必须与资料一致,不得编造;补写后保持原句结构不变。只修改相关句子。","stage-phrasing":"【阶段口径统一定向修复】\n该章节正文存在多种互异的施工阶段划分口径(详见缺陷描述中的划分句原文),口径互异即自相矛盾。\n请以局部 patch 方式统一口径:以总进度计划/施工部署章节的阶段划分为唯一口径,其余划分句逐字对齐或删除;划分句保留必要的阶段名称与工序对应关系,不得丢失事实。只修改相关句子。","emergency-depth":"【应急预案小节补强】\n该章节应急预案小节未达到可落地深度(详见缺陷描述:缺字数或缺三要素之一)。\n请以局部 patch 方式补写缺失要素:应急组织体系(领导小组/抢险队与职责)、应急处置程序与演练安排(含响应分级与处置流程)、应急物资保障(清单与配置数量);总字数不少于 300 字,内容必须绑定本项目风险特征。只补写该小节缺失要素,不得删除已有内容。"})[a6(a)]||"【交付阻断缺陷定向修复】\n该章节正文存在交付阻断级缺陷,详见缺陷描述。\n请以局部 patch 方式修复:结合缺陷描述定位相关文本,删除错误内容或按专业规范改写,保持其余内容与事实数据不变。只修改相关句子。",a8=a=>{let b=/“([^”]+)”/u.exec(a)?.[1]?.replace(/\s+/gu,"")||"";switch(a6(a)){case"source-phrase":return aD.findIndex(a=>v.kt.test(a.content||""));case"internal-term":{let b=/“([^”]{2,})/u.exec(a)?.[1]?.replace(/\s+/gu,"")||"";if(b){let a=aD.findIndex(a=>a4(a).includes(b.slice(0,12)));if(a>=0)return a}return aD.findIndex(a=>(a.content||"").includes("工作包"))}case"overview-recap":{let b=/“([^”]{4,})/u.exec(a)?.[1]?.replace(/\s+/gu,"")||"";if(b){let a=aD.findIndex(a=>a4(a).includes(b.slice(0,16)));if(a>=0)return a}return aD.findIndex(a=>!/工程概况|项目概况|基本信息/u.test(a.title)&&/本项目为/u.test(a.content||""))}case"fact-verification":{let b=(a.split("数字")[1]||"").trim();return b?aD.findIndex(a=>b.split(/[、,,\s]+/u).some(b=>b&&(a.content||"").includes(b))):-1}case"major-content-structure":return aD.findIndex(a=>/项目主要施工内容|主要施工内容/u.test(`${a.title} ${(a.sections||[]).join(" ")}`)||/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目)?主要施工\s*内容/gmu.test(a.content||""));case"requirement-unresponded":{let b=(/核心词:([^))]*)/u.exec(a)?.[1]||"").split(/[、/,,/\s]+/u).filter(a=>a.length>=2),c=aD.findIndex(a=>b.some(b=>a4(a).includes(b)));if(c>=0)return c;let d=aD.findIndex(a=>/质量目标|创优|质量保证|绿色施工|文明施工/u.test(a.title));return d>=0?d:0}case"self-undermining":return b?aD.findIndex(a=>a4(a).includes(b.slice(0,12))):-1;case"fabricated-date":return b?aD.findIndex(a=>a4(a).includes(b)):-1;case"field-value-mismatch":case"area-arithmetic":{let b=(a.match(/[\d,]+(?:\.\d+)?/gu)||[]).map(a=>a.replace(/[,,]/gu,"")).filter(a=>a.length>=3);return aD.findIndex(a=>b.some(b=>a4(a).includes(b)))}case"data-consistency":{let b=(a.match(/[\d,]+(?:\.\d+)?/gu)||[]).map(a=>a.replace(/[,,]/gu,"")).filter(a=>a.length>=3);return aD.findIndex(a=>b.some(b=>a4(a).includes(b)))}case"labor-contradiction":return aD.findIndex(a=>/高峰/u.test(a.content||""));case"support-conflict":return aD.findIndex(a=>/放坡|喷锚|土钉|灌注桩|排桩|基坑支护/u.test(a.content||""));case"dangerous-list-inconsistent":return aD.findIndex(a=>/危大/u.test(`${a.title} ${a.content||""}`));case"six-hundred-percent":return aD.findIndex(a=>/扬尘|环保|文明施工|绿色施工/u.test(`${a.title} ${a.content||""}`));case"local-award":{let a=aD.findIndex(a=>/质量|创优|目标/u.test(a.title));return a>=0?a:0}case"green-quant":{let a=aD.findIndex(a=>/绿色|环保|节能|四节/u.test(`${a.title} ${a.content||""}`));return a>=0?a:0}case"work-injury":{let a=aD.findIndex(a=>/劳务|农民工|工资|安全/u.test(`${a.title} ${a.content||""}`));return a>=0?a:0}case"param-conflict":{let b=(a.match(/[\d]+(?:\.\d+)?\s*(?:mm|cm|m|米|MPa|kN|kV|kW|℃|°C|元|万元|人|天|日|个|层|樘|处|套|台|t|吨)/gu)||[]).map(a=>a.replace(/\s+/gu,""));return aD.findIndex(a=>b.some(b=>a4(a).includes(b)))}case"system-zero-coverage":{let b=(a.split(":")[1]||"").split(/[、,,]/u).map(a=>a.trim()).filter(Boolean);return aD.findIndex(a=>b.some(b=>b&&a.title.includes(b)))}case"dangerous-list-missing":return aD.findIndex(a=>/危大|基坑|脚手架|起重|吊篮|拆除/u.test(`${a.title} ${a.content||""}`));case"repeated-word":{let b=[...a.matchAll(/“([^”]{2,})”/gu)].map(a=>a[1]);return aD.findIndex(a=>b.some(b=>a4(a).includes(b)))}case"commercial-data":{let b=(a.split(":")[1]||"").split(/[、,,]/u).map(a=>a.trim()).filter(Boolean);return aD.findIndex(a=>b.some(b=>b&&(a.content||"").includes(b)))}case"boq-placement":return aD.findIndex(a=>/项目主要施工内容|主要施工内容/u.test(`${a.title} ${(a.sections||[]).join(" ")}`)||/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目)?主要施工\s*内容/gmu.test(a.content||""));case"precise-param":{let b=(a.split("缺失如")[1]||"").split(/[、,,))]/u).map(a=>a.trim()).filter(a=>a.length>=3),c=aD.findIndex(a=>b.some(b=>a4(a).includes(b)));if(c>=0)return c;let d=aD.findIndex(a=>/工程概况|项目概况|基本信息/u.test(a.title));return d>=0?d:0}case"stage-phrasing":{let b=[...a.matchAll(/“([^”]{3,})”/gu)].map(a=>a[1]),c=aD.findIndex(a=>b.some(b=>a4(a).includes(b)));if(c>=0)return c;let d=aD.findIndex(a=>/进度|部署|工期/u.test(a.title));return d>=0?d:0}case"emergency-depth":return aD.findIndex(a=>/应急|安全/u.test(`${a.title} ${a.content||""}`));default:return -1}},a9=()=>dr(d6((0,v.bR)((0,v.kT)((0,v.K7)(d4(dk(d9({template:g,requirement:$,projectRoot:A,projectId:B,facts:af,structuredFacts:ak,factsModel:ao,chapters:aD,sources:ar,missingItems:F,validation:aq,validationIssues:at,executionStages:aC,assets:aA,promptDocumentRules:t}),ak),l)))),g));if(a2.length>0){let a=0,b=await (async()=>{let a=aD.find(a=>/工程概况|项目概况|基本信息/u.test(a.title))?.content;if(!a)return;let b=bO(aE);if(0===b.sentences.length)return;let c=await (0,M.Mv)(b.sentences,[a]);return{overviewBody:a,similarity:c}})(),c=[{match:/资料来源罗列话术/u,label:"资料来源罗列话术",detect:async a=>{let b=[],c=!1;for(let d of a.split(/\r?\n/u)){let a=d.trim();if(/^#{2,4}\s+/u.test(a)){c=/编制依据|编制说明|法律法规|规范标准|标准依据/u.test(a);continue}!(c||/^\s*\|/u.test(a))&&v.kt.test(d)&&b.push(a.slice(0,32))}return b},delete:async a=>{let b=(0,v.K7)(a);return{content:b,removed:+(b!==a)}}},{match:/后台内部术语|后台内部话术/u,label:"后台内部术语",detect:async a=>(await b8(a)).map(a=>a.message)},{match:/同一参数概念出现多口径数值冲突/u,label:"参数概念口径冲突",detect:async a=>(await cc(a)).map(a=>a.message)},{match:/专业工程系统在正文零覆盖/u,label:"专业工程系统零覆盖",detect:async()=>ce(aD).map(a=>a.message)},{match:/危大工程辨识清单遗漏|未编制危大工程辨识清单/u,label:"危大工程辨识遗漏",detect:async a=>ch(a).map(a=>a.message)},{match:/主要施工内容/u,label:"主要施工内容缺陷",detect:async a=>(0,y.Av)(aD,a).map(a=>a.message)},{match:/评分项要求未响应/u,label:"评分项要求未响应",detect:async a=>{let b=av(Q).map(({item:a})=>au(a)),c=a.split(/\n/u).filter(a=>/^#{2,4}\s/u.test(a.trim())).map(a=>az(a)).filter(Boolean).slice(0,80),d=bH(a),e=await (0,M.Mv)(b,[...c,...d]);return(await ay(a,Q,{semanticSimilarity:e,bodyTexts:d})).filter(a=>/评分项要求未响应/u.test(a.message)).map(a=>a.message)}},{match:/自伤表述候选/u,label:"自伤表述候选",detect:async a=>(await bS(a)).map(a=>a.message)},{match:/正文编造开工日期/u,label:"正文编造开工日期",detect:async a=>bv(a,ao).map(a=>a.message),delete:async(a,b)=>{let c=(/“([^”]+)”/u.exec(b)?.[1]||"").replace(/\s+/gu,"");if(!c||c.length<6)return{content:a,removed:0};let d=a.split(/(?<=[。;;])\s*/u),e=0,f=d.filter(a=>!a.includes(c)||(e+=1,!1));return e>0?{content:f.join(""),removed:e}:{content:a,removed:0}}},{match:/字段-数值错配/u,label:"字段-数值错配",detect:async a=>bx(a,ao).map(a=>a.message)},{match:/面积算术矛盾/u,label:"面积算术矛盾",detect:async a=>bz(a).map(a=>a.message)},{match:/劳动力数据矛盾/u,label:"劳动力数据矛盾",detect:async a=>bB(a).map(a=>a.message)},{match:/数据一致性矛盾/u,label:"数据一致性矛盾",detect:async a=>(await cr(a,{signal:Z,diagnostics:p})).map(a=>cs(a).message)},{match:/基坑支护方案前后不一致/u,label:"基坑支护方案前后不一致",detect:async a=>(await bD(a)).map(a=>a.message)},{match:/危大工程辨识清单不一致/u,label:"危大工程辨识清单不一致",detect:async a=>bF(a).map(a=>a.message)},{match:/扬尘治理六个百分百/u,label:"扬尘治理六个百分百",detect:async a=>(await bJ(a)).map(a=>a.message)},{match:/本地创优目标缺失|四节一环保量化指标缺失|工伤保险表述缺失/u,label:"本地适配与政策合规关键词",detect:async a=>(await bM(a,ao)).map(a=>a.message)},{match:/生成后事实反查失败/u,label:"生成后事实反查失败",detect:async a=>(await (0,x.Z2)(a,ao,{scopeClassifier:V})).filter(a=>/生成后事实反查失败/u.test(a.message)).map(a=>a.message)},{match:/正文存在叠词重复表述/u,label:"叠词重复表述",detect:async a=>bU(a).map(a=>a.message),delete:async a=>{let b=bV(a);return{content:b,removed:+(b!==a)}}},{match:/正文出现商务条款数据/u,label:"商务条款数据",detect:async a=>bY(a).map(a=>a.message),delete:async a=>{let b=bZ(a);return{content:b,removed:+(b!==a)}}},{match:/清单项落位不足/u,label:"清单项落位不足",detect:async a=>(await (0,x.S2)(a,aD,ao)).map(a=>a.message)},{match:/可靠精确参数使用不足/u,label:"可靠精确参数使用不足",detect:async a=>(await (0,x.N1)(a,ao,aD)).filter(a=>/关键参数抽查/u.test(a.message)).map(a=>a.message)},{match:/施工阶段划分口径不统一/u,label:"施工阶段划分口径",detect:async a=>(await cm(a)).map(a=>a.message)},{match:/应急预案小节深度不足/u,label:"应急预案小节深度",detect:async a=>(await cp(a)).map(a=>a.message)},...b?[{match:/概况段跨章复述/u,label:"概况段跨章复述",detect:async a=>{let b=bO(a);return 0!==b.sentences.length&&b.overviewBody?bP(a,{semanticSimilarity:await (0,M.Mv)(b.sentences,[b.overviewBody])}).map(a=>a.message):[]},delete:async a=>{let c=a.split(/(?<=[。;;])\s*/u),d=c.filter(a=>/本项目为|本工程为|该项目为|该工程为/u.test(a));if(0===d.length)return{content:a,removed:0};let e=await (0,M.Mv)(d,[b.overviewBody]),f=0,g=c.filter(a=>!!(!/本项目为|本工程为|该项目为|该工程为/u.test(a)||.6>e(a,b.overviewBody))||(f+=1,!1));return f>0?{content:g.join(""),removed:f}:{content:a,removed:0}}}]:[]];for(let b of a2){let d,e=c.find(a=>a.match.test(b.message)),h=a8(b.message);if(h<0)continue;let i=aD[h],k=f.find(a=>a.id===i.id||a.title===i.title),l=(0,aP.X5)({type:"llm_review",roleId:`agent-blocker-fix-${i.id}`,status:"running",message:`正在修复交付阻断缺陷:${i.title}`,details:[b.message]},{subtitle:"交付阻断修复"});(0,aP.fx)(j,l),(0,aP.fx)(aV,l),X(aD,j);let m=[b.message],n="";for(d=0;d<2&&m.length>0;d+=1){let c=0===d?a7(b.message):["【修复未生效升级重试】",`上一轮修复后复检仍存在 ${m.length} 处同类缺陷(复检证据:${m.slice(0,2).join(";")}),说明上一轮修复方式与缺陷特征不匹配或 patch 未落位。`,"本轮必须更换修复方式:先精确定位问题句,再整体替换该句(不得只改个别词),替换后的文本必须完全符合下列要求:",a7(b.message)].join("\n"),f=await Y(()=>(0,aQ.l8)({template:g,chapter:{id:i.id,title:i.title,content:aD[h].content,evidence:i.evidence,missingFacts:i.missingFacts,sections:i.sections},issues:[b.message,b.suggestion||""],promptTexts:c,requirement:$,forbidDrawingImages:!1,diagnostics:p,signal:Z}));if(f.content&&f.content!==aD[h].content){if(aD[h]={...aD[h],content:k?dq(f.content,k):f.content},a+=f.appliedCount,aE=a9(),e?m=await e.detect(aE):f.appliedCount>0&&(m=[]),0===m.length)break}else{n="定位失败或输出无效(未产出 patch)";break}}if(m.length>0&&e?.delete){let c=await e.delete(aD[h].content,b.message);c.removed>0&&(aD[h]={...aD[h],content:c.content},a+=c.removed,aE=a9(),m=await e.detect(aE))}let o=0===m.length;o||n||(n="patch 已应用但未消除缺陷(修复方式不匹配)");let q=(0,aP.X5)({type:"llm_review",roleId:`agent-blocker-fix-${i.id}`,status:o?"success":"failed",message:o?`交付阻断缺陷修复完成:${i.title}(${d} 轮内复检通过)`:`交付阻断缺陷修复未生效:${i.title}(${d} 轮 LLM 修复${e?.delete?"+确定性删除":""}后复检仍有 ${m.length} 处;失败原因:${n})`,details:[b.message,...o?[]:[`复检残留:${m.slice(0,3).join(";")}`]]},{subtitle:"交付阻断修复"});(0,aP.fx)(j,q),(0,aP.fx)(aV,q),X(aD,j)}a>0&&(aE=a9(),await aY())}let ba=(0,x.KI)(aD,ao,N),bb=(0,x.Yb)(aE,ao,N).fixedCount>0;if(ba.fixedCount>0||bb){aE=dr(d6((0,v.bR)((0,v.kT)((0,v.K7)(d4(dk(d9({template:g,requirement:$,projectRoot:A,projectId:B,facts:af,structuredFacts:ak,factsModel:ao,chapters:aD,sources:ar,missingItems:F,validation:aq,validationIssues:at,executionStages:aC,assets:aA,promptDocumentRules:t}),ak),l)))),g));let a=(0,x.Yb)(aE,ao,N);a.fixedCount>0&&(aE=a.markdown),await aY();let b=ba.fixedCount+a.fixedCount,c=[...new Set([...ba.details,...a.details])];(0,aP.fx)(j,(0,aP.X5)({type:"validation",roleId:"deterministic-consistency-fix",status:"success",message:`跨章一致性数值定点修复:${b} 处(${c.slice(0,4).join("、")})`,details:c.slice(4)},{subtitle:"跨章一致性修复"}))}let bc=(0,v.K7)(aE);bc!==aE&&(aE=bc,await aY());let bd=await d3({template:g,chapters:aD,effectiveChapters:f,requirement:$,projectName:l?.projectName||"",tenderContext:function(a){let b=[],c=a.factsModel?.canonical,d=a=>a?.value;if(c){let a=a=>Array.isArray(a)?a.map(a=>a?.value).filter(Boolean):a?.value?[a.value]:[],e=[d(c.projectIdentity?.projectName)?`项目名称:${d(c.projectIdentity.projectName)}`:"",d(c.projectIdentity?.owner)?`招标人:${d(c.projectIdentity.owner)}`:"",d(c.projectIdentity?.location)?`建设地点:${d(c.projectIdentity.location)}`:"",...a(c.projectScope?.scale).map(a=>`建设规模:${a}`),...a(c.schedule?.duration).map(a=>`计划工期:${a}`),...a(c.quality?.target).map(a=>`质量目标:${a}`)].filter(Boolean);e.length&&b.push(`工程概况事实:
|
|
100
|
+
合计/小计/总计/累计行空单元格填“—”;表名占用表头第一格时必须移出表格。`,e=await Y(()=>(0,aQ.l8)({template:g,chapter:{id:i.id,title:i.title,content:q,evidence:i.evidence,missingFacts:i.missingFacts,sections:i.sections},issues:a.map(a=>a.message),promptTexts:c,requirement:$,forbidDrawingImages:!1,diagnostics:p,signal:Z}));e.content&&e.content!==q&&(q=e.content)}}(q=function(a,b){let c=d7(a,b);if(!c)return{content:a,removed:0};let d=d8(c.split(/\r?\n/u));return d.removed>0?{content:a.replace(c,d.lines.join("\n")),removed:d.removed}:{content:a,removed:0}}(q,d).content)!==i.content&&(aD[h]={...i,content:k?dq(q,k):q},a+=1);let r=(0,x.NS)(q).some(a=>"error"===a.level&&/空单元格|占位符单元格|列数不一致/u.test(a.message)&&a.message.includes(d)),s=(0,aP.X5)({type:"llm_review",roleId:`agent-table-fix-${i.id}-${b}`,status:r?"failed":"success",message:r?`表格数据修复未生效:${i.title}`:`表格数据修复完成:${i.title}`,details:[c.message]},{subtitle:"表格数据修复"});(0,aP.fx)(j,s),(0,aP.fx)(aV,s),X(aD,j)}a>0&&(aE=dr(d6((0,v.bR)((0,v.kT)((0,v.K7)(d4(dk(d9({template:g,requirement:$,projectRoot:A,projectId:B,facts:af,structuredFacts:ak,factsModel:ao,chapters:aD,sources:ar,missingItems:F,validation:aq,validationIssues:at,executionStages:aC,assets:aA,promptDocumentRules:t}),ak),l)))),g)),await aY())}let a_=/封面|页眉|页脚|附图|图片引用|CAD图|示意图|插图/u,a0=await cr(aE,{signal:Z,diagnostics:p});if(a0.length>0){let a=new Set,b=a0.map(a=>cs(a)).filter(b=>{let c=[...new Set([...b.message.matchAll(/[\d,]+(?:\.\d+)?/gu)].map(a=>a[0].replace(/[,,]/gu,"")).filter(a=>a.length>=2))].sort((a,b)=>Number(a)-Number(b)).join("|");return!(!c||a.has(c))&&(a.add(c),!0)});at=[...at,...b]}let a1=/属地创优目标缺失|四节一环保量化指标缺失|工伤保险表述缺失/u,a2=(()=>{let a=at.filter(a=>"error"===a.level&&!a_.test(a.message)&&!/表格|标题重复|目录/u.test(a.message));return[...a.filter(a=>!a1.test(a.message)).slice(0,8),...a.filter(a=>a1.test(a.message))]})(),a4=a=>(a.content||"").replace(/[\s,,]/gu,""),a5=[{code:"source-phrase",match:/资料来源罗列话术/u},{code:"internal-term",match:/后台内部术语|后台内部话术/u},{code:"overview-recap",match:/概况段跨章复述/u},{code:"fact-verification",match:/生成后事实反查失败/u},{code:"major-content-dirty",match:/主要施工内容存在脏事实或标题污染/u},{code:"major-content-flow",match:/主要施工内容存在.*流程污染/u},{code:"major-content-method",match:/主要施工内容存在.*施工方法过弱/u},{code:"major-content-dup",match:/主要施工内容存在.*重复专业工程小节/u},{code:"duplicate-subsection",match:/同名小节重复/u},{code:"major-content-structure",match:/主要施工内容/u},{code:"requirement-unresponded",match:/评分项要求未响应/u},{code:"self-undermining",match:/自伤表述候选/u},{code:"fabricated-date",match:/正文编造开工日期/u},{code:"field-value-mismatch",match:/字段-数值错配/u},{code:"area-arithmetic",match:/面积算术矛盾/u},{code:"labor-contradiction",match:/劳动力数据矛盾/u},{code:"data-consistency",match:/数据一致性矛盾/u},{code:"support-conflict",match:/基坑支护方案前后不一致/u},{code:"dangerous-list-inconsistent",match:/危大工程辨识清单不一致/u},{code:"six-hundred-percent",match:/扬尘治理六个百分百/u},{code:"local-award",match:/本地创优目标缺失/u},{code:"green-quant",match:/四节一环保量化指标缺失/u},{code:"work-injury",match:/工伤保险表述缺失/u},{code:"param-conflict",match:/同一参数概念出现多口径数值冲突/u},{code:"system-zero-coverage",match:/专业工程系统在正文零覆盖/u},{code:"dangerous-list-missing",match:/危大工程辨识清单遗漏|未编制危大工程辨识清单/u},{code:"repeated-word",match:/正文存在叠词重复表述/u},{code:"commercial-data",match:/正文出现商务条款数据/u},{code:"boq-placement",match:/清单项落位不足/u},{code:"precise-param",match:/可靠精确参数使用不足/u},{code:"stage-phrasing",match:/施工阶段划分口径不统一/u},{code:"emergency-depth",match:/应急预案小节深度不足/u}],a6=a=>a5.find(b=>b.match.test(a))?.code||"",a7=a=>({"source-phrase":"【资料来源罗列话术定向修复】\n该章节正文包含“根据/依据招标文件、工程量清单、施工图纸…”等资料来源罗列句,正式交付文档不得出现。\n请以局部 patch 方式删除罗列表述:直接陈述项目事实、施工内容与控制措施;句中携带的实质数据(工期、规模、金额、编号等)必须保留,改为直接陈述方式重写,不得丢失事实。只修改相关句子,不得改动其他内容。","internal-term":"【后台内部术语定向修复】\n该章节正文包含后台内部术语或内部话术(生成系统概念,缺陷描述中已列命中句子),正式交付文档禁止出现。\n请以局部 patch 方式将每一处该表述按上下文语义改写为面向评标人的正式表述(如“按工作包逐项说明”→“按专业工程逐项说明”,“根据已确认资料”→“根据现场实测与图纸要求”),保持段落结构与事实数据不变,不得新增或删除小节。","overview-recap":"【概况段跨章复述定向修复】\n该章节正文包含以“本项目为”开头整段复述项目概况的内容(与概况章正文重复),正式交付文档不得跨章复述概况。\n请以局部 patch 方式删除这些复述句:整段概况陈述必须删除;句中如含本章必需的事实数据,改写为局部引用(一句话内点到即止)。只修改复述句,不得改动其他内容。","fact-verification":"【总量口径数字定向修复】\n该章节正文出现资料事实主表中未找到的总量口径数字。\n请以局部 patch 方式逐项核对:主表已确认的口径必须一字不改引用;无法在主表中反查到的数字一律删除或改为定性表述(如“按计划配置”“满足规范要求”),禁止编造具体数值。只修改相关数字所在句子。","major-content-dirty":"【主要施工内容污染清理】\n该章节“主要施工内容”小节混入了项目概况复述句(本项目为…/总建筑面积…/保留现状…等)、嵌入的正文标题或伪标题。\n请以局部 patch 方式逐段清理:删除概况复述句与“未尽事宜”类说明;本小节只保留各专业工程的“施工概况:”“施工流程:”“施工方法:”正式正文;概况数据确需引用时只写与专业工程直接相关的具体数字,不复述完整概况段。只修改污染段落,不得删除已有事实数据。","major-content-flow":"【专业工程流程污染清理】\n该章节“主要施工内容”小节的“施工流程”混入了项目概况、总建筑面积、招标范围、未尽事宜等说明性事实。\n请以局部 patch 方式重写被污染的“施工流程:”段:只保留纯工序链(每个专业工程至少 4 个环节,工序顺序表达形式由模型自然选择:顺序词叙述、编号步骤、有序/无序列表或箭头链均可),将混入的概况说明删除或移至“施工概况”段。","major-content-method":"【专业工程施工方法强化】\n该章节部分专业工程的“施工方法”只有工程名称或范围罗列,缺少实质工艺。\n请以局部 patch 方式强化对应“施工方法:”段:写入资料已确认的工程量、材料规格、检测、调试、验收或记录要求,至少 4 个带单位工艺参数;资料未明确的参数不得编造。","major-content-dup":"【专业工程重复小节合并】\n该章节“主要施工内容”存在同名或近似专业工程小节重复铺陈。\n请以局部 patch 方式合并:同一专业工程只保留一个小节,将重复小节的独有内容并入保留小节后删除冗余小节(含其标题),保留小节仍须含“施工概况:”“施工流程:”“施工方法:”三标签。","duplicate-subsection":"【同名小节重复合并】\n该章节存在同名 H4 小节重复出现(缺陷描述已列重复小节名与次数),目录重复堆叠属评标硬扣分点。\n请以局部 patch 方式修复:同一主题只保留一个小节——将重复小节中的独有内容合并进保留小节(含正文与表格),删除冗余小节的标题与重复内容;若两小节主题确实不同,则将后者标题重命名为可区分的具体主题(禁止只加“一/二”序号敷衍)。合并后全文不得出现两个同名标题。","major-content-structure":"【主要施工内容结构定向修复】\n该章节的主要施工内容小节结构不达标。\n请以局部 patch 方式修复:①将“项目主要施工内容”写成三级标题(### 项目主要施工内容),内部专业工程写成四级标题(#### 专业工程名称);②同一专业工程只保留一个小节,重复小节的独有内容合并后删除冗余小节;③每个专业工程小节必须含“施工概况:”“施工流程:”“施工方法:”三个标签,施工流程至少有 1 处 4 个环节以上的工序顺序表达(形式由模型自然选择:顺序词叙述、编号步骤、有序/无序列表或箭头链均可),施工方法至少 4 个带单位工艺参数。不得删除已有的事实数据。","requirement-unresponded":"【评分项要求定向补写】\n招标文件明确要求该评分项必须显性响应,当前正文零命中,零响应即评标失分。\n请以局部 patch 方式在该章节合适位置补写一段响应文本:逐字写明该要求原文(含核心词),并配套本项目落实措施与保证体系(组织、技术、检查、验收闭环);不新增小节、不改动其他内容。","self-undermining":"【自伤表述定向改写】\n该章节正文包含暴露投标短板的表述,正式投标文件不得主动示弱。\n请以局部 patch 方式将该句改写为正向落实表述(如“按施工图绿色建筑专篇编制专项方案,逐项落实评分项并跟踪验收”);若该表述属现场条件类合理风险描述(地质/管线尚不明确),保留但必须补充勘查计划与应对措施。只修改相关句子。","fabricated-date":"【编造开工日期定向修复】\n该章节正文出现招标资料未提供、且违反“以开工令时间为准”条款的具体日历日期。\n请以局部 patch 方式删除该具体日期,统一改写为“以开工令时间为准”;如为进度计划节点,必须标注为计划推算节点并保持与总工期一致。只修改相关句子。","field-value-mismatch":"【字段数值错配定向修复】\n该章节正文将总占地面积误作建筑面积(或其他相近槽位混淆)。\n请以局部 patch 方式按绑定资料口径修正该数值并保持字段标签正确:总占地面积与建筑面积必须分开表述,不得互换数值。只修改相关句子。","area-arithmetic":"【面积算术一致性定向修复】\n该章节正文同一语句内地上+地下面积之和不等于单体建筑面积。\n请以局部 patch 方式按绑定资料口径统一三者数值,使地上+地下=总/单体面积,删除错误数值表述。只修改相关句子。","labor-contradiction":"【劳动力口径定向修复】\n该章节正文“高峰期 X 人”与分阶段投入明细表峰值矛盾(缺陷描述中的数值对即矛盾数字)。\n请以局部 patch 方式以分阶段明细表为准统一劳动力峰值口径:正文峰值表述与表格数据必须一致,删除矛盾数字或调整表格。只修改相关句子。","data-consistency":"【数据一致性矛盾定向修复】\n该章节正文存在数据口径矛盾(缺陷描述中的原文 A 与原文 B 为矛盾数值对,必须统一)。\n请以局部 patch 方式统一口径:以绑定资料(图纸/工程量清单/招标文件)为准选定唯一数值,将矛盾数值对中的错误表述删除或修正为一致值;资料未明确的改为定性表述(如“按规范要求取值”),禁止编造。只修改相关数值所在句子。","support-conflict":"【支护体系一致性定向修复】\n该章节正文放坡喷锚类与灌注桩排桩类两套支护体系并存。\n请以局部 patch 方式统一为一种支护体系(以图纸/地质条件为准),删除另一种体系的表述,并补充基坑开挖深度数值支撑危大分级判定。只修改相关句子。","dangerous-list-inconsistent":"【危大清单一致性定向修复】\n该章节正文存在多处危大工程辨识清单且项名/数量不一致。\n请以局部 patch 方式将两处清单合并统一:项名、数量与分级表述唯一且一致,删除重复清单。只修改相关列表。","six-hundred-percent":"【六个百分百逐项补写】\n该章节正文的扬尘治理措施未逐项覆盖“六个百分百”全部六项。\n请以局部 patch 方式逐条补齐缺失项(工地周边100%围挡、物料堆放100%覆盖、出入车辆100%冲洗、施工现场地面100%硬化、拆迁工地100%湿法作业、渣土车辆100%密闭运输),每项一句落实措施。不新增小节。","local-award":"【属地创优目标补写】\n该章节正文未提及省市级优质工程/文明标准化工地等创优目标(安徽省属地适配项)。\n请以局部 patch 方式在质量目标或创优规划位置补写与项目实际规模相符的创优目标表述;奖项名称必须以评分项要求提取结果(招标文件原文)为准逐字落位,禁止自行编造或替换为其他奖项名称。只修改目标表述相关句子。","green-quant":"【四节一环保量化指标补写】\n该章节绿色施工内容无任何量化指标(非传统水源利用率/漏损率/土方平衡率/废弃物回收率等)。\n请以局部 patch 方式补充量化指标与模板周转次数:数值参考行业通用水平与附录八基准(如可回收废弃物回收率≥80%、模板周转≥8次),不得编造极端值;每个指标配一句落实措施。只修改绿色施工相关句子。","work-injury":"【工伤保险表述补写】\n该章节正文有劳务/农民工管理内容但未提及工伤保险缴纳(政策合规关键词漏项)。\n请以局部 patch 方式在劳务管理/农民工工资保障位置补充“按规定为作业人员办理工伤保险”表述。只修改劳务管理相关句子。","param-conflict":"【参数口径统一定向修复】\n该章节正文同一参数概念出现多口径数值(详见缺陷描述中的数值原文),自相矛盾即评审硬伤。\n请以局部 patch 方式统一口径:以绑定资料(图纸/工程量清单/规范)为准选定唯一数值,删除其余矛盾表述;资料未明确的参数改为定性表述(如“按规范要求取值”),禁止编造。只修改相关数值所在句子。","system-zero-coverage":"【专业工程系统零覆盖补写】\n该章节大纲涉及某专业工程系统(详见缺陷描述中的系统名),但正文对该系统零覆盖,零覆盖即评标失分。\n请以局部 patch 方式在该章节合适位置补写该系统施工方案正文:含施工概况(工程量与作业条件)、施工流程(不少于 4 个环节的工序顺序表达,形式由模型自然选择:顺序词叙述、编号步骤、有序/无序列表或箭头链均可)、施工方法(至少 4 个带单位工艺参数,参数必须来自绑定资料,不得编造)。不得删除已有内容。","dangerous-list-missing":"【危大工程辨识清单补全】\n正文已出现危大工程适用前提(基坑深度/脚手架高度/起重设备等),但辨识清单遗漏适用项或全文未编制辨识清单,遗漏即合规硬伤。\n请以局部 patch 方式按建办质〔2018〕31号补全辨识:将遗漏项写入危大工程辨识清单并标注分级,超过一定规模的专项施工方案注明专家论证要求;清单项名与全文其他清单保持唯一一致。只修改清单相关段落。","repeated-word":"【叠词重复表述定向修复】\n该章节正文存在同一双字词紧邻重复(如“执行执行”“进行进行”)。\n请以局部 patch 方式删除紧邻重复字词,保持语句完整通顺;其余内容与事实数据不得改动。","commercial-data":"【商务条款数据定向清理】\n该章节正文出现商务条款数据(暂列金额/暂估价/综合单价/税率等),施组正文禁止出现商务数据。\n请以局部 patch 方式删除含商务数据的句子:句中的商务数字(金额/单价/税率)一律删除,不得改写为其他商务表述;如删除后语义不完整,改写为定性表述(如“按合同约定执行”)。只修改相关句子。","boq-placement":"【清单项落位定向补写】\n该章节对应专业工程的工程量清单项在正文零落位或落位率不足,零落位即评审失分。\n请以局部 patch 方式在“主要施工内容”小节按专业工程分组补写未落位清单项(缺陷描述中已列明细,最多 30 项,其余同类项按已列名称分组归并):每条写“施工概况:”工程名称+工程量+作业条件;“施工流程:”不少于 4 个环节的工序顺序表达(形式由模型自然选择:顺序词叙述、编号步骤、有序/无序列表或箭头链均可);“施工方法:”至少 4 个带单位工艺参数。清单项名称必须逐字引用缺陷描述中的原文(不得改写为近似词),参数必须来自缺陷描述或绑定资料,禁止编造。不新增小节标题。","precise-param":"【关键参数落位定向补写】\n该章节正文缺少资料中的关键工程参数(工期/面积/强度等级/材料规格/规范编号,缺陷描述中已列缺失参数)。\n请以局部 patch 方式将缺失的关键参数自然补入相关句子:参数值必须与资料一致,不得编造;补写后保持原句结构不变。只修改相关句子。","stage-phrasing":"【阶段口径统一定向修复】\n该章节正文存在多种互异的施工阶段划分口径(详见缺陷描述中的划分句原文),口径互异即自相矛盾。\n请以局部 patch 方式统一口径:以总进度计划/施工部署章节的阶段划分为唯一口径,其余划分句逐字对齐或删除;划分句保留必要的阶段名称与工序对应关系,不得丢失事实。只修改相关句子。","emergency-depth":"【应急预案小节补强】\n该章节应急预案小节未达到可落地深度(详见缺陷描述:缺字数或缺三要素之一)。\n请以局部 patch 方式补写缺失要素:应急组织体系(领导小组/抢险队与职责)、应急处置程序与演练安排(含响应分级与处置流程)、应急物资保障(清单与配置数量);总字数不少于 300 字,内容必须绑定本项目风险特征。只补写该小节缺失要素,不得删除已有内容。"})[a6(a)]||"【交付阻断缺陷定向修复】\n该章节正文存在交付阻断级缺陷,详见缺陷描述。\n请以局部 patch 方式修复:结合缺陷描述定位相关文本,删除错误内容或按专业规范改写,保持其余内容与事实数据不变。只修改相关句子。",a8=a=>{let b=/“([^”]+)”/u.exec(a)?.[1]?.replace(/\s+/gu,"")||"";switch(a6(a)){case"source-phrase":return aD.findIndex(a=>v.kt.test(a.content||""));case"internal-term":{let b=/“([^”]{2,})/u.exec(a)?.[1]?.replace(/\s+/gu,"")||"";if(b){let a=aD.findIndex(a=>a4(a).includes(b.slice(0,12)));if(a>=0)return a}return aD.findIndex(a=>(a.content||"").includes("工作包"))}case"overview-recap":{let b=/“([^”]{4,})/u.exec(a)?.[1]?.replace(/\s+/gu,"")||"";if(b){let a=aD.findIndex(a=>a4(a).includes(b.slice(0,16)));if(a>=0)return a}return aD.findIndex(a=>!/工程概况|项目概况|基本信息/u.test(a.title)&&/本项目为/u.test(a.content||""))}case"fact-verification":{let b=(a.split("数字")[1]||"").trim();return b?aD.findIndex(a=>b.split(/[、,,\s]+/u).some(b=>b&&(a.content||"").includes(b))):-1}case"major-content-structure":return aD.findIndex(a=>/项目主要施工内容|主要施工内容/u.test(`${a.title} ${(a.sections||[]).join(" ")}`)||/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目)?主要施工\s*内容/gmu.test(a.content||""));case"requirement-unresponded":{let b=(/核心词:([^))]*)/u.exec(a)?.[1]||"").split(/[、/,,/\s]+/u).filter(a=>a.length>=2),c=aD.findIndex(a=>b.some(b=>a4(a).includes(b)));if(c>=0)return c;let d=aD.findIndex(a=>/质量目标|创优|质量保证|绿色施工|文明施工/u.test(a.title));return d>=0?d:0}case"self-undermining":return b?aD.findIndex(a=>a4(a).includes(b.slice(0,12))):-1;case"fabricated-date":return b?aD.findIndex(a=>a4(a).includes(b)):-1;case"field-value-mismatch":case"area-arithmetic":{let b=(a.match(/[\d,]+(?:\.\d+)?/gu)||[]).map(a=>a.replace(/[,,]/gu,"")).filter(a=>a.length>=3);return aD.findIndex(a=>b.some(b=>a4(a).includes(b)))}case"data-consistency":{let b=(a.match(/[\d,]+(?:\.\d+)?/gu)||[]).map(a=>a.replace(/[,,]/gu,"")).filter(a=>a.length>=3);return aD.findIndex(a=>b.some(b=>a4(a).includes(b)))}case"labor-contradiction":return aD.findIndex(a=>/高峰/u.test(a.content||""));case"support-conflict":return aD.findIndex(a=>/放坡|喷锚|土钉|灌注桩|排桩|基坑支护/u.test(a.content||""));case"dangerous-list-inconsistent":return aD.findIndex(a=>/危大/u.test(`${a.title} ${a.content||""}`));case"six-hundred-percent":return aD.findIndex(a=>/扬尘|环保|文明施工|绿色施工/u.test(`${a.title} ${a.content||""}`));case"local-award":{let a=aD.findIndex(a=>/质量|创优|目标/u.test(a.title));return a>=0?a:0}case"green-quant":{let a=aD.findIndex(a=>/绿色|环保|节能|四节/u.test(`${a.title} ${a.content||""}`));return a>=0?a:0}case"work-injury":{let a=aD.findIndex(a=>/农民工工资|劳务管理|劳务实名|工资保障/u.test(a.content||""));if(a>=0)return a;return aD.findIndex(a=>/劳务|农民工|工资/u.test(`${a.title} ${a.content||""}`))}case"param-conflict":{let b=(a.match(/[\d]+(?:\.\d+)?\s*(?:mm|cm|m|米|MPa|kN|kV|kW|℃|°C|元|万元|人|天|日|个|层|樘|处|套|台|t|吨)/gu)||[]).map(a=>a.replace(/\s+/gu,""));return aD.findIndex(a=>b.some(b=>a4(a).includes(b)))}case"system-zero-coverage":{let b=(a.split(":")[1]||"").split(/[、,,]/u).map(a=>a.trim()).filter(Boolean);return aD.findIndex(a=>b.some(b=>b&&a.title.includes(b)))}case"dangerous-list-missing":return aD.findIndex(a=>/危大|基坑|脚手架|起重|吊篮|拆除/u.test(`${a.title} ${a.content||""}`));case"repeated-word":{let b=[...a.matchAll(/“([^”]{2,})”/gu)].map(a=>a[1]);return aD.findIndex(a=>b.some(b=>a4(a).includes(b)))}case"commercial-data":{let b=(a.split(":")[1]||"").split(/[、,,]/u).map(a=>a.trim()).filter(Boolean);return aD.findIndex(a=>b.some(b=>b&&(a.content||"").includes(b)))}case"boq-placement":return aD.findIndex(a=>/项目主要施工内容|主要施工内容/u.test(`${a.title} ${(a.sections||[]).join(" ")}`)||/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目)?主要施工\s*内容/gmu.test(a.content||""));case"precise-param":{let b=(a.split("缺失如")[1]||"").split(/[、,,))]/u).map(a=>a.trim()).filter(a=>a.length>=3),c=aD.findIndex(a=>b.some(b=>a4(a).includes(b)));if(c>=0)return c;let d=aD.findIndex(a=>/工程概况|项目概况|基本信息/u.test(a.title));return d>=0?d:0}case"stage-phrasing":{let b=[...a.matchAll(/“([^”]{3,})”/gu)].map(a=>a[1]),c=aD.findIndex(a=>b.some(b=>a4(a).includes(b)));if(c>=0)return c;let d=aD.findIndex(a=>/进度|部署|工期/u.test(a.title));return d>=0?d:0}case"emergency-depth":return aD.findIndex(a=>/应急|安全/u.test(`${a.title} ${a.content||""}`));default:return -1}},a9=()=>dr(d6((0,v.bR)((0,v.kT)((0,v.K7)(d4(dk(d9({template:g,requirement:$,projectRoot:A,projectId:B,facts:af,structuredFacts:ak,factsModel:ao,chapters:aD,sources:ar,missingItems:F,validation:aq,validationIssues:at,executionStages:aC,assets:aA,promptDocumentRules:t}),ak),l)))),g));if(a2.length>0){let a=0,b=await (async()=>{let a=aD.find(a=>/工程概况|项目概况|基本信息/u.test(a.title))?.content;if(!a)return;let b=bO(aE);if(0===b.sentences.length)return;let c=await (0,M.Mv)(b.sentences,[a]);return{overviewBody:a,similarity:c}})(),c=[{match:/资料来源罗列话术/u,label:"资料来源罗列话术",detect:async a=>{let b=[],c=!1;for(let d of a.split(/\r?\n/u)){let a=d.trim();if(/^#{2,4}\s+/u.test(a)){c=/编制依据|编制说明|法律法规|规范标准|标准依据/u.test(a);continue}!(c||/^\s*\|/u.test(a))&&v.kt.test(d)&&b.push(a.slice(0,32))}return b},delete:async a=>{let b=(0,v.K7)(a);return{content:b,removed:+(b!==a)}}},{match:/后台内部术语|后台内部话术/u,label:"后台内部术语",detect:async a=>(await b8(a)).map(a=>a.message)},{match:/同一参数概念出现多口径数值冲突/u,label:"参数概念口径冲突",detect:async a=>(await cc(a)).map(a=>a.message)},{match:/专业工程系统在正文零覆盖/u,label:"专业工程系统零覆盖",detect:async()=>ce(aD).map(a=>a.message)},{match:/危大工程辨识清单遗漏|未编制危大工程辨识清单/u,label:"危大工程辨识遗漏",detect:async a=>ch(a).map(a=>a.message)},{match:/主要施工内容/u,label:"主要施工内容缺陷",detect:async a=>(0,y.Av)(aD,a).map(a=>a.message)},{match:/评分项要求未响应/u,label:"评分项要求未响应",detect:async a=>{let b=av(Q).map(({item:a})=>au(a)),c=a.split(/\n/u).filter(a=>/^#{2,4}\s/u.test(a.trim())).map(a=>az(a)).filter(Boolean).slice(0,80),d=bH(a),e=await (0,M.Mv)(b,[...c,...d]);return(await ay(a,Q,{semanticSimilarity:e,bodyTexts:d})).filter(a=>/评分项要求未响应/u.test(a.message)).map(a=>a.message)}},{match:/自伤表述候选/u,label:"自伤表述候选",detect:async a=>(await bS(a)).map(a=>a.message)},{match:/正文编造开工日期/u,label:"正文编造开工日期",detect:async a=>bv(a,ao).map(a=>a.message),delete:async(a,b)=>{let c=(/“([^”]+)”/u.exec(b)?.[1]||"").replace(/\s+/gu,"");if(!c||c.length<6)return{content:a,removed:0};let d=a.split(/(?<=[。;;])\s*/u),e=0,f=d.filter(a=>!a.includes(c)||(e+=1,!1));return e>0?{content:f.join(""),removed:e}:{content:a,removed:0}}},{match:/字段-数值错配/u,label:"字段-数值错配",detect:async a=>bx(a,ao).map(a=>a.message)},{match:/面积算术矛盾/u,label:"面积算术矛盾",detect:async a=>bz(a).map(a=>a.message)},{match:/劳动力数据矛盾/u,label:"劳动力数据矛盾",detect:async a=>bB(a).map(a=>a.message)},{match:/数据一致性矛盾/u,label:"数据一致性矛盾",detect:async a=>(await cr(a,{signal:Z,diagnostics:p})).map(a=>cs(a).message)},{match:/基坑支护方案前后不一致/u,label:"基坑支护方案前后不一致",detect:async a=>(await bD(a)).map(a=>a.message)},{match:/危大工程辨识清单不一致/u,label:"危大工程辨识清单不一致",detect:async a=>bF(a).map(a=>a.message)},{match:/扬尘治理六个百分百/u,label:"扬尘治理六个百分百",detect:async a=>(await bJ(a)).map(a=>a.message)},{match:/本地创优目标缺失|四节一环保量化指标缺失|工伤保险表述缺失/u,label:"本地适配与政策合规关键词",detect:async a=>(await bM(a,ao)).map(a=>a.message)},{match:/生成后事实反查失败/u,label:"生成后事实反查失败",detect:async a=>(await (0,x.Z2)(a,ao,{scopeClassifier:V})).filter(a=>/生成后事实反查失败/u.test(a.message)).map(a=>a.message)},{match:/正文存在叠词重复表述/u,label:"叠词重复表述",detect:async a=>bU(a).map(a=>a.message),delete:async a=>{let b=bV(a);return{content:b,removed:+(b!==a)}}},{match:/正文出现商务条款数据/u,label:"商务条款数据",detect:async a=>bY(a).map(a=>a.message),delete:async a=>{let b=bZ(a);return{content:b,removed:+(b!==a)}}},{match:/清单项落位不足/u,label:"清单项落位不足",detect:async a=>(await (0,x.S2)(a,aD,ao)).map(a=>a.message)},{match:/可靠精确参数使用不足/u,label:"可靠精确参数使用不足",detect:async a=>(await (0,x.N1)(a,ao,aD)).filter(a=>/关键参数抽查/u.test(a.message)).map(a=>a.message)},{match:/施工阶段划分口径不统一/u,label:"施工阶段划分口径",detect:async a=>(await cm(a)).map(a=>a.message)},{match:/应急预案小节深度不足/u,label:"应急预案小节深度",detect:async a=>(await cp(a)).map(a=>a.message)},...b?[{match:/概况段跨章复述/u,label:"概况段跨章复述",detect:async a=>{let b=bO(a);return 0!==b.sentences.length&&b.overviewBody?bP(a,{semanticSimilarity:await (0,M.Mv)(b.sentences,[b.overviewBody])}).map(a=>a.message):[]},delete:async a=>{let c=a.split(/(?<=[。;;])\s*/u),d=c.filter(a=>/本项目为|本工程为|该项目为|该工程为/u.test(a));if(0===d.length)return{content:a,removed:0};let e=await (0,M.Mv)(d,[b.overviewBody]),f=0,g=c.filter(a=>!!(!/本项目为|本工程为|该项目为|该工程为/u.test(a)||.6>e(a,b.overviewBody))||(f+=1,!1));return f>0?{content:g.join(""),removed:f}:{content:a,removed:0}}}]:[]];for(let b of a2){let d,e=c.find(a=>a.match.test(b.message)),h=a8(b.message);if(h<0)continue;let i=aD[h],k=f.find(a=>a.id===i.id||a.title===i.title),l=(0,aP.X5)({type:"llm_review",roleId:`agent-blocker-fix-${i.id}`,status:"running",message:`正在修复交付阻断缺陷:${i.title}`,details:[b.message]},{subtitle:"交付阻断修复"});(0,aP.fx)(j,l),(0,aP.fx)(aV,l),X(aD,j);let m=[b.message],n="";for(d=0;d<2&&m.length>0;d+=1){let c=0===d?a7(b.message):["【修复未生效升级重试】",`上一轮修复后复检仍存在 ${m.length} 处同类缺陷(复检证据:${m.slice(0,2).join(";")}),说明上一轮修复方式与缺陷特征不匹配或 patch 未落位。`,"本轮必须更换修复方式:先精确定位问题句,再整体替换该句(不得只改个别词),替换后的文本必须完全符合下列要求:",a7(b.message)].join("\n"),f=await Y(()=>(0,aQ.l8)({template:g,chapter:{id:i.id,title:i.title,content:aD[h].content,evidence:i.evidence,missingFacts:i.missingFacts,sections:i.sections},issues:[b.message,b.suggestion||""],promptTexts:c,requirement:$,forbidDrawingImages:!1,diagnostics:p,signal:Z}));if(f.content&&f.content!==aD[h].content){if(aD[h]={...aD[h],content:k?dq(f.content,k):f.content},a+=f.appliedCount,aE=a9(),e?m=(await e.detect(aE)).filter(a=>a6(a)===a6(b.message)):f.appliedCount>0&&(m=[]),0===m.length)break}else{if(0===d)continue;n="定位失败或输出无效(未产出 patch)";break}}if(m.length>0&&e?.delete){let c=await e.delete(aD[h].content,b.message);c.removed>0&&(aD[h]={...aD[h],content:c.content},a+=c.removed,aE=a9(),m=(await e.detect(aE)).filter(a=>a6(a)===a6(b.message)))}let o=0===m.length;o||n||(n="patch 已应用但未消除缺陷(修复方式不匹配)");let q=(0,aP.X5)({type:"llm_review",roleId:`agent-blocker-fix-${i.id}`,status:o?"success":"failed",message:o?`交付阻断缺陷修复完成:${i.title}(${d} 轮内复检通过)`:`交付阻断缺陷修复未生效:${i.title}(${d} 轮 LLM 修复${e?.delete?"+确定性删除":""}后复检仍有 ${m.length} 处;失败原因:${n})`,details:[b.message,...o?[]:[`复检残留:${m.slice(0,3).join(";")}`]]},{subtitle:"交付阻断修复"});(0,aP.fx)(j,q),(0,aP.fx)(aV,q),X(aD,j)}a>0&&(aE=a9(),await aY())}let ba=(0,x.KI)(aD,ao,N),bb=(0,x.Yb)(aE,ao,N).fixedCount>0;if(ba.fixedCount>0||bb){aE=dr(d6((0,v.bR)((0,v.kT)((0,v.K7)(d4(dk(d9({template:g,requirement:$,projectRoot:A,projectId:B,facts:af,structuredFacts:ak,factsModel:ao,chapters:aD,sources:ar,missingItems:F,validation:aq,validationIssues:at,executionStages:aC,assets:aA,promptDocumentRules:t}),ak),l)))),g));let a=(0,x.Yb)(aE,ao,N);a.fixedCount>0&&(aE=a.markdown),await aY();let b=ba.fixedCount+a.fixedCount,c=[...new Set([...ba.details,...a.details])];(0,aP.fx)(j,(0,aP.X5)({type:"validation",roleId:"deterministic-consistency-fix",status:"success",message:`跨章一致性数值定点修复:${b} 处(${c.slice(0,4).join("、")})`,details:c.slice(4)},{subtitle:"跨章一致性修复"}))}let bc=(0,v.K7)(aE);bc!==aE&&(aE=bc,await aY());let bd=await d3({template:g,chapters:aD,effectiveChapters:f,requirement:$,projectName:l?.projectName||"",tenderContext:function(a){let b=[],c=a.factsModel?.canonical,d=a=>a?.value;if(c){let a=a=>Array.isArray(a)?a.map(a=>a?.value).filter(Boolean):a?.value?[a.value]:[],e=[d(c.projectIdentity?.projectName)?`项目名称:${d(c.projectIdentity.projectName)}`:"",d(c.projectIdentity?.owner)?`招标人:${d(c.projectIdentity.owner)}`:"",d(c.projectIdentity?.location)?`建设地点:${d(c.projectIdentity.location)}`:"",...a(c.projectScope?.scale).map(a=>`建设规模:${a}`),...a(c.schedule?.duration).map(a=>`计划工期:${a}`),...a(c.quality?.target).map(a=>`质量目标:${a}`)].filter(Boolean);e.length&&b.push(`工程概况事实:
|
|
101
101
|
${e.join("\n")}`)}let e=(a.evaluationCriteriaItems||[]).filter(Boolean);e.length&&b.push(`评标办法技术评审条目:
|
|
102
102
|
${e.map(a=>`- ${a}`).join("\n")}`);let f=a.tenderRequirements;if(f&&f.extracted){let a=[],c=(b,c)=>{for(let d of c||[])a.push(`${b}:${d.text}`)};c("创优目标",f.awardObjectives),c("特殊质量标准",f.specialQualityStandards),c("奖项条款",f.awardClauses),f.greenBuildingGrade&&a.push(`绿色建筑等级:${f.greenBuildingGrade.text}`),f.smartSiteGrade&&a.push(`智慧工地等级:${f.smartSiteGrade.text}`),f.assemblyRate&&a.push(`装配率要求:${f.assemblyRate.text}`),c("体系基准",f.systematicBenchmarks),c("禁止性约束",f.prohibitionNotes),f.dateFabricationProhibited&&a.push("禁编日期条款:正文不得自设具体开工/竣工日期"),a.length&&b.push(`招标文件评分项要求:
|
|
103
103
|
${a.map(a=>`- ${a}`).join("\n")}`)}let g=(a.factsModel?.bills||[]).slice(0,10).map(a=>`${a.fieldName||a.key} ${a.value}`.replace(/\s+/gu," ").trim()).filter(Boolean);return g.length&&b.push(`工程量清单特征摘要:
|
|
104
|
-
${g.map(a=>`- ${a}`).join("\n")}`),b.join("\n\n")}({factsModel:ao,evaluationCriteriaItems:P,tenderRequirements:Q}),diagnostics:p,signal:Z,heartbeat:Y,onStage:a=>{let b=(0,aP.X5)({type:"llm_review",roleId:"agent-qingtian-review",status:a.status,message:a.message,details:a.details},{subtitle:"全维度评审"});(0,aP.fx)(j,b),(0,aP.fx)(aV,b),X(aD,j)}});aX=bd.reviewed?bd.remainingIssues.map(a=>{let b="否决级"===a.riskLevel||"高风险"===a.riskLevel;return{level:b?"error":"warning",severity:b?"blocker":"warning",repairability:b?"llm_repairable":"not_repair_needed",category:"qingtian_review",owner:"llm",message:`[全维度评审\xb7${a.dimension}\xb7${a.riskLevel}]${a.location?`${a.location}:`:""}${a.description}${a.quote?`(原文:“${a.quote.slice(0,40)}”)`:""}`,suggestion:a.basis}}):[],bd.fixedCount>0?(aE=a9(),await aY()):aX.length>0&&await aY();let be=await (async()=>{let a=aD.find(a=>/工程概况|项目概况|基本信息/u.test(a.title))?.content;if(!a)return;let b=bO(aE);if(0===b.sentences.length)return;let c=await (0,M.Mv)(b.sentences,[a]);return{overviewBody:a,similarity:c}})(),bf=[...await bJ(aE),...await bM(aE,ao),...be?bP(aE,{semanticSimilarity:be.similarity}):[],...await b8(aE),...bv(aE,ao),...bx(aE,ao),...bz(aE),...bB(aE),...(await cr(aE,{signal:Z,diagnostics:p})).map(a=>cs(a)),...await bD(aE),...bF(aE),...bY(aE),...bU(aE)].filter(a=>"error"===a.level);if(bf.length>0){let a=0,b=[{code:"six-hundred-percent",detect:async a=>(await bJ(a)).map(a=>a.message)},{code:"local-award",detect:async a=>(await bM(a,ao)).filter(a=>/本地创优目标缺失/u.test(a.message)).map(a=>a.message)},{code:"green-quant",detect:async a=>(await bM(a,ao)).filter(a=>/四节一环保量化指标缺失/u.test(a.message)).map(a=>a.message)},{code:"work-injury",detect:async a=>(await bM(a,ao)).filter(a=>/工伤保险表述缺失/u.test(a.message)).map(a=>a.message)},{code:"overview-recap",detect:a=>be?bP(a,{semanticSimilarity:be.similarity}).map(a=>a.message):[]},{code:"internal-term",detect:async a=>(await b8(a)).map(a=>a.message)},{code:"fabricated-date",detect:a=>bv(a,ao).map(a=>a.message)},{code:"field-value-mismatch",detect:a=>bx(a,ao).map(a=>a.message)},{code:"area-arithmetic",detect:a=>bz(a).map(a=>a.message)},{code:"labor-contradiction",detect:a=>bB(a).map(a=>a.message)},{code:"data-consistency",detect:async a=>(await cr(a,{signal:Z,diagnostics:p})).map(a=>cs(a).message)},{code:"support-conflict",detect:async a=>(await bD(a)).map(a=>a.message)},{code:"dangerous-list-inconsistent",detect:a=>bF(a).map(a=>a.message)},{code:"commercial-data",detect:a=>bY(a).map(a=>a.message),delete:async a=>{let b=bZ(a);return{content:b,removed:+(b!==a)}}},{code:"repeated-word",detect:a=>bU(a).map(a=>a.message),delete:async a=>{let b=bV(a);return{content:b,removed:+(b!==a)}}}];for(let c of bf){let d,e=b.find(a=>a.code===a6(c.message)),h=a8(c.message);if(h<0)continue;let i=aD[h],k=f.find(a=>a.id===i.id||a.title===i.title),l=(0,aP.X5)({type:"llm_review",roleId:`agent-predelivery-fix-${i.id}`,status:"running",message:`交付前定向修复:${i.title}`,details:[c.message]},{subtitle:"交付前修复"});(0,aP.fx)(j,l),(0,aP.fx)(aV,l),X(aD,j);let m=[c.message],n="";for(d=0;d<2&&m.length>0;d+=1){let b=0===d?a7(c.message):["【修复未生效升级重试】",`上一轮修复后复检仍存在 ${m.length} 处同类缺陷(复检证据:${m.slice(0,2).join(";")}),说明上一轮修复方式与缺陷特征不匹配或 patch 未落位。`,"本轮必须更换修复方式:先精确定位问题句,再整体替换该句(不得只改个别词),替换后的文本必须完全符合下列要求:",a7(c.message)].join("\n"),f=await Y(()=>(0,aQ.l8)({template:g,chapter:{id:i.id,title:i.title,content:aD[h].content,evidence:i.evidence,missingFacts:i.missingFacts,sections:i.sections},issues:[c.message,c.suggestion||""],promptTexts:b,requirement:$,forbidDrawingImages:!1,diagnostics:p,signal:Z}));if(f.content&&f.content!==aD[h].content){if(aD[h]={...aD[h],content:k?dq(f.content,k):f.content},a+=f.appliedCount,aE=a9(),e?m=await e.detect(aE):f.appliedCount>0&&(m=[]),0===m.length)break}else{n="定位失败或输出无效(未产出 patch)";break}}if(m.length>0&&e?.delete){let b=await e.delete(aD[h].content,c.message);b.removed>0&&(aD[h]={...aD[h],content:b.content},a+=b.removed,aE=a9(),m=await e.detect(aE))}let o=0===m.length;o||n||(n="patch 已应用但未消除缺陷(修复方式不匹配)");let q=(0,aP.X5)({type:"llm_review",roleId:`agent-predelivery-fix-${i.id}`,status:o?"success":"failed",message:o?`交付前定向修复完成:${i.title}(${d} 轮内复检通过)`:`交付前定向修复未生效:${i.title}(${d} 轮 LLM 修复${e?.delete?"+确定性删除":""}后复检仍有 ${m.length} 处;失败原因:${n})`,details:[c.message,...o?[]:[`复检残留:${m.slice(0,3).join(";")}`]]},{subtitle:"交付前修复"});(0,aP.fx)(j,q),(0,aP.fx)(aV,q),X(aD,j)}if(be){let b=function(a,b){let c,{overviewBody:d,sentences:e}=bO(a);if(0===e.length||!d)return a;let f=a.split(/\r?\n/u),g=[];for(let a=0;a<f.length;a+=1){let b=/^(#{2,4})\s+(.+)$/u.exec(f[a].trim());if(b){let d=b[1].length;/(?:工程概况|项目概况|基本信息)/u.test(b[2])?c={index:a,level:d}:c&&d<=c.level&&(g.push([c.index,a]),c=void 0)}}c&&g.push([c.index,f.length]);let h=!1,i=f.map((a,c)=>{if(g.some(([a,b])=>c>=a&&c<b)||/^#{1,6}\s/u.test(a.trim())||/^\s*\|/u.test(a.trim())||!/本项目为|本工程为|该项目为|该工程为/u.test(a))return a;let e=a.split(/(?<=[。!?!?])/u).filter(a=>{if(!/本项目为|本工程为|该项目为|该工程为/u.test(a))return!0;let c=a.split(/[。!?!?]/u)[0];return c.length<12||.6>b(c,d)});return e.join("")!==a&&(h=!0),e.join("")});return h?i.join("\n"):a}(aE,be.similarity);b!==aE&&(aE=b,a+=1)}let c=await b9(aE);c!==aE&&(aE=c,a+=1),a>0&&await aY()}let bg=aE.split(/\r?\n/u).map(a=>{let b=a.trim();return/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)||!bW.test(a)&&!bX.test(a)?a:a.split(/(?<=[。;;])\s*/u).filter(a=>!(bW.test(a)||bX.test(a))).join("")}).join("\n");bg!==aE&&(aE=bg,await aY());let bh=function(a){let b=a.split(/\r?\n/u),c=[],d=0,e=0;for(;e<b.length;){if(!/^\s*\|/u.test(b[e])){c.push(b[e]),e+=1;continue}let a=e;for(;a+1<b.length&&/^\s*\|/u.test(b[a+1]);)a+=1;let f=d8(b.slice(e,a+1));f.removed>0&&(d+=1),c.push(...f.lines),e=a+1}return{markdown:c.join("\n"),removed:d}}(aE);bh.markdown!==aE&&(aE=bh.markdown,await aY());let bi=[{key:"export-gate",label:"导出门禁",passed:(aI={exportGate:aU,qualityReport:aR,repairStrategies:aS}).exportGate.passed,message:aI.exportGate.passed?"导出门禁通过":`仍有 ${aI.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:aI.qualityReport.passed,message:`${aI.qualityReport.deliveryProbability}% / ${aI.qualityReport.target}%`},{key:"completeness",label:"资料完整性",passed:aI.qualityReport.scores.completeness>=85,message:`${aI.qualityReport.scores.completeness}/100`},{key:"specificity",label:"方案针对性",passed:aI.qualityReport.scores.specificity>=85,message:`${aI.qualityReport.scores.specificity}/100`},{key:"compliance",label:"合规性",passed:aI.qualityReport.scores.compliance>=80,message:`${aI.qualityReport.scores.compliance}/100`},{key:"repair-strategies",label:"修复策略",passed:0===aI.repairStrategies.filter(a=>"high"===a.priority).length,message:aI.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}],bj=function(a){let b=[...a.diagnostics.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>({name:a.name,durationMs:a.durationMs}));return{llmCalls:a.diagnostics.llm.calls,llmFailures:a.diagnostics.llm.failures,maxParallelLlm:a.diagnostics.llm.maxActive,searchQueries:a.diagnostics.evidence.searchQueries,evidenceContextChars:a.diagnostics.evidence.contextChars,qualityIssues:{...a.diagnostics.quality},slowMetrics:b,elapsedMs:a.startedAt&&a.endedAt?a.endedAt-a.startedAt:void 0}}({diagnostics:p}),bk=(0,x.Ff)(at),bo=await dU(aD,aE,{templating:aR.templating}),bp=aR.templating?await Y(()=>dV({templating:aR.templating,markdown:aE,diagnostics:p,signal:Z})):{issues:[],reviewed:!1};p.quality.blockingCount+=bk.blocking,p.quality.importantCount+=bk.important,p.quality.minorCount+=bk.minor;let bq=aU.blockingIssues.length,br=[...aC,...aV].map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:bq>0?"failed":"success",message:`阻断 ${bq},问题 ${at.length}`}:"export_ready"===a.type?{...a,status:aU.passed?"success":"failed",message:aU.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:aU.passed&&"failed"===a.status&&/^agent-(?:reviewer|repairer)-/u.test(a.roleId)?{...a,status:"skipped",message:`${a.message||"章节中间审查失败"};最终门禁已通过,历史中间态已归档`}:a);br.push((0,aP.X5)({type:"validation",roleId:"agent-final-gate",status:aU.passed?"success":"failed",message:aU.passed?"Agent 最终门禁通过":`Agent 最终门禁阻断 ${bq} 个问题`,details:aU.blockingIssues.slice(0,12).map(a=>a.message)},{subtitle:"Agent 最终门禁"}));let bs=aR.deliveryProbability<70;br.push((0,aP.X5)({type:"validation",roleId:"document-delivery-score",status:aR.passed?"success":aU.passed?"skipped":"failed",message:aU.passed&&!aR.passed?`${aR.summary}${bs?";置信度低于 70%,建议完成续修后再交付归档":"(导出门禁已通过,作为后续优化建议归档)"}`:aR.summary,details:bs&&aU.passed?[...aR.actions,"续修建议:交付置信度低于 70% 门槛,建议按交付复核清单补齐短板维度后重新生成或续修。"]:aR.actions},{subtitle:"交付评分"})),br.push((0,aP.X5)({type:"validation",roleId:"document-professional-score",status:"专业"===bo.grade||"良好"===bo.grade?"success":"skipped",message:bo.summary,details:[...bo.dimensions.map(a=>`${a.label}:${a.score} 分(${a.detail})`),...bo.topIssues.map(a=>`待修复:${a}`)]},{subtitle:"专业度评分"})),aR.templating&&"light"!==aR.templating.level&&br.push((0,aP.X5)({type:"validation",roleId:"document-templating-report",status:"skipped",message:`模板化检测:${"heavy"===aR.templating.level?"重度":"中度"}模板化(套话句占比 ${(100*aR.templating.fillerRatio).toFixed(1)}%,重难点归因+量化双达标占比 ${(100*aR.templating.difficultyCountermeasureRatio).toFixed(0)}%,模糊应答词 ${aR.templating.vagueHitCount} 处)`,details:bp.issues},{subtitle:"模板化检测"})),O&&br.push((0,aP.X5)({type:"reference",roleId:"document-writing-task-brief",status:"success",message:`写作任务书:${O.documentType},${O.chapters.length} 章任务卡,全局写作焦点 ${O.globalWritingFocus.length} 条`,details:[...O.globalWritingFocus,...O.chapters.slice(0,10).map(a=>`${a.chapterTitle}:覆盖 ${a.mustCover.length} 项`)],subtitle:"写作任务书"})),br.push((0,aP.X5)({type:"reference",roleId:"knowledge-coverage",status:aM.score>=85?"success":"failed",message:`资料确认覆盖率:${aM.score}%(证据 ${aM.evidenceCount} 条,文件 ${aM.confirmedFiles} 份)`,details:[aM.remediation]},{subtitle:"资料覆盖"})),br.push((0,aP.X5)({type:"validation",roleId:"document-review-checklist",status:bi.every(a=>a.passed)?"success":aU.passed?"skipped":"failed",message:`交付复核清单:通过 ${bi.filter(a=>a.passed).length}/${bi.length}${aU.passed&&!bi.every(a=>a.passed)?"(导出门禁已通过,其余项作为优化建议归档)":""}`,details:bi.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let bt=[...p.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(",");br.push((0,aP.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${p.llm.calls} 次,失败 ${p.llm.failures} 次,瞬态重试 ${p.llm.retries} 次,schema 校验失败 ${p.llm.schemaFailures} 次,峰值并行 ${p.llm.maxActive},检索 ${p.evidence.searchQueries} 次/${Math.round(p.evidence.searchMs/1e3)} 秒,证据上下文 ${p.evidence.contextChars} 字,噪声过滤 ${p.evidence.filteredNoise} 条,预算裁剪 ${p.evidence.budgetDropped} 条,质量问题 阻断${p.quality.blockingCount}/重要${p.quality.importantCount}/轻微${p.quality.minorCount}${bt?`,Top耗时:${bt}`:""}`},{subtitle:"后台诊断"}));let bu=aD.map(a=>({...a,evidence:(0,s.QR)(a.evidence||[],{maxItems:12,maxChars:9e3,preservePinned:!0})}));return aD=bu,{templateId:g.id,templateName:g.name,title:g.outputTitle,requirement:$||"",projectRoot:A,projectId:B,exportSettings:g.exportSettings,generationSettings:g.generationSettings,facts:af,structuredFacts:ak,factsModel:ao,chapters:bu,sources:ar,missingItems:[...new Set(F)],validation:aq,validationIssues:at,exportGate:aU,executionStages:br,assets:aA,partialChapters:aD.map(a=>({id:a.id,title:a.title,chars:(0,w.V7)(a.content),status:c5(a,n.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:bu,promptRules:t,agentWorkflow:K,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:p,profile:function(a){let b=`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`,c=[{pattern:/专项施工|危大|专项方案/u,type:"专项施工方案",dimensions:["专项对象边界","工艺参数","风险控制","验收要求","应急措施"]},{pattern:/投标|技术标|响应|招标/u,type:"投标技术方案",dimensions:["招标响应","技术优势","工期质量安全承诺","资源保障","履约可实施性"]},{pattern:/监理|旁站|巡视|平行检验/u,type:"监理规划/细则",dimensions:["监理目标","旁站巡视","平行检验","验收程序","资料签认"]},{pattern:/可研|可行性|项目建议书|投资估算/u,type:"可研/项目建议类文档",dimensions:["建设必要性","方案比选","投资估算","风险分析","实施效益"]},{pattern:/运维|维护|保养|巡检/u,type:"运维维护方案",dimensions:["巡检频次","维护流程","故障响应","备品备件","记录闭环"]}].find(a=>a.pattern.test(b));return{type:c?.type||"施工组织设计/施工技术方案",dimensions:c?.dimensions||["工程概况","施工部署","进度质量安全","资源配置","施工工艺和验收闭环"],requiredEvidencePolicy:"本地知识库为完整事实源;系统暂未确认的事实必须通过扩大检索、事实补抽或落位修复解决,不得归因为用户资料缺失。"}}({template:g,chapters:f,requirement:$}),knowledgeCoverage:aM,factTraces:aN,chapterCoverage:aO,retrievalCoverage:G,qualityReport:aR,repairStrategies:aS,reviewChecklist:bi,professionalScore:bo,templatingReviewIssues:bp.issues,writingTaskBrief:O,workflowVersion:cN.x,telemetry:bj,qualityBenchmark:await cL(aE)},generatedAt:Date.now(),markdown:aE}}var ee=c(70963),ef=c(25284);let eg=["知识库","系统暂未","项目资料暂未","资料未明确","暂未明确","待确认","待资料复核","待系统","未检索到","资料不足","无法确认","建议补充","不适用","COL","可核验信息","工作包"];function eh(a){return a.replace(/\s+/gu,"").toLowerCase()}function ei(a){return`${a.fieldId||""} ${a.fieldName||""} ${a.key} ${(0,z.lG)(a.value)}`.replace(/\s+/gu," ").trim()}function ej(a){return(0,z.lG)(a.value).replace(/\s+/gu," ").trim()}function ek(a,b){let c=eh(ei(a));return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(eh(a)))}function el(a,b){let c=[...a.works.map(a=>`工程:${a.name} ${a.scope}`),...a.methods.map(a=>`工法:${a.name} ${(a.applicableWorks||[]).join("、")}`),...a.resources.map(a=>`资源:${a.name} ${a.spec} ${a.quantity}${a.unit}`),...a.schedule.map(a=>`工期:${a.milestone} ${a.duration}`),...a.standards.map(a=>`标准:${a.code} ${a.description}`),...a.risks.map(a=>`风险:${a.risk} ${a.mitigation}`),...a.requirements.map(a=>`要求:${a.category} ${a.detail}`),...a.siteConditions.map(a=>`现场:${a.condition} ${a.impact}`)],d=eh(b);return c.filter(a=>eh(a).includes(d)||b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(b=>eh(a).includes(eh(b))))}function em(a){let b=[];return/重点|难点|危大|风险|安全|应急/u.test(a)&&b.push("安全 文明 危大 风险 应急 临边 洞口 消防 临电 高处 起重 吊装 基坑 脚手架 模板 支护 图纸 施工说明 审查意见"),/工期|进度|节点|计划/u.test(a)&&b.push("工期 日历天 节点 进度 计划 开工 竣工 关键线路"),/质量|验收|标准|实测|通病/u.test(a)&&b.push("质量 验收 合格 标准 规范 检验批 隐蔽 复试 样板"),/资源|材料|机械|人材机|设备/u.test(a)&&b.push("清单 工程量 材料 设备 机械 劳动力 规格 型号 数量 单位"),/概况|说明|依据|范围/u.test(a)&&b.push("工程名称 项目名称 建设地点 建筑面积 建设规模 招标范围 施工范围"),/部署|施工|流水|区段|组织/u.test(a)&&b.push("施工 组织 部署 区段 流水 作业面 工序 穿插 图纸 清单"),b}function en(a){return/项目特点.*重点.*难点|重点.*难点.*分析/u.test(a)?"系统识别本项目特点、施工重点、施工难点、形成原因、影响范围和应对措施,必须落位项目规模、结构形式、工期、专业范围、现场约束等具体事实,并为“项目主要施工内容”提供逐项对应依据。":/项目主要施工内容/u.test(a)?"按专业工程和关键工序展开施工内容,必须逐项响应“项目特点、重点、难点分析”中的重点难点,说明施工范围、实施内容、控制措施、验收节点和资料闭环。":/工期|进度|节点|计划/u.test(a)?"使用项目工期、节点和资源事实说明进度组织要求。":/质量|验收|标准|实测/u.test(a)?"使用项目质量目标、验收标准和工序事实说明质量控制要求。":/安全|危大|风险|应急/u.test(a)?"使用项目风险、危大工程和安全文明事实说明安全管控要求。":/资源|材料|机械|人材机/u.test(a)?"使用清单、材料、设备和劳动力事实说明资源配置要求。":/概况|说明|依据/u.test(a)?"使用项目基础事实说明编制边界和工程概况。":"使用已确认项目事实形成正式施工组织内容。"}function eo(a){let b=a.facts.slice(0,18).map(a=>`- ${a.key}:${ej(a)}${a.sourceFile?`(来源:${a.sourceFile})`:""}`).join("\n"),c=a.sections.map((a,b)=>`${b+1}. 必须输出三级标题:### ${a.title}
|
|
104
|
+
${g.map(a=>`- ${a}`).join("\n")}`),b.join("\n\n")}({factsModel:ao,evaluationCriteriaItems:P,tenderRequirements:Q}),diagnostics:p,signal:Z,heartbeat:Y,onStage:a=>{let b=(0,aP.X5)({type:"llm_review",roleId:"agent-qingtian-review",status:a.status,message:a.message,details:a.details},{subtitle:"全维度评审"});(0,aP.fx)(j,b),(0,aP.fx)(aV,b),X(aD,j)}});aX=bd.reviewed?bd.remainingIssues.map(a=>{let b="否决级"===a.riskLevel||"高风险"===a.riskLevel;return{level:b?"error":"warning",severity:b?"blocker":"warning",repairability:b?"llm_repairable":"not_repair_needed",category:"qingtian_review",owner:"llm",message:`[全维度评审\xb7${a.dimension}\xb7${a.riskLevel}]${a.location?`${a.location}:`:""}${a.description}${a.quote?`(原文:“${a.quote.slice(0,40)}”)`:""}`,suggestion:a.basis}}):[],bd.fixedCount>0?(aE=a9(),await aY()):aX.length>0&&await aY();let be=await (async()=>{let a=aD.find(a=>/工程概况|项目概况|基本信息/u.test(a.title))?.content;if(!a)return;let b=bO(aE);if(0===b.sentences.length)return;let c=await (0,M.Mv)(b.sentences,[a]);return{overviewBody:a,similarity:c}})(),bf=[...await bJ(aE),...await bM(aE,ao),...be?bP(aE,{semanticSimilarity:be.similarity}):[],...await b8(aE),...bv(aE,ao),...bx(aE,ao),...bz(aE),...bB(aE),...(await cr(aE,{signal:Z,diagnostics:p})).map(a=>cs(a)),...await bD(aE),...bF(aE),...bY(aE),...bU(aE)].filter(a=>"error"===a.level);if(bf.length>0){let a=0,b=[{code:"six-hundred-percent",detect:async a=>(await bJ(a)).map(a=>a.message)},{code:"local-award",detect:async a=>(await bM(a,ao)).filter(a=>/本地创优目标缺失/u.test(a.message)).map(a=>a.message)},{code:"green-quant",detect:async a=>(await bM(a,ao)).filter(a=>/四节一环保量化指标缺失/u.test(a.message)).map(a=>a.message)},{code:"work-injury",detect:async a=>(await bM(a,ao)).filter(a=>/工伤保险表述缺失/u.test(a.message)).map(a=>a.message)},{code:"overview-recap",detect:a=>be?bP(a,{semanticSimilarity:be.similarity}).map(a=>a.message):[]},{code:"internal-term",detect:async a=>(await b8(a)).map(a=>a.message)},{code:"fabricated-date",detect:a=>bv(a,ao).map(a=>a.message)},{code:"field-value-mismatch",detect:a=>bx(a,ao).map(a=>a.message)},{code:"area-arithmetic",detect:a=>bz(a).map(a=>a.message)},{code:"labor-contradiction",detect:a=>bB(a).map(a=>a.message)},{code:"data-consistency",detect:async a=>(await cr(a,{signal:Z,diagnostics:p})).map(a=>cs(a).message)},{code:"support-conflict",detect:async a=>(await bD(a)).map(a=>a.message)},{code:"dangerous-list-inconsistent",detect:a=>bF(a).map(a=>a.message)},{code:"commercial-data",detect:a=>bY(a).map(a=>a.message),delete:async a=>{let b=bZ(a);return{content:b,removed:+(b!==a)}}},{code:"repeated-word",detect:a=>bU(a).map(a=>a.message),delete:async a=>{let b=bV(a);return{content:b,removed:+(b!==a)}}}];for(let c of bf){let d,e=b.find(a=>a.code===a6(c.message)),h=a8(c.message);if(h<0)continue;let i=aD[h],k=f.find(a=>a.id===i.id||a.title===i.title),l=(0,aP.X5)({type:"llm_review",roleId:`agent-predelivery-fix-${i.id}`,status:"running",message:`交付前定向修复:${i.title}`,details:[c.message]},{subtitle:"交付前修复"});(0,aP.fx)(j,l),(0,aP.fx)(aV,l),X(aD,j);let m=[c.message],n="";for(d=0;d<2&&m.length>0;d+=1){let b=0===d?a7(c.message):["【修复未生效升级重试】",`上一轮修复后复检仍存在 ${m.length} 处同类缺陷(复检证据:${m.slice(0,2).join(";")}),说明上一轮修复方式与缺陷特征不匹配或 patch 未落位。`,"本轮必须更换修复方式:先精确定位问题句,再整体替换该句(不得只改个别词),替换后的文本必须完全符合下列要求:",a7(c.message)].join("\n"),f=await Y(()=>(0,aQ.l8)({template:g,chapter:{id:i.id,title:i.title,content:aD[h].content,evidence:i.evidence,missingFacts:i.missingFacts,sections:i.sections},issues:[c.message,c.suggestion||""],promptTexts:b,requirement:$,forbidDrawingImages:!1,diagnostics:p,signal:Z}));if(f.content&&f.content!==aD[h].content){if(aD[h]={...aD[h],content:k?dq(f.content,k):f.content},a+=f.appliedCount,aE=a9(),e?m=await e.detect(aE):f.appliedCount>0&&(m=[]),0===m.length)break}else{if(0===d)continue;n="定位失败或输出无效(未产出 patch)";break}}if(m.length>0&&e?.delete){let b=await e.delete(aD[h].content,c.message);b.removed>0&&(aD[h]={...aD[h],content:b.content},a+=b.removed,aE=a9(),m=await e.detect(aE))}let o=0===m.length;o||n||(n="patch 已应用但未消除缺陷(修复方式不匹配)");let q=(0,aP.X5)({type:"llm_review",roleId:`agent-predelivery-fix-${i.id}`,status:o?"success":"failed",message:o?`交付前定向修复完成:${i.title}(${d} 轮内复检通过)`:`交付前定向修复未生效:${i.title}(${d} 轮 LLM 修复${e?.delete?"+确定性删除":""}后复检仍有 ${m.length} 处;失败原因:${n})`,details:[c.message,...o?[]:[`复检残留:${m.slice(0,3).join(";")}`]]},{subtitle:"交付前修复"});(0,aP.fx)(j,q),(0,aP.fx)(aV,q),X(aD,j)}if(be){let b=function(a,b){let c,{overviewBody:d,sentences:e}=bO(a);if(0===e.length||!d)return a;let f=a.split(/\r?\n/u),g=[];for(let a=0;a<f.length;a+=1){let b=/^(#{2,4})\s+(.+)$/u.exec(f[a].trim());if(b){let d=b[1].length;/(?:工程概况|项目概况|基本信息)/u.test(b[2])?c={index:a,level:d}:c&&d<=c.level&&(g.push([c.index,a]),c=void 0)}}c&&g.push([c.index,f.length]);let h=!1,i=f.map((a,c)=>{if(g.some(([a,b])=>c>=a&&c<b)||/^#{1,6}\s/u.test(a.trim())||/^\s*\|/u.test(a.trim())||!/本项目为|本工程为|该项目为|该工程为/u.test(a))return a;let e=a.split(/(?<=[。!?!?])/u).filter(a=>{if(!/本项目为|本工程为|该项目为|该工程为/u.test(a))return!0;let c=a.split(/[。!?!?]/u)[0];return c.length<12||.6>b(c,d)});return e.join("")!==a&&(h=!0),e.join("")});return h?i.join("\n"):a}(aE,be.similarity);b!==aE&&(aE=b,a+=1)}let c=await b9(aE);c!==aE&&(aE=c,a+=1),a>0&&await aY()}let bg=aE.split(/\r?\n/u).map(a=>{let b=a.trim();return/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)||!bW.test(a)&&!bX.test(a)?a:a.split(/(?<=[。;;])\s*/u).filter(a=>!(bW.test(a)||bX.test(a))).join("")}).join("\n");bg!==aE&&(aE=bg,await aY());let bh=function(a){let b=a.split(/\r?\n/u),c=[],d=0,e=0;for(;e<b.length;){if(!/^\s*\|/u.test(b[e])){c.push(b[e]),e+=1;continue}let a=e;for(;a+1<b.length&&/^\s*\|/u.test(b[a+1]);)a+=1;let f=d8(b.slice(e,a+1));f.removed>0&&(d+=1),c.push(...f.lines),e=a+1}return{markdown:c.join("\n"),removed:d}}(aE);bh.markdown!==aE&&(aE=bh.markdown,await aY());let bi=[{key:"export-gate",label:"导出门禁",passed:(aI={exportGate:aU,qualityReport:aR,repairStrategies:aS}).exportGate.passed,message:aI.exportGate.passed?"导出门禁通过":`仍有 ${aI.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:aI.qualityReport.passed,message:`${aI.qualityReport.deliveryProbability}% / ${aI.qualityReport.target}%`},{key:"completeness",label:"资料完整性",passed:aI.qualityReport.scores.completeness>=85,message:`${aI.qualityReport.scores.completeness}/100`},{key:"specificity",label:"方案针对性",passed:aI.qualityReport.scores.specificity>=85,message:`${aI.qualityReport.scores.specificity}/100`},{key:"compliance",label:"合规性",passed:aI.qualityReport.scores.compliance>=80,message:`${aI.qualityReport.scores.compliance}/100`},{key:"repair-strategies",label:"修复策略",passed:0===aI.repairStrategies.filter(a=>"high"===a.priority).length,message:aI.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}],bj=function(a){let b=[...a.diagnostics.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>({name:a.name,durationMs:a.durationMs}));return{llmCalls:a.diagnostics.llm.calls,llmFailures:a.diagnostics.llm.failures,maxParallelLlm:a.diagnostics.llm.maxActive,searchQueries:a.diagnostics.evidence.searchQueries,evidenceContextChars:a.diagnostics.evidence.contextChars,qualityIssues:{...a.diagnostics.quality},slowMetrics:b,elapsedMs:a.startedAt&&a.endedAt?a.endedAt-a.startedAt:void 0}}({diagnostics:p}),bk=(0,x.Ff)(at),bo=await dU(aD,aE,{templating:aR.templating}),bp=aR.templating?await Y(()=>dV({templating:aR.templating,markdown:aE,diagnostics:p,signal:Z})):{issues:[],reviewed:!1};p.quality.blockingCount+=bk.blocking,p.quality.importantCount+=bk.important,p.quality.minorCount+=bk.minor;let bq=aU.blockingIssues.length,br=[...aC,...aV].map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:bq>0?"failed":"success",message:`阻断 ${bq},问题 ${at.length}`}:"export_ready"===a.type?{...a,status:aU.passed?"success":"failed",message:aU.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:aU.passed&&"failed"===a.status&&/^agent-(?:reviewer|repairer)-/u.test(a.roleId)?{...a,status:"skipped",message:`${a.message||"章节中间审查失败"};最终门禁已通过,历史中间态已归档`}:a);br.push((0,aP.X5)({type:"validation",roleId:"agent-final-gate",status:aU.passed?"success":"failed",message:aU.passed?"Agent 最终门禁通过":`Agent 最终门禁阻断 ${bq} 个问题`,details:aU.blockingIssues.slice(0,12).map(a=>a.message)},{subtitle:"Agent 最终门禁"}));let bs=aR.deliveryProbability<70;br.push((0,aP.X5)({type:"validation",roleId:"document-delivery-score",status:aR.passed?"success":aU.passed?"skipped":"failed",message:aU.passed&&!aR.passed?`${aR.summary}${bs?";置信度低于 70%,建议完成续修后再交付归档":"(导出门禁已通过,作为后续优化建议归档)"}`:aR.summary,details:bs&&aU.passed?[...aR.actions,"续修建议:交付置信度低于 70% 门槛,建议按交付复核清单补齐短板维度后重新生成或续修。"]:aR.actions},{subtitle:"交付评分"})),br.push((0,aP.X5)({type:"validation",roleId:"document-professional-score",status:"专业"===bo.grade||"良好"===bo.grade?"success":"skipped",message:bo.summary,details:[...bo.dimensions.map(a=>`${a.label}:${a.score} 分(${a.detail})`),...bo.topIssues.map(a=>`待修复:${a}`)]},{subtitle:"专业度评分"})),aR.templating&&"light"!==aR.templating.level&&br.push((0,aP.X5)({type:"validation",roleId:"document-templating-report",status:"skipped",message:`模板化检测:${"heavy"===aR.templating.level?"重度":"中度"}模板化(套话句占比 ${(100*aR.templating.fillerRatio).toFixed(1)}%,重难点归因+量化双达标占比 ${(100*aR.templating.difficultyCountermeasureRatio).toFixed(0)}%,模糊应答词 ${aR.templating.vagueHitCount} 处)`,details:bp.issues},{subtitle:"模板化检测"})),O&&br.push((0,aP.X5)({type:"reference",roleId:"document-writing-task-brief",status:"success",message:`写作任务书:${O.documentType},${O.chapters.length} 章任务卡,全局写作焦点 ${O.globalWritingFocus.length} 条`,details:[...O.globalWritingFocus,...O.chapters.slice(0,10).map(a=>`${a.chapterTitle}:覆盖 ${a.mustCover.length} 项`)],subtitle:"写作任务书"})),br.push((0,aP.X5)({type:"reference",roleId:"knowledge-coverage",status:aM.score>=85?"success":"failed",message:`资料确认覆盖率:${aM.score}%(证据 ${aM.evidenceCount} 条,文件 ${aM.confirmedFiles} 份)`,details:[aM.remediation]},{subtitle:"资料覆盖"})),br.push((0,aP.X5)({type:"validation",roleId:"document-review-checklist",status:bi.every(a=>a.passed)?"success":aU.passed?"skipped":"failed",message:`交付复核清单:通过 ${bi.filter(a=>a.passed).length}/${bi.length}${aU.passed&&!bi.every(a=>a.passed)?"(导出门禁已通过,其余项作为优化建议归档)":""}`,details:bi.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let bt=[...p.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(",");br.push((0,aP.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${p.llm.calls} 次,失败 ${p.llm.failures} 次,瞬态重试 ${p.llm.retries} 次,schema 校验失败 ${p.llm.schemaFailures} 次,峰值并行 ${p.llm.maxActive},检索 ${p.evidence.searchQueries} 次/${Math.round(p.evidence.searchMs/1e3)} 秒,证据上下文 ${p.evidence.contextChars} 字,噪声过滤 ${p.evidence.filteredNoise} 条,预算裁剪 ${p.evidence.budgetDropped} 条,质量问题 阻断${p.quality.blockingCount}/重要${p.quality.importantCount}/轻微${p.quality.minorCount}${bt?`,Top耗时:${bt}`:""}`},{subtitle:"后台诊断"}));let bu=aD.map(a=>({...a,evidence:(0,s.QR)(a.evidence||[],{maxItems:12,maxChars:9e3,preservePinned:!0})}));return aD=bu,{templateId:g.id,templateName:g.name,title:g.outputTitle,requirement:$||"",projectRoot:A,projectId:B,exportSettings:g.exportSettings,generationSettings:g.generationSettings,facts:af,structuredFacts:ak,factsModel:ao,chapters:bu,sources:ar,missingItems:[...new Set(F)],validation:aq,validationIssues:at,exportGate:aU,executionStages:br,assets:aA,partialChapters:aD.map(a=>({id:a.id,title:a.title,chars:(0,w.V7)(a.content),status:c5(a,n.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:bu,promptRules:t,agentWorkflow:K,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:p,profile:function(a){let b=`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`,c=[{pattern:/专项施工|危大|专项方案/u,type:"专项施工方案",dimensions:["专项对象边界","工艺参数","风险控制","验收要求","应急措施"]},{pattern:/投标|技术标|响应|招标/u,type:"投标技术方案",dimensions:["招标响应","技术优势","工期质量安全承诺","资源保障","履约可实施性"]},{pattern:/监理|旁站|巡视|平行检验/u,type:"监理规划/细则",dimensions:["监理目标","旁站巡视","平行检验","验收程序","资料签认"]},{pattern:/可研|可行性|项目建议书|投资估算/u,type:"可研/项目建议类文档",dimensions:["建设必要性","方案比选","投资估算","风险分析","实施效益"]},{pattern:/运维|维护|保养|巡检/u,type:"运维维护方案",dimensions:["巡检频次","维护流程","故障响应","备品备件","记录闭环"]}].find(a=>a.pattern.test(b));return{type:c?.type||"施工组织设计/施工技术方案",dimensions:c?.dimensions||["工程概况","施工部署","进度质量安全","资源配置","施工工艺和验收闭环"],requiredEvidencePolicy:"本地知识库为完整事实源;系统暂未确认的事实必须通过扩大检索、事实补抽或落位修复解决,不得归因为用户资料缺失。"}}({template:g,chapters:f,requirement:$}),knowledgeCoverage:aM,factTraces:aN,chapterCoverage:aO,retrievalCoverage:G,qualityReport:aR,repairStrategies:aS,reviewChecklist:bi,professionalScore:bo,templatingReviewIssues:bp.issues,writingTaskBrief:O,workflowVersion:cN.x,telemetry:bj,qualityBenchmark:await cL(aE)},generatedAt:Date.now(),markdown:aE}}var ee=c(70963),ef=c(25284);let eg=["知识库","系统暂未","项目资料暂未","资料未明确","暂未明确","待确认","待资料复核","待系统","未检索到","资料不足","无法确认","建议补充","不适用","COL","可核验信息","工作包"];function eh(a){return a.replace(/\s+/gu,"").toLowerCase()}function ei(a){return`${a.fieldId||""} ${a.fieldName||""} ${a.key} ${(0,z.lG)(a.value)}`.replace(/\s+/gu," ").trim()}function ej(a){return(0,z.lG)(a.value).replace(/\s+/gu," ").trim()}function ek(a,b){let c=eh(ei(a));return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(eh(a)))}function el(a,b){let c=[...a.works.map(a=>`工程:${a.name} ${a.scope}`),...a.methods.map(a=>`工法:${a.name} ${(a.applicableWorks||[]).join("、")}`),...a.resources.map(a=>`资源:${a.name} ${a.spec} ${a.quantity}${a.unit}`),...a.schedule.map(a=>`工期:${a.milestone} ${a.duration}`),...a.standards.map(a=>`标准:${a.code} ${a.description}`),...a.risks.map(a=>`风险:${a.risk} ${a.mitigation}`),...a.requirements.map(a=>`要求:${a.category} ${a.detail}`),...a.siteConditions.map(a=>`现场:${a.condition} ${a.impact}`)],d=eh(b);return c.filter(a=>eh(a).includes(d)||b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(b=>eh(a).includes(eh(b))))}function em(a){let b=[];return/重点|难点|危大|风险|安全|应急/u.test(a)&&b.push("安全 文明 危大 风险 应急 临边 洞口 消防 临电 高处 起重 吊装 基坑 脚手架 模板 支护 图纸 施工说明 审查意见"),/工期|进度|节点|计划/u.test(a)&&b.push("工期 日历天 节点 进度 计划 开工 竣工 关键线路"),/质量|验收|标准|实测|通病/u.test(a)&&b.push("质量 验收 合格 标准 规范 检验批 隐蔽 复试 样板"),/资源|材料|机械|人材机|设备/u.test(a)&&b.push("清单 工程量 材料 设备 机械 劳动力 规格 型号 数量 单位"),/概况|说明|依据|范围/u.test(a)&&b.push("工程名称 项目名称 建设地点 建筑面积 建设规模 招标范围 施工范围"),/部署|施工|流水|区段|组织/u.test(a)&&b.push("施工 组织 部署 区段 流水 作业面 工序 穿插 图纸 清单"),b}function en(a){return/项目特点.*重点.*难点|重点.*难点.*分析/u.test(a)?"系统识别本项目特点、施工重点、施工难点、形成原因、影响范围和应对措施,必须落位项目规模、结构形式、工期、专业范围、现场约束等具体事实,并为“项目主要施工内容”提供逐项对应依据。":/项目主要施工内容/u.test(a)?"按专业工程和关键工序展开施工内容,必须逐项响应“项目特点、重点、难点分析”中的重点难点,说明施工范围、实施内容、控制措施、验收节点和资料闭环。":/工期|进度|节点|计划/u.test(a)?"使用项目工期、节点和资源事实说明进度组织要求。":/质量|验收|标准|实测/u.test(a)?"使用项目质量目标、验收标准和工序事实说明质量控制要求。":/安全|危大|风险|应急/u.test(a)?"使用项目风险、危大工程和安全文明事实说明安全管控要求。":/资源|材料|机械|人材机/u.test(a)?"使用清单、材料、设备和劳动力事实说明资源配置要求。":/概况|说明|依据/u.test(a)?"使用项目基础事实说明编制边界和工程概况。":"使用已确认项目事实形成正式施工组织内容。"}function eo(a){let b=a.facts.slice(0,18).map(a=>`- ${a.key}:${ej(a)}${a.sourceFile?`(来源:${a.sourceFile})`:""}`).join("\n"),c=a.sections.map((a,b)=>`${b+1}. 必须输出三级标题:### ${a.title}
|
|
105
105
|
写作目标:${a.objective}
|
|
106
106
|
支撑情况:证据 ${a.evidenceIds.length},事实 ${a.factIds.length},图谱 ${a.graphNodeIds.length}
|
|
107
107
|
最小正文深度:${a.minChars} 字`).join("\n");return["【Agent 章节任务】",`任务ID:${a.taskId}`,`章节:${a.title}`,a.graphContext?`图谱上下文:
|
|
@@ -110,7 +110,7 @@ ${b}`:"",`小节任务:
|
|
|
110
110
|
${c}`,"写作要求:必须严格按“小节任务”逐项输出,每个任务都必须保留完全一致的三级标题“### 小节标题”;不得合并小节、不得改写小节标题、不得省略小节;项目专属事实只使用事实卡、图谱上下文和绑定证据,法律法规、标准规范等公共知识可直接引用;不得输出后台话术、兜底措辞、待确认、不适用;缺少项目事实的小节不得编造。"].filter(Boolean).join("\n\n")}function ep(a){let b=ej(a);return!(!b||b.length<3||/^(?:见|详见|按|执行|参见|依据).{0,16}(?:前附表|招标公告|招标文件|合同|协议书|通用条款|专用条款|图纸|清单|附件|资料)$/u.test(b)||/^(?:合同协议书|通用条款|专用条款|招标文件|招标公告|投标人须知前附表|附件|资料)$/u.test(b.replace(/[()()\d一二三四五六七八九十、..\s]/gu,"")))&&/项目|工程|编号|地点|规模|范围|工期|质量|安全|资源|材料|设备|验收|\d/u.test(ei(a))}function eq(a){let b=[],c=a.draft.content||"";for(let d of eg)c.includes(d)&&b.push({level:"error",severity:"blocker",category:"style",owner:"system",message:`${a.draft.title} 正文包含禁止话术:${d}`,suggestion:"工作包"===d?"这是生成系统后台概念,正文中不得出现该词:结合上下文语义改写为正式术语(如“拆除工程”“按专业工程逐项说明”),不得做词面替换。":"改为事实支撑的正式表达;缺失事实不得占位。"});c.includes("[EVIDENCE_SKELETON]")&&b.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 正文为 LLM 全故障后的证据骨架草稿,禁止作为正式正文通过`,suggestion:"必须由 Repairer 基于小节事实卡与证据完整重写为正式正文,并删除 [EVIDENCE_SKELETON] 标记;若 LLM 仍不可用,本章节保持 failed 阻断。"}),(0,w.V7)(c);let d=a.plannedCoverage,e=a=>{let b=d?.[a];return b&&b.length>0?b[0]:a},f=new Map;for(let a of Object.values(d||{}))a.length>0&&f.set(a[0],(f.get(a[0])||0)+1);let g=a=>{let b=d?.[a];return!!b&&0!==b.length&&(f.get(b[0])||1)>1},h=new Map,i=new Set;for(let b of a.task.sections){let a=e(b.title);g(b.title);let c=h.get(a);h.set(a,void 0===c?b.minChars:Math.max(c,b.minChars))}for(let e of a.task.sections){let a=d?.[e.title],f=a&&a.length>0?a:[e.title],j=f[0],k=g(e.title),l=new Set,m="";for(let a of f){let b=(0,z.Xl)(c,a,{fuzzy:!0});b&&!l.has(b)&&(l.add(b),m+=(m?"\n":"")+b)}if(j!==e.title){let a=(0,z.Xl)(c,e.title,{fuzzy:!0});a&&!l.has(a)&&(0,w.V7)(a)>(0,w.V7)(m)&&(m=a)}if(m.includes("[WRITER_MISSING_SECTION]")||!m&&c.includes("[WRITER_MISSING_SECTION]"))i.has(j)||(i.add(j),b.push({level:"error",severity:"blocker",category:"structure",owner:"system",message:k?`${j} Writer 未完成(承接 ${e.title})`:`${e.title} Writer 未完成`,suggestion:"Repairer 必须基于该小节事实卡和证据生成正式正文,并删除 WRITER_MISSING_SECTION 标记。"}));else if(m&&!i.has(j)){i.add(j);let a=h.get(j)||e.minChars,c=/项目特点.*重点.*难点|重点.*难点.*分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试|见证取样/u.test(e.title),d=k&&!c?Math.max(200,Math.floor(.5*a)):a;(0,w.V7)(m)>=Math.floor(.8*d)||b.push({level:c?"error":"warning",severity:c?"blocker":"warning",category:"structure",owner:"system",message:k?`${j} 正文不足,未达到任务最小深度(承接 ${e.title})`:`${e.title} 正文不足,未达到任务最小深度`,suggestion:c?"关键小节必须基于项目事实和对应关系重写补足;不得仅保留概述性文字。":"应基于该小节事实卡和证据重新生成,不得使用标题占位。"})}else if(!m&&!i.has(j)){i.add(j);let a=/项目特点.*重点.*难点|重点.*难点.*分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试|见证取样/u.test(e.title);b.push({level:a?"error":"warning",severity:a?"blocker":"warning",category:"structure",owner:"system",message:a?`${e.title} 正文不足,未达到任务最小深度`:`${k?`承接小节 ${j} 缺失`:e.title} 未匹配到独立小节标题`,suggestion:a?"关键小节缺失正文,必须基于该小节事实卡和证据生成正式正文,不得以标题占位。":"正文已成文但小节标题与规划标题不完全一致,建议后续按规划标题进一步规范结构。"})}if(e.ready||b.push(...e.issues.map(a=>({...a,level:"warning",severity:"warning"}))),/主要分部分项工程施工方案|主要施工方法/u.test(e.title)){let a=(0,z.Xl)(c,j,{fuzzy:!0}),d=(0,w.V7)(a),f=new Set([...a.match(R.aX)||[],...a.match(R.LT)||[]]).size,g=new Set(a.match(R.s2)||[]).size,h=d>0?g/(d/1e3):0;(0,w.V7)(a)>=800&&(f<4||h<2)&&b.push({level:"warning",severity:"warning",category:"professional_chain",owner:"system",message:`${e.title} 参数落位不足:工艺参数 ${f} 个(要求不少于 4 个),量化参数密度每千字 ${h.toFixed(1)} 个(要求不少于 2 个)`,suggestion:"必须补充 mm/MPa/间距/偏差/坡度/试验压力等工艺参数(来自绑定资料或行业规范值)或设备型号规格参数,并提升量化参数(数量/规格/工期/面积等)落位密度;同一参数不得反复堆砌凑数。"})}if(/主要分部分项工程施工方案|主要施工方法|项目主要施工内容|施工流程|施工顺序|多工序穿插|三检制度|隐蔽工程验收|闭环整改|应急演练|转运路线/u.test(e.title)){let a=(0,z.Xl)(c,j,{fuzzy:!0});(0,w.V7)(a)>=500&&!(0,z.Z1)(a)&&b.push({level:"warning",severity:"warning",category:"professional_chain",owner:"system",message:`${e.title} 工序顺序表达缺失:工序序列未以顺序词叙述、编号步骤、列表或箭头链任一形式表达`,suggestion:"工艺流程与方法叙述中的连续工序须有明确的顺序表达,形式由模型自然选择(顺序词叙述、编号步骤、有序列表或箭头链均可,如“先进行基层清理,再放线定位,随后分层摊铺,然后碾压,最后验收”),保证工序先后顺序清晰即可。"})}}let j=a.context.materialScope.selectedRoots;for(let d of a.context.materialScope.rejectedRoots)d&&!j.includes(d)&&c.includes(d)&&b.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 混入非当前资料组名称:${d}`,suggestion:"必须删除跨项目内容并重新检索当前资料组证据。"});let k=a.task.facts.filter(ep),l=k.filter(a=>{let b=ej(a);return b.length>=2&&c.includes(b.slice(0,Math.min(18,b.length)))}).length;k.length>=3&&0===l&&1200>(0,w.V7)(c)&&b.push({level:"warning",severity:"warning",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 未明显落位章节事实卡`,suggestion:"建议将章节事实卡中的关键工程事实写入对应小节,但不因引用型或低可执行事实阻断。"});let m=b.filter(a=>"error"===a.level||"blocker"===a.severity),n=b.filter(a=>/正文不足|未落位章节事实卡/u.test(a.message)),o=m.some(a=>/Writer 未完成|正文不足,未达到任务最小深度/u.test(a.message));return{issues:b,supportedFacts:l,unsupportedSignals:b.map(a=>a.message),repairable:b.length>0&&(b.length<=6||n.length===b.length||0===m.length||o)}}function er(a){return a.replace(/\s+/gu,"").toLowerCase()}var es=c(14070);async function et(a){let b=(0,d.QJ)(a.templateId);if(!b)throw Error("Document template not found");let c=b.chapters.find(b=>b.id===a.chapterId);if(!c)throw Error("Document chapter not found");let f=e.resolve(a.projectRoot||(0,g.aY)());if(!f)throw Error("No knowledge base project found");let h=(0,g.Qh)(),i=(0,aS.Hh)(f,b,{requirement:a.requirement}),j=(0,aS.W9)(f,b,{requirement:a.requirement}),{kindByPath:k,processingByPath:l}=(0,aS.Hz)(j),m=new Set(i),n=bi(f,i),o=new Map([...k.entries()].map(([a,b])=>[a,(0,aS._W)(b)])),p=new Map([...l.entries()].map(([a,b])=>[a,b])),q=dG(await h.getProject(f),[...m],a.maxEvidencePerChapter),r=[],v=[...m].filter(Boolean).sort(),w=dB(c,c.queries,[]),x=dC(c,[]);for(let a of w.slice(0,x)){let b=await h.search(f,a,{scope:"project",filters:{filePaths:v},limit:Math.min(q,12),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});r.push(...b.results.filter(a=>(0,aQ.Tz)(f,a.filePath,m)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:o.get(a.filePath),processingType:p.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let y=dA(c,bl(r.filter(a=>(0,aQ.Tz)(f,a.filePath,m)),n),{maxItems:dD(q,c),maxChars:16e3,preservePinned:!0});bn(y,n,`regenerate:${c.id}`);let z=a.currentMarkdown||"",A=new Set(a.existingFacts??[]),B=c.requiredFacts.filter(a=>!A.has(a)&&!y.some(b=>(0,u.Lk)(b,a)));if(0===y.length)throw Error(`${(0,t.GQ)(c.title)} 缺少可支撑正文的项目资料证据`);let C=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",z?`> 当前文档上下文摘要:${z.replace(/\s+/gu," ")}`:"",`本章依据已锁定项目资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`,"","### 资料依据",...y.map(s.OF)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:C,evidence:y,missingFacts:B}}async function eu(a){var b;(0,z.Te)(a.signal);let c=(0,d.QJ)(a.templateId);if(!c)throw Error("Document template not found");let o=e.resolve(a.projectRoot||(0,g.aY)());if(!o)throw Error("No knowledge base project found");let p=(0,f.computeProjectId)(o),q=c,y=(0,g.Qh)(),A=[],B=[],C=(b,c=J)=>{let d=b?[...b].sort((a,b)=>{let c=B.indexOf(a.id),d=B.indexOf(b.id);return(c<0?Number.MAX_SAFE_INTEGER:c)-(d<0?Number.MAX_SAFE_INTEGER:d)}):void 0;a.onProgress?.([...c],d?{chapters:d}:void 0)},D=Math.max(15e3,Math.min(6e4,Number(process.env.DOCUMENT_GENERATION_HEARTBEAT_MS??3e4))),E=async(b,c=J)=>{let d=setInterval(()=>{a.signal?.aborted||C(A,c)},D);try{return await b()}finally{clearInterval(d)}},H=(0,d.N6)(q)||"none",I=(0,i.Mu)(H)?.name||H,J=[(0,aP.X5)({type:"role_binding",roleId:H,status:"running",message:`生成任务已创建,正在读取模板与角色配置:${q.name}`,details:[`当前项目:${p}`,`资料目录:${(0,g.NW)(o)}`,"正在读取项目资料包和提示词配置"],progress:{current:1,total:4,label:"初始化配置"}},{subtitle:I,roleName:I,order:0})];C();let P=(0,d.bj)(q),Q=P.bindings;(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在分析模板规范、用户要求与项目资料包",details:["解析 OUTLINE 与模板章节","读取项目资料包","自动识别资料类型并构建项目理解"],progress:{current:1,total:3,label:"准备分析"}},{subtitle:"生成准备",order:J.length})),C();let U=(0,c2.Qu)({template:q,requirement:a.requirement,projectRoot:o,facts:[]}).materialScope.selectedFiles;if(0===U.length)throw Error("模板未绑定可用项目资料包,请先在模板中绑定需要参与生成的项目文件夹。");let V=(0,aS.W9)(o,q,{requirement:a.requirement}),W=(0,aS._n)(q,V),{kindByPath:X,processingByPath:$}=(0,aS.Hz)(V),_=(0,aQ.fC)([...P.writerPrompts,...P.chapterPrompts]),ac=(0,t.cs)([{text:a.requirement,source:"用户需求",strict:!0},{text:_,source:"提示词角色",strict:!0}]),ad=ac.length>=2;ad&&(q={...c,chapters:ac});let ae=await E(()=>Promise.resolve((0,k.P)(o,{requirement:a.requirement,boundFilePaths:U})));(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在生成自动文档规格并评估生成准备度",details:[`项目资料:${U.length} 份`,`资料类型:${Object.values(V.groups).filter(a=>a.length>0).length} 类`,"生成事实字段与章节约束"],progress:{current:2,total:3,label:"规格评估"}},{subtitle:"生成准备",order:J.length})),C();let an=await E(()=>Promise.resolve((0,j.x)(q,a.requirement||""))),ao=an.spec,ap=function(a,b=""){let c=`${a?.id||""} ${a?.name||""} ${a?.category||""} ${a?.description||""} ${a?.outputTitle||""} ${b}`;return/施工组织设计|施工方案|危大工程|人、材、机|安全文明施工/u.test(c)?m:l}(q,a.requirement||""),ar=(0,r.$)({template:q,spec:ao,summary:ae,resolvedRoles:[]});if(!ar.ready)throw Error(`生成准备度不足:${ar.blockingIssues.join(";")}`);let aw=["【全文写作硬约束(每一章生成时必须遵守,违反即评审失分)】\n1. 禁止编造时间事实:开工日期、竣工日期、工期起止等未在项目资料中确认的日期一律不得写入正文;进度表述改用“开工后第 N 天”“第 N 周”等相对口径,或引用资料中已确认的日期。\n2. 禁止商务数据:暂列金额、暂估价、综合单价、清单合价、税率、投标报价等商务条款数据不得写入施工组织设计正文,商务口径只允许出现在项目信息表中。\n3. 禁止资料来源罗列话术:不得出现“根据/依据招标文件、工程量清单、图纸及答疑”式来源罗列句,直接陈述项目事实与施工安排;编制依据小节可集中列出依据文件。\n4. 禁止跨章复述概况:除“工程概况/项目概况”章节外,其余章节不得以“本项目为/本工程为”开头整段复述项目总体概况,应直接展开本章主题内容。\n5. 禁止后台内部话术:不得出现“工作包”“WRITER_MISSING_SECTION”“已确认资料”等系统内部术语与兜底话术,一律改写为正式施工组织设计表述。\n6. 合规数值红线(安全、职业健康、危大工程章节必须逐条对照,违反即合规失分):\n a. 高温停工按《防暑降温措施管理办法》(安监总安健〔2012〕89号):日最高气温达到40℃以上应停止当日室外露天作业;37℃~40℃时室外露天作业时间累计不得超过6小时且气温最高时段3小时内不得安排室外露天作业;35℃~37℃时应换班轮休缩短连续作业时间。不得写成42℃等其他阈值。\n b. 危大工程判定线按住建部令第37号及建办质〔2018〕31号:基坑(槽)土方开挖、支护、降水,开挖深度超过3m(含3m)属危大工程,超过5m(含5m)属超过一定规模(需专家论证);模板支撑搭设高度8m及以上或搭设跨度18m及以上属超过一定规模;落地式钢管脚手架搭设高度24m及以上属危大工程、50m及以上属超过一定规模,悬挑式脚手架分段架体搭设高度20m及以上属超过一定规模;采用非常规起重设备方法且单件起吊重量10kN及以上属危大工程、100kN及以上属超过一定规模。判定必须给出本项目对应参数(开挖深度/支撑高度/搭设高度/起吊重量),参数未在资料中确认的不得自行判定为危大或超危大。\n c. 专家论证程序按住建部令第37号:超过一定规模的危大工程专项方案应组织不少于5名符合专业要求的专家(从地方住建主管部门专家库选取)论证;修改后的方案由施工单位技术负责人审核签字、加盖单位公章,并由总监理工程师审查签字、加盖执业印章后方可实施。\n d. 监测预警值单一口径:同一监测指标(基坑位移速率、沉降预警值等)全文只能出现一个数值口径,不得前后矛盾;预警值优先引用设计文件明确值,无设计要求时按现行监测技术标准选取并注明依据。\n e. 自设数值自洽:自设的防护尺寸、频次、时间节点等数值必须与同章及跨章表述一致,且尽量引用现行规范依据;无规范依据的自设值不得写成硬性规定。",W.prompt,(0,k.F)(ae,{publicSafe:!0}),(0,j.N)(ao,an.sourceHash,{publicSafe:!0}),(0,r.R)(ar,{publicSafe:!0})].filter(Boolean).join("\n\n"),ax=[W.prompt,(0,k.F)(ae),(0,j.N)(ao,an.sourceHash),(0,r.R)(ar)].filter(Boolean).join("\n\n"),ay=(0,aQ.fC)([...P.writerPrompts,...P.formattingPrompts]),aC=(0,aQ.fC)([...P.writerPrompts,...P.chapterPrompts,...P.formattingPrompts]),aD=(0,aQ.fC)(P.prompts),aE=(0,h.I)().load().webAccess||{enabled:!1,allowProjectFacts:!1,maxQueriesPerChapter:2,maxResultsPerQuery:3,trustedDomains:[]},aG=(0,a8.c_)({promptTexts:[aw,aD].filter(Boolean).join("\n\n"),requirement:a.requirement,template:q,rolePrompts:P.prompts}),aH=[(0,a8.el)(aG),!aE.enabled?"":"公开资料补充使用规则:\n1. 公开资料只可用于补充通用规范、政策、工艺和措施。\n2. 不得使用公开资料新增或修改项目名称、建设地点、建设规模、工期、质量标准、工程量、材料规格、图纸参数、商务数据。\n3. 本地项目资料与公开资料冲突时,必须以本地项目资料为准。\n4. 不得在正文中出现任何检索过程、外部页面、工具调用或系统内部过程性表述。\n5. 不得把公开资料中的其他项目案例参数写入本项目正文。"].filter(Boolean).join("\n\n"),aI=[aw,aH,`生成前规划章节结构:
|
|
111
111
|
${(0,v.CK)(q)}`,ay||aC].filter(Boolean).join("\n\n"),aJ=[ax,aH,(0,aQ.fC)([...P.extractionPrompts,...P.referencePrompts])].filter(Boolean).join("\n\n"),aK=[aw,aH,(0,aQ.fC)([...P.writerPrompts,...P.chapterPrompts,...P.formattingPrompts])].filter(Boolean).join("\n\n");(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"document-preparation",status:"success",message:`模板规范与项目资料理解完成,识别 ${U.length} 份项目资料`,details:[`提示词绑定:${Q.length} 个`,`项目资料包:${V.materialRoots.join("、")||"当前知识库"}`,ad?`识别 OUTLINE 章节:${ac.length} 个`:"未识别显式 OUTLINE,使用模板章节"],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备",order:J.length})),C();let aU=new Set(U),aV=new Map([...X.entries()].map(([a,b])=>[a,(0,aS._W)(b)])),aW=new Map([...$.entries()].map(([a,b])=>[a,b]));(0,aP.fx)(J,(0,aP.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:"running",message:"正在读取项目资料包索引",details:["使用上传阶段已完成的解析、切片和索引结果","不在生成流程中重新解析或入库","准备按资料类型召回章节证据"],progress:{current:1,total:3,label:"读取索引"}},{subtitle:"知识库检索",order:J.length})),C();let aX=await E(()=>y.getProject(o)),aY=function(a,b){let c=new Set(b.filter(Boolean)),d=(a.listFiles?.()||[]).filter(a=>0===c.size||c.has(a.relativePath)),e=new Set(d.map(a=>a.relativePath)),f=[...c].filter(a=>!e.has(a)),g=d.filter(a=>0===Math.max(0,Math.ceil(Number(a.chunkCount)||0))).map(a=>a.relativePath),h=d.filter(a=>"error"===a.status).map(a=>a.relativePath),i="function"==typeof a.countPendingIndexJobs?a.countPendingIndexJobs():0,j="function"==typeof a.getVectorStatus?a.getVectorStatus():void 0,k=d.filter(a=>"error"!==a.status&&Math.max(0,Math.ceil(Number(a.chunkCount)||0))>0),l=k.map(a=>a.relativePath),m=k.reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0),n=[...dF("部分绑定文件未完成索引,已自动跳过",f),...dF("部分绑定文件没有可用切片,已自动跳过",g),...dF("部分绑定文件索引失败,已自动跳过",h)],o=c.size>0&&0===m?["所有绑定文件均无可用切片"]:[],p=[...n,...i>0?[`仍有 ${i} 个待索引任务,建议等待索引完成后生成`]:[],...j&&"ready"!==j.status?[`向量索引状态为 ${j.status},当前召回质量可能下降`]:[]];return{scopedRecords:d,usablePaths:l,missingFiles:f,emptyFiles:g,errorFiles:h,pendingJobs:i,vectorStatus:j,usableChunkCount:m,blockingIssues:o,warnings:p}}(aX,[...aU]);if(aY.blockingIssues.length>0)throw Error(`生成前知识索引不可用:${aY.blockingIssues.join(";")}`);let a_=new Set(aY.usablePaths),a0=bi(p,[...a_]),a1=dG(aX,[...a_],a.maxEvidencePerChapter),a4=aY.pendingJobs>0||0===aY.usableChunkCount,a5=function(a){let b=Math.max(0,Math.ceil(a.totalChunks||0)),c=Math.max(0,Math.ceil(a.loadedChunks||0)),d=Math.max(0,b-c),e=b>0?c/b:1,f=[...b>=1e3&&e<.35?["切片未完全预加载"]:[],...!1===a.vectorReady?["向量索引未就绪"]:[]];return{totalChunks:b,loadedChunks:c,omittedChunks:d,loadedRatio:e,highRisk:f.length>0,riskReason:f.join("、")||void 0}}({totalChunks:Math.min(aY.usableChunkCount,20*U.length),loadedChunks:Math.min(aY.usableChunkCount,20*U.length),vectorReady:aY.vectorStatus?"ready"===aY.vectorStatus.status:void 0});(0,aP.fx)(J,(0,aP.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:a4?"failed":"success",message:`已读取知识索引:项目资料 ${aY.scopedRecords.length} 份,可用切片 ${aY.usableChunkCount} 条`,details:[`项目资料:${aU.size} 份`,`可用证据文件:${a_.size} 份`,`向量状态:${aY.vectorStatus?.status||"unknown"}`,...aY.warnings,"后续将按招标正文/清单/图纸/补疑等资料类型召回"],progress:{current:3,total:3,label:"索引已就绪"}},{subtitle:"知识库检索",order:J.length})),C(),(0,z.Te)(a.signal);let a6=[],a9=[],ba={enabled:aE.enabled,queries:[],evidenceCount:0,filteredCount:0,chapters:[]},bb=[],bc=[],bd=[],be=[],bf=[],bh=-1,bj=new Map,bk=new Map,bo=(a,b)=>{let c=`${a}::${b.maxChunkContentChars}`;if(!bk.has(c))try{bk.set(c,aX.getFileDetail?.(a,b))}catch{bk.set(c,void 0)}return bk.get(c)},bp=async(a,b,c,d)=>{let e=dy(d),f=(0,z.c6)({query:a,scopedFilePaths:b,limit:c,weights:e,generationMode:!1}),g=bj.get(f);if(g)return g;let h=await y.search(o,a,{scope:"project",filters:{filePaths:b},limit:c,weights:e,generationMode:!1}).catch(()=>null),i=h?.results||[];return bj.set(f,i),i},bq={stage:(0,aP.X5)({type:"file_understanding",roleId:"project-understanding",status:"success",message:`已完成项目资料理解:${V.files.length} 份资料,${Object.values(V.groups).filter(a=>a.length>0).length} 类资料类型`,details:W.prompt.split("\n").slice(0,16)},{subtitle:"项目资料理解",order:J.length})};(0,aP.fx)(J,bq.stage),C();let br=bl(await c8({manager:y,project:aX,projectRoot:o,scopedFilePaths:[...aU].filter(Boolean).sort(),fileRoleByPath:aV,fileProcessingByPath:aW,signal:a.signal}),a0);bn(br,a0,"project-basic-evidence"),br.length>0&&(a6.push(...br),(0,aP.fx)(J,(0,aP.X5)({type:"knowledge_retrieval",roleId:"project-basic-evidence",status:"success",message:`已锁定项目基础事实证据 ${br.length} 条`,details:br.slice(0,8).map(a=>`${e.basename(a.filePath)}|${a.sectionTitle||"正文片段"}|score=${a.score.toFixed(2)}`)},{subtitle:"基础事实召回",order:J.length})),C());let bs=bm(T(a6,q,ao),a0),bt=bm(aa(a6),a0),bu=[...bs,...bt,...bm(ab(a6,ap),a0)],bv=(0,ef.hp)({projectRoot:o,template:q,requirement:a.requirement}),bw=[...bv?.facts||[],...bu],bx=await am(bw,bm(S(a6),a0),bb,ao,ap),by=(0,c2.Qu)({template:q,requirement:a.requirement,projectRoot:o,facts:bw,projectGraph:bv?.projectGraph,projectGraphSource:bv?"project-intelligence":void 0});for(let a of(0,c2.SU)(by))(0,aP.fx)(J,a);bv&&(0,aP.fx)(J,(0,aP.X5)({type:"file_understanding",roleId:"project-intelligence-cache",status:"success",message:`已复用入库后项目理解资产与绑定 scope 快照:${bv.files.length} 份绑定资料`,details:[`项目级缓存时间:${new Date(bv.cache.createdAt).toLocaleString()}`,`scope 快照:${bv.scopeSnapshot.scopeHash.slice(0,12)}`,`复用预计算事实:${bv.facts.length} 条`,`复用预计算项目图谱:${bv.projectGraph.works.length}工程/${bv.projectGraph.methods.length}工法/${bv.projectGraph.resources.length}资源`,`复用施工组织设计专项图谱:${bv.constructionOrganizationGraph.workPackages.length} 个工作包/${bv.constructionOrganizationGraph.controlMatrix.length} 条控制矩阵`,`图谱来源:${bv.cache.projectGraphMessage}`,`章节意图证据覆盖:${Object.keys(bv.evidenceByChapterId||{}).length}/${q.chapters.length} 章`,`排除正文不适用资料:${bv.files.filter(a=>!a.usableForBody).length} 份`]},{subtitle:"项目理解缓存 / Scope 快照"})),C();let bz=by.baseProjectGraph;if(!bv){(0,aP.fx)(J,(0,aP.X5)({type:"file_understanding",roleId:"project-graph",status:"running",message:`正在临时构建完整项目图谱:${a6.length} 条证据 → LLM 结构化提取`,details:["缓存缺失或版本过期,建议重新构建项目理解缓存;本次生成将临时构建完整项目图谱。","提取:工程内容、施工方法、材料设备、技术标准、重点难点"],progress:{current:2,total:3,label:"项目图谱"}},{subtitle:"项目资料图谱分析",order:J.length})),C();let b=await E(()=>(0,ee.i)({evidence:a6,signal:a.signal,projectRoot:o,requirement:a.requirement,templateId:q.id}),J);if(!b.graph)throw Error(`完整项目图谱构建失败:${b.stage.message||b.stage.status}`);bz=b.graph,(0,aP.fx)(J,b.stage),C()}bz&&(W=(0,aS._n)(q,V,bz));let bA=function(a){var b;let c=(0,z.c6)({version:"canonical-facts-v7",rulesHash:(0,cQ.TG)(a.projectRoot),requirement:a.requirement||"",templateId:a.templateId||"",requiredKeys:a.requiredKeys||[],facts:a.facts.map(a=>({key:a.key,fieldId:a.fieldId,fieldName:a.fieldName,value:a.value,sourceFile:a.sourceFile,roleId:a.roleId,confidence:a.confidence})).sort((a,b)=>`${a.sourceFile}${a.key}${a.value}`.localeCompare(`${b.sourceFile}${b.key}${b.value}`)),graphHash:a.projectGraph?(0,z.c6)(a.projectGraph):"",markdownHash:a.markdown?(0,z.c6)(a.markdown.slice(0,2e4)):""}),d=function(a,b){let c=cX(a);if(c)try{let a=JSON.parse(O.readFileSync(e.join(c,`canonical-facts-${b}.json`),"utf8"));return a&&a.byKey&&Array.isArray(a.scopeConflicts)?a:void 0}catch{return}}(a.projectRoot,c);if(d)return d;let f=a.facts||[],g=c$(f,(0,cQ.bC)(a.projectRoot));for(let a of g.map(a=>({caseType:"scope_conflict_arbitration",recordedAt:Date.now(),kind:a.kind,scope:a.scope,values:a.values.map(a=>({value:a.value,unit:a.unit,sourceFile:a.sourceFile,priority:a.priority})),winner:a.resolution,confidence:a.confidence,manualReviewRequired:!a.resolution})))cP("arbitration-cases.jsonl",a);let h=c1(f,g),i=cV({facts:h,markdown:a.markdown}),j={};for(let[a,b]of i.entries())j[a]=function(a){let b=a.source.includes("generated_markdown")?"generated_markdown":a.source.includes("evidence")?"evidence":"structured_fact";return{key:a.fieldKey,label:a.label,value:a.value,normalizedValue:Z(a.value),sourceType:b,sourceFile:a.source,confidence:a.confidence,priority:cW(b),locked:cW(b)>=80,selectedReason:a.selectedReason}}(b);if(j.project_scale){let a=j.project_scale;if(/占地|用地/u.test(a.value)&&/建筑面积/u.test(a.value)){let b=a.value.search(/(?:单体)?总?建筑面积/u);if(b>0){let c=Y(a.value.slice(b)).trim();j.project_scale={...a,value:c,normalizedValue:Z(c),selectedReason:`${a.selectedReason};混合口径已净化,scale 只取建筑面积段`}}}}let k=[];for(let a of[{key:"project_name",label:"项目名称",pattern:/项目名称|工程名称|招标项目名称|project_name/u,bucket:"projectIdentity",valueType:"text"},{key:"project_code",label:"项目编号",pattern:/项目编号|招标项目编号|project_code/u,bucket:"projectIdentity",valueType:"identifier"},{key:"owner",label:"招标人",pattern:/招标人|建设单位|发包人|owner/u,bucket:"projectIdentity",valueType:"organization"},{key:"project_location",label:"建设地点",pattern:/建设地点|实施地点|project_location/u,bucket:"projectIdentity",valueType:"location"},{key:"project_scale",label:"建设规模",pattern:/建设规模|工程规模|project_scale/u,bucket:"projectScope",valueType:"scale"},{key:"construction_scope",label:"施工范围",pattern:/施工范围|招标范围|工程范围/u,bucket:"projectScope",valueType:"text"},{key:"duration",label:"计划工期",pattern:/计划工期|合同工期|总工期|schedule_requirement|duration/u,bucket:"schedule",valueType:"duration"},{key:"quality_target",label:"质量目标",pattern:/质量标准|质量目标|quality_standard/u,bucket:"quality",valueType:"standard"}]){let b=function(a,b,c,d,e){let f=cR.find(a=>a.key===b);return a.filter(a=>d.test(`${a.fieldId||""}${a.key||""}${a.fieldName||""}`)).map(a=>(function(a,b,c){let d=(0,z.lG)(a.value),e=function(a){let b=`${a.sourceFile||""} ${a.sourceRef?.sectionTitle||""} ${a.roleId||""}`;return/补疑|答疑|澄清|补充|更正|修改/u.test(b)?"addendum":/合同/u.test(b)?"contract":/招标|公告|前附表|需求书/u.test(b)?"tender":/清单|工程量|BOQ|报价/u.test(b)?"boq":/图纸|设计|CAD|DWG/u.test(b)?"drawing":/规范|标准/u.test(b)?"standard":"structured_fact"}(a);return{key:b,label:c,value:d,normalizedValue:Z(d),sourceType:e,sourceFile:a.sourceFile,sourceRef:a.sourceRef?.sectionTitle,confidence:Math.round(100*(a.confidence||.5)),priority:cW(e),locked:cW(e)>=80,selectedReason:"按资料来源优先级和字段置信度决策"}})(a,b,c)).filter(a=>a.value&&!/资料未明确|系统暂未确认/u.test(a.value)).filter(a=>{let d=e??f?.valueType;return!d||"text"===d||!cT(a.value,{key:b,label:c,aliases:[],valueType:d}).rejected}).sort((a,b)=>b.priority-a.priority||b.confidence-a.confidence||a.value.length-b.value.length)}(h,a.key,a.label,a.pattern,a.valueType);!j[a.key]&&b.length>0&&(j[a.key]=b[0]);let c=function(a,b,c){let d=[...new Map(c.map(a=>[a.normalizedValue,a])).values()];if(d.length<=1)return;let e=Math.max(...d.map(a=>a.priority)),f=d.filter(a=>a.priority===e);return{key:a,label:b,values:d.map(a=>({value:a.value,sourceFile:a.sourceFile,priority:a.priority,confidence:a.confidence})),decision:1===f.length?"highest_priority_selected":"manual_review_required"}}(a.key,a.label,b);c&&k.push(c)}let l=(b=a.projectGraph)?[...(b.resources||[]).map(a=>({key:`resource_${a.type}_${a.name}`,label:"equipment"===a.type?"机械设备":"labor"===a.type?"劳动力":"材料资源",value:[a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" "),normalizedValue:Z([a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:cW("projectGraph"),locked:!1,selectedReason:"来自项目图谱资源节点"})).filter(a=>a.value),...(b.risks||[]).map(a=>({key:`risk_${a.risk}`,label:"风险源",value:[a.risk,a.level,a.mitigation].filter(Boolean).join(" "),normalizedValue:Z([a.risk,a.level,a.mitigation].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:cW("projectGraph"),locked:!1,selectedReason:"来自项目图谱风险节点"})).filter(a=>a.value)]:[],m=l.filter(a=>/resource_/u.test(a.key)),n=l.filter(a=>/risk_/u.test(a.key));for(let a of l)j[a.key]||(j[a.key]=a);let o=(a.requiredKeys||[]).filter(a=>!j[a]).map(a=>({key:a,label:cR.find(b=>b.key===a)?.label||a,reason:"未从用户输入、招标资料、清单、图纸或项目图谱中确认该事实"})),p={projectIdentity:{projectName:j.project_name,projectCode:j.project_code,owner:j.owner,location:j.project_location},projectScope:{scale:j.project_scale,constructionScope:j.construction_scope},schedule:{duration:j.duration||j.schedule_requirement},quality:{target:j.quality_target||j.quality_standard},safety:{risks:n},resources:{resources:m},environment:{},constraints:{},byKey:j,conflicts:k,gaps:o,scopeConflicts:g},q=cX(a.projectRoot);return q&&O.writeFileSync(e.join(q,`canonical-facts-${c}.json`),JSON.stringify(p,null,2)),p}({facts:bw,projectGraph:bz,requiredKeys:cR.map(a=>a.key),projectRoot:o,requirement:a.requirement,templateId:q.id});bx.canonical=bA;let bB=(0,t.effectiveTemplateChapters)(q,ao,{preserveExplicitOutline:ad}),bC=(0,G.dK)({template:q,chapters:bB,requirement:a.requirement}).chapters,bD=a6.filter(a=>/评审|评分标准|评分办法|详细评审/u.test(`${a.sectionTitle||""}${a.content}`)).map(a=>a.content),bE=function(a){let b=a.join("\n"),c=new Map;for(let a of b.matchAll(/(\d{1,2})\s*[.、.]\s*([^;。\n]{4,60})/gu)){let b=a[2].trim().replace(/[“”"'"]/gu,"");if(!/[\u4e00-\u9fa5]{3}/u.test(b)&&!/[杯奖]/u.test(b)||/AI|大模型|评审|评分|分值|分项|子项|满分|得分|投标人须|详见|招标文件/u.test(b)||/公共资源|电子交易|加密|投标|开标|评标委员会/u.test(b))continue;let d=Number(a[1]);c.has(d)||c.set(d,{index:d,text:b,title:function(a){let b=a.replace(/^针对/u,"").replace(/^确保/u,"").replace(/的保障体系与措施$/u,"").replace(/的管理体系与措施$/u,"").replace(/保障体系与措施$/u,"").replace(/管理体系与措施$/u,"").replace(/[,、;,;]+$/u,"").trim();return!/[\u4e00-\u9fa5]{3}/u.test(b)&&!/[杯奖]/u.test(b)||/工期与质量/u.test(b)?"":b.length>24?b.slice(0,24):b}(b)})}return[...c.values()]}(bD);bD.length>0&&0===bE.length&&(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"bid-structure-audit",status:"skipped",message:"评审章节证据存在但未提取到评分条目标题:评分标准编号条目提取为空,承接审计将静默通过",details:["请检查招标文件评标办法章节编号格式;评分项要求(创优目标/绿色等级/禁编日期)由评分项要求提取通道覆盖"]},{subtitle:"评标结构校验",order:J.length}));let bF=await (0,M.Mv)(bE.map(a=>a.title),bC.map(K)),bG=L({template:q,chapters:bC,requirement:a.requirement,evaluationItems:bE,semanticSimilarity:bF}),bH=[];for(let a of[...aU].sort()){if(!/招标|补疑|答疑|评标/u.test(a))continue;let b=bo(a,{maxChunkContentChars:6e3});if(b?.chunks?.length)for(let c of b.chunks)bH.push({chapterId:"tender-requirements",filePath:b.file?.relativePath||a,score:1,content:c.content||"",roleId:aV.get(a),processingType:aW.get(a),sectionTitle:c.sectionTitle,source:"pinned-evidence"})}let bI=bH.length>0?bH:(0,s.QR)([...a6.filter(a=>/招标|评标|投标须知|专用合同|合同条款|技术标准|技术要求/u.test(`${a.filePath||""}${a.sectionTitle||""}`)),...a6.filter(a=>!/招标|评标|投标须知|专用合同|合同条款|技术标准|技术要求/u.test(`${a.filePath||""}${a.sectionTitle||""}`))],{maxItems:60,maxChars:1e5,preservePinned:!0,maxItemsPerFile:60}),bJ=await E(()=>aq(bI,{signal:a.signal}));!at(bJ)&&bI.length>0&&(bJ=await E(()=>aq(bI,{signal:a.signal})));let bK=await as(bH);if(bK.length>0&&(!(b=bJ)||0===b.awardObjectives.length&&0===b.awardClauses.length&&!b.greenBuildingGrade&&!b.smartSiteGrade&&!b.assemblyRate&&0===b.systematicBenchmarks.length)){let b=await E(()=>aq(bK,{signal:a.signal,maxSourceChars:3e4}));at(b)&&(bJ=function(a,b){let c=(a,b)=>a.length>0?a:b;return{...a,awardObjectives:c(a.awardObjectives,b.awardObjectives),specialQualityStandards:c(a.specialQualityStandards,b.specialQualityStandards),awardClauses:c(a.awardClauses,b.awardClauses),greenBuildingGrade:a.greenBuildingGrade||b.greenBuildingGrade,smartSiteGrade:a.smartSiteGrade||b.smartSiteGrade,assemblyRate:a.assemblyRate||b.assemblyRate,systematicBenchmarks:c(a.systematicBenchmarks,b.systematicBenchmarks),frontScheduleClauses:c(a.frontScheduleClauses,b.frontScheduleClauses),prohibitionNotes:c(a.prohibitionNotes,b.prohibitionNotes),pageLimit:a.pageLimit||b.pageLimit,evaluationScheme:a.evaluationScheme||b.evaluationScheme,dateFabricationProhibited:a.dateFabricationProhibited||b.dateFabricationProhibited,extracted:a.extracted||b.extracted}}(bJ,b),(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"tender-mandatory-extraction",status:"success",message:"必提条款窄通道补提完成(主提取漏提字段已补齐)",details:aB(b)},{subtitle:"评分项要求提取",order:J.length})),C())}at(bJ)?((0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"success",message:"招标文件评分项要求结构化提取完成",details:aB(bJ)},{subtitle:"评分项要求提取",order:J.length})),C()):bI.length>0&&((0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"skipped",message:"评分项要求提取未获得有效结果(模型不可用或资料中无要求),零响应检测自动跳过",details:[]},{subtitle:"评分项要求提取",order:J.length})),C());let bL=(0,aN.w9)({chapters:bG.enrichedChapters,projectGraph:bz,canonicalFacts:bA});q={...q,chapters:bL};let bM=new Map;if(bz){let a=new Set;for(let b of[...bz.works,...bz.methods,...bz.resources,...bz.schedule,...bz.standards,...bz.risks,...bz.requirements,...bz.siteConditions])(b.sourceFiles||[]).forEach(b=>a.add(b));for(let b of bL){let c=[b.title,b.purpose,...b.sections||[],...b.requiredFacts||[],...b.queries||[]].join(" "),d=a=>a&&((0,es.C1)(a,c,.18)||(0,es.C1)(a,b.title,.12)),e=/概况|总体|部署|施工|进度|工期|质量|安全|资源|人材机|材料|机械|劳动力|风险|危大|绿色|环保/u.test(c),f=bz.works.filter(a=>a.name&&(d(a.name)||e)),g=bz.methods.filter(a=>a.name&&(d(a.name)||(a.applicableWorks||[]).some(d)||e)),h=bz.resources.filter(a=>a.name&&(d(a.name)||/资源|人材机|材料|机械|劳动力/u.test(c)&&/material|equipment|labor/u.test(a.type))),i=bz.gaps.filter(a=>d(a)||e),j=new Set;for(let a of f)(a.sourceFiles||[]).forEach(a=>j.add(a));for(let a of g)(a.sourceFiles||[]).forEach(a=>j.add(a));for(let a of h)(a.sourceFiles||[]).forEach(a=>j.add(a));0===j.size&&e&&[...a].slice(0,12).forEach(a=>j.add(a)),bM.set(b.id,{graphFiles:j,graphBoqItems:h.map(a=>({name:a.name,quantity:a.quantity,unit:a.unit,sourceFiles:a.sourceFiles||[]})),graphWorks:f.map(a=>a.name),graphMethods:g.map(a=>a.name),gaps:i})}bv||((0,aP.fx)(J,(0,aP.X5)({type:"file_understanding",roleId:"project-graph-match",status:"success",message:`图谱→章节映射完成:${bz.works.length}工程 ${bz.methods.length}工法 ${bz.resources.length}资源 → ${bL.length}章`,details:bL.map(a=>{let b=bM.get(a.id);return`${(0,t.GQ)(a.title)}:匹配文件${b?.graphFiles.size||0}个,BOQ项${b?.graphBoqItems.length||0}个`})},{subtitle:"图谱章节映射"})),C())}let bN=bL,bO=(0,ef.TD)(bv?.constructionOrganizationGraph)||bv?.constructionOrganizationContext,bP=[W.prompt,bO].filter(Boolean).join("\n\n"),bQ=[bP,F({template:{...q,chapters:bN},chapters:bN,factsModel:bx,requirement:a.requirement,scopeConflicts:bA.scopeConflicts})].filter(Boolean).join("\n\n"),bR={...q,chapters:bN},bS=(0,a8.My)([aI,a.requirement||""].filter(Boolean).join("\n\n"),bN),bT=(0,w.tF)({requirement:a.requirement,promptTexts:aI,template:bR,chapters:bN,spec:ao}),bU=0,bV=0,bW=await (0,z.l$)(bN.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b,chapterIndex:c})=>{if(b.sections?.length){bU+=1;let a=bS.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,t.GQ)(a.chapterTitle)===(0,t.GQ)(b.title)).flatMap(a=>a.requiredSections.sort((a,b)=>(a.order||0)-(b.order||0)).map(a=>a.title)),d=(0,a8.k2)([...a,...b.sections],b.title);return{...b,sections:d.length?d:(0,a8.k2)(b.sections,b.title)}}bV+=1;let d=(0,s.QR)(a6.filter(a=>a.chapterId===b.id||(0,u.Lk)(a,b.title)),{maxChars:(0,s.Pc)(bT.chapterTargets.get(b.id)||1200),preservePinned:!0}),e=W.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",f=ds(P,b),g=await (0,a8.SP)({template:bR,chapter:b,chapterIndex:c,evidence:d,promptTexts:f.promptTexts,projectContext:bQ,requirement:a.requirement,roleContext:e,targetWords:bT.chapterTargets.get(b.id)||1200,structuralRules:bS,signal:a.signal}),h=bS.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,t.GQ)(a.chapterTitle)===(0,t.GQ)(b.title)).flatMap(a=>a.requiredSections.map(a=>`强制小节:${a.title}`));if((0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"section-planning",promptId:f.primaryPromptId,status:g.length?"success":"failed",message:`${(0,t.GQ)(b.title)} 小节规划${g.length?`生成 ${g.length} 个小节`:"未生成可用小节"}`,details:[...f.promptDetails,...h,...g.length?g.map(a=>`规划小节:${a}`):["规划结果为空或被污染过滤"]]},{subtitle:"小节规划"})),!g.length)throw Error(`${(0,t.GQ)(b.title)} 小节规划未生成可用小节`);return{...b,sections:g}},{kind:"llmRepair",targetWords:bT.targetChars||4e3,concurrency:2}),bX=(0,G.dK)({template:q,chapters:bW,requirement:a.requirement}),bY=bX.chapters;{let a=bX.report;a.unattached.length>0?(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"construction-org-outline-unattached",status:"success",message:`标准模块挂靠:${a.totals.attachedModules} 个模块、${a.totals.sectionCount} 个小节;${a.unattached.length} 个可选模块未挂靠(无语义匹配章节,已记录)`,details:a.unattached.map(a=>`未挂靠:${a.moduleTitle}(${a.sections.length} 小节,${a.level})`)},{subtitle:"标准模块挂靠"})):(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"construction-org-outline-attached",status:"success",message:`标准模块挂靠:${a.totals.attachedModules} 个模块、${a.totals.sectionCount} 个小节全部挂靠`,details:a.attached.map(a=>`${"fallback"===a.kind?"兜底挂靠":"挂靠"}:${a.moduleTitle} → ${a.chapterTitle}`)},{subtitle:"标准模块挂靠"}))}let bZ=await (0,M.Mv)(bE.map(a=>a.title),bY.map(K)),b$=L({template:q,chapters:bY,requirement:a.requirement,evaluationItems:bE,semanticSimilarity:bZ});bN=(0,aN.w9)({chapters:b$.enrichedChapters,projectGraph:bz,canonicalFacts:bA}),(b$.issues.length>0||bG.issues.length>0)&&(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"bid-structure-audit",status:b$.issues.some(a=>"blocker"===a.severity)?"failed":"success",message:`评标结构符合性校验:${b$.diagnostics.length} 个结构组,${b$.diagnostics.filter(a=>"satisfied"===a.status).length} 个已满足,${b$.diagnostics.filter(a=>"missing"===a.status&&"required"===a.level).length} 个必查缺失(已自动补挂),${b$.diagnostics.filter(a=>"fragmented"===a.status).length} 个分散`,details:[...b$.diagnostics.map(a=>`${"satisfied"===a.status?"满足":"fragmented"===a.status?"分散":"补挂"}:${a.groupTitle}${"missing"===a.status?`(补挂小节:${a.missingSections.join("、")})`:""}`),...b$.issues.map(a=>`提示:${a.message}`).slice(0,8)]},{subtitle:"评标结构校验"})),q={...q,chapters:bN};let b_=await (0,M.Mv)(av(bJ).map(({item:a})=>au(a)),bN.map(a=>az(a.title))),b0=await aA(bJ,bN,b_);b0.length>0&&((0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"tender-requirement-routing",status:"success",message:`评分项要求章节级路由:${b0.length} 条要求已路由到责任章节(生成时显性响应)`,details:b0.map(a=>`${a.kind}“${a.item.text}” → ${a.chapterTitle}(相似度 ${a.score.toFixed(2)})`)},{subtitle:"要求响应路由",order:J.length})),C());let b1=await aF(),b2=await aL(),b3=function(a){let b=(0,G.yt)({template:{id:"runtime",name:a.templateName||"",outputTitle:"",description:"",category:"",chapters:a.chapters},chapters:a.chapters,requirement:a.requirement}),c=/施工组织设计|施工组织|施组|技术标/u.test(`${a.templateName||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`)||b.length>0,d=Object.values(a.factsModel?.canonical?.byKey||{}).map(a=>`${a.label}=${a.value}`),e=d.filter(a=>/建设规模|建筑面积|占地|用地面积|装配|层数|高度/u.test(a)).slice(0,8),f=(a.tenderRequirements?.frontScheduleClauses||[]).map(a=>a.text).filter(Boolean).slice(0,12),g=["正文必须落到本项目资料已确认的事实,不得使用模板化空话或跨小节复制段落","措施类内容写成“责任岗位+执行动作+量化标准+检查频次+整改时限+复查销项”闭环句式:同一自然段内三要素(责任岗位+检查频次+整改闭环)须同时出现,全文每 1500 字至少 1 段闭环句式","正文每 1000 字至少落位 6 处带单位量化工艺参数(mm/MPa/养护天数/间距/压实度等),施工流程与施工方法须有明确的工序顺序表达(形式由模型自然选择、不做统一要求:顺序词叙述、编号步骤、有序/无序列表或箭头链均可),每个分部分项方案至少 1 处 3 环节以上工序顺序表达",'专业工程类小节按"施工概况/施工流程/施工方法"三段式展开,小节标题用专业工程正式名称(如"拆除工程"),禁止使用"工作包"等后台概念命名','质量目标与创优目标必须使用招标文件原文的奖项名称逐字落位,禁止替换、降级或省略为其他奖项名称(如把招标文件指定奖项写成其他奖项);招标文件"确保/达到"类等级要求不得弱化为"争创/争取"',...f.length?[`投标人须知前附表响应条款(正文必须逐条落位或遵守,零响应即评标失分):${f.map((a,b)=>`${b+1}.${a}`).join(";")}`]:[]],h=a.chapters.map(b=>{var c;let d=(c=b.title,aM.find(a=>a.pattern.test(c))),e=(a.projectGraph?.works||[]).filter(a=>a.name&&(b.title.includes(a.name.slice(0,2))||/概况|总体|施工内容|方案|施工/u.test(b.title))).slice(0,10),f=(a.projectGraph?.resources||[]).filter(a=>a.quantity&&/概况|资源|总体|施工内容|方案/u.test(b.title)).slice(0,12).map(a=>({itemCode:"",itemName:a.name,quantity:a.quantity,unit:a.unit}));return{chapterId:b.id,chapterTitle:b.title,writingGoal:d?.goal||"结合本章标题与项目资料事实展开专业内容,避免泛化叙述",mustCover:[...d?.mustCover||[],...(b.requiredFacts||[]).slice(0,6)],factDomains:[...b.requiredFacts||[],...e.map(a=>a.name)].slice(0,10),evidenceRefs:b.queries.slice(0,6).map(a=>({filePath:a,kind:"query",priority:"should"})),boqTargets:f,drawingTargets:[],gaps:[]}});return{documentType:c?"施工组织设计":"专业文档",globalWritingFocus:c?[...g,"招标硬性要求必须逐项明确响应:质量标准、计划工期、缺陷责任期与保修、安全文明目标、项目经理及组织机构;工期/质量/保修类承诺可在概况与质量章节落位,不得遗漏",...e.length?[`项目规模事实卡(口径裁决值,正文引用规模数据必须与之一致,不得混淆总占地与建筑总量口径):${e.join(";")}`]:[],...d.length?[`项目可信基础事实(写作时必须优先落位):${d.slice(0,10).join(";")}`]:[]]:g.slice(0,2),chapters:h}}({chapters:bN,factsModel:bx,projectGraph:bz||void 0,requirement:a.requirement,templateName:q.name,tenderRequirements:bJ}),b4=[...(0,cJ.$v)({templateName:q.name,chapterTitles:bN.map(a=>a.title),requirement:a.requirement,targetWords:bT.targetChars||0}),...(0,cJ.Al)({templateName:q.name,chapterTitles:bN.map(a=>a.title),requirement:a.requirement})];b4.length>0&&(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"reference-benchmark",status:"success",message:"已读取模板参考库同类工程画像,作为质量软性参考注入文档蓝图",details:b4},{subtitle:"参考画像注入",order:J.length}));let b5=F({template:q,chapters:bN,factsModel:bx,requirement:a.requirement,referenceLines:b4,scopeConflicts:bA.scopeConflicts});bQ=[bP,b5,function(a){if(!a||!at(a))return"";let b=[],c=(a,c)=>{for(let d of c)b.push(`${a}:${d.text}${d.source?`(来源:${d.source})`:""}。`)};return(c("本项目创优目标(必须全文显性响应,质量目标章节必须逐条承接并配套创优保证措施;奖项名称必须与招标文件原文逐字一致,禁止替换、降级或省略为其他奖项名称,“确保/达到”不得弱化为“争创”)",a.awardObjectives),c("特殊质量标准(实质性要求,质量目标必须显性写明)",a.specialQualityStandards),c("奖项条款(与创优目标关联,创优保证措施须覆盖申报与兑现条件)",a.awardClauses),a.greenBuildingGrade&&b.push(`绿色建筑等级要求:${a.greenBuildingGrade.text}。必须编制系统性绿色施工保证方案(节能/节地/节水/节材/室内环境指标控制与验收),不得仅以单一指标替代整体响应。`),a.smartSiteGrade&&b.push(`智慧工地等级要求:${a.smartSiteGrade.text},智慧工地建设方案须达到该等级。`),a.assemblyRate&&b.push(`装配率要求:${a.assemblyRate.text},装配式施工方案须覆盖水平构件与相关部品。`),c("体系基准要求(必须逐项覆盖表述,不得零散遗漏)",a.systematicBenchmarks),c("投标人须知前附表响应条款(施组必须逐条响应或遵守,零响应即评标失分)",a.frontScheduleClauses),a.dateFabricationProhibited&&b.push("禁止编造开工日期:招标文件以开工令时间为准,正文不得自行设定具体日历开工日期,一律表述为“以开工令时间为准”。"),c("禁止性/约束性要求(正文不得违反)",a.prohibitionNotes),a.pageLimit&&b.push(`篇幅建议:${a.pageLimit.text},注意控制篇幅与语言精练度。`),a.evaluationScheme&&b.push(`评标办法(章节结构的最强约束):${a.evaluationScheme.text}。正文章节结构必须逐项覆盖技术文件详细评审内容项,各评审项内容要对应到具体章节并做到针对性强、可落地;语言精练、不重复堆砌。`),0===b.length)?"":`【招标文件评分项要求(系统从绑定资料提取,必须逐条响应,零响应即评标失分)】
|
|
112
112
|
${b.map((a,b)=>`${b+1}. ${a}`).join("\n")}`}(bJ)].filter(Boolean).join("\n\n"),bv||(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"document-blueprint",status:"success",message:"已生成全局事实主表与文档蓝图,后续章节和小节将共用同一套专业约束",details:b5.split("\n").slice(0,12)},{subtitle:"全局蓝图"}));let b6=(0,w.tF)({requirement:a.requirement,promptTexts:aI,template:q,chapters:bN,spec:ao}),b7=function(a){let b=Date.now(),c=a.template.chapters.map(a=>{let b=a.sections?.length?a.sections:[a.title];return{chapterId:a.id,title:a.title,purpose:a.purpose||en(a.title),requiredFacts:[...new Set([...a.requiredFacts||[],a.title])],requiredGraphNodes:[a.title],evidenceQueries:[...new Set([a.title,...a.queries||[],...a.requiredFacts||[]])],qualityRules:["项目专属事实必须来自锁定资料范围,不得混入其他项目名称","法规规范等公共知识不受锁定范围限制","不得出现后台话术和兜底措辞","章节必须覆盖规划小节"],forbiddenPhrases:eg,sections:b.map(b=>({title:b,objective:en(b),requiredFacts:[...new Set([b,...a.requiredFacts||[]])],requiredGraphNodes:[b],evidenceQueries:[...new Set([a.title,b,...em(a.title),...em(b),...a.queries||[],...a.requiredFacts||[]].filter(Boolean))],forbiddenPhrases:eg,minChars:/项目特点.*重点.*难点|重点.*难点.*分析/u.test(b)?1800:/项目主要施工内容|主要分部分项工程施工方案|主要施工方法/u.test(b)?2200:/原材料进场复试|见证取样|危大工程专项施工方案审批流程/u.test(b)?800:/施工部署|施工流水|主要施工机械|劳动力|材料进场|资源动态|质量控制点|危大工程|安全隐患|临时用水|临时用电/u.test(b)?760:/概况|说明|依据/u.test(b)?260:420}))}});return{plan:{planId:`plan-${(0,z.c6)({templateId:a.template.id,scope:a.context.materialScope.scopeHash,chapters:c.map(a=>a.title)}).slice(0,10)}`,title:a.title||a.template.name,chapters:c,requiredGlobalFacts:["项目名称","工期","质量标准","招标范围"],forbiddenPhrases:eg,qualityRules:["资料范围先锁定","基础图谱必跑","章节任务先于正文","Reviewer 通过后才能导出"]},node:{id:"document-planner",type:"document_planner",status:"completed",startedAt:b,completedAt:Date.now(),outputSummary:`${c.length} 章、${c.reduce((a,b)=>a+b.sections.length,0)} 条细目任务`,metrics:{chapters:c.length}}}}({template:q,context:by,title:q.name});by.documentPlan=b7.plan,by.nodes.push(b7.node),(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:b7.node.outputSummary||"Agent 文档规划完成",details:b7.plan.chapters.map(a=>`${a.title}:${a.sections.length} 条细目`)},{subtitle:"Agent Document Planner",order:J.length})),B=bN.map(a=>a.id);let b8=b6.targetChars||[...b6.chapterTargets.values()].reduce((a,b)=>a+b,0),b9=(0,aQ.JP)({template:q,targetWords:b8,requirement:a.requirement,materialFileCount:U.length,evidenceCount:a6.length}),ca=(0,aR.C)({template:q,chapters:bN,targetWords:b8,requirement:a.requirement,materialFileCount:U.length,evidenceCount:a6.length,hasVeryLargeExplicitChapter:bN.some(a=>(a.sections||[]).filter(Boolean).length>=30),configuredChapterConcurrency:Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),strategy:b9}),cb=(0,aQ.Zk)(b9);(0,N.t5)(b8),(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${b9.mode} 生成策略:章节审查 ${b9.enableChapterReview?"启用":"跳过"}、全局审查 ${b9.enableGlobalReview?`${b9.globalReviewSamplingRate&&b9.globalReviewSamplingRate<1?`抽检 ${Math.round((b9.globalReviewSamplingRate??1)*100)}%`:"启用"}`:"跳过"}、最终质量审查 ${b9.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${b9.enableDocumentBudgetExpansion?"启用":"跳过"}`,details:ca.triggers},{subtitle:"后台自动策略"})),bA.scopeConflicts.length>0&&(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"scope-conflict-resolution",status:"success",message:`源级数据口径冲突已裁决(补疑/澄清修正文件权威最高):${bA.scopeConflicts.map(a=>a.resolution?`${a.scope} → ${a.resolution}`:`${a.scope} → 待人工复核`).join(";")}`,details:bA.scopeConflicts.flatMap(a=>a.values.map(a=>`来源「${a.sourceFile||"未知文件"}」取值 ${a.value}${a.unit}`))},{subtitle:"数据口径裁决"}));let cc=ad?"OUTLINE 章节":"模板章节",cd=(0,aP.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${bV} 章由 LLM 基于${cc}、项目资料理解和证据规划小节,${bU} 章已由模板显式提供小节并跳过规划`},{subtitle:"小节规划策略"}),ce=ad?`;识别到 OUTLINE 章节 ${ac.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",cf=[...P.prompts.map(a=>`${a.category}|${a.roleId}|${a.id}|${a.name}|${a.bindingSource}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`),...P.unresolvedRoles.map(a=>`unresolved|${a}|项目角色配置中的提示词角色不存在`),...P.missingResourceRoles.map(a=>`missingResource|${a}|提示词角色未显式绑定资源`)];(0,aP.fx)(J,(0,aP.X5)({type:"role_binding",roleId:H,status:"success",message:`已绑定项目资料 ${U.length} 份、${P.prompts.length} 个有效提示词;写作 ${P.writerPrompts.length}、章节 ${P.chapterPrompts.length}、抽取 ${P.extractionPrompts.length};已自动抽取运行时规则 ${aG.executionSummary.length} 条${ce}`,details:[...cf,...aG.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:I,roleName:I})),(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${aG.executionSummary.length} 条,版本 ${aG.sourceHash}`,details:aG.executionSummary.length?[...aG.executionSummary,`必需表格:${aG.requiredTables.join("、")||"无"}`,`必含关键词:${aG.requiredKeywords?.join("、")||"无"}`,`禁含内容:${aG.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})),(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"document-readiness",status:ar.ready?"success":"failed",message:"生成准备度:绑定资料已就绪",details:ar.diagnostics},{subtitle:"生成准备度检查"})),(0,aP.fx)(J,cd),C();let cg=Math.round(([...b6.chapterTargets.values()].reduce((a,b)=>a+b,0)||b6.targetChars||0)/Math.max(1,bN.length)),ch=Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),ci=ca.chapterConcurrency,cj=ca.reviewConcurrency;(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节流水线调度:${bN.length} 章全部同批并行生成,审查修复 ${cj} 路流水线(章节生成完立即进入审查,与后续章节生成重叠)`,details:[`有效章节数:${bN.length}`,`平均章节目标:${cg} 字`,Number.isFinite(ch)&&ch>0?`章节并发来自 DOCUMENT_CHAPTER_CONCURRENCY=${Math.floor(ch)}`:`全部章节并行生成,在飞调用由全局 LLM 并发档位(${ca.llmConcurrency})统一约束;修复轮次预算 ${ca.repairRoundBudget} 轮`]},{subtitle:"章节流水线策略"})),C();let ck=0,cl=new z.jf(cj),cm=[],cn={remaining:ca.repairPoolBudget},co=[...a_].filter(Boolean).sort(),cp=Date.now(),cq=co.length>0?(await (0,z.l$)(c6,async a=>bp(a,co,Math.min(a1,12),""),{kind:"search"})).flat():[];cb.evidence.searchQueries+=c6.length,cb.evidence.searchMs+=Date.now()-cp;for(let b=0;b<bN.length;b+=ci){let c=bN.slice(b,b+ci);for(let d of(await Promise.all(c.map(async(c,d)=>{let f,g=b+d;(0,z.Te)(a.signal);let h=Date.now(),i=J.length;try{var j;let b,d,k,m;J.push((0,aP.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:P.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(c.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${g+1}/${bN.length}`,`二级小节:${c.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:g+1,total:bN.length,label:"章节生成"}},{subtitle:(0,t.GQ)(c.title),order:g})),C();let p=a.resumeChapters?.find(a=>a.id===c.id||a.title===c.title),r=p?.content?.trim(),B=p?.evidence?.length?[...p.evidence]:[],D=W.chapterPlans.find(a=>a.chapterId===c.id||a.chapterTitle===c.title),F=D?Object.values(D.evidenceQueries).flat().filter(Boolean):[],G=c.queries.length>0?c.queries:[q.name,q.outputTitle,c.title],H=bM.get(c.id);if(bz&&H&&H.graphFiles.size>0){let a=[...a_],b=b=>a.includes(b)?b:a.find(a=>a.endsWith(b)||a.includes(b));for(let a of[...H.graphFiles].map(a=>b(a)||a).filter(a=>(0,aQ.Tz)(o,a,a_)).slice(0,12)){let b=bo(a,{maxChunkContentChars:8e3});if(b?.chunks?.length)for(let d of b.chunks)B.push({chapterId:c.id,filePath:b.file?.relativePath||a,score:5+(H.graphWorks.length+H.graphMethods.length)*.5,content:d.content,roleId:aV.get(a),processingType:aW.get(a),sectionTitle:d.sectionTitle,source:"graph-evidence"})}}let I=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(c.title),L=dB(c,[...G,...F],[]),O=dC(c,[])+ck,Q=Date.now();J[i]=(0,aP.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:P.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(c.title)} 正在执行质量优先的章节检索${H?.graphFiles.size?`(图谱匹配 ${H.graphFiles.size} 个文件)`:""}`,details:L.slice(0,O).map(a=>`检索:${a.slice(0,42)}`),progress:{current:g+1,total:bN.length,label:"证据检索"}},{subtitle:(0,t.GQ)(c.title),order:g}),C();let S=r?[]:[...a_].filter(Boolean).sort(),T=r?[]:bv?.evidenceByChapterId?.[c.id]||[];T.length>0&&B.push(...T);let X=[],Y=L.slice(0,O),Z=(c.requiredFacts||[]).filter(a=>!!a&&!Y.some(b=>b.includes(a)||a.includes(b))).slice(0,4).map(a=>`${c.title} ${a}`),$=[...Y,...Z];if(S.length>0&&$.length>0){(0,z.Te)(a.signal);let b=await (0,z.l$)($,async a=>bp(a,S,Math.min(a1,12),c.title),{kind:"search"});X.push(...b)}for(let a of(cb.evidence.searchQueries+=$.length,cb.evidence.searchMs+=Date.now()-Q,X))B.push(...a.filter(a=>(0,aQ.Tz)(o,a.filePath,aU)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:aV.get(a.filePath),processingType:aW.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));I&&S.length>0&&cq.length>0&&B.push(...cq.filter(a=>(0,aQ.Tz)(o,a.filePath,aU)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:aV.get(a.filePath),processingType:aW.get(a.filePath),sectionTitle:a.sectionTitle,source:"basic-fact-cache"})));let _=r?[]:await (0,aS.$b)({manager:y,projectRoot:o,chapter:c,plan:D,profile:V,scopedFilePaths:S,limitPerQuery:Math.min(a1,10),signal:a.signal}).catch(()=>[]);B.push(..._);let aa=new Set((c.pinnedEvidenceFilePaths||[]).filter(Boolean)),ab=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(c.title)&&B.push(...br.map(a=>({...a,chapterId:c.id,source:"pinned-evidence"})));let ac=a6.filter(a=>/招标|投标须知|评标办法|专用合同条款|投标人须知/u.test(`${a.filePath||""}${a.sectionTitle||""}`));/概况|工程|项目|总体|部署/u.test(c.title)&&ac.length>0&&B.push(...ac.map(a=>({...a,chapterId:c.id,source:"pinned-evidence"})));let ad=new Set([...aa]),ae=b6.chapterTargets.get(c.id)||1200,am=(0,s.Pc)(ae,12e3,36e3);for(let a of ad){if(!(0,aQ.Tz)(o,a,aU))continue;let b=aa.has(a),d=bo(a,{maxChunkContentChars:am});d&&B.push(...d.chunks.map(a=>({chapterId:c.id,filePath:d.file.relativePath,score:1,content:a.content,roleId:aV.get(d.file.relativePath),processingType:aW.get(d.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let an=B.filter(a=>(0,aQ.Tz)(o,a.filePath,a_));if(!r&&aE.enabled&&aE.allowProjectFacts){let b=await bg({config:aE,chapterId:c.id,chapterTitle:c.title,sectionTitles:c.sections||[],runtimeRules:aG,localFacts:[...bx.project,...bx.schedule,...bx.quality,...bx.safety,...bx.resources,...bx.preciseFacts],signal:a.signal});ba.queries.push(...b.queries),ba.filteredCount+=b.filtered+b.evidence.length}let aq=(0,s.Pc)(ae,ca.evidenceFloorChars,ca.evidenceCeilingChars),ar=r?[]:(0,aS.SK)({project:aX,chapter:c,plan:D,profile:V,scopedFilePaths:S,highRisk:a5.highRisk});ar.length>0&&an.push(...bl(ar,a0));let as=(an=bl(an,a0)).length>120?[...new Set([...an.filter(a=>(0,s.it)(a)),...[...an].sort((a,b)=>b.score-a.score).slice(0,120)])]:an,at=await (0,M.Mv)([K(c)],as.map(dz)),au=dA(c,an,{maxItems:dD(a1,c,a5.highRisk),maxChars:aq+(a5.highRisk?14e3:4e3),preservePinned:!0,semantic:{similarity:at,queryText:K(c)}},cb);au=c0(au,bA.scopeConflicts),bn(au,a0,`chapter:${c.id}:initial`);let av=c.requiredFacts.filter(a=>!au.some(b=>(0,u.Lk)(b,a))),ax=0,ay=H?[H.graphWorks.length?`图谱识别本章工程内容:${H.graphWorks.join("、")}`:"",H.graphMethods.length?`图谱识别本章施工方法:${H.graphMethods.join("、")}`:"",H.graphBoqItems.length?`图谱识别本章BOQ清单项(${H.graphBoqItems.length}项):${H.graphBoqItems.slice(0,30).map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",H.gaps.length?`图谱识别本章资料缺口:${H.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",aA=function(a){let b=[];for(let c of a){if(!c.resolution)continue;let a=c.values.filter(a=>`${a.value}${a.unit}`!==c.resolution);if(0===a.length)continue;let d=a.map(a=>`${a.value}${a.unit}`).join("、");"high"===c.confidence?b.push(`${c.scope}必须统一为 ${c.resolution}(补疑/答疑/澄清类修正文件权威最高;${d} 已被修正,正文禁止出现)`):"medium"===c.confidence?b.push(`${c.scope}应统一为 ${c.resolution}(按资料来源优先级裁决;${d} 为败选值,正文避免使用)`):b.push(`${c.scope}参考口径为 ${c.resolution}(锚定较弱,请人工复核;${d} 不参与自动改写)`)}return b}(bA.scopeConflicts),aB=b0.length>0?(()=>{let a=az(c.title),b=b0.filter(b=>b.chapterTitle===a);return 0===b.length?"":["【本章必须显性响应的招标要求(逐条写入正文,零响应即评标失分)】",...b.map(a=>`- ${a.kind}:${a.item.text}`)].join("\n")})():"",aC=[ay,aB,aA.length?`【数据口径强制约束】${aA.join(";")}`:"",D?.writingGoal,D?.mustCover?.length?`本章必须覆盖:${D.mustCover.join("、")}`:"",D?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${D.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),aD=ds(P,c);if(P.writerPrompts.length>0&&!aD.primaryWriter)throw Error(`${(0,t.GQ)(c.title)} 写作主控提示词未进入章节生成阶段`);let aF=[aD.promptTexts,aw].filter(Boolean).join("\n\n"),aH=aD.promptDetails.length?aD.promptDetails:["未绑定章节写作提示词"],aI=function(a){let b=a.profile||l,c=[],d=[a.template.name,a.template.outputTitle,a.chapter.title,a.chapter.purpose,...a.chapter.sections||[]].filter(Boolean).join(" "),e=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title);for(let d of a.chapter.requiredFacts||[])ah(c,b,{label:d,category:n(b,d)?.category||"required",required:!0,source:"template"});for(let d of a.chapter.sections||[])ah(c,b,{label:d,category:"section",required:!1,source:"section",queries:ag(d,[a.chapter.title])});for(let d of a.plan?.requiredContents||[])ah(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of a.plan?.evidenceNeeds||[])ah(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of e?.requiredFactIds||[]){let e=a.spec?.factFields.find(a=>a.id===d);e&&ah(c,b,{label:e.name,category:n(b,e.name)?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:ag(e.name,[e.extractionHint||"",e.validationHint||""])})}for(let e of a.spec?.factFields||[]){if(!e.required)continue;let f=n(b,e.name),g=`${e.name} ${e.extractionHint||""} ${e.validationHint||""}`;(d.includes(e.name)||ag(e.name,f?.aliases||[]).some(a=>d.includes(a))||a.chapter.requiredFacts.some(a=>a.includes(e.name)||e.name.includes(a)))&&ah(c,b,{label:e.name,category:f?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:ag(e.name,[g])})}for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&d.includes(a))&&ai(c,b,a,"profile","must_use"===a.usagePolicy,[d]);let f=af(a.requirement||"");if(f)for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&f.includes(a))&&ai(c,b,a,"requirement",!0,[f]);let g=af(a.promptTexts||"");if(g)for(let d of b.factFields)[d.name,...d.aliases].some(a=>a.length>=2&&g.includes(a))&&ai(c,b,d,"prompt","must_use"===d.usagePolicy,[a.chapter.title]);return c}({template:q,chapter:c,spec:ao,profile:ap,promptTexts:aF,requirement:a.requirement,plan:D?{requiredContents:D.mustCover,evidenceNeeds:Object.values(D.evidenceQueries).flat()}:void 0}),aJ=ak({needs:aI,factsModel:bx,evidence:an,profile:ap}),aK=aJ.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),aL=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>er(`${a.sectionTitle||""}${a.content||""}`).includes(er(b)))),c=(a.chapter.tablePlans||[]).flatMap(a=>a.fillability?.missingProjectFactFields||[]),d=a.evidence.length<3?["章节证据数量不足"]:[],e=b.length+c.length+d.length,f=e>=5?"high":e>=2?"medium":"low",g="high"===f?"evidence_first":c.length>0?"generate_with_review_notes":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:f,missingFacts:b,missingEvidence:d,tableFieldGaps:[...new Set(c)],suggestedStrategy:g,reason:0===e?"章节事实、证据和表格可填性满足常规生成条件。":`识别到 ${e} 项生成前缺口,按 ${g} 策略生成。`}}({chapter:c,evidence:au}),aM=new Set(au.map(a=>a.filePath)).size,aN=!!H&&(H?.graphFiles.size||0)>=8&&aM>=6&&0===av.length&&"low"===aL.riskLevel,aR=S.length<=80&&("evidence_first"===aL.suggestedStrategy||a5.highRisk||av.length>0||aK.length>0||au.length<8&&"low"!==aL.riskLevel);if(!aN&&aR&&S.length>0){let b=await aO({manager:y,projectRoot:o,chapter:c,scopedFilePaths:S,fileRoleByPath:aV,fileProcessingByPath:aW,requiredNeeds:[...new Set([...av,...aK])],highRisk:a5.highRisk||aK.length>0,signal:a.signal}).catch(()=>[]);ax=b.length,b.length>0&&(an=dA(c,[...an,...bl(b,a0)],{maxItems:dD(a1+12,c,a5.highRisk),maxChars:aq+(a5.highRisk?36e3:16e3),preservePinned:!0},cb),an=bl(an,a0),au=dA(c,an,{maxItems:dD(a1+8,c,a5.highRisk),maxChars:aq+(a5.highRisk?28e3:12e3),preservePinned:!0},cb),au=c0(au,bA.scopeConflicts),bn(au,a0,`chapter:${c.id}:deep`),av=c.requiredFacts.filter(a=>!au.some(b=>(0,u.Lk)(b,a)))),aK=(aJ=ak({needs:aI,factsModel:bx,evidence:an,profile:ap})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label)}if(aK.length>0&&S.length>0){let b=bl(await aO({manager:y,projectRoot:o,chapter:c,scopedFilePaths:S,fileRoleByPath:aV,fileProcessingByPath:aW,requiredNeeds:aK,highRisk:!0,signal:a.signal}).catch(()=>[]),a0);b.length>0&&(an=dA(c,[...an,...b],{maxItems:dD(a1+16,c,!0),maxChars:aq+42e3,preservePinned:!0},cb),an=bl(an,a0),au=dA(c,an,{maxItems:dD(a1+12,c,!0),maxChars:aq+32e3,preservePinned:!0},cb),au=c0(au,bA.scopeConflicts),bn(au,a0,`chapter:${c.id}:supplemental`),av=c.requiredFacts.filter(a=>!au.some(b=>(0,u.Lk)(b,a))),aK=(aJ=ak({needs:aI,factsModel:bx,evidence:an,profile:ap})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}for(let a of(bn(au,a0,`chapter:${c.id}:writer-input`),0===au.length&&bb.push(`${c.title}:缺少可支撑正文的项目资料证据`),av))bb.push(`${c.title}:事实需求未满足 ${a}`);let aY=(0,aP.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:a6.length>0?"success":"failed",message:`已检索/绑定 ${a6.length} 条证据`});bh<0?bh=(0,aP.fx)(J,aY):J[bh]={...aY,order:J[bh]?.order??aY.order},C(),(0,z.Te)(a.signal),aK.length>0&&ck<2&&(ck+=1);let a4=new Map,a7=b=>{let d=(0,z.c6)({kind:"section",query:`${c.title} ${b}`.trim(),scopedFilePaths:S}),e=a4.get(d);if(e)return Promise.resolve(e);let f=(0,aT.Ym)(b,c,au),g=f.filter(a=>R.AM.test(a.content)).length;if(f.length>=4&&g>=1){let a=f.slice(0,5);return a4.set(d,a),Promise.resolve(a)}return dE({manager:y,projectRoot:o,chapter:c,sectionTitle:b,scopedFilePaths:S,fileRoleByPath:aV,fileProcessingByPath:aW,signal:a.signal}).then(a=>(a4.set(d,a),a))},a8=b=>{if(0===b.length||0===S.length)return Promise.resolve([]);let d=b.slice(0,6).join(" ");return dE({manager:y,projectRoot:o,chapter:c,sectionTitle:d,scopedFilePaths:S,fileRoleByPath:aV,fileProcessingByPath:aW,signal:a.signal}).catch(()=>[])},bd=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b)||`${a.sectionTitle||""} ${a.content}`.includes(b))).length,d=a.chapter.requiredFacts.length,e=a.chapter.requiredFacts.filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:c,evidence:au,risk:a5});a9.push(bd);let bi=new Set(au.map(a=>a.filePath)),bj=au.reduce((a,b)=>a+b.content.length,0),bk=[...a5.highRisk?[`召回覆盖风险(${a5.riskReason||"切片未完全预加载"}):已加载 ${a5.loadedChunks}/${a5.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${T.length} 条`,`深召回证据:${ax} 条`,`事实覆盖:${bd.requiredFactCovered}/${bd.requiredFactTotal}`,`小节覆盖:${bd.sectionCovered}/${bd.sectionTotal}`];J[i]=(0,aP.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:P.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(c.title)} 已选取 ${au.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${bi.size} 份`,`上下文字符:${bj}`,`检索查询:${Math.min(L.length,O)} 组`,...bk],progress:{current:g+1,total:bN.length,label:"正文生成"}},{subtitle:(0,t.GQ)(c.title),order:g}),C(),cb.evidence.contextChars+=bj;let bm=(j=aJ,aj(j.flatMap(a=>a.facts))),bq=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(c.title)?bt:[],bs=(0,aT.hZ)({chapter:c,plan:void 0,spec:ao,roleFacts:ab,evidence:au,missingFacts:av,indexedFacts:[...bq,...bm],resolvedFactNeeds:aJ,factNeedsPrompt:function(a){let b=a.map(a=>{let b=a.facts.slice(0,5).map(b=>`${b.key||b.fieldName||a.need.label}=${al(b.value)}${b.sourceFile?`(${e.basename(b.sourceFile)})`:""}`),c=a.facts.length?[]:(a.evidence||[]).slice(0,2).map(a=>`证据片段:${al(a.content).slice(0,160)}${a.filePath?`(${e.basename(a.filePath)})`:""}`);return`- ${a.need.required?"必须":"相关"}|${a.need.label}|${a.status}${b.length||c.length?`:${[...b,...c].join(";")}`:":未在已解析资料中确认"}`});return b.length?`事实需求覆盖卡片:
|
|
113
|
-
${b.join("\n")}`:""}(aJ)}),bu=function(a){let b=Date.now(),c=a.plan.chapters.find(b=>b.chapterId===a.chapter.id)||a.plan.chapters.find(b=>b.title===a.chapter.title);if(!c)throw Error(`缺少章节计划:${a.chapter.title}`);let d=a.context.facts.filter(a=>c.evidenceQueries.some(b=>ek(a,b))||c.requiredFacts.some(b=>ek(a,b))),e=c.sections.map(b=>{let c=a.context.facts.filter(a=>b.evidenceQueries.some(b=>ek(a,b))||b.requiredFacts.some(b=>ek(a,b))).slice(0,24),d=a.evidence.filter(a=>b.evidenceQueries.some(b=>(function(a,b){let c=eh(`${a.sectionTitle||""} ${a.content||""} ${a.filePath||""}`);return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(eh(a)))})(a,b))).slice(0,24),e=b.requiredGraphNodes.flatMap(b=>el(a.context.baseProjectGraph,b)).slice(0,12),f=[];return/法律法规|法规|规章|规范标准|标准规范|行业标准|现行规范|编制依据/u.test(b.title)||0!==d.length||0!==c.length||0!==e.length||f.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${b.title} 缺少事实、图谱或证据支撑`,suggestion:"应先定向检索和抽取事实,不能生成占位正文。"}),{...b,factIds:c.map(a=>(0,z.c6)({key:a.key,value:(0,z.lG)(a.value),sourceFile:a.sourceFile}).slice(0,12)),evidenceIds:d.map(a=>(0,z.c6)({filePath:a.filePath,content:a.content.slice(0,160),score:a.score}).slice(0,12)),graphNodeIds:e.map(a=>(0,z.c6)(a).slice(0,12)),ready:0===f.length,issues:f}}),f=e.flatMap(a=>a.issues),g={taskId:`chapter-task-${(0,z.c6)({plan:a.plan.planId,chapter:a.chapter.id,evidence:a.evidence.map(a=>(0,z.c6)({filePath:a.filePath,content:a.content.slice(0,120),score:a.score}))}).slice(0,10)}`,chapterId:a.chapter.id,title:a.chapter.title,facts:d.slice(0,48),evidence:a.evidence.slice(0,48),graphContext:el(a.context.baseProjectGraph,a.chapter.title).slice(0,20).join("\n"),sections:e,ready:0===f.length,issues:f};return{task:g,node:{id:`chapter-task-${a.chapter.id}`,type:"chapter_task_planner",status:g.ready?"completed":"failed",startedAt:b,completedAt:Date.now(),outputSummary:`${g.sections.filter(a=>a.ready).length}/${g.sections.length} 条细目任务就绪`,metrics:{facts:g.facts.length,evidence:g.evidence.length,issues:f.length},issues:f}}}({plan:b7.plan,chapter:c,context:by,evidence:au});if(by.chapterTasks=[...(by.chapterTasks||[]).filter(a=>a.chapterId!==c.id),bu.task],by.nodes.push(bu.node),(0,c2.cN)(by),(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:`agent-chapter-task-${c.id}`,status:bu.task.ready||r?"success":"failed",message:bu.task.ready?bu.node.outputSummary||`${(0,t.GQ)(c.title)} 章节任务规划完成`:r?`${(0,t.GQ)(c.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:bu.node.outputSummary||`${(0,t.GQ)(c.title)} 章节任务规划完成`,details:bu.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:J.length})),C(A),!bu.task.ready&&!r)throw Error(`${(0,t.GQ)(c.title)} 章节任务未就绪:${bu.task.issues.map(a=>a.message).join(";")}`);let bw=[aF,eo(bu.task)].filter(Boolean).join("\n\n"),bB={total:aJ.length,satisfied:aJ.filter(a=>"satisfied"===a.status).length,missing:aJ.filter(a=>"missing"===a.status).length,lowConfidence:aJ.filter(a=>"low_confidence"===a.status).length};for(let a of aK)bb.push(`${c.title}:事实需求未确认 ${a}`);let bC=ao?.chapterRules.find(a=>a.id===c.id||a.title===c.title),bD=b6.chapterTargets.get(c.id)||1200,bE=c.sections?.filter(Boolean).length||0,bF=/[、,,;;]/u.test(c.title),bG=function(a){let{budgetTarget:b,sectionCount:c,title:d,longformStrict:e}=a,f=/[、,,;;]/u.test(d),g=/工期|进度|质量|安全|危大|资源|人材机|保障|措施|重难点/u.test(d),h=/概况|结语|附录|说明/u.test(d),i=c>0?c*(f?720:g?900:780):g?5200:3600,j=e?h?2600:g?5200:3600:Math.min(1200,b),k=e?Math.min(Math.max(4200,b),c>=30?9800:f?8800:g?9200:7200):b,l=Math.max(j,Math.min(b,i,k));return{budgetTarget:b,roundTarget:l,structureTarget:i,maxWords:Math.ceil(l*(a.longformStrict?1.12:1.18)),label:`章节预算约 ${b} 字,本轮生成约 ${l} 字,结构目标约 ${i} 字`}}({budgetTarget:bD,sectionCount:bE,title:c.title,longformStrict:b6.longformStrict}),bH=Math.ceil(bG.maxWords*(b6.maxChars?1.05:1)),bI=b6.targetChars?Math.min(1800,Math.max(600,Math.floor(.45*bG.roundTarget))):1200,bJ=bG.roundTarget,bK=Math.max(Math.min(bC?.minWords||0,bJ),Math.min(ao?.dynamicChapterRule.minWordsPerChapter||0,bJ),Math.floor(.68*bJ),bI),bL=(0,aT.uV)(bK,bJ),bO=bE>0?Math.min(bJ,Math.max(1800,bG.structureTarget)):bJ,bP=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),bR=process.env.DOCUMENT_SECTION_FIRST_GENERATION,bS=void 0!==bR&&0===Number(bR),bT=void 0!==bR&&0!==Number(bR),bU=bJ>=6e3&&bE>=4&&bE<=bP&&!bF,bV=!bS&&bE>=2&&(bE>bP||bF||b6.longformStrict&&bE>=6),bW=!bS&&!bV&&bE>=2&&bE<=bP&&(bT||bU||b6.longformStrict),bX=0,bY=a=>{let b=Date.now();if(b-bX<3e3)return;bX=b;let d=a.filter(Boolean).join("\n\n");d.trim()&&C([...A,{id:c.id,title:c.title,content:`## ${c.title}
|
|
113
|
+
${b.join("\n")}`:""}(aJ)}),bu=function(a){let b=Date.now(),c=a.plan.chapters.find(b=>b.chapterId===a.chapter.id)||a.plan.chapters.find(b=>b.title===a.chapter.title);if(!c)throw Error(`缺少章节计划:${a.chapter.title}`);let d=a.context.facts.filter(a=>c.evidenceQueries.some(b=>ek(a,b))||c.requiredFacts.some(b=>ek(a,b))),e=c.sections.map(b=>{let c=a.context.facts.filter(a=>b.evidenceQueries.some(b=>ek(a,b))||b.requiredFacts.some(b=>ek(a,b))).slice(0,24),d=a.evidence.filter(a=>b.evidenceQueries.some(b=>(function(a,b){let c=eh(`${a.sectionTitle||""} ${a.content||""} ${a.filePath||""}`);return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(eh(a)))})(a,b))).slice(0,24),e=b.requiredGraphNodes.flatMap(b=>el(a.context.baseProjectGraph,b)).slice(0,12),f=[];return/法律法规|法规|规章|规范标准|标准规范|行业标准|现行规范|编制依据/u.test(b.title)||0!==d.length||0!==c.length||0!==e.length||f.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${b.title} 缺少事实、图谱或证据支撑`,suggestion:"应先定向检索和抽取事实,不能生成占位正文。"}),{...b,factIds:c.map(a=>(0,z.c6)({key:a.key,value:(0,z.lG)(a.value),sourceFile:a.sourceFile}).slice(0,12)),evidenceIds:d.map(a=>(0,z.c6)({filePath:a.filePath,content:a.content.slice(0,160),score:a.score}).slice(0,12)),graphNodeIds:e.map(a=>(0,z.c6)(a).slice(0,12)),ready:0===f.length,issues:f}}),f=e.flatMap(a=>a.issues),g={taskId:`chapter-task-${(0,z.c6)({plan:a.plan.planId,chapter:a.chapter.id,evidence:a.evidence.map(a=>(0,z.c6)({filePath:a.filePath,content:a.content.slice(0,120),score:a.score}))}).slice(0,10)}`,chapterId:a.chapter.id,title:a.chapter.title,facts:d.slice(0,48),evidence:a.evidence.slice(0,48),graphContext:el(a.context.baseProjectGraph,a.chapter.title).slice(0,20).join("\n"),sections:e,ready:0===f.length,issues:f};return{task:g,node:{id:`chapter-task-${a.chapter.id}`,type:"chapter_task_planner",status:g.ready?"completed":"failed",startedAt:b,completedAt:Date.now(),outputSummary:`${g.sections.filter(a=>a.ready).length}/${g.sections.length} 条细目任务就绪`,metrics:{facts:g.facts.length,evidence:g.evidence.length,issues:f.length},issues:f}}}({plan:b7.plan,chapter:c,context:by,evidence:au});if(by.chapterTasks=[...(by.chapterTasks||[]).filter(a=>a.chapterId!==c.id),bu.task],by.nodes.push(bu.node),(0,c2.cN)(by),(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:`agent-chapter-task-${c.id}`,status:bu.task.ready||r?"success":"failed",message:bu.task.ready?bu.node.outputSummary||`${(0,t.GQ)(c.title)} 章节任务规划完成`:r?`${(0,t.GQ)(c.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:bu.node.outputSummary||`${(0,t.GQ)(c.title)} 章节任务规划完成`,details:bu.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:J.length})),C(A),!bu.task.ready&&!r)throw Error(`${(0,t.GQ)(c.title)} 章节任务未就绪:${bu.task.issues.map(a=>a.message).join(";")}`);let bw=[aF,eo(bu.task)].filter(Boolean).join("\n\n"),bB={total:aJ.length,satisfied:aJ.filter(a=>"satisfied"===a.status).length,missing:aJ.filter(a=>"missing"===a.status).length,lowConfidence:aJ.filter(a=>"low_confidence"===a.status).length};for(let a of aK)bb.push(`${c.title}:事实需求未确认 ${a}`);let bC=ao?.chapterRules.find(a=>a.id===c.id||a.title===c.title),bD=b6.chapterTargets.get(c.id)||1200,bE=c.sections?.filter(Boolean).length||0,bF=/[、,,;;]/u.test(c.title),bG=function(a){let{budgetTarget:b,sectionCount:c,title:d,longformStrict:e}=a,f=/[、,,;;]/u.test(d),g=/工期|进度|质量|安全|危大|资源|人材机|保障|措施|重难点/u.test(d),h=/概况|结语|附录|说明/u.test(d),i=c>0?c*(f?720:g?900:780):g?5200:3600,j=e?h?2600:g?5200:3600:Math.min(1200,b),k=e?Math.min(Math.max(4200,b),c>=30?9800:f?8800:g?9200:7200):b,l=e?Math.max(j,b):Math.max(j,Math.min(b,i,k));return{budgetTarget:b,roundTarget:l,structureTarget:i,maxWords:Math.ceil(l*(a.longformStrict?1.12:1.18)),label:`章节预算约 ${b} 字,本轮生成约 ${l} 字,结构目标约 ${i} 字`}}({budgetTarget:bD,sectionCount:bE,title:c.title,longformStrict:b6.longformStrict}),bH=Math.ceil(bG.maxWords*(b6.maxChars?1.05:1)),bI=b6.targetChars?Math.min(1800,Math.max(600,Math.floor(.45*bG.roundTarget))):1200,bJ=bG.roundTarget,bK=Math.max(Math.min(bC?.minWords||0,bJ),Math.min(ao?.dynamicChapterRule.minWordsPerChapter||0,bJ),Math.floor(.68*bJ),bI),bL=(0,aT.uV)(bK,bJ),bO=bE>0?b6.longformStrict?bJ:Math.min(bJ,Math.max(1800,bG.structureTarget)):bJ,bP=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),bR=process.env.DOCUMENT_SECTION_FIRST_GENERATION,bS=void 0!==bR&&0===Number(bR),bT=void 0!==bR&&0!==Number(bR),bU=bJ>=6e3&&bE>=4&&bE<=bP&&!bF,bV=!bS&&bE>=2&&(bE>bP||bF||b6.longformStrict&&bE>=6),bW=!bS&&!bV&&bE>=2&&bE<=bP&&(bT||bU||b6.longformStrict),bX=0,bY=a=>{let b=Date.now();if(b-bX<3e3)return;bX=b;let d=a.filter(Boolean).join("\n\n");d.trim()&&C([...A,{id:c.id,title:c.title,content:`## ${c.title}
|
|
114
114
|
|
|
115
115
|
${d}`,evidence:au,missingFacts:av,sections:c.sections||[],tablePlans:c.tablePlans||[],inProgress:!0}])},bZ=a=>{"complete"===a.phase&&a.partialSections&&bY(a.partialSections)};if(r)m=dq(r,c),f=(0,aP.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aD.primaryPromptId,status:"success",message:`${(0,t.GQ)(c.title)} 已复用已有章节正文:当前 ${(0,w.V7)(m)} 字,跳过 Writer,直接进入 Reviewer/Repairer/Final Gate`,details:[`有效证据:${au.length} 条`,`事实需求:${bB.satisfied}/${bB.total} 已满足,缺失 ${bB.missing},低置信 ${bB.lowConfidence}`,"来源:resumeChapters/checkpointChapters"],progress:{current:g+1,total:bN.length,label:"复用章节"}},{subtitle:(0,t.GQ)(c.title),order:g}),J[i]=f,C(A);else{let e;if(J[i]=(0,aP.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aD.primaryPromptId,status:"running",message:bV?`${(0,t.GQ)(c.title)} 正在规划主题块并准备并发成稿`:bW?`${(0,t.GQ)(c.title)} 正在按小节并发成稿`:`${(0,t.GQ)(c.title)} 正在整章一次成稿`,details:bV||bW?[...aH,`有效证据:${au.length} 条`,`事实需求:${bB.satisfied}/${bB.total} 已满足,缺失 ${bB.missing},低置信 ${bB.lowConfidence}`,bG.label,`生成上限约 ${bH} 字`,`模板细目:${c.sections?.length||0} 条`,bV?"细目较多,先由章级 Planner 聚类为主题块并语义合并,再按主题块全并发出稿,避免逐小节碎片化":"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...aH,`有效证据:${au.length} 条`,`事实需求:${bB.satisfied}/${bB.total} 已满足,缺失 ${bB.missing},低置信 ${bB.lowConfidence}`,bG.label,`生成上限约 ${bH} 字`,`规划小节:${bE} 个`,"首次生成必须覆盖章节结构、小节和事实,篇幅目标仅作为规划参考"],progress:{current:g+1,total:bN.length,label:bV?"主题块并发":bW?"小节并发":"整章成稿"}},{subtitle:(0,t.GQ)(c.title),order:g}),C(),bV){let f=(0,t.GQ)(c.title),h=b5.split("\n").filter(a=>a.includes(f)),j=h.length>0?h.join("\n"):b5.slice(0,4e3),l=await E(()=>(0,aQ.X6)(cb,`chapter-plan:${c.id}`,()=>a2({template:q,chapter:c,evidence:au,projectContext:bQ,requirement:a.requirement,roleContext:aC,targetWords:bO,graphContext:bu.task.graphContext,blueprintContext:j,signal:a.signal,diagnostics:cb})));if(l.blocks.length>0){b=l,k=function(a,b){let c={};for(let d of a)for(let a of b.blocks){let b=a.subPoints.filter(a=>a.sources.some(a=>a$(a,d))||a$(a.title,d));if(b.length>0){c[d]=b.map(a=>a.title);break}}return c}(aZ(c),l);let f=[aF,function(a,b){let c=a.facts.slice(0,18).map(a=>`- ${a.key}:${ej(a)}${a.sourceFile?`(来源:${a.sourceFile})`:""}`).join("\n"),d=b.blocks.map((a,b)=>{let c=a.subPoints.map(a=>a.sources.length>1?` - #### ${a.title}(覆盖评分细目:${a.sources.join("、")})`:` - #### ${a.title}`).join("\n");return`${b+1}. 必须输出三级标题:### ${a.title}
|
|
116
116
|
${c}`}).join("\n");return["【Agent 章节任务】(主题块成稿模式)",`任务ID:${a.taskId}`,`章节:${a.title}`,a.graphContext?`图谱上下文:
|
|
@@ -133,4 +133,4 @@ ${a.slice(i).trimStart()}`:a}}let m=g(c);return m?`${a.trimEnd()}
|
|
|
133
133
|
|
|
134
134
|
${m}`:a},O=async b=>{var e;(0,z.Te)(a.signal);let f=D(b.message),g=/Writer 未完成/u.test(b.message)?"缺失小节":"深度不足小节",h=bu.task.sections.find(a=>a.title===f),i=B.get(c4(k,f))||0,j=(e=h?.minChars,Math.max(e||0,i&&i>0?Math.ceil(i/.8):0,/项目主要施工内容/u.test(f)?2200:/主要分部分项工程施工方案|主要施工方法/u.test(f)?1800:/项目特点.*重点.*难点|重点.*难点.*分析/u.test(f)?1500:/原材料进场复试|见证取样|危大工程专项施工方案审批流程/u.test(f)?900:760)),l=/正文不足,未达到任务最小深度/u.test(b.message),m=bl(await a7(f).catch(()=>[]),a0);bn(m.length?m:au,a0,`repair:${c.id}:${f}`),cb.llm.lastError=void 0;let n=await E(()=>(0,aQ.X6)(cb,`agent-repairer-section:${c.id}:${f}`,()=>(0,aT.mF)({template:q,chapter:c,sectionTitle:f,evidence:m.length?m:au,missingFacts:av,promptTexts:[d||bw,G].filter(Boolean).join("\n\n"),projectContext:bQ,requirement:a.requirement,roleContext:aC,targetWords:j,maxWords:1.25*j,forbidDrawingImages:!1,factCoverageContext:bs,qualityFeedback:`Repairer 定向补写“${f}”。必须输出该小节正式正文并彻底删除 WRITER_MISSING_SECTION 标记。`,diagnostics:cb,signal:a.signal,allowLenientStructureGate:!0})));if(!n||n.includes("WRITER_MISSING_SECTION")){let b=cb.llm.lastError;cb.llm.lastError=void 0,n=await E(()=>(0,aQ.X6)(cb,`agent-repairer-section-retry:${c.id}:${f}`,()=>(0,aT.mF)({template:q,chapter:c,sectionTitle:f,evidence:m.length?m:au,missingFacts:av,promptTexts:G,projectContext:bQ,requirement:a.requirement,roleContext:aC,targetWords:j,maxWords:1.15*j,forbidDrawingImages:!1,factCoverageContext:bs,qualityFeedback:`第二次定向补写“${f}”:只写该小节正式正文,不写解释,不保留 WRITER_MISSING_SECTION。${b?`上次失败原因:${b},必须逐条修正。`:""}`,diagnostics:cb,signal:a.signal,allowLenientStructureGate:!0})))}if(n&&!n.includes("WRITER_MISSING_SECTION")){let a=/^#{3,4}\s+/u.test(n.trim())?n.trim():`### ${f}
|
|
135
135
|
|
|
136
|
-
${n.trim()}`,b=(0,w.V7)(a),c=Math.min(Math.max(Math.floor(.7*j),(0,aT.ap)(f)),Math.max(500,j)),d=!l||b>=c;return{sectionTitle:f,rewriteReason:g,normalizedSection:a,normalizedLength:b,enoughDepth:d,evidenceCount:m.length||au.length,repairTargetWords:j}}return{sectionTitle:f,rewriteReason:g,normalizedLength:0,enoughDepth:!1,evidenceCount:0,repairTargetWords:j,failed:n?"仍包含 WRITER_MISSING_SECTION":cb.llm.lastError||"空响应"}};for(let b=0;b<L.length;b+=3){let d=L.slice(b,b+3);for(let b of(await Promise.allSettled(d.map(a=>O(a))))){if("rejected"===b.status){if(a.signal?.aborted)throw b.reason;M.push(`失败:${b.reason instanceof Error?b.reason.message:"未知异常"}`);continue}if(!b.value)continue;if(b.value.failed){M.push(`失败:${b.value.sectionTitle}(${b.value.failed})`);let a=(y.get(b.value.sectionTitle)||0)+1;y.set(b.value.sectionTitle,a),a>=2&&x.add(b.value.sectionTitle);continue}let c=c4(k,b.value.sectionTitle),d=b.value.enoughDepth?N(e.content,b.value.sectionTitle,b.value.normalizedSection||"",c):e.content,f=d!==e.content;if(f&&(e={...e,content:d}),f)y.delete(b.value.sectionTitle),x.delete(b.value.sectionTitle);else if(!b.value.enoughDepth){let a=(y.get(b.value.sectionTitle)||0)+1;y.set(b.value.sectionTitle,a),a>=2&&x.add(b.value.sectionTitle)}M.push(f?`成功:${b.value.sectionTitle}(${b.value.normalizedLength}字,证据 ${b.value.evidenceCount} 条)`:`失败:${b.value.sectionTitle}(${b.value.enoughDepth?"未定位到原小节块":`补写不足 ${b.value.normalizedLength}/${b.value.repairTargetWords} 字`})`)}(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:"running",message:`${(0,t.GQ)(c.title)} 已补写深度不足小节 ${Math.min(b+3,L.length)}/${L.length}`,details:M},{subtitle:"Agent Repairer",order:H})),C(A)}let P={content:e.content,appliedCount:0};F?(o=!0,P=await E(()=>(0,aQ.X6)(cb,`agent-polisher:${c.id}`,()=>(0,aQ.l8)({template:q,chapter:{id:c.id,title:c.title,content:e.content,evidence:au,missingFacts:av,sections:b2},issues:n.map(a=>`${a.message};${a.suggestion||""}`),promptTexts:[d||bw,G].filter(Boolean).join("\n\n"),requirement:a.requirement,forbidDrawingImages:!1,diagnostics:cb,signal:a.signal})))):h.some(a=>!/Writer 未完成|正文不足,未达到任务最小深度/u.test(a.message))&&(P=await E(()=>(0,aQ.X6)(cb,`agent-repairer:${c.id}`,()=>(0,aQ.l8)({template:q,chapter:{id:c.id,title:c.title,content:e.content,evidence:au,missingFacts:av,sections:b2},issues:[...h.map(a=>`${a.message};${a.suggestion||""}`),...n.length>0&&!o?n.map(a=>`${a.message};${a.suggestion||""}`):[]],promptTexts:[d||bw,G].filter(Boolean).join("\n\n"),requirement:a.requirement,forbidDrawingImages:!1,diagnostics:cb,signal:a.signal,maxTokens:m?3200:void 0})))),e={...e,content:dq(P.content||e.content,c)},f=eq({task:bu.task,draft:e,context:by,plannedCoverage:k}),by.reviewResults={...by.reviewResults||{},[c.id]:f},i=(h=f.issues.filter(a=>"blocker"===a.severity||"error"===a.level)).some(a=>/Writer 未完成/u.test(a.message)),j=h.some(a=>/正文不足,未达到任务最小深度/u.test(a.message)),l=f.issues.some(a=>"error"!==a.level&&"blocker"!==a.severity&&/正文不足,未达到任务最小深度/u.test(a.message)&&!x.has(D(a.message))),n=f.issues.filter(a=>"warning"===a.level&&/未匹配到独立小节标题|工序顺序表达缺失/u.test(a.message)),p=h.length>0&&(f.repairable||i||j)||l||0===h.length&&n.length>0&&!o,h.length<v?u=0:h.length>0&&(u+=1),v=h.length;let Q=h.length>0,R=`chapter-repairer-${c.id}`,S=by.nodes.find(a=>a.id===R);S?(S.status=Q?"failed":"completed",S.completedAt=Date.now(),S.outputSummary=f.issues.length?`修复后仍有 ${f.issues.length} 个问题`:"定向修复通过",S.issues=f.issues):by.nodes.push({id:R,type:"chapter_repairer",status:Q?"failed":"completed",startedAt:Date.now(),completedAt:Date.now(),outputSummary:f.issues.length?`修复后仍有 ${f.issues.length} 个问题`:"定向修复通过",metrics:{supportedFacts:f.supportedFacts},issues:f.issues});let T=by.nodes.find(a=>a.id===`chapter-reviewer-${c.id}`);T&&"running"===T.status&&(T.status=Q?"failed":"completed",T.completedAt=Date.now(),T.outputSummary=f.issues.length?`${f.issues.length} 个 Reviewer 提示`:"Reviewer 通过"),(0,c2.cN)(by),(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:`agent-reviewer-${c.id}`,status:Q?"failed":"success",message:Q?`${(0,t.GQ)(c.title)} Reviewer 第 ${s} 轮复审仍有 ${h.length} 个阻断问题${p&&cn.remaining>0&&s<r+2?",继续下一轮修复":""}`:`${(0,t.GQ)(c.title)} Reviewer 第 ${s} 轮复审通过`,details:f.issues.map(a=>a.message)},{subtitle:"Agent Reviewer",order:H-1})),(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:Q?"failed":"success",message:f.issues.length?`${(0,t.GQ)(c.title)} 第 ${s} 轮定向修复后仍有 ${f.issues.length} 个问题`:`${(0,t.GQ)(c.title)} 定向修复通过`,details:[...M,...f.issues.map(a=>`剩余:${a.message}`)]},{subtitle:"Agent Repairer",order:H})),C(A)}f.issues.some(a=>"blocker"===a.severity||"error"===a.level)&&bc.push(`${(0,t.GQ)(c.title)} Reviewer 未通过:${f.issues.map(a=>a.message).join(";")}(已修复 ${s} 轮,${cn.remaining<=0?"文档级修复总池已耗尽":"本章修复轮次达上限"};问题已标记并转入门禁阻断,可在记录详情查看后决定继续修复或调整模板)`),be[g]=e,A=be.filter(a=>!!a),C(A),cb.quality.blockingCount+=f.issues.filter(a=>"error"===a.level).length,cb.quality.importantCount+=f.issues.filter(a=>"warning"===a.level).length}catch(b){if(a.signal?.aborted)throw b;console.error(`[gen] chapter ${c.title} review failed:`,b),bc.push(`${(0,t.GQ)(c.title)}:审查修复阶段失败:${b instanceof Error?b.message:"未知错误"}`)}}}catch(d){if(a.signal?.aborted)throw d;console.error(`[gen] chapter ${c.title} failed:`,d);let b=`${c.title}:${d instanceof Error?d.message:"生成失败"}`;bc.push(b),f=(0,aP.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,t.GQ)(c.title)} 生成失败:${b}`},{subtitle:(0,t.GQ)(c.title),order:g}),bf[g]=f}f&&(J[i]=f),C(A)}))))d&&cm.push(cl.run(d))}await Promise.all(cm);let cr=be.filter(a=>!!a);bd.push(...bf.filter(a=>!!a));let cs=[];if(b9.enableGlobalReview)try{let b=b9.globalReviewSamplingRate??1,c=b>=1||cr.length<=2?cr:cr.filter((a,c)=>c%Math.max(2,Math.round(1/b))==0),d=c.length,e=()=>E(()=>a7({template:q,chapters:c,chapterReviews:[],promptTexts:aK,requirement:a.requirement,projectContext:bQ,diagnostics:cb,signal:a.signal})),f=()=>{let a=cr.map(a=>a.content).join("\n\n");return[...(0,x.qm)(a,bx,bA.scopeConflicts).filter(a=>/跨章一致性冲突/u.test(a.message)),...(0,x.hr)(a,bx).filter(a=>"error"===a.level)].map(a=>`${a.message};${a.suggestion||""}`)},g=await e();cs=[...new Set([...g.issues,...f()])];for(let b=0;b<2&&cs.length>0;b+=1){(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:"global-consistency-repair",status:"running",message:`跨章一致性冲突第 ${b+1} 轮定向修复(${cs.length} 个冲突)`},{subtitle:"跨章一致性修复"})),C(cr);let c=0;for(let b of cr){let d=b.content.replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡"),e=cs.filter(a=>{if(a.includes(b.title)||(a.match(/不一致的表述\s*([^;;。\n]+)/u)?.[1]||"").split(/[、,,]/u).some(a=>{let b=a.trim().replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡");return b.length>=3&&d.includes(b)}))return!0;let c=a.match(/正文([^配比厚度\s]{1,6}?)(?:配比|厚度)/u)?.[1];return!!(c&&b.content.includes(c))});if(0===e.length)continue;let f=await E(()=>(0,aQ.X6)(cb,`global-consistency-repair:${b.id}`,()=>(0,aQ.l8)({template:q,chapter:{id:b.id,title:b.title,content:b.content,evidence:b.evidence||[],missingFacts:b.missingFacts||[],sections:b.sections},issues:e.map(a=>`${a};请严格按冲突描述中给出的资料口径修正本章对应表述,不得引入新的数值;与资料口径一致的既有表述(含分层/子项数值)不得改动。`),promptTexts:aK,requirement:a.requirement,forbidDrawingImages:!0,diagnostics:cb,signal:a.signal})));f.content&&f.content!==b.content&&(b.content=f.content,c+=1)}if(0===c)break;C(cr);let d=await e();cs=[...new Set([...d.issues,...f()])],(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:"global-consistency-review",status:cs.length>0?"failed":"success",message:cs.length>0?`跨章一致性复检:仍有 ${cs.length} 个冲突`:"跨章一致性复检通过"},{subtitle:"全局一致性审查"})),C(cr)}let h=(0,x.KI)(cr,bx,bA.scopeConflicts);h.fixedCount>0&&(cs=[...new Set([...cs.filter(a=>!/^跨章一致性冲突|^工序规格冲突/u.test(a)),...f()])],(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:"global-consistency-deterministic-fix",status:"success",message:`跨章一致性数值定点修复:${h.fixedCount} 处(${h.details.slice(0,4).join("、")})`,details:h.details.slice(4)},{subtitle:"跨章一致性修复"})),C(cr));let i=d<cr.length?{...g.stage,message:`${g.stage.message||"全局一致性审查完成"}(抽检 ${d}/${cr.length} 章)`}:g.stage;(0,aP.fx)(J,i),C(cr)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] global consistency review failed:",b)}let ct=(0,aN.Xi)(bN,cr);if(ct.length>0)for(let b=0;b<2&&ct.length>0;b+=1){(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:"table-execution-repair",status:"running",message:`表格执行率修复第 ${b+1} 轮(${ct.length} 个章节缺表)`},{subtitle:"表格执行率修复"})),C(cr);let c=0;for(let b of ct){let d=cr.find(a=>a.title===b.chapterTitle||b.chapterTitle.includes(a.title)||a.title.includes(b.chapterTitle));if(!d)continue;let e=await E(()=>(0,aQ.X6)(cb,`table-execution-repair:${d.id}`,()=>(0,aQ.l8)({template:q,chapter:{id:d.id,title:d.title,content:d.content,evidence:d.evidence||[],missingFacts:d.missingFacts||[],sections:d.sections},issues:[`计划表格缺失(计划 ${b.planned} 张,实际仅 ${b.actual} 张):${b.plans.map(a=>`${a.title}(表头:${a.fields.map(a=>a.name).join("、")})`).join(";")}。必须按表头字段补齐这些 markdown 表格并紧跟相关小节输出,不得删除已有正文;每个表格前须有 1~2 句引导叙述说明表格作用与关键结论,表格不能替代小节正文;deriveFromProject 字段基于项目工程量、总工期与工序流水按定额工效推导具体数值,projectFactOnly 字段不得编造。`],promptTexts:aK,requirement:a.requirement,forbidDrawingImages:!0,diagnostics:cb,signal:a.signal})));e.content&&e.content!==d.content&&(d.content=e.content,c+=1)}if(0===c){(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:"table-execution-repair",status:"failed",message:`表格执行率修复第 ${b+1} 轮:补表 patch 未应用(${ct.length} 个章节缺表)`},{subtitle:"表格执行率修复"})),C(cr);break}C(cr),ct=(0,aN.Xi)(bN,cr),(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:"table-execution-repair",status:ct.length>0?"failed":"success",message:ct.length>0?`表格执行率修复第 ${b+1} 轮完成,仍有 ${ct.length} 个章节缺表`:`表格执行率修复第 ${b+1} 轮完成`},{subtitle:"表格执行率修复"})),(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:"table-execution-review",status:ct.length>0?"failed":"success",message:ct.length>0?`表格执行率复检:仍有 ${ct.length} 个章节缺表`:"表格执行率复检通过"},{subtitle:"表格执行率核验"}))}{let a=cb.evidence,b=cb.llm;(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"budget-trim-report",status:"success",message:`预算裁剪报告:证据 ${a.raw} 条 → 采用 ${a.used} 条(噪声过滤 ${a.filteredNoise} 条、预算兜底裁剪 ${a.budgetDropped} 条),证据上下文 ${a.contextChars} 字`,details:[`证据质量:平均噪声分 ${a.avgNoiseScore},平均事实密度 ${a.avgFactDensity}`,`检索:${a.searchQueries} 组查询,耗时 ${Math.round(a.searchMs/1e3)} 秒`,`LLM:${b.calls} 次调用,失败 ${b.failures} 次,重试 ${b.retries} 次,schema 校验失败 ${b.schemaFailures} 次`,"防爆兜底类软限制(保留并逐项记录裁剪量):selectEvidenceByBudget 的 maxItems/maxChars、uniqueEvidence 噪声过滤、evidenceBundlePrompt 的 maxChars、块级证据 top-k 截断、块级 facts 截断","语义取舍类软限制(已迁移本地语义模型):evaluationTexts 词面过滤→条目对象化、criterionFeatures 二字滑窗→bge-small 余弦、章节证据字符硬截→语义排序取 top-k","LLM 输出侧:schema 校验(截断位置可诊断)、空响应重试提示词收敛、块成稿 maxTokens 按目标字数 1:1.2(不走 thinking \xd76 放大)"]},{subtitle:"预算裁剪审计"})),C(cr)}return ed({chapterDrafts:cr,chapterDraftsByOrder:be,chapterGenerationStagesByOrder:bf,chapterGenerationStages:bd,effectiveChapters:bN,template:q,allEvidence:a6,projectMaterialScope:a0,progressStages:J,documentSpec:ao,projectMaterialProfile:V,projectMaterialSummary:ae,domainProfile:ap,documentBudget:b6,promptTexts:aI,reviewPromptTexts:aK,input:a,generationStrategy:b9,generationDiagnostics:cb,promptBindings:Q,promptDocumentRules:aG,projectUnderstanding:W,projectContext:bQ,projectRoot:o,projectId:p,readiness:ar,factExtractionPromptTexts:aJ,hasExplicitOutline:ad,missingItems:bb,retrievalCoverageReports:a9,failedChapterMessages:bc,webResearchReport:ba,indexHealth:aY,promptPlan:P,globalConsistencyIssues:cs,scopeConflicts:bA.scopeConflicts,writingTaskBrief:b3,evaluationCriteriaItems:bE.map(a=>a.title).filter(Boolean),tenderRequirements:bJ,requirementsSimilarity:b_,factTokenScopeClassifier:b1,professionalDepthClassifier:b2,agentWorkflow:by,emitProgress:C,withProgressHeartbeat:E})}},79227:(a,b,c)=>{c.d(b,{C:()=>f,previewGenerationBudgetForTemplate:()=>g});var d=c(34680),e=c(95734);function f(a){let b=Math.max(1,a.chapters.length),c=a.targetWords>0?Math.round(a.targetWords/b):1200,d=a.strategy,f=[],g=a.materialFileCount<4&&a.evidenceCount<6,h=Math.max(1,Math.min(b,(Number.isFinite(a.configuredChapterConcurrency)&&a.configuredChapterConcurrency>0?Math.floor(a.configuredChapterConcurrency):void 0)??b)),i=(0,e.Qf)(a.targetWords),j="fast"===d.mode?1:Math.max(1,Math.min(i>=32?5:i>=16?3:2,b)),{floorChars:k,ceilingChars:l}=c>=6e3?{floorChars:14e3,ceilingChars:52e3}:c>=3e3?{floorChars:11e3,ceilingChars:36e3}:{floorChars:8e3,ceilingChars:24e3},m=d.repairRoundBudget?d.repairRoundBudget:Math.max(2,Math.min(4,2+ +(a.targetWords>=2e4)+ +!!g)),n=Math.min(m*b,Math.max(12,2*b));return"strict"===d.mode&&f.push("strict:风险领域关键词命中(专项/安全/质量/验收/合同/合规等)"),a.targetWords>=4e4&&f.push("strict:目标篇幅超长(≥4 万字)"),g&&f.push("strict:资料稀疏(资料包文件 <4 且可用证据 <6 条)"),"fast"===d.mode&&f.push("fast:小文档(≤6000 字且 ≤4 章)全局审查降级为 35% 抽检"),"longform"===d.mode&&f.push("longform:长文档(≥3 万字或 ≥8 章)"),"balanced"===d.mode&&f.push("balanced:常规篇幅文档,标准审查深度"),f.push(`全章节并行生成(${h}/${b} 章同批),审查流水线 ${j} 路,全局 LLM 并发档位 ${i},每章证据预算 ${Math.round(k/1e3)}k-${Math.round(l/1e3)}k 字符,修复轮次预算每章 ${m} 轮(文档级总池 ${n} 轮,收敛判定优先)`),{strategy:d,chapterConcurrency:h,reviewConcurrency:j,llmConcurrency:i,evidenceFloorChars:k,evidenceCeilingChars:l,repairRoundBudget:m,repairPoolBudget:n,triggers:f}}function g(a){let b=Math.max(1,a.chapters.length),c=Math.max(0,Math.round(a.targetWords??0)),e=(0,d.JP)({template:a.template,targetWords:c,requirement:a.requirement,materialFileCount:a.materialFileCount,evidenceCount:a.evidenceCount}),g=f({template:a.template,chapters:a.chapters,targetWords:c,requirement:a.requirement,materialFileCount:a.materialFileCount,evidenceCount:a.evidenceCount,hasVeryLargeExplicitChapter:a.hasVeryLargeExplicitChapter??!1,configuredChapterConcurrency:a.configuredChapterConcurrency??0,strategy:e});return{mode:e.mode,enableGlobalReview:e.enableGlobalReview,globalReviewSamplingRate:e.globalReviewSamplingRate??1,repairRoundBudget:g.repairRoundBudget,chapterConcurrency:g.chapterConcurrency,reviewConcurrency:g.reviewConcurrency,evidenceFloorChars:g.evidenceFloorChars,evidenceCeilingChars:g.evidenceCeilingChars,targetWords:c,chapterCount:b,triggers:g.triggers}}},87942:(a,b,c)=>{c.d(b,{x:()=>d});let d={version:"professional-document-workflow-v3",rules:["complete-local-knowledge-assumption","knowledge-coverage-recovery","fact-trace-placement","chapter-coverage-gate","structured-quality-report","post-repair-verification"]}}};
|
|
136
|
+
${n.trim()}`,b=(0,w.V7)(a),c=Math.min(Math.max(Math.floor(.7*j),(0,aT.ap)(f)),Math.max(500,j)),d=!l||b>=c;return{sectionTitle:f,rewriteReason:g,normalizedSection:a,normalizedLength:b,enoughDepth:d,evidenceCount:m.length||au.length,repairTargetWords:j}}return{sectionTitle:f,rewriteReason:g,normalizedLength:0,enoughDepth:!1,evidenceCount:0,repairTargetWords:j,failed:n?"仍包含 WRITER_MISSING_SECTION":cb.llm.lastError||"空响应"}};for(let b=0;b<L.length;b+=3){let d=L.slice(b,b+3);for(let b of(await Promise.allSettled(d.map(a=>O(a))))){if("rejected"===b.status){if(a.signal?.aborted)throw b.reason;M.push(`失败:${b.reason instanceof Error?b.reason.message:"未知异常"}`);continue}if(!b.value)continue;if(b.value.failed){M.push(`失败:${b.value.sectionTitle}(${b.value.failed})`);let a=(y.get(b.value.sectionTitle)||0)+1;y.set(b.value.sectionTitle,a),a>=2&&x.add(b.value.sectionTitle);continue}let c=c4(k,b.value.sectionTitle),d=b.value.enoughDepth?N(e.content,b.value.sectionTitle,b.value.normalizedSection||"",c):e.content,f=d!==e.content;if(f&&(e={...e,content:d}),f)y.delete(b.value.sectionTitle),x.delete(b.value.sectionTitle);else if(!b.value.enoughDepth){let a=(y.get(b.value.sectionTitle)||0)+1;y.set(b.value.sectionTitle,a),a>=2&&x.add(b.value.sectionTitle)}M.push(f?`成功:${b.value.sectionTitle}(${b.value.normalizedLength}字,证据 ${b.value.evidenceCount} 条)`:`失败:${b.value.sectionTitle}(${b.value.enoughDepth?"未定位到原小节块":`补写不足 ${b.value.normalizedLength}/${b.value.repairTargetWords} 字`})`)}(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:"running",message:`${(0,t.GQ)(c.title)} 已补写深度不足小节 ${Math.min(b+3,L.length)}/${L.length}`,details:M},{subtitle:"Agent Repairer",order:H})),C(A)}let P={content:e.content,appliedCount:0};F?(o=!0,P=await E(()=>(0,aQ.X6)(cb,`agent-polisher:${c.id}`,()=>(0,aQ.l8)({template:q,chapter:{id:c.id,title:c.title,content:e.content,evidence:au,missingFacts:av,sections:b2},issues:n.map(a=>`${a.message};${a.suggestion||""}`),promptTexts:[d||bw,G].filter(Boolean).join("\n\n"),requirement:a.requirement,forbidDrawingImages:!1,diagnostics:cb,signal:a.signal})))):h.some(a=>!/Writer 未完成|正文不足,未达到任务最小深度/u.test(a.message))&&(P=await E(()=>(0,aQ.X6)(cb,`agent-repairer:${c.id}`,()=>(0,aQ.l8)({template:q,chapter:{id:c.id,title:c.title,content:e.content,evidence:au,missingFacts:av,sections:b2},issues:[...h.map(a=>`${a.message};${a.suggestion||""}`),...n.length>0&&!o?n.map(a=>`${a.message};${a.suggestion||""}`):[]],promptTexts:[d||bw,G].filter(Boolean).join("\n\n"),requirement:a.requirement,forbidDrawingImages:!1,diagnostics:cb,signal:a.signal,maxTokens:m?3200:void 0})))),e={...e,content:dq(P.content||e.content,c)},f=eq({task:bu.task,draft:e,context:by,plannedCoverage:k}),by.reviewResults={...by.reviewResults||{},[c.id]:f},i=(h=f.issues.filter(a=>"blocker"===a.severity||"error"===a.level)).some(a=>/Writer 未完成/u.test(a.message)),j=h.some(a=>/正文不足,未达到任务最小深度/u.test(a.message)),l=f.issues.some(a=>"error"!==a.level&&"blocker"!==a.severity&&/正文不足,未达到任务最小深度/u.test(a.message)&&!x.has(D(a.message))),n=f.issues.filter(a=>"warning"===a.level&&/未匹配到独立小节标题|工序顺序表达缺失/u.test(a.message)),p=h.length>0&&(f.repairable||i||j)||l||0===h.length&&n.length>0&&!o,h.length<v?u=0:h.length>0&&(u+=1),v=h.length;let Q=h.length>0,R=`chapter-repairer-${c.id}`,S=by.nodes.find(a=>a.id===R);S?(S.status=Q?"failed":"completed",S.completedAt=Date.now(),S.outputSummary=f.issues.length?`修复后仍有 ${f.issues.length} 个问题`:"定向修复通过",S.issues=f.issues):by.nodes.push({id:R,type:"chapter_repairer",status:Q?"failed":"completed",startedAt:Date.now(),completedAt:Date.now(),outputSummary:f.issues.length?`修复后仍有 ${f.issues.length} 个问题`:"定向修复通过",metrics:{supportedFacts:f.supportedFacts},issues:f.issues});let T=by.nodes.find(a=>a.id===`chapter-reviewer-${c.id}`);T&&"running"===T.status&&(T.status=Q?"failed":"completed",T.completedAt=Date.now(),T.outputSummary=f.issues.length?`${f.issues.length} 个 Reviewer 提示`:"Reviewer 通过"),(0,c2.cN)(by),(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:`agent-reviewer-${c.id}`,status:Q?"failed":"success",message:Q?`${(0,t.GQ)(c.title)} Reviewer 第 ${s} 轮复审仍有 ${h.length} 个阻断问题${p&&cn.remaining>0&&s<r+2?",继续下一轮修复":""}`:`${(0,t.GQ)(c.title)} Reviewer 第 ${s} 轮复审通过`,details:f.issues.map(a=>a.message)},{subtitle:"Agent Reviewer",order:H-1})),(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:Q?"failed":"success",message:f.issues.length?`${(0,t.GQ)(c.title)} 第 ${s} 轮定向修复后仍有 ${f.issues.length} 个问题`:`${(0,t.GQ)(c.title)} 定向修复通过`,details:[...M,...f.issues.map(a=>`剩余:${a.message}`)]},{subtitle:"Agent Repairer",order:H})),C(A)}f.issues.some(a=>"blocker"===a.severity||"error"===a.level)&&bc.push(`${(0,t.GQ)(c.title)} Reviewer 未通过:${f.issues.map(a=>a.message).join(";")}(已修复 ${s} 轮,${cn.remaining<=0?"文档级修复总池已耗尽":"本章修复轮次达上限"};问题已标记并转入门禁阻断,可在记录详情查看后决定继续修复或调整模板)`),be[g]=e,A=be.filter(a=>!!a),C(A),cb.quality.blockingCount+=f.issues.filter(a=>"error"===a.level).length,cb.quality.importantCount+=f.issues.filter(a=>"warning"===a.level).length}catch(b){if(a.signal?.aborted)throw b;console.error(`[gen] chapter ${c.title} review failed:`,b),bc.push(`${(0,t.GQ)(c.title)}:审查修复阶段失败:${b instanceof Error?b.message:"未知错误"}`)}}}catch(d){if(a.signal?.aborted)throw d;console.error(`[gen] chapter ${c.title} failed:`,d);let b=`${c.title}:${d instanceof Error?d.message:"生成失败"}`;bc.push(b),f=(0,aP.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,t.GQ)(c.title)} 生成失败:${b}`},{subtitle:(0,t.GQ)(c.title),order:g}),bf[g]=f}f&&(J[i]=f),C(A)}))))d&&cm.push(cl.run(d))}await Promise.all(cm);let cr=be.filter(a=>!!a);bd.push(...bf.filter(a=>!!a));let cs=[];if(b9.enableGlobalReview)try{let b=b9.globalReviewSamplingRate??1,c=b>=1||cr.length<=2?cr:cr.filter((a,c)=>c%Math.max(2,Math.round(1/b))==0),d=c.length,e=()=>E(()=>a7({template:q,chapters:c,chapterReviews:[],promptTexts:aK,requirement:a.requirement,projectContext:bQ,diagnostics:cb,signal:a.signal})),f=()=>{let a=cr.map(a=>a.content).join("\n\n");return[...(0,x.qm)(a,bx,bA.scopeConflicts).filter(a=>/跨章一致性冲突/u.test(a.message)),...(0,x.hr)(a,bx).filter(a=>"error"===a.level)].map(a=>`${a.message};${a.suggestion||""}`)},g=await e();cs=[...new Set([...g.issues,...f()])];for(let b=0;b<2&&cs.length>0;b+=1){(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:"global-consistency-repair",status:"running",message:`跨章一致性冲突第 ${b+1} 轮定向修复(${cs.length} 个冲突)`},{subtitle:"跨章一致性修复"})),C(cr);let c=0;for(let b of cr){let d=b.content.replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡"),e=cs.filter(a=>{if(a.includes(b.title)||(a.match(/不一致的表述\s*([^;;。\n]+)/u)?.[1]||"").split(/[、,,]/u).some(a=>{let b=a.trim().replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡");return b.length>=3&&d.includes(b)}))return!0;let c=a.match(/正文([^配比厚度\s]{1,6}?)(?:配比|厚度)/u)?.[1];return!!(c&&b.content.includes(c))});if(0===e.length)continue;let f=await E(()=>(0,aQ.X6)(cb,`global-consistency-repair:${b.id}`,()=>(0,aQ.l8)({template:q,chapter:{id:b.id,title:b.title,content:b.content,evidence:b.evidence||[],missingFacts:b.missingFacts||[],sections:b.sections},issues:e.map(a=>`${a};请严格按冲突描述中给出的资料口径修正本章对应表述,不得引入新的数值;与资料口径一致的既有表述(含分层/子项数值)不得改动。`),promptTexts:aK,requirement:a.requirement,forbidDrawingImages:!0,diagnostics:cb,signal:a.signal})));f.content&&f.content!==b.content&&(b.content=f.content,c+=1)}if(0===c)break;C(cr);let d=await e();cs=[...new Set([...d.issues,...f()])],(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:"global-consistency-review",status:cs.length>0?"failed":"success",message:cs.length>0?`跨章一致性复检:仍有 ${cs.length} 个冲突`:"跨章一致性复检通过"},{subtitle:"全局一致性审查"})),C(cr)}let h=(0,x.KI)(cr,bx,bA.scopeConflicts);h.fixedCount>0&&(cs=[...new Set([...cs.filter(a=>!/^跨章一致性冲突|^工序规格冲突/u.test(a)),...f()])],(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:"global-consistency-deterministic-fix",status:"success",message:`跨章一致性数值定点修复:${h.fixedCount} 处(${h.details.slice(0,4).join("、")})`,details:h.details.slice(4)},{subtitle:"跨章一致性修复"})),C(cr));let i=d<cr.length?{...g.stage,message:`${g.stage.message||"全局一致性审查完成"}(抽检 ${d}/${cr.length} 章)`}:g.stage;(0,aP.fx)(J,i),C(cr)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] global consistency review failed:",b)}let ct=(0,aN.Xi)(bN,cr);if(ct.length>0)for(let b=0;b<2&&ct.length>0;b+=1){(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:"table-execution-repair",status:"running",message:`表格执行率修复第 ${b+1} 轮(${ct.length} 个章节缺表)`},{subtitle:"表格执行率修复"})),C(cr);let c=0;for(let b of ct){let d=cr.find(a=>a.title===b.chapterTitle||b.chapterTitle.includes(a.title)||a.title.includes(b.chapterTitle));if(!d)continue;let e=await E(()=>(0,aQ.X6)(cb,`table-execution-repair:${d.id}`,()=>(0,aQ.l8)({template:q,chapter:{id:d.id,title:d.title,content:d.content,evidence:d.evidence||[],missingFacts:d.missingFacts||[],sections:d.sections},issues:[`计划表格缺失(计划 ${b.planned} 张,实际仅 ${b.actual} 张):${b.plans.map(a=>`${a.title}(表头:${a.fields.map(a=>a.name).join("、")})`).join(";")}。必须按表头字段补齐这些 markdown 表格并紧跟相关小节输出,不得删除已有正文;每个表格前须有 1~2 句引导叙述说明表格作用与关键结论,表格不能替代小节正文;deriveFromProject 字段基于项目工程量、总工期与工序流水按定额工效推导具体数值,projectFactOnly 字段不得编造。`],promptTexts:aK,requirement:a.requirement,forbidDrawingImages:!0,diagnostics:cb,signal:a.signal,maxTokens:Math.min(12e3,Math.max(6e3,1200*b.plans.length))})));e.content&&e.content!==d.content&&(d.content=e.content,c+=1)}if(0===c){(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:"table-execution-repair",status:"failed",message:`表格执行率修复第 ${b+1} 轮:补表 patch 未应用(${ct.length} 个章节缺表)`},{subtitle:"表格执行率修复"})),C(cr);break}C(cr),ct=(0,aN.Xi)(bN,cr),(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:"table-execution-repair",status:ct.length>0?"failed":"success",message:ct.length>0?`表格执行率修复第 ${b+1} 轮完成,仍有 ${ct.length} 个章节缺表`:`表格执行率修复第 ${b+1} 轮完成`},{subtitle:"表格执行率修复"})),(0,aP.fx)(J,(0,aP.X5)({type:"llm_review",roleId:"table-execution-review",status:ct.length>0?"failed":"success",message:ct.length>0?`表格执行率复检:仍有 ${ct.length} 个章节缺表`:"表格执行率复检通过"},{subtitle:"表格执行率核验"}))}{let a=cb.evidence,b=cb.llm;(0,aP.fx)(J,(0,aP.X5)({type:"validation",roleId:"budget-trim-report",status:"success",message:`预算裁剪报告:证据 ${a.raw} 条 → 采用 ${a.used} 条(噪声过滤 ${a.filteredNoise} 条、预算兜底裁剪 ${a.budgetDropped} 条),证据上下文 ${a.contextChars} 字`,details:[`证据质量:平均噪声分 ${a.avgNoiseScore},平均事实密度 ${a.avgFactDensity}`,`检索:${a.searchQueries} 组查询,耗时 ${Math.round(a.searchMs/1e3)} 秒`,`LLM:${b.calls} 次调用,失败 ${b.failures} 次,重试 ${b.retries} 次,schema 校验失败 ${b.schemaFailures} 次`,"防爆兜底类软限制(保留并逐项记录裁剪量):selectEvidenceByBudget 的 maxItems/maxChars、uniqueEvidence 噪声过滤、evidenceBundlePrompt 的 maxChars、块级证据 top-k 截断、块级 facts 截断","语义取舍类软限制(已迁移本地语义模型):evaluationTexts 词面过滤→条目对象化、criterionFeatures 二字滑窗→bge-small 余弦、章节证据字符硬截→语义排序取 top-k","LLM 输出侧:schema 校验(截断位置可诊断)、空响应重试提示词收敛、块成稿 maxTokens 按目标字数 1:1.2(不走 thinking \xd76 放大)"]},{subtitle:"预算裁剪审计"})),C(cr)}return ed({chapterDrafts:cr,chapterDraftsByOrder:be,chapterGenerationStagesByOrder:bf,chapterGenerationStages:bd,effectiveChapters:bN,template:q,allEvidence:a6,projectMaterialScope:a0,progressStages:J,documentSpec:ao,projectMaterialProfile:V,projectMaterialSummary:ae,domainProfile:ap,documentBudget:b6,promptTexts:aI,reviewPromptTexts:aK,input:a,generationStrategy:b9,generationDiagnostics:cb,promptBindings:Q,promptDocumentRules:aG,projectUnderstanding:W,projectContext:bQ,projectRoot:o,projectId:p,readiness:ar,factExtractionPromptTexts:aJ,hasExplicitOutline:ad,missingItems:bb,retrievalCoverageReports:a9,failedChapterMessages:bc,webResearchReport:ba,indexHealth:aY,promptPlan:P,globalConsistencyIssues:cs,scopeConflicts:bA.scopeConflicts,writingTaskBrief:b3,evaluationCriteriaItems:bE.map(a=>a.title).filter(Boolean),tenderRequirements:bJ,requirementsSimilarity:b_,factTokenScopeClassifier:b1,professionalDepthClassifier:b2,agentWorkflow:by,emitProgress:C,withProgressHeartbeat:E})}},79227:(a,b,c)=>{c.d(b,{C:()=>f,previewGenerationBudgetForTemplate:()=>g});var d=c(34680),e=c(95734);function f(a){let b=Math.max(1,a.chapters.length),c=a.targetWords>0?Math.round(a.targetWords/b):1200,d=a.strategy,f=[],g=a.materialFileCount<4&&a.evidenceCount<6,h=Math.max(1,Math.min(b,(Number.isFinite(a.configuredChapterConcurrency)&&a.configuredChapterConcurrency>0?Math.floor(a.configuredChapterConcurrency):void 0)??b)),i=(0,e.Qf)(a.targetWords),j="fast"===d.mode?1:Math.max(1,Math.min(i>=32?5:i>=16?3:2,b)),{floorChars:k,ceilingChars:l}=c>=6e3?{floorChars:14e3,ceilingChars:52e3}:c>=3e3?{floorChars:11e3,ceilingChars:36e3}:{floorChars:8e3,ceilingChars:24e3},m=d.repairRoundBudget?d.repairRoundBudget:Math.max(2,Math.min(4,2+ +(a.targetWords>=2e4)+ +!!g)),n=Math.min(m*b,Math.max(12,2*b));return"strict"===d.mode&&f.push("strict:风险领域关键词命中(专项/安全/质量/验收/合同/合规等)"),a.targetWords>=4e4&&f.push("strict:目标篇幅超长(≥4 万字)"),g&&f.push("strict:资料稀疏(资料包文件 <4 且可用证据 <6 条)"),"fast"===d.mode&&f.push("fast:小文档(≤6000 字且 ≤4 章)全局审查降级为 35% 抽检"),"longform"===d.mode&&f.push("longform:长文档(≥3 万字或 ≥8 章)"),"balanced"===d.mode&&f.push("balanced:常规篇幅文档,标准审查深度"),f.push(`全章节并行生成(${h}/${b} 章同批),审查流水线 ${j} 路,全局 LLM 并发档位 ${i},每章证据预算 ${Math.round(k/1e3)}k-${Math.round(l/1e3)}k 字符,修复轮次预算每章 ${m} 轮(文档级总池 ${n} 轮,收敛判定优先)`),{strategy:d,chapterConcurrency:h,reviewConcurrency:j,llmConcurrency:i,evidenceFloorChars:k,evidenceCeilingChars:l,repairRoundBudget:m,repairPoolBudget:n,triggers:f}}function g(a){let b=Math.max(1,a.chapters.length),c=Math.max(0,Math.round(a.targetWords??0)),e=(0,d.JP)({template:a.template,targetWords:c,requirement:a.requirement,materialFileCount:a.materialFileCount,evidenceCount:a.evidenceCount}),g=f({template:a.template,chapters:a.chapters,targetWords:c,requirement:a.requirement,materialFileCount:a.materialFileCount,evidenceCount:a.evidenceCount,hasVeryLargeExplicitChapter:a.hasVeryLargeExplicitChapter??!1,configuredChapterConcurrency:a.configuredChapterConcurrency??0,strategy:e});return{mode:e.mode,enableGlobalReview:e.enableGlobalReview,globalReviewSamplingRate:e.globalReviewSamplingRate??1,repairRoundBudget:g.repairRoundBudget,chapterConcurrency:g.chapterConcurrency,reviewConcurrency:g.reviewConcurrency,evidenceFloorChars:g.evidenceFloorChars,evidenceCeilingChars:g.evidenceCeilingChars,targetWords:c,chapterCount:b,triggers:g.triggers}}},87942:(a,b,c)=>{c.d(b,{x:()=>d});let d={version:"professional-document-workflow-v3",rules:["complete-local-knowledge-assumption","knowledge-coverage-recovery","fact-trace-placement","chapter-coverage-gate","structured-quality-report","post-repair-verification"]}}};
|