@customize-agent/server 4.19.14 → 4.19.15

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.
@@ -32,7 +32,7 @@ ${b}
32
32
 
33
33
  返回 JSON:{"issues":[]}`,{maxTokens:1e3,temperature:.1,signal:a.signal,diagnostics:a.diagnostics,contextLayers:{l0:h.length,l1:(0,y.CX)([a.promptTexts]),l3:(0,y.CX)([b,'\n\n返回 JSON:{"issues":[]}'])},prefixKey:"review-global-consistency"})))).flatMap(a=>Array.isArray(a?.issues)?a.issues:[]).map(aT).filter(Boolean))];return{issues:i,stage:(0,aL.X5)({type:"llm_review",roleId:"global-consistency-review",status:i.length>0?"failed":"success",message:i.length>0?`全局一致性审查完成:发现 ${i.length} 个跨章问题`:"全局一致性审查通过"},{subtitle:"全局一致性审查"})}}let aW=/安全|文明|质量|绿色施工|环保|扬尘|消防|应急|危大|风险|规范|标准|管理要求|施工工艺|技术措施|验收/u,aX=/项目名称|工程名称|建设地点|建设单位|招标人|发包人|建设规模|招标范围|合同工期|计划工期|质量标准|危大工程清单|工程量|材料规格|设备型号|图纸参数|报价|单价|利润|税率|合同金额|联系方式|品牌/u,aY=/报价|单价|合价|金额|利润|税率|增值税|招标控制价|最高投标限价|中标价|合同价|暂列金额/u,aZ=/联网增强|联网检索|网页资料|搜索结果|根据网页|互联网资料|在线资料|浏览器|搜索引擎/u,a$=["项目名称","工程名称","建设地点","建设单位","招标人","发包人","建设规模","招标范围","合同工期","计划工期","工程量","报价","单价"];function a_(a){return a.replace(/&amp;/gu,"&").replace(/&lt;/gu,"<").replace(/&gt;/gu,">").replace(/&quot;/gu,'"').replace(/&#39;/gu,"'").replace(/<[^>]+>/gu,"").replace(/\s+/gu," ").trim()}async function a0(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=a_(a[1]||""),c=a_(a[2]||""),d=a_(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||aX.test(b)||aY.test(b)||aZ.test(b)||d.some(a=>a&&b.includes(a)))&&(0===c.length||c.some(b=>a.url.includes(b)))}).slice(0,b):[]}async function a1(a){if(!a.config.enabled||!function(a,b){let c=`${a} ${b.join(" ")}`;return!(!aW.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(aX,"")} 公开规范 通用要求`.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 a0(e,a.config.maxResultsPerQuery,a.config.trustedDomains,a.runtimeRules.forbiddenTerms||[],a.signal))){let e=function(a,b){let c=a;for(let a of a$)c=c.replace(RegExp(`${a}[^。;;
34
34
  ]{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(aY,"").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}
35
- ${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}}var a2=c(73186);function a3(a){return/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|\d{1,2}\.\d{1,2}/u.test(a)}function a4(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/[\s,。,.;;::《》“”‘’()()_-]+/gu,"").toLowerCase()}function a5(a,b){let c=a4(b);if(!c||c.length<4)return!0;let d=a4(a);return!!d.includes(c)||c.length>=12&&d.includes(c.slice(0,Math.max(8,Math.floor(.72*c.length))))}function a6(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/\s+/gu,"").replace(/[,。,.;;::《》“”‘’()()_-]/gu,"").toLowerCase()}function a7(a,b){let c=a.trim();if((0,l.d2)(b,c)||(0,l.rF)(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=a6(d&&/工期|总工期|合同工期|计划工期|施工周期/u.test(c)?d:c);return!e||e.length>80?"":e}var a8=c(44505),a9=c(85016),ba=c(48161),bb=c(22213),bc=c(3063);let bd=/^(?:\d{12}|(?:ZB|WB)\d{12})$/u,be=/工作表:(\d+\.\d+)/u,bf=/第1页\s*共(\d+)页/u,bg=/工程名称:(.+?)\s*标段/u,bh=/第(\d+)页\s*共\d+页/gu;function bi(a){let b=be.exec(a.sectionTitle);if(b)return b[1];let c=a.content.split("\n")[0]||"",d=be.exec(c);return d?d[1]:""}function bj(a){let b=new Map;for(let c of a){let a=b.get(c.villageGroup)||[];a.push(c),b.set(c.villageGroup,a)}return b}var bk=c(22496),bl=c(48661);let bm={type:"object",required:["meta","data","outline"],properties:{meta:{type:"object",required:!0,properties:{version:{type:"string",required:!0,minLength:1},docType:{type:"string",required:!0,minLength:1},createdAt:{type:"string",required:!0,minLength:1},sourceMaterials:{type:"array",required:!0,items:{type:"string"}}}},data:{type:"object",required:!0,properties:{project:{type:"object",required:!0,properties:{name:{type:"string",required:!0,minLength:1},scope:{type:"string",required:!0},works:{type:"array",required:!0,items:{type:"string"}}}},contract:{type:"object",required:!0,properties:{totalDays:{type:"number",required:!0},qualityStandard:{type:"string",required:!0},pricingFile:{type:"string",required:!0}}},milestones:{type:"array",required:!0,minItems:1,items:{type:"object"}},resources:{type:"object",required:!0,properties:{labor:{type:"object",required:!0},equipment:{type:"array",required:!0}}},materialsPlan:{type:"array",required:!0},redLineFacts:{type:"array",required:!0},quantities:{type:"object",required:!0},standardBlocks:{type:"array",required:!0},keyDifficulties:{type:"array",required:!0,minItems:1}}},outline:{type:"object",required:!0,properties:{chapters:{type:"array",required:!0,minItems:1}}}}};function bn(a){let b=new Map;for(let c of a.entries){if(!c.name)continue;let a=b.get(c.name);a?a.total+=c.quantity:b.set(c.name,{value:c.quantity,unit:c.unit,sourceFile:c.sourceFile,seq:c.seq,total:c.quantity})}let c={};for(let[a,d]of b)c[a]={value:Math.round(1e3*d.total)/1e3,unit:d.unit,sourceFile:d.sourceFile,seq:d.seq};return c}let bo=[{key:"绿化养护期",namePattern:/养护/u,extract:a=>{let b=/(?:一级|二级)养护[^。;;]{0,20}/u.exec(a.description);return b?b[0].trim():void 0}},{key:"喷播草籽种类",namePattern:/喷播|草籽/u,extract:a=>{let b=/(?:草籽|种子)[^。;;]*?(?:荷兰菊|紫花地丁|白三叶)[^。;;]*/u.exec(a.description);if(b)return b[0].replace(/^[^::]*[::]?/u,"").trim();let c=/(?:荷兰菊|紫花地丁|白三叶)[^。;;]*/u.exec(a.description);return c?c[0].trim():void 0}},{key:"池塘清淤深度",namePattern:/清淤|清塘/u,extract:a=>{let b=/(?:清淤深度|深度)[^。;;]*?(\d+(?:\.\d+)?)\s*m/u.exec(a.description);return b?`清淤深度 ${b[1]}m`:void 0}},{key:"过路涵涵头混凝土",namePattern:/涵头|过路涵/u,extract:a=>{let b=/(C\d{2})[^。;;]*混凝土/u.exec(a.description)||/混凝土[^。;;]*(C\d{2})/u.exec(a.description);return b?`涵头混凝土 ${b[1]}`:void 0}},{key:"路肩土预留",namePattern:/路肩/u,extract:a=>{let b=/(\d+(?:\.\d+)?)\s*[-~至]\s*(\d+(?:\.\d+)?)\s*m/u.exec(a.description);return b?`两侧各预留 ${b[1]}-${b[2]}m`:void 0}},{key:"一般路灯",namePattern:/路灯/u,extract:a=>{let b=/(\d+)\s*W/u.exec(a.description),c=/高\s*(\d+(?:\.\d+)?)\s*m/u.exec(a.description);if(!b&&!c)return;let d=["一般路灯"];return b&&d.push(`${b[1]}W LED`),c&&d.push(`高${c[1]}m`),/含基础|含灯杆基础|灯杆基础/u.test(a.description)&&d.push("含基础"),d.join(" ")}},{key:"暂列金额",namePattern:/暂列金额/u,extract:a=>{let b=/(\d+(?:\.\d+)?)\s*万元/u.exec(a.description);return b?`${b[1]}万元`:void 0},amount:!0}],bp=[{trade:"管道工",pattern:/塑料管|管道|检查井|雨水口|化粪池|闭水|涵管|排水/u},{trade:"混凝土工",pattern:/混凝土|水泥砂浆|垫层|涵头|压顶/u},{trade:"瓦工",pattern:/砌筑|砌体|砖|路缘石|铺装|侧石|平石|块料|踏步|台阶/u},{trade:"绿化工",pattern:/绿化|栽植|种植|苗木|草籽|喷播|养护|灌木|乔木|色带|草坪/u},{trade:"电工",pattern:/路灯|配电|电缆|强电|防雷|接地|灯具|亮化/u},{trade:"普工",pattern:/土方|清杂|拆除|平整|回填|清淤|开挖/u}],bq={管道铺设:{unit:"m",min:.15,max:.3},土方工程:{unit:"m3",min:.08,max:.15},混凝土工程:{unit:"m3",min:.8,max:1.5},道路铺装:{unit:"m2",min:.3,max:.6},砌筑工程:{unit:"m3",min:1.2,max:2},绿化工程:{unit:"m2",min:.08,max:.15},安装工程:{unit:"项",min:0,max:0}};function br(a){let b=`${a.name} ${a.description}`;return/塑料管|管道|检查井|雨水口|化粪池|涵管/u.test(b)?"管道铺设":/挖一般土方|挖沟槽|挖基坑|回填|清淤|余方|弃置/u.test(b)&&"m3"===a.unit?"土方工程":/混凝土|垫层|涵头|压顶/u.test(b)?"混凝土工程":/水泥混凝土|碎石|路床|铺装|道路|青砖|散水|块料/u.test(b)&&"m2"===a.unit?"道路铺装":/砌筑|砌体|砖/u.test(b)?"砌筑工程":/绿化|栽植|种植|苗木|草籽|喷播|灌木|乔木|色带|草坪/u.test(b)?"绿化工程":"安装工程"}let bs=[{key:"prep",label:"施工准备与清杂拆除",pattern:/清杂|拆除|场地平整|临时/u},{key:"pipe",label:"污水管网工程",pattern:/塑料管|检查井|管网|排水|化粪池|雨水口/u},{key:"road",label:"道路铺装工程",pattern:/道路|路床|水泥混凝土|级配碎石|路缘石|青砖|散水|过路涵/u},{key:"landscape",label:"景观与绿化工程",pattern:/景观|绿化|栽植|种植|苗木|喷播|小菜园|沟塘|清淤/u},{key:"lighting",label:"亮化与收尾工程",pattern:/路灯|亮化|配电|电缆|防雷/u}];function bt(a,b){let c=Math.max(30,Math.round(b)),d=Math.max(1,Math.round(1e4*a*.15/350/c*1.3)),e=Math.max(d,Math.round(1e4*a*.25/250/c*1.6));return{min:d,max:e,detail:`合同估算价 ${a} 万元 \xd7 人工费占比 15%~25% \xf7 综合工日单价 250~350 元 \xf7 有效工期 ${c} 天 \xd7 峰值系数 1.3~1.6`}}let bu=[{name:"挖掘机",spec:"0.6~1.0m\xb3",pattern:/人机配合|开挖|挖土|沟槽/u,unit:"m3",basis:"人机配合开挖(清单特征)"},{name:"自卸汽车",spec:"8t",pattern:/余方弃置|弃方|外运|回填/u,unit:"m3",basis:"土方运输与回填(清单条目)"},{name:"压路机",spec:"8~12t",pattern:/碾压|压实度/u,unit:"m2",basis:"路床碾压与压实度要求(清单特征)"},{name:"蛙式打夯机",spec:"",pattern:/回填|夯实/u,unit:"m3",basis:"沟槽回填夯实(清单条目)"},{name:"混凝土搅拌运输车",spec:"",pattern:/商品混凝土|C\d{2}混凝土/u,unit:"m3",basis:"商品混凝土运输(清单特征)"},{name:"插入式振捣器",spec:"",pattern:/混凝土浇筑|振捣/u,unit:"m3",basis:"混凝土浇筑(清单条目)"},{name:"洒水车",spec:"",pattern:/养护|绿化|喷播|栽植/u,unit:"m2",basis:"绿化养护与洒水(清单条目)"},{name:"高空作业车",spec:"",pattern:/路灯|灯具安装/u,unit:"套",basis:"路灯安装(清单条目)"}],bv=new Set(["挖掘机","自卸汽车","压路机","洒水车","高空作业车","混凝土搅拌运输车"]),bw=[{id:"vertical_transport",label:"垂直运输方式",relevance:/塔吊|塔式起重机|施工电梯|施工升降机|物料提升机|垂直运输/u,options:[{value:"塔式起重机",aliases:/塔吊|塔式起重机/},{value:"施工升降机",aliases:/施工电梯|施工升降机/},{value:"物料提升机",aliases:/物料提升机/},{value:"汽车式起重机",aliases:/汽车吊|汽车式起重机/}]},{id:"formwork",label:"模板体系",relevance:/模板/u,exclusive:!0,options:[{value:"木胶合板模板",aliases:/木胶合板|覆膜胶合板|胶合板模板|木模板/},{value:"钢模板",aliases:/钢模板|定型钢模/},{value:"铝合金模板",aliases:/铝合金模板|铝模/},{value:"大模板",aliases:/大模板/},{value:"爬升模板",aliases:/爬升模板|爬模/}]},{id:"concrete_supply",label:"混凝土供应",relevance:/混凝土/u,exclusive:!0,options:[{value:"商品混凝土(预拌)",aliases:/商品混凝土|预拌混凝土/},{value:"自拌混凝土",aliases:/自拌混凝土|现场拌制混凝土|现场搅拌混凝土/}]},{id:"scaffold",label:"脚手架体系",relevance:/脚手架|爬架/u,options:[{value:"落地式钢管脚手架",aliases:/落地式[^,。;;]{0,6}脚手架|落地脚手架/},{value:"悬挑式脚手架",aliases:/悬挑[^,。;;]{0,6}脚手架|悬挑脚手架/},{value:"附着式升降脚手架",aliases:/附着式升降脚手架|爬架/},{value:"门式脚手架",aliases:/门式脚手架/},{value:"盘扣式脚手架",aliases:/盘扣/},{value:"碗扣式脚手架",aliases:/碗扣/}]},{id:"foundation_support",label:"基坑支护形式",relevance:/基坑|支护/u,exclusive:!0,options:[{value:"放坡开挖",aliases:/放坡/},{value:"土钉墙支护",aliases:/土钉墙|土钉支护/},{value:"灌注桩支护",aliases:/灌注桩|钻孔灌注桩|排桩支护/},{value:"钢板桩支护",aliases:/钢板桩|拉森桩/},{value:"地下连续墙",aliases:/地下连续墙|地连墙/},{value:"锚杆(索)支护",aliases:/锚杆|锚索/},{value:"喷锚支护",aliases:/喷锚/}]},{id:"earthwork_haul",label:"土方外运方式",relevance:/土方|渣土|弃土/u,options:[{value:"自卸汽车外运",aliases:/自卸汽车|自卸车/},{value:"密闭渣土车外运",aliases:/密闭式?[^,。;;]{0,4}车|渣土车/},{value:"场内平衡利用",aliases:/场内平衡|就地平衡|场内调配|回填利用/}]}],bx=/不采用|不使用|不设置|不考虑|不得|禁止|取消/u;function by(a){return a.split(/[,,、::]/u).map(a=>a.trim()).filter(Boolean)}function bz(a){let b=function(a,b){let c=[];for(let a of b){let b=function(a){let b=`${a.filePath||""} ${a.roleId||""} ${a.sectionTitle||""}`;return/补疑|澄清|答疑|修正|更新/u.test(b)?100:/招标文件|招标公告|投标人须知|前附表/u.test(b)?90:/清单|工程量/u.test(b)||/图纸|设计|dwg|drawing/iu.test(b)?80:/规范|标准|规程/u.test(b)?60:50}(a);for(let d of(0,z.wj)((0,A.lG)(a.content)).split(/[。;;\n]/u)){let a=d.trim();a.length<6||a.length>200||c.push({text:a,weight:b})}}for(let b of a){let a=`${b.key||""} ${b.fieldName||""} ${(0,A.lG)(b.value)}`.trim();a.length<6||a.length>200||c.push({text:a,weight:Math.round(60*Math.max(.5,Math.min(1,b.confidence||.7)))})}return c}(a.facts,a.evidence),c=[];for(let a of bw){let d=new Map;for(let c of b){if(!a.relevance.test(c.text))continue;let b=by(c.text);for(let e of a.options){let a=b.find(a=>e.aliases.test(a));if(!a||bx.test(a))continue;let f=d.get(e.value)||{score:0,mentions:0,bestWeight:0};f.score+=c.weight,f.mentions+=1,f.bestWeight=Math.max(f.bestWeight,c.weight),d.set(e.value,f)}}let e=[...d.entries()].map(([a,b])=>({value:a,...b})).sort((a,b)=>b.score-a.score||b.mentions-a.mentions||(a.value<b.value?-1:1)),f=e[0];if(!f||f.bestWeight<60)continue;if(a.exclusive){c.push({id:a.id,label:a.label,values:[f.value]});continue}let g=Math.max(60,.4*f.score),h=e.filter(a=>a.score>=g).slice(0,3).map(a=>a.value);h.length>0&&c.push({id:a.id,label:a.label,values:h})}return c}let bA=[{item:"主要施工方法",weight:"1.5",chapterPattern:/主要分部分项|施工方案|施工方法/u},{item:"物资计划",weight:"0.5",chapterPattern:/物资|资源配置|材料/u},{item:"机械设备计划",weight:"0.5",chapterPattern:/机械|资源配置|设备/u},{item:"劳动力安排",weight:"0.5",chapterPattern:/劳动力|资源配置|人员/u},{item:"质量措施",weight:"1.5",chapterPattern:/质量/u},{item:"安全措施",weight:"1.5",chapterPattern:/安全/u},{item:"工期措施",weight:"1.0",chapterPattern:/工期|进度/u},{item:"文明施工",weight:"1.0",chapterPattern:/文明施工|环境保护|绿色施工/u},{item:"总平面布置图",weight:"0.5",chapterPattern:/总平面|平面布置/u},{item:"重难点及保证措施",weight:"1.5",chapterPattern:/重难点|重点|难点|概况/u}];function bB(a,b){let c=a.trim();if(!c)return"未分部条目";if(/^其他$|^其他工程$/u.test(c)){let a=b.map(a=>a.name);return a.some(a=>/彩绘|护栏|围栏|小品|标识|标牌|墙面|整治/u.test(a))?"环境整治工程":a.some(a=>/绿化|栽植|铺装|种植/u.test(a))?"景观附属工程":a.some(a=>/拆除|清理|清淤|清运/u.test(a))?"清理整治工程":"零星工程"}return/^其他装饰/u.test(c)?"零星装饰工程":/^措施项目$/u.test(c)?b.map(a=>a.name).some(a=>/化粪池|吊装|安装/u.test(a))?"模板、脚手架及化粪池安装工程":"模板与脚手架工程":/墙[、,]?柱面装饰/u.test(c)?b.some(a=>/幕墙|隔断/u.test(a.name))?c:"墙柱面装饰工程":c}function bC(a){let b=[];for(let c of a.matchAll(/(?:\d+|[一二三四五六七八九十]+)[..、]\s*([^::;;。]{1,40}?)[::]\s*([^。;;\n]{1,80})/gu)){let a=c[1].trim(),d=c[2].trim();!/具体详见|其他|满足验收/u.test(a)&&!/详见设计图纸|招标文件补疑/u.test(d)&&a&&d&&b.push({key:a,value:d})}return b}function bD(a,b){let c=[...b].sort((a,b)=>a.seq-b.seq),d={},e=new Map;for(let a of c)a.name&&e.set(a.name,(e.get(a.name)||0)+a.quantity);for(let[a,b]of e){let e=c.find(b=>b.name===a)?.unit||"";d[a]={value:Math.round(1e3*b)/1e3,unit:e}}let f=[...new Set(c.map(a=>a.name).filter(Boolean))].slice(0,16),g=function(a){let b=[];for(let c of a)for(let a of bC(c.description))/含|配合|安装|铺设|浇筑|夯实|碾压|养护|刻痕|拉毛|切缝|灌缝|喷播|栽植|回填|吊装|固定/u.test(a.value)&&a.value.length<=60&&b.push(`${c.name}:${a.value}`);return[...new Set(b)].slice(0,20)}(c),h=[],i=new Set;for(let a of c){for(let b of bC(a.description)){let a=`${b.key}=${b.value}`;if(!i.has(a)&&(i.add(a),h.push({key:b.key,value:b.value,source:"boq"}),h.length>=24))break}if(h.length>=24)break}let j=[];for(let a of c)for(let b of bC(a.description))/压实|试验|检测|验收|闭水|合格/u.test(`${b.key}${b.value}`)&&j.length<12&&!j.includes(b.value)&&j.push(b.value);let k=(0,bk.cn)([a]),l=[];for(let a of(0===j.length&&k.length>0&&j.push(...k[0].acceptance.slice(0,6).map(a=>`${a}(知识卡)`)),k.slice(0,2)))for(let b of a.standards)l.includes(b)||l.push(b);return{name:a,kind:"major",quantities:d,processChain:f,methods:g,params:h,acceptance:j,standards:l,skeleton:["施工概况","施工流程","施工方法"],source:"boq",coveredSeqs:c.map(a=>a.seq)}}function bE(a,b,c){return void 0!==a&&void 0!==b?Math.round((a+b)/2):void 0!==b?b:void 0!==a?a:c}let bF=[{id:"contract_days",chapterPattern:/进度|工期|总体|部署|概况|工程|计划/u,render:a=>a.contract.totalDays>0?[`- 总工期:${a.contract.totalDays} 日历天`]:[]},{id:"labor",chapterPattern:/劳动力|人员|资源|进度|工期|部署|概况/u,render:a=>{let b=[];return a.resources.labor.peakValue>0&&b.push(`- 劳动力峰值:${a.resources.labor.peakValue} 人(全项目唯一峰值口径,不得自设其他峰值)`),a.resources.labor.byPhase.length>0&&b.push(`- 分阶段劳动力投入:${a.resources.labor.byPhase.slice(0,10).map(a=>`${a.phase} ${bE(a.min,a.max,0)} 人`).join("、")}${a.resources.labor.byPhase.length>10?" 等":""}`),a.resources.labor.byTrade.length>0&&b.push(`- 工种配置(高峰同时在场,与峰值同口径):${a.resources.labor.byTrade.map(a=>`${a.trade} ${bE(a.min,a.max,1)} 人`).join("、")}`),b}},{id:"equipment",chapterPattern:/机械|设备|资源/u,render:a=>0===a.resources.equipment.length?[]:[`- 主要机械:${a.resources.equipment.map(a=>`${a.name}${a.spec?`(${a.spec})`:""} ${bE(a.quantity,void 0,Math.max(a.quantity??0,1))} 台`).join("、")}`]},{id:"maintenance_redline",chapterPattern:/绿化|种植|养护|苗木|技能|培训|成品保护|质量/u,render:a=>a.redLineFacts.filter(a=>!a.amount&&/养护|路灯/u.test(a.key)).map(a=>`- 评审红线事实(必须逐条出现且数值一致):${a.key}=${a.value}`)},{id:"village_count",chapterPattern:/概况|工程|总体/u,render:a=>a.redLineFacts.filter(a=>!a.amount&&"自然村数量"===a.key).map(a=>`- 评审红线事实(必须逐条出现且数值一致):${a.key}=${a.value}`)},{id:"basis_regulations",chapterPattern:/编制|工程概况|项目概况|概况|说明/u,render:a=>{let b=[];a.basisRegulations.length>0&&b.push(`- 招标文件引用法规(编制依据小节必须列出法规名称及文号):${a.basisRegulations.join("、")}`),b.push(`- 国家法律法规(现行有效,编制依据小节必须列出法规名称及文号):《中华人民共和国建筑法》(主席令第91号公布,2019年修正)、《中华人民共和国招标投标法》(主席令第21号公布,2017年修正)、《中华人民共和国安全生产法》(主席令第70号公布,2021年修正)、《建设工程质量管理条例》(国务院令第279号公布,2019年修订)、《建设工程安全生产管理条例》(国务院令第393号)、《保障农民工工资支付条例》(国务院令第724号)、《建设工程勘察设计管理条例》(国务院令第293号公布,2017年修订)、《生产安全事故报告和调查处理条例》(国务院令第493号)`),b.push(`- 地方性法规与政府规章(工程所在地,编制依据小节必须列出法规名称):${(function(a){let b=[];return/安徽|合肥/u.test(a)&&b.push("《安徽省建筑市场管理条例》(安徽省人民代表大会常务委员会公告)","《安徽省建设工程质量管理办法》(安徽省人民政府令)","《安徽省安全生产条例》(安徽省人民代表大会常务委员会公告)"),/合肥/u.test(a)&&b.push("《合肥市建设工程施工安全管理办法》(合肥市人民政府令)","《合肥市城市绿化管理条例》(合肥市人民代表大会常务委员会公告)"),0===b.length&&b.push("工程所在地现行地方性法规与政府规章"),b})(a.project.location||"").join("、")}`);let c=function(a){let b=[];for(let c of[{pattern:/道路|路面|路基|土石方/u,standard:"《城镇道路工程施工与质量验收规范》(CJJ 1-2008)"},{pattern:/排水|管道|管网|给排/u,standard:"《给水排水管道工程施工及验收规范》(GB 50268-2008)"},{pattern:/绿化|景观|苗木|栽植|草坪|喷播|小菜园/u,standard:"《园林绿化工程施工及验收规范》(CJJ 82-2012)"},{pattern:/亮化|路灯|照明/u,standard:"《城市道路照明工程施工及验收规程》(CJJ 89-2012)"},{pattern:/砌筑|混凝土|门窗|屋面|装饰|天棚|公厕|建筑/u,standard:"《建筑工程施工质量验收统一标准》(GB 50300-2013)"},{pattern:/基坑|沟槽|地基/u,standard:"《建筑地基基础工程施工质量验收标准》(GB 50202-2018)"}])a.some(a=>c.pattern.test(a))&&!b.includes(c.standard)&&b.push(c.standard);return b.slice(0,6)}(a.project.works);return c.length>0&&b.push(`- 施工验收规范标准(现行有效,编制依据小节必须列出规范名称及编号):${c.join("、")}`),b}}];function bG(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}let bH=/^(?:其他|其他工程|其他装饰工程?|措施项目|墙[、,]?柱面装饰(?:与隔断[、,]?幕墙工程)?)$/u,bI=[{key:"towerCrane",re:/塔式起重机|塔吊/u},{key:"hoist",re:/施工升降机|施工电梯/u},{key:"truckCrane",re:/汽车起重机|汽车吊/u},{key:"rebarCutter",re:/钢筋切断机/u},{key:"rebarBender",re:/钢筋弯曲机/u},{key:"circularSaw",re:/圆盘锯/u}],bJ=[{key:"pump",re:/提升泵|潜水泵/u}];function bK(a){let b=[];for(let c of a?.milestones??[])c.label.trim()&&(c.duration??0)>0&&b.push({node:c.label.trim(),offset:`${c.duration} 天`});let c={};for(let b of a?.resources?.equipment??[]){let a=b.quantity??Math.round(((b.min??1)+(b.max??b.min??1))/2);if(!Number.isFinite(a)||a<=0)continue;let d=bI.find(a=>a.re.test(b.name));void 0!==d&&void 0===c[d.key]&&(c[d.key]=a)}for(let[b,d]of Object.entries(a?.quantities??{})){if(!d||d.value<=0||!/台|套/u.test(d.unit))continue;let a=bJ.find(a=>a.re.test(b));void 0!==a&&void 0===c[a.key]&&(c[a.key]=d.value)}let d=[];for(let[b,c]of Object.entries(a?.quantities??{}))!(!c||!Number.isFinite(c.value)||c.value<10||/台|套/u.test(c.unit))&&/[\u4e00-\u9fa5]{3,}/u.test(b)&&d.push({name:b,value:c.value,unit:c.unit});let e=a?.redLineFacts?.find(a=>"自然村数量"===a.key),f=e?/(\d+)/u.exec(e.value):null,g=(a?.milestones??[]).reduce((a,b)=>a+(b.duration??0),0),h=(a?.contract.totalDays??0)>0?Math.max(0,(a?.contract.totalDays??0)-g):0,i=a?.resources?.labor?.peakValue??0;return{nodeAuthorities:b,machineAuthorities:c,specAuthorities:{...a?.specAuthorities??{}},villageCountAuthority:f?Number(f[1]):0,slackDaysAuthority:h,quantityAuthorities:d,laborPeakAuthority:i>0?i:void 0}}function bL(a){return/^(?:确保\s*)?[人材机](?:员|力|料|械|工)?\s*的保障体系与措施$/u.test(a)}function bM(a,b){let c=a.replace(/\s+/gu,""),d=b.replace(/\s+/gu,"");return c===d||c.includes(d)||d.includes(c)}function bN(a,b,c){for(let c=0;c<2&&a.length>0&&!(4e3>=Math.floor(b/a.length));c+=1){let b=a.filter(a=>a.subPoints.length>=2&&!bO(a.title));if(0===b.length)break;let c=b.reduce((a,b)=>b.subPoints.length>a.subPoints.length?b:a),d=Math.ceil(c.subPoints.length/2);a.push({title:c.subPoints[d].title||c.title,subPoints:c.subPoints.slice(d),facts:[],targetWords:0}),c.subPoints=c.subPoints.slice(0,d)}let d=a.filter(a=>!bO(a.title)),e=bc.gG.test(c)&&d.length>=8&&d.length>0&&d.every(a=>a.subPoints.length<=3)?400:1200,f=a.reduce((a,b)=>a+b.subPoints.length,0)||a.length;for(let c of a){let d=Math.floor(.75*Math.max(e,Math.floor(b/Math.max(1,a.length)))+.25*b*(c.subPoints.length/f));c.targetWords=Math.min(4e3,Math.max(e,d)),(bc.Yp.test(c.title)||bc.gG.test(c.title))&&(c.targetWords=Math.min(4e3,Math.max(c.targetWords,3600)))}}function bO(a){return bc.Yp.test(a)||bc.gG.test(a)}function bP(a,b,c){let d=new Map,e=[];for(let b of a){if(bL(b)||bc.Yp.test(b)||bc.gG.test(b)){e.push({kind:"solo",section:b});continue}let a=/工期|进度|节点|计划|纠偏|预警/u.test(b)?"工期进度":/质量|验收|三检|样板|隐蔽|复试|实测|通病/u.test(b)?"质量验收":/安全|危大|风险|隐患|应急|临边|洞口|消防|临电/u.test(b)?"安全风险":/文明|扬尘|噪声|绿色|废水|垃圾|环保|智慧/u.test(b)?"文明绿色":/劳务|工资|实名|银行|考勤|人员|岗位|组织|职责/u.test(b)?"组织劳务":/资源|材料|设备|机械|人材机|调配/u.test(b)?"资源保障":/施工|工艺|流程|顺序|穿插|部署|区段|流水/u.test(b)?"施工组织":"综合管理";d.has(a)||(d.set(a,[]),e.push({kind:"domain",key:a})),d.get(a).push(b)}let f=a=>{let b=[];for(let c of a){let a=b[b.length-1],d=a?a.sources[a.sources.length-1]:"";!(0,bc.tZ)(c)&&!bL(c)&&a&&(bM(c,d)||function(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}(c,d)>=.75)?(a.sources.push(c),c.length>a.title.length&&(a.title=c)):b.push({title:c,sources:[c]})}return b},g=[];for(let a of e){if("solo"===a.kind){g.push({title:a.section,subPoints:[{title:a.section,sources:[a.section]}],facts:[],targetWords:1200});continue}let c=f(d.get(a.key)||[]);for(let a=0;a<c.length;a+=6){let d=c.slice(a,a+6);g.push({title:d[0].title||b,subPoints:d,facts:[],targetWords:1200})}}return bN(g,c,b),{blocks:g,coveredSections:a.slice(),fallbackSections:[],llmPlanned:!1}}function bQ(a,b){let c=[],d=a.split("\n").filter(a=>!/^\s*\|/u.test(a.trim())).join("\n");if(b.resources.labor.peakValue>0)for(let a of d.matchAll(/(?:劳动力峰值|施工高峰|高峰人数|高峰期劳动力|劳动力高峰)(?:为|约|达到|共计)?[^\n。;;]{0,20}?(\d+(?:\.\d+)?)\s*人/gu)){let d=Number(a[1]);if(d>0&&d!==b.resources.labor.peakValue){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用冲突:正文出现与蓝图不一致的劳动力峰值 ${d} 人`,suggestion:`请统一使用蓝图劳动力峰值:${b.resources.labor.peakValue} 人`});break}}if(b.contract.totalDays>0)for(let a of d.matchAll(/(?:总工期|施工工期|合同工期|工期)(?:为|约|共计|控制)?[^\n。;;]{0,20}?(\d+(?:\.\d+)?)\s*(?:日历)?天/gu)){let d=Number(a[1]);if(d>0&&d!==b.contract.totalDays){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用冲突:正文出现与蓝图不一致的工期表述 ${d}日历天`,suggestion:`请统一使用蓝图总工期:${b.contract.totalDays} 日历天`});break}}for(let d of b.redLineFacts.filter(a=>!a.amount&&"自然村数量"!==a.key)){let b=bG(d.value.trim());b&&(RegExp(b,"u").test(a)||c.push({level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图红线事实缺口:正文未体现「${d.key}=${d.value}」`,suggestion:`请在对应章节补写该红线事实(数值必须与蓝图一致)`}))}let e=b.redLineFacts.find(a=>"自然村数量"===a.key),f=e?Number(/(\d+)/u.exec(e.value)?.[1]):0;if(f>0)for(let a of d.matchAll(/(\d+)\s*个(?:美丽宜居)?自然村(?!分组)/gu)){let b=Number(a[1]);if(b>0&&b!==f){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图红线事实冲突:正文出现与蓝图不一致的自然村数量 ${b} 个`,suggestion:`请统一使用蓝图自然村数量:${f} 个自然村`});break}}for(let[a,e]of Object.entries(b.quantities)){if(!e||e.value<=0)continue;let b=e.unit||"",f=RegExp(`${bG(a)}[^
35
+ ${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}}var a2=c(73186);function a3(a){return/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|\d{1,2}\.\d{1,2}/u.test(a)}function a4(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/[\s,。,.;;::《》“”‘’()()_-]+/gu,"").toLowerCase()}function a5(a,b){let c=a4(b);if(!c||c.length<4)return!0;let d=a4(a);return!!d.includes(c)||c.length>=12&&d.includes(c.slice(0,Math.max(8,Math.floor(.72*c.length))))}function a6(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/\s+/gu,"").replace(/[,。,.;;::《》“”‘’()()_-]/gu,"").toLowerCase()}function a7(a,b){let c=a.trim();if((0,l.d2)(b,c)||(0,l.rF)(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=a6(d&&/工期|总工期|合同工期|计划工期|施工周期/u.test(c)?d:c);return!e||e.length>80?"":e}var a8=c(44505),a9=c(85016),ba=c(48161),bb=c(22213),bc=c(3063);let bd=/^(?:\d{12}|(?:ZB|WB)\d{12})$/u,be=/工作表:(\d+\.\d+)/u,bf=/第1页\s*共(\d+)页/u,bg=/工程名称:(.+?)\s*标段/u,bh=/第(\d+)页\s*共\d+页/gu;function bi(a){let b=be.exec(a.sectionTitle);if(b)return b[1];let c=a.content.split("\n")[0]||"",d=be.exec(c);return d?d[1]:""}function bj(a){let b=new Map;for(let c of a){let a=b.get(c.villageGroup)||[];a.push(c),b.set(c.villageGroup,a)}return b}var bk=c(22496),bl=c(48661);let bm={type:"object",required:["meta","data","outline"],properties:{meta:{type:"object",required:!0,properties:{version:{type:"string",required:!0,minLength:1},docType:{type:"string",required:!0,minLength:1},createdAt:{type:"string",required:!0,minLength:1},sourceMaterials:{type:"array",required:!0,items:{type:"string"}}}},data:{type:"object",required:!0,properties:{project:{type:"object",required:!0,properties:{name:{type:"string",required:!0,minLength:1},scope:{type:"string",required:!0},works:{type:"array",required:!0,items:{type:"string"}}}},contract:{type:"object",required:!0,properties:{totalDays:{type:"number",required:!0},qualityStandard:{type:"string",required:!0},pricingFile:{type:"string",required:!0}}},milestones:{type:"array",required:!0,minItems:1,items:{type:"object"}},resources:{type:"object",required:!0,properties:{labor:{type:"object",required:!0},equipment:{type:"array",required:!0}}},materialsPlan:{type:"array",required:!0},redLineFacts:{type:"array",required:!0},quantities:{type:"object",required:!0},standardBlocks:{type:"array",required:!0},keyDifficulties:{type:"array",required:!0,minItems:1}}},outline:{type:"object",required:!0,properties:{chapters:{type:"array",required:!0,minItems:1}}}}};function bn(a){let b=new Map;for(let c of a.entries){if(!c.name)continue;let a=b.get(c.name);a?a.total+=c.quantity:b.set(c.name,{value:c.quantity,unit:c.unit,sourceFile:c.sourceFile,seq:c.seq,total:c.quantity})}let c={};for(let[a,d]of b)c[a]={value:Math.round(1e3*d.total)/1e3,unit:d.unit,sourceFile:d.sourceFile,seq:d.seq};return c}let bo=[{key:"绿化养护期",namePattern:/养护/u,extract:a=>{let b=/(?:一级|二级)养护[^。;;]{0,20}/u.exec(a.description);return b?b[0].trim():void 0}},{key:"喷播草籽种类",namePattern:/喷播|草籽/u,extract:a=>{let b=/(?:草籽|种子)[^。;;]*?(?:荷兰菊|紫花地丁|白三叶)[^。;;]*/u.exec(a.description);if(b)return b[0].replace(/^[^::]*[::]?/u,"").trim();let c=/(?:荷兰菊|紫花地丁|白三叶)[^。;;]*/u.exec(a.description);return c?c[0].trim():void 0}},{key:"池塘清淤深度",namePattern:/清淤|清塘/u,extract:a=>{let b=/(?:清淤深度|深度)[^。;;]*?(\d+(?:\.\d+)?)\s*m/u.exec(a.description);return b?`清淤深度 ${b[1]}m`:void 0}},{key:"过路涵涵头混凝土",namePattern:/涵头|过路涵/u,extract:a=>{let b=/(C\d{2})[^。;;]*混凝土/u.exec(a.description)||/混凝土[^。;;]*(C\d{2})/u.exec(a.description);return b?`涵头混凝土 ${b[1]}`:void 0}},{key:"路肩土预留",namePattern:/路肩/u,extract:a=>{let b=/(\d+(?:\.\d+)?)\s*[-~至]\s*(\d+(?:\.\d+)?)\s*m/u.exec(a.description);return b?`两侧各预留 ${b[1]}-${b[2]}m`:void 0}},{key:"一般路灯",namePattern:/路灯/u,extract:a=>{let b=/(\d+)\s*W/u.exec(a.description),c=/高\s*(\d+(?:\.\d+)?)\s*m/u.exec(a.description);if(!b&&!c)return;let d=["一般路灯"];return b&&d.push(`${b[1]}W LED`),c&&d.push(`高${c[1]}m`),/含基础|含灯杆基础|灯杆基础/u.test(a.description)&&d.push("含基础"),d.join(" ")}},{key:"暂列金额",namePattern:/暂列金额/u,extract:a=>{let b=/(\d+(?:\.\d+)?)\s*万元/u.exec(a.description);return b?`${b[1]}万元`:void 0},amount:!0}],bp=[{trade:"管道工",pattern:/塑料管|管道|检查井|雨水口|化粪池|闭水|涵管|排水/u},{trade:"混凝土工",pattern:/混凝土|水泥砂浆|垫层|涵头|压顶/u},{trade:"瓦工",pattern:/砌筑|砌体|砖|路缘石|铺装|侧石|平石|块料|踏步|台阶/u},{trade:"绿化工",pattern:/绿化|栽植|种植|苗木|草籽|喷播|养护|灌木|乔木|色带|草坪/u},{trade:"电工",pattern:/路灯|配电|电缆|强电|防雷|接地|灯具|亮化/u},{trade:"普工",pattern:/土方|清杂|拆除|平整|回填|清淤|开挖/u}],bq={管道铺设:{unit:"m",min:.15,max:.3},土方工程:{unit:"m3",min:.08,max:.15},混凝土工程:{unit:"m3",min:.8,max:1.5},道路铺装:{unit:"m2",min:.3,max:.6},砌筑工程:{unit:"m3",min:1.2,max:2},绿化工程:{unit:"m2",min:.08,max:.15},安装工程:{unit:"项",min:0,max:0}};function br(a){let b=`${a.name} ${a.description}`;return/塑料管|管道|检查井|雨水口|化粪池|涵管/u.test(b)?"管道铺设":/挖一般土方|挖沟槽|挖基坑|回填|清淤|余方|弃置/u.test(b)&&"m3"===a.unit?"土方工程":/混凝土|垫层|涵头|压顶/u.test(b)?"混凝土工程":/水泥混凝土|碎石|路床|铺装|道路|青砖|散水|块料/u.test(b)&&"m2"===a.unit?"道路铺装":/砌筑|砌体|砖/u.test(b)?"砌筑工程":/绿化|栽植|种植|苗木|草籽|喷播|灌木|乔木|色带|草坪/u.test(b)?"绿化工程":"安装工程"}let bs=[{key:"prep",label:"施工准备与清杂拆除",pattern:/清杂|拆除|场地平整|临时/u},{key:"pipe",label:"污水管网工程",pattern:/塑料管|检查井|管网|排水|化粪池|雨水口/u},{key:"road",label:"道路铺装工程",pattern:/道路|路床|水泥混凝土|级配碎石|路缘石|青砖|散水|过路涵/u},{key:"landscape",label:"景观与绿化工程",pattern:/景观|绿化|栽植|种植|苗木|喷播|小菜园|沟塘|清淤/u},{key:"lighting",label:"亮化与收尾工程",pattern:/路灯|亮化|配电|电缆|防雷/u}];function bt(a,b){let c=Math.max(30,Math.round(b)),d=Math.max(1,Math.round(1e4*a*.15/350/c*1.3)),e=Math.max(d,Math.round(1e4*a*.25/250/c*1.6));return{min:d,max:e,detail:`合同估算价 ${a} 万元 \xd7 人工费占比 15%~25% \xf7 综合工日单价 250~350 元 \xf7 有效工期 ${c} 天 \xd7 峰值系数 1.3~1.6`}}let bu=[{name:"挖掘机",spec:"0.6~1.0m\xb3",pattern:/人机配合|开挖|挖土|沟槽/u,unit:"m3",basis:"人机配合开挖(清单特征)"},{name:"自卸汽车",spec:"8t",pattern:/余方弃置|弃方|外运|回填/u,unit:"m3",basis:"土方运输与回填(清单条目)"},{name:"压路机",spec:"8~12t",pattern:/碾压|压实度/u,unit:"m2",basis:"路床碾压与压实度要求(清单特征)"},{name:"蛙式打夯机",spec:"",pattern:/回填|夯实/u,unit:"m3",basis:"沟槽回填夯实(清单条目)"},{name:"混凝土搅拌运输车",spec:"",pattern:/商品混凝土|C\d{2}混凝土/u,unit:"m3",basis:"商品混凝土运输(清单特征)"},{name:"插入式振捣器",spec:"",pattern:/混凝土浇筑|振捣/u,unit:"m3",basis:"混凝土浇筑(清单条目)"},{name:"洒水车",spec:"",pattern:/养护|绿化|喷播|栽植/u,unit:"m2",basis:"绿化养护与洒水(清单条目)"},{name:"高空作业车",spec:"",pattern:/路灯|灯具安装/u,unit:"套",basis:"路灯安装(清单条目)"}],bv=new Set(["挖掘机","自卸汽车","压路机","洒水车","高空作业车","混凝土搅拌运输车"]),bw=[{id:"vertical_transport",label:"垂直运输方式",relevance:/塔吊|塔式起重机|施工电梯|施工升降机|物料提升机|垂直运输/u,options:[{value:"塔式起重机",aliases:/塔吊|塔式起重机/},{value:"施工升降机",aliases:/施工电梯|施工升降机/},{value:"物料提升机",aliases:/物料提升机/},{value:"汽车式起重机",aliases:/汽车吊|汽车式起重机/}]},{id:"formwork",label:"模板体系",relevance:/模板/u,exclusive:!0,options:[{value:"木胶合板模板",aliases:/木胶合板|覆膜胶合板|胶合板模板|木模板/},{value:"钢模板",aliases:/钢模板|定型钢模/},{value:"铝合金模板",aliases:/铝合金模板|铝模/},{value:"大模板",aliases:/大模板/},{value:"爬升模板",aliases:/爬升模板|爬模/}]},{id:"concrete_supply",label:"混凝土供应",relevance:/混凝土/u,exclusive:!0,options:[{value:"商品混凝土(预拌)",aliases:/商品混凝土|预拌混凝土/},{value:"自拌混凝土",aliases:/自拌混凝土|现场拌制混凝土|现场搅拌混凝土/}]},{id:"scaffold",label:"脚手架体系",relevance:/脚手架|爬架/u,options:[{value:"落地式钢管脚手架",aliases:/落地式[^,。;;]{0,6}脚手架|落地脚手架/},{value:"悬挑式脚手架",aliases:/悬挑[^,。;;]{0,6}脚手架|悬挑脚手架/},{value:"附着式升降脚手架",aliases:/附着式升降脚手架|爬架/},{value:"门式脚手架",aliases:/门式脚手架/},{value:"盘扣式脚手架",aliases:/盘扣/},{value:"碗扣式脚手架",aliases:/碗扣/}]},{id:"foundation_support",label:"基坑支护形式",relevance:/基坑|支护/u,exclusive:!0,options:[{value:"放坡开挖",aliases:/放坡/},{value:"土钉墙支护",aliases:/土钉墙|土钉支护/},{value:"灌注桩支护",aliases:/灌注桩|钻孔灌注桩|排桩支护/},{value:"钢板桩支护",aliases:/钢板桩|拉森桩/},{value:"地下连续墙",aliases:/地下连续墙|地连墙/},{value:"锚杆(索)支护",aliases:/锚杆|锚索/},{value:"喷锚支护",aliases:/喷锚/}]},{id:"earthwork_haul",label:"土方外运方式",relevance:/土方|渣土|弃土/u,options:[{value:"自卸汽车外运",aliases:/自卸汽车|自卸车/},{value:"密闭渣土车外运",aliases:/密闭式?[^,。;;]{0,4}车|渣土车/},{value:"场内平衡利用",aliases:/场内平衡|就地平衡|场内调配|回填利用/}]}],bx=/不采用|不使用|不设置|不考虑|不得|禁止|取消/u;function by(a){return a.split(/[,,、::]/u).map(a=>a.trim()).filter(Boolean)}function bz(a){let b=function(a,b){let c=[];for(let a of b){let b=function(a){let b=`${a.filePath||""} ${a.roleId||""} ${a.sectionTitle||""}`;return/补疑|澄清|答疑|修正|更新/u.test(b)?100:/招标文件|招标公告|投标人须知|前附表/u.test(b)?90:/清单|工程量/u.test(b)||/图纸|设计|dwg|drawing/iu.test(b)?80:/规范|标准|规程/u.test(b)?60:50}(a);for(let d of(0,z.wj)((0,A.lG)(a.content)).split(/[。;;\n]/u)){let a=d.trim();a.length<6||a.length>200||c.push({text:a,weight:b})}}for(let b of a){let a=`${b.key||""} ${b.fieldName||""} ${(0,A.lG)(b.value)}`.trim();a.length<6||a.length>200||c.push({text:a,weight:Math.round(60*Math.max(.5,Math.min(1,b.confidence||.7)))})}return c}(a.facts,a.evidence),c=[];for(let a of bw){let d=new Map;for(let c of b){if(!a.relevance.test(c.text))continue;let b=by(c.text);for(let e of a.options){let a=b.find(a=>e.aliases.test(a));if(!a||bx.test(a))continue;let f=d.get(e.value)||{score:0,mentions:0,bestWeight:0};f.score+=c.weight,f.mentions+=1,f.bestWeight=Math.max(f.bestWeight,c.weight),d.set(e.value,f)}}let e=[...d.entries()].map(([a,b])=>({value:a,...b})).sort((a,b)=>b.score-a.score||b.mentions-a.mentions||(a.value<b.value?-1:1)),f=e[0];if(!f||f.bestWeight<60)continue;if(a.exclusive){c.push({id:a.id,label:a.label,values:[f.value]});continue}let g=Math.max(60,.4*f.score),h=e.filter(a=>a.score>=g).slice(0,3).map(a=>a.value);h.length>0&&c.push({id:a.id,label:a.label,values:h})}return c}let bA=[{item:"主要施工方法",weight:"1.5",chapterPattern:/主要分部分项|施工方案|施工方法/u},{item:"物资计划",weight:"0.5",chapterPattern:/物资|资源配置|材料/u},{item:"机械设备计划",weight:"0.5",chapterPattern:/机械|资源配置|设备/u},{item:"劳动力安排",weight:"0.5",chapterPattern:/劳动力|资源配置|人员/u},{item:"质量措施",weight:"1.5",chapterPattern:/质量/u},{item:"安全措施",weight:"1.5",chapterPattern:/安全/u},{item:"工期措施",weight:"1.0",chapterPattern:/工期|进度/u},{item:"文明施工",weight:"1.0",chapterPattern:/文明施工|环境保护|绿色施工/u},{item:"总平面布置图",weight:"0.5",chapterPattern:/总平面|平面布置/u},{item:"重难点及保证措施",weight:"1.5",chapterPattern:/重难点|重点|难点|概况/u}];function bB(a,b){let c=a.trim();if(!c)return"未分部条目";if(/^其他$|^其他工程$/u.test(c)){let a=b.map(a=>a.name);return a.some(a=>/彩绘|护栏|围栏|小品|标识|标牌|墙面|整治/u.test(a))?"环境整治工程":a.some(a=>/绿化|栽植|铺装|种植/u.test(a))?"景观附属工程":a.some(a=>/拆除|清理|清淤|清运/u.test(a))?"清理整治工程":"零星工程"}return/^其他装饰/u.test(c)?"零星装饰工程":/^措施项目$/u.test(c)?b.map(a=>a.name).some(a=>/化粪池|吊装|安装/u.test(a))?"模板、脚手架及化粪池安装工程":"模板与脚手架工程":/墙[、,]?柱面装饰/u.test(c)?b.some(a=>/幕墙|隔断/u.test(a.name))?c:"墙柱面装饰工程":c}function bC(a){let b=[];for(let c of a.matchAll(/(?:\d+|[一二三四五六七八九十]+)[..、]\s*([^::;;。]{1,40}?)[::]\s*([^。;;\n]{1,80})/gu)){let a=c[1].trim(),d=c[2].trim();!/具体详见|其他|满足验收/u.test(a)&&!/详见设计图纸|招标文件补疑/u.test(d)&&a&&d&&b.push({key:a,value:d})}return b}function bD(a,b){let c=[...b].sort((a,b)=>a.seq-b.seq),d={},e=new Map;for(let a of c)a.name&&e.set(a.name,(e.get(a.name)||0)+a.quantity);for(let[a,b]of e){let e=c.find(b=>b.name===a)?.unit||"";d[a]={value:Math.round(1e3*b)/1e3,unit:e}}let f=[...new Set(c.map(a=>a.name).filter(Boolean))].slice(0,16),g=function(a){let b=[];for(let c of a)for(let a of bC(c.description))/含|配合|安装|铺设|浇筑|夯实|碾压|养护|刻痕|拉毛|切缝|灌缝|喷播|栽植|回填|吊装|固定/u.test(a.value)&&a.value.length<=60&&b.push(`${c.name}:${a.value}`);return[...new Set(b)].slice(0,20)}(c),h=[],i=new Set;for(let a of c){for(let b of bC(a.description)){let a=`${b.key}=${b.value}`;if(!i.has(a)&&(i.add(a),h.push({key:b.key,value:b.value,source:"boq"}),h.length>=24))break}if(h.length>=24)break}let j=[];for(let a of c)for(let b of bC(a.description))/压实|试验|检测|验收|闭水|合格/u.test(`${b.key}${b.value}`)&&j.length<12&&!j.includes(b.value)&&j.push(b.value);let k=(0,bk.cn)([a]),l=[];for(let a of(0===j.length&&k.length>0&&j.push(...k[0].acceptance.slice(0,6).map(a=>`${a}(知识卡)`)),k.slice(0,2)))for(let b of a.standards)l.includes(b)||l.push(b);return{name:a,kind:"major",quantities:d,processChain:f,methods:g,params:h,acceptance:j,standards:l,skeleton:["施工概况","施工流程","施工方法"],source:"boq",coveredSeqs:c.map(a=>a.seq)}}function bE(a,b,c){return void 0!==a&&void 0!==b?Math.round((a+b)/2):void 0!==b?b:void 0!==a?a:c}let bF=[{id:"contract_days",chapterPattern:/进度|工期|总体|部署|概况|工程|计划/u,render:a=>a.contract.totalDays>0?[`- 总工期:${a.contract.totalDays} 日历天`]:[]},{id:"labor",chapterPattern:/劳动力|人员|资源|进度|工期|部署|概况/u,render:a=>{let b=[];return a.resources.labor.peakValue>0&&b.push(`- 劳动力峰值:${a.resources.labor.peakValue} 人(全项目唯一峰值口径,不得自设其他峰值)`),a.resources.labor.byPhase.length>0&&b.push(`- 分阶段劳动力投入:${a.resources.labor.byPhase.slice(0,10).map(a=>`${a.phase} ${bE(a.min,a.max,0)} 人`).join("、")}${a.resources.labor.byPhase.length>10?" 等":""}`),a.resources.labor.byTrade.length>0&&b.push(`- 工种配置(高峰同时在场,与峰值同口径):${a.resources.labor.byTrade.map(a=>`${a.trade} ${bE(a.min,a.max,1)} 人`).join("、")}`),b}},{id:"equipment",chapterPattern:/机械|设备|资源/u,render:a=>0===a.resources.equipment.length?[]:[`- 主要机械:${a.resources.equipment.map(a=>`${a.name}${a.spec?`(${a.spec})`:""} ${bE(a.quantity,void 0,Math.max(a.quantity??0,1))} 台`).join("、")}`]},{id:"maintenance_redline",chapterPattern:/绿化|种植|养护|苗木|技能|培训|成品保护|质量/u,render:a=>a.redLineFacts.filter(a=>!a.amount&&/养护|路灯/u.test(a.key)).map(a=>`- 评审红线事实(必须逐条出现且数值一致):${a.key}=${a.value}`)},{id:"village_count",chapterPattern:/概况|工程|总体/u,render:a=>a.redLineFacts.filter(a=>!a.amount&&"自然村数量"===a.key).map(a=>`- 评审红线事实(必须逐条出现且数值一致):${a.key}=${a.value}`)},{id:"basis_regulations",chapterPattern:/编制|工程概况|项目概况|概况|说明/u,render:a=>{let b=[];a.basisRegulations.length>0&&b.push(`- 招标文件引用法规(编制依据小节必须列出法规名称及文号):${a.basisRegulations.join("、")}`),b.push(`- 国家法律法规(现行有效,编制依据小节必须列出法规名称及文号):《中华人民共和国建筑法》(主席令第91号公布,2019年修正)、《中华人民共和国招标投标法》(主席令第21号公布,2017年修正)、《中华人民共和国安全生产法》(主席令第70号公布,2021年修正)、《建设工程质量管理条例》(国务院令第279号公布,2019年修订)、《建设工程安全生产管理条例》(国务院令第393号)、《保障农民工工资支付条例》(国务院令第724号)、《建设工程勘察设计管理条例》(国务院令第293号公布,2017年修订)、《生产安全事故报告和调查处理条例》(国务院令第493号)`),b.push(`- 地方性法规与政府规章(工程所在地,编制依据小节必须列出法规名称):${(function(a){let b=[];return/安徽|合肥/u.test(a)&&b.push("《安徽省建筑市场管理条例》(安徽省人民代表大会常务委员会公告)","《安徽省建设工程质量管理办法》(安徽省人民政府令)","《安徽省安全生产条例》(安徽省人民代表大会常务委员会公告)"),/合肥/u.test(a)&&b.push("《合肥市建设工程施工安全管理办法》(合肥市人民政府令)","《合肥市城市绿化管理条例》(合肥市人民代表大会常务委员会公告)"),0===b.length&&b.push("工程所在地现行地方性法规与政府规章"),b})(a.project.location||"").join("、")}`);let c=function(a){let b=[];for(let c of[{pattern:/道路|路面|路基|土石方/u,standard:"《城镇道路工程施工与质量验收规范》(CJJ 1-2008)"},{pattern:/排水|管道|管网|给排/u,standard:"《给水排水管道工程施工及验收规范》(GB 50268-2008)"},{pattern:/绿化|景观|苗木|栽植|草坪|喷播|小菜园/u,standard:"《园林绿化工程施工及验收规范》(CJJ 82-2012)"},{pattern:/亮化|路灯|照明/u,standard:"《城市道路照明工程施工及验收规程》(CJJ 89-2012)"},{pattern:/砌筑|混凝土|门窗|屋面|装饰|天棚|公厕|建筑/u,standard:"《建筑工程施工质量验收统一标准》(GB 50300-2013)"},{pattern:/基坑|沟槽|地基/u,standard:"《建筑地基基础工程施工质量验收标准》(GB 50202-2018)"}])a.some(a=>c.pattern.test(a))&&!b.includes(c.standard)&&b.push(c.standard);return b.slice(0,6)}(a.project.works);return c.length>0&&b.push(`- 施工验收规范标准(现行有效,编制依据小节必须列出规范名称及编号):${c.join("、")}`),b}}];function bG(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}let bH=/总述|综述|概述|编制说明|施工准备|施工部署|总体施工(?:方案|工艺|方法)|主要分部分项工程/u,bI=[{key:"towerCrane",re:/塔式起重机|塔吊/u},{key:"hoist",re:/施工升降机|施工电梯/u},{key:"truckCrane",re:/汽车起重机|汽车吊/u},{key:"rebarCutter",re:/钢筋切断机/u},{key:"rebarBender",re:/钢筋弯曲机/u},{key:"circularSaw",re:/圆盘锯/u}],bJ=[{key:"pump",re:/提升泵|潜水泵/u}];function bK(a){let b=[];for(let c of a?.milestones??[])c.label.trim()&&(c.duration??0)>0&&b.push({node:c.label.trim(),offset:`${c.duration} 天`});let c={};for(let b of a?.resources?.equipment??[]){let a=b.quantity??Math.round(((b.min??1)+(b.max??b.min??1))/2);if(!Number.isFinite(a)||a<=0)continue;let d=bI.find(a=>a.re.test(b.name));void 0!==d&&void 0===c[d.key]&&(c[d.key]=a)}for(let[b,d]of Object.entries(a?.quantities??{})){if(!d||d.value<=0||!/台|套/u.test(d.unit))continue;let a=bJ.find(a=>a.re.test(b));void 0!==a&&void 0===c[a.key]&&(c[a.key]=d.value)}let d=[];for(let[b,c]of Object.entries(a?.quantities??{}))!(!c||!Number.isFinite(c.value)||c.value<10||/台|套/u.test(c.unit))&&/[\u4e00-\u9fa5]{3,}/u.test(b)&&d.push({name:b,value:c.value,unit:c.unit});let e=a?.redLineFacts?.find(a=>"自然村数量"===a.key),f=e?/(\d+)/u.exec(e.value):null,g=(a?.milestones??[]).reduce((a,b)=>a+(b.duration??0),0),h=(a?.contract.totalDays??0)>0?Math.max(0,(a?.contract.totalDays??0)-g):0,i=a?.resources?.labor?.peakValue??0;return{nodeAuthorities:b,machineAuthorities:c,specAuthorities:{...a?.specAuthorities??{}},villageCountAuthority:f?Number(f[1]):0,slackDaysAuthority:h,quantityAuthorities:d,laborPeakAuthority:i>0?i:void 0}}function bL(a){return/^(?:确保\s*)?[人材机](?:员|力|料|械|工)?\s*的保障体系与措施$/u.test(a)}function bM(a,b){let c=a.replace(/\s+/gu,""),d=b.replace(/\s+/gu,"");return c===d||c.includes(d)||d.includes(c)}function bN(a,b,c){for(let c=0;c<2&&a.length>0&&!(4e3>=Math.floor(b/a.length));c+=1){let b=a.filter(a=>a.subPoints.length>=2&&!bO(a.title));if(0===b.length)break;let c=b.reduce((a,b)=>b.subPoints.length>a.subPoints.length?b:a),d=Math.ceil(c.subPoints.length/2);a.push({title:c.subPoints[d].title||c.title,subPoints:c.subPoints.slice(d),facts:[],targetWords:0}),c.subPoints=c.subPoints.slice(0,d)}let d=a.filter(a=>!bO(a.title)),e=bc.gG.test(c)&&d.length>=8&&d.length>0&&d.every(a=>a.subPoints.length<=3)?400:1200,f=a.reduce((a,b)=>a+b.subPoints.length,0)||a.length;for(let c of a){let d=Math.floor(.75*Math.max(e,Math.floor(b/Math.max(1,a.length)))+.25*b*(c.subPoints.length/f));c.targetWords=Math.min(4e3,Math.max(e,d)),(bc.Yp.test(c.title)||bc.gG.test(c.title))&&(c.targetWords=Math.min(4e3,Math.max(c.targetWords,3600)))}}function bO(a){return bc.Yp.test(a)||bc.gG.test(a)}function bP(a,b,c){let d=new Map,e=[];for(let b of a){if(bL(b)||bc.Yp.test(b)||bc.gG.test(b)){e.push({kind:"solo",section:b});continue}let a=/工期|进度|节点|计划|纠偏|预警/u.test(b)?"工期进度":/质量|验收|三检|样板|隐蔽|复试|实测|通病/u.test(b)?"质量验收":/安全|危大|风险|隐患|应急|临边|洞口|消防|临电/u.test(b)?"安全风险":/文明|扬尘|噪声|绿色|废水|垃圾|环保|智慧/u.test(b)?"文明绿色":/劳务|工资|实名|银行|考勤|人员|岗位|组织|职责/u.test(b)?"组织劳务":/资源|材料|设备|机械|人材机|调配/u.test(b)?"资源保障":/施工|工艺|流程|顺序|穿插|部署|区段|流水/u.test(b)?"施工组织":"综合管理";d.has(a)||(d.set(a,[]),e.push({kind:"domain",key:a})),d.get(a).push(b)}let f=a=>{let b=[];for(let c of a){let a=b[b.length-1],d=a?a.sources[a.sources.length-1]:"";!(0,bc.tZ)(c)&&!bL(c)&&a&&(bM(c,d)||function(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}(c,d)>=.75)?(a.sources.push(c),c.length>a.title.length&&(a.title=c)):b.push({title:c,sources:[c]})}return b},g=[];for(let a of e){if("solo"===a.kind){g.push({title:a.section,subPoints:[{title:a.section,sources:[a.section]}],facts:[],targetWords:1200});continue}let c=f(d.get(a.key)||[]);for(let a=0;a<c.length;a+=6){let d=c.slice(a,a+6);g.push({title:d[0].title||b,subPoints:d,facts:[],targetWords:1200})}}return bN(g,c,b),{blocks:g,coveredSections:a.slice(),fallbackSections:[],llmPlanned:!1}}function bQ(a,b){let c=[],d=a.split("\n").filter(a=>!/^\s*\|/u.test(a.trim())).join("\n");if(b.resources.labor.peakValue>0)for(let a of d.matchAll(/(?:劳动力峰值|施工高峰|高峰人数|高峰期劳动力|劳动力高峰)(?:为|约|达到|共计)?[^\n。;;]{0,20}?(\d+(?:\.\d+)?)\s*人/gu)){let d=Number(a[1]);if(d>0&&d!==b.resources.labor.peakValue){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用冲突:正文出现与蓝图不一致的劳动力峰值 ${d} 人`,suggestion:`请统一使用蓝图劳动力峰值:${b.resources.labor.peakValue} 人`});break}}if(b.contract.totalDays>0)for(let a of d.matchAll(/(?:总工期|施工工期|合同工期|工期)(?:为|约|共计|控制)?[^\n。;;]{0,20}?(\d+(?:\.\d+)?)\s*(?:日历)?天/gu)){let d=Number(a[1]);if(d>0&&d!==b.contract.totalDays){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用冲突:正文出现与蓝图不一致的工期表述 ${d}日历天`,suggestion:`请统一使用蓝图总工期:${b.contract.totalDays} 日历天`});break}}for(let d of b.redLineFacts.filter(a=>!a.amount&&"自然村数量"!==a.key)){let b=bG(d.value.trim());b&&(RegExp(b,"u").test(a)||c.push({level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图红线事实缺口:正文未体现「${d.key}=${d.value}」`,suggestion:`请在对应章节补写该红线事实(数值必须与蓝图一致)`}))}let e=b.redLineFacts.find(a=>"自然村数量"===a.key),f=e?Number(/(\d+)/u.exec(e.value)?.[1]):0;if(f>0)for(let a of d.matchAll(/(\d+)\s*个(?:美丽宜居)?自然村(?!分组)/gu)){let b=Number(a[1]);if(b>0&&b!==f){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图红线事实冲突:正文出现与蓝图不一致的自然村数量 ${b} 个`,suggestion:`请统一使用蓝图自然村数量:${f} 个自然村`});break}}for(let[a,e]of Object.entries(b.quantities)){if(!e||e.value<=0)continue;let b=e.unit||"",f=RegExp(`${bG(a)}[^
36
36
  。;;]{0,40}?(\\d+(?:\\.\\d+)?)\\s*${b?bG(b):""}`,"gu");for(let g of d.matchAll(f)){let d=Number(g[1]);if(d>0&&d!==e.value){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用冲突:正文出现与蓝图不一致的工程量 ${a} ${d}${b}`,suggestion:`请统一使用蓝图工程量:${a} ${e.value}${b}`});break}}}return c}let bR=/(?<=[日天])\s*[0-9]+(?:\.[0-9]+)?(?=[\s]*(?:招标|建设|质量|合同|项目|工程|资金|投标|开标|评标|付款|工期|开工|计划|计价|现场|资质|标段|[0-9]{1,3}[.、.]|[,,。;;]|$))/u;bk.ts.length;let bS={type:"object",required:["conflicts"],properties:{conflicts:{type:"array",required:!0,maxItems:8,items:{type:"object",required:!0,properties:{kind:{type:"string",required:!0},itemA:{type:"string",required:!0},itemB:{type:"string",required:!0},description:{type:"string",required:!0},confidence:{type:"number",required:!0}}}}}};async function bT(a,b={}){let c=function(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=c.trim();if(a){if(/^\|/u.test(a)&&/[\d]/u.test(a)){b.push(a.slice(0,160));continue}if(!/^#{1,6}\s/u.test(a))for(let c of a.split(/(?<=[。;;])/u)){let a=c.trim();a.length>=6&&a.length<=160&&/[\d]/u.test(a)&&b.push(a)}}}let c=[...new Set(b)],d=function(){let a=process.env.DOCUMENT_CONSISTENCY_SAMPLE_LIMIT;if(void 0===a||""===a)return 120;if("0"===a)return 200;let b=Number(a);return Number.isFinite(b)&&b>0?Math.floor(b):120}();return c.length<=d?c:c.map((a,b)=>({sentence:a,index:b,density:(a.match(/[\d,]+(?:\.\d+)?/gu)||[]).length})).sort((a,b)=>b.density-a.density||a.index-b.index).slice(0,d).sort((a,b)=>a.index-b.index).map(a=>a.sentence)}(a);if(c.length<2)return[];let d=await (0,y.bb)([(0,q.y4)("你是施工组织设计数据一致性审查器。"),"给定全文含数值的句子/表格行清单(编号与内容),找出互相矛盾的数值对:\n- 同一口径必须一致而实际数值不同:劳动力峰值多处不一致、同一面积两处数字不同、总工期与分项工期冲突、同一节点日期两处不一致、表格合计与明细之和不等、人数\xd7工期与总工日不自洽;\n- 只报确定的矛盾(itemA 与 itemB 明确矛盾且置信度 ≥0.8),不得臆造;\n- 不同口径的数值不算矛盾:建筑面积 vs 占地面积、不同单位的表述;分阶段各期人数互比不算矛盾(各阶段人数不同是正常配置);\n- 但总量控制上限与分阶段峰值必须自洽:“高峰期总人数控制在X人/高峰总人数X人以内/控制在X人以下”与任何“高峰投入Y人/阶段高峰Y人/峰值Y人”(Y>X)构成矛盾,必须上报;\nitemA/itemB 必须是清单中真实出现的原文片段(逐字引用编号对应句子或表格行的关键片段,含数值)。\n只输出 JSON,不得输出其他内容。"].join("\n"),c.map((a,b)=>`${b+1}. ${a}`).join("\n"),{maxTokens:2500,temperature:0,signal:b.signal,diagnostics:b.diagnostics,schema:bS,taskKind:"structuredGeneration"});return d?.conflicts?.length?d.conflicts.filter(a=>"string"==typeof a.itemA&&"string"==typeof a.itemB&&a.itemA.trim()&&a.itemB.trim()).filter(a=>(a.confidence??0)>=.7).slice(0,6):[]}var bU=c(40693),bV=c(1358),bW=c(11248);function bX(a){return(0,bW.K3)(`${a.fieldName||a.key} ${(0,A.lG)(a.value)}`)}function bY(a){return[...a.project,...a.schedule,...a.quality,...a.safety,...a.resources,...a.preciseFacts,...a.bills,...a.drawings,...a.rules,...a.specifications].map(bX).join("\n")}function bZ(a,b){let c=[{label:"工期",corpus:bY({...b,project:[],quality:[],safety:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/工期|日历天|合同工期|计划工期/u},{label:"质量",corpus:bY({...b,project:[],schedule:[],safety:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/质量目标|质量标准|验收|复验/u},{label:"安全",corpus:bY({...b,project:[],schedule:[],quality:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/安全|文明|风险|应急/u},{label:"资源",corpus:bY({...b,project:[],schedule:[],quality:[],safety:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/资源|材料|设备|劳动力/u},{label:"工程量",corpus:bY({...b,project:[],schedule:[],quality:[],safety:[],resources:[],preciseFacts:[],drawings:[],rules:[],specifications:[]}),required:/工程量|清单|建筑面积|长度|吨|台|套|项/u}],d=(0,bW.K3)(a.replace(/\s+/gu,"")),e=[];for(let b of c)b.required.test(a)&&0===[...new Set(b.corpus.split("\n").map(a=>a.replace(/\s+/gu,"").slice(0,24)).filter(Boolean))].filter(a=>a.length>=6&&d.includes(a)).length&&e.push({level:"warning",message:`证据使用覆盖率偏低:正文中未明显使用${b.label}相关事实`,suggestion:`请在相应章节中引用至少一项${b.label}事实,避免只写通用表述。`});return e}async function b$(a,b){let c=a.split(/\n\s*\n/gu).map(a=>a.trim()).filter(Boolean),d=/(?:加强组织领导|严格执行规范|落实责任制度|确保工程质量|强化过程管理|提高思想认识|完善管理体系|形成闭环管理|统筹推进|全面落实)/gu,e=[];for(let a of c){if(120>(0,r.V7)(a)||(a.match(d)||[]).length<2)continue;let c=await b.analyze(a);c&&(c.concrete||e.push({level:"warning",message:`段落存在空泛表述:${a.slice(0,48)}...`,suggestion:"请补充该段对应的对象、动作、控制点或验收闭环,避免只保留管理性套话。"}))}return e}function b_(a,b){let c=[];if(!b)return c;let d=a.map(a=>`${a.title}
37
37
  ${a.content}`).join("\n\n");if(/进度|工期/u.test(d)&&/资源|材料|设备|劳动力/u.test(d)){let d=a.find(a=>/资源|材料|设备|劳动力/u.test(a.title)),e=d?b.get(d.title):void 0;e?.contentNeeds.resource||c.push({level:"warning",message:"章节逻辑依赖不足:进度章节与资源章节之间缺少明显支撑关系",suggestion:"请在资源章节补充与工期目标相匹配的劳动力、材料、设备投入和调配计划。"})}return/质量/u.test(d)&&/施工|工艺|技术/u.test(d)&&(a.some(a=>b.get(a.title)?.contentNeeds.quality||b.get(a.title)?.contentNeeds.construction)||c.push({level:"warning",message:"章节逻辑依赖不足:质量章节未明显支撑施工工艺控制",suggestion:"请在施工技术和质量章节之间补齐工艺控制点、验收要求和整改复验闭环。"})),/安全|文明|风险/u.test(d)&&(a.some(a=>b.get(a.title)?.contentNeeds.safety)||c.push({level:"warning",message:"章节逻辑依赖不足:安全章节缺少检查整改和应急支撑",suggestion:"请补齐风险识别、检查整改、应急响应和演练闭环。"})),c}let b0=[{label:"工程名称",factGroups:["project"],patterns:[/工程名称\s*[::]\s*([^\n|]+)/u],locations:"封面、工程概况、页眉页脚、专项方案、表格标题"},{label:"建设地点",factGroups:["project"],patterns:[/建设地点\s*[::]\s*([^\n|]+)/u,/工程地点\s*[::]\s*([^\n|]+)/u],locations:"工程概况、周边环境、扬尘噪声、交通导改、属地化措施"},{label:"总工期",factGroups:["schedule"],patterns:[/总工期\s*[::]\s*([^\n|]+)/u,/计划工期\s*[::]\s*([^\n|]+)/u,/工期目标\s*[::]\s*([^\n|]+)/u],locations:"工程概况、进度计划、横道图、资源计划、纠偏措施"},{label:"建设规模",factGroups:["project","preciseFacts"],patterns:[/建设规模\s*[::]\s*([^\n|]+)/u,/建筑面积\s*[::]\s*([^\n|]+)/u,/道路长度\s*[::]\s*([^\n|]+)/u,/管线长度\s*[::]\s*([^\n|]+)/u],locations:"工程概况、工程量表、施工部署、资源配置"},{label:"机械数量型号",factGroups:["resources"],patterns:[/([\p{Script=Han}A-Za-z0-9]+(?:机|吊|泵|车))\s*[^\n|]{0,12}(\d+)\s*(台|套|辆)/u],locations:"机械表、平面布置、进度保障、安全专项方案"},{label:"劳动力人数",factGroups:["resources"],patterns:[/劳动力\s*[^\n|]{0,12}(\d+)\s*人/u,/班组\s*[^\n|]{0,12}(\d+)\s*人/u],locations:"劳动力计划、进度节点、抢工方案、工资保障台账"},{label:"危大工程清单",factGroups:["safety","preciseFacts"],patterns:[/危大工程\s*[::]\s*([^\n|]+)/u,/深基坑|高支模|起重吊装|脚手架/u],locations:"安全章节、专项方案、审批表、应急预案"},{label:"环保监测指标",factGroups:["quality","safety","preciseFacts"],patterns:[/PM10|PM2\.5|TSP|噪声|扬尘在线监测/u],locations:"文明施工、扬尘噪声、智慧工地、应急联动"}];function b1(a){return a.replace(/[\s,。;;::|]/gu,"").trim()}let b2=/塔式起重机|履带吊|汽车吊|卷扬机|脚手架|扣件|钢管|模板|噪声|PM2\.5|PM10|TSP|扬尘在线监测|临电|消防|安全网|围挡|洗车台|沉淀池|雾炮/u,b3=/不使用|不采用|不配置|无需|未采用|不得使用|禁止使用/u;function b4(a,b){let c=[];for(let d of b){let b=a[d];if(Array.isArray(b))for(let a of b)a&&"object"==typeof a&&"value"in a&&"string"==typeof a.value&&c.push(a.value)}return c.map(b1).filter(Boolean)}let b5=/([\u4e00-\u9fa5A-Za-z0-9()()]{1,12}?)(\d+(?:\.\d+)?)\s*(?:mm|cm|m|米|MPa|kN|kV|kW|℃|°C|元|万元|人|天|日|个|层|樘|处|套|台|t|吨)([\u4e00-\u9fa5A-Za-z0-9()()]{0,8})/gu,b6=["直径","厚度","宽度","长度","高度","深度","间距","距离","标高","偏差","数量","面积","体积","重量","压力","温度","强度","等级","坡度","规格","尺寸","层数","次数","跨度","半径"];async function b7(a){let b=function(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=c.trim();if(!(/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a)))for(let c of a.matchAll(RegExp(b5.source,"gu"))){let a=(c[1]||"").trim(),d=Number(c[2]),e=(c[3]||"").trim(),f=`${a}${e}`.replace(/[\s,,、;;::]/gu,"");!(f.length<2)&&/[\u4e00-\u9fa5A-Za-z]{2,}/u.test(f)&&Number.isFinite(d)&&!(d<=0)&&(b6.some(a=>f.replace(/(?:mm|cm|m|MPa|kN|kV|kW|℃|元|万元|人|天|日|个|层|樘|处|套|台|t|吨)/gu,"").replace(/[\s,,、;;::()()]/gu,"")===a)||b.push({concept:f,value:d,raw:c[0]}))}}let c=new Set;return b.filter(a=>{let b=a.raw;return!c.has(b)&&(c.add(b),!0)}).slice(0,60)}(a);if(b.length<3)return[];let c=[...new Set(b.map(a=>a.concept))];if(c.length<2)return[];let d=await (0,v.VN)().embedDocuments(c);if(d.length!==c.length)throw Error(`本地语义模型嵌入数量不一致:期望 ${c.length} 条,实际 ${d.length} 条`);let e=new Map(c.map((a,b)=>[a,d[b]])),f=function(a,b){let c=new Map(a.map(a=>[a,a])),d=a=>{let b=c.get(a)||a;return b===a?a:(c.set(a,d(b)),c.get(a)||a)},e=(a,b)=>{c.set(d(a),d(b))};for(let c=0;c<a.length;c+=1)for(let d=c+1;d<a.length;d+=1)b(a[c],a[d])>=.6&&e(a[c],a[d]);return c}(c,(a,b)=>{let c=e.get(a),d=e.get(b);if(!c||!d||0===c.length||0===d.length)return 0;let f=Math.min(c.length,d.length),g=0;for(let a=0;a<f;a+=1)g+=c[a]*d[a];return g}),g=a=>{let b=a;for(;(f.get(b)||b)!==b;)b=f.get(b)||b;return b},h=new Map;for(let a of b){let b=g(a.concept),c=h.get(b)||[];c.push(a),h.set(b,c)}let i=[];for(let a of h.values()){if(a.length<2)continue;let b=[...new Set(a.map(a=>a.value))];if(b.length<2)continue;let c=Math.max(...b),d=Math.min(...b);if(!(c-d<=.02*c)&&!(c>20*d)&&!(a.filter(a=>/[、/](?:与)?\d/u.test(a.raw)).length>=2)&&(i.push(`“${a[0].concept}”出现多个口径:${[...new Set(a.map(a=>a.raw))].slice(0,3).join("、")}`),i.length>=4))break}return 0===i.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`同一参数概念出现多口径数值冲突:${i.join(";")}`,suggestion:"以绑定资料(图纸/清单/规范)裁决口径为准统一数值表述:每个参数概念全文只保留一个口径数值,删除矛盾表述。"}]}let b8=["电梯","幕墙","智能化","消防","暖通","给排水","电气","燃气","人防","室外","园林","绿化","景观","钢结构","防水","保温","门窗","通风","空调","防雷","接地","动力","照明","拆除","加固","装修","装饰"];var b9=c(27625);let ca=/分[为成]?[^。;;,,\n]{0,12}阶段|共[分设]?[^。;;,,\n]{0,12}阶段|划[分]?为[^。;;,,\n]{0,12}阶段|[二三四五六七八九十]个阶段/u,cb={一:1,二:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};function cc(a){return/(\d+|[一二三四五六七八九十]+)\s*个?\s*阶段/u.exec(a)?.[1]??null}function cd(a){let b=a.map(cc).filter(a=>null!==a).map(a=>/^\d+$/u.test(a)?parseInt(a,10):/^[一二三四五六七八九十]+$/u.test(a)?"十"===a?10:1===a.length?cb[a]??null:a.startsWith("十")?10+(cb[a[1]]??0):a.endsWith("十")?(cb[a[0]]??0)*10:(cb[a[0]]??0)*10+(cb[a[2]]??0):null).filter(a=>null!==a);return 0===b.length?null:1===new Set(b).size?b[0]:null}async function ce(a){let b=[...new Set(a.split(/\n+/u).filter(a=>a.trim()&&!/^\s*(#{1,6}\s+|\|)/u.test(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.replace(/\s+/gu,"").trim()).filter(a=>a.length>=8&&a.length<=60&&ca.test(a)))];if(b.length<2)return[];let c=await (0,v.Mv)(b,b),d=b.map((a,b)=>b),e=a=>{let b=a;for(;d[b]!==b;)b=d[b];let c=a;for(;d[c]!==b;){let a=d[c];d[c]=b,c=a}return b},f=(a,b)=>{d[e(b)]=e(a)};for(let a=0;a<b.length;a+=1)for(let d=a+1;d<b.length;d+=1)c(b[a],b[d])>=.62&&f(a,d);let g=new Map;for(let a=0;a<b.length;a+=1){let c=e(a),d=g.get(c)||[];d.push(b[a]),g.set(c,d)}if(g.size<2||new Set([...g.values()].map(cd).filter(a=>null!==a)).size<2)return[];let h=[...g.values()].map(a=>a.sort((a,b)=>b.length-a.length)[0]).slice(0,4);return[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`施工阶段划分口径不统一:正文出现 ${g.size} 种互异阶段划分口径(${h.map(a=>`“${a.slice(0,16)}”`).join("、")})`,suggestion:"全文统一阶段划分口径:以总进度计划/施工部署章节的划分为唯一口径,其余章节划分句逐字对齐或删除。"}]}var cf=c(41991);let cg=/应急预案|应急措施|应急响应|应急救援|突发事件|应急管理|应急物资|应急演练|应急组织|应急保障/u,ch=/应急|突发|救援|预案|抢险|疏散/u,ci=["应急预案的编制与响应流程","突发事件应急处置措施","应急救援组织体系与保障"],cj=["应急照明系统安装调试","应急电源配置与切换方案"],ck={organization:"应急管理领导小组、应急救援队伍的组织机构与职责分工",procedure:"应急处置程序、应急响应流程与应急演练安排",resource:"应急物资、应急器材设备的储备与保障措施"},cl=/应急物资|急救箱|灭火器|沙袋|发电机|水泵|对讲机|应急照明|应急灯|防护服|救援绳|救生衣|铁锹|编织袋|抽水泵|警示带|应急器材/u,cm=/配备|储备|保障|配置|数量|不少于|共计|套|具|个|台|把|只/u,cn=["应急物资储备清单与配备数量","应急救援器材的配置与保障"],co=["应急照明灯具数量与回路设计","应急电源的电气系统设计"];async function cp(a){return(0,cf.A)({prototypes:[...ci],negativePrototypes:[...cj],embedDocuments:a})}async function cq(a){return(0,cf.A)({prototypes:[...cn],negativePrototypes:[...co],embedDocuments:a})}async function cr(a,b){let c=a.split(/\r?\n/u),d=[],e=c.map(a=>{let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(b)return{level:b[1].length,title:b[2].replace(/^\d+(?:\.\d+)*\s+/u,"").trim()}}).filter(a=>void 0!==a).filter(a=>!cg.test(a.title)&&ch.test(a.title)),f=await cp(b),g=e.length>0?await f(e.map(a=>a.title)):[],h=new Set(e.filter((a,b)=>g[b]).map(a=>a.title)),i=a=>cg.test(a)||h.has(a),j=!1,k=[],l=[],m="",n=0;for(let a of c){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(b){let a=b[1].length,c=b[2].replace(/^\d+(?:\.\d+)*\s+/u,"").trim();if(i(c)){j=!0,k.push(c);continue}a<=3&&j&&(j=!1);continue}if(j&&a.trim()&&!/^\s*\|/u.test(a)){l.push(a);let b=a.replace(/\s+/gu,"");m+=b,n+=b.length}}if(0===k.length)return d;let o=[];n<300&&o.push(`字数仅 ${n} 字(要求 ≥300 字)`);let p=m.match(/.{1,200}/gu)||[],q=Object.values(ck),r=await (0,v.Mv)(p,q),s=a=>p.some(b=>r(b,a)>=v.Eh);s(ck.organization)||o.push("应急组织体系"),s(ck.procedure)||o.push("应急处置程序/演练");let t=await cq(b),u=l.join("。").split(/[。;;]/u).map(a=>a.trim()).filter(a=>cl.test(a)&&cm.test(a)),w=u.length>0?await t(u):[];return s(ck.resource)||w.some(Boolean)||o.push("应急物资保障"),o.length>0&&d.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`应急预案小节深度不足:${k.join("、")}(缺少:${o.join("、")})`,suggestion:"补写应急组织体系(领导小组/抢险队与职责)、应急处置程序与演练安排、应急物资清单与保障措施,达到可落地深度。",sectionTitle:k[0]}),d}async function cs(a){let b=await (0,s.Z2)(a.markdown,a.factsModel,{scopeClassifier:a.factTokenScopeClassifier}),c=ac(a.tenderRequirements).map(({item:a})=>ab(a)),d=a.markdown.split(/\n/u).filter(a=>/^#{2,4}\s/u.test(a.trim())).map(a=>al(a)).filter(Boolean).slice(0,80),e=(0,a8.s3)(a.markdown),f=await (0,v.Mv)(c,[...d,...e]),g=await (0,v.Mv)(a.evaluationCriteriaItems||[],d),h=new Map((await Promise.all(a.chapters.map(async b=>[b.title,await a.professionalDepthClassifier.analyze(b.content)]))).filter(a=>!!a[1])),i=(0,a8.t1)(a.markdown),j=await (0,v.Mv)(i.sentences,i.overviewBody?[i.overviewBody]:[]);return[...a.promptDocumentRules?.forbidToc?[]:[...(0,s.gN)(a.markdown),...(0,s.f8)(a.markdown)],...(0,s.kw)(a.markdown),...(0,s.wl)(a.markdown,a.evaluationCriteriaItems||[],{semanticSimilarity:g}),...await ak(a.markdown,a.tenderRequirements,{semanticSimilarity:f,bodyTexts:e}),...(0,a8.cf)(a.markdown,a.factsModel),...(0,a8.a8)(a.markdown,a.factsModel),...(0,a8.u2)(a.markdown),...(0,a8.rA)(a.markdown,{laborPeakAuthority:a.blueprintData?bK(a.blueprintData).laborPeakAuthority:void 0}),...(0,a8.Et)(a.markdown),...(0,a8.H)(a.markdown),...(0,a8.x5)(a.markdown,a.factsModel),...(0,a8.Tz)(a.markdown,a.factsModel),...(0,a8.$$)(a.markdown,a.factsModel.specAuthorityMap),...a.blueprintData?bQ(a.markdown,a.blueprintData).filter(a=>"error"===a.level):[],...(0,a8.N$)(a.markdown),...(0,a8.Fr)(a.markdown),...(0,a8.bq)(a.markdown),...(0,a8.LA)(a.markdown,a.factsModel),...(0,a8.ek)(a.markdown,a.factsModel),...(0,a8.fQ)(a.markdown,a.factsModel),...(0,a8.hu)(a.markdown,a.factsModel,a.tenderRequirements),...(0,a8.Rv)(a.markdown),...function(a,b){if("0"===process.env.DOCUMENT_TITLE_ALIGNMENT_CHECK)return[];let c=a=>a.replace(/^\d+(?:\.\d+)*[、..\s]*/u,"").replace(/[\s,,、]/gu,""),d=new Map;a.forEach((a,b)=>{let c=(0,o.GQ)(a.title).replace(/[\s,,、]/gu,"");c&&!d.has(c)&&d.set(c,b)});let e=new Map,f=new Map;a.forEach((a,b)=>{let d=new Set;for(let g of(a.content||"").split(/\r?\n/u)){let a=/^###\s+(.+?)\s*$/u.exec(g.trim());if(!a)continue;let h=c(a[1]);if(h.length<8||d.has(h))continue;d.add(h),f.has(h)||f.set(h,a[1].replace(/^\d+(?:\.\d+)*[、..\s]*/u,"").trim());let i=e.get(h)||[];i.push(b),e.set(h,i)}});let g=new Map;b.forEach(a=>{let b=d.get((0,o.GQ)(a.title).replace(/[\s,,、]/gu,""));if(void 0!==b)for(let d of a.sections||[]){let a=c(d);if(a.length<8)continue;let e=g.get(a)||[];e.includes(b)||e.push(b),g.set(a,e)}});let h=[];for(let[b,c]of e){if(c.length<2)continue;let d=g.get(b)||[];if(d.length>=2)continue;let e=1===d.length?d[0]:c[0],i=f.get(b)||b;for(let b of c){if(b===e)continue;let c=a[b];h.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",chapterId:c.id,sectionTitle:i,message:`跨章同名小节:“${i}”已在「${a[e].title}」落位,本章(「${c.title}」)同名小节属跨章串章重复,须改写归并`,suggestion:"同一主题小节全文只保留一处(归属章);非归属章的同名小节:内容与本章主题相关则改写标题为可区分的具体主题并归并内容,与本章无关则整节删除(含标题行);修复后全文不得再出现跨章同名小节。"})}}return h}(a.chapters,a.effectiveChapters||a.template.chapters||[]),...(0,a8.cT)(a.markdown),...(0,a8.ub)(a.markdown),...(0,a8.cl)(a.markdown),...(0,a8.zP)(a.markdown),...await (0,a8.r8)(a.markdown,(0,a8.P3)(a.factsModel)),...(0,a8.vH)(a.markdown),...await (0,a8.sn)(a.markdown),...await (0,a8.YN)(a.markdown),...(0,a8.y2)(a.markdown),...(0,a8.Xc)(a.markdown),...await (0,a8.mC)(a.markdown),...(0,a8.l4)(a.markdown,{semanticSimilarity:j}),...(0,a8.dF)(a.markdown),...await b7(a.markdown),...await (0,a9.WT)(a.markdown),...function(a){let b=[...new Set(a.flatMap(a=>b8.filter(b=>a.title.includes(b))))];if(0===b.length)return[];let c=a.map(a=>a.content||"").join("\n"),d=b.filter(a=>!c.includes(a));if(0===d.length)return[];let e=a.find(a=>d.some(b=>a.title.includes(b)));return[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`章节大纲涉及的专业工程系统在正文零覆盖:${d.join("、")}`,suggestion:"对应章节必须补写该专业工程的施工方案正文(施工概况/施工流程/施工方法,含可核实的工艺参数),不得整章零覆盖。",chapterId:e?.id}]}(a.chapters),...(0,b9.e6)(a.markdown),...(0,s.Ef)(a.markdown,a.effectiveChapters||a.template.chapters||[]),...(0,s.K1)(a.markdown),...(0,s.Fv)(a.markdown),...(0,s.k0)(a.markdown),...(0,s.NS)(a.markdown),...(0,s.SN)(a.markdown),...(0,s.qK)(a.markdown,a.chapters),...(0,s.ji)(a.chapters,h),...(0,s.i0)(a.chapters,h),...(0,s.ST)(a.chapters,h),...(0,s.xX)(a.chapters,h),...await (0,s.Zu)(a.markdown),...await (0,s.qm)(a.markdown,a.factsModel,a.scopeConflicts,h),...await (0,s.hr)(a.markdown,a.factsModel),...bZ(a.markdown,a.factsModel),...await b$(a.markdown,a.professionalDepthClassifier),...await (0,bU.Fw)(a.chapters),...(0,bU.Hl)(a.chapters),...(0,bU.iX)({markdown:a.markdown,factsModel:a.factsModel,chapters:a.chapters}),...function(a,b){let c=[];if(!/施工组织设计|施工组织|施组|质量|安全|文明施工/u.test(a))return c;for(let d of b0){let e=b4(b,d.factGroups),f=(function(a,b){let c=[];for(let d of b){let b=new RegExp(d.source,d.flags.includes("g")?d.flags:`${d.flags}g`);for(let d of a.matchAll(b)){let a=b1(d[1]||d[0]||"");!b3.test(a)&&a.length>=2&&a.length<=80&&c.push(a)}}return[...new Set(c)]})(a,d.patterns).filter(a=>!b2.test(a)&&!function(a,b){return 0===b.length||b.some(b=>b.includes(a)||a.includes(b)||a.length>=4&&b.includes(a.slice(0,4)))}(a,e)).slice(0,5);f.length>0&&c.push({level:"warning",message:`施组数据一致性风险:${d.label} 可能与项目图谱/事实不一致(${f.join("、")})`,suggestion:`请核对${d.label}在${d.locations}中的表述,统一以招标文件、项目图谱和可信事实为准。`})}return c}(a.markdown,a.factsModel),...function(a,b){let c=[],d=b4(b,["project","schedule","resources","quality","safety","preciseFacts"]);if(0===d.length)return c;for(let b of a)/概况|进度|资源|质量|安全|文明|工资|应急/u.test(`${b.title} ${(b.sections||[]).join(" ")}`)&&(d.some(a=>a.length>=3&&b.content.includes(a.slice(0,Math.min(10,a.length))))||c.push({level:"warning",message:`${b.title} 缺少可识别的项目图谱事实支撑`,suggestion:"请至少引用工程名称、工期、工程量、资源、风险、质量安全目标等项目专属事实之一,避免纯模板化。"}));return c}(a.chapters,a.factsModel),...(0,bU.Av)(a.chapters,a.markdown),...(0,bU.CS)(a.chapters,a.markdown),...(0,bU.l5)(a.markdown),...(0,bU.b7)(a.chapters),...b_(a.chapters,h),...function(a,b,c,d){let e={factuality:2*!(0,s.vY)(a,c).some(a=>"error"===a.level),structure:b.length>0&&b.every(b=>a.includes(b.title)&&(0,r.V7)(b.content)>=600)?2:1,depth:0===(0,s.i0)(b,d).length?2:1,executable:0===b_(b,d).length?2:1,evidence:0===bZ(a,c).length?2:1},f=e.factuality+e.structure+e.depth+e.executable+e.evidence;return[{level:"info",message:`文档交付评分报告:总分 ${f}/10,事实${e.factuality},结构${e.structure},专业${e.depth},可执行${e.executable},证据${e.evidence}`,suggestion:f>=8?"可交付,但建议继续优化证据使用覆盖率和章节依赖链路。":"建议优先修复低分维度后再导出。"}]}(a.markdown,a.chapters,a.factsModel,h),...b,...(0,s.iC)(a.markdown),...await (0,s.BV)(a.markdown),...(0,q.dh)(a.markdown),...(0,s.Ty)(a.chapters),...await (0,s.N1)(a.markdown,a.factsModel,a.chapters),...await (0,s.S2)(a.markdown,a.chapters,a.factsModel),...await ce(a.markdown),...await cr(a.markdown),...(0,bV.QP)((0,bV.JV)(a.markdown,a.factsModel)),...(0,s.yd)(a.markdown,a.factsModel),...function(a){let b=[];return aZ.test(a)&&b.push({level:"warning",message:"正文包含联网增强过程性表述",suggestion:"请删除联网检索、网页资料、搜索结果等过程性话术,改为正式交付语言。"}),b}(a.markdown),...(0,s.bM)(a.markdown),...(0,s.M$)(a.markdown,a.promptBindings),...(0,s.AC)(a.markdown,a.chapters),...(0,s.mR)(a.markdown,a.template),...(0,q.UG)(a.markdown,a.template),...await (0,q.Ed)(a.markdown,a.promptDocumentRules),...await (0,a8.cJ)(a.markdown,a.factsModel),...(0,bV.sl)(a.markdown,a.chapters,a.factsModel)]}let ct={project:"项目基础事实",schedule:"工期与节点",quality:"质量目标与验收",safety:"安全文明要求",resources:"资源投入依据",quantities:"清单/图纸/工程量事实",rules:"规范规则与验收要求"};var cu=c(52922);let cv=["精心组织","科学统筹","科学管理","精益求精","全力保障","高效推进","力争优质","力争一流","一流水平","完善体系","最大限度","显著提升","大力落实","严格把控","充分确保","竭力打造","现代化管理","加强管理","提高意识","强化监督","持续完善","及时处理","全方位","常态化","提质增效","高标准","统筹推进"];[...cv];let cw=["危险性较大的分部分项工程安全管理","扬尘污染防治措施","建筑工人实名制管理","农民工工资专用账户与工资支付保障","生产安全事故应急预案与应急演练","绿色施工与四节一环保措施"],cx=["危险源辨识与风险识别评估","编制专项施工方案","组织专家论证并履行审批程序","对作业人员进行安全技术交底","施工过程监测与监控量测","分部分项工程验收","三级配电系统","两级漏电保护装置","漏电保护器与接地保护","实名制考勤与人员管理","农民工工资专用账户银行代发","应急预案编制与响应","绿色施工措施与评价"];function cy(a){return a.replace(/^第[一二三四五六七八九十百千万\d]+[章节]\s*/u,"").replace(/^\d+(?:\.\d+)*[、..\s]+/u,"").replace(/^[((]?[一二三四五六七八九十]+[))、..\s]+/u,"").replace(/\s+/gu,"").trim()}async function cz(a,b){let{blocks:c,completeBlocks:d}=await (0,cu.Pm)(a);return Math.round((.7*Math.min(1,d/Math.max(6,Math.ceil((b&&b>0?b:void 0)??(0,r.V7)(a)/1500)))+.3*(c?d/c:0))*100)}let cA=/目录|层级|编号|表格|表头|分隔线|页码|空小节|缺少规划小节|小节只有标题|缺节/u,cB=/跨章一致性复核|事实一致性冲突|事实冲突|评分项要求|可靠精确参数|应急预案|属地创优|工伤保险|专业评分|深度不足|事实反查|存在多个值|已确认事实未在正文中落位|事实未在正文中落位/u,cC=/缺少规划小节|小节只有标题|空小节|只有标题或表格无正文|小节内容补写未完成|小节生成未达标|同名小节|H4 标题|正文缺少章节标题|小节正文过短/u;async function cD(a,b){let c=await (0,cu.Bt)(a,b),d=(0,cu.Ye)(a),e=a.split(/\n+/u).filter(a=>a.trim()&&!/^\s*(#{1,6}\s+|\||[-*+]\s|>)/u.test(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.replace(/[\s,,、::()()【】[\]《》“”"'`]/gu,"")).filter(a=>a.length>=12),f=e.length?(e.length-new Set(e).size)/e.length:0,g=await (0,cu.gE)(a,b),h=(0,cu.nY)(a);return{level:g.heavyTemplated?"heavy":c.level,fillerRatio:c.ratio,fillerSentences:c.fillerSentences,totalSentences:c.totalSentences,vagueHitCount:d.reduce((a,b)=>a+b.count,0),vaguePhrases:d.map(a=>a.phrase),duplicateSentenceRate:f,crossProjectResidue:h,difficultyCountermeasureRatio:g.ratio,difficultyBothCount:g.bothCount,difficultyCountermeasures:g.countermeasures,difficultyHeavyTemplated:g.heavyTemplated}}async function cE(a){let b=a.markdown.split(/\n{2,}/u).filter(a=>a.trim().length>=30),c=await (0,v.Mv)(b,[...cw,...cx],a.embedDocuments),d=a=>b.some(b=>c(b,a)>=v.Eh),e=await (0,cu.Bt)(a.markdown,a.embedDocuments);return{completeness:function(a,b,c,d){let e=[...a.matchAll(/^#{1,3}\s+(.+)$/gmu)].map(a=>cy(a[1]||"")).filter(a=>a.length>=2),f=1,g=c?.chapters||[];if(g.length>0){let a=g.map(a=>cy(a.title)).filter(Boolean);f=a.filter(a=>e.some(b=>b.includes(a)||a.includes(b))).length/a.length}else b.length>0&&(f=b.filter(a=>e.some(b=>b.includes(cy(a.title))||cy(a.title).includes(b))).length/b.length);return Math.round((.55*f+.45*(cw.filter(d).length/cw.length))*100)}(a.markdown,a.chapters,a.template,d),specificity:function(a,b,c){let d=c.filter(bV.O7),e=d.filter(a=>"used"===a.status),f=d.length?e.length/d.length:1,g=e.map(a=>String(a.value||"").replace(/\s+/gu," ").trim()).filter(a=>a.length>=4&&a.length<=60),h=b.map(a=>(a.content||"").replace(/\s+/gu," ")),i=g.filter(a=>h.filter(b=>b.includes(a)).length>=2).length;return Math.round((.55*f+.45*(g.length?i/g.length:1))*100)}(a.markdown,a.chapters,a.factTraces),compliance:function(a,b){let c=cx.filter(b).length/cx.length,d=(0,cu.JD)(a);return Math.round((.8*c+.1*(d.twoStepComplete?1:d.categories.length>0&&d.graded?.6:.3*(d.categories.length>0))+.1*(0,cu.bH)(a).coverage)*100)}(a.markdown,d),executability:await cz(a.markdown,a.referenceCompleteBlocks),normalization:function(a){let b=a=>"table"===a.category||"format"===a.category||("structure"===a.category?cC.test(a.message):!a.category&&!cB.test(a.message)&&cA.test(a.message));return Math.max(0,100-8*a.filter(a=>"error"===a.level&&b(a)).length-Math.min(3*a.filter(a=>"warning"===a.level&&b(a)).length,30))}(a.issues),uniqueness:function(a,b){let c=cv.filter(b=>a.includes(b)).length,d=b.vagueSemanticSentences,e=100*Math.max(0,b.ratio-.1),f=a.split(/\n+/u).filter(a=>a.trim()&&!/^\s*(#{1,6}\s+|\||[-*+]\s|>)/u.test(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.replace(/[\s,,、::()()【】[\]《》“”"'`]/gu,"")).filter(a=>a.length>=12);return Math.max(0,Math.round(100-4*c-6*d-.5*e-60*(f.length?(f.length-new Set(f).size)/f.length:0)))}(a.markdown,e)}}async function cF(a){let b=await cE({markdown:a.markdown,chapters:a.chapters,template:a.template,factTraces:a.factTraces,issues:a.issues,referenceCompleteBlocks:a.referenceCompleteBlocks,embedDocuments:a.embedDocuments}),c=Math.round((.3*b.completeness+.25*b.specificity+.2*b.compliance+.15*b.executability+.1*b.normalization)*Math.min(1,b.uniqueness/90)),d=a.issues.filter(a=>"error"===a.level).length,e=Math.max(0,Math.min(99,Math.round(c-8*d))),f=a.knowledgeCoverage.score>=95?95:85;return{overall:c,deliveryProbability:e,target:f,passed:e>=f&&0===d,scores:b,templating:await cD(a.markdown,a.embedDocuments),summary:`交付置信度 ${e}% / 目标 ${f}%,综合评分 ${c}/100(资料完整性 ${b.completeness}、方案针对性 ${b.specificity}、合规性 ${b.compliance}、可落地性 ${b.executability}、编制规范性 ${b.normalization}、低雷同性 ${b.uniqueness})`,actions:e>=f&&0===d?["已达到当前质量目标,建议保持事实口径和导出前复核。"]:["按招标评审口径补齐短板维度:章节与强制模块缺失补完整性、项目专属数据补针对性、危大闭环与强制制度补合规性、责任频次闭环句式补可落地性、表格层级与数据一致补规范性、清理空话禁用词与重复句式降雷同。","系统需优先修复阻断问题、扩大本地知识库检索、补抽结构化事实,并将未落位事实写入对应章节。"]}}var cG=c(28103),cH=c(5726);function cI(a,b){return b<=0?100*(a>0):Math.min(120,a/b*100)}async function cJ(a){var b,c;if(!a||a.trim().length<500)return;let d=(0,cG.aF)(a),e=(0,cH.Ah)(d);if(!e)return;let f=await (0,cG.WT)(a),g=e.profile,h=Math.max(g.arrowChainCoverage,.08),i=[{key:"paramDensity",label:"参数密度",generated:f.paramDensity,reference:g.paramDensity,score:cI(f.paramDensity,.8*g.paramDensity),unit:"perKChars"},{key:"arrowChainCoverage",label:"工序链覆盖率",generated:f.arrowChainCoverage,reference:h,score:cI(f.arrowChainCoverage,h),unit:"percent"},{key:"duplicationRate",label:"段落重复率",generated:f.duplicationRate,reference:g.duplicationRate,score:(b=f.duplicationRate)<=(c=g.duplicationRate)?100:Math.max(0,Math.round(100-(b-c)*400)),unit:"percent"},{key:"tableCount",label:"表格数量",generated:f.tableCount,reference:g.tableCount,score:cI(f.tableCount,.6*g.tableCount),unit:"count"},{key:"sectionCount",label:"章节结构",generated:f.sectionCount,reference:g.sectionCount,score:f.sectionCount>=.4*g.sectionCount?100:cI(f.sectionCount,g.sectionCount),unit:"count"}].map(a=>({...a,score:Math.round(Math.min(120,a.score)),passed:a.score>=80})),j={paramDensity:.3,arrowChainCoverage:.2,duplicationRate:.2,tableCount:.15,sectionCount:.15},k=Math.round(Math.min(100,i.reduce((a,b)=>a+b.score*(j[b.key]||0),0)));return{projectType:d,referenceSourceCount:e.sourceCount,overallScore:k,items:i}}let cK=[{pattern:/本小节围绕.+展开,结合绑定项目资料/u,label:"模板化开篇套话"},{pattern:/明确适用范围、控制目标、责任岗位与过程要求/u,label:"泛化目标罗列"},{pattern:/实施前应完成资料核对、技术交底和作业条件确认/u,label:"泛化前置条件"},{pattern:/交底覆盖率按\s*100%?\s*控制/u,label:"空泛交底承诺"},{pattern:/关键问题在\s*24\s*小时内形成整改责任/u,label:"空泛整改时限"},{pattern:/按施工准备→过程实施→检查验收→问题整改→资料归档的闭环组织/u,label:"通用闭环套话"},{pattern:/按作业条件确认→技术交底→过程实施→自检互检→整改复查/u,label:"通用流程套话"},{pattern:/依据本项目已确认资料中的项目边界/u,label:"资料依据套话"},{pattern:/执行日巡查、周复核和节点验收制度/u,label:"泛化巡查制度"},{pattern:/一般问题\s*7\s*日内闭环/u,label:"泛化整改时限"},{pattern:/由项目经理、技术负责人和专职安全员联合复核/u,label:"岗位名单堆砌"},{pattern:/确保与总体施工部署、工期计划和验收要求保持一致/u,label:"原则性呼应"},{pattern:/结合现场实际情况(?:,|,)?合理(?:组织|安排|布置|配置)/u,label:"结合实际套话"},{pattern:/严格(?:执行|落实|按照)国家(?:现行)?(?:有关)?(?:规范|标准|规程)/u,label:"规范泛引用"},{pattern:/做到(?:文明施工|安全生产|质量第一|安全第一)/u,label:"口号式承诺"},{pattern:/(?:确保|保证)工程(?:质量|安全|进度|文明施工)/u,label:"目标口号"},{pattern:/建立(?:健全)?(?:完善)?(?:的)?(?:管理)?体系(?:和|,)?(?:落实|确保|保证)/u,label:"体系空话"}],cL=RegExp(cK.map(a=>`(?:${a.pattern.source})`).join("|"),"u"),cM=["本小节围绕以下内容展开并结合绑定项目资料","明确适用范围控制目标责任岗位与过程要求","实施前应完成资料核对技术交底和作业条件确认","交底覆盖率按100%控制","关键问题在24小时内形成整改责任","按施工准备过程实施检查验收问题整改资料归档的闭环组织","依据本项目已确认资料中的项目边界","执行日巡查周复核和节点验收制度","一般问题7日内闭环","由项目经理技术负责人和专职安全员联合复核","确保与总体施工部署工期计划和验收要求保持一致","结合现场实际情况合理组织安排","严格执行国家现行有关规范标准","做到文明施工安全生产质量第一","确保工程质量和安全进度","建立健全管理体系并落实相关制度"],cN=["每道工序完成后由质检员实测实量并记录数据","混凝土浇筑完成后每天洒水养护不少于两次","每周组织不少于一次的现场安全专项检查"];async function cO(a){return(0,cf.A)({prototypes:[...cM],negativePrototypes:[...cN],lexicalHints:cL,embedDocuments:a})}let cP=[/主要分部分项工程施工方案/u,/主要施工方法/u,/主要施工内容/u,/施工方案/u],cQ=/(?:建筑面积|面积|总建筑面积)[约]?\s*\d+(?:\.\d+)?\s*(?:㎡|m²)|计划工期\s*\d+|日历天|地上\s*\d+\s*层|框架结构|质量标准[::]?\s*合格/giu;function cR(a){let b=a.split("\n"),c=[],d="",e=[];for(let a of b){let b=/^#{3,4}\s+(.+)$/u.exec(a.trim());b?((d||e.length>0)&&c.push({heading:d,body:e.join("\n")}),d=b[1].trim(),e=[]):e.push(a)}return(d||e.length>0)&&c.push({heading:d,body:e.join("\n")}),c}function cS(a){let b=[],c=new Map;for(let b of a)for(let a of cR(b.content)){let d=a.heading||b.title;for(let e of a.body.replace(/^#{1,6}\s+.*$/gmu,"").replace(/^\s*\|.*\|\s*$/gmu,"").replace(/^\s*[-|]\s*$/gmu,"").replace(/^\s*\[.*?\]\(.*?\)\s*$/gmu,"").split(/\n{1,}/u).map(a=>a.trim()).filter(a=>a.length>=60&&a.length<=400&&!/^\s*[-*]\s+/u.test(a))){let a=e.replace(/[,。,.;;::、()()【】[\]《》“”"'`\s]/gu,"");if(a.length<60)continue;let f=c.get(a)||[];f.some(a=>a.chapter===b.title&&a.section===d)||f.push({chapter:b.title,section:d}),c.set(a,f)}}let d=new Set;for(let[a,e]of c){let c=e.filter((a,b,c)=>c.findIndex(b=>b.chapter===a.chapter&&b.section===a.section)===b);if(c.length<2)continue;let f=c.map(a=>`${a.chapter}::${a.section}`).sort().join("|");if(d.has(f))continue;d.add(f);let g=e[0],h=g?`(如:${g.section} 中「${a.slice(0,30)}…」)`:"";if(b.push({level:c.length>=3?"error":"warning",severity:c.length>=3?"blocker":"warning",message:`发现相同段落出现在 ${c.length} 个不同小节:${c.map(a=>a.section).slice(0,6).join("、")}${h}`,suggestion:"每个小节必须针对其标题写专属内容,不得复制粘贴相同段落;重复小节应合并或删除后重写。"}),b.length>=8)break}return b}async function cT(a,b){let c=[],d=await cO(b);for(let b of a){let a=cR(b.content),e=[];for(let b of a){let a=b.body.split(/[。;;]/u).map(a=>a.trim()).filter(a=>a.length>=12);if(0===a.length)continue;let c=await d(a);a.forEach((a,b)=>{if(c[b])for(let{pattern:b,label:c}of cK)b.test(a)&&!e.includes(c)&&e.push(c)})}e.length>=3?c.push({level:"error",severity:"blocker",message:`${b.title} 存在大量模板化空话(${e.slice(0,6).join("、")})`,suggestion:'删除"本小节围绕…展开""按100%控制"式套话,按"责任岗位+执行动作+量化标准+检查频次+整改时限"重写。'}):e.length>0&&c.push({level:"warning",severity:"warning",message:`${b.title} 存在模板化空话:${e.join("、")}`,suggestion:"替换为具体量化做法;同一小节不得重复出现套话段落。"})}return c}async function cU(a,b){let c=[],d=await (0,cu.J_)(b);for(let e of a){let a=[],f=e.title;for(let b of e.content.split("\n")){let c=b.trim(),d=/^#{3,4}\s+(.+)$/u.exec(c);if(d){f=d[1].trim();continue}if(!(!c||/^\s*(#{1,6}\s+|\||[-*+]\s|>)/u.test(c)))for(let c of b.split(/[。;;]/u)){let b=c.trim();b.length>=12&&a.push({sentence:b,section:f})}}if(0===a.length)continue;let g=a.map(a=>a.sentence),h=await (0,v.Mv)(g,[...cu.vm],b),i=await d(g),j=0,k=new Set;for(let b=0;b<g.length;b+=1)!(cu.vm.some(a=>h(g[b],a)>=v.Eh)||i[b])||k.has(g[b])||j>=12||(k.add(g[b]),j+=1,c.push({chapterId:e.id,chapterTitle:e.title,section:a[b].section,sentence:g[b]}));if(c.length>=60)break}return c.slice(0,60)}function cV(a){let b=[];for(let c of a)for(let a of cR(c.content)){if(!cP.some(b=>b.test(a.heading)||b.test(c.title)))continue;let d=new Set(a.body.match(aQ.aX)||[]),e=new Set(a.body.match(cQ)||[]),f=new Set(a.body.match(aQ.LT)||[]),g=a.body.length;if(g<400)continue;let h=d.size/(g/1e3),i=/拆除|清理|清底|清运|弃置|运输|搬运/u.test(a.heading);if(0===d.size){if(f.size>=6){b.push({level:"warning",severity:"warning",message:`${c.title} / ${a.heading} 以设备配置参数为主:设备型号/容量参数 ${f.size} 项,工艺参数待补充`,suggestion:"设备清单型小节保留型号规格参数即可;如补充安装工艺(试验压力、坡度、间距、偏差),应同步写入工艺参数与验收节点。"});continue}if(i){b.push({level:"warning",severity:"warning",message:`${c.title} / ${a.heading} 以工程量与保护措施为主,建议补充拆除深度偏差、保护挑网宽度、警戒距离等参数`,suggestion:"拆除类作业补充拆除厚度偏差(mm)、防护挑网/安全网宽度(m)、警戒区距离(m)等安全与技术参数即可,不强制 mm/MPa 级工艺参数。"});continue}b.push({level:"error",severity:"blocker",message:`${c.title} / ${a.heading} 无工艺参数:全文只有概况性数字,缺乏 mm/MPa/间距/偏差/试验压力等工艺级参数`,suggestion:"必须写入工艺参数(如桩位偏差≤50mm、搭接宽度≥100mm、闭水试验48h),参数来自绑定资料或行业规范值。"})}else h<(i?.3:1.5)&&b.push({level:"warning",severity:"warning",message:`${c.title} / ${a.heading} 工艺参数密度偏低:每千字 ${d.size} 个工艺参数(概况数字 ${e.size} 个)`,suggestion:"增加工艺级参数落位;概况数字(面积、工期、层数)不能替代工艺参数。"})}return b}function cW(a){let b=[];for(let c of a){let a=c.content.split("\n");for(let d=0;d<a.length;d+=1){let e=a[d].trim();if(!/^#{3}\s+[^\n]*(?:主要分部分项工程施工方案|主要施工方法)/u.test(e))continue;let f=a.length;for(let b=d+1;b<a.length;b+=1)if(/^#{2,3}\s+/u.test(a[b].trim())){f=b;break}let g=a.slice(d+1,f).join("\n").split(/^####\s+/gmu).slice(1).map(a=>a.trim()).filter(Boolean);if(0===g.length)continue;let h=g.filter(a=>!(0,A.Jb)(a));h.length>0&&b.push({level:"error",severity:"blocker",message:`${c.title} / ${e.replace(/^#{3}\s+(?:\d+(?:\.\d+)*\s+)?/u,"")} 有 ${h.length}/${g.length} 个分部分项内容要素不全(作业对象与工程量/工序顺序/施工方法至少缺一)`,suggestion:"每个分项方案需覆盖作业对象与工程量、工序安排、施工方法三方面要素,可分段用“施工概况/工艺流程/施工方法”标签组织,也可自然成文;工序顺序表达形式不限(顺序词叙述、编号步骤、列表或箭头链均可)。"})}}return b}async function cX(a,b="",c){return[...cS(a),...await cT(a,c),...cV(a),...cW(a),...function(a,b=""){let c=[],d=(b||a.map(a=>a.content).join("\n\n")).split("\n"),e=0,f=0;for(;f<d.length;){let a=d[f].trim();if(!/^\|.+\|$/u.test(a)){f+=1;continue}let b=[];for(;f<d.length&&/^\|.+\|$/u.test(d[f].trim());)b.push(d[f].trim()),f+=1;if(b.length<3)continue;e+=1;let g=b[0].split("|").length-2,h=b.filter((a,b)=>0!==b&&a.replace(/\|/gu,"").replace(/[\s\-:]/gu,"").length>0),i=h.reduce((a,b)=>a+b.split("|").slice(1,-1).map(a=>a.trim()).filter(a=>""===a||"-"===a||"—"===a||"/"===a).length,0),j=h.length*Math.max(1,g);if(i>0&&i/Math.max(1,j)>=.4&&c.push({level:"warning",severity:"warning",message:`第 ${e} 个表格存在 ${i} 个空单元格(${h.length} 行),表格信息不完整`,suggestion:"表格每一列都必须填写,缺失字段应从资料补齐;无法确认的字段应删除该行而非留空。"}),c.length>=5)break}return c}(a,b)]}let cY=/两可|按图纸|资料[^。;;\n]{0,14}(?:未明确|两可|冲突)|支护[^。;;\n]{0,10}并存/u;async function cZ(a){let{chapterDraftsFinal:b,progressStages:c,emitProgress:d}=a,e=a.globalConsistencyIssues,f=b.map(a=>a.content).join("\n\n"),g=(0,a8.t1)(f),h=await (0,v.Mv)(g.sentences,g.overviewBody?[g.overviewBody]:[]),i=0,j=0,k=0;for(let a of b){let b=a.content.split(/\r?\n/u).length,c=(0,a8.lR)(a.content),d=(0,a8.QM)(c.markdown),e=(0,a8.Vc)(d.markdown),f=(0,a8.U$)(e.markdown,h),g=b-f.split(/\r?\n/u).length;g>0&&(i+=c.removedCount+d.removedCount,j+=e.removedCount,k+=g-c.removedCount-d.removedCount-e.removedCount,a.content=f)}if(i>0||j>0||k>0){let a=b.map(a=>a.content).join("\n\n"),f=[...(0,a8.ub)(a),...(0,a8.cl)(a),...(0,a8.l4)(a,{semanticSimilarity:h})].map(a=>`${a.message};${a.suggestion||""}`);e=[...new Set([...e.filter(a=>!/表格重复|段落完全重复|概况复述/u.test(a)),...f])];let g=[i>0?`重复表格 ${i} 行`:"",j>0?`重复段落 ${j} 行`:"",k>0?`概况复述句 ${k} 行`:""].filter(Boolean).join("、");(0,aL.fx)(c,(0,aL.X5)({type:"llm_review",roleId:"post-table-dedup",status:"success",message:`补表后确定性去重:${g}`},{subtitle:"表格执行率核验"})),d(b)}let l=await (0,a8.yR)(b);if(l>0){let a=(await (0,a8.LF)(b)).map(a=>`${a.message};${a.suggestion||""}`);e=[...new Set([...e.filter(a=>!/跨章语义重复/u.test(a)),...a])],(0,aL.fx)(c,(0,aL.X5)({type:"llm_review",roleId:"post-table-semantic-dedup",status:"success",message:`补表后语义重复 strip:删除雷同段 ${l} 段`},{subtitle:"表格执行率核验"})),d(b)}return e}async function c$(a){let{effectiveChapters:b,chapterDraftsFinal:c,template:d,repairPromptTexts:e,requirement:f,signal:g,generationDiagnostics:h,progressStages:i,emitProgress:j,withProgressHeartbeat:k}=a,l=(0,aI.Xi)(b,c),m=!1;if(l.length>0)for(let a=0;a<1&&l.length>0;a+=1){(0,aL.fx)(i,(0,aL.X5)({type:"llm_review",roleId:"table-execution-repair",status:"running",message:`表格执行率修复第 ${a+1} 轮(${l.length} 个章节缺表)`},{subtitle:"表格执行率修复"})),j(c);let n=0,o=[],p=l.flatMap(a=>{let b=c.find(b=>b.title===a.chapterTitle||a.chapterTitle.includes(b.title)||b.title.includes(a.chapterTitle));return b?[{gap:a,draft:b}]:[]}),q=async a=>{let{gap:b,draft:c}=a,i=[...new Set(b.plans.map(a=>a.moduleTitle).filter(Boolean))],j=i.length>0?c.evidence.filter(a=>{let b=a.sectionTitle;return!b||i.some(a=>b===a||b.includes(a)||a.includes(b))}):c.evidence,l={id:c.id,title:c.title,content:c.content,evidence:j.length?j:c.evidence,missingFacts:c.missingFacts||[],sections:c.sections},m=`计划表格缺失(计划 ${b.planned} 张,实际仅 ${b.actual} 张):${b.plans.map(a=>`${a.title}(表头:${a.fields.map(a=>a.name).join("、")})`).join(";")}。必须按表头字段补齐这些 markdown 表格并紧跟相关小节输出,不得删除已有正文;每个表格前须有 1~2 句引导叙述说明表格作用与关键结论,表格不能替代小节正文;deriveFromProject 字段基于项目工程量、总工期与工序流水按定额工效推导具体数值,projectFactOnly 字段不得编造。`;return await k(()=>(0,aM.X6)(h,`table-execution-repair:${c.id}`,()=>(0,aM.l8)({template:d,chapter:l,issues:[m],promptTexts:e,requirement:f,forbidDrawingImages:!0,diagnostics:h,signal:g,maxTokens:Math.min(12e3,Math.max(6e3,1200*b.plans.length))})))},r=await Promise.allSettled(p.map(a=>q(a))),s=new Set;if(r.forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;o.push(`${p[b].gap.chapterTitle}:修复异常(${a.reason instanceof Error?a.reason.message:"未知错误"})`);return}let c=a.value,{gap:d,draft:e}=p[b];c.content&&c.content!==e.content&&!s.has(e.id)?(e.content=c.content,s.add(e.id),n+=1):s.has(e.id)||o.push(`${d.chapterTitle}:缺 ${d.plans.map(a=>a.title).join("、")}(${h?.llm.lastError||"补表 patch 未应用"})`)}),0===n){(0,aL.fx)(i,(0,aL.X5)({type:"llm_review",roleId:"table-execution-repair",status:"failed",message:`表格执行率修复第 ${a+1} 轮:补表 patch 未应用(${l.length} 个章节缺表)`,details:o},{subtitle:"表格执行率修复"})),j(c);break}m=!0,j(c),l=(0,aI.Xi)(b,c),(0,aL.fx)(i,(0,aL.X5)({type:"llm_review",roleId:"table-execution-repair",status:l.length>0?"failed":"success",message:l.length>0?`表格执行率修复第 ${a+1} 轮完成,仍有 ${l.length} 个章节缺表`:`表格执行率修复第 ${a+1} 轮完成`},{subtitle:"表格执行率修复"})),(0,aL.fx)(i,(0,aL.X5)({type:"llm_review",roleId:"table-execution-review",status:l.length>0?"failed":"success",message:l.length>0?`表格执行率复检:仍有 ${l.length} 个章节缺表`:"表格执行率复检通过"},{subtitle:"表格执行率核验"}))}return{tableFixApplied:m}}async function c_(a){let{chapterDraftsFinal:b,template:c,repairPromptTexts:d,requirement:e,signal:f,generationDiagnostics:g,progressStages:h,emitProgress:i,withProgressHeartbeat:j}=a,k=!1;for(let a=0;a<2;a+=1){let l=b.map(a=>a.content).join("\n\n"),m=await (0,cu.Bt)(l),n=await (0,cu.gE)(l),o=m.ratio>=.1||m.vagueSemanticSentences>0,p=n.countermeasures>0&&n.ratio<.5;if(!o&&!p)break;let q=new Map(b.map(a=>[a.id,a.content])),r=o?await cU(b):[],s=(p?n.entries.filter(a=>!a.attributed||!a.quantified).slice(0,20):[]).flatMap(a=>{let c=a.text.replace(/\s+/gu,""),d=b.find(a=>a.content.replace(/\s+/gu,"").includes(c));return d?[{chapter:d,text:a.text,missingAttribution:!a.attributed,missingTarget:!a.quantified}]:[]}),t=b.flatMap(a=>{let b=r.filter(b=>(b.chapterId||b.chapterTitle)===(a.id||a.title)).map(a=>a.sentence),c=s.filter(b=>b.chapter.id===a.id).map(a=>({text:a.text,missingAttribution:a.missingAttribution,missingTarget:a.missingTarget}));return b.length>0||c.length>0?[{chapter:a,sentences:b,difficulty:c}]:[]});if(0===t.length)break;(0,aL.fx)(h,(0,aL.X5)({type:"llm_review",roleId:"templating-repair",status:"running",message:`模板化修复第 ${a+1} 轮:套话句占比 ${(100*m.ratio).toFixed(1)}%,重难点双达标 ${(100*n.ratio).toFixed(0)}%(${t.length} 章)`},{subtitle:"模板化修复"})),i(b);let u=0,v=async a=>{let b=[];a.sentences.length>0&&b.push(`第 1~${a.sentences.length} 条目标原文是本章已检出的空话套话句:逐条删除,或改写为“责任岗位 + 执行动作 + 量化标准 + 检查频次 + 整改时限”的具体措施表述;改写必须使用本章证据摘要中的项目事实与量化数据,不得凭空编造数值;属必须保留的合规承诺句可保留但须具体化到可核查。`);let h=a.sentences.length+1;for(let c of a.difficulty){let a=[c.missingAttribution?"归因句(该难点的成因/风险来源)":"",c.missingTarget?"量化控制目标(数值+单位,来自本章证据摘要或行业规范,不得编造)":""].filter(Boolean).join("与");b.push(`第 ${h} 条目标原文是重难点分析条目,缺少${c.missingAttribution&&c.missingTarget?"成因归因与量化控制目标":a}:保留条目原有事实与数值,在其内补充${a}。`),h+=1}return b.push("清单之外的内容一律不得改动;不得删除任何小节标题、表格与数值参数。"),j(()=>(0,aM.X6)(g,`templating-repair:${a.chapter.id}`,()=>(0,aM.l8)({template:c,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[b.join("\n")],promptTexts:d,requirement:e,forbidDrawingImages:!0,diagnostics:g,signal:f,anchorTexts:[...a.sentences,...a.difficulty.map(a=>a.text)],maxTokens:6e3,evidenceChars:5e3})))};if((await Promise.allSettled(t.map(a=>v(a)))).forEach((a,b)=>{if("rejected"===a.status){if(f?.aborted)throw a.reason;console.error("[gen] templating repair failed:",a.reason);return}let c=a.value,{chapter:d}=t[b];c.content&&c.content!==d.content&&(d.content=c.content,u+=1)}),i(b),0===u){(0,aL.fx)(h,(0,aL.X5)({type:"llm_review",roleId:"templating-repair",status:"failed",message:`模板化修复第 ${a+1} 轮:修复 patch 未落地(${t.length} 章锚点失配或 LLM 未产出)`,details:[`套话句占比 ${(100*m.ratio).toFixed(1)}% 未收敛,重难点双达标 ${(100*n.ratio).toFixed(0)}%`]},{subtitle:"模板化修复"}));break}let w=b.map(a=>a.content).join("\n\n"),x=await (0,cu.Bt)(w),y=await (0,cu.gE)(w),z=x.ratio>m.ratio+.01,A=y.ratio>n.ratio+.01;if(z&&!A){for(let a of b){let b=q.get(a.id);void 0!==b&&(a.content=b)}(0,aL.fx)(h,(0,aL.X5)({type:"llm_review",roleId:"templating-repair",status:"failed",message:`模板化修复第 ${a+1} 轮:修复后套话句占比 ${(100*x.ratio).toFixed(1)}% > 修复前 ${(100*m.ratio).toFixed(1)}%,已回滚本轮修改`,details:["LLM 重写未收敛,回滚保留修复前正文"]},{subtitle:"模板化修复"})),i(b);break}k=!0}if(k){let a=b.map(a=>a.content).join("\n\n"),c=await (0,cu.Bt)(a),d=await (0,cu.gE)(a),e=c.ratio<.1&&(!d.heavyTemplated||0===d.countermeasures);(0,aL.fx)(h,(0,aL.X5)({type:"llm_review",roleId:"templating-repair",status:e?"success":"failed",message:`模板化修复完成:套话句占比 ${(100*c.ratio).toFixed(1)}%(达标线 ≤10%),重难点归因+量化双达标 ${(100*d.ratio).toFixed(0)}%(达标线 ≥50%)`,details:e?[]:["未完全收敛:残留套话/缺要素条目由评分侧展示,不阻断交付"]},{subtitle:"模板化修复"})),i(b)}return{templatingFixApplied:k}}async function c0(a){let{chapterDraftsFinal:b,projectContext:c,template:d,repairPromptTexts:e,requirement:f,signal:g,generationDiagnostics:h,progressStages:i,emitProgress:j,withProgressHeartbeat:k}=a,l=/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目主要施工\s*内容|主要施工\s*内容|主要分部分项工程施工方案|主要分部分项施工方案|主要施工方法)\s*$/u,m=!1,n=0,o=0,p=(0,bb.sh)(c,b.flatMap(a=>a.evidence||[]));if(p.length>0){let a=/项目主要施工内容|主要施工内容|主要分部分项工程施工方案|主要分部分项施工方案|主要施工方法/u;for(let c of b){if(c.content.split("\n").some(a=>l.test(a.trim())))continue;let d=(c.sections||[]).find(b=>a.test(b));if(!d)continue;Array.isArray(c.sections)||(c.sections=[]);let e=c.sections.findIndex(b=>a.test(b)),f=e>=0?e+1:c.sections.length+1,g=`### ${b.indexOf(c)+1}.${f} ${d}`;c.content=`${c.content.replace(/\s+$/u,"")}
38
38
 
@@ -96,7 +96,7 @@ ${g.map(a=>`- ${a}`).join("\n")}`),b.join("\n\n")}({factsModel:am,evaluationCrit
96
96
  ${(0,q.CK)(E)}`,az||aB].filter(Boolean).join("\n\n"),aS=[ay,aF,(0,aM.fC)([...U.extractionPrompts,...U.referencePrompts])].filter(Boolean).join("\n\n"),aT=[ax,aF,(0,aM.fC)([...U.writerPrompts,...U.chapterPrompts,...U.formattingPrompts])].filter(Boolean).join("\n\n"),aU=[ax,aF,(0,aM.fC)(U.formattingPrompts)].filter(Boolean).join("\n\n");(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"document-preparation",status:"success",message:`模板规范与项目资料理解完成,识别 ${ae.length} 份项目资料`,details:[`提示词绑定:${Z.length} 个`,`项目资料包:${ag.materialRoots.join("、")||"当前知识库"}`,ap?`识别 OUTLINE 章节:${ao.length} 个`:"未识别显式 OUTLINE,使用模板章节"],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备",order:T.length})),J();let aV=new Set(ae),aW=new Map([...ai.entries()].map(([a,b])=>[a,(0,aO._W)(b)])),aX=new Map([...aj.entries()].map(([a,b])=>[a,b]));(0,aL.fx)(T,(0,aL.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:"running",message:"正在读取项目资料包索引",details:["使用上传阶段已完成的解析、切片和索引结果","不在生成流程中重新解析或入库","准备按资料类型召回章节证据"],progress:{current:1,total:3,label:"读取索引"}},{subtitle:"知识库检索",order:T.length})),J();let aY=await P(()=>F.getProject(C)),aZ=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=[...d9("部分绑定文件未完成索引,已自动跳过",f),...d9("部分绑定文件没有可用切片,已自动跳过",g),...d9("部分绑定文件索引失败,已自动跳过",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}}(aY,[...aV]);if(aZ.blockingIssues.length>0)throw Error(`生成前知识索引不可用:${aZ.blockingIssues.join(";")}`);let a$=new Set(aZ.usablePaths),a_=(0,a2.Zq)(D,[...a$]),a0=eb(aY,[...a$],a.maxEvidencePerChapter),a3=aZ.pendingJobs>0||0===aZ.usableChunkCount,a4=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(aZ.usableChunkCount,20*ae.length),loadedChunks:Math.min(aZ.usableChunkCount,20*ae.length),vectorReady:aZ.vectorStatus?"ready"===aZ.vectorStatus.status:void 0});(0,aL.fx)(T,(0,aL.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:a3?"failed":"success",message:`已读取知识索引:项目资料 ${aZ.scopedRecords.length} 份,可用切片 ${aZ.usableChunkCount} 条`,details:[`项目资料:${aV.size} 份`,`可用证据文件:${a$.size} 份`,`向量状态:${aZ.vectorStatus?.status||"unknown"}`,...aZ.warnings,"后续将按招标正文/清单/图纸/补疑等资料类型召回"],progress:{current:3,total:3,label:"索引已就绪"}},{subtitle:"知识库检索",order:T.length})),J(),(0,A.Te)(a.signal);let a5=[],a6=[],a7={enabled:aD.enabled,queries:[],evidenceCount:0,filteredCount:0,chapters:[]},a8=[],a9=[],bk=[],bw=[],bx=[],by=-1,bC=new Map,bE=new Map,bI=a=>{let b=`${a}::full`;if(!bE.has(b))try{bE.set(b,aY.getFileDetail?.(a))}catch{bE.set(b,void 0)}return bE.get(b)},bJ=async(a,b,c,d)=>{let e=d2(d),f="0"!==process.env.DOCUMENT_GENERATION_RERANKER,g=(0,A.c6)({query:a,scopedFilePaths:b,limit:c,weights:e,generationMode:!0,reranker:f}),h=bC.get(g);if(h)return h;let i=await F.search(C,a,{scope:"project",filters:{filePaths:b},limit:c,weights:e,generationMode:!0,disableReranker:!f}).catch(()=>null),j=i?.results||[];return bC.set(g,j),j},bK={stage:(0,aL.X5)({type:"file_understanding",roleId:"project-understanding",status:"running",message:`正在理解项目资料:${ag.files.length} 份资料,${Object.values(ag.groups).filter(a=>a.length>0).length} 类资料类型`,progress:{current:1,total:3,label:"资料理解"}},{subtitle:"项目资料理解",order:T.length})};(0,aL.fx)(T,bK.stage),J();let bL=(0,a2.Su)(await dv({manager:F,project:aY,projectRoot:C,scopedFilePaths:[...aV].filter(Boolean).sort(),fileRoleByPath:aW,fileProcessingByPath:aX,signal:a.signal}),a_);(0,a2.U2)(bL,a_,"project-basic-evidence"),bL.length>0&&(a5.push(...bL),(0,aL.fx)(T,(0,aL.X5)({type:"knowledge_retrieval",roleId:"project-basic-evidence",status:"success",message:`已锁定项目基础事实证据 ${bL.length} 条`,details:bL.slice(0,8).map(a=>`${e.basename(a.filePath)}|${a.sectionTitle||"正文片段"}|score=${a.score.toFixed(2)}`)},{subtitle:"基础事实召回",order:T.length})),J());let{safe:bQ,excluded:bS}=await (0,w.a0)(a5),bT=await (0,w.M8)();bS.length>0&&((0,aL.fx)(T,(0,aL.X5)({type:"knowledge_retrieval",roleId:"evidence-content-safety",status:"success",message:`证据内容安全过滤:${bS.length} 条投标程序/评标纪律类证据已从写作链断开(系统侧提取通道不受影响)`,details:bS.slice(0,6).map(a=>`${e.basename(a.filePath)}|${a.sectionTitle||"正文片段"}`)},{subtitle:"证据内容安全",order:T.length})),J());let bU=bL.filter(a=>!bS.includes(a)),bV=new Set(bS.map(w.hM)),bW=(0,z.d6)({evidence:bQ,template:E,spec:as,profile:at,scope:a_}),bX=bW.localFacts,bY=bW.projectBasicFacts,bZ=[...bX,...bY,...bW.preciseFacts],b$=(0,eE.hp)({projectRoot:C,template:E,requirement:a.requirement,materialScope:ad}),b_=[...(0,A.lX)(b$?.facts||[]),...bZ,...de(bQ)],b0=function(a,b){if(a.length<=1)return a;let c=dl(a,(0,c5.bC)(b)),d=dp(a,c),e=/项目名称|工程名称|招标人|建设单位|建设地点|质量标准|合同价格形式|绿色建筑等级|投标有效期|质保期|劳动力高峰|装配率|支护形式|创优奖惩|结构形式|总层数|建筑层数|建筑面积|建设规模|计划工期|合同工期|总工期/u,f=a=>e.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`),g=a=>a.fieldId||a.key||a.fieldName||"",h=new Map;for(let a of d){if(!f(a))continue;let b=g(a),c=h.get(b);if(!c){h.set(b,a);continue}let d=a=>({priority:dk(a.sourceFile,a.roleId),normalized:(0,z.de)((0,A.lG)(a.value))}),e=d(c),i=d(a);(i.priority>e.priority||i.priority===e.priority&&i.normalized!==e.normalized&&i.normalized.length<e.normalized.length)&&h.set(b,a)}if(0===h.size)return d;let i=new Set;for(let a of d)f(a)&&h.get(g(a))!==a&&i.add(a);return 0===i.size?d:d.filter(a=>!i.has(a))}(b_,C),b1=await (0,z.d7)(b0,bW.structuredTables,a8,as,at),b2=(0,dr.Qu)({template:E,requirement:a.requirement,projectRoot:C,facts:b0,projectGraph:b$?.projectGraph,projectGraphSource:b$?"project-intelligence":void 0,materialScope:ad});for(let a of(0,dr.SU)(b2))(0,aL.fx)(T,a);b$&&(0,aL.fx)(T,(0,aL.X5)({type:"file_understanding",roleId:"project-intelligence-cache",status:"success",message:`已复用入库后项目理解资产与绑定 scope 快照:${b$.files.length} 份绑定资料`,details:[`项目级缓存时间:${new Date(b$.cache.createdAt).toLocaleString()}`,`scope 快照:${b$.scopeSnapshot.scopeHash.slice(0,12)}`,`复用预计算事实:${b$.facts.length} 条`,`复用预计算项目图谱:${b$.projectGraph.works.length}工程/${b$.projectGraph.methods.length}工法/${b$.projectGraph.resources.length}资源`,`复用施工组织设计专项图谱:${b$.constructionOrganizationGraph.workPackages.length} 个工作包/${b$.constructionOrganizationGraph.controlMatrix.length} 条控制矩阵`,`图谱来源:${b$.cache.projectGraphMessage}`,`章节意图证据覆盖:${Object.keys(b$.evidenceByChapterId||{}).length}/${E.chapters.length} 章`,`排除正文不适用资料:${b$.files.filter(a=>!a.usableForBody).length} 份`]},{subtitle:"项目理解缓存 / Scope 快照"})),J();let b3=b2.baseProjectGraph;if(!b$){(0,aL.fx)(T,(0,aL.X5)({type:"file_understanding",roleId:"project-graph",status:"running",message:`正在临时构建完整项目图谱:${a5.length} 条证据 → LLM 结构化提取`,details:["缓存缺失或版本过期,建议重新构建项目理解缓存;本次生成将临时构建完整项目图谱。","提取:工程内容、施工方法、材料设备、技术标准、重点难点"],progress:{current:2,total:3,label:"项目图谱"}},{subtitle:"项目资料图谱分析",order:T.length})),J();let b=await P(()=>(0,eD.i)({evidence:bQ,signal:a.signal,projectRoot:C,requirement:a.requirement,templateId:E.id}),T);if(!b.graph)throw Error(`完整项目图谱构建失败:${b.stage.message||b.stage.status}`);b3=b.graph,(0,aL.fx)(T,b.stage),J()}b3&&(ah=(0,aO._n)(E,ag,b3)),(0,aL.fx)(T,(0,aL.X5)({type:"file_understanding",roleId:"project-understanding",status:"success",message:`已完成项目资料理解:${ag.files.length} 份资料、${Object.values(ag.groups).filter(a=>a.length>0).length} 类资料类型${b3?`、图谱增强 ${b3.works.length} 项工程内容`:""}`,details:[...ah.chapterPlans.slice(0,10).map(a=>`${a.chapterTitle}:必用 ${a.mustUseMaterialKinds.length} 类资料、必覆盖 ${a.mustCover.length} 项`),...ah.profile.warnings.length?[`资料风险:${ah.profile.warnings.slice(0,3).join(";")}`]:[]]},{subtitle:"项目资料理解",order:T.length})),J();let b4=dq({facts:b_,projectGraph:b3,requiredKeys:c6.map(a=>a.key),projectRoot:C,requirement:a.requirement,templateId:E.id});b1.canonical=b4;let b5=(0,o.effectiveTemplateChapters)(E,as,{preserveExplicitOutline:ap}),b6=(0,t.dK)({template:E,chapters:b5,requirement:a.requirement}).chapters,b7=a5.filter(a=>/评审|评分标准|评分办法|详细评审/u.test(`${a.sectionTitle||""}${a.content}`)).map(a=>a.content),b8=(0,u.tL)(b7);b7.length>0&&0===b8.length&&(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"bid-structure-audit",status:"skipped",message:"评审章节证据存在但未提取到评分条目标题:评分标准编号条目提取为空,承接审计将静默通过",details:["请检查招标文件评标办法章节编号格式;评分项要求(创优目标/绿色等级/禁编日期)由评分项要求提取通道覆盖"]},{subtitle:"评标结构校验",order:T.length}));let b9=await (0,v.Mv)(b8.map(a=>a.title),b6.map(u.Yx)),ca=(0,u.KX)({template:E,chapters:b6,requirement:a.requirement,evaluationItems:b8,semanticSimilarity:b9}),cb=(async()=>{try{var b;let c,d=[];for(let a of[...aV].sort()){if(!/招标|补疑|答疑|评标/u.test(a))continue;let b=bI(a);if(b?.chunks?.length)for(let c of b.chunks)d.push({chapterId:"tender-requirements",filePath:b.file?.relativePath||a,score:1,content:c.content||"",roleId:aW.get(a),processingType:aX.get(a),sectionTitle:c.sectionTitle,source:"pinned-evidence"})}let f=d.length>0?await V(d):(0,n.QR)([...a5.filter(a=>/招标|评标|投标须知|专用合同|合同条款|技术标准|技术要求/u.test(`${a.filePath||""}${a.sectionTitle||""}`)),...a5.filter(a=>!/招标|评标|投标须知|专用合同|合同条款|技术标准|技术要求/u.test(`${a.filePath||""}${a.sectionTitle||""}`))],{preservePinned:!0});if(d.length>0){let a=d.reduce((a,b)=>a+(b.content?.length||0),0),b=f.reduce((a,b)=>a+(b.content?.length||0),0);(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"tender-requirement-preselect",status:"success",message:`评分项要求有用数据预筛:${d.length} → ${f.length} 条切片(${Math.round(b/Math.max(1,a)*100)}% 字符量)`,details:["投标程序/清单/目录/格式类切片已从主提取输入剔除(义务词形+语义命中双通道保留)","全量切片仍作必提条款窄通道召回池,兜底不失效"]},{subtitle:"评分项要求提取\xb7预筛",order:T.length})),J()}let g="0"!==process.env.DOCUMENT_EXTRACTION_CACHE?(b={collectionEvidence:d,preselectEvidence:f},(0,A.c6)({version:"tender-requirements-extraction-v3",collection:aa(b.collectionEvidence),preselectInput:aa(b.preselectEvidence)})):void 0,h=g?function(a,b){try{let c=e.join(_(a),`tender-requirements-${b}.json`),d=JSON.parse(x.readFileSync(c,"utf8"));if(!$(d)||X(d))return;return d}catch{return}}(C,g):void 0;if(h)c=h,(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"tender-requirements-cache",status:"success",message:"复用上次提取结果(招标文件与预筛输入哈希命中,跳过主提取/窄通道 LLM)",details:an(c)},{subtitle:"评分项要求提取\xb7缓存复用",order:T.length})),J();else{c=await P(()=>G(f,{signal:a.signal})),!$(c)&&f.length>0&&(c=await P(()=>G(f,{signal:a.signal})));let b=await W(d),h=N(c);if(b.length>0&&h.length>0){let d=await P(()=>G(b,{signal:a.signal}));$(d)&&(c=Y(c,d),(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"tender-mandatory-extraction",status:"success",message:"必提条款窄通道补提完成(主提取漏提字段已补齐)",details:an(d)},{subtitle:"评分项要求提取\xb7必提补提",order:T.length})),J())}let i=[];if(O(c).length>0&&d.length>0){let b=await P(()=>R(c,d,{signal:a.signal}));c=b.model,i=b.stillGaps;let e=b.noEvidenceGaps,f=b.stillGaps;0===b.stillGaps.length&&((0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"tender-field-gap-extraction",status:"success",message:"评分项要求字段定向补提完成(字段级聚焦提取,全部评分项要求字段已提取)",details:an(c)},{subtitle:"评分项要求提取\xb7字段补提",order:T.length})),J());let g=a=>L.includes(a);if(f.length>0){let a=f.filter(g),b=f.filter(a=>!g(a)),c=[a.length>0?`必提字段 ${a.map(a=>M(a)).join("、")}`:"",b.length>0?`常规字段 ${b.map(a=>M(a)).join("、")}`:""].filter(Boolean);(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"tender-field-gap-missing",status:"skipped",message:`字段定向补提后仍缺失:${c.join(";")}(条款窗口证据存在但 LLM 提取失败)`,details:["请检查 LLM 可用性与输出质量;正文将无法显性响应上述评分项要求"]},{subtitle:"评分项要求提取\xb7字段缺口",order:T.length})),J()}if(e.length>0){let a=e.filter(g),b=e.filter(a=>!g(a)),c=[a.length>0?`必提字段 ${a.map(a=>M(a)).join("、")}`:"",b.length>0?`常规字段 ${b.map(a=>M(a)).join("、")}`:""].filter(Boolean);(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"tender-field-gap-no-evidence",status:"skipped",message:`${c.join(";")}:招标资料中未找到对应条款或条款值为「无」(判定为无此要求,非漏提)`,details:["若项目实际存在该要求,请检查招标文件相关章节切片完整性"]},{subtitle:"评分项要求提取\xb7字段缺口",order:T.length})),J()}}g&&0===i.length&&function(a,b,c){if(!(!c||!$(c)||X(c)))try{x.writeFileSync(e.join(_(a),`tender-requirements-${b}.json`),JSON.stringify(c,null,2))}catch{}}(C,g,c)}return $(c)?((0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"success",message:"招标文件评分项要求结构化提取完成",details:an(c)},{subtitle:"评分项要求提取",order:T.length})),J()):f.length>0&&((0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"skipped",message:"评分项要求提取未获得有效结果(模型不可用或资料中无要求),零响应检测自动跳过",details:[]},{subtitle:"评分项要求提取",order:T.length})),J()),c}catch(a){return(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"skipped",message:"评分项要求提取链异常,已降级为空模型(零响应检测自动跳过)",details:[`异常信息:${a instanceof Error?a.message:String(a)}`,"请检查 LLM 可用性与本地语义模型状态"]},{subtitle:"评分项要求提取",order:T.length})),J(),B(!1)}})(),cc=(0,aI.w9)({chapters:ca.enrichedChapters,projectGraph:b3,canonicalFacts:b4});E={...E,chapters:cc};let cd=(0,eF.NP)({template:E,context:b2,title:E.name});cd.catch(()=>void 0);let ce=new Map;if(b3){let a=new Set;for(let b of[...b3.works,...b3.methods,...b3.resources,...b3.schedule,...b3.standards,...b3.risks,...b3.requirements,...b3.siteConditions])(b.sourceFiles||[]).forEach(b=>a.add(b));for(let b of cc){let c=[b.title,b.purpose,...b.sections||[],...b.requiredFacts||[],...b.queries||[]].join(" "),d=a=>a&&((0,eH.C1)(a,c,.18)||(0,eH.C1)(a,b.title,.12)),e=/概况|总体|部署|施工|进度|工期|质量|安全|资源|人材机|材料|机械|劳动力|风险|危大|绿色|环保/u.test(c),f=b3.works.filter(a=>a.name&&(d(a.name)||e)),g=b3.methods.filter(a=>a.name&&(d(a.name)||(a.applicableWorks||[]).some(d)||e)),h=b3.resources.filter(a=>a.name&&(d(a.name)||/资源|人材机|材料|机械|劳动力/u.test(c)&&/material|equipment|labor/u.test(a.type))),i=b3.gaps.filter(a=>!(0,eE.Ut)(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].forEach(a=>j.add(a)),ce.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})}b$||((0,aL.fx)(T,(0,aL.X5)({type:"file_understanding",roleId:"project-graph-match",status:"success",message:`图谱→章节映射完成:${b3.works.length}工程 ${b3.methods.length}工法 ${b3.resources.length}资源 → ${cc.length}章`,details:cc.map(a=>{let b=ce.get(a.id);return`${(0,o.GQ)(a.title)}:匹配文件${b?.graphFiles.size||0}个,BOQ项${b?.graphBoqItems.length||0}个`})},{subtitle:"图谱章节映射"})),J())}let cf=cc,cg=(0,eE.TD)(b$?.constructionOrganizationGraph)||b$?.constructionOrganizationContext,ch=a=>{let b=ce.get(a);return b&&(b.graphWorks.length||b.graphMethods.length||b.graphBoqItems.length)?[b.graphWorks.length?`专业工程:${b.graphWorks.slice(0,8).join("、")}`:"",b.graphMethods.length?`主要工法/工艺:${b.graphMethods.slice(0,8).join("、")}`:"",b.graphBoqItems.length?`关键资源:${b.graphBoqItems.slice(0,8).map(a=>a.name).join("、")}`:""].filter(Boolean).join(";"):""},ci=[ah.prompt,cg].filter(Boolean).join("\n\n"),cj=ci,ck={...E,chapters:cf},cl=(0,av.My)([aJ,a.requirement||""].filter(Boolean).join("\n\n"),cf),cm=(0,r.tF)({requirement:a.requirement,promptTexts:aJ,template:ck,chapters:cf,spec:as}),cn=0,co=0,cp=[],cq=await (0,A.l$)(cf.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b,chapterIndex:c})=>{if(b.sections?.length){cn+=1;let a=cl.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,o.GQ)(a.chapterTitle)===(0,o.GQ)(b.title)).flatMap(a=>a.requiredSections.sort((a,b)=>(a.order||0)-(b.order||0)).map(a=>a.title));for(let c of[...a,...b.sections]){let a=(0,av.EN)(String(c).trim());a&&a!==String(c).trim()&&cp.push(`${(0,o.GQ)(b.title)}:${c} → ${a}`)}let d=(0,av.k2)([...a,...b.sections],b.title);return{...b,sections:d.length?d:(0,av.k2)(b.sections,b.title)}}co+=1;let d=(0,n.QR)(bQ.filter(a=>a.chapterId===b.id||(0,p.Lk)(a,b.title)),{preservePinned:!0}),e=ah.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",f=dY(U,b),g=await (0,av.SP)({template:ck,chapter:b,chapterIndex:c,evidence:d,promptTexts:f.promptTexts,projectContext:cj,requirement:a.requirement,roleContext:e,targetWords:cm.chapterTargets.get(b.id)||1200,projectGraphSummary:ch(b.id),structuralRules:cl,signal:a.signal}),h=cl.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,o.GQ)(a.chapterTitle)===(0,o.GQ)(b.title)).flatMap(a=>a.requiredSections.map(a=>`强制小节:${a.title}`));if((0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"section-planning",promptId:f.primaryPromptId,status:g.length?"success":"failed",message:`${(0,o.GQ)(b.title)} 小节规划${g.length?`生成 ${g.length} 个小节`:"未生成可用小节"}`,details:[...f.promptDetails,...h,...g.length?g.map(a=>`规划小节:${a}`):["规划结果为空或被污染过滤"]]},{subtitle:"小节规划"})),!g.length)throw Error(`${(0,o.GQ)(b.title)} 小节规划未生成可用小节`);return{...b,sections:g}},{kind:"llmRepair",targetWords:cm.targetChars||4e3}),cr=await cb,cs=(0,t.dK)({template:E,chapters:cq,requirement:a.requirement}),ct=cs.chapters;if("template-locked"!==process.env.DOCUMENT_SECTION_PLANNING_MODE){let b=0,c=await (0,A.l$)(cs.chapters.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b})=>{if(!(b.sections||[]).length)return{chapterId:b.id,additions:[]};let c=(0,n.QR)(bQ.filter(a=>a.chapterId===b.id||(0,p.Lk)(a,b.title)),{preservePinned:!0}),d=ah.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",e=dY(U,b),f=await (0,av.wy)({template:ck,chapter:b,evidence:c,promptTexts:e.promptTexts,projectContext:cj,requirement:a.requirement,roleContext:d,projectGraphSummary:ch(b.id),maxTotalSections:t.a0,signal:a.signal});return{chapterId:b.id,additions:f}},{kind:"llmRepair",targetWords:cm.targetChars||4e3}),d=[];ct=cs.chapters.map(a=>{let e=(c.find(b=>b.chapterId===a.id)?.additions||[]).filter(b=>!(a.sections||[]).some(a=>a.includes(b)||b.includes(a)));if(!e.length)return a;let f=e.slice(0,Math.max(0,t.a0-(a.sections||[]).length));return f.length?(b+=f.length,d.push({chapterTitle:a.title,sections:f}),{...a,sections:[...a.sections||[],...f]}):a}),(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"section-planning-additions",status:b>0?"success":"skipped",message:b>0?`专业小节补规划:为 ${d.length} 个章节新增 ${b} 个专业工作面小节`:"专业小节补规划:LLM 未产出有效增量,保留模板锁定结构",details:d.length?d.map(a=>`${(0,o.GQ)(a.chapterTitle)}:${a.sections.join("、")}`):["无新增(LLM 空响应/无支撑依据/与已有小节重复)"]},{subtitle:"专业小节补规划",order:T.length})),J()}let cu="0"!==process.env.DOCUMENT_REQUIREMENT_CALIBRATION,cv=ct;if(cu&&$(cr)){let b=await P(()=>aw({chapters:ct,requirementSummary:an(cr),templateName:E.name,signal:a.signal}));if(b.length>0){let a=function(a,b){if(!b.length)return{chapters:a,applied:[]};let c=[],d=a.map(a=>({...a,sections:[...a.sections||[]]}));for(let a of b){let b=d.findIndex(b=>(0,o.GQ)(b.title)===(0,o.GQ)(a.chapterTitle)||(0,av.nz)(b.title)===(0,av.nz)(a.chapterTitle));if(b<0)continue;let e=d[b],f=a.sections.filter(a=>!(e.sections||[]).some(b=>(0,av.kw)(b,a)));0!==f.length&&(e.sections.push(...f),c.push({chapterTitle:a.chapterTitle,sections:f}))}return a.every((a,b)=>{let c=d[b];return!!c&&(a.sections||[]).every(a=>(c.sections||[]).some(b=>(0,av.kw)(b,a)))})?{chapters:d,applied:c}:{chapters:a,applied:[]}}(ct,b);a.applied.length>0?(cv=a.chapters,(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"success",message:`大纲要求校准:新增 ${a.applied.reduce((a,b)=>a+b.sections.length,0)} 个评分项承接小节(结构守恒校验通过)`,details:a.applied.map(a=>`${(0,o.GQ)(a.chapterTitle)}:${a.sections.join("、")}`)},{subtitle:"大纲要求校准",order:T.length}))):(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"skipped",message:"大纲要求校准未通过结构守恒校验,回退原规划",details:["校准新增小节未通过章名匹配/标题清洗校验,全部丢弃"]},{subtitle:"大纲要求校准",order:T.length})),J()}else(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"skipped",message:"大纲要求校准未产出有效增量(章节结构已覆盖评分项要求或校准调用失败),回退原规划",details:[]},{subtitle:"大纲要求校准",order:T.length})),J()}let cw=await (0,w.mI)(cv),cx=cv.reduce((a,b,c)=>a+Math.max(0,(b.sections||[]).length-(cw[c]?.sections||[]).length),0);{let a=cs.report;a.unattached.length>0?(0,aL.fx)(T,(0,aL.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,aL.fx)(T,(0,aL.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 cy=await (0,v.Mv)(b8.map(a=>a.title),cw.map(u.Yx)),cz=(0,u.KX)({template:E,chapters:cw,requirement:a.requirement,evaluationItems:b8,semanticSimilarity:cy});cf=(0,aI.w9)({chapters:cz.enrichedChapters,projectGraph:b3,canonicalFacts:b4}),cf=(0,u.ji)(cf);let cA=await (0,w.mI)(cf),cB=cf.reduce((a,b,c)=>a+Math.max(0,(b.sections||[]).length-(cA[c]?.sections||[]).length),0);cf=cA;let cC=cx+cB;cC>0&&((0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"outline-topic-filter",status:"success",message:`大纲小节主题过滤:剔除 ${cC} 个评标纪律/商务报价类离题小节`,details:["被剔除小节不进入写作、目录与预算计划",...cB>0?[`评标结构校验补挂回路二次剔除:${cB} 个条款碎片/纪律小节`]:[]]},{subtitle:"大纲主题约束",order:T.length})),J()),(cz.issues.length>0||ca.issues.length>0)&&(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"bid-structure-audit",status:cz.issues.some(a=>"blocker"===a.severity)?"failed":"success",message:`评标结构符合性校验:${cz.diagnostics.length} 个结构组,${cz.diagnostics.filter(a=>"satisfied"===a.status).length} 个已满足,${cz.diagnostics.filter(a=>"missing"===a.status&&"required"===a.level).length} 个必查缺失(已自动补挂),${cz.diagnostics.filter(a=>"fragmented"===a.status).length} 个分散`,details:[...cz.diagnostics.map(a=>`${"satisfied"===a.status?"满足":"fragmented"===a.status?"分散":"补挂"}:${a.groupTitle}${"missing"===a.status?`(补挂小节:${a.missingSections.join("、")})`:""}`),...cz.issues.map(a=>`提示:${a.message}`).slice(0,8)]},{subtitle:"评标结构校验"})),E={...E,chapters:cf};let cD=await (0,v.Mv)(ac(cr).map(({item:a})=>ab(a)),cf.map(a=>al(a.title))),cE=await am(cr,cf,cD);cE.length>0&&((0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"tender-requirement-routing",status:"success",message:`评分项要求章节级路由:${cE.length} 条要求已路由到责任章节(生成时显性响应)`,details:cE.map(a=>`${a.kind}“${a.item.text}” → ${a.chapterTitle}(相似度 ${a.score.toFixed(2)})`)},{subtitle:"要求响应路由",order:T.length})),J());let cF=await aA(),cG=await aG(),cH=function(a){let b=(0,t.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 环节以上工序顺序表达",'专业工程类小节必须覆盖作业对象与工程量、工序顺序、施工方法三方面要素(呈现形式不限,段落式叙述或带标签分点均可),小节标题用专业工程正式名称(如"拆除工程"),禁止使用"工作包"等后台概念命名','质量目标与创优目标必须使用招标文件原文的奖项名称逐字落位,禁止替换、降级或省略为其他奖项名称(如把招标文件指定奖项写成其他奖项);招标文件"确保/达到"类等级要求不得弱化为"争创/争取"','B5 属地创优目标(安徽省属地适配项):招标文件未明确具体奖项时,正文必须提出不低于招标文件要求的属地创优目标,如"争创合肥市级优质工程""争创市级安全文明标准化工地"等,并在质量与文明施工章节落位','B5 表格数据一致性(丰乐镇第三轮实测:合计行 5088 与阶段工日之和 5808 矛盾、班组人数 22/28/30 多值并存):表格类内容(劳动力投入、材料配置、机械设备等)合计行数值必须与上方明细行数据一致、可由各行相加推导;各阶段人数与全项目峰值人数必须显式区分口径并保持一致(如写明"阶段高峰人数按阶段分别统计,合计行仅列全项目峰值口径");同一班组人数在配置表与进退场表中必须同值,不得多值并存',...f.length?[`投标人须知前附表响应条款(正文必须逐条落位或遵守,零响应即评标失分):${f.map((a,b)=>`${b+1}.${a}`).join(";")}`]:[]],h=a.chapters.map(b=>{var c;let d=(c=b.title,aH.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:cf,factsModel:b1,projectGraph:b3||void 0,requirement:a.requirement,templateName:E.name,tenderRequirements:cr}),cI=function(a){if(!a||!$(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.filter(a=>!(0,w.dn)(a.text))),a.dateFabricationProhibited&&b.push("禁止编造开工日期:招标文件以开工令时间为准,正文不得自行设定具体日历开工日期,一律表述为“以开工令时间为准”。"),c("禁止性/约束性要求(正文不得违反)",a.prohibitionNotes),0===b.length)?"":`【招标文件评分项要求(系统从绑定资料提取,必须逐条响应,零响应即评标失分)】
97
97
  ${b.map((a,b)=>`${b+1}. ${a}`).join("\n")}
98
98
  ${(0,A.TP)("以上为系统提取的评分项要求内容:实质要求(奖项名称、数字参数、等级指标等)必须显性响应进正文;本段提示词文字本身(编号、括号说明等元话语)禁止复述进正文")}`}(cr);cj=[ci,cI].filter(Boolean).join("\n\n");let cJ="0"!==process.env.DOCUMENT_CONTEXT_SLIM_CHAPTER,cK=a=>cJ?[cg,cI].filter(Boolean).join("\n\n"):cj,cL=(0,r.tF)({requirement:a.requirement,promptTexts:aJ,template:E,chapters:cf,spec:as}),cM=await cd;b2.documentPlan=cM.plan,b2.nodes.push(cM.node),(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:cM.node.outputSummary||"Agent 文档规划完成",details:cM.plan.chapters.map(a=>`${a.title}:${a.sections.length} 条细目`)},{subtitle:"Agent Document Planner",order:T.length})),I=cf.map(a=>a.id);let cN=cL.targetChars||[...cL.chapterTargets.values()].reduce((a,b)=>a+b,0),cO=(0,aM.JP)({template:E,targetWords:cN,requirement:a.requirement,materialFileCount:ae.length,evidenceCount:a5.length}),cP=(0,aN.C)({template:E,chapters:cf,targetWords:cN,requirement:a.requirement,materialFileCount:ae.length,evidenceCount:a5.length,hasVeryLargeExplicitChapter:cf.some(a=>(a.sections||[]).filter(Boolean).length>=30),configuredChapterConcurrency:Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),strategy:cO}),cQ=(0,aM.Zk)(cO);(bW.factSanitize.truncated>0||bW.factSanitize.dropped>0||bW.factSanitize.repaired>0)&&(cQ.factSanitize={...bW.factSanitize});let cR=Date.now();(0,y.t5)(cN),(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${cO.mode} 生成策略:章节审查 ${cO.enableChapterReview?"启用":"跳过"}、全局审查 ${cO.enableGlobalReview?`${cO.globalReviewSamplingRate&&cO.globalReviewSamplingRate<1?`抽检 ${Math.round((cO.globalReviewSamplingRate??1)*100)}%`:"启用"}`:"跳过"}、最终质量审查 ${cO.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${cO.enableDocumentBudgetExpansion?"启用":"跳过"}`,details:cP.triggers},{subtitle:"后台自动策略"})),b4.scopeConflicts.length>0&&(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"scope-conflict-resolution",status:"success",message:`源级数据口径冲突已裁决(补疑/澄清修正文件权威最高):${b4.scopeConflicts.map(a=>a.resolution?`${a.scope} → ${a.resolution}`:`${a.scope} → 待人工复核`).join(";")}`,details:b4.scopeConflicts.flatMap(a=>a.values.map(a=>`来源「${a.sourceFile||"未知文件"}」取值 ${a.value}${a.unit}`))},{subtitle:"数据口径裁决"}));let cS=(0,aL.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${co} 章由 LLM 基于${ap?"OUTLINE 章节":"模板章节"}、项目资料理解和证据规划小节,${cn} 章已由模板显式提供小节并跳过规划`,details:cp.length?[...cp]:void 0},{subtitle:"小节规划策略"}),cT=ap?`;识别到 OUTLINE 章节 ${ao.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",cU=[...U.prompts.map(a=>`${a.category}|${a.roleId}|${a.id}|${a.name}|${a.bindingSource}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`),...U.unresolvedRoles.map(a=>`unresolved|${a}|项目角色配置中的提示词角色不存在`),...U.missingResourceRoles.map(a=>`missingResource|${a}|提示词角色未显式绑定资源`)];(0,aL.fx)(T,(0,aL.X5)({type:"role_binding",roleId:Q,status:"success",message:`已绑定项目资料 ${ae.length} 份、${U.prompts.length} 个有效提示词;写作 ${U.writerPrompts.length}、章节 ${U.chapterPrompts.length}、抽取 ${U.extractionPrompts.length};已自动抽取运行时规则 ${aE.executionSummary.length} 条${cT}`,details:[...cU,...aE.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:S,roleName:S})),(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${aE.executionSummary.length} 条,版本 ${aE.sourceHash}`,details:aE.executionSummary.length?[...aE.executionSummary,`必需表格:${aE.requiredTables.join("、")||"无"}`,`必含关键词:${aE.requiredKeywords?.join("、")||"无"}`,`禁含内容:${aE.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})),(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"document-readiness",status:au.ready?"success":"failed",message:"生成准备度:绑定资料已就绪",details:au.diagnostics},{subtitle:"生成准备度检查"})),(0,aL.fx)(T,cS),J();let cV=Math.round(([...cL.chapterTargets.values()].reduce((a,b)=>a+b,0)||cL.targetChars||0)/Math.max(1,cf.length)),cW=Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),cX=cP.chapterConcurrency,cY=cP.reviewConcurrency;(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节流水线调度:${cf.length} 章全部同批并行生成,审查修复 ${cY} 路流水线(章节生成完立即进入审查,与后续章节生成重叠)`,details:[`有效章节数:${cf.length}`,`平均章节目标:${cV} 字`,Number.isFinite(cW)&&cW>0?`章节并发来自 DOCUMENT_CHAPTER_CONCURRENCY=${Math.floor(cW)}`:`全部章节并行生成,在飞调用不设并发上限;每章单轮修复(失败即放弃)`]},{subtitle:"章节流水线策略"})),J();let c_=new A.jf(cY),c3=[],c4=[...a$].filter(Boolean).sort(),c7=Date.now(),c8=c4.length>0?(await (0,A.l$)(dt,async a=>bJ(a,c4,Math.min(a0,12),""),{kind:"search"})).flat():[];cQ.evidence.searchQueries+=dt.length,cQ.evidence.searchMs+=Date.now()-c7;let c9=Date.now();try{b=function(a){let b=Date.now(),c={stage:"阶段 0",standardBlocksLoaded:0,standardBlockGaps:[],laborDerivationBasis:"清单汇总 \xd7 经验区间系数(定额工效知识不全,降级区间表达)",llmCalls:0,fallbackUsed:[],warnings:[],durationMs:0},d={version:"2.0.0",projectCode:function(a,b){let c=a=>a.replace(/^\d+(?:\.\d+)*\s*--\s*(?=\d{4}年)/u,""),d=/项目名称[::]\s*([^\n]{2,60})/u.exec(a);if(d){let a=c(d[1].trim()),b=a.split(/计划工期[::]|合同工期[::]|总工期[::]|工期[::]|质量标准[::]|计价[::]|施工地点/u)[0]?.trim()||a;if(b)return b}let e=/(\d{4}\s*年度\S{2,40}建设项目)/u.exec(a);return e?c(e[1].trim()):b||""}(a.basicFacts||"",a.templateName)||void 0,docType:"单位工程施工组织设计",createdAt:new Date().toISOString().slice(0,10),sourceMaterials:[...a.boundFilePaths]},g=function(a){let b=a.boundFilePaths.filter(a=>/工程量清单/u.test(a)&&a.toLowerCase().endsWith(".xls")).filter(a=>{let b=a.split("/").pop()||a;return!/封面|编制说明/u.test(b)});if(0===b.length)return{warning:`绑定资料中未识别到工程量清单 .xls 文件(${a.boundFilePaths.length} 份资料)`};let c=e.join(ba.homedir(),".customize-agent","projects",(0,f.computeProjectId)(e.resolve(a.projectRoot)),"kb.db");if(!x.existsSync(c))return{warning:`项目知识库索引不存在:${c}`};let d=[];for(let a of b)try{let b=function(a,b){let c=new((0,f.loadBetterSqlite3)())(a,{readonly:!0});try{return c.pragma("busy_timeout = 10000"),c.prepare("SELECT chunk_index, content, section_title FROM kb_chunks WHERE relative_path = ? ORDER BY chunk_index").all(b).map(a=>({chunkIndex:a.chunk_index,content:a.content,sectionTitle:a.section_title||""}))}finally{c.close()}}(c,a);if(0===b.length){d.push(`${a}(索引无切片)`);continue}let e=function(a){let b=a.sourceFile||"",c={totalChunks:a.chunks.length,markdownChunks:0,declarationChunks:0,skippedChunks:0,droppedIncompleteRows:0},d=[],e=[];for(let b of a.chunks){let a=b.sectionTitle,f=a.includes("表格路径声明");if(a.includes("附录")){c.skippedChunks++;continue}f?(e.push(b),c.declarationChunks++):"表格数据"===a||a.includes("表标题")||a.includes("第")||a.includes("工作表:")?(d.push(b),c.markdownChunks++):c.skippedChunks++}let f=new Map,g=a=>{let b=be.exec(a);if(!b)return;let c=b[1],d=f.get(c),e=bg.exec(a),g=bf.exec(a);d?(!d.villageGroup&&e&&(d.villageGroup=e[1].trim()),void 0===d.totalPages&&g&&(d.totalPages=Number(g[1]))):f.set(c,{villageGroup:e?e[1].trim():"",totalPages:g?Number(g[1]):void 0})};for(let a of d)g(a.sectionTitle),g(a.content.split("\n")[0]||"");let h=[],i="",j="",k="",l="plain",m=function(a){let b=[],c=!1;for(let d=0;d<a.length;d++){let e=a[d]??"";if(e.includes(".")){let e=d+1<a.length?a[d+1]??"":"",f=/^\d+$/u.test(e)&&e.length>=2;b.push(f?"unit-project":"subsection"),c=f}else/^\d+$/u.test(e)?b.push(c?"subsection":"section"):(b.push("section"),c=!1)}return b}(function(a){let b=[],c="";for(let d of a){let a=d.content.split("\n"),e=c;for(let d of(c="",a)){if(d.startsWith("|"))e.trim(),e=d;else{if(!e)continue;e+=d}if(!e.endsWith("|"))continue;let a=e.split("|").map(a=>a.trim());e="",/^[一二三四五六七八九十\d]+(?:\.\d+)?$/u.test(a[2]??"")&&!a[1]&&a[4]&&"分部小计"!==a[4]&&b.push(a[2]??"")}e.trim()&&(c=e)}return b}(d)),n=-1,o="";for(let a of d){let d=bi(a),e=d||o;d&&(o=d);let g=f.get(e),p=g?.villageGroup||e||"",q=a.content.split("\n"),r=i;i="";let s=function(a){if(bf.exec(a))return 1;bh.lastIndex=0;let b=bh.exec(a);return bh.lastIndex=0,b?Number(b[1]):void 0}(a.content);for(let d=0;d<q.length;d++){let e=q[d]||"";if(e.startsWith("|"))r.trim()&&c.droppedIncompleteRows++,r=e;else if(r)r+=e;else{let a=bh.exec(e);a&&(s=Number(a[1])),bh.lastIndex=0;continue}if(r.endsWith("|")){let c=r.split("|").map(a=>a.trim());r="";let d=c[1]??"",e=s,f=function(a){let b=a.join(" "),c=/第(\d+)页\s*共\d+页/u.exec(b);return c?Number(c[1]):void 0}(c);if(f&&(s=f),/^\d+$/u.test(d)&&bd.test(c[2]??"")){let f=Number((c[8]??"").trim()),g={seq:Number(d),code:c[2]??"",name:c[4]??"",description:c[5]??"",unit:c[6]??"",quantity:Number.isFinite(f)?f:0,section:j,subsection:k,sectionKind:l,villageGroup:p,page:e,sourceFile:b,chunkIndex:a.chunkIndex,sourceKind:"markdown"};g.seq>0&&h.push(g)}else if(/^[一二三四五六七八九十\d]+(?:\.\d+)?$/u.test(c[2]??"")&&!c[1]&&c[4]&&"分部小计"!==c[4]){let a=m[n+=1]??((c[2]??"").includes(".")?"subsection":"section");"unit-project"===a?(j=c[4],k="",l="unit-project"):"section"===a?(j=c[4],k="",l="plain"):k=c[4]}}}r.trim()&&(i=r)}i.trim()&&c.droppedIncompleteRows++;let p=[];for(let a of(o="",e)){let c=bi(a),d=c||o;c&&(o=c);let e=f.get(d),g=e?.villageGroup||d||"";p.push(...function(a,b){let c,d,e=[],f=a.split("\n"),g=()=>{c&&"number"==typeof c.seq&&c.seq>0&&e.push({seq:c.seq,code:c.code||"",name:c.name||"",description:(c.description||"").trim(),unit:c.unit||"",quantity:"number"==typeof c.quantity?c.quantity:0,section:"",subsection:"",villageGroup:b.villageGroup,sourceFile:b.sourceFile,chunkIndex:b.chunkIndex,sourceKind:"declaration"}),c=void 0,d=void 0},h=a=>{if(!c||!d)return;let b=a.trim();if(b){if("seq"===d){let a=Number(b);Number.isFinite(a)&&a>0&&(c.seq=a)}else if("code"===d)c.code=(c.code||"")+b;else if("name"===d)c.name=(c.name||"")+b;else if("description"===d)c.description=(c.description||"")+(c.description?" ":"")+b;else if("unit"===d)c.unit=b;else if("quantity"===d){let a=Number(b);Number.isFinite(a)&&(c.quantity=a)}}};for(let a of f){if(/^R\d+C\d+$/u.test(a)){/^R\d+C1$/u.test(a)?(g(),c={},d="seq"):d=void 0;continue}if(/^序号:$/u.test(a)){d="seq";continue}if(/^项目编码:$/u.test(a)){d="code";continue}if(/^项目名称:$/u.test(a)){d="name";continue}if(/^项目特征描述:$/u.test(a)){d="description";continue}if(/^单位:$/u.test(a)){d="unit";continue}if(/^工程量:$/u.test(a)){d="quantity";continue}if(/^(?:人工费|机械费|暂估价|合价|金额.*)$/u.test(a)){d=void 0;continue}h(a)}return g(),e}(a.content,{villageGroup:g,sourceFile:b,chunkIndex:a.chunkIndex}))}let q=new Map;for(let a of h)q.set(`${a.villageGroup}|${a.seq}`,a);for(let a of p){let b=`${a.villageGroup}|${a.seq}`;q.has(b)||q.set(b,a)}let r=[...q.values()].sort((a,b)=>a.villageGroup.localeCompare(b.villageGroup,"zh-CN")||a.seq-b.seq);var s=r,t=h;let u=bj(t);for(let a of s){let b;if("declaration"===a.sourceKind&&!a.section){for(let c of u.get(a.villageGroup)||[]){if(c.seq>a.seq)break;b=c}b&&(a.section=b.section,a.subsection=b.subsection,a.sectionKind=b.sectionKind)}}let v=[];for(let[a,b]of bj(r)){let c=b.map(a=>a.seq).sort((a,b)=>a-b),e=c[c.length-1]||0,g=[];for(let a=1;a<=e;a++)c.includes(a)||g.push(a);let h=function(a,b){for(let[c,d]of a)if(d.villageGroup===b)return{sheetId:c,...d}}(f,a),i=h?.totalPages,j=function(a,b,c){let d=new Set,e="";for(let f of a){let a=bi(f),g=a||e;if(a&&(e=a),!c||g===c){if(!c&&!(f.content.split("\n")[0]||"").includes(b))continue;for(let a of(bf.test(f.content)&&d.add(1),bh.lastIndex=0,f.content.matchAll(bh))){let b=Number(a[1]);d.add(b),b>1&&d.add(b-1)}bh.lastIndex=0}}return[...d]}(d,a,h?.sheetId),k=i?Array.from({length:i},(a,b)=>b+1).filter(a=>!j.includes(a)):[],l=b.filter(a=>"declaration"===a.sourceKind).length,m=b.filter(a=>!a.code).length,n=b.filter(a=>!a.name).length,o=b.filter(a=>a.code&&!bd.test(a.code)).length;v.push({villageGroup:a,sheetId:h?.sheetId||"",totalPagesDeclared:i,pagesCovered:j.sort((a,b)=>a-b),pagesMissing:k,entryCount:b.length,entrySeqMissing:g,entriesFromDeclaration:l,entriesWithoutCode:m,entriesWithoutName:n,entriesWithInvalidCode:o,complete:0===g.length&&b.length>0})}return v.sort((a,b)=>a.villageGroup.localeCompare(b.villageGroup,"zh-CN")),{entries:r,villages:v,totalEntries:r.length,sourceFile:b,complete:v.length>0&&v.every(a=>a.complete),diagnostics:c}}({chunks:b,sourceFile:a});if(e.totalEntries>0)return{boq:e};d.push(`${a}(解析出 0 条目)`)}catch(b){d.push(`${a}(${b instanceof Error?b.message:String(b)})`)}return{warning:`清单解析失败:${d.join(";")}`}}({projectRoot:a.projectRoot,boundFilePaths:a.boundFilePaths});g.warning&&c.warnings.push(g.warning);let h=g.boq;h&&(c.boq={sourceFile:h.sourceFile,totalEntries:h.totalEntries,complete:h.complete,villageCount:h.villages.length,pagesMissingTotal:h.villages.reduce((a,b)=>a+b.pagesMissing.length,0)},h.complete||c.warnings.push("清单解析完整性校验未通过(序号缺口/页码缺失),蓝图覆盖校验将兜底报告")),c.stage="阶段 A";let i=function(a){let{boq:b}=a,c=bn(b),d=function(a){let b=[];for(let c of bo)for(let d of a.entries){if(!c.namePattern.test(`${d.name} ${d.description}`))continue;let a=c.extract(d);if(a){b.push({key:c.key,value:a,source:`清单条目 ${d.seq}「${d.name}」特征原文`,amount:c.amount});break}}return b}(b),f=function(a,b){let c=/(\d+)\s*个(?:美丽宜居)?自然村/u.exec(a);if(c)return Number(c[1]);let d=/(\d+)\s*个(?:美丽宜居)?自然村/u.exec(b);return d?Number(d[1]):0}(a.projectName,a.basicFacts||"")||b.villages.length;f>0&&d.push({key:"自然村数量",value:`${f} 个自然村`,source:"招标文件项目名称(清单自然村分组兜底)"});let g=function(a){let b={},c=a.entries.filter(a=>"垫层"===a.name).map(a=>/C\d{2}/u.exec(a.description)?.[0]).filter(a=>!!a);if(c.length>0){let a=new Map;for(let b of c)a.set(b,(a.get(b)||0)+1);b.cushion=[...a.entries()].sort((a,b)=>b[1]-a[1]||(a[0]<b[0]?-1:1))[0][0]}return b}(b),h=function(a,b){let c=/(?<!节点)(?<!阶段)(?<!分项)(?<!关键)(?:计划工期|合同工期|工期总日历天数|工期控制|工期目标|总工期|工期)[^。;;\n]{0,12}?(\d{1,4})\s*个?\s*日历天/u.exec(a)||/(\d{1,4})\s*个?\s*日历天[^。;;\n]{0,8}?(?:总工期|倒排|分解|完成)/u.exec(a),d=c?Number(c[1]):0,e=/质量(?:标准|要求)[^。;;\n]{0,20}?[::]\s*([^。;;\n]{1,20})/u.exec(a)||/合格/u.exec(a),f=e?(e[1]||"合格").trim():"",g=/(合造价〔\d{4}〕\d+号)/u.exec(a),h=g?g[1]:"",i=/(?:合同估算价|招标控制价|最高投标限价|项目总投资|投资估算|工程概算)[^。;;\n]{0,20}?([\d,]+(?:\.\d+)?)\s*万/u.exec(a);return{totalDays:d,qualityStandard:f,pricingFile:h,estimatedAmount:i?Number(i[1].replace(/,/g,"")):0}}(a.basicFacts||"",0),i=function(a,b){let c=b>0?b:360,d=bs.map(b=>({...b,weight:a.entries.filter(a=>b.pattern.test(`${a.name} ${a.description}`)).reduce((a,b)=>a+b.quantity,0)})),e=Math.max(1,Math.round(.08*c)),f=c-e,g=d.slice(1),h=g.reduce((a,b)=>a+b.weight,0)||1,i=[{key:"prep",label:"施工准备与清杂拆除",duration:e,basis:`前导工作封顶 8% 总工期(清杂整治可与主体并行穿插,不按工程量权重独占)`}];for(let a of g){let b=Math.max(2,Math.round(a.weight/h*f*.95));i.push({key:a.key,label:a.label,duration:b,basis:`分部工程量权重 ${(a.weight/h*100).toFixed(1)}% \xd7 剩余工期 ${f} 天`})}let j=i.reduce((a,b)=>a+(b.duration||0),0);for(let a=i.length-1;a>=0&&j>c;a--){let b=j-c,d=Math.min(i[a]?.duration||0,b);i[a]&&d>0&&(i[a].duration=(i[a].duration||0)-d,j-=d)}return i}(b,h.totalDays),j=function(a,b,c=0,d=[]){let e=Math.max(30,Math.round(.85*(b>0?b:360))),f=new Map;for(let b of a.entries){if(b.quantity<=0)continue;let a=br(b),c=bq[a];if(!c||b.unit!==c.unit)continue;let d=bp.find(a=>a.pattern.test(`${b.name} ${b.description}`))?.trade;if(!d)continue;let e=`${a}|${d}`,g=f.get(e)||{trade:d,workdaysMin:0,workdaysMax:0,unit:c.unit,basisQty:0};g.workdaysMin+=b.quantity*c.min,g.workdaysMax+=b.quantity*c.max,g.basisQty+=b.quantity,f.set(e,g)}let g=new Map;for(let a of f.values()){let b=g.get(a.trade)||{min:0,max:0,unit:a.unit,qty:0};b.min+=a.workdaysMin,b.max+=a.workdaysMax,b.qty+=a.basisQty,g.set(a.trade,b)}let h=[...g.entries()].sort((a,b)=>b[1].max-a[1].max).map(([a,b])=>({trade:a,min:Math.max(1,Math.round(b.min/e*1.3)),max:Math.max(1,Math.round(b.max/e*1.6)),basis:`工种工程量约 ${Math.round(b.qty)}${b.unit} \xd7 经验工效区间 \xf7 有效工期 ${e} 天(定额工效知识不全,降级区间表达)`})),i=h.reduce((a,b)=>a+(b.min||0),0),j=h.reduce((a,b)=>a+(b.max||0),0),k={min:Math.max(10,Math.round(.75*i)),max:Math.max(10,Math.round(.9*j))},l=k,m=`各工种同期在场按 0.75~0.9 重叠系数折算(各工种人数区间之和 ${i}~${j} 人)`;if(c>0){let a=bt(c,e),b=Math.max(k.min,a.min),d=Math.min(k.max,a.max);b<=d?(l={min:b,max:d},m=`工程量推导区间 [${k.min}, ${k.max}] 与造价锚定区间 [${a.min}, ${a.max}] 的交集(${a.detail})`):(l={min:a.min,max:a.max},m=`工程量推导区间 [${k.min}, ${k.max}] 与造价锚定区间 [${a.min}, ${a.max}] 无交集,以造价锚定区间为准(${a.detail})`)}let n=Math.round((l.min+l.max)/2),o=[];for(let b of bs){let c=a.entries.filter(a=>{if(a.quantity<=0||!b.pattern.test(`${a.name} ${a.description}`))return!1;let c=bq[br(a)];return!!c&&a.unit===c.unit&&bp.some(b=>b.pattern.test(`${a.name} ${a.description}`))});if(0===c.length)continue;let f=c.reduce((a,b)=>a+b.quantity*(bq[br(b)]?.min||0),0),g=c.reduce((a,b)=>a+b.quantity*(bq[br(b)]?.max||0),0),h=d.find(a=>a.key===b.key)?.duration||Math.max(1,Math.round(e/bs.length)),i=Math.max(1,Math.round(f/h*1.3)),j=Math.max(i,Math.round(g/h*1.6));o.push({phase:b.label,min:i,max:j,basis:`阶段条目工程量约 ${Math.round(c.reduce((a,b)=>a+b.quantity,0))} \xd7 经验工效区间 \xf7 阶段 ${h} 天(不均匀系数 1.3~1.6)`})}return{peak:l,peakValue:n,peakBasis:m,byPhase:o,byTrade:h}}(b,h.totalDays,h.estimatedAmount||0,i),k=function(a){let b=[];for(let c of bu){let d=a.entries.filter(a=>c.pattern.test(`${a.name} ${a.description}`)&&a.unit===c.unit);if(0===d.length)continue;let e=d.reduce((a,b)=>a+b.quantity,0),f=Math.max(1,Math.min(4,Math.ceil(Math.log10(Math.max(10,e))-1))),g=Math.max(f,Math.min(8,f+2));b.push({name:c.name,spec:c.spec,min:f,max:g,basis:`${c.basis};相关条目工程量合计约 ${Math.round(e)}${d[0]?.unit||""}`})}return b}(b),l=function(a){let b=new Map;for(let c of a.entries){if(!c.name||c.quantity<=0)continue;let a=b.get(c.name);a?a.quantity+=c.quantity:b.set(c.name,{quantity:c.quantity,unit:c.unit})}return[...b.entries()].sort((a,b)=>b[1].quantity-a[1].quantity).slice(0,40).map(([a,b])=>({name:a,quantity:Math.round(1e3*b.quantity)/1e3,unit:b.unit,batchDesc:"按施工段分批进场",basis:"清单汇总 + 进度匹配"}))}(b),m=function(a){let b=[],c=a.entries.filter(a=>/塑料管|管道/u.test(a.name)&&"m"===a.unit).reduce((a,b)=>a+b.quantity,0);c>0&&b.push({scope:"污水管网管道",planDesc:`管道闭水试验分段检验,按每 200m 一段划分约 ${Math.max(1,Math.ceil(c/200))} 段(总长 ${Math.round(c)}m)`});let d=a.entries.filter(a=>/水泥混凝土|级配碎石|路床/u.test(a.name)&&"m2"===a.unit).reduce((a,b)=>a+b.quantity,0);d>0&&b.push({scope:"道路工程",planDesc:`路床压实度按每层每 200m\xb2 不少于 1 点检验,约 ${Math.max(1,Math.ceil(d/200))} 点(总面积 ${Math.round(d)}m\xb2)`});let e=a.entries.filter(a=>/检查井/u.test(a.name)).reduce((a,b)=>a+b.quantity,0);return e>0&&b.push({scope:"检查井",planDesc:`检查井逐座验收,共 ${Math.round(e)} 座`}),b}(b),n=function(a){let b=a.entries.filter(a=>/挖一般土方|挖沟槽土方|挖基坑土方|清淤/u.test(a.name)&&"m3"===a.unit).reduce((a,b)=>a+b.quantity,0),c=a.entries.filter(a=>/回填|路肩土|种植土/u.test(a.name)&&"m3"===a.unit).reduce((a,b)=>a+b.quantity,0),d=Math.max(0,Math.round((b-c)*1e3)/1e3);return{excavation:Math.round(1e3*b)/1e3,backfill:Math.round(1e3*c)/1e3,disposal:d,basis:"清单挖/填/弃量汇总(挖方含清淤),补疑口径:购土回填运距自行考虑"}}(b),o=function(a,b){let c=[{name:"挖掘机",kw:90},{name:"自卸汽车",kw:120},{name:"压路机",kw:75},{name:"蛙式打夯机",kw:3},{name:"混凝土搅拌运输车",kw:110},{name:"插入式振捣器",kw:1.5},{name:"洒水车",kw:90},{name:"高空作业车",kw:60}],d=a.filter(a=>!bv.has(a.name)).reduce((a,b)=>a+(c.find(a=>a.name===b.name)?.kw||0)*(b.min||1),0),e=d>0?`按电动机具负荷计算,用电负荷约 ${Math.round(.7*d)} kW(电动机具总功率约 ${Math.round(d)} kW,同时系数 0.7),临时用电以村庄既有电源分散接入为主,各施工组单独设置配电箱与计量表`:"临时用电以村庄既有电源分散接入为主,各施工组单独设置配电箱与计量表(柴油机械不计入用电负荷,电动机具零星分散)",f=Math.round(60*b.peakValue/1e3*10)/10;return{powerLoad:e,waterUsage:`生活用水按高峰人数 ${b.peakValue} 人、每人每日 60L 计算,高峰日生活用水量约 ${f} m\xb3;施工用水以洒水车供水为主,总用水量按管网分段配置`}}(k,j),p=(a.evidence||[]).map(a=>String(a.content||"")).join("\n"),q=function(a,b){let c=function(){let a=e.join(ba.homedir(),".customize-agent","template-references"),b=e.join(a,"files","standard-blocks");if(!x.existsSync(b))return[];let c=e.join(a,"standard-blocks.json"),d=[];if(x.existsSync(c))try{d=(JSON.parse(x.readFileSync(c,"utf8")).blocks||[]).map(a=>a.id)}catch{d=[]}return 0===d.length&&(d=x.readdirSync(b).filter(a=>a.endsWith(".md")).map(a=>a.replace(/\.md$/u,""))),d.flatMap(a=>{let c=e.join(b,`${a}.md`);if(!x.existsSync(c))return[];let d=x.readFileSync(c,"utf8"),f=(/^title:\s*(\S.*)$/mu.exec(d)||[])[1]?.trim()||a;return[{id:a,title:f,source:(/^source:\s*(\S.*)$/mu.exec(d)||[])[1]?.trim()||"",lines:d.split("\n").filter(Boolean)}]})}(),d=[],f=[];for(let e of c){let c=[],f=!1;for(let a of e.lines){if(a.startsWith("---")||/^(id|title|source|updatedAt|tags):/u.test(a)||a.startsWith("# "))continue;if(a.startsWith("## ")){f=!0;continue}if(f)continue;let b=a.trim();if(!/^[-*\d]+[.、]?\s+/u.test(b))continue;let d=b.replace(/^[-*\d]+[.、]?\s+/u,"").trim();d&&c.push(d)}if("hazardous-works-37"===e.id){let c=function(a,b){let c,d=[],e=[...b.matchAll(/(?:开挖深度|挖深|基坑深度|沟槽深度)[^。;;\n]{0,30}?(\d+(?:\.\d+)?)\s*m/gu)].map(a=>Number(a[1])),f=a.entries.some(a=>/挖一般土方|挖沟槽|挖基坑/u.test(a.name)),g=!1;if(f){d.push("基坑(槽)土方开挖、降水——判定阈值:开挖深度超过3m(含3m)属危大工程,超过5m(含5m)属超过一定规模(须专家论证)");let a=e.length>0?Math.max(...e):void 0;void 0===a?(c="本项目含沟槽/基坑土方开挖,但资料(清单特征「挖土深度:详见设计图纸」)未给出具体开挖深度,危大等级判定待人工确认(不静默判定)",g=!0):c=a<3?`资料确认最大开挖深度 ${a}m < 3m,未达危大工程阈值,按一般土方工程管控`:a<5?`资料确认最大开挖深度 ${a}m,达到 3m(含)未达 5m,属危大工程,需编制专项施工方案(施工单位技术负责人审核签字、总监理工程师审查签字)`:`资料确认最大开挖深度 ${a}m ≥ 5m,属超过一定规模的危大工程,专项方案须专家论证(不少于5名符合专业要求的专家)`}else c="本项目清单未含基坑(槽)土方开挖条目,基坑工程危大判定不涉及";return d.push("专家论证程序:超过一定规模的危大工程专项方案组织不少于5名符合专业要求的专家论证;修改后的方案由施工单位技术负责人审核签字、加盖单位公章,并由总监理工程师审查签字、加盖执业印章后方可实施"),{items:d,conclusion:c,gap:g}}(a,b);d.push({id:"hazardous_works",title:"危大工程判定",source:e.source,items:[...c.items,`本项目判定结论:${c.conclusion}`],gap:c.gap})}else d.push({id:e.id,title:e.title,source:e.source,items:c.slice(0,30)})}for(let a of["organization","construction_prep","survey_plan","product_protection","emergency_plans","seasonal_measures","fire_control","tech_management","smart_site","handover_warranty","quality_innovation"])f.push(a),d.push({id:a,title:a,source:"(缺口:参考文档资产未建设)",items:[],gap:!0});return{blocks:d,gaps:f}}(b,p),r=function(a){let b=a.villages.map(a=>a.villageGroup).map(a=>({name:a,basis:"清单按自然村分组(工程名称)"})),c=b.length>1?`多村平行施工 + 村内流水作业(${b.length} 个自然村分组)`:"村内流水作业",d=[...new Set(a.entries.map(a=>a.section).filter(Boolean))];return{sections:b,sequence:d.length>0?d.join(" → "):"清杂拆除 → 管网道路 → 景观绿化 → 亮化收尾",sequenceBasis:"清单分部分项编排顺序归纳(管网先行、绿化收尾)",flow:c}}(b),s=function(a){let b=[],c=a.villages.length;return c>=2&&b.push({name:`${c} 个自然村分散施工组织协调`,measure:"按自然村分组划分施工段,多村平行施工 + 村内流水作业,配置专职协调员",basis:`清单按 ${c} 个自然村分组`}),a.entries.some(a=>/挖沟槽|沟槽开挖|塑料管铺设/u.test(`${a.name} ${a.description}`))&&b.push({name:"雨季管网沟槽施工",measure:"雨季排水与边坡防护,分段开挖、快速回填(联动季节施工措施板块)",basis:"清单含沟槽开挖与管道铺设条目"}),a.entries.some(a=>/道路|路床|路面/u.test(a.name))&&c>0&&b.push({name:"村庄内道路施工交通疏导",measure:"分段封闭施工,设置临时道路保障居民出行(补疑条款:居民出行临时道路)",basis:"清单含道路工程条目且村内施工"}),[...a.entries.map(a=>a.description)].some(a=>/杆线|管线保护|既有管线/u.test(a))&&b.push({name:"既有杆管线保护",measure:"开挖前探测交底,杆线保护措施费含在清单单价内",basis:"清单特征原文含杆线保护条款"}),0===b.length&&b.push({name:"多工序交叉施工组织",measure:"按清单分部分项编排顺序组织流水作业,加强工序衔接检查",basis:"清单分部分项结构"}),b}(b),t=function(a){let b=bz({facts:a.facts||[],evidence:a.evidence||[]}),c=[];a.contract&&a.contract.totalDays>0&&c.push({id:"contract_days",label:"总工期",values:[`${a.contract.totalDays} 日历天`]}),a.labor&&a.labor.peakValue>0&&c.push({id:"labor_peak",label:"劳动力峰值",values:[`${a.labor.peakValue} 人`]});let d=a.villageCount||0;if(d>0&&c.push({id:"village_count",label:"自然村数量",values:[`${d} 个自然村`]}),a.boq){let b=function(a){let b=new Map;for(let c of a.entries){if(!c.name||c.quantity<=0||/暂列|金额|计日工|税|费/u.test(c.name))continue;let a=c.section||"未分部条目",d=b.get(a)||[];d.push(c),b.set(a,d)}return[...b.entries()].sort((a,b)=>b[1].length-a[1].length).slice(0,3).map(([a,b])=>{let c=[...b].sort((a,b)=>b.quantity-a.quantity||(a.name<b.name?-1:1))[0];return`${c.name} ${c.quantity}${c.unit}(${a})`})}(a.boq);b.length>0&&c.push({id:"core_quantities",label:"核心工程量",values:b})}return{entries:[...b,...c]}}({facts:a.facts,evidence:a.evidence,contract:h,labor:j,boq:b,villageCount:f}),u=[...new Set(b.entries.map(a=>a.section).filter(Boolean))];return{data:{project:{name:a.projectName||"(待提取:项目名称)",scope:b.villages.length>0?`${b.villages.length} 个自然村分组(${b.villages.map(a=>a.villageGroup).join("、")})`:"",works:u,location:function(a){if(!a)return"";let b=/建设地点[:: \t|]*([^。;;\n|]{2,40}?)(?=[,,。;;\n|]|工期|质量标准|合同估算)/u.exec(a);return b?b[1].trim().replace(/[,,、\s]+$/gu,""):""}(a.basicFacts||"")},contract:{totalDays:h.totalDays,qualityStandard:h.qualityStandard,pricingFile:h.pricingFile,estimatedAmount:h.estimatedAmount||void 0},climate:{rainySeason:"6-8月",highTemp:"7-8月",winter:"12-2月"},milestones:i,resources:{labor:j,equipment:k},materialsPlan:l,fundPlan:{wageRule:"工资性工程款按合造价〔2022〕8号执行",usagePlan:"按进度分阶段使用"},testPlan:[],earthworkBalance:n,tempUtilities:o,redLineFacts:d,amountRule:"商务禁区延续:金额类数据禁入正文(合同估算价例外),fund_plan/red_line_facts 渲染时遵守",decisionLock:t,quantities:c,specAuthorities:g,inspectionBatches:m,standardBlocks:q.blocks,constructionDeployment:r,keyDifficulties:s,basisRegulations:function(a){if(!a)return[];let b=[],c=new Set;for(let d of a.matchAll(/《([^《》]{2,40}(?:法|条例|办法|规程|规范|标准))》(?:[((][^))]{0,24}?(?:国令|令|主席令|〔\d{4}〕)[^))]{0,24}?[))])?/gu)){let a=d[1].replace(/[\s#]/gu,"").trim();if(/通知|意见|公示|公告/u.test(a)||a.length<4||a.length>20)continue;let e=(d[0].match(/[((]([^))]{0,24}?(?:国令|令|主席令|〔\d{4}〕)[^))]{0,24}?)[))]/u)||[])[1],f=e?`《${a}》(${e.trim()})`:`《${a}》`;if(!c.has(f)&&(c.add(f),b.push(f),b.length>=14))break}return b}(`${a.basicFacts||""}
99
- ${p}`),drawingNote:"总平面布置图/横道图/组织机构图为后期人工配图,蓝图只规划对应章节正文内容"},diagnostics:{standardBlocksLoaded:q.blocks.filter(a=>!a.gap).length,standardBlockGaps:q.gaps}}}({boq:h||{entries:[],villages:[],totalEntries:0,sourceFile:"",complete:!1,diagnostics:{totalChunks:0,markdownChunks:0,declarationChunks:0,skippedChunks:0,droppedIncompleteRows:0}},basicFacts:a.basicFacts,evidence:a.evidence,facts:a.facts,projectName:d.projectCode||""});c.standardBlocksLoaded=i.diagnostics.standardBlocksLoaded,c.standardBlockGaps=i.diagnostics.standardBlockGaps,c.stage="阶段 B/C";let j=function(a){let{chapterTitles:b,boq:c}=a;return{chapters:b.map((b,d)=>{var e;let f=String(d+1),g=bA.filter(a=>a.chapterPattern.test(b)).map(a=>`${a.item}(评审权重 ${a.weight})`),h=/主要分部分项|施工方案|施工方法/u.test(b)?function(a,b){let c=new Map;for(let b of a.entries){let a=b.section||"未分部条目",d=c.get(a)||[];d.push(b),c.set(a,d)}let d=[],e=0;for(let[a,f]of c){let c=bB(a,f),g=f.some(a=>"unit-project"===a.sectionKind),h=[];if(g){let a=new Map;for(let b of f){let d=b.subsection||c,e=a.get(d)||[];e.push(b),a.set(d,e)}for(let[b,c]of a)h.push(bD(bB(b,c),c))}else h.push(bD(c,f));e+=1,d.push({id:`${b}.${e}`,title:c,targetWords:2400,requiredParams:h.flatMap(a=>Object.keys(a.quantities).slice(0,5).map(a=>({path:`data.quantities.${a}`,mode:"must_cite",strict:!0}))),scoredItems:["评标分项:主要施工方法(1.5)"],tablePlans:["主要工程量一览表"],workPackages:h})}return d}(c,f):[];return{id:f,title:b,isActive:(e=a.docType,!(/专项施工方案|专项方案|危大/u.test(e)&&/总平面|平面布置|施工部署|总体部署/u.test(b))),requiredParams:[],scoredItems:g,subSections:h}})}}({chapterTitles:a.chapterTitles,boq:h||{entries:[],villages:[],totalEntries:0,sourceFile:"",complete:!1,diagnostics:{totalChunks:0,markdownChunks:0,declarationChunks:0,skippedChunks:0,droppedIncompleteRows:0}},docType:d.docType});c.stage="阶段 D";let k={meta:d,data:i.data,outline:j,validation:{passed:!1,checks:[]},diagnostics:c};return k.validation=function(a,b){let c=[],d=(0,y.Jx)(a,bm);c.push({name:"1. Schema 校验",passed:0===d.length,message:0===d.length?"结构/类型/必填/边界全部通过":d.join(";")});let e=function(a,b){let c=[];if(b){let d=bn(b);for(let[b,e]of Object.entries(a.data.quantities)){let a=d[b];if(!a){c.push(`quantities.${b} 不在清单解析产物值集中(疑似编造)`);continue}Math.abs(a.value-e.value)>.011&&c.push(`quantities.${b} 数值 ${e.value} 与清单聚合值 ${a.value} 不一致`)}}for(let b of a.data.redLineFacts)b.value&&b.source||c.push(`红线事实「${b.key}」缺值或缺来源`);if(b)for(let d of a.data.resources?.equipment||[]){let a=bu.find(a=>a.name===d.name);if(!a)continue;let e=b.entries.filter(b=>a.pattern.test(`${b.name} ${b.description}`)&&b.unit===a.unit).reduce((a,b)=>a+b.quantity,0),f=/合计约\s*([\d.]+)/u.exec(d.basis);f&&Math.abs(Number(f[1])-Math.round(e))>1&&c.push(`机械「${d.name}」basis 工程量 ${f[1]} 与清单同单位聚合 ${Math.round(e)} 不一致`)}return c}(a,b);c.push({name:"2. 事实锚定校验",passed:0===e.length,message:0===e.length?"L1a 值全部 ∈ 清单解析产物值集,红线事实逐条有源":e.join(";")});let f=function(a,b){let c=[],d=a.outline.chapters.flatMap(a=>a.subSections).flatMap(a=>a.workPackages);if(b){let a=new Set;for(let b of d)for(let c of b.coveredSeqs)a.add(c);let e=b.entries.filter(b=>!a.has(b.seq));e.length>0&&c.push(`清单条目零丢失校验失败:${e.length} 条未被工作包覆盖(如序号 ${e.slice(0,5).map(a=>a.seq).join("、")})`)}let e=new Set;for(let b of a.outline.chapters)for(let a of b.scoredItems)e.add(a.split("(")[0]||"");let f=bA.filter(a=>![...e].some(b=>b.includes(a.item))).map(a=>a.item);return f.length>0&&c.push(`十项评审承接缺失:${f.join("、")} 无章/节显性承接声明`),0===a.data.keyDifficulties.length&&c.push("重难点及保证措施未逐项列明(十项评审⑩硬要求)"),c}(a,b);c.push({name:"3. 覆盖校验",passed:0===f.length,message:0===f.length?"清单条目零丢失、十项评审全承接、重难点逐项列明":f.join(";")});let g=function(a){let b=[],c=a.data.contract?.totalDays||0,d=(a.data.milestones||[]).reduce((a,b)=>a+(b.duration||0),0);c>0&&d>c&&b.push(`里程碑总和 ${d} 天超过总工期 ${c} 天`);let{labor:e}=a.data.resources||{};if(e){for(let a of(e.peak&&e.peak.min>e.peak.max&&b.push(`劳动力峰值区间异常(min ${e.peak.min} > max ${e.peak.max})`),e.peakValue>0&&e.peak&&(e.peakValue<e.peak.min||e.peakValue>e.peak.max)&&b.push(`劳动力峰值唯一口径 ${e.peakValue} 人超出推导区间 ${e.peak.min}~${e.peak.max} 人`),e.byTrade||[]))(a.min||0)>(a.max||0)&&b.push(`工种「${a.trade}」人数区间异常`);let d=a.data.contract?.estimatedAmount||0;if(d>0&&e.peakValue>0&&c>0){let a=bt(d,Math.max(30,Math.round(.85*c))),f=Math.round(.6*a.min),g=Math.round(1.3*a.max);(e.peakValue<f||e.peakValue>g)&&b.push(`劳动力峰值 ${e.peakValue} 人超出造价锚定量级窗口 [${f}, ${g}] 人(合同估算价 ${d} 万元锚定)`)}}let f=new Set((a.data.decisionLock?.entries??[]).map(a=>a.id));for(let c of(a.data.contract?.totalDays>0&&!f.has("contract_days")&&b.push(`决策锁缺失数据条目 contract_days(总工期 ${a.data.contract.totalDays} 日历天未入锁)`),e&&e.peakValue>0&&!f.has("labor_peak")&&b.push(`决策锁缺失数据条目 labor_peak(劳动力峰值 ${e.peakValue} 人未入锁)`),a.data.redLineFacts?.some(a=>"自然村数量"===a.key)&&!f.has("village_count")&&b.push("决策锁缺失数据条目 village_count(自然村数量红线事实未入锁)"),a.data.resources?.equipment||[]))(c.min||0)>(c.max||0)&&b.push(`机械「${c.name}」台数区间异常`);let g=(a.data.standardBlocks||[]).find(a=>"six-hundred-percent"===a.id);return g&&!g.gap&&6!==g.items.length&&b.push(`扬尘治理六个百分百板块条目数 ${g.items.length} 条(应为恰六条)`),b}(a);return c.push({name:"4. 内部一致性校验",passed:0===g.length,message:0===g.length?"里程碑/劳动力/机械区间自洽":g.join(";")}),{passed:c.every(a=>a.passed),checks:c}}(k,h),k.validation.passed||c.warnings.push(`蓝图校验未通过:${k.validation.checks.filter(a=>!a.passed).map(a=>a.name).join("、")}(一期旁路仅报告,不阻断生成)`),c.durationMs=Date.now()-b,k}({projectRoot:C,boundFilePaths:ae,chapterTitles:cf.map(a=>a.title),templateName:E.name,basicFacts:function(a){let b=Object.values(a.byKey||{}).filter(a=>!!(a&&a.label&&a.value)).sort((a,b)=>(b.priority||0)-(a.priority||0));return 0===b.length?"":b.slice(0,60).map(a=>{let b=String(a.value),c=bR.exec(b),d=c?b.slice(0,c.index).trim():b;return`- ${a.label}:${d}`}).join("\n")}(b4),evidence:bQ,facts:[...bW.localFacts,...bW.projectBasicFacts,...bW.preciseFacts],signal:a.signal,diagnostics:cQ});let c=function(a,b){let c=e.join((0,bl.Gl)(a),"assets","blueprint.json");return x.writeFileSync(c,JSON.stringify(b,null,2),"utf8"),c}(C,b),d=b.outline.chapters.reduce((a,b)=>a+b.subSections.reduce((a,b)=>a+b.workPackages.length,0),0);(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"integrated-blueprint",status:b.validation.passed?"success":"failed",message:b.validation.passed?`一体化蓝图已构建并落盘:清单 ${b.diagnostics.boq?.totalEntries??0} 条目、标准板块 ${b.diagnostics.standardBlocksLoaded} 个、工作包 ${d} 个(校验通过,参数桶与章切片接管各章写作)`:`一体化蓝图已构建但校验未通过(参数桶不注入,不阻断生成):${b.validation.checks.filter(a=>!a.passed).map(a=>a.name).join("、")}`,details:[`耗时 ${Date.now()-c9}ms`,`落盘:${c}`,`清单解析:${b.diagnostics.boq?`${b.diagnostics.boq.totalEntries} 条目 / ${b.diagnostics.boq.villageCount} 村 / 完整性校验${b.diagnostics.boq.complete?"通过":"未通过"}`:"未解析(见警告)"}`,`标准板块缺口:${b.diagnostics.standardBlockGaps.length>0?b.diagnostics.standardBlockGaps.join("、"):"无"}`,`四道校验:${b.validation.checks.map(a=>`${a.name}${a.passed?"✓":"✗"}`).join(" / ")}`,...b.diagnostics.warnings.slice(0,6).map(a=>`警告:${a}`)]},{subtitle:"一体化蓝图"})),J()}catch(a){b=void 0,(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"integrated-blueprint",status:"failed",message:`一体化蓝图构建异常(参数桶不注入,不阻断生成):${a instanceof Error?a.message:String(a)}`,details:[`耗时 ${Date.now()-c9}ms`,"蓝图异常时参数桶与章切片不注入,各章按证据独立成稿"]},{subtitle:"一体化蓝图"})),J()}if(b){let a=function(a,b){let c=[];return{chapters:a.map(a=>{if(!/主要分部分项|施工方案|施工方法/u.test(a.title))return a;let d=b.chapters.find(b=>b.title===a.title||a.title.includes(b.title)||b.title.includes(a.title));if(!d)return a;let e=function(a,b){let c=a.sections.map(a=>a.trim()).filter(Boolean);if(0===c.length||0===b.subSections.length)return{sections:c};let d=b.subSections.map(a=>a.title),e=new Set(b.subSections.flatMap(a=>a.workPackages.map(a=>a.name))),f=new Set(b.subSections.flatMap(a=>a.workPackages.flatMap(a=>[...Object.keys(a.quantities),...a.processChain]))),g=a=>bH.test(a)||!!(d.find(b=>a===b||a.length>=2&&(a.includes(b)||b.includes(a)))||[...e].find(b=>a===b||a.length>=2&&(a.includes(b)||b.includes(a)))||[...f].find(b=>a===b));if(c.filter(g).length<2)return{sections:c};let h=[...new Set([...c.filter(a=>!g(a)).filter(a=>!d.some(b=>b.includes(a)||a.includes(b))),...d])],i=c.filter(a=>g(a)&&!d.includes(a));return{sections:h,report:{chapterTitle:a.title,removed:i,replacedWithBlueprint:!0,finalSections:h}}}(a,d);return e.report&&c.push(e.report),{...a,sections:e.sections}}),reports:c}}(cf.map(a=>({title:a.title,sections:a.sections||[]})),b.outline);if(a.reports.length>0){let b=new Map(a.chapters.map(a=>[a.title,a.sections]));cf=cf.map(a=>{let c=b.get(a.title);return c&&JSON.stringify(c)!==JSON.stringify(a.sections||[])?{...a,sections:c}:a}),E={...E,chapters:cf},(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"blueprint-section-alignment",status:"success",message:`清单分部结构校准:${a.reports.length} 个施工方法类章节小节已按蓝图权威分部结构对齐`,details:a.reports.flatMap(a=>[`${a.chapterTitle}:最终小节 ${a.finalSections.join("、")}`,...a.removed.length>0?[`${a.chapterTitle} 子分部/未规范名降级:${a.removed.join("、")}(正文在分部小节内按工作包展开)`]:[]])},{subtitle:"清单分部结构校准",order:T.length})),J()}}let da=!!b?.validation.passed,db=b?.validation.passed?function(a){let b=["【一体化蓝图参数桶——全项目口径唯一权威源,正文引用必须与此一致,不得自行推导不同数值】"];b.push("计划类数值(劳动力人数/工期/工程量/养护期)必须且只能引用以下锚点值:禁止将各工种人数相加推导峰值、禁止按定额自行估算、禁止改写锚点数值。"),b.push(`- 项目:${a.project.name}(${a.project.scope})`),a.contract.totalDays>0&&b.push(`- 总工期:${a.contract.totalDays} 日历天`),a.contract.qualityStandard&&b.push(`- 质量标准:${a.contract.qualityStandard}`),a.contract.pricingFile&&b.push(`- 计价依据:${a.contract.pricingFile}`),a.milestones.length>0&&b.push(`- 里程碑:${a.milestones.map(a=>`${a.label}${a.duration?` ${a.duration} 天`:""}`).join("、")}(总和 ≤ 总工期)`),a.resources.labor.peakValue>0&&b.push(`- 劳动力峰值:${a.resources.labor.peakValue} 人(造价锚定口径唯一峰值,各章必须引用该值,不得自设其他峰值)`),a.resources.labor.byPhase.length>0&&b.push(`- 分阶段劳动力投入(各阶段同时在场人数,分阶段计划表数据源):${a.resources.labor.byPhase.map(a=>`${a.phase} ${Math.round(((a.min??0)+(a.max??a.min??0))/2)} 人`).join("、")}`),a.resources.labor.byTrade.length>0&&b.push(`- 工种配置(高峰同时在场人数,与劳动力峰值同口径):${a.resources.labor.byTrade.map(a=>`${a.trade} ${Math.round(((a.min??1)+(a.max??a.min??1))/2)} 人`).join("、")}`),a.resources.equipment.length>0&&b.push(`- 主要机械:${a.resources.equipment.map(a=>`${a.name}${a.spec?`(${a.spec})`:""} ${a.quantity&&a.quantity>0?a.quantity:Math.round(((a.min??1)+(a.max??a.min??1))/2)} 台`).join("、")}`),a.materialsPlan.length>0&&b.push(`- 物资计划(清单汇总):${a.materialsPlan.slice(0,12).map(a=>`${a.name} ${a.quantity??""}${a.unit}`).join("、")}${a.materialsPlan.length>12?" 等":""}`),a.inspectionBatches.length>0&&b.push(`- 检验批划分:${a.inspectionBatches.map(a=>`${a.scope}——${a.planDesc}`).join(";")}`),void 0!==a.earthworkBalance.excavation&&b.push(`- 土方平衡:挖方 ${a.earthworkBalance.excavation}m\xb3、填方 ${a.earthworkBalance.backfill}m\xb3${a.earthworkBalance.disposal?`、弃方 ${a.earthworkBalance.disposal}m\xb3`:""}(清单汇总口径)`),b.push(`- 临时用电:${a.tempUtilities.powerLoad}`),b.push(`- 临时用水:${a.tempUtilities.waterUsage}`);let c=a.redLineFacts.filter(a=>!a.amount);c.length>0&&b.push(`- 评审红线事实(must_cite,正文必须逐条出现且数值一致):${c.map(a=>`${a.key}=${a.value}`).join(";")}`);let d=a.redLineFacts.filter(a=>a.amount);return d.length>0&&b.push(`- 金额类红线事实(商务禁区,不进正文):${d.map(a=>`${a.key}=${a.value}`).join(";")}`),a.decisionLock.entries.length>0&&b.push(`- 关键决策锁:${a.decisionLock.entries.map(a=>`${a.label}:${a.values.join("、")}`).join(";")}`),a.constructionDeployment.sections.length>0&&b.push(`- 施工部署:${a.constructionDeployment.flow};施工顺序 ${a.constructionDeployment.sequence}`),a.keyDifficulties.length>0&&b.push(`- 重难点(逐项列明):${a.keyDifficulties.map(a=>`${a.name}——${a.measure}`).join(";")}`),b.push(`- 金额禁区:${a.amountRule}`),b.push(a.drawingNote),b.join("\n")}(b.data):"";cQ.metrics.push({name:"phase:plan",startedAt:cR,endedAt:Date.now(),durationMs:Date.now()-cR});let dc=Date.now();for(let c=0;c<cf.length;c+=cX){let d=cf.slice(c,c+cX);for(let e of(await Promise.all(d.map(async(d,e)=>{let f,g=c+e;if((0,A.Te)(a.signal),!da&&/劳动力|资源配置|资源|进度计划|进度|工期/u.test(d.title))throw T.push((0,aL.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,o.GQ)(d.title)} 依赖一体化蓝图参数桶权威(劳动力/资源/进度类数值),蓝图校验未通过,已按节点级把关阻断生成`,details:["蓝图四道校验未全部通过或构建异常时,数值密集型章禁止无权威成稿","请检查清单解析与蓝图构建诊断后重试"],progress:{current:g+1,total:cf.length,label:"章节阻断"}},{subtitle:(0,o.GQ)(d.title),order:g})),J(),Error(`${(0,o.GQ)(d.title)} 依赖一体化蓝图参数桶权威,蓝图校验未通过,已按节点级把关阻断生成`);let h=Date.now(),i=T.length;try{let c,e;T.push((0,aL.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:U.writerPrompts[0]?.id,status:"running",message:`${(0,o.GQ)(d.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${g+1}/${cf.length}`,`二级小节:${d.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:g+1,total:cf.length,label:"章节生成"}},{subtitle:(0,o.GQ)(d.title),order:g})),J();let j=a.resumeChapters?.find(a=>a.id===d.id||a.title===d.title),k=j?.content?.trim(),l=j?.evidence?.length?[...j.evidence]:[],m=ah.chapterPlans.find(a=>a.chapterId===d.id||a.chapterTitle===d.title),t=m?Object.values(m.evidenceQueries).flat().filter(Boolean):[],x=d.queries.length>0?d.queries:[E.name,E.outputTitle,d.title],B=ce.get(d.id);if(b3&&B&&B.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[...B.graphFiles].map(a=>b(a)||a).filter(a=>(0,aM.Tz)(C,a,a$))){let b=bI(a);if(b?.chunks?.length)for(let c of b.chunks)l.push({chapterId:d.id,filePath:b.file?.relativePath||a,score:5+(B.graphWorks.length+B.graphMethods.length)*.5,content:c.content,roleId:aW.get(a),processingType:aX.get(a),sectionTitle:c.sectionTitle,source:"graph-evidence"})}}let D=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title),G=d7(d,[...x,...t],[]),I=Date.now();T[i]=(0,aL.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:U.writerPrompts[0]?.id,status:"running",message:`${(0,o.GQ)(d.title)} 正在执行质量优先的章节检索${B?.graphFiles.size?`(图谱匹配 ${B.graphFiles.size} 个文件)`:""}`,details:G.map(a=>`检索:${a.slice(0,42)}`),progress:{current:g+1,total:cf.length,label:"证据检索"}},{subtitle:(0,o.GQ)(d.title),order:g}),J();let K=k?[]:[...a$].filter(Boolean).sort(),L=k?[]:b$?.evidenceByChapterId?.[d.id]||[];L.length>0&&l.push(...L);let M=[],N=(d.requiredFacts||[]).filter(a=>!!a&&!G.some(b=>b.includes(a)||a.includes(b))).map(a=>`${d.title} ${a}`),O=[...G,...N];if(K.length>0&&O.length>0){(0,A.Te)(a.signal);let b=await (0,A.l$)(O,async a=>bJ(a,K,Math.min(a0,12),d.title),{kind:"search"});M.push(...b)}for(let a of(cQ.evidence.searchQueries+=O.length,cQ.evidence.searchMs+=Date.now()-I,T[i]=(0,aL.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,o.GQ)(d.title)} KB 检索完成:${O.length} 组查询,准备深度召回与语义排序`,progress:{current:g+1,total:cf.length,label:"证据检索"}},{subtitle:(0,o.GQ)(d.title),order:g}),J(),M))l.push(...a.filter(a=>(0,aM.Tz)(C,a.filePath,aV)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:aW.get(a.filePath),processingType:aX.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));D&&K.length>0&&c8.length>0&&l.push(...c8.filter(a=>(0,aM.Tz)(C,a.filePath,aV)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:aW.get(a.filePath),processingType:aX.get(a.filePath),sectionTitle:a.sectionTitle,source:"basic-fact-cache"})));let Q=k?[]:await (0,aO.$b)({manager:F,projectRoot:C,chapter:d,plan:m,profile:ag,scopedFilePaths:K,limitPerQuery:Math.min(a0,10),signal:a.signal}).catch(()=>[]);l.push(...Q);let R=new Set((d.pinnedEvidenceFilePaths||[]).filter(Boolean)),S=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)&&l.push(...bU.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"})));let V=bQ.filter(a=>/招标|投标须知|评标办法|专用合同条款|投标人须知/u.test(`${a.filePath||""}${a.sectionTitle||""}`));for(let a of(/概况|工程|项目|总体|部署/u.test(d.title)&&V.length>0&&l.push(...V.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"}))),new Set([...R]))){if(!(0,aM.Tz)(C,a,aV))continue;let b=R.has(a),c=bI(a);c&&l.push(...c.chunks.map(a=>({chapterId:d.id,filePath:c.file.relativePath,score:1,content:a.content,roleId:aW.get(c.file.relativePath),processingType:aX.get(c.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let W=l.filter(a=>(0,aM.Tz)(C,a.filePath,a$));if(!k&&aD.enabled&&aD.allowProjectFacts){let b=await a1({config:aD,chapterId:d.id,chapterTitle:d.title,sectionTitles:d.sections||[],runtimeRules:aE,localFacts:[...b1.project,...b1.schedule,...b1.quality,...b1.safety,...b1.resources,...b1.preciseFacts],signal:a.signal});a7.queries.push(...b.queries),a7.filteredCount+=b.filtered+b.evidence.length}let X=k?[]:(0,aO.SK)({project:aY,chapter:d,plan:m,profile:ag,scopedFilePaths:K,highRisk:a4.highRisk});X.length>0&&W.push(...X),W=(0,a2.Su)(W,a_),bV.size>0&&(W=W.filter(a=>!bV.has((0,w.hM)(a))));let Y=(()=>{let a=Number(process.env.DOCUMENT_SEMANTIC_TOP_CANDIDATES);return Number.isFinite(a)&&a>0?Math.floor(a):3e3})(),Z=function(a,b,c){if(c<=0||b.length<=c)return b;let d=b.map(b=>({item:b,lexical:(0,n.A1)(b,a.requiredFacts)*d3(a,b.processingType)+d4(a,b)}));return d.sort((a,b)=>b.lexical-a.lexical),d.slice(0,c).map(a=>a.item)}(d,W,Y),$=await (0,v.Mv)([(0,u.Yx)(d)],Z.map(d5)),_=d6(d,W,{preservePinned:!0,semantic:{similarity:$,queryText:(0,u.Yx)(d)}},cQ);_=dn(_,b4.scopeConflicts),(0,a2.U2)(_,a_,`chapter:${d.id}:initial`);let aa=d.requiredFacts.filter(a=>!_.some(b=>(0,p.Lk)(b,a))),ab=0,ac=B?[B.graphWorks.length?`图谱识别本章工程内容:${B.graphWorks.join("、")}`:"",B.graphMethods.length?`图谱识别本章施工方法:${B.graphMethods.join("、")}`:"",B.graphBoqItems.length?`图谱识别本章BOQ清单项(${B.graphBoqItems.length}项):${B.graphBoqItems.map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",B.gaps.length?`图谱识别本章资料缺口:${B.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",ad=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}(b4.scopeConflicts),af=cE.length>0?(()=>{let a=al(d.title),b=cE.filter(b=>b.chapterTitle===a);return 0===b.length?"":["【本章必须显性响应的招标要求(逐条写入正文,零响应即评标失分)】",...b.map(a=>`- ${a.kind}:${a.item.text}`)].join("\n")})():"",ai=/扬尘|文明施工|环境保护|绿色施工|安全文明|环保/u.test(`${d.title}${d.purpose||""}`)?"【扬尘治理六个百分百——规范固定条目,必须逐项落实并写入正文,每项一句具体措施,六项不得缺项;若本项目无拆迁工程,对“拆迁工地100%湿法作业”必须显性写明“本项目无拆迁工程,不涉及拆迁工地湿法作业”,不得省略】\n- 施工工地周边100%围挡\n- 物料堆放100%覆盖\n- 出入车辆100%冲洗\n- 施工现场地面100%硬化\n- 拆迁工地100%湿法作业\n- 渣土车辆100%密闭运输":"",aj=(d.sections||[]).filter(a=>!/^(?:施工概况|施工流程|施工方法)$/u.test(a.trim())&&!/^附录/u.test(a.trim())),ak=aj.length>0?`【必须输出以下规划小节为三级标题(### 小节名),逐个小节展开正式正文:每小节正文不少于 100 字,不得只写标题、不得空小节、不得用表格替代正文;小节名与章标题相同或相近也必须输出,不得省略或合并】${aj.join("、")}`:"",am=[ac,af,ak,ai,ad.length?`【数据口径强制约束】${ad.join(";")}`:"",m?.writingGoal,m?.mustCover?.length?`本章必须覆盖:${m.mustCover.join("、")}`:"",m?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${m.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),an=dY(U,d);if(U.writerPrompts.length>0&&!an.primaryWriter)throw Error(`${(0,o.GQ)(d.title)} 写作主控提示词未进入章节生成阶段`);let ao=[an.promptTexts,ax].filter(Boolean).join("\n\n"),ap=an.promptDetails.length?an.promptDetails:["未绑定章节写作提示词"],aq=(0,z.rC)({template:E,chapter:d,spec:as,profile:at,promptTexts:ao,requirement:a.requirement,plan:m?{requiredContents:m.mustCover,evidenceNeeds:Object.values(m.evidenceQueries).flat()}:void 0}),ar=(0,z.ji)({needs:aq,factsModel:b1,evidence:W,profile:at,excludedEvidenceKeys:bV}),au=ar.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),av=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>eG(`${a.sectionTitle||""}${a.content||""}`).includes(eG(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:d,evidence:_}),aw=new Set(_.map(a=>a.filePath)).size,ay=!!B&&(B?.graphFiles.size||0)>=8&&aw>=6&&0===aa.length&&"low"===av.riskLevel,az=function(a){let b=a.evidenceFileCount<=2;return a.scopedFileCount>80?b:"evidence_first"===a.suggestedStrategy||a.highRisk||a.missingFactsCount>0||a.requiredMissingNeedsCount>0||b||a.evidenceCount<8&&"low"!==a.riskLevel}({scopedFileCount:K.length,evidenceCount:_.length,evidenceFileCount:aw,suggestedStrategy:av.suggestedStrategy,highRisk:a4.highRisk,missingFactsCount:aa.length,requiredMissingNeedsCount:au.length,riskLevel:av.riskLevel});if(!ay&&az&&K.length>0){let b=new Set([...aa,...au]).size;b>0&&(T[i]=(0,aL.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,o.GQ)(d.title)} 正在深度召回缺失事实证据(${b} 项需求)`,progress:{current:g+1,total:cf.length,label:"深度召回"}},{subtitle:(0,o.GQ)(d.title),order:g}),J());let c=await aK({manager:F,projectRoot:C,chapter:d,scopedFilePaths:K,fileRoleByPath:aW,fileProcessingByPath:aX,requiredNeeds:[...new Set([...aa,...au])],highRisk:a4.highRisk||au.length>0,signal:a.signal}).catch(()=>[]);ab=c.length,c.length>0&&(W=[...W,...(0,a2.Su)(c,a_)],bV.size>0&&(W=W.filter(a=>!bV.has((0,w.hM)(a)))),_=d6(d,W,{preservePinned:!0},cQ),_=dn(_,b4.scopeConflicts),(0,a2.U2)(_,a_,`chapter:${d.id}:deep`),aa=d.requiredFacts.filter(a=>!_.some(b=>(0,p.Lk)(b,a)))),au=(ar=(0,z.ji)({needs:aq,factsModel:b1,evidence:W,profile:at,excludedEvidenceKeys:bV})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),T[i]=(0,aL.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,o.GQ)(d.title)} 深度召回完成:命中 ${ab} 条${au.length>0?`,仍缺 ${au.length} 项(触发轻量补充)`:""}`,progress:{current:g+1,total:cf.length,label:"证据检索"}},{subtitle:(0,o.GQ)(d.title),order:g}),J()}if(au.length>0&&K.length>0){let b=(0,a2.Su)(await aK({manager:F,projectRoot:C,chapter:d,scopedFilePaths:K,fileRoleByPath:aW,fileProcessingByPath:aX,requiredNeeds:au,highRisk:!0,signal:a.signal}).catch(()=>[]),a_);b.length>0&&(W=[...W,...b],bV.size>0&&(W=W.filter(a=>!bV.has((0,w.hM)(a)))),_=d6(d,W,{preservePinned:!0},cQ),_=dn(_,b4.scopeConflicts),(0,a2.U2)(_,a_,`chapter:${d.id}:supplemental`),aa=d.requiredFacts.filter(a=>!_.some(b=>(0,p.Lk)(b,a))),au=(ar=(0,z.ji)({needs:aq,factsModel:b1,evidence:W,profile:at,excludedEvidenceKeys:bV})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}for(let a of((0,a2.U2)(_,a_,`chapter:${d.id}:writer-input`),0===_.length&&a8.push(`${d.title}:缺少可支撑正文的项目资料证据`),aa))a8.push(`${d.title}:事实需求未满足 ${a}`);let aA=(0,aL.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:a5.length>0?"success":"failed",message:`已检索/绑定 ${a5.length} 条证据`});by<0?by=(0,aL.fx)(T,aA):T[by]={...aA,order:T[by]?.order??aA.order},J(),(0,A.Te)(a.signal);let aB=new Map,aC=b=>{let c=(0,A.c6)({kind:"section",query:`${d.title} ${b}`.trim(),scopedFilePaths:K}),e=aB.get(c);if(e)return Promise.resolve(e);let f=(0,aP.Ym)(b,d,_),g=f.filter(a=>aQ.AM.test(a.content)).length;return f.length>=4&&g>=1?(aB.set(c,f),Promise.resolve(f)):d8({manager:F,projectRoot:C,chapter:d,sectionTitle:b,scopedFilePaths:K,fileRoleByPath:aW,fileProcessingByPath:aX,signal:a.signal}).then(a=>(aB.set(c,a),a))},aF=b=>{if(0===b.length||0===K.length)return Promise.resolve([]);let c=b.join(" ");return d8({manager:F,projectRoot:C,chapter:d,sectionTitle:c,scopedFilePaths:K,fileRoleByPath:aW,fileProcessingByPath:aX,signal:a.signal}).catch(()=>[])},aG=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,p.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,p.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:d,evidence:_,risk:a4});a6.push(aG);let aH=new Set(_.map(a=>a.filePath)),aI=_.reduce((a,b)=>a+b.content.length,0),aJ=[...a4.highRisk?[`召回覆盖风险(${a4.riskReason||"切片未完全预加载"}):已加载 ${a4.loadedChunks}/${a4.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${L.length} 条`,`深召回证据:${ab} 条`,`事实覆盖:${aG.requiredFactCovered}/${aG.requiredFactTotal}`,`小节覆盖:${aG.sectionCovered}/${aG.sectionTotal}`];T[i]=(0,aL.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:U.writerPrompts[0]?.id,status:"running",message:`${(0,o.GQ)(d.title)} 已选取 ${_.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aH.size} 份`,`上下文字符:${aI}`,`检索查询:${G.length} 组`,...aJ],progress:{current:g+1,total:cf.length,label:"正文生成"}},{subtitle:(0,o.GQ)(d.title),order:g}),J(),cQ.evidence.contextChars+=aI;let aN=(0,z.n9)(ar),aS=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)?bY:[],aT=(0,aP.qX)((0,aP.hZ)({chapter:d,plan:void 0,spec:as,roleFacts:S,evidence:_,missingFacts:aa,indexedFacts:[...aS,...aN],resolvedFactNeeds:ar,factNeedsPrompt:(0,z.GK)(ar),specAuthorityMap:b1.specAuthorityMap})),aU=(0,eF.up)({plan:cM.plan,chapter:d,context:b2,evidence:_});if(b2.chapterTasks=[...(b2.chapterTasks||[]).filter(a=>a.chapterId!==d.id),aU.task],b2.nodes.push(aU.node),(0,dr.cN)(b2),(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:`agent-chapter-task-${d.id}`,status:aU.task.ready||k?"success":"failed",message:aU.task.ready?aU.node.outputSummary||`${(0,o.GQ)(d.title)} 章节任务规划完成`:k?`${(0,o.GQ)(d.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:aU.node.outputSummary||`${(0,o.GQ)(d.title)} 章节任务规划完成`,details:aU.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:T.length})),J(H),!aU.task.ready&&!k)throw Error(`${(0,o.GQ)(d.title)} 章节任务未就绪:${aU.task.issues.map(a=>a.message).join(";")}`);let aZ=[ao,(0,eF.bT)(aU.task)].filter(Boolean).join("\n\n"),a3={total:ar.length,satisfied:ar.filter(a=>"satisfied"===a.status).length,missing:ar.filter(a=>"missing"===a.status).length,lowConfidence:ar.filter(a=>"low_confidence"===a.status).length};for(let a of au)a8.push(`${d.title}:事实需求未确认 ${a}`);let a9=cL.chapterTargets.get(d.id)||1200,ba=d.sections?.filter(Boolean).length||0,bd=/[、,,;;]/u.test(d.title),be=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:a9,sectionCount:ba,title:d.title,longformStrict:cL.longformStrict}),bf=Math.ceil(be.maxWords*(cL.maxChars?1.05:1)),bg=da?function(a,b){let c=a.outline.chapters.find(a=>a.title===b);return c||a.outline.chapters.find(a=>b.includes(a.title)||a.title.includes(b))}(b,d.title):void 0,bh=bg&&b?function(a,b){let c=[`【第 ${a.id} 章「${a.title}」蓝图切片——以下项目专属事实由蓝图冻结锁定,正文必须一致引用】`];for(let b of a.subSections){c.push(`
99
+ ${p}`),drawingNote:"总平面布置图/横道图/组织机构图为后期人工配图,蓝图只规划对应章节正文内容"},diagnostics:{standardBlocksLoaded:q.blocks.filter(a=>!a.gap).length,standardBlockGaps:q.gaps}}}({boq:h||{entries:[],villages:[],totalEntries:0,sourceFile:"",complete:!1,diagnostics:{totalChunks:0,markdownChunks:0,declarationChunks:0,skippedChunks:0,droppedIncompleteRows:0}},basicFacts:a.basicFacts,evidence:a.evidence,facts:a.facts,projectName:d.projectCode||""});c.standardBlocksLoaded=i.diagnostics.standardBlocksLoaded,c.standardBlockGaps=i.diagnostics.standardBlockGaps,c.stage="阶段 B/C";let j=function(a){let{chapterTitles:b,boq:c}=a;return{chapters:b.map((b,d)=>{var e;let f=String(d+1),g=bA.filter(a=>a.chapterPattern.test(b)).map(a=>`${a.item}(评审权重 ${a.weight})`),h=/主要分部分项|施工方案|施工方法/u.test(b)?function(a,b){let c=new Map;for(let b of a.entries){let a=b.section||"未分部条目",d=c.get(a)||[];d.push(b),c.set(a,d)}let d=[],e=0;for(let[a,f]of c){let c=bB(a,f),g=f.some(a=>"unit-project"===a.sectionKind),h=[];if(g){let a=new Map;for(let b of f){let d=b.subsection||c,e=a.get(d)||[];e.push(b),a.set(d,e)}for(let[b,c]of a)h.push(bD(bB(b,c),c))}else h.push(bD(c,f));e+=1,d.push({id:`${b}.${e}`,title:c,targetWords:2400,requiredParams:h.flatMap(a=>Object.keys(a.quantities).slice(0,5).map(a=>({path:`data.quantities.${a}`,mode:"must_cite",strict:!0}))),scoredItems:["评标分项:主要施工方法(1.5)"],tablePlans:["主要工程量一览表"],workPackages:h})}return d}(c,f):[];return{id:f,title:b,isActive:(e=a.docType,!(/专项施工方案|专项方案|危大/u.test(e)&&/总平面|平面布置|施工部署|总体部署/u.test(b))),requiredParams:[],scoredItems:g,subSections:h}})}}({chapterTitles:a.chapterTitles,boq:h||{entries:[],villages:[],totalEntries:0,sourceFile:"",complete:!1,diagnostics:{totalChunks:0,markdownChunks:0,declarationChunks:0,skippedChunks:0,droppedIncompleteRows:0}},docType:d.docType});c.stage="阶段 D";let k={meta:d,data:i.data,outline:j,validation:{passed:!1,checks:[]},diagnostics:c};return k.validation=function(a,b){let c=[],d=(0,y.Jx)(a,bm);c.push({name:"1. Schema 校验",passed:0===d.length,message:0===d.length?"结构/类型/必填/边界全部通过":d.join(";")});let e=function(a,b){let c=[];if(b){let d=bn(b);for(let[b,e]of Object.entries(a.data.quantities)){let a=d[b];if(!a){c.push(`quantities.${b} 不在清单解析产物值集中(疑似编造)`);continue}Math.abs(a.value-e.value)>.011&&c.push(`quantities.${b} 数值 ${e.value} 与清单聚合值 ${a.value} 不一致`)}}for(let b of a.data.redLineFacts)b.value&&b.source||c.push(`红线事实「${b.key}」缺值或缺来源`);if(b)for(let d of a.data.resources?.equipment||[]){let a=bu.find(a=>a.name===d.name);if(!a)continue;let e=b.entries.filter(b=>a.pattern.test(`${b.name} ${b.description}`)&&b.unit===a.unit).reduce((a,b)=>a+b.quantity,0),f=/合计约\s*([\d.]+)/u.exec(d.basis);f&&Math.abs(Number(f[1])-Math.round(e))>1&&c.push(`机械「${d.name}」basis 工程量 ${f[1]} 与清单同单位聚合 ${Math.round(e)} 不一致`)}return c}(a,b);c.push({name:"2. 事实锚定校验",passed:0===e.length,message:0===e.length?"L1a 值全部 ∈ 清单解析产物值集,红线事实逐条有源":e.join(";")});let f=function(a,b){let c=[],d=a.outline.chapters.flatMap(a=>a.subSections).flatMap(a=>a.workPackages);if(b){let a=new Set;for(let b of d)for(let c of b.coveredSeqs)a.add(c);let e=b.entries.filter(b=>!a.has(b.seq));e.length>0&&c.push(`清单条目零丢失校验失败:${e.length} 条未被工作包覆盖(如序号 ${e.slice(0,5).map(a=>a.seq).join("、")})`)}let e=new Set;for(let b of a.outline.chapters)for(let a of b.scoredItems)e.add(a.split("(")[0]||"");let f=bA.filter(a=>![...e].some(b=>b.includes(a.item))).map(a=>a.item);return f.length>0&&c.push(`十项评审承接缺失:${f.join("、")} 无章/节显性承接声明`),0===a.data.keyDifficulties.length&&c.push("重难点及保证措施未逐项列明(十项评审⑩硬要求)"),c}(a,b);c.push({name:"3. 覆盖校验",passed:0===f.length,message:0===f.length?"清单条目零丢失、十项评审全承接、重难点逐项列明":f.join(";")});let g=function(a){let b=[],c=a.data.contract?.totalDays||0,d=(a.data.milestones||[]).reduce((a,b)=>a+(b.duration||0),0);c>0&&d>c&&b.push(`里程碑总和 ${d} 天超过总工期 ${c} 天`);let{labor:e}=a.data.resources||{};if(e){for(let a of(e.peak&&e.peak.min>e.peak.max&&b.push(`劳动力峰值区间异常(min ${e.peak.min} > max ${e.peak.max})`),e.peakValue>0&&e.peak&&(e.peakValue<e.peak.min||e.peakValue>e.peak.max)&&b.push(`劳动力峰值唯一口径 ${e.peakValue} 人超出推导区间 ${e.peak.min}~${e.peak.max} 人`),e.byTrade||[]))(a.min||0)>(a.max||0)&&b.push(`工种「${a.trade}」人数区间异常`);let d=a.data.contract?.estimatedAmount||0;if(d>0&&e.peakValue>0&&c>0){let a=bt(d,Math.max(30,Math.round(.85*c))),f=Math.round(.6*a.min),g=Math.round(1.3*a.max);(e.peakValue<f||e.peakValue>g)&&b.push(`劳动力峰值 ${e.peakValue} 人超出造价锚定量级窗口 [${f}, ${g}] 人(合同估算价 ${d} 万元锚定)`)}}let f=new Set((a.data.decisionLock?.entries??[]).map(a=>a.id));for(let c of(a.data.contract?.totalDays>0&&!f.has("contract_days")&&b.push(`决策锁缺失数据条目 contract_days(总工期 ${a.data.contract.totalDays} 日历天未入锁)`),e&&e.peakValue>0&&!f.has("labor_peak")&&b.push(`决策锁缺失数据条目 labor_peak(劳动力峰值 ${e.peakValue} 人未入锁)`),a.data.redLineFacts?.some(a=>"自然村数量"===a.key)&&!f.has("village_count")&&b.push("决策锁缺失数据条目 village_count(自然村数量红线事实未入锁)"),a.data.resources?.equipment||[]))(c.min||0)>(c.max||0)&&b.push(`机械「${c.name}」台数区间异常`);let g=(a.data.standardBlocks||[]).find(a=>"six-hundred-percent"===a.id);return g&&!g.gap&&6!==g.items.length&&b.push(`扬尘治理六个百分百板块条目数 ${g.items.length} 条(应为恰六条)`),b}(a);return c.push({name:"4. 内部一致性校验",passed:0===g.length,message:0===g.length?"里程碑/劳动力/机械区间自洽":g.join(";")}),{passed:c.every(a=>a.passed),checks:c}}(k,h),k.validation.passed||c.warnings.push(`蓝图校验未通过:${k.validation.checks.filter(a=>!a.passed).map(a=>a.name).join("、")}(一期旁路仅报告,不阻断生成)`),c.durationMs=Date.now()-b,k}({projectRoot:C,boundFilePaths:ae,chapterTitles:cf.map(a=>a.title),templateName:E.name,basicFacts:function(a){let b=Object.values(a.byKey||{}).filter(a=>!!(a&&a.label&&a.value)).sort((a,b)=>(b.priority||0)-(a.priority||0));return 0===b.length?"":b.slice(0,60).map(a=>{let b=String(a.value),c=bR.exec(b),d=c?b.slice(0,c.index).trim():b;return`- ${a.label}:${d}`}).join("\n")}(b4),evidence:bQ,facts:[...bW.localFacts,...bW.projectBasicFacts,...bW.preciseFacts],signal:a.signal,diagnostics:cQ});let c=function(a,b){let c=e.join((0,bl.Gl)(a),"assets","blueprint.json");return x.writeFileSync(c,JSON.stringify(b,null,2),"utf8"),c}(C,b),d=b.outline.chapters.reduce((a,b)=>a+b.subSections.reduce((a,b)=>a+b.workPackages.length,0),0);(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"integrated-blueprint",status:b.validation.passed?"success":"failed",message:b.validation.passed?`一体化蓝图已构建并落盘:清单 ${b.diagnostics.boq?.totalEntries??0} 条目、标准板块 ${b.diagnostics.standardBlocksLoaded} 个、工作包 ${d} 个(校验通过,参数桶与章切片接管各章写作)`:`一体化蓝图已构建但校验未通过(参数桶不注入,不阻断生成):${b.validation.checks.filter(a=>!a.passed).map(a=>a.name).join("、")}`,details:[`耗时 ${Date.now()-c9}ms`,`落盘:${c}`,`清单解析:${b.diagnostics.boq?`${b.diagnostics.boq.totalEntries} 条目 / ${b.diagnostics.boq.villageCount} 村 / 完整性校验${b.diagnostics.boq.complete?"通过":"未通过"}`:"未解析(见警告)"}`,`标准板块缺口:${b.diagnostics.standardBlockGaps.length>0?b.diagnostics.standardBlockGaps.join("、"):"无"}`,`四道校验:${b.validation.checks.map(a=>`${a.name}${a.passed?"✓":"✗"}`).join(" / ")}`,...b.diagnostics.warnings.slice(0,6).map(a=>`警告:${a}`)]},{subtitle:"一体化蓝图"})),J()}catch(a){b=void 0,(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"integrated-blueprint",status:"failed",message:`一体化蓝图构建异常(参数桶不注入,不阻断生成):${a instanceof Error?a.message:String(a)}`,details:[`耗时 ${Date.now()-c9}ms`,"蓝图异常时参数桶与章切片不注入,各章按证据独立成稿"]},{subtitle:"一体化蓝图"})),J()}if(b){let a=function(a,b){let c=[];return{chapters:a.map(a=>{if(!/主要分部分项|施工方案|施工方法/u.test(a.title))return a;let d=b.chapters.find(b=>b.title===a.title||a.title.includes(b.title)||b.title.includes(a.title));if(!d)return a;let e=function(a,b){let c=a.sections.map(a=>a.trim()).filter(Boolean);if(0===c.length||0===b.subSections.length)return{sections:c};let d=b.subSections.map(a=>a.title),e=new Set(b.subSections.flatMap(a=>a.workPackages.map(a=>a.name))),f=new Set(b.subSections.flatMap(a=>a.workPackages.flatMap(a=>[...Object.keys(a.quantities),...a.processChain]))),g=[...new Set([...c.filter(a=>bH.test(a)&&!(d.find(b=>a===b||a.length>=2&&(a.includes(b)||b.includes(a)))||[...e].find(b=>a===b||a.length>=2&&(a.includes(b)||b.includes(a)))||[...f].find(b=>a===b))).slice(0,2),...d])],h=new Set(g),i=c.filter(a=>!h.has(a));return 0===i.length&&JSON.stringify(g)===JSON.stringify(c)?{sections:c}:{sections:g,report:{chapterTitle:a.title,removed:i,replacedWithBlueprint:!0,finalSections:g}}}(a,d);return e.report&&c.push(e.report),{...a,sections:e.sections}}),reports:c}}(cf.map(a=>({title:a.title,sections:a.sections||[]})),b.outline);if(a.reports.length>0){let b=new Map(a.chapters.map(a=>[a.title,a.sections]));cf=cf.map(a=>{let c=b.get(a.title);return c&&JSON.stringify(c)!==JSON.stringify(a.sections||[])?{...a,sections:c}:a}),E={...E,chapters:cf},(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:"blueprint-section-alignment",status:"success",message:`清单分部结构校准:${a.reports.length} 个施工方法类章节小节已按蓝图权威分部结构对齐`,details:a.reports.flatMap(a=>[`${a.chapterTitle}:最终小节 ${a.finalSections.join("、")}`,...a.removed.length>0?[`${a.chapterTitle} 子分部/未规范名降级:${a.removed.join("、")}(正文在分部小节内按工作包展开)`]:[]])},{subtitle:"清单分部结构校准",order:T.length})),J()}}let da=!!b?.validation.passed,db=b?.validation.passed?function(a){let b=["【一体化蓝图参数桶——全项目口径唯一权威源,正文引用必须与此一致,不得自行推导不同数值】"];b.push("计划类数值(劳动力人数/工期/工程量/养护期)必须且只能引用以下锚点值:禁止将各工种人数相加推导峰值、禁止按定额自行估算、禁止改写锚点数值。"),b.push(`- 项目:${a.project.name}(${a.project.scope})`),a.contract.totalDays>0&&b.push(`- 总工期:${a.contract.totalDays} 日历天`),a.contract.qualityStandard&&b.push(`- 质量标准:${a.contract.qualityStandard}`),a.contract.pricingFile&&b.push(`- 计价依据:${a.contract.pricingFile}`),a.milestones.length>0&&b.push(`- 里程碑:${a.milestones.map(a=>`${a.label}${a.duration?` ${a.duration} 天`:""}`).join("、")}(总和 ≤ 总工期)`),a.resources.labor.peakValue>0&&b.push(`- 劳动力峰值:${a.resources.labor.peakValue} 人(造价锚定口径唯一峰值,各章必须引用该值,不得自设其他峰值)`),a.resources.labor.byPhase.length>0&&b.push(`- 分阶段劳动力投入(各阶段同时在场人数,分阶段计划表数据源):${a.resources.labor.byPhase.map(a=>`${a.phase} ${Math.round(((a.min??0)+(a.max??a.min??0))/2)} 人`).join("、")}`),a.resources.labor.byTrade.length>0&&b.push(`- 工种配置(高峰同时在场人数,与劳动力峰值同口径):${a.resources.labor.byTrade.map(a=>`${a.trade} ${Math.round(((a.min??1)+(a.max??a.min??1))/2)} 人`).join("、")}`),a.resources.equipment.length>0&&b.push(`- 主要机械:${a.resources.equipment.map(a=>`${a.name}${a.spec?`(${a.spec})`:""} ${a.quantity&&a.quantity>0?a.quantity:Math.round(((a.min??1)+(a.max??a.min??1))/2)} 台`).join("、")}`),a.materialsPlan.length>0&&b.push(`- 物资计划(清单汇总):${a.materialsPlan.slice(0,12).map(a=>`${a.name} ${a.quantity??""}${a.unit}`).join("、")}${a.materialsPlan.length>12?" 等":""}`),a.inspectionBatches.length>0&&b.push(`- 检验批划分:${a.inspectionBatches.map(a=>`${a.scope}——${a.planDesc}`).join(";")}`),void 0!==a.earthworkBalance.excavation&&b.push(`- 土方平衡:挖方 ${a.earthworkBalance.excavation}m\xb3、填方 ${a.earthworkBalance.backfill}m\xb3${a.earthworkBalance.disposal?`、弃方 ${a.earthworkBalance.disposal}m\xb3`:""}(清单汇总口径)`),b.push(`- 临时用电:${a.tempUtilities.powerLoad}`),b.push(`- 临时用水:${a.tempUtilities.waterUsage}`);let c=a.redLineFacts.filter(a=>!a.amount);c.length>0&&b.push(`- 评审红线事实(must_cite,正文必须逐条出现且数值一致):${c.map(a=>`${a.key}=${a.value}`).join(";")}`);let d=a.redLineFacts.filter(a=>a.amount);return d.length>0&&b.push(`- 金额类红线事实(商务禁区,不进正文):${d.map(a=>`${a.key}=${a.value}`).join(";")}`),a.decisionLock.entries.length>0&&b.push(`- 关键决策锁:${a.decisionLock.entries.map(a=>`${a.label}:${a.values.join("、")}`).join(";")}`),a.constructionDeployment.sections.length>0&&b.push(`- 施工部署:${a.constructionDeployment.flow};施工顺序 ${a.constructionDeployment.sequence}`),a.keyDifficulties.length>0&&b.push(`- 重难点(逐项列明):${a.keyDifficulties.map(a=>`${a.name}——${a.measure}`).join(";")}`),b.push(`- 金额禁区:${a.amountRule}`),b.push(a.drawingNote),b.join("\n")}(b.data):"";cQ.metrics.push({name:"phase:plan",startedAt:cR,endedAt:Date.now(),durationMs:Date.now()-cR});let dc=Date.now();for(let c=0;c<cf.length;c+=cX){let d=cf.slice(c,c+cX);for(let e of(await Promise.all(d.map(async(d,e)=>{let f,g=c+e;if((0,A.Te)(a.signal),!da&&/劳动力|资源配置|资源|进度计划|进度|工期/u.test(d.title))throw T.push((0,aL.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,o.GQ)(d.title)} 依赖一体化蓝图参数桶权威(劳动力/资源/进度类数值),蓝图校验未通过,已按节点级把关阻断生成`,details:["蓝图四道校验未全部通过或构建异常时,数值密集型章禁止无权威成稿","请检查清单解析与蓝图构建诊断后重试"],progress:{current:g+1,total:cf.length,label:"章节阻断"}},{subtitle:(0,o.GQ)(d.title),order:g})),J(),Error(`${(0,o.GQ)(d.title)} 依赖一体化蓝图参数桶权威,蓝图校验未通过,已按节点级把关阻断生成`);let h=Date.now(),i=T.length;try{let c,e;T.push((0,aL.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:U.writerPrompts[0]?.id,status:"running",message:`${(0,o.GQ)(d.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${g+1}/${cf.length}`,`二级小节:${d.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:g+1,total:cf.length,label:"章节生成"}},{subtitle:(0,o.GQ)(d.title),order:g})),J();let j=a.resumeChapters?.find(a=>a.id===d.id||a.title===d.title),k=j?.content?.trim(),l=j?.evidence?.length?[...j.evidence]:[],m=ah.chapterPlans.find(a=>a.chapterId===d.id||a.chapterTitle===d.title),t=m?Object.values(m.evidenceQueries).flat().filter(Boolean):[],x=d.queries.length>0?d.queries:[E.name,E.outputTitle,d.title],B=ce.get(d.id);if(b3&&B&&B.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[...B.graphFiles].map(a=>b(a)||a).filter(a=>(0,aM.Tz)(C,a,a$))){let b=bI(a);if(b?.chunks?.length)for(let c of b.chunks)l.push({chapterId:d.id,filePath:b.file?.relativePath||a,score:5+(B.graphWorks.length+B.graphMethods.length)*.5,content:c.content,roleId:aW.get(a),processingType:aX.get(a),sectionTitle:c.sectionTitle,source:"graph-evidence"})}}let D=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title),G=d7(d,[...x,...t],[]),I=Date.now();T[i]=(0,aL.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:U.writerPrompts[0]?.id,status:"running",message:`${(0,o.GQ)(d.title)} 正在执行质量优先的章节检索${B?.graphFiles.size?`(图谱匹配 ${B.graphFiles.size} 个文件)`:""}`,details:G.map(a=>`检索:${a.slice(0,42)}`),progress:{current:g+1,total:cf.length,label:"证据检索"}},{subtitle:(0,o.GQ)(d.title),order:g}),J();let K=k?[]:[...a$].filter(Boolean).sort(),L=k?[]:b$?.evidenceByChapterId?.[d.id]||[];L.length>0&&l.push(...L);let M=[],N=(d.requiredFacts||[]).filter(a=>!!a&&!G.some(b=>b.includes(a)||a.includes(b))).map(a=>`${d.title} ${a}`),O=[...G,...N];if(K.length>0&&O.length>0){(0,A.Te)(a.signal);let b=await (0,A.l$)(O,async a=>bJ(a,K,Math.min(a0,12),d.title),{kind:"search"});M.push(...b)}for(let a of(cQ.evidence.searchQueries+=O.length,cQ.evidence.searchMs+=Date.now()-I,T[i]=(0,aL.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,o.GQ)(d.title)} KB 检索完成:${O.length} 组查询,准备深度召回与语义排序`,progress:{current:g+1,total:cf.length,label:"证据检索"}},{subtitle:(0,o.GQ)(d.title),order:g}),J(),M))l.push(...a.filter(a=>(0,aM.Tz)(C,a.filePath,aV)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:aW.get(a.filePath),processingType:aX.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));D&&K.length>0&&c8.length>0&&l.push(...c8.filter(a=>(0,aM.Tz)(C,a.filePath,aV)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:aW.get(a.filePath),processingType:aX.get(a.filePath),sectionTitle:a.sectionTitle,source:"basic-fact-cache"})));let Q=k?[]:await (0,aO.$b)({manager:F,projectRoot:C,chapter:d,plan:m,profile:ag,scopedFilePaths:K,limitPerQuery:Math.min(a0,10),signal:a.signal}).catch(()=>[]);l.push(...Q);let R=new Set((d.pinnedEvidenceFilePaths||[]).filter(Boolean)),S=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)&&l.push(...bU.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"})));let V=bQ.filter(a=>/招标|投标须知|评标办法|专用合同条款|投标人须知/u.test(`${a.filePath||""}${a.sectionTitle||""}`));for(let a of(/概况|工程|项目|总体|部署/u.test(d.title)&&V.length>0&&l.push(...V.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"}))),new Set([...R]))){if(!(0,aM.Tz)(C,a,aV))continue;let b=R.has(a),c=bI(a);c&&l.push(...c.chunks.map(a=>({chapterId:d.id,filePath:c.file.relativePath,score:1,content:a.content,roleId:aW.get(c.file.relativePath),processingType:aX.get(c.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let W=l.filter(a=>(0,aM.Tz)(C,a.filePath,a$));if(!k&&aD.enabled&&aD.allowProjectFacts){let b=await a1({config:aD,chapterId:d.id,chapterTitle:d.title,sectionTitles:d.sections||[],runtimeRules:aE,localFacts:[...b1.project,...b1.schedule,...b1.quality,...b1.safety,...b1.resources,...b1.preciseFacts],signal:a.signal});a7.queries.push(...b.queries),a7.filteredCount+=b.filtered+b.evidence.length}let X=k?[]:(0,aO.SK)({project:aY,chapter:d,plan:m,profile:ag,scopedFilePaths:K,highRisk:a4.highRisk});X.length>0&&W.push(...X),W=(0,a2.Su)(W,a_),bV.size>0&&(W=W.filter(a=>!bV.has((0,w.hM)(a))));let Y=(()=>{let a=Number(process.env.DOCUMENT_SEMANTIC_TOP_CANDIDATES);return Number.isFinite(a)&&a>0?Math.floor(a):3e3})(),Z=function(a,b,c){if(c<=0||b.length<=c)return b;let d=b.map(b=>({item:b,lexical:(0,n.A1)(b,a.requiredFacts)*d3(a,b.processingType)+d4(a,b)}));return d.sort((a,b)=>b.lexical-a.lexical),d.slice(0,c).map(a=>a.item)}(d,W,Y),$=await (0,v.Mv)([(0,u.Yx)(d)],Z.map(d5)),_=d6(d,W,{preservePinned:!0,semantic:{similarity:$,queryText:(0,u.Yx)(d)}},cQ);_=dn(_,b4.scopeConflicts),(0,a2.U2)(_,a_,`chapter:${d.id}:initial`);let aa=d.requiredFacts.filter(a=>!_.some(b=>(0,p.Lk)(b,a))),ab=0,ac=B?[B.graphWorks.length?`图谱识别本章工程内容:${B.graphWorks.join("、")}`:"",B.graphMethods.length?`图谱识别本章施工方法:${B.graphMethods.join("、")}`:"",B.graphBoqItems.length?`图谱识别本章BOQ清单项(${B.graphBoqItems.length}项):${B.graphBoqItems.map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",B.gaps.length?`图谱识别本章资料缺口:${B.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",ad=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}(b4.scopeConflicts),af=cE.length>0?(()=>{let a=al(d.title),b=cE.filter(b=>b.chapterTitle===a);return 0===b.length?"":["【本章必须显性响应的招标要求(逐条写入正文,零响应即评标失分)】",...b.map(a=>`- ${a.kind}:${a.item.text}`)].join("\n")})():"",ai=/扬尘|文明施工|环境保护|绿色施工|安全文明|环保/u.test(`${d.title}${d.purpose||""}`)?"【扬尘治理六个百分百——规范固定条目,必须逐项落实并写入正文,每项一句具体措施,六项不得缺项;若本项目无拆迁工程,对“拆迁工地100%湿法作业”必须显性写明“本项目无拆迁工程,不涉及拆迁工地湿法作业”,不得省略】\n- 施工工地周边100%围挡\n- 物料堆放100%覆盖\n- 出入车辆100%冲洗\n- 施工现场地面100%硬化\n- 拆迁工地100%湿法作业\n- 渣土车辆100%密闭运输":"",aj=(d.sections||[]).filter(a=>!/^(?:施工概况|施工流程|施工方法)$/u.test(a.trim())&&!/^附录/u.test(a.trim())),ak=aj.length>0?`【必须输出以下规划小节为三级标题(### 小节名),逐个小节展开正式正文:每小节正文不少于 100 字,不得只写标题、不得空小节、不得用表格替代正文;小节名与章标题相同或相近也必须输出,不得省略或合并】${aj.join("、")}`:"",am=[ac,af,ak,ai,ad.length?`【数据口径强制约束】${ad.join(";")}`:"",m?.writingGoal,m?.mustCover?.length?`本章必须覆盖:${m.mustCover.join("、")}`:"",m?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${m.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),an=dY(U,d);if(U.writerPrompts.length>0&&!an.primaryWriter)throw Error(`${(0,o.GQ)(d.title)} 写作主控提示词未进入章节生成阶段`);let ao=[an.promptTexts,ax].filter(Boolean).join("\n\n"),ap=an.promptDetails.length?an.promptDetails:["未绑定章节写作提示词"],aq=(0,z.rC)({template:E,chapter:d,spec:as,profile:at,promptTexts:ao,requirement:a.requirement,plan:m?{requiredContents:m.mustCover,evidenceNeeds:Object.values(m.evidenceQueries).flat()}:void 0}),ar=(0,z.ji)({needs:aq,factsModel:b1,evidence:W,profile:at,excludedEvidenceKeys:bV}),au=ar.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),av=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>eG(`${a.sectionTitle||""}${a.content||""}`).includes(eG(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:d,evidence:_}),aw=new Set(_.map(a=>a.filePath)).size,ay=!!B&&(B?.graphFiles.size||0)>=8&&aw>=6&&0===aa.length&&"low"===av.riskLevel,az=function(a){let b=a.evidenceFileCount<=2;return a.scopedFileCount>80?b:"evidence_first"===a.suggestedStrategy||a.highRisk||a.missingFactsCount>0||a.requiredMissingNeedsCount>0||b||a.evidenceCount<8&&"low"!==a.riskLevel}({scopedFileCount:K.length,evidenceCount:_.length,evidenceFileCount:aw,suggestedStrategy:av.suggestedStrategy,highRisk:a4.highRisk,missingFactsCount:aa.length,requiredMissingNeedsCount:au.length,riskLevel:av.riskLevel});if(!ay&&az&&K.length>0){let b=new Set([...aa,...au]).size;b>0&&(T[i]=(0,aL.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,o.GQ)(d.title)} 正在深度召回缺失事实证据(${b} 项需求)`,progress:{current:g+1,total:cf.length,label:"深度召回"}},{subtitle:(0,o.GQ)(d.title),order:g}),J());let c=await aK({manager:F,projectRoot:C,chapter:d,scopedFilePaths:K,fileRoleByPath:aW,fileProcessingByPath:aX,requiredNeeds:[...new Set([...aa,...au])],highRisk:a4.highRisk||au.length>0,signal:a.signal}).catch(()=>[]);ab=c.length,c.length>0&&(W=[...W,...(0,a2.Su)(c,a_)],bV.size>0&&(W=W.filter(a=>!bV.has((0,w.hM)(a)))),_=d6(d,W,{preservePinned:!0},cQ),_=dn(_,b4.scopeConflicts),(0,a2.U2)(_,a_,`chapter:${d.id}:deep`),aa=d.requiredFacts.filter(a=>!_.some(b=>(0,p.Lk)(b,a)))),au=(ar=(0,z.ji)({needs:aq,factsModel:b1,evidence:W,profile:at,excludedEvidenceKeys:bV})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),T[i]=(0,aL.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,o.GQ)(d.title)} 深度召回完成:命中 ${ab} 条${au.length>0?`,仍缺 ${au.length} 项(触发轻量补充)`:""}`,progress:{current:g+1,total:cf.length,label:"证据检索"}},{subtitle:(0,o.GQ)(d.title),order:g}),J()}if(au.length>0&&K.length>0){let b=(0,a2.Su)(await aK({manager:F,projectRoot:C,chapter:d,scopedFilePaths:K,fileRoleByPath:aW,fileProcessingByPath:aX,requiredNeeds:au,highRisk:!0,signal:a.signal}).catch(()=>[]),a_);b.length>0&&(W=[...W,...b],bV.size>0&&(W=W.filter(a=>!bV.has((0,w.hM)(a)))),_=d6(d,W,{preservePinned:!0},cQ),_=dn(_,b4.scopeConflicts),(0,a2.U2)(_,a_,`chapter:${d.id}:supplemental`),aa=d.requiredFacts.filter(a=>!_.some(b=>(0,p.Lk)(b,a))),au=(ar=(0,z.ji)({needs:aq,factsModel:b1,evidence:W,profile:at,excludedEvidenceKeys:bV})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}for(let a of((0,a2.U2)(_,a_,`chapter:${d.id}:writer-input`),0===_.length&&a8.push(`${d.title}:缺少可支撑正文的项目资料证据`),aa))a8.push(`${d.title}:事实需求未满足 ${a}`);let aA=(0,aL.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:a5.length>0?"success":"failed",message:`已检索/绑定 ${a5.length} 条证据`});by<0?by=(0,aL.fx)(T,aA):T[by]={...aA,order:T[by]?.order??aA.order},J(),(0,A.Te)(a.signal);let aB=new Map,aC=b=>{let c=(0,A.c6)({kind:"section",query:`${d.title} ${b}`.trim(),scopedFilePaths:K}),e=aB.get(c);if(e)return Promise.resolve(e);let f=(0,aP.Ym)(b,d,_),g=f.filter(a=>aQ.AM.test(a.content)).length;return f.length>=4&&g>=1?(aB.set(c,f),Promise.resolve(f)):d8({manager:F,projectRoot:C,chapter:d,sectionTitle:b,scopedFilePaths:K,fileRoleByPath:aW,fileProcessingByPath:aX,signal:a.signal}).then(a=>(aB.set(c,a),a))},aF=b=>{if(0===b.length||0===K.length)return Promise.resolve([]);let c=b.join(" ");return d8({manager:F,projectRoot:C,chapter:d,sectionTitle:c,scopedFilePaths:K,fileRoleByPath:aW,fileProcessingByPath:aX,signal:a.signal}).catch(()=>[])},aG=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,p.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,p.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:d,evidence:_,risk:a4});a6.push(aG);let aH=new Set(_.map(a=>a.filePath)),aI=_.reduce((a,b)=>a+b.content.length,0),aJ=[...a4.highRisk?[`召回覆盖风险(${a4.riskReason||"切片未完全预加载"}):已加载 ${a4.loadedChunks}/${a4.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${L.length} 条`,`深召回证据:${ab} 条`,`事实覆盖:${aG.requiredFactCovered}/${aG.requiredFactTotal}`,`小节覆盖:${aG.sectionCovered}/${aG.sectionTotal}`];T[i]=(0,aL.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:U.writerPrompts[0]?.id,status:"running",message:`${(0,o.GQ)(d.title)} 已选取 ${_.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aH.size} 份`,`上下文字符:${aI}`,`检索查询:${G.length} 组`,...aJ],progress:{current:g+1,total:cf.length,label:"正文生成"}},{subtitle:(0,o.GQ)(d.title),order:g}),J(),cQ.evidence.contextChars+=aI;let aN=(0,z.n9)(ar),aS=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)?bY:[],aT=(0,aP.qX)((0,aP.hZ)({chapter:d,plan:void 0,spec:as,roleFacts:S,evidence:_,missingFacts:aa,indexedFacts:[...aS,...aN],resolvedFactNeeds:ar,factNeedsPrompt:(0,z.GK)(ar),specAuthorityMap:b1.specAuthorityMap})),aU=(0,eF.up)({plan:cM.plan,chapter:d,context:b2,evidence:_});if(b2.chapterTasks=[...(b2.chapterTasks||[]).filter(a=>a.chapterId!==d.id),aU.task],b2.nodes.push(aU.node),(0,dr.cN)(b2),(0,aL.fx)(T,(0,aL.X5)({type:"validation",roleId:`agent-chapter-task-${d.id}`,status:aU.task.ready||k?"success":"failed",message:aU.task.ready?aU.node.outputSummary||`${(0,o.GQ)(d.title)} 章节任务规划完成`:k?`${(0,o.GQ)(d.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:aU.node.outputSummary||`${(0,o.GQ)(d.title)} 章节任务规划完成`,details:aU.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:T.length})),J(H),!aU.task.ready&&!k)throw Error(`${(0,o.GQ)(d.title)} 章节任务未就绪:${aU.task.issues.map(a=>a.message).join(";")}`);let aZ=[ao,(0,eF.bT)(aU.task)].filter(Boolean).join("\n\n"),a3={total:ar.length,satisfied:ar.filter(a=>"satisfied"===a.status).length,missing:ar.filter(a=>"missing"===a.status).length,lowConfidence:ar.filter(a=>"low_confidence"===a.status).length};for(let a of au)a8.push(`${d.title}:事实需求未确认 ${a}`);let a9=cL.chapterTargets.get(d.id)||1200,ba=d.sections?.filter(Boolean).length||0,bd=/[、,,;;]/u.test(d.title),be=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:a9,sectionCount:ba,title:d.title,longformStrict:cL.longformStrict}),bf=Math.ceil(be.maxWords*(cL.maxChars?1.05:1)),bg=da?function(a,b){let c=a.outline.chapters.find(a=>a.title===b);return c||a.outline.chapters.find(a=>b.includes(a.title)||a.title.includes(b))}(b,d.title):void 0,bh=bg&&b?function(a,b){let c=[`【第 ${a.id} 章「${a.title}」蓝图切片——以下项目专属事实由蓝图冻结锁定,正文必须一致引用】`];for(let b of a.subSections){c.push(`
100
100
  ## ${b.id} ${b.title}(目标 ${b.targetWords??2400} 字)`);let a=b.requiredParams.filter(a=>"must_cite"===a.mode).map(a=>a.path);for(let d of(a.length>0&&c.push(`must_cite 参数(正文必须出现且与蓝图一致):${a.join("、")}`),b.workPackages)){c.push(`
101
101
  ### 工作包:${d.name}(${"major"===d.kind?"主要":"一般"}工作包)`);let a=Object.entries(d.quantities).map(([a,b])=>`${a} ${b.value}${b.unit}`).join("、");a&&c.push(`- 工程量:${a}`),d.processChain.length>0&&c.push(`- 工序链:${d.processChain.join(" → ")}`),d.methods.length>0&&c.push(`- 施工方法(清单特征原文):${d.methods.join(";")}`),d.params.length>0&&c.push(`- 工艺参数:${d.params.map(a=>`${a.key}=${a.value}`).join(";")}`),d.acceptance.length>0&&c.push(`- 验收要求:${d.acceptance.join(";")}`),d.standards.length>0&&c.push(`- 规范依据:${d.standards.join(";")}`)}}let d=b?function(a,b){let c=[];for(let d of bF)d.chapterPattern.test(a.title)&&c.push(...d.render(b));return 0===c.length?"":["【本章数值锚点——计划类数值必须且只能引用以下锚点值;禁止将各工种人数相加推导峰值、禁止按定额自行估算、禁止改写或自设任何计划类数值】",...c].join("\n")}(a,b):"";return[c.join("\n"),d].filter(Boolean).join("\n\n")}(bg,b.data):"",bi=bg&&b?function(a,b){let c=new Set,d=[];for(let e of a.subSections.flatMap(a=>a.requiredParams.filter(a=>"must_cite"===a.mode&&a.strict)))if(!c.has(e.path)){if(c.add(e.path),"data.contract.total_days"===e.path&&b.contract.totalDays>0){d.push(`总工期 ${b.contract.totalDays} 日历天`);continue}if(e.path.startsWith("data.quantities.")){let a=b.quantities[e.path.slice(16)];a&&a.value>0&&d.push(`${e.path.slice(16)} ${a.value}${a.unit}`)}}return d.join(";")}(bg,b.data):"",bj=be.roundTarget,bk=(0,aP.uV)(bj,bj),bl=ba>0?cL.longformStrict?bj:Math.min(bj,Math.max(1800,be.structureTarget)):bj,bm=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),bn=process.env.DOCUMENT_SECTION_FIRST_GENERATION,bo=void 0!==bn&&0===Number(bn),bp=void 0!==bn&&0!==Number(bn),bq=ba>=2&&ba<=bm&&!bd,br=!!(bg&&bg.subSections.length>ba),bs=!bo&&ba>=2&&(ba>bm||bd||br||cL.longformStrict&&ba>=6),bt=!bo&&!bs&&ba>=2&&ba<=bm&&(bp||bq||cL.longformStrict),bu=0,bv=a=>{let b=Date.now();if(b-bu<3e3)return;bu=b;let c=a.filter(Boolean).join("\n\n");c.trim()&&J([...H,{id:d.id,title:d.title,content:`## ${d.title}
102
102