@customize-agent/server 4.41.0 → 4.43.0

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.
@@ -40,7 +40,7 @@ ${r}`),drawingNote:"总平面布置图/横道图/组织机构图为后期人工
40
40
  ]{18,60})[。!?!?]`,"gu");function U(a){let b=[],c=new Map;for(let b of a.matchAll(T)){let a=b[1].trim(),d=a.replace(/[\d,,.。%%㎡m2²]/gu,"").slice(0,16);if(d.length<10)continue;let e=c.get(d)||{count:0,sample:a};e.count+=1,c.set(d,e)}for(let{count:a,sample:d}of c.values())a<3||b.push({level:"warning",severity:"warning",category:"style",owner:"llm",repairability:"llm_repairable",message:`段首固定开场机械重复 ${a} 次:“${d.slice(0,30)}…”`,suggestion:"同一段首句式只保留首次出现处,其余处按所在章节语境改写为差异化开场,避免模板化套话观感。"});return b.slice(0,3)}function V(a){let b=[],{overviewBody:c,sentences:d}=function(a){let b,c=a.split("\n"),d=[];for(let a=0;a<c.length;a+=1){let e=/^(#{2,4})\s+(.+)$/u.exec(c[a].trim());if(e){let c=e[1].length;/(?:工程概况|项目概况|基本信息)/u.test(e[2])?b={index:a,level:c}:b&&c<=b.level&&(d.push([b.index,a]),b=void 0)}}b&&d.push([b.index,c.length]);let e=a=>d.some(([b,c])=>a>=b&&a<c),f=c.filter((a,b)=>e(b)).join("\n"),g=[];for(let a=0;a<c.length;a+=1){if(e(a))continue;let b=/本项目为|本工程为|该项目为|该工程为/u.exec(c[a]);if(!b)continue;let d=c[a].slice(b.index).split(/[。!?!?]/u)[0];d&&d.length>=12&&g.push(d)}return{overviewBody:f,sentences:g}}(a);if(0===d.length||!c)return b;let f=(c.match(/[\p{Script=Han}]/gu)||[]).join("");if(!f)return b;let g=[];for(let a of d)if(function(a,b){return(0,l.qr)(a,b)>=8||a.split("、").map(a=>(a.match(/[\p{Script=Han}]/gu)||[]).join("")).filter(a=>a.length>=3).filter(a=>b.includes(a)).length>=2}(a,f)&&g.push(a.slice(0,36)),g.length>=3)break;return 0===g.length||b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`项目概况段跨章复述不得出现:概况章外有 ${g.length} 处以“本项目为/本工程为”等总述开头整段复述概况内容:${g.map(a=>`“${a}…”`).join("、")}`,suggestion:"总述数据只在工程概况类小节集中交代一次:其他章节直接写本章内容,仅可引用所需的具体数字(如计划工期天数),不得复述完整概况段。",provenance:{detectorId:"overview-recap",fingerprint:(0,e.c6)(a)}}),b}let W=["销项","复查","整改","闭环"];function X(a){let b=[],c=(0,d.V7)(a);if(c<3e3)return b;let e=[];for(let b of W){let d=a.split(b).length-1;e.push(d/c*1e3)}let f=Math.max(...e),g=W[e.indexOf(f)];return f>=3&&b.push({level:"warning",severity:"warning",category:"style",owner:"llm",repairability:"llm_repairable",message:`闭环句式模板化密集:“${g}”达 ${f.toFixed(1)} 次/千字(销项/复查/整改/闭环统一结尾高度重复)`,suggestion:"保留关键控制环节的闭环表述,其余改为差异化的过程控制语言(检验批验收、实测实量、旁站记录等),提升语言精练度。"}),b}let Y=["专项设计文件尚未完成,待后续补充","评分指标存在缺口尚未明确","依据承诺函后续跟踪完善","本项目未采用行业认定的新技术、新工艺、新设备、新材料"],Z=/编制范围为[^。;;]{0,40}?所界定的全部施工内容|作为施工组织的控制性约束条件|分项验收[,,]?验收记录经监理工程师签字确认后归档|(?:执行|按|依据|按照)[^。;;]{0,10}?(?:〔|【)?20\d{2}(?:〕|】)?\s*\d+\s*号\s*(?:文件|办法|规定)?/u,$=/未落实[^。;;]{0,24}?(?:整改|复查|销项|复验)|未(?:明确|列明|注明)[^。;;]{0,36}?按[^。;;]{0,44}?执行|(?:发现|对)[^。;;]{0,48}?(?:缺失|损坏|不全|脱岗|未审批|不合格)[^。;;]{0,72}?(?:整改|复查|销项|补齐|更换|停止作业|恢复施工)|(?:不得|严禁|禁止)[^。;;]{0,40}?(?:避免|防止)[^。;;]{0,20}?(?:返工|窝工|损失|事故)|(?:重难点|难点)(?:源于|在于)[^。;;]{0,80}?(?:若|如)未[^。;;]{0,40}?(?:将|会|可能)/u;async function _(a){let b=[],c=a.split(/\n+/u).filter(a=>a.trim()&&!/^\s*(#{1,6}\s+|\||[-*+]\s|>)/u.test(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.trim()).filter(a=>a.length>=12);if(0===c.length)return b;let d=/尚未|未完成|未明确|未采用|未落实|未确定|未闭合|存在缺口|有待|待补充|待完善|跟踪完善|不够|不明确|缺失|缺少|缺乏|风险较大|难以保证|无法保证|正在办理|暂未|未能|需进一步|不进行分包|不再分包|不转包/u,e=await (0,f.Mv)(c,[...Y]),g=[...new Set(c.filter(a=>d.test(a)&&!Z.test(a)&&!$.test(a)&&Y.some(b=>e(a,b)>=f.Eh)))];if(0===g.length)return b;for(let a of g)b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`自伤表述候选:“${a}”暴露投标短板,需按上下文判定后改写`,suggestion:"投标文件不得主动暴露“专项设计未完成/指标存在缺口”等短板:改写为正向落实表述(如“按施工图绿色建筑专篇编制专项方案,逐项落实评分项并跟踪验收”);如属现场条件合理风险描述(地质/管线尚不明确),保留但需配套勘查与应对措施。"});return b.slice(0,3)}let aa=/(?<!分)([\u4e00-\u9fa5]{2})\1(?!项)/gu;function ab(a){let b=[...new Set(a.match(aa)||[])].slice(0,3);return 0===b.length?[]:[{level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`正文存在叠词重复表述:${b.map(a=>`“${a}”`).join("、")}`,suggestion:"删除紧邻重复字词,保持语句完整通顺(“执行执行”改为“执行”)。"}]}let ac="抹面|打底|找平|坐浆|结合层|粘结层|罩面|批嵌|腻子";function ad(a){let b=[];for(let c of a.matchAll(RegExp(`(${ac})[^。;;
41
41
  |]{0,10}?(\\d{3,})\\s*mm`,"gu"))){let a=Number(c[2]);a>=100&&b.push(`“${c[1]}”厚度 ${a}mm`)}for(let c of a.matchAll(RegExp(`(\\d{3,})\\s*mm厚?[^。;;
42
42
  |]{0,18}(${ac})`,"gu"))){let a=Number(c[1]);a>=100&&b.push(`“${c[2]}”厚度 ${a}mm`)}let c=[...new Set(b)].slice(0,3);return 0===c.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`装饰层工艺参数异常:${c.join("、")} 远超工艺常规厚度(抹面/打底/找平 20mm、坐浆 20~30mm)`,suggestion:"装饰层(抹面/打底/找平/坐浆/结合层)厚度按工艺常规取值:抹面打底找平 20mm、坐浆 20~30mm,与结构层厚度(墙体/垫层/回填)区分,不得串用。"}]}function ae(a){let b=[],c=[...a.matchAll(/高峰期总人数(\d+)人|劳动力总人数(\d+)人|总人数(\d+)人/gu)].map(a=>Number(a[1]||a[2]||a[3])).filter(a=>a>0),d=[...a.matchAll(/高峰(?:期)?人数(\d+)人|峰值(?:需求|人数)?[为约]?(\d+)人/gu)].map(a=>Number(a[1]||a[2])).filter(a=>a>0),e=[...new Set(c)],f=[...new Set(d)];e.filter(a=>f.some(b=>b!==a)).length>0&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`劳动力峰值口径矛盾:正文「总人数」出现 ${e.join("人、")}人 与「高峰人数」出现 ${f.join("人、")}人 并存,峰值人数必须唯一`,suggestion:"全文劳动力峰值只允许一个口径:统一总人数与高峰人数为同一数值,删除矛盾口径;分阶段梯次投入人数(准备阶段/主体阶段/竣工阶段)属合法动态配置,不在统一范围内。"});let g=new Map;for(let b of(0,i.Rm)(a)){if(!b.hasTradeCol||0===b.tradeCells.length)continue;let a=new Map;for(let c of b.tradeCells){let b=a.get(c.trade)??0;c.value>b&&a.set(c.trade,c.value)}for(let[b,c]of a){let a=g.get(b)??[];a.push(c),g.set(b,a)}}let h=[...g.entries()].filter(([,a])=>a.length>=2&&new Set(a).size>=2);return h.length>0&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`同工种跨表高峰人数矛盾:${h.map(([a,b])=>`${a} ${b.join("人、")}人`).join(";")} 各表并存,同一工种高峰人数必须唯一`,suggestion:"同一工种在各表中的高峰人数必须一致:以工种配置表(第五章)为权威口径统一各表数值;分阶段投入计划表内同工种不同阶段的动态配置属合法数据,不参与统一。"}),b}function af(a){let b=function(a){let b=[];for(let c of a.matchAll(/(?:生活用水|施工用水|临时用水|用水)[^。;;\n]{0,24}(?:高峰(?:期)?人数|高峰人数)[^。;;\n]{0,8}?([\d,]+)\s*人/gu)){let a=Number(c[1].replace(/[,,]/gu,""));Number.isFinite(a)&&a>0&&b.push(a)}return b}(a);if(0===b.length)return[];let c=[];for(let b of a.matchAll(/高峰(?:期)?人数([\d,]+)人|峰值(?:需求|人数)?[为约]?([\d,]+)人|劳动力峰值[^。;;\n]{0,8}?([\d,]+)\s*人/gu)){let d=Number((b[1]||b[2]||b[3]||"").replace(/[,,]/gu,""));if(!Number.isFinite(d)||d<=0)continue;let e=(b.index??0)+b[0].indexOf(b[1]||b[2]||b[3]||""),f=a.slice(Math.max(0,e-24),e);!/生活用水|施工用水|临时用水|用水/u.test(f)&&((0,i.rx)(a,e)||c.push(d))}let d=[...new Set(c)];if(0===d.length)return[];let e=[...new Set(b)];return 0===e.filter(a=>d.every(b=>b!==a)).length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`用水高峰人数与劳动力峰值不一致:临时用水按高峰人数 ${e.join("人、")}人 计算,而劳动力峰值为 ${d.join("人、")}人,两处引用必须为同一数值`,suggestion:"临时用水高峰人数与劳动力峰值为同一批施工人员的两个引用口径:统一改为劳动力峰值人数,删除自编的用水人数口径。"}]}let ag=/不再另行(?:出现|统计|编制|设置|单列|重复)[^。;;\u000A]{0,40}|以[^。;;\u000A]{0,16}为唯一[^。;;\u000A]{0,24}不再[^。;;\u000A]{0,20}|不再另行[^。;;\u000A]{0,24}/gu;function ah(a){let b=[...a.matchAll(ag)].map(a=>a[0].trim().slice(0,30));return 0===b.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文存在元话语声明句 ${b.length} 处(${[...new Set(b)].slice(0,3).join("、")}):声明≠数据,正文只保留数据不保留口径声明`,suggestion:"删除「不再另行出现其他口径」「不再另行统计累计投入人次」「以 X 为唯一控制基准,不再…」类自我声明句;数据本身的唯一性由数值一致体现,不需要文字声明。"}]}let ai=/(?:[Pp]\s*=\s*[^。;;\n]{0,60}(?:Σ|cosφ|[Kk][12])|[qQ]\s*=\s*[^。;;\n]{0,40}|Σ\s*P|cos\s*φ|[Kk][12]\s*[×*]\s*Σ|[Kk][12]\s*Σ\s*P)/gu;function aj(a){let b=[...a.matchAll(ai)].map(a=>a[0].trim().slice(0,30));return 0===b.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文出现公式形态残留 ${b.length} 处(${[...new Set(b)].slice(0,3).join("、")}):正文只允许计算值不允许计算公式`,suggestion:"删除公式符号(P =、Σ、cosφ、K1、q =),只保留计算结果值:如「用电负荷约 48kW」「高峰日生活用水量约 X m\xb3」;公式推导过程一律不进入正文。"}]}let ak=/暂列金额|暂估价|报价明细|综合单价|清单合价|预留金|投标报价|异常低价|评标基准价/u,al=/(?:税率|增值税)[^。;;\n]{0,12}\d/u,am=/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|最高投标限价|招标控制价/u,an=/材料价格|商务报价|投标总价|合同总价|工程总价/u,ao=["暂列金额与暂估价的报价明细","综合单价与清单合价的商务数据","投标报价与费率标准的商务条款"],ap=["合同估算价与投资估算的项目信息","最高投标限价与招标控制价的公开信息","商务数据不得写入施工组织设计正文的约束说明"];async function aq(a){return(0,g.A)({prototypes:[...ao],negativePrototypes:[...ap],embedDocuments:a})}async function ar(a,b){let c=[],d=await aq(b),e=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();if(!(/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a))&&(ak.test(b)||al.test(b)||an.test(b)))for(let a of(al.test(b)&&c.push("税率/增值税"),b.split(/(?<=[。;;])\s*/u))){let b=a.match(ak)||[],d=am.test(a),f=an.test(a);!(b.length>0)||d||f?(b.length>0&&(d||f)||f&&0===b.length)&&e.push(a):c.push(...b)}}if(e.length>0){let a=await d(e);e.forEach((b,d)=>{if(!a[d])return;let e=b.match(ak)||[],f=b.match(an)||[];c.push(...e.length>0?e:f)})}let f=[...new Set(c)].slice(0,4);return 0===f.length?[]:[{level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`正文出现商务条款数据:${f.join("、")}`,suggestion:"商务数据(暂列金额/暂估价/综合单价/税率等)不得写入施组正文:删除该句,商务口径仅保留在项目信息表中;技术内容如需保留,改写为不含商务参数的正式技术表述。"}]}let as=[{key:"excavation",label:"基坑支护及土方外运",re:/基坑支护/u},{key:"zero",label:"地下结构出正负零",re:/正负零|地下室结构/u},{key:"topping",label:"主体结构封顶",re:/主体(?:结构)?封顶/u},{key:"decoration",label:"装饰装修及幕墙",re:/装饰装修/u},{key:"mep",label:"机电安装及智能化调试",re:/机电安装/u},{key:"completion",label:"室外工程及竣工验收",re:/竣工验收/u}];function at(a){let b=[],c=(a,c,d)=>{let e=(a=>{let b="封顶"===a?"主体结构封顶":a;return as.find(a=>a.re.test(b))?.key})(a);void 0!==e&&Number.isFinite(c)&&c>=1&&c<=3e3&&b.push({key:e,day:c,raw:d})};for(let b of a.matchAll(/第(\d{2,3})日[^。;;\n]{0,14}?完成[^。;;\n,、]{0,12}?(基坑支护及土方外运|装饰装修及幕墙|机电安装及智能化调试|室外工程及竣工验收|地下结构出正负零|主体结构封顶|正负零|封顶)/gu))c(b[2],Number(b[1]),b[0].slice(0,40));for(let b of a.matchAll(/(基坑支护|正负零|封顶|装饰装修|机电安装|竣工验收)(?:(?!(?:第\d{2,3}[日天]|,|、)).){0,8}?完成[^。;;\n]{0,10}?第(\d{2,3})[日天]/gu))c(b[1],Number(b[2]),b[0].slice(0,40));for(let b of a.matchAll(/(主体(?:结构)?封顶)(?!后)(?:(?!(?:第\d{2,3}[日天]|,|、|完成|\||[。;;\n])).){0,20}?第(\d{2,3})日/gu))c(b[1],Number(b[2]),b[0].slice(0,40));for(let b of as){let d=RegExp(`^\\s*\\|\\s*[^|]*${b.re.source}[^|]*\\s*\\|\\s*开工(?:令下发)?后第(\\d{2,3})日\\s*\\|`,"gum");for(let b of a.matchAll(d))c(b[0],Number(b[1]),b[0].slice(0,40))}let d=new Set;return b.filter(a=>{let b=`${a.key}:${a.raw}`;return!d.has(b)&&(d.add(b),!0)})}function au(a){let b=[],c=new Map;for(let b of at(a)){let a=c.get(b.key)||[];a.push(b),c.set(b.key,a)}for(let a of as){let d=c.get(a.key);if(!d||d.length<2)continue;let e=[...new Set(d.map(a=>a.day))];if(e.length<2)continue;let f=[...new Set(d.map(a=>a.raw))].slice(0,4).join("、");b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`节点工期口径矛盾:“${a.label}”节点出现 ${e.map(a=>`${a}日`).join(" 与 ")} 两套口径:${f}`,suggestion:`关键节点完成时间必须全文唯一:以总进度计划表为准统一“${a.label}”节点日期,删除正文/其他表中矛盾的“第N日”表述。`})}return b.slice(0,4)}let av=[{key:"xps",label:"挤塑聚苯板(XPS)厚度",unit:"mm",kind:"number",patterns:[/(?:挤塑聚苯|XPS)(?:(?!(?:宽度|拼缝|不大于|不超过|小于|≤|采用|使用|选用|铺设|粘贴)).){0,40}?(\d+(?:\.\d+)?)\s*mm/gu,/(\d+(?:\.\d+)?)\s*mm[^。;;\n|]{0,10}?(?:挤塑聚苯|XPS)/gu]},{key:"cushion",label:"垫层混凝土强度等级",unit:"C标号",kind:"code",patterns:[/(?<!混凝土)垫层[^。;;\n|]{0,20}?(C\d{2})/gu]},{key:"transformer",label:"箱式变压器容量",unit:"kVA",kind:"number",patterns:[/(\d+)\s*kVA[^。;;\n|]{0,12}?变压器/gu,/变压器[^。;;\n|]{0,12}?(\d+)\s*kVA/gu]},{key:"formwork",label:"模板周转次数",unit:"次",kind:"number",patterns:[/模板周转(?:次数|使用)?[^。;;\n|]{0,15}?(\d+)\s*次/gu]},{key:"block",label:"蒸压加气混凝土砌块强度等级",unit:"A标号",kind:"code",patterns:[/(?:蒸压加气混凝土|加气混凝土)?砌块[^。;;\n]{0,24}?(A\d+(?:\.\d+)?)/gu]},{key:"extinguisher",label:"干粉灭火器数量",unit:"具",kind:"number",patterns:[/灭火器[^。;;\n]{0,24}?(\d+)\s*具/gu]},{key:"pump",label:"潜水泵(提升泵)数量",unit:"台",kind:"number",patterns:[/(?:潜水泵|提升泵)[^。;;\n]{0,24}?(\d+)\s*台/gu]},{key:"firstaid",label:"急救箱数量",unit:"套/个",kind:"number",patterns:[/急救箱[^。;;\n|]{0,24}?(\d+)\s*(?:套|个)/gu]},{key:"scheduleDays",label:"计划总工期",unit:"日历天",kind:"number",patterns:[/^\s*\|\s*计划工期\s*\|\s*(\d{1,4})\s*个?\s*日历天\s*\|/gum,/(?:计划工期|合同工期|工期总日历天数|工期控制|工期目标|总工期)[^。;;\n|]{0,12}?(\d{1,4})\s*个?\s*日历天/gu,/(\d{1,4})\s*个?\s*日历天[^。;;\n|]{0,8}?(?:总工期|倒排|分解|为唯一|完成)/gu]},{key:"prefabRatio",label:"装配率",unit:"%",kind:"number",patterns:[/装配率[^。;;\n|]{0,14}?(\d+(?:\.\d+)?)\s*%/gu,/装配率[^。;;\n|]{0,44}?计算为(\d+(?:\.\d+)?)\s*%/gu,/(\d+(?:\.\d+)?)\s*%(?:(?![,,。;;\n|]).){0,10}?装配率/gu]},{key:"projectCode",label:"项目编号",unit:"",kind:"code",patterns:[/(?:招标项目编号|项目编号)[^。;;\n|]{0,8}?(20\d{2}[A-Z]{1,8}\d{2,10})/gu]},{key:"towerCrane",label:"塔式起重机(塔吊)数量",unit:"台",kind:"number",patterns:[/(?:塔式起重机|塔吊)[^。;;\n|、,]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:塔式起重机|塔吊)/gu]},{key:"hoist",label:"施工升降机(施工电梯)数量",unit:"台",kind:"number",patterns:[/(?:施工升降机|施工电梯)[^。;;\n|、,]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:施工升降机|施工电梯)/gu]},{key:"truckCrane",label:"汽车起重机(汽车吊)数量",unit:"台",kind:"number",patterns:[/(?:汽车起重机|汽车吊)[^。;;\n|、,]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:汽车起重机|汽车吊)/gu]},{key:"rebarCutter",label:"钢筋切断机数量",unit:"台",kind:"number",patterns:[/钢筋切断机[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"rebarBender",label:"钢筋弯曲机数量",unit:"台",kind:"number",patterns:[/钢筋弯曲机[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"slackDays",label:"机动工期(工序衔接与验收缓冲)",unit:"天",kind:"number",patterns:[/(?:机动工期|缓冲)[^。;;\n|]{0,16}?(\d{1,3})\s*天/gu,/预留[^。;;\n|]{0,8}?(\d{1,3})\s*天[^。;;\n|]{0,10}?(?:机动|缓冲)/gu]},{key:"villageCount",label:"自然村数量",unit:"个自然村",kind:"number",patterns:[/(\d+)\s*个(?:美丽宜居)?自然村(?!分组|施工组)/gu]},{key:"circularSaw",label:"圆盘锯数量",unit:"台",kind:"number",patterns:[/圆盘锯[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"excavator",label:"挖掘机数量",unit:"台",kind:"number",patterns:[/(?:履带式)?挖掘机[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?(?:履带式)?挖掘机/gu]},{key:"dumpTruck",label:"自卸汽车数量",unit:"台/辆",kind:"number",patterns:[/自卸汽车[^。;;\n、,]{0,40}?(\d+)\s*(?:台|辆)/gu,/(\d+)\s*(?:台|辆)[^、,。;\n|]{0,12}?自卸汽车/gu]},{key:"roller",label:"压路机数量",unit:"台",kind:"number",patterns:[/(?:振动)?压路机[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?(?:振动)?压路机/gu]},{key:"rammer",label:"蛙式打夯机数量",unit:"台",kind:"number",patterns:[/蛙式打夯机[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?蛙式打夯机/gu]},{key:"mixerTruck",label:"混凝土搅拌运输车数量",unit:"台",kind:"number",patterns:[/混凝土搅拌运输车[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?混凝土搅拌运输车/gu]},{key:"concreteMixer",label:"混凝土搅拌机数量",unit:"台",kind:"number",patterns:[/混凝土搅拌机[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?混凝土搅拌机/gu]},{key:"sprinkler",label:"洒水车数量",unit:"台/辆",kind:"number",patterns:[/洒水车[^。;;\n、,]{0,40}?(\d+)\s*(?:台|辆)/gu,/(\d+)\s*(?:台|辆)[^、,。;\n|]{0,12}?洒水车/gu]},{key:"aerialLift",label:"高空作业车数量",unit:"台",kind:"number",patterns:[/高空作业车[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?高空作业车/gu]},{key:"pondBackfill",label:"沟塘回填方量",unit:"m\xb3",kind:"number",patterns:[/(?:沟塘|水塘|池塘|河塘|鱼塘|塘内|渠道|淤泥|流砂|清淤)[^。;;\n|]{0,30}?回填方(?:总量)?[^。;;\n|]{0,16}?(\d+(?:\.\d+)?)\s*m[3³]/gu,/(?:沟塘|水塘|池塘|河塘|鱼塘|塘内|渠道|淤泥|流砂|清淤)[^;;\n|]{0,30}?回填方总量[^。;;\n|]{0,16}?(\d+(?:\.\d+)?)\s*m[3³]/gu,/回填方(?:总量)?[^。;;\n|]{0,16}?(\d+(?:\.\d+)?)\s*m[3³][^。;;\n|]{0,30}?(?:沟塘|水塘|池塘|河塘|鱼塘|塘内|渠道|淤泥|流砂|清淤)/gu]},{key:"trenchClearing",label:"沟槽槽底人工清底预留厚度",unit:"mm",kind:"number",patterns:[/槽底预留(\d+)mm人工清底/gu]},{key:"houseExcavation",label:"距房屋人工开挖保护距离",unit:"m",kind:"number",patterns:[/距房屋(\d+(?:\.\d+)?)m(?:内|范围内)[^。;;\n|]{0,10}?人工开挖/gu]}],aw={pump:/潜水泵|提升泵/u,towerCrane:/塔式起重机|塔吊/u,hoist:/施工升降机|施工电梯/u,truckCrane:/汽车起重机|汽车吊/u,rebarCutter:/钢筋切断机/u,rebarBender:/钢筋弯曲机/u,circularSaw:/圆盘锯/u,excavator:/挖掘机/u,dumpTruck:/自卸汽车|自卸车/u,roller:/压路机/u,rammer:/蛙式打夯机|打夯机/u,mixerTruck:/混凝土搅拌运输车|搅拌车/u,concreteMixer:/混凝土搅拌机/u,sprinkler:/洒水车/u,aerialLift:/高空作业车/u,extinguisher:/灭火器/u,firstaid:/急救箱/u};function ax(a,b){let c=(0,i.Dq)(b);if(void 0===c)return[];let d=new Set;for(let b of a.matchAll(/养护[^。;;\n|]{0,16}?([一二两三四五六七八九十]+|\d{1,2})\s*年/gu)){let c=a.lastIndexOf("\n",b.index)+1,e=a.indexOf("\n",b.index);if(-1===e&&(e=a.length),aA.test(a.slice(c,e)))continue;let f=(0,i.a0)(b[1]??"");void 0!==f&&f>0&&d.add(f)}if(0===d.size)return[];let e=[...d].filter(a=>a!==c);return 0===e.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`绿化养护期清单红线:正文出现养护期 ${e.map(a=>`${a}年`).join("、")},与工程量清单锁定口径「养护 ${c} 年」矛盾`,suggestion:`绿化养护期必须与工程量清单一致(清单锁定「养护 ${c} 年」):将正文所有养护期表述统一为 ${c} 年并删除矛盾口径;养护期属清单实质性条款,不得以常规值替代。`}]}function ay(a,b){let c=(0,i.Mb)(b);if(void 0===c)return[];let d=[];for(let b of a.matchAll(/路灯[^。;;\n|]{0,28}?(\d+)\s*(?:套|盏|杆)/gu)){if(/批/u.test(b[0]))continue;let c=a.lastIndexOf("\n",b.index)+1,e=a.indexOf("\n",b.index);if(-1===e&&(e=a.length),aA.test(a.slice(c,e)))continue;let f=Number(b[1]);Number.isFinite(f)&&f>0&&d.push(f)}if(0===d.length)return[];let e=d.length>=2?d.reduce((a,b)=>a+b,0):d[0]??0;return e===c?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`路灯数量口径矛盾:正文路灯配置合计约 ${e} 套,与工程量清单锁定口径 ${c} 套不一致(相差 ${Math.round(Math.abs(e-c)/c*100)}%)`,suggestion:`路灯数量必须以工程量清单为准(清单锁定 ${c} 套):按清单核定各型号路灯数量并统一正文全部表述,删除与清单矛盾的套数口径。`}]}let az=/\d+(?:\.\d+)?\s*(?:mm|kVA|次|具|台|套|个)\s*[//]\s*\d+/u,aA=/不再出现|不得出现|严禁出现|避免出现|不采用|未采用|予以删除|已删除|取消|纠正为|更正为/u,aB=/再浇筑|再浇|后浇筑|后浇|然后浇筑|然后再浇|上层|上部|面层浇筑|其上浇筑|浇筑完成后再/u,aC=/分层厚度|分层浇筑|分层振捣|焊缝高度|焊缝厚度|焊脚尺寸|锚固深度|保护层厚度|搭接长度|锚固长度|预留|踏步高度|踏步宽度|踏步高|踏步宽|台阶高度|台阶宽度|内厚|外厚|抹面|抹灰|粉刷|垫高|架空|离地|支垫/u,aD=/分别为|分别对应|分别用于|分别按|依次为|依次/u,aE="女儿墙|外墙|内墙|隔墙|地梁|圈梁|构造柱|过梁|垫层|承台|筏板|底板|基础|主体|梁|柱|墙|楼板|屋面|地面|楼面|顶板|楼梯|阳台|雨篷|台阶|散水|坡道|找坡|找平|保护层|防水层|保温层|隔汽层|地坪|办公区|生活区|库房|加工区|堆放区|驻地|周转场|停放区|仓库|材料库|路基|沟槽|基槽",aF=/每[台辆架套部][一-龥A-Za-z0-9]{1,8}/gu,aG=/项目部|总协调|工人生活|施工办公|办公|生活|临时|总部|标段|片区/u;function aH(a,b,c){let d=b.slice(Math.max(0,c-8),c),e=d.match(aG);if(!e||void 0===e.index)return a;let f=d.slice((e.index??0)+e[0].length);return/^[的施工区域现场]{0,3}$/u.test(f)?`${e[0]}${a}`:a}function aI(a,b,c,d){let e=a.indexOf("\n",b),f=a.slice(d,-1===e?a.length:e);if(/^\s*\|/u.test(f)&&/\|\s*$/u.test(f.trim())){let a=f.replace(/[\u4e00-\u9fa5]{2,6}阶段/gu,""),b=[...a.matchAll(RegExp(aE,"gu"))],c=b[b.length-1];return c?aH(c[0],a,c.index??0):""}let g=Math.max(d,b-16),h=a.slice(g,b),i=Math.max(h.lastIndexOf(","),h.lastIndexOf("、"),h.lastIndexOf(","),h.lastIndexOf(";"),h.lastIndexOf(";"),h.lastIndexOf("。")),j=a.slice(i>=0?g+i+1:g,b+c.length).replace(/[\u4e00-\u9fa5]{2,6}阶段/gu,""),k=[...j.matchAll(aF)];if(k.length>0)return k[k.length-1]?.[0]??"";let l=[...j.matchAll(RegExp(aE,"gu"))],m=l[l.length-1];return m?aH(m[0],j,m.index??0):""}function aJ(a){let b=[];for(let c of av){let d=new Map,e=new Map;for(let b of c.patterns)for(let f of a.matchAll(b)){let b=f[0].slice(0,40);if("trenchClearing"===c.key){let c=Math.max(a.lastIndexOf("。",f.index),a.lastIndexOf(";",f.index),a.lastIndexOf("\n",f.index))+1;if(/基槽|围栏|菜园/u.test(a.slice(c,(f.index||0)+b.length)))continue}if(az.test(b)||aB.test(b))continue;if("scheduleDays"===c.key){let c=b.indexOf(String(f[1]));if(c>=0&&/(?:阶段|第\d+日|至第|共|集中)/u.test(a.slice(Math.max(0,(f.index||0)+c-16),(f.index||0)+c)))continue}if(/按不少于|不少于/u.test(b))continue;let g=a.lastIndexOf("\n",f.index)+1,h=a.indexOf("\n",f.index);if(-1===h&&(h=a.length),aA.test(a.slice(g,h)))continue;let i=aI(a,f.index||0,b,g),j=d.get(i)||new Set;j.add(f[1]),d.set(i,j);let k=e.get(i)||[];k.push(b),e.set(i,k)}let f=d.get("")||new Set,g=[...d.keys()].filter(a=>""!==a);if(f.size>0&&1===g.length){let a=d.get(g[0]||"");if(a){for(let b of f)a.add(b);let b=e.get(g[0]||"")||[];b.push(...e.get("")||[]),e.set(g[0]||"",b),d.delete(""),e.delete("")}}for(let[a,f]of d){if(f.size<2)continue;let d=e.get(a)||[];if("code"===c.kind)b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料参数口径矛盾:“${c.label}”${a?`在部位「${a}」`:"在未标注部位语境下"}出现 ${[...f].map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(d)].slice(0,3).join("、")}`,suggestion:`同一材料同一部位只允许一个口径:以设计图纸/工程量清单为准统一“${c.label}”${a?`在部位「${a}」的取值`:""},删除矛盾表述;不同部位允许不同规格,不得全文归一为一种。`});else{let e=[...f].map(Number).filter(Number.isFinite);if(e.length<2)continue;b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料/设备数量口径矛盾:“${c.label}”${a?`在部位「${a}」`:"在未标注部位语境下"}出现 ${e.map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(d)].slice(0,3).join("、")}`,suggestion:`同一设备/材料同一部位只允许一个口径:以应急物资清单/施工部署为准统一“${c.label}”${a?`在部位「${a}」的取值`:""},删除矛盾表述;总量与分区配置属不同口径,不得互相归一。`})}}}return b.slice(0,16)}function aK(a){return/^C\d{2,3}$/.test(a)?/C\d{2,3}/u:/^M\d/.test(a)?/M\d+(?:\.\d+)?/u:/^P\d{1,2}$/.test(a)?/(?<![A-Za-z])P\d{1,2}/u:/^A\d+(?:\.\d+)?$/.test(a)?/A\d+(?:\.\d+)?/u:/^B\d+(?:\.\d+)?$/.test(a)?/B\d+(?:\.\d+)?/u:/^HRB/.test(a)||/^HPB/.test(a)?/HRB\d{3,4}|HPB\d{3}/u:/mm$/.test(a)?/\d+(?:\.\d+)?\s*mm/u:null}function aL(a,b){let c=[];if(!b)return c;let d=[...new Set(Object.values(b).flat().map(a=>a.location).filter(Boolean))];for(let e of Object.values(b)){if(e.length<2)continue;let b=new Set;for(let f of e){let{location:g,spec:h}=f;if(!g||!h||g.length<2)continue;let i=aK(h);if(!i)continue;let j=`${g}|${i.source}`;if(b.has(j))continue;b.add(j);let k=new Set(e.filter(a=>a.location===g).map(a=>{let b=aK(a.spec);if(b&&b.source===i.source)return a.spec;let c=RegExp(`^(?:${i.source})`,"u").exec(a.spec);return c?c[0]:null}).filter(a=>null!==a)),l=RegExp(`${g.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}[^。;;
43
- |]{0,40}?(${i.source})`,"gu");for(let b of a.matchAll(l)){let f=b[1]||"";if(aB.test(b[0])||aC.test(b[0])||aD.test(b[0]))continue;let h=a.slice(Math.max(0,(b.index||0)-40),b.index||0);if(aD.test(h))continue;let j=a.slice((b.index||0)+b[0].length,(b.index||0)+b[0].length+10);if(/范围内|范围/u.test(j)||/(?:工作宽度|作业宽度|操作空间|工作面)/u.test(j)||/^、\s*\d/u.test(j)||/^\s*厚(?:\s*[\d::]|覆膜|木|胶合)/u.test(j)||RegExp(`^(?:或|[、,,/])\\s*(?:${i.source})`,"u").test(j))continue;let l=a.slice(Math.max(0,b.index||0),(b.index||0)+b[0].length);if(/(?:标高|高程|平整度|轴线|垂直度|高差)[^。;;\n|]{0,10}(?:偏差|误差|不超过|不得大于|不大于)/u.test(l.slice(-28)))continue;let m=b[0].indexOf(f);if(m>g.length&&/(?:涵头|面层|基层|垫层|管基|基础|梁|板|柱|墙|地坪|路面)/u.test(b[0].slice(g.length,m)))continue;let n=b.index||0,o=d.find(b=>b.length>g.length&&b.endsWith(g)&&a.slice(n+g.length-b.length,n+g.length)===b);if(o&&new Set(e.filter(a=>a.location===o&&aK(a.spec)?.source===i.source).map(a=>a.spec)).has(f)||k.has(f))continue;let p=1===k.size?[...k][0]:void 0,q=n+m;if(c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规格错位:“${g}”使用的规格 ${f} 与工程量清单权威(${[...k].join("/")})不一致`,suggestion:`按工程量清单将“${g}”的规格统一为 ${[...k].join("/")};同一材料不同部位允许不同规格,但同一部位不得混用其他部位的规格。`},location:g,replacement:p?{start:q,end:q+f.length,replacement:p,detail:`规格错位“${g}” ${f}→${p}(以工程量清单锁定口径为准)`}:void 0}),c.length>=8)return c}}}return c.slice(0,8)}function aM(a,b){return aL(a,b).map(a=>a.issue)}let aN=/桩基|灌注桩|钻孔桩|打桩|成桩|桩机/u;function aO(a){let b=function(a){let b=[];for(let c of[...a.matchAll(/^#{3,4}\s+[^\n]*(?:地基与基础)[^\n]*$/gmu)]){let d=(c.index||0)+c[0].length,e=a.slice(d).search(/^#{2,4}\s+/mu),f=a.slice(d,e>=0?d+e:a.length);b.push(f)}return b}(a);if(0===b.length||b.some(a=>aN.test(a)))return[];let c=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();!(!a||/^#{1,6}\s/u.test(a))&&aN.test(b)&&c.push(a.slice(0,48))}let d=[...new Set(c)].slice(0,5);return d.length<2?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`桩基表述残留:地基与基础章节施工流程为筏板/独立基础(无桩基工序),但全文另有 ${d.length} 处桩基表述:${d.join("、")}`,suggestion:"本项目基础形式不含桩基:删除全文所有桩基/桩机表述,进度计划表关键线路工序、质量验收划分表、隐蔽验收表均改为本项目实际基础工序(垫层/底板钢筋/混凝土)。"}]}let aP=/^\s*\|\s*计划工期\s*\|([^|\n]*)\|/u,aQ=/工期延误|延误|违约|切除|赔偿|罚款|解除|扣减/u;function aR(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=aP.exec(c);if(!a)continue;let d=(a[1]??"").trim();d&&aQ.test(d)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基本信息表「计划工期」字段错填违约条款文字:“${d.slice(0,40)}”`,suggestion:"「计划工期」字段应填日历天数值(与招标文件前附表一致);工期延误违约条款文字应放在工期风险管控章节,不得占用基本信息表字段。"})}return b.slice(0,2)}let aS=/基础|支护|围护|桩|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|标高|深度|形式|体系/u;function aT(a){let b=a.replace(/\s+/gu,""),c=new Set;for(let a of b.matchAll(/([一-龥]{2,8})\/([一-龥]{2,8})/gu)){let d=aS.test(a[1])||aS.test(a[2]),e=(0,j.m4)(a[1],a[2]);if(!d&&!e)continue;let f=Math.max(0,(a.index||0)-12),g=Math.min(b.length,(a.index||0)+a[0].length+12),h=b.slice(f,g);!/管线|管道|电缆|给水|排水/u.test(h)&&(!/采用|形式|方式|方案|选用|拟用|拟采用|为/u.test(h)&&(!e||/不得|禁止|不应|不宜|避免|严禁|无需/u.test(h))||c.add(`“${a[1]}/${a[2]}”`))}for(let a of b.matchAll(/[((]\s*或[^))]{1,48}[))]/gu)){let d=a[0].slice(1,-1);if(!/按图纸|按实|按图|待定|另行|视[^,。;]{0,8}而定|根据实际/u.test(d))continue;let e=Math.max(0,(a.index||0)-20),f=b.slice(e,(a.index||0)+a[0].length);aS.test(f)&&c.add(a[0].slice(0,30))}for(let a of b.matchAll(/([一-龥]{2,8})或([一-龥]{2,8})/gu)){let d=aS.test(a[1])||aS.test(a[2]),e=(0,j.m4)(a[1],a[2]);if(!d&&!e)continue;let f=Math.max(0,(a.index||0)-12),g=b.slice(f,(a.index||0)+a[1].length);if(/管线|管道|电缆|给水|排水/u.test(g)||!/按|采用|选用|拟用|拟采用|方案|为/u.test(g)&&(!e||/不得|禁止|不应|不宜|避免|严禁|无需/u.test(g)))continue;let h=b.slice(Math.max(0,(a.index||0)-6),a.index||0);if(/临时/u.test(h+a[0])&&/支护|围护|放坡|坡率|开挖/u.test(a[0])||/围挡|警示|防护栏|爬梯|栈桥|便道/u.test(a[0]))continue;let i=a[1].replace(/^.*?(地下连续墙|钢板桩|灌注桩|支护桩|土钉墙|基础|支护|围护|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|形式|体系)/u,"$1");c.add(`${i}或${a[2]}`)}return 0===c.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`关键设计决策两可表述:${[...c].join("、")} 以并列/悬置形态表述,基础形式、支护形式等关键决策必须在正文中唯一确定`,suggestion:"以设计图纸/勘察报告/工程量清单为准锁定唯一决策并删除两可表述:明确写出本项目基础形式与支护形式的具体做法(如「基础形式为筏板基础」「基坑支护采用放坡+喷锚」),禁止「或…按图纸实施」类悬置话术。"}]}function aU(a){let b=a.replace(/\s+/gu,"");if((b.match(/基坑|开挖|支护/gu)||[]).length<3)return[];for(let a of b.matchAll(/(?:深度|标高)[^。;,,]{0,12}-?\d+(?:\.\d+)?[^。;,,]{0,6}/gu)){let b=a[0];if(!/(?:超过|大于|小于|不[大低小]于|不低于|低于|高于|按|倍|依据|详见|参考|示意|每|以上|以下|偏差|±0|0\.000)/u.test(b)&&!/\d+(?:\.\d+)?\s*(?:h|小时|天|日|min|周|月|昼夜)/u.test(b))return[]}return[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:"基坑深度数值未锁定:正文已有基坑支护/开挖成稿内容,但全文未出现「深度/标高+数值」的确定性表述(比较式阈值如「超过3m」不视为锁定),危大工程分级判定失去依据",suggestion:"从绑定资料(地质勘察报告/基坑支护设计图/基础平面图)锁定基坑开挖深度数值写入基坑支护小节;深度 ≥5m 的深基坑须同步标注危大工程分级与专家论证要求,禁止以「按图纸确定」回避深度数值。"}]}function aV(a,b){let c=(0,i.z4)(b);if(void 0===c||c<3)return[];let d=[];return c>=3&&!/危大工程/u.test(a)&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`危大工程判定缺失:资料基坑开挖深度 ${c}m(≥3m),正文必须出现危大工程判定标注`,suggestion:`依据住建部令第37号,开挖深度≥3m 属危大工程:在基坑支护/危大工程清单小节写明本工程实际深度 ${c}m 与危大工程判定结论,不得只写判定规则不落地本项目。`}),c>=5&&!/超过一定规模/u.test(a)&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`超危大工程判定缺失:资料基坑开挖深度 ${c}m(≥5m),正文必须出现「超过一定规模」判定与专家论证要求`,suggestion:`开挖深度≥5m 属超过一定规模的危大工程:写明本工程深度 ${c}m 对应分级结论,专项施工方案必须经专家论证,不得只写判定规则不落地分级。`}),d}function aW(a,b){let c=[b.canonical?.byKey.foundation_support_form?.value,...(b.drawings||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.project||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.preciseFacts||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`)].filter(Boolean).filter(a=>/基坑支护形式|基坑支护方式|支护形式|支护方式|土钉|放坡|喷锚|护坡/u.test(a)&&!/监测|监测频次|闭环|基坑开挖深度/u.test(a));if(0===c.length)return[];let d=[];for(let a of c)for(let b of["土钉墙","放坡","喷锚","挂网喷浆","排桩","灌注桩","地下连续墙","内支撑","锚杆","锚索"])a.includes(b)&&d.push(b);let f=[],g=/不采用|未采用|不设置|未设置|不使用|不宜采用|不得采用|不再出现|不得出现|严禁出现|避免出现|已删除|取消/u,h=["支护桩","冠梁","钻孔灌注桩","灌注桩","地下连续墙","排桩","咬合桩","内支撑"].filter(b=>(b=>{let c=RegExp(b,"gu");for(let b of a.matchAll(c)){let c=a.lastIndexOf("\n",b.index)+1,d=a.indexOf("\n",b.index);-1===d&&(d=a.length);let e=a.slice(c,d).slice(Math.max(0,b.index-c-12),b.index-c);if(!g.test(e))return!0}return!1})(b)&&!d.includes(b));return h.length>0&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`支护形式与资料矛盾:正文出现资料中不存在的支护体系词 ${h.join("、")}`,suggestion:`资料基坑支护形式为「${d.join("、")||c[0]?.slice(0,60)}」:删除编造的支护桩/冠梁/灌注桩类表述与对应参数(垂直度偏差/冠梁顶面标高等),按资料支护形式改写。`}),0===d.filter(b=>RegExp(b,"u").test(a)).length&&/基坑|支护/u.test(a)&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`支护形式未落地:资料基坑支护形式「${d.join("、")||c[0]?.slice(0,60)}」未在正文中出现`,suggestion:`在基坑支护小节写明本工程实际支护形式(${d.join("、")})及对应工艺参数(土钉长度/间距/坡度等),不得以泛化表述回避。`}),f}let aX=["塔式起重机","施工升降机","施工电梯","汽车起重机","汽车吊","混凝土泵车","混凝土泵","挖掘机","装载机","推土机","压路机","平地机","空压机","注浆机","锚杆钻机","混凝土喷射机","喷射机","吊篮","钢筋加工设备","塔吊"],aY=/挖掘机|空压机|注浆机|锚杆钻机|混凝土喷射机|喷射机|推土机/u;function aZ(a,b){let c=function(a){let b=[];for(let c of a.matchAll(/第(\d{2,3})日[^。;;\n|]{0,8}?(?:进场|投入使用|安装|调试)/gu)){let d=a.slice(Math.max(0,(c.index||0)-24),c.index||0),e=aX.find(a=>d.includes(a));e&&b.push({equipment:e,day:Number(c[1]),raw:`${d.slice(-18)}${c[0].slice(0,20)}`})}let c=new Set;return b.filter(a=>{let b=`${a.equipment}:${a.raw}`;return!c.has(b)&&(c.add(b),!0)})}(a);if(0===c.length)return[];let d=[],f=function(a,b){for(let c of[a,...(b.schedule||[]).map(a=>`${a.key||""}${(0,e.lG)(a.value)}`)]){let a=/(?:计划工期|合同工期|总工期|工期总日历天数)[^\d。;;\n|]{0,12}(\d{1,4})\s*个?\s*日历天/u.exec(c);if(a){let b=Number(a[1]);if(Number.isFinite(b)&&b>=30&&b<=3e3)return b}}}(a,b);if(void 0!==f){let a=c.filter(a=>a.day>=f);a.length>0&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备进场时间荒谬:${a.slice(0,3).map(a=>`「${a.equipment} 第${a.day}日进场」`).join("、")} 已达/超过总工期(${f}日历天),工程结束时设备尚未进场`,suggestion:`以总进度计划为准核对设备进场计划:大型施工设备必须在总工期结束前进场并完成使用,${a.map(a=>a.equipment).join("、")} 的进场日应提前至工程开始阶段,删除矛盾的尾期进场表述。`})}let g=at(a).filter(a=>"excavation"===a.key).map(a=>a.day);if(g.length>0){let a=Math.min(...g),b=c.filter(b=>aY.test(b.equipment)&&b.day>a);b.length>0&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备进场工序倒挂:${b.slice(0,3).map(a=>`「${a.equipment} 第${a.day}日进场」`).join("、")} 晚于基坑支护及土方外运完成节点(第${a}日),基坑阶段设备未在工序开始前进场`,suggestion:`基坑阶段专用设备必须在基坑开挖/支护开始前完成进场与报验:将 ${b.map(a=>a.equipment).join("、")} 的进场日调整为早于基坑支护完成节点(第${a}日)的日期,删除工序倒挂表述。`})}return d.slice(0,3)}let a$=/[\u4e00-\u9fa5]{2,10}(?:杯|奖)(?![励金惩罚项])/gu,a_=/优质工程|文明工地|样板|标准化|观摩|示范|精品工程|结构优质|省优|市优/u;function a0(a){let b=a;for(;;){let a=b.replace(/^(?:争创|争取|力争|争获|确保|获得|创建|力创|评为|荣获|标为|目标为|承诺|为)/u,"");if(a===b||!a)break;b=a}return b}let a1=/^\s*\|[\s:|-]+\|/u;function a2(a){let b=a.split(/\r?\n/u),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>a1.test(a),f=0;for(;f<b.length;){let a;if(!/^\s*\|/u.test(b[f])){f+=1;continue}let g=f;for(;g<b.length&&/^\s*\|/u.test(b[g]);)g+=1;let h=b.slice(f,g),i=0,j=0,k=0,l=b=>{if(!a)return;let e=h.slice(j,b);0!==e.length&&c.push({startLine:f+i,endLine:f+b-1,header:a,firstCol:e.map(a=>d(a)[0]?.replace(/[*_`]/gu,"").trim()||"").filter(Boolean),dataRows:e.map(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())),dataCells:e.flatMap(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())).filter(Boolean),bodyChars:e.join("").length,raw:h.slice(i,b)})};for(;k<h.length;){if(k+1<h.length&&e(h[k+1]||"")){l(k),a=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()),i=k,j=k+2,k+=2;continue}if(a&&k>j){let b=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()).filter(Boolean);if(a3(b,a)>=.6&&k+1<h.length&&!e(h[k+1]||"")){l(k),a=b,i=k,j=k+1,k+=1;continue}}k+=1}l(h.length),f=g}return c}function a3(a,b){if(0===a.length||0===b.length)return 0;let c=new Set(a),d=new Set(b);return[...c].filter(a=>d.has(a)).length/new Set([...c,...d]).size}function a4(a,b){if(0===a.length)return 0;let c=[...b],d=0;for(let b of a){let a=c.indexOf(b);a>=0&&(c.splice(a,1),d+=1)}return d/a.length}let a5=/^[\d,,.]+\s*(?:人|个|台|具|套|处|支|辆|班|组|项)?$/u,a6=a=>a.filter(a=>!a5.test(a));function a7(a){let b=[];for(let c of a2(a)){let a=c.dataRows;if(a.length<4)continue;let d=a=>(a[0]||"").trim(),e=(a,b)=>a3(a,b);for(let f=Math.floor(a.length/2);f<=Math.ceil(a.length/2);f+=1){let g=a.slice(0,f),h=a.slice(f);if(g.length<2||h.length<2)continue;let i=0,j=-1;for(let a of h){let b=d(a);if(b){for(let c=j+1;c<g.length;c+=1)if(d(g[c])===b&&e(a,g[c])>=.5){i+=1,j=c;break}}}let k=i/h.length;if(!(k<.8)){b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"local_deterministic",message:`表格内部数据行重复:第 ${c.startLine+1}~${c.endLine+1} 行表格(表头:${c.header.slice(0,3).join("|")})数据行两遍粘贴(${f} 行 + ${h.length} 行,重复匹配率 ${Math.round(100*k)}%)`,suggestion:`删除第二遍重复数据行(保留第一遍 ${f} 行),删除后表格仅保留一份完整数据。`});break}}}return b}function a8(a){let b=[],c=a2(a);if(c.length<2)return b;for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a],f=c[d],g=e.header.length>0&&e.header.length===f.header.length&&e.header.every((a,b)=>a===f.header[b]),h=a3(e.header,f.header),i=a3(e.firstCol,f.firstCol),j=a3(e.dataCells,f.dataCells),k=Math.max(a4(a6(e.dataCells),a6(f.dataCells)),a4(a6(f.dataCells),a6(e.dataCells)));(g&&j>=.6||h>=.7&&i>=.6||i>=.6&&k>=.6)&&b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`表格重复:第 ${e.startLine+1}~${e.endLine+1} 行表格(表头:${e.header.slice(0,3).join("|")})与第 ${f.startLine+1}~${f.endLine+1} 行表格高度重复(表头重合 ${Math.round(100*h)}%、数据重合 ${Math.round(100*j)}%、首列重合 ${Math.round(100*i)}%)`,suggestion:"同一文档内同主题表格只保留信息最全的一张:删除重复表格(保留字段与数据行更多的那张),删除后核对章节表格计划仍被覆盖。"})}return b.sort((a,b)=>{let c=a=>Number(a.match(/数据重合\s*(\d+)%/u)?.[1]??0);return c(b.message)-c(a.message)}).slice(0,5)}function a9(a){let b=a.replace(/\s+/gu,"");return b.length>=40?b:void 0}let ba=15;function bb(a){let b=function(a){let b=[];for(let c of a.split(/\n\s*\n/u)){let a=c.trim();if(!a)continue;let d=a.split(/\n/u).filter(a=>{let b=a.trim();return b&&!/^#{1,6}\s/u.test(b)&&!b.startsWith("|")}).join("\n"),e=[];for(let a of d.split(/[。!?!?]/u)){let b=a.trim().replace(/\s+/gu,"");if(b.length<ba)continue;let c=e.findIndex(a=>a.sentence===b||a.sentence.length>b.length&&a.sentence.length-b.length<=ba&&a.sentence.endsWith(b));c>=0?e[c].count+=1:e.push({sentence:b,count:1})}for(let a of e)a.count>=2&&b.push({sentence:a.sentence,count:a.count})}return b}(a);return 0===b.length?[]:b.slice(0,3).map(({sentence:a,count:b})=>({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"local_deterministic",message:`段落内句子复读 ${b} 次:“${a.slice(0,30)}…”`,suggestion:"同一段落内相同句子只保留首次出现,删除段尾复读的重复句(确定性修复器已接入自动剥离)。"}))}let bc=/^(.+?)(?:((?:\d+|[一二三四五六七八九十]+)))+$/u;function bd(a){let b=[];for(let c of a.matchAll(/^###\s+(.+)$/gmu)){let d=c[1].trim();bc.test(d)&&b.push({raw:d,index:a.lastIndexOf("\n",c.index??0)+1})}return b}function be(a){let b=bd(a);return 0===b.length?[]:b.slice(0,3).map(({raw:a})=>({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"local_deterministic",message:`目录小节标题含防撞名编号后缀:“${a}”`,suggestion:"正式投标文件目录不允许「(1)(2)」编号后缀小节:确定性修复器已接入(按主题域重命名为语义化标题或合并同基线拆半小节)。"}))}let bf=/第(\d{1,3})日(?:至|到|~|~|—|-)第(\d{1,3})日/gu;function bg(a){let b=[];for(let c of a.matchAll(bf))Number(c[1])<=Number(c[2])||b.push({start:c.index??0,end:(c.index??0)+c[0].length,raw:c[0]});return b}function bh(a){let b=bg(a);return 0===b.length?[]:b.slice(0,3).map(({raw:a})=>({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`时间区间倒挂:“${a}”起点大于终点,属时间拼接病句`,suggestion:"删除倒挂区间起点,仅保留终点日期表述(确定性修复器已接入自动剥离)。"}))}function bi(a){let b=[],c=a.split(/\r?\n/u),d=new Map,e=[],f=()=>{let a=a9(e.join(""));if(a){let b=(d.get(a)||0)+1;d.set(a,b)}e=[]};for(let a of c){let b=a.trim();if(!b||/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)){f();continue}if(/^[-*•]\s/u.test(b)){f(),e.push(b),f();continue}e.push(b)}for(let[a,c]of(f(),[...d.entries()].filter(([,a])=>a>=2).slice(0,3)))b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`段落完全重复 ${c} 次:“${a.slice(0,40)}…”`,suggestion:"同一段落正文只保留首次出现处,删除其余重复段落;确需前后呼应时改写为差异化表述并压缩篇幅。"});return b}function bj(a,b,c){let d=new Set;for(let a of[...b.quality,...b.project,...b.schedule])for(let b of(0,e.lG)(a.value).matchAll(a$))d.add(a0(b[0]));if(c?.extracted)for(let a of c.entries)for(let b of a.text.matchAll(a$))d.add(a0(b[0]));if(0===d.size)return[];let f=new Set;for(let b of a.matchAll(a$)){let a=a0(b[0]);!d.has(a)&&(a_.test(a)||f.add(a))}return 0===f.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`奖项表述与招标文件白名单不符:正文出现 ${[...f].join("、")},均未出现在招标文件评分项要求或绑定资料中`,suggestion:"创优目标必须以招标文件原文为准逐字落位(如「确保黄山杯」),禁止自行编造或替换为其他奖项名称;白名单外的奖项表述一律删除或替换为招标原文奖项。"}]}function bk(a){let b=a.split(/\r?\n/u),c=new Set;for(let a of b){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(!b)continue;let d=b[2].trim();(0,h.Xp)(d)&&c.add(d)}if(0===c.size)return[];let d=[...c];return[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`正文出现投标人资格内容小节:${d.slice(0,3).map(a=>`“${a}”`).join("、")}${d.length>3?" 等":""}(资格审查内容不属于施工组织设计,属资格文件/商务文件范畴)`,suggestion:"删除资格内容小节(标题与正文整体删除),不得以改写、合并、降级方式保留;正文如需提及安全生产许可证等证照,只能以施工管理口径表述(如“按规定持证上岗”),不得成节铺陈资格核验内容。"}]}let bl=/人[、,,]材[、,,]机/u,bm=/(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施/u;function bn(a){let b=a.match(bm)?.[1];return b||(/劳动力|人员|作业人员|劳务/u.test(a)?"人":/材料|物资|周转/u.test(a)?"材":/机械|设备|机具|塔吊|起重机/u.test(a)?"机":void 0)}function bo(a){let b=[],c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){let d,e=/^##\s+(.+)$/u.exec(c[a].trim());if(!e||!bl.test(e[1]))continue;let f=c.length;for(let b=a+1;b<c.length;b+=1)if(/^##\s+/u.test(c[b].trim())){f=b;break}let g=[];for(let e=a+1;e<f;e+=1){let a=/^###\s+(.+)$/u.exec(c[e].trim()),f=/^####\s+(.+)$/u.exec(c[e].trim());if(a){d={subject:bn(a[1]),title:a[1].trim()},g.push(d);continue}if(f&&d?.subject){let a=bn(f[1]);a&&a!==d.subject&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章层级错位:小节“${f[1].trim()}”挂在“${d.title}”之下(${"人"===a?"人":"材"===a?"材":"机"}的保障体系应独立成二级小节,不得并入${"人"===d.subject?"人":"材"===d.subject?"材":"机"}的保障体系)`,suggestion:`将“${f[1].trim()}”提升为独立二级小节,或将其内容合并到对应主题的二级小节。`})}}let h=new Set(g.map(a=>a.subject).filter(Boolean)),i=["人","材","机"].every(a=>h.has(a));(g.length<3||!i)&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章结构不完整:“${e[1].trim()}”仅 ${g.length} 个二级小节(人/材/机的保障体系未全部独立成节)`,suggestion:"拆分为“确保人的保障体系与措施”“确保材的保障体系与措施”“确保机的保障体系与措施”三个二级小节。"})}return b}async function bp(a,b,c={}){let d=[],e=(a,b)=>1e-6>Math.abs(a-b),f=[];for(let c of b){let b=c.groups??[];if(b.length<2||new Set(b.map(a=>Math.round(100*a.value))).size<2)continue;let d=RegExp((0,i.Lp)(c.name),"gu"),e=RegExp(`(?<![\\dA-Za-z])(\\d(?:[\\d,]*(?:\\.\\d+)?))\\s*${(0,i.YZ)(c.unit)}(?![0-9a-zA-Z])`,"gui"),g=[];for(let f of a.matchAll(d)){let d=f.index??0,h=d+f[0].length,i=a.lastIndexOf("\n",d)+1,j=a.indexOf("\n",d);if(-1===j&&(j=a.length),/^\s*\|/u.test(a.slice(i,j)))continue;let l=Math.max(i,d-24),m=a.slice(l,d),n=Math.max(m.lastIndexOf("。"),m.lastIndexOf(";"),m.lastIndexOf(";")),o=n>=0?m.slice(n+1):m,p=b.filter(a=>a.group&&o.includes(a.group));if(1!==p.length)continue;let q=p[0],r=a.slice(h,h+24),s=Math.min(...[r.search(/[、。;,]/u),r.search(/\n/u)].filter(a=>a>=0).concat([r.length])),t=r.slice(0,s),u=null;for(let a of t.matchAll(e)){let b=a[1],d=Number(b.replace(/,/gu,""));Number.isFinite(d)&&!(d<=0)&&(null===u||Math.abs(d-c.value)<Math.abs(u.value-c.value))&&(u={offset:h+(a.index??0)+a[0].indexOf(b),value:d,raw:b})}if(!u)continue;let v=a.slice(h,u.offset);(!/[A-Za-z]/u.test(v)||/[\u4e00-\u9fa5]/u.test(v))&&g.push({group:q.group,value:u.value,excerpt:a.slice(d,u.offset+u.raw.length),sentence:(0,k.kE)(a,d,u.offset+u.raw.length-d),flatIndex:-1})}0!==g.length&&f.push({authority:{name:c.name,value:c.value,unit:c.unit},detail:b,pairings:g})}if(0===f.length)return d.slice(0,8);let g=[];for(let a of f)for(let b of a.pairings){b.flatIndex=g.length;let c=a.detail.find(a=>a.group===b.group);g.push({id:`xp${b.flatIndex}`,kind:"quantity",subject:`${a.authority.name}(${b.group})`,value:b.value,unit:a.authority.unit,authority:c?.value??a.authority.value,sentence:b.sentence,facts:[`该条目清单分工程明细:${a.detail.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")}`]})}let h=c.adjudicate??k.hy,j=await h(g,{diagnostics:c.diagnostics,signal:c.signal});for(let a of f){let b=a.pairings.filter(a=>j.records.get(`xp${a.flatIndex}`)?.conclusion!=="consistent");if(0===b.length)continue;let c=!1;for(let f of b){let b=a.detail.find(a=>a.group===f.group);if(!b||e(b.value,f.value))continue;let g=a.detail.find(a=>a.group!==f.group&&e(a.value,f.value));if(g){d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨工程同值复制:“${f.excerpt.slice(0,40)}”在“${f.group}”语境处取值 ${f.value}${a.authority.unit},该值是“${g.group}”的清单明细值(${f.group} 的清单明细值为 ${b.value}${a.authority.unit})`,suggestion:`以工程量清单分工程明细为准修正“${f.group}”语境:应为 ${b.value}${a.authority.unit},不得沿用“${g.group}”的明细值 ${f.value}${a.authority.unit};修复后全文该条目分工程取值必须与清单明细逐一对应。`}),c=!0;break}}if(c)continue;let f=new Map;for(let a of b){let b=a.value.toFixed(2),c=f.get(b)??new Set;c.add(a.group),f.set(b,c)}for(let[c,e]of f){if(e.size<2)continue;let f=a.detail.filter(a=>e.has(a.group));if(new Set(f.map(a=>Math.round(100*a.value))).size<2)continue;let g=b.find(a=>a.value.toFixed(2)===c);d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨工程同值复制:“${g.excerpt.slice(0,40)}”数值 ${c}${a.authority.unit} 同时出现在“${[...e].join("”“")}”等 ${e.size} 个工程对象语境,而清单明细值互不相同(${f.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")})——至少一处属跨工程同值复制`,suggestion:`逐工程对象按清单明细值修正取值(${f.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")}),不得多工程共用同一数值。`});break}}return d.slice(0,8)}function bq(a){let{phrase:b,first:c,second:d}=a,e=(0,l.Qk)(b,c.phase),f=(0,l.Qk)(b,d.phase);if(e.length<4||f.length<4)return null;let g=e.start<=f.start?c:d,h=g===c?d:c;return{leading:g,trailing:h}}function br(a,b){let c=[],d=[];if(0===b.length)return{claims:c,ambiguities:d};let e=new Set,f=(f,g,h,i)=>{if(e.has(f))return;let j=Number(g.replace(/[,,]/gu,""));if(!Number.isFinite(j)||j<=0)return;let k=a.lastIndexOf("\n",f)+1,m=a.indexOf("\n",f);-1===m&&(m=a.length);let n=a.slice(k,m);if(/^\s*\|.*\|\s*$/u.test(n)||aA.test(n))return;let o=a.slice(Math.max(k,f-12),f);if(/不少于|不低于|至少|最低|不小于|≥/u.test(o)||/(?:[\u4e00-\u9fa5]{1,3}(?:工|员|长)|司机|班组|队伍?)\s*$/u.test(o))return;let p=function(a,b){let c=(a.match(/[\p{Script=Han}]/gu)||[]).length;if(0===c)return null;let d=null,e={length:0,start:0,end:0};for(let c of b){let b=(0,l.Qk)(a,c.phase);b.length>=4&&(null===d||b.length>e.length)&&(d=c,e=b)}if(!d)return null;if(e.length>=c)return{best:d};for(let c of[a.slice(0,e.start),a.slice(e.end)])if(!((c.match(/[\p{Script=Han}]/gu)||[]).length<2)){for(let a of b)if(a.phase!==d.phase&&(0,l.Qk)(c,a.phase).length>=4)return{best:d,second:a}}return{best:d}}(h,b);if(!p)return;let q=a.slice(Math.max(k,f-24),Math.min(a.length,f+g.length+1)).trim();if(p.second){e.add(f),d.push({start:f,raw:g,actual:j,phrase:h,first:{phase:p.best.phase,value:p.best.value,trace:p.best.trace},second:{phase:p.second.phase,value:p.second.value,trace:p.second.trace},excerpt:q});return}j!==p.best.value&&(e.add(f),c.push({start:f,end:f+g.length,raw:g,actual:j,expected:p.best.value,phase:p.best.phase,trace:p.best.trace,channel:i,excerpt:q}))};for(let b of a.matchAll(t)){let c=(b.index??0)+b[0].indexOf(b[1]),d=a.lastIndexOf("\n",c)+1,e=w(a,d,c);e&&f(c,b[1],e.replace(/阶段$/u,""),"base")}for(let b of a.matchAll(v)){if(!b[1]||!b[2])continue;let c=b[2],d=(b.index??0)+b[0].lastIndexOf(c);if(e.has(d))continue;let g=Math.max(a.lastIndexOf("。",d),a.lastIndexOf(";",d),a.lastIndexOf(";",d))+1,h=a.length;for(let b of["。",";",";"]){let c=a.indexOf(b,d);-1!==c&&c<h&&(h=c)}/阶段/u.test(a.slice(g,h))&&f(d,c,b[1].trim(),"enumeration")}return{claims:c,ambiguities:d}}function bs(a,b){let{claims:c,ambiguities:d}=br(a,b),e=[];for(let a of c)e.push({position:a.start,issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`阶段劳动力数据矛盾:正文“${a.excerpt.slice(0,60)}”取值 ${a.actual} 人,与蓝图分阶段劳动力推导不符(“${a.phase}”阶段应为 ${a.expected} 人)`,suggestion:`分阶段劳动力人数必须以蓝图推导为准:将“${a.phase}”阶段人数统一为 ${a.expected} 人${a.trace?`(依据:${a.trace})`:""},删除其他口径数字。`}});for(let a of d)e.push({position:a.start,issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`阶段名疑似拼接:正文“${a.excerpt.slice(0,60)}”中的阶段名“${a.phrase}”同时混含“${a.first.phase}”与“${a.second.phase}”两个蓝图阶段,人数 ${a.actual} 人无法归属`,suggestion:`将阶段名拆分表述:“${a.first.phase}”按 ${a.first.value} 人、“${a.second.phase}”按 ${a.second.value} 人(蓝图推导)分句列出,不得把两个阶段名连写成单一阶段。`}});return e.sort((a,b)=>a.position-b.position).slice(0,8).map(a=>a.issue)}function bt(a,b){let c=[];if(0===b.length)return c;let d=/首批|第一批|首期|第一期/gu,e=/剩余|补充|追加/gu,f=/保持|维持|确保|不少于|不低于|控制在|以内|以下/u;for(let g of b){if(!g.name||!Number.isFinite(g.count)||g.count<=0)continue;let b=(0,i.Lp)(g.name),h=RegExp(`${b}[^\\n。;;、,,]{0,4}?([\\d,]+)\\s*(?:台|辆)`,"gu"),j=new Set,k=new Set,l="";for(let b of a.matchAll(/[^。;;\n]+/gu)){let c=b[0],g=b.index??0,i=[...c.matchAll(d)].map(a=>a.index??0),m=[...c.matchAll(e)].map(a=>a.index??0);if(0!==i.length||0!==m.length)for(let b of c.matchAll(h)){if(!b[1])continue;let c=Number(b[1].replace(/[,,]/gu,""));if(!Number.isFinite(c)||c<=0)continue;let d=b.index??0,e=g+d,h=a.lastIndexOf("\n",e)+1,n=a.indexOf("\n",e);-1===n&&(n=a.length);let o=a.slice(h,n);if(/^\s*\|.*\|\s*$/u.test(o)||aA.test(o))continue;let p=b[0];if(f.test(p)||/以内|以下|上限/u.test(a.slice(e+p.length,e+p.length+4)))continue;let q=i.filter(a=>a<d&&d-a<=40).pop(),r=m.filter(a=>a<d&&d-a<=40).pop();(void 0!==q||void 0!==r)&&(void 0!==r&&(void 0===q||r>q)?k.add(c):j.add(c),l||(l=a.slice(Math.max(h,e-20),Math.min(n,e+p.length)).trim()))}}if(0===j.size||0===k.size)continue;let m=[...j],n=[...k];if(!m.some(a=>n.some(b=>a+b===g.count))&&(c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`机械设备分批台数矛盾:“${g.name}”分批投入(首批 ${m.join("/")} 台+剩余 ${n.join("/")} 台)各批组合之和均不等于蓝图机械汇总 ${g.count} 台${l?`(原文“${l.slice(0,50)}”)`:""}`,suggestion:`分批投入的台数之和必须等于蓝图机械汇总台数:将“${g.name}”各批次调整为首批与剩余合计 ${g.count} 台,或删除分批描述仅保留“${g.name} ${g.count} 台”汇总口径。`}),c.length>=5))break}return c}function bu(a,b){let c=[];if(!b||!Number.isFinite(b)||b<=0)return c;let d=/交底|考察|封样|编制|审批|报审|报批|培训|演练|签订|组建|建立|采购|调查|备案|申报|进场确认/u;for(let e of a.matchAll(/(?:开工令下发|开工令下达|下达开工令|开工|计划开工)[^。;;\n年月]{0,8}?(?:第\s*(\d+)\s*(?:个)?(?:日历)?日|(\d+)\s*(?:个)?(?:日历)?日)/gu)){let f=e[1]||e[2];if(!f||"内"===a.slice((e.index??0)+e[0].length,(e.index??0)+e[0].length+1))continue;let g=Number(f);if(!Number.isFinite(g)||g<=0||g<b)continue;let h=(e.index??0)+e[0].lastIndexOf(f),i=a.lastIndexOf("\n",h)+1,j=a.indexOf("\n",h);-1===j&&(j=a.length);let k=a.slice(i,j);if(/^\s*\|.*\|\s*$/u.test(k)||aA.test(k))continue;let l=a.slice(Math.max(i,h-40),Math.min(j,h+f.length+40));if(!d.test(l))continue;let m=a.slice(Math.max(i,h-30),Math.min(j,h+f.length+14)).trim();if(c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`前期动作时限矛盾:正文“${m}”将前期准备动作时限设在开工后第 ${g} 日,已达到/超过总工期 ${b} 日(竣工日)——前期动作不可能安排在项目末期`,suggestion:`前期准备动作时限必须落在施工准备阶段内:将第 ${g} 日改为与施工准备阶段相匹配的早期天数(早于总工期 ${b} 日),或删除具体天数改述为“开工令下发后在施工准备阶段内完成”。`}),c.length>=5)break}return c}function bv(a){let b=a.split(/\r?\n/u),c=[];b.forEach((a,b)=>{let d=/^(#{3,4})\s+([^\n]+)$/u.exec(a.trim());d&&c.push({index:b,level:d[1].length,title:d[2].trim()})});let d=[];for(let a=0;a<c.length;a+=1){let{index:e,level:f,title:g}=c[a],h=g.replace(/^[\d.]+[\s\u00a0]*/u,"");if(!/工程\s*$/u.test(h))continue;let i=h.replace(/\s*工程\s*$/u,"");if(!i||!/[、与及]/u.test(i))continue;let j=i.split(/[、与及]/u).map(a=>a.trim()).filter(a=>a.length>=2);if(j.length<2)continue;let k=b.length;for(let b=a+1;b<c.length;b+=1)if(c[b].level<=f){k=c[b].index;break}let l=b.slice(e+1,k).join("\n"),m=l.replace(/[、,,]/gu,""),n=j.filter(a=>{if(l.includes(a))return!1;let b=a.replace(/[、,,]/gu,"").replace(/(?:安装|施工|工程|作业)$/u,"");return b.length>=2&&!m.includes(b)});0!==n.length&&d.push({lineIndex:e,level:f,title:g,parts:j,uncovered:n})}return d}},36003:(a,b,c)=>{c.d(b,{AI:()=>T,Ym:()=>I,eL:()=>q.eL,hZ:()=>D,nl:()=>Y,qX:()=>E,uQ:()=>U,w9:()=>A,xu:()=>q.xu});var d=c(76760),e=c(78217),f=c(70933),g=c(30836),h=c(40299),i=c(95734),j=c(22157),k=c(46482),l=c(71001),m=c(43378),n=c(52639),o=c(40693);c(22496);var p=c(30949),q=c(22213),r=c(91943),s=c(18274),t=c(76193),u=c(21702),v=c(41991),w=c(1358),x=c(3063),y=c(54185),z=c(80572);function A(a,b,c){let d=[...a.errors.map(a=>({level:"error",message:a,suggestion:"请补充配置或资料后重新生成。"})),...a.warnings.map(a=>({level:"warning",message:a,suggestion:"建议人工确认或补充对应资料。"}))];return c.some(a=>/资料未提供|系统暂未从知识库确认/u.test(a.content))&&d.push({level:"warning",message:"存在系统暂未从知识库确认的章节内容",suggestion:"请检查项目角色配置、文件绑定顺序和事实抽取落位结果。"}),b.conflicts.length>0&&d.push(...b.conflicts.map(a=>({level:"warning",message:a,suggestion:"请根据当前模板绑定的角色、文件证据和用户要求复核取值口径。"}))),d}let B=/\b\d+(?:\.\d+)?\s*(?:日历天|小时|分钟|天|周|月|年|万元|元|台|套|个|项|批|次|份|人)(?=[。,,;;::、\s]|$)/gu;function C(a){let b=new Set;for(let c of a){let a=(0,j.lG)(c.content).replace(/\s+/gu," ");if((!/报价明细|投标报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(a)||/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(a))&&!/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂/u.test(a)){for(let c of a.matchAll(s._W))b.add(c[0].trim());for(let c of a.matchAll(B))b.add(c[0].trim());if(b.size>=40)break}}return[...b].slice(0,40)}function D(a){let b=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title),c=(b?.requiredFactIds||[]).map(b=>a.spec?.factFields.find(a=>a.id===b)?.name).filter(Boolean),d=[...new Set([...a.chapter.requiredFacts,...c,...a.plan?.requiredContents||[],...a.plan?.evidenceNeeds||[],...(a.resolvedFactNeeds||[]).filter(a=>a.need.required).map(a=>a.need.label)].filter(Boolean))],e=a.roleFacts.map(({fact:a})=>`- ${a.key}:${(0,f.eE)((0,j.lG)(a.value))}`),g=(a.resolvedFactNeeds||[]).flatMap(a=>a.facts),h=a.indexedFacts||[],i=g.length>0?[]:h.map(a=>`- ${a.key||a.fieldName||"资料事实"}:${(0,f.eE)((0,j.lG)(a.value))}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`),k=[...g,...h].filter(a=>/建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`)).filter((a,b,c)=>c.findIndex(b=>`${b.key||b.fieldName}:${(0,j.lG)(b.value)}`==`${a.key||a.fieldName}:${(0,j.lG)(a.value)}`)===b),l=[...new Set([...C(a.evidence),...g.map(a=>(0,j.lG)(a.value)).filter(a=>s.sv.test(a)),...h.map(a=>(0,j.lG)(a.value)).filter(a=>s.sv.test(a))])],m=new Set([...a.evidence.map(a=>a.filePath),...g.map(a=>a.sourceFile),...(a.indexedFacts||[]).map(a=>a.sourceFile)]).size,n=(a.resolvedFactNeeds||[]).filter(a=>"satisfied"!==a.status&&a.need.required).map(a=>a.need.label),o=function(a){if(!a)return[];let b=[];for(let[c,d]of Object.entries(a)){if(d.length<2)continue;let a=d.filter((a,b,c)=>c.findIndex(b=>b.location===a.location&&b.spec===a.spec)===b);a.length<2||b.push(`- ${c}:${a.slice(0,8).map(a=>`${a.location}:${a.spec}`).join("|")}`)}return b.slice(0,12)}(a.specAuthorityMap);return["【本章事实覆盖与参数落位要求】",d.length?`必须优先覆盖的事实/要求:
43
+ |]{0,40}?(${i.source})`,"gu");for(let b of a.matchAll(l)){let f=b[1]||"";if(aB.test(b[0])||aC.test(b[0])||aD.test(b[0]))continue;let h=a.slice(Math.max(0,(b.index||0)-40),b.index||0);if(aD.test(h))continue;let j=a.slice((b.index||0)+b[0].length,(b.index||0)+b[0].length+10);if(/范围内|范围/u.test(j)||/(?:工作宽度|作业宽度|操作空间|工作面)/u.test(j)||/^、\s*\d/u.test(j)||/^\s*厚(?:\s*[\d::]|覆膜|木|胶合)/u.test(j)||RegExp(`^(?:或|[、,,/])\\s*(?:${i.source})`,"u").test(j))continue;let l=a.slice(Math.max(0,b.index||0),(b.index||0)+b[0].length);if(/(?:标高|高程|平整度|轴线|垂直度|高差)[^。;;\n|]{0,10}(?:偏差|误差|不超过|不得大于|不大于)/u.test(l.slice(-28)))continue;let m=b[0].indexOf(f);if(m>g.length&&/(?:涵头|面层|基层|垫层|管基|基础|梁|板|柱|墙|地坪|路面)/u.test(b[0].slice(g.length,m)))continue;let n=b.index||0,o=d.find(b=>b.length>g.length&&b.endsWith(g)&&a.slice(n+g.length-b.length,n+g.length)===b);if(o&&new Set(e.filter(a=>a.location===o&&aK(a.spec)?.source===i.source).map(a=>a.spec)).has(f)||k.has(f))continue;let p=1===k.size?[...k][0]:void 0,q=n+m;if(c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规格错位:“${g}”使用的规格 ${f} 与工程量清单权威(${[...k].join("/")})不一致`,suggestion:`按工程量清单将“${g}”的规格统一为 ${[...k].join("/")};同一材料不同部位允许不同规格,但同一部位不得混用其他部位的规格。`},location:g,replacement:p?{start:q,end:q+f.length,replacement:p,detail:`规格错位“${g}” ${f}→${p}(以工程量清单锁定口径为准)`}:void 0}),c.length>=8)return c}}}return c.slice(0,8)}function aM(a,b){return aL(a,b).map(a=>a.issue)}let aN=/桩基|灌注桩|钻孔桩|打桩|成桩|桩机/u;function aO(a){let b=function(a){let b=[];for(let c of[...a.matchAll(/^#{3,4}\s+[^\n]*(?:地基与基础)[^\n]*$/gmu)]){let d=(c.index||0)+c[0].length,e=a.slice(d).search(/^#{2,4}\s+/mu),f=a.slice(d,e>=0?d+e:a.length);b.push(f)}return b}(a);if(0===b.length||b.some(a=>aN.test(a)))return[];let c=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();!(!a||/^#{1,6}\s/u.test(a))&&aN.test(b)&&c.push(a.slice(0,48))}let d=[...new Set(c)].slice(0,5);return d.length<2?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`桩基表述残留:地基与基础章节施工流程为筏板/独立基础(无桩基工序),但全文另有 ${d.length} 处桩基表述:${d.join("、")}`,suggestion:"本项目基础形式不含桩基:删除全文所有桩基/桩机表述,进度计划表关键线路工序、质量验收划分表、隐蔽验收表均改为本项目实际基础工序(垫层/底板钢筋/混凝土)。"}]}let aP=/^\s*\|\s*计划工期\s*\|([^|\n]*)\|/u,aQ=/工期延误|延误|违约|切除|赔偿|罚款|解除|扣减/u;function aR(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=aP.exec(c);if(!a)continue;let d=(a[1]??"").trim();d&&aQ.test(d)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基本信息表「计划工期」字段错填违约条款文字:“${d.slice(0,40)}”`,suggestion:"「计划工期」字段应填日历天数值(与招标文件前附表一致);工期延误违约条款文字应放在工期风险管控章节,不得占用基本信息表字段。"})}return b.slice(0,2)}let aS=/基础|支护|围护|桩|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|标高|深度|形式|体系/u;function aT(a){let b=a.replace(/\s+/gu,""),c=new Set;for(let a of b.matchAll(/([一-龥]{2,8})\/([一-龥]{2,8})/gu)){let d=aS.test(a[1])||aS.test(a[2]),e=(0,j.m4)(a[1],a[2]);if(!d&&!e)continue;let f=Math.max(0,(a.index||0)-12),g=Math.min(b.length,(a.index||0)+a[0].length+12),h=b.slice(f,g);!/管线|管道|电缆|给水|排水/u.test(h)&&(!/采用|形式|方式|方案|选用|拟用|拟采用|为/u.test(h)&&(!e||/不得|禁止|不应|不宜|避免|严禁|无需/u.test(h))||c.add(`“${a[1]}/${a[2]}”`))}for(let a of b.matchAll(/[((]\s*或[^))]{1,48}[))]/gu)){let d=a[0].slice(1,-1);if(!/按图纸|按实|按图|待定|另行|视[^,。;]{0,8}而定|根据实际/u.test(d))continue;let e=Math.max(0,(a.index||0)-20),f=b.slice(e,(a.index||0)+a[0].length);aS.test(f)&&c.add(a[0].slice(0,30))}for(let a of b.matchAll(/([一-龥]{2,8})或([一-龥]{2,8})/gu)){let d=aS.test(a[1])||aS.test(a[2]),e=(0,j.m4)(a[1],a[2]);if(!d&&!e)continue;let f=Math.max(0,(a.index||0)-12),g=b.slice(f,(a.index||0)+a[1].length);if(/管线|管道|电缆|给水|排水/u.test(g)||!/按|采用|选用|拟用|拟采用|方案|为/u.test(g)&&(!e||/不得|禁止|不应|不宜|避免|严禁|无需/u.test(g)))continue;let h=b.slice(Math.max(0,(a.index||0)-6),a.index||0);if(/临时/u.test(h+a[0])&&/支护|围护|放坡|坡率|开挖/u.test(a[0])||/围挡|警示|防护栏|爬梯|栈桥|便道/u.test(a[0]))continue;let i=a[1].replace(/^.*?(地下连续墙|钢板桩|灌注桩|支护桩|土钉墙|基础|支护|围护|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|形式|体系)/u,"$1");c.add(`${i}或${a[2]}`)}return 0===c.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`关键设计决策两可表述:${[...c].join("、")} 以并列/悬置形态表述,基础形式、支护形式等关键决策必须在正文中唯一确定`,suggestion:"以设计图纸/勘察报告/工程量清单为准锁定唯一决策并删除两可表述:明确写出本项目基础形式与支护形式的具体做法(如「基础形式为筏板基础」「基坑支护采用放坡+喷锚」),禁止「或…按图纸实施」类悬置话术。"}]}function aU(a){let b=a.replace(/\s+/gu,"");if((b.match(/基坑|开挖|支护/gu)||[]).length<3)return[];for(let a of b.matchAll(/(?:深度|标高)[^。;,,]{0,12}-?\d+(?:\.\d+)?[^。;,,]{0,6}/gu)){let b=a[0];if(!/(?:超过|大于|小于|不[大低小]于|不低于|低于|高于|按|倍|依据|详见|参考|示意|每|以上|以下|偏差|±0|0\.000)/u.test(b)&&!/\d+(?:\.\d+)?\s*(?:h|小时|天|日|min|周|月|昼夜)/u.test(b))return[]}return[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:"基坑深度数值未锁定:正文已有基坑支护/开挖成稿内容,但全文未出现「深度/标高+数值」的确定性表述(比较式阈值如「超过3m」不视为锁定),危大工程分级判定失去依据",suggestion:"从绑定资料(地质勘察报告/基坑支护设计图/基础平面图)锁定基坑开挖深度数值写入基坑支护小节;深度 ≥5m 的深基坑须同步标注危大工程分级与专家论证要求,禁止以「按图纸确定」回避深度数值。"}]}function aV(a,b){let c=(0,i.z4)(b);if(void 0===c||c<3)return[];let d=[];return c>=3&&!/危大工程/u.test(a)&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`危大工程判定缺失:资料基坑开挖深度 ${c}m(≥3m),正文必须出现危大工程判定标注`,suggestion:`依据住建部令第37号,开挖深度≥3m 属危大工程:在基坑支护/危大工程清单小节写明本工程实际深度 ${c}m 与危大工程判定结论,不得只写判定规则不落地本项目。`}),c>=5&&!/超过一定规模/u.test(a)&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`超危大工程判定缺失:资料基坑开挖深度 ${c}m(≥5m),正文必须出现「超过一定规模」判定与专家论证要求`,suggestion:`开挖深度≥5m 属超过一定规模的危大工程:写明本工程深度 ${c}m 对应分级结论,专项施工方案必须经专家论证,不得只写判定规则不落地分级。`}),d}function aW(a,b){let c=[b.canonical?.byKey.foundation_support_form?.value,...(b.drawings||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.project||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.preciseFacts||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`)].filter(Boolean).filter(a=>/基坑支护形式|基坑支护方式|支护形式|支护方式|土钉|放坡|喷锚|护坡/u.test(a)&&!/监测|监测频次|闭环|基坑开挖深度/u.test(a));if(0===c.length)return[];let d=[];for(let a of c)for(let b of["土钉墙","放坡","喷锚","挂网喷浆","排桩","灌注桩","地下连续墙","内支撑","锚杆","锚索"])a.includes(b)&&d.push(b);let f=[],g=/不采用|未采用|不设置|未设置|不使用|不宜采用|不得采用|不再出现|不得出现|严禁出现|避免出现|已删除|取消/u,h=["支护桩","冠梁","钻孔灌注桩","灌注桩","地下连续墙","排桩","咬合桩","内支撑"].filter(b=>(b=>{let c=RegExp(b,"gu");for(let b of a.matchAll(c)){let c=a.lastIndexOf("\n",b.index)+1,d=a.indexOf("\n",b.index);-1===d&&(d=a.length);let e=a.slice(c,d).slice(Math.max(0,b.index-c-12),b.index-c);if(!g.test(e))return!0}return!1})(b)&&!d.includes(b));return h.length>0&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`支护形式与资料矛盾:正文出现资料中不存在的支护体系词 ${h.join("、")}`,suggestion:`资料基坑支护形式为「${d.join("、")||c[0]?.slice(0,60)}」:删除编造的支护桩/冠梁/灌注桩类表述与对应参数(垂直度偏差/冠梁顶面标高等),按资料支护形式改写。`}),0===d.filter(b=>RegExp(b,"u").test(a)).length&&/基坑|支护/u.test(a)&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`支护形式未落地:资料基坑支护形式「${d.join("、")||c[0]?.slice(0,60)}」未在正文中出现`,suggestion:`在基坑支护小节写明本工程实际支护形式(${d.join("、")})及对应工艺参数(土钉长度/间距/坡度等),不得以泛化表述回避。`}),f}let aX=["塔式起重机","施工升降机","施工电梯","汽车起重机","汽车吊","混凝土泵车","混凝土泵","挖掘机","装载机","推土机","压路机","平地机","空压机","注浆机","锚杆钻机","混凝土喷射机","喷射机","吊篮","钢筋加工设备","塔吊"],aY=/挖掘机|空压机|注浆机|锚杆钻机|混凝土喷射机|喷射机|推土机/u;function aZ(a,b){let c=function(a){let b=[];for(let c of a.matchAll(/第(\d{2,3})日[^。;;\n|]{0,8}?(?:进场|投入使用|安装|调试)/gu)){let d=a.slice(Math.max(0,(c.index||0)-24),c.index||0),e=aX.find(a=>d.includes(a));e&&b.push({equipment:e,day:Number(c[1]),raw:`${d.slice(-18)}${c[0].slice(0,20)}`})}let c=new Set;return b.filter(a=>{let b=`${a.equipment}:${a.raw}`;return!c.has(b)&&(c.add(b),!0)})}(a);if(0===c.length)return[];let d=[],f=function(a,b){for(let c of[a,...(b.schedule||[]).map(a=>`${a.key||""}${(0,e.lG)(a.value)}`)]){let a=/(?:计划工期|合同工期|总工期|工期总日历天数)[^\d。;;\n|]{0,12}(\d{1,4})\s*个?\s*日历天/u.exec(c);if(a){let b=Number(a[1]);if(Number.isFinite(b)&&b>=30&&b<=3e3)return b}}}(a,b);if(void 0!==f){let a=c.filter(a=>a.day>=f);a.length>0&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备进场时间荒谬:${a.slice(0,3).map(a=>`「${a.equipment} 第${a.day}日进场」`).join("、")} 已达/超过总工期(${f}日历天),工程结束时设备尚未进场`,suggestion:`以总进度计划为准核对设备进场计划:大型施工设备必须在总工期结束前进场并完成使用,${a.map(a=>a.equipment).join("、")} 的进场日应提前至工程开始阶段,删除矛盾的尾期进场表述。`})}let g=at(a).filter(a=>"excavation"===a.key).map(a=>a.day);if(g.length>0){let a=Math.min(...g),b=c.filter(b=>aY.test(b.equipment)&&b.day>a);b.length>0&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备进场工序倒挂:${b.slice(0,3).map(a=>`「${a.equipment} 第${a.day}日进场」`).join("、")} 晚于基坑支护及土方外运完成节点(第${a}日),基坑阶段设备未在工序开始前进场`,suggestion:`基坑阶段专用设备必须在基坑开挖/支护开始前完成进场与报验:将 ${b.map(a=>a.equipment).join("、")} 的进场日调整为早于基坑支护完成节点(第${a}日)的日期,删除工序倒挂表述。`})}return d.slice(0,3)}let a$=/[\u4e00-\u9fa5]{2,10}(?:杯|奖)(?![励金惩罚项])/gu,a_=/优质工程|文明工地|样板|标准化|观摩|示范|精品工程|结构优质|省优|市优/u;function a0(a){let b=a;for(;;){let a=b.replace(/^(?:争创|争取|力争|争获|确保|获得|创建|力创|评为|荣获|标为|目标为|承诺|为)/u,"");if(a===b||!a)break;b=a}return b}let a1=/^\s*\|[\s:|-]+\|/u;function a2(a){let b=a.split(/\r?\n/u),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>a1.test(a),f=0;for(;f<b.length;){let a;if(!/^\s*\|/u.test(b[f])){f+=1;continue}let g=f;for(;g<b.length&&/^\s*\|/u.test(b[g]);)g+=1;let h=b.slice(f,g),i=0,j=0,k=0,l=b=>{if(!a)return;let e=h.slice(j,b);0!==e.length&&c.push({startLine:f+i,endLine:f+b-1,header:a,firstCol:e.map(a=>d(a)[0]?.replace(/[*_`]/gu,"").trim()||"").filter(Boolean),dataRows:e.map(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())),dataCells:e.flatMap(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())).filter(Boolean),bodyChars:e.join("").length,raw:h.slice(i,b)})};for(;k<h.length;){if(k+1<h.length&&e(h[k+1]||"")){l(k),a=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()),i=k,j=k+2,k+=2;continue}if(a&&k>j){let b=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()).filter(Boolean);if(a3(b,a)>=.6&&k+1<h.length&&!e(h[k+1]||"")){l(k),a=b,i=k,j=k+1,k+=1;continue}}k+=1}l(h.length),f=g}return c}function a3(a,b){if(0===a.length||0===b.length)return 0;let c=new Set(a),d=new Set(b);return[...c].filter(a=>d.has(a)).length/new Set([...c,...d]).size}function a4(a,b){if(0===a.length)return 0;let c=[...b],d=0;for(let b of a){let a=c.indexOf(b);a>=0&&(c.splice(a,1),d+=1)}return d/a.length}let a5=/^[\d,,.]+\s*(?:人|个|台|具|套|处|支|辆|班|组|项)?$/u,a6=a=>a.filter(a=>!a5.test(a));function a7(a){let b=[];for(let c of a2(a)){let a=c.dataRows;if(a.length<4)continue;let d=a=>(a[0]||"").trim(),e=(a,b)=>a3(a,b);for(let f=Math.floor(a.length/2);f<=Math.ceil(a.length/2);f+=1){let g=a.slice(0,f),h=a.slice(f);if(g.length<2||h.length<2)continue;let i=0,j=-1;for(let a of h){let b=d(a);if(b){for(let c=j+1;c<g.length;c+=1)if(d(g[c])===b&&e(a,g[c])>=.5){i+=1,j=c;break}}}let k=i/h.length;if(!(k<.8)){b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"local_deterministic",message:`表格内部数据行重复:第 ${c.startLine+1}~${c.endLine+1} 行表格(表头:${c.header.slice(0,3).join("|")})数据行两遍粘贴(${f} 行 + ${h.length} 行,重复匹配率 ${Math.round(100*k)}%)`,suggestion:`删除第二遍重复数据行(保留第一遍 ${f} 行),删除后表格仅保留一份完整数据。`});break}}}return b}function a8(a){let b=[],c=a2(a);if(c.length<2)return b;for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a],f=c[d],g=e.header.length>0&&e.header.length===f.header.length&&e.header.every((a,b)=>a===f.header[b]),h=a3(e.header,f.header),i=a3(e.firstCol,f.firstCol),j=a3(e.dataCells,f.dataCells),k=Math.max(a4(a6(e.dataCells),a6(f.dataCells)),a4(a6(f.dataCells),a6(e.dataCells)));(g&&j>=.6||h>=.7&&i>=.6||i>=.6&&k>=.6)&&b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`表格重复:第 ${e.startLine+1}~${e.endLine+1} 行表格(表头:${e.header.slice(0,3).join("|")})与第 ${f.startLine+1}~${f.endLine+1} 行表格高度重复(表头重合 ${Math.round(100*h)}%、数据重合 ${Math.round(100*j)}%、首列重合 ${Math.round(100*i)}%)`,suggestion:"同一文档内同主题表格只保留信息最全的一张:删除重复表格(保留字段与数据行更多的那张),删除后核对章节表格计划仍被覆盖。"})}return b.sort((a,b)=>{let c=a=>Number(a.match(/数据重合\s*(\d+)%/u)?.[1]??0);return c(b.message)-c(a.message)}).slice(0,5)}function a9(a){let b=a.replace(/\s+/gu,"");return b.length>=40?b:void 0}let ba=15;function bb(a){let b=function(a){let b=[];for(let c of a.split(/\n\s*\n/u)){let a=c.trim();if(!a)continue;let d=a.split(/\n/u).filter(a=>{let b=a.trim();return b&&!/^#{1,6}\s/u.test(b)&&!b.startsWith("|")}).join("\n"),e=[];for(let a of d.split(/[。!?!?]/u)){let b=a.trim().replace(/\s+/gu,"");if(b.length<ba)continue;let c=e.findIndex(a=>a.sentence===b||a.sentence.length>b.length&&a.sentence.length-b.length<=ba&&a.sentence.endsWith(b));c>=0?e[c].count+=1:e.push({sentence:b,count:1})}for(let a of e)a.count>=2&&b.push({sentence:a.sentence,count:a.count})}return b}(a);return 0===b.length?[]:b.slice(0,3).map(({sentence:a,count:b})=>({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"local_deterministic",message:`段落内句子复读 ${b} 次:“${a.slice(0,30)}…”`,suggestion:"同一段落内相同句子只保留首次出现,删除段尾复读的重复句(确定性修复器已接入自动剥离)。"}))}let bc=/^(.+?)(?:((?:\d+|[一二三四五六七八九十]+)))+$/u;function bd(a){let b=[];for(let c of a.matchAll(/^###\s+(.+)$/gmu)){let d=c[1].trim();bc.test(d)&&b.push({raw:d,index:a.lastIndexOf("\n",c.index??0)+1})}return b}function be(a){let b=bd(a);return 0===b.length?[]:b.slice(0,3).map(({raw:a})=>({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"local_deterministic",message:`目录小节标题含防撞名编号后缀:“${a}”`,suggestion:"正式投标文件目录不允许「(1)(2)」编号后缀小节:确定性修复器已接入(按主题域重命名为语义化标题或合并同基线拆半小节)。"}))}let bf=/第(\d{1,3})日(?:至|到|~|~|—|-)第(\d{1,3})日/gu;function bg(a){let b=[];for(let c of a.matchAll(bf))Number(c[1])<=Number(c[2])||b.push({start:c.index??0,end:(c.index??0)+c[0].length,raw:c[0]});return b}function bh(a){let b=bg(a);return 0===b.length?[]:b.slice(0,3).map(({raw:a})=>({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`时间区间倒挂:“${a}”起点大于终点,属时间拼接病句`,suggestion:"删除倒挂区间起点,仅保留终点日期表述(确定性修复器已接入自动剥离)。"}))}function bi(a){let b=[],c=a.split(/\r?\n/u),d=new Map,e=[],f=()=>{let a=a9(e.join(""));if(a){let b=(d.get(a)||0)+1;d.set(a,b)}e=[]};for(let a of c){let b=a.trim();if(!b||/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)){f();continue}if(/^[-*•]\s/u.test(b)){f(),e.push(b),f();continue}e.push(b)}for(let[a,c]of(f(),[...d.entries()].filter(([,a])=>a>=2).slice(0,3)))b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`段落完全重复 ${c} 次:“${a.slice(0,40)}…”`,suggestion:"同一段落正文只保留首次出现处,删除其余重复段落;确需前后呼应时改写为差异化表述并压缩篇幅。"});return b}function bj(a,b,c){let d=new Set;for(let a of[...b.quality,...b.project,...b.schedule])for(let b of(0,e.lG)(a.value).matchAll(a$))d.add(a0(b[0]));if(c?.extracted)for(let a of c.entries)for(let b of a.text.matchAll(a$))d.add(a0(b[0]));if(0===d.size)return[];let f=new Set;for(let b of a.matchAll(a$)){let a=a0(b[0]);!d.has(a)&&(a_.test(a)||f.add(a))}return 0===f.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`奖项表述与招标文件白名单不符:正文出现 ${[...f].join("、")},均未出现在招标文件评分项要求或绑定资料中`,suggestion:"创优目标必须以招标文件原文为准逐字落位(如「确保黄山杯」),禁止自行编造或替换为其他奖项名称;白名单外的奖项表述一律删除或替换为招标原文奖项。"}]}function bk(a){let b=a.split(/\r?\n/u),c=new Set;for(let a of b){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(!b)continue;let d=b[2].trim();(0,h.Xp)(d)&&c.add(d)}if(0===c.size)return[];let d=[...c];return[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`正文出现投标人资格内容小节:${d.slice(0,3).map(a=>`“${a}”`).join("、")}${d.length>3?" 等":""}(资格审查内容不属于施工组织设计,属资格文件/商务文件范畴)`,suggestion:"删除资格内容小节(标题与正文整体删除),不得以改写、合并、降级方式保留;正文如需提及安全生产许可证等证照,只能以施工管理口径表述(如“按规定持证上岗”),不得成节铺陈资格核验内容。"}]}let bl=/人[、,,]材[、,,]机/u,bm=/(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施/u;function bn(a){let b=a.match(bm)?.[1];return b||(/劳动力|人员|作业人员|劳务/u.test(a)?"人":/材料|物资|周转/u.test(a)?"材":/机械|设备|机具|塔吊|起重机/u.test(a)?"机":void 0)}function bo(a){let b=[],c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){let d,e=/^##\s+(.+)$/u.exec(c[a].trim());if(!e||!bl.test(e[1]))continue;let f=c.length;for(let b=a+1;b<c.length;b+=1)if(/^##\s+/u.test(c[b].trim())){f=b;break}let g=[];for(let e=a+1;e<f;e+=1){let a=/^###\s+(.+)$/u.exec(c[e].trim()),f=/^####\s+(.+)$/u.exec(c[e].trim());if(a){d={subject:bn(a[1]),title:a[1].trim()},g.push(d);continue}if(f&&d?.subject){let a=bn(f[1]);a&&a!==d.subject&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章层级错位:小节“${f[1].trim()}”挂在“${d.title}”之下(${"人"===a?"人":"材"===a?"材":"机"}的保障体系应独立成二级小节,不得并入${"人"===d.subject?"人":"材"===d.subject?"材":"机"}的保障体系)`,suggestion:`将“${f[1].trim()}”提升为独立二级小节,或将其内容合并到对应主题的二级小节。`})}}let h=new Set(g.map(a=>a.subject).filter(Boolean)),i=["人","材","机"].every(a=>h.has(a));(g.length<3||!i)&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章结构不完整:“${e[1].trim()}”仅 ${g.length} 个二级小节(人/材/机的保障体系未全部独立成节)`,suggestion:"拆分为“确保人的保障体系与措施”“确保材的保障体系与措施”“确保机的保障体系与措施”三个二级小节。"})}return b}async function bp(a,b,c={}){let d=[],e=(a,b)=>1e-6>Math.abs(a-b),f=[];for(let c of b){let b=c.groups??[];if(b.length<2||new Set(b.map(a=>Math.round(100*a.value))).size<2)continue;let d=RegExp((0,i.Lp)(c.name),"gu"),e=RegExp(`(?<![\\dA-Za-z])(\\d(?:[\\d,]*(?:\\.\\d+)?))\\s*${(0,i.YZ)(c.unit)}(?![0-9a-zA-Z])`,"gui"),g=[];for(let f of a.matchAll(d)){let d=f.index??0,h=d+f[0].length,i=a.lastIndexOf("\n",d)+1,j=a.indexOf("\n",d);if(-1===j&&(j=a.length),/^\s*\|/u.test(a.slice(i,j)))continue;let l=Math.max(i,d-24),m=a.slice(l,d),n=Math.max(m.lastIndexOf("。"),m.lastIndexOf(";"),m.lastIndexOf(";")),o=n>=0?m.slice(n+1):m,p=b.filter(a=>a.group&&o.includes(a.group));if(1!==p.length)continue;let q=p[0],r=a.slice(h,h+24),s=Math.min(...[r.search(/[、。;,]/u),r.search(/\n/u)].filter(a=>a>=0).concat([r.length])),t=r.slice(0,s),u=null;for(let a of t.matchAll(e)){let b=a[1],d=Number(b.replace(/,/gu,""));Number.isFinite(d)&&!(d<=0)&&(null===u||Math.abs(d-c.value)<Math.abs(u.value-c.value))&&(u={offset:h+(a.index??0)+a[0].indexOf(b),value:d,raw:b})}if(!u)continue;let v=a.slice(h,u.offset);(!/[A-Za-z]/u.test(v)||/[\u4e00-\u9fa5]/u.test(v))&&g.push({group:q.group,value:u.value,excerpt:a.slice(d,u.offset+u.raw.length),sentence:(0,k.kE)(a,d,u.offset+u.raw.length-d),flatIndex:-1})}0!==g.length&&f.push({authority:{name:c.name,value:c.value,unit:c.unit},detail:b,pairings:g})}if(0===f.length)return d.slice(0,8);let g=[];for(let a of f)for(let b of a.pairings){b.flatIndex=g.length;let c=a.detail.find(a=>a.group===b.group);g.push({id:`xp${b.flatIndex}`,kind:"quantity",subject:`${a.authority.name}(${b.group})`,value:b.value,unit:a.authority.unit,authority:c?.value??a.authority.value,sentence:b.sentence,facts:[`该条目清单分工程明细:${a.detail.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")}`]})}let h=c.adjudicate??k.hy,j=await h(g,{diagnostics:c.diagnostics,signal:c.signal});for(let a of f){let b=a.pairings.filter(a=>j.records.get(`xp${a.flatIndex}`)?.conclusion!=="consistent");if(0===b.length)continue;let c=!1;for(let f of b){let b=a.detail.find(a=>a.group===f.group);if(!b||e(b.value,f.value))continue;let g=a.detail.find(a=>a.group!==f.group&&e(a.value,f.value));if(g){d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨工程同值复制:“${f.excerpt.slice(0,40)}”在“${f.group}”语境处取值 ${f.value}${a.authority.unit},该值是“${g.group}”的清单明细值(${f.group} 的清单明细值为 ${b.value}${a.authority.unit})`,suggestion:`以工程量清单分工程明细为准修正“${f.group}”语境:应为 ${b.value}${a.authority.unit},不得沿用“${g.group}”的明细值 ${f.value}${a.authority.unit};修复后全文该条目分工程取值必须与清单明细逐一对应。`}),c=!0;break}}if(c)continue;let f=new Map;for(let a of b){let b=a.value.toFixed(2),c=f.get(b)??new Set;c.add(a.group),f.set(b,c)}for(let[c,e]of f){if(e.size<2)continue;let f=a.detail.filter(a=>e.has(a.group));if(new Set(f.map(a=>Math.round(100*a.value))).size<2)continue;let g=b.find(a=>a.value.toFixed(2)===c);d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨工程同值复制:“${g.excerpt.slice(0,40)}”数值 ${c}${a.authority.unit} 同时出现在“${[...e].join("”“")}”等 ${e.size} 个工程对象语境,而清单明细值互不相同(${f.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")})——至少一处属跨工程同值复制`,suggestion:`逐工程对象按清单明细值修正取值(${f.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")}),不得多工程共用同一数值。`});break}}return d.slice(0,8)}function bq(a){let{phrase:b,first:c,second:d}=a,e=(0,l.Qk)(b,c.phase),f=(0,l.Qk)(b,d.phase);if(e.length<4||f.length<4)return null;let g=e.start<=f.start?c:d,h=g===c?d:c;return{leading:g,trailing:h}}function br(a,b){let c=[],d=[];if(0===b.length)return{claims:c,ambiguities:d};let e=new Set,f=(f,g,h,i)=>{if(e.has(f))return;let j=Number(g.replace(/[,,]/gu,""));if(!Number.isFinite(j)||j<=0)return;let k=a.lastIndexOf("\n",f)+1,m=a.indexOf("\n",f);-1===m&&(m=a.length);let n=a.slice(k,m);if(/^\s*\|.*\|\s*$/u.test(n)||aA.test(n))return;let o=a.slice(Math.max(k,f-12),f);if(/不少于|不低于|至少|最低|不小于|≥/u.test(o)||/(?:[\u4e00-\u9fa5]{1,3}(?:工|员|长)|司机|班组|队伍?)\s*$/u.test(o))return;let p=function(a,b){let c=(a.match(/[\p{Script=Han}]/gu)||[]).length;if(0===c)return null;let d=null,e={length:0,start:0,end:0};for(let c of b){let b=(0,l.Qk)(a,c.phase);b.length>=4&&(null===d||b.length>e.length)&&(d=c,e=b)}if(!d)return null;if(e.length>=c)return{best:d};for(let c of[a.slice(0,e.start),a.slice(e.end)])if(!((c.match(/[\p{Script=Han}]/gu)||[]).length<2)){for(let a of b)if(a.phase!==d.phase&&(0,l.Qk)(c,a.phase).length>=4)return{best:d,second:a}}return{best:d}}(h,b);if(!p)return;let q=a.slice(Math.max(k,f-24),Math.min(a.length,f+g.length+1)).trim();if(p.second){e.add(f),d.push({start:f,raw:g,actual:j,phrase:h,first:{phase:p.best.phase,value:p.best.value,trace:p.best.trace},second:{phase:p.second.phase,value:p.second.value,trace:p.second.trace},excerpt:q});return}j!==p.best.value&&(e.add(f),c.push({start:f,end:f+g.length,raw:g,actual:j,expected:p.best.value,phase:p.best.phase,trace:p.best.trace,channel:i,excerpt:q}))};for(let b of a.matchAll(t)){let c=(b.index??0)+b[0].indexOf(b[1]),d=a.lastIndexOf("\n",c)+1,e=w(a,d,c);e&&f(c,b[1],e.replace(/阶段$/u,""),"base")}for(let b of a.matchAll(v)){if(!b[1]||!b[2])continue;let c=b[2],d=(b.index??0)+b[0].lastIndexOf(c);if(e.has(d))continue;let g=Math.max(a.lastIndexOf("。",d),a.lastIndexOf(";",d),a.lastIndexOf(";",d))+1,h=a.length;for(let b of["。",";",";"]){let c=a.indexOf(b,d);-1!==c&&c<h&&(h=c)}/阶段/u.test(a.slice(g,h))&&f(d,c,b[1].trim(),"enumeration")}return{claims:c,ambiguities:d}}function bs(a,b){let{claims:c,ambiguities:d}=br(a,b),e=[];for(let a of c)e.push({position:a.start,issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`阶段劳动力数据矛盾:正文“${a.excerpt.slice(0,60)}”取值 ${a.actual} 人,与蓝图分阶段劳动力推导不符(“${a.phase}”阶段应为 ${a.expected} 人)`,suggestion:`分阶段劳动力人数必须以蓝图推导为准:将“${a.phase}”阶段人数统一为 ${a.expected} 人${a.trace?`(依据:${a.trace})`:""},删除其他口径数字。`}});for(let a of d)e.push({position:a.start,issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`阶段名疑似拼接:正文“${a.excerpt.slice(0,60)}”中的阶段名“${a.phrase}”同时混含“${a.first.phase}”与“${a.second.phase}”两个蓝图阶段,人数 ${a.actual} 人无法归属`,suggestion:`将阶段名拆分表述:“${a.first.phase}”按 ${a.first.value} 人、“${a.second.phase}”按 ${a.second.value} 人(蓝图推导)分句列出,不得把两个阶段名连写成单一阶段。`}});return e.sort((a,b)=>a.position-b.position).slice(0,8).map(a=>a.issue)}function bt(a,b){let c=[];if(0===b.length)return c;let d=/首批|第一批|首期|第一期/gu,e=/剩余|补充|追加/gu,f=/保持|维持|确保|不少于|不低于|控制在|以内|以下/u;for(let g of b){if(!g.name||!Number.isFinite(g.count)||g.count<=0)continue;let b=(0,i.Lp)(g.name),h=RegExp(`${b}[^\\n。;;、,,]{0,4}?([\\d,]+)\\s*(?:台|辆)`,"gu"),j=new Set,k=new Set,l="";for(let b of a.matchAll(/[^。;;\n]+/gu)){let c=b[0],g=b.index??0,i=[...c.matchAll(d)].map(a=>a.index??0),m=[...c.matchAll(e)].map(a=>a.index??0);if(0!==i.length||0!==m.length)for(let b of c.matchAll(h)){if(!b[1])continue;let c=Number(b[1].replace(/[,,]/gu,""));if(!Number.isFinite(c)||c<=0)continue;let d=b.index??0,e=g+d,h=a.lastIndexOf("\n",e)+1,n=a.indexOf("\n",e);-1===n&&(n=a.length);let o=a.slice(h,n);if(/^\s*\|.*\|\s*$/u.test(o)||aA.test(o))continue;let p=b[0];if(f.test(p)||/以内|以下|上限/u.test(a.slice(e+p.length,e+p.length+4)))continue;let q=i.filter(a=>a<d&&d-a<=40).pop(),r=m.filter(a=>a<d&&d-a<=40).pop();(void 0!==q||void 0!==r)&&(void 0!==r&&(void 0===q||r>q)?k.add(c):j.add(c),l||(l=a.slice(Math.max(h,e-20),Math.min(n,e+p.length)).trim()))}}if(0===j.size||0===k.size)continue;let m=[...j],n=[...k];if(!m.some(a=>n.some(b=>a+b===g.count))&&(c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`机械设备分批台数矛盾:“${g.name}”分批投入(首批 ${m.join("/")} 台+剩余 ${n.join("/")} 台)各批组合之和均不等于蓝图机械汇总 ${g.count} 台${l?`(原文“${l.slice(0,50)}”)`:""}`,suggestion:`分批投入的台数之和必须等于蓝图机械汇总台数:将“${g.name}”各批次调整为首批与剩余合计 ${g.count} 台,或删除分批描述仅保留“${g.name} ${g.count} 台”汇总口径。`}),c.length>=5))break}return c}function bu(a,b){let c=[];if(!b||!Number.isFinite(b)||b<=0)return c;let d=/交底|考察|封样|编制|审批|报审|报批|培训|演练|签订|组建|建立|采购|调查|备案|申报|进场确认/u;for(let e of a.matchAll(/(?:开工令下发|开工令下达|下达开工令|开工|计划开工)[^。;;\n年月]{0,8}?(?:第\s*(\d+)\s*(?:个)?(?:日历)?日|(\d+)\s*(?:个)?(?:日历)?日)/gu)){let f=e[1]||e[2];if(!f||"内"===a.slice((e.index??0)+e[0].length,(e.index??0)+e[0].length+1))continue;let g=Number(f);if(!Number.isFinite(g)||g<=0||g<b)continue;let h=(e.index??0)+e[0].lastIndexOf(f),i=a.lastIndexOf("\n",h)+1,j=a.indexOf("\n",h);-1===j&&(j=a.length);let k=a.slice(i,j);if(/^\s*\|.*\|\s*$/u.test(k)||aA.test(k))continue;let l=a.slice(Math.max(i,h-40),Math.min(j,h+f.length+40));if(!d.test(l))continue;let m=a.slice(Math.max(i,h-30),Math.min(j,h+f.length+14)).trim();if(c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`前期动作时限矛盾:正文“${m}”将前期准备动作时限设在开工后第 ${g} 日,已达到/超过总工期 ${b} 日(竣工日)——前期动作不可能安排在项目末期`,suggestion:`前期准备动作时限必须落在施工准备阶段内:将第 ${g} 日改为与施工准备阶段相匹配的早期天数(早于总工期 ${b} 日),或删除具体天数改述为“开工令下发后在施工准备阶段内完成”。`}),c.length>=5)break}return c}function bv(a){let b=a.split(/\r?\n/u),c=[];b.forEach((a,b)=>{let d=/^(#{3,4})\s+([^\n]+)$/u.exec(a.trim());d&&c.push({index:b,level:d[1].length,title:d[2].trim()})});let d=[];for(let a=0;a<c.length;a+=1){let{index:e,level:f,title:g}=c[a],h=g.replace(/^[\d.]+[\s\u00a0]*/u,"");if(!/工程\s*$/u.test(h))continue;let i=h.replace(/\s*工程\s*$/u,"");if(!i||!/[、与及]/u.test(i))continue;let j=i.split(/[、与及]/u).map(a=>a.trim()).filter(a=>a.length>=2);if(j.length<2)continue;let k=b.length;for(let b=a+1;b<c.length;b+=1)if(c[b].level<=f){k=c[b].index;break}let l=b.slice(e+1,k).join("\n"),m=l.replace(/[、,,]/gu,""),n=j.filter(a=>{if(l.includes(a))return!1;let b=a.replace(/[、,,]/gu,"").replace(/(?:安装|施工|工程|作业)$/u,"");return b.length>=2&&!m.includes(b)});0!==n.length&&d.push({lineIndex:e,level:f,title:g,parts:j,uncovered:n})}return d}},36003:(a,b,c)=>{c.d(b,{AI:()=>U,Ym:()=>J,eL:()=>q.eL,hZ:()=>D,nl:()=>Z,qX:()=>E,uQ:()=>V,w9:()=>A,xu:()=>q.xu});var d=c(76760),e=c(78217),f=c(70933),g=c(30836),h=c(40299),i=c(95734),j=c(22157),k=c(46482),l=c(71001),m=c(43378),n=c(52639),o=c(40693);c(22496);var p=c(30949),q=c(22213),r=c(91943),s=c(18274),t=c(76193),u=c(21702),v=c(41991),w=c(1358),x=c(3063),y=c(54185),z=c(80572);function A(a,b,c){let d=[...a.errors.map(a=>({level:"error",message:a,suggestion:"请补充配置或资料后重新生成。"})),...a.warnings.map(a=>({level:"warning",message:a,suggestion:"建议人工确认或补充对应资料。"}))];return c.some(a=>/资料未提供|系统暂未从知识库确认/u.test(a.content))&&d.push({level:"warning",message:"存在系统暂未从知识库确认的章节内容",suggestion:"请检查项目角色配置、文件绑定顺序和事实抽取落位结果。"}),b.conflicts.length>0&&d.push(...b.conflicts.map(a=>({level:"warning",message:a,suggestion:"请根据当前模板绑定的角色、文件证据和用户要求复核取值口径。"}))),d}let B=/\b\d+(?:\.\d+)?\s*(?:日历天|小时|分钟|天|周|月|年|万元|元|台|套|个|项|批|次|份|人)(?=[。,,;;::、\s]|$)/gu;function C(a){let b=new Set;for(let c of a){let a=(0,j.lG)(c.content).replace(/\s+/gu," ");if((!/报价明细|投标报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(a)||/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(a))&&!/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂/u.test(a)){for(let c of a.matchAll(s._W))b.add(c[0].trim());for(let c of a.matchAll(B))b.add(c[0].trim());if(b.size>=40)break}}return[...b].slice(0,40)}function D(a){let b=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title),c=(b?.requiredFactIds||[]).map(b=>a.spec?.factFields.find(a=>a.id===b)?.name).filter(Boolean),d=[...new Set([...a.chapter.requiredFacts,...c,...a.plan?.requiredContents||[],...a.plan?.evidenceNeeds||[],...(a.resolvedFactNeeds||[]).filter(a=>a.need.required).map(a=>a.need.label)].filter(Boolean))],e=a.roleFacts.map(({fact:a})=>`- ${a.key}:${(0,f.eE)((0,j.lG)(a.value))}`),g=(a.resolvedFactNeeds||[]).flatMap(a=>a.facts),h=a.indexedFacts||[],i=g.length>0?[]:h.map(a=>`- ${a.key||a.fieldName||"资料事实"}:${(0,f.eE)((0,j.lG)(a.value))}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`),k=[...g,...h].filter(a=>/建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`)).filter((a,b,c)=>c.findIndex(b=>`${b.key||b.fieldName}:${(0,j.lG)(b.value)}`==`${a.key||a.fieldName}:${(0,j.lG)(a.value)}`)===b),l=[...new Set([...C(a.evidence),...g.map(a=>(0,j.lG)(a.value)).filter(a=>s.sv.test(a)),...h.map(a=>(0,j.lG)(a.value)).filter(a=>s.sv.test(a))])],m=new Set([...a.evidence.map(a=>a.filePath),...g.map(a=>a.sourceFile),...(a.indexedFacts||[]).map(a=>a.sourceFile)]).size,n=(a.resolvedFactNeeds||[]).filter(a=>"satisfied"!==a.status&&a.need.required).map(a=>a.need.label),o=function(a){if(!a)return[];let b=[];for(let[c,d]of Object.entries(a)){if(d.length<2)continue;let a=d.filter((a,b,c)=>c.findIndex(b=>b.location===a.location&&b.spec===a.spec)===b);a.length<2||b.push(`- ${c}:${a.slice(0,8).map(a=>`${a.location}:${a.spec}`).join("|")}`)}return b.slice(0,12)}(a.specAuthorityMap);return["【本章事实覆盖与参数落位要求】",d.length?`必须优先覆盖的事实/要求:
44
44
  ${d.map(a=>`- ${a}`).join("\n")}`:"",e.length?`角色节点已抽取事实:
45
45
  ${e.join("\n")}`:"",k.length?`项目基础事实卡片(资料已明确,必须优先使用,不得输出任何占位话术;其中工程地点、建设规模、计划工期等总述数据只在项目概况/工程概况类章节集中交代,其他章节仅可引用所需的具体数字,不得复述完整概况段):
46
46
  ${k.map(a=>`- ${a.key||a.fieldName}:${(0,f.eE)((0,j.lG)(a.value))}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`).join("\n")}
@@ -59,51 +59,51 @@ ${a.content}`).join("\n"),d=a.split(/[\s、,,。;;::()()【】[\]《
59
59
  【定向补充检索】以下大纲缺失事实已找到对应材料并追加在上方,请一并落位:${a.filter(a=>!A.has(a)).join("、")}`)}else A=new Set(a)}else A=new Set(a);C=r,D=A,y=["【事实大纲——由事实规划阶段生成,写作时必须逐条落位】","大纲事实为绑定材料事实行原文(已通过确定性数值对账),落位不构成编造;数值、单位、标准编号必须与大纲完全一致。",...C.sections.map(a=>{let b=[...new Set([...a.facts||[],...a.quantifiedFacts||[]])].filter(Boolean),c=(a.missingFacts||[]).filter(a=>a&&D.has(a));return[`### ${a.title||"正文"}`,b.length?`必须写入的事实(数值必须原样):
60
60
  ${b.map(a=>`- ${a}`).join("\n")}`:"",c.length?`材料缺失(禁止编造具体值;可用公共专业知识补做法与要求,补做法不得引入任何数值/规格/型号/参数):${c.join("、")}`:""].filter(Boolean).join("\n")})].join("\n\n");{let a=Math.floor(.6*(0,f.Pc)(q.targetWords||q.minWords,q.evidenceFloorChars,q.evidenceCeilingChars)),c=v.split("\n\n【定向补充检索】")[1];v=(0,f.ks)((0,f.QO)(b,B),{maxChars:a,...u})+(c?`
61
61
 
62
- 【定向补充检索】${c}`:"")}}}let E=function(a){let b=function(a){if(!a)return[];let b=[];for(let c of a.split(/\r?\n|[。;;]/u)){let a=c.trim();if(!(a.length<4)&&!(a.length>240)&&/计划工期|合同工期|工期|日历天|建设地点|工程地点|建设规模|工程规模|建筑面积|质量标准|质量目标|招标范围|施工范围|工作内容|合同估算|投资估算|最高投标限价|招标控制价|暂列金额|安全目标|文明施工目标|项目名称|工程名称/u.test(a)&&(!/(?:请|务必|不得|禁止|不要|要求你|你需要|生成|输出|格式|模板)/u.test(a)||/(?:日历天|㎡|m2|平方米|万元|元|米|天|%|层|栋|台|套)/u.test(a))&&(b.push(a),b.length>=24))break}return[...new Set(b)]}(a);return 0===b.length?"":["【用户提示词明确给定的事实——最高优先级,必须原样写入正文相关小节】",...b.map(a=>`- ${a}`),"这些事实来自用户要求;若与绑定材料中的数值冲突,以绑定材料为准。"].join("\n")}(k),H=b.sections?.length?`本章小节由生成前规划得到,请完整包含并展开以下小节:
63
- ${b.sections.map(a=>`- ${a}`).join("\n")}`:"本章没有预设小节;请按用户提示词、模板章节、角色要求和绑定材料自然组织正文。",I=function(a,b){let c=function(a,b){let c=(0,l.k2)(a.sections?.filter(Boolean)||[],a.title);if(0===c.length)return[];let d=Math.floor(b/c.length),e=Math.max(b>=900*c.length?900:Math.max(520,Math.floor(.9*d)),d);return c.map(a=>({title:a,targetWords:e}))}(a,b);return 0===c.length?"":["本章小节篇幅计划(首轮生成应尽量一次达成,避免后续补写):",...c.map(a=>`- ${a.title}:约 ${a.targetWords} 字,至少达到 ${Math.floor(.9*a.targetWords)} 字,并写入与该小节相关的材料事实、适用边界和必要说明。`)].join("\n")}(b,q.targetWords||q.minWords||0),J=(0,n._C)(q.bidComposition)?"":(0,m.T4)(b),K=(0,o.Ls)(b),L=(0,o.db)(b),M=(0,x.vN)(b.title,b.sections||[]),N=q.compactProjectContext?q.scopedProjectContext?function(a,b=2e3){let c=a.split(/\r?\n/u).map(a=>a.trim()).filter(Boolean),d=[],e=[],f=[],g=[],h=[],i="body";for(let a of c){if(a.startsWith("【招标文件评分项要求")){i="requirements",d.push(a);continue}if(a.startsWith("可信基础事实主表")){i="facts",e.push(a);continue}if(a.startsWith("章节专业任务卡:")){i="taskCard",f.push(a);continue}if(a.startsWith("章节实施方案:")){i="executionPlan",g.push(a);continue}if("requirements"===i)if(a.startsWith("【"))i="body";else{d.push(a);continue}if("facts"===i){if(a.startsWith("- ")){e.push(a);continue}i="body"}if("taskCard"===i){f.push(a);continue}if("executionPlan"===i){if(a.startsWith("- ")){g.push(a);continue}i="body"}h.push(a)}let j=h.filter(a=>/【.+】/u.test(a)||/=/u.test(a)||/^\d+\.\s+/u.test(a)||/:\S{1,40}$/u.test(a)),k=j.length>=8?j:h,l=[d.join("\n").trim(),e.join("\n").trim(),f.join("\n").trim(),g.join("\n").trim()].filter(Boolean).join("\n"),m=k.join("\n").trim(),n=(a,b)=>a.length<=b?a:`${a.slice(0,b)}
62
+ 【定向补充检索】${c}`:"")}}}let E=function(a){let b=function(a){if(!a)return[];let b=[];for(let c of a.split(/\r?\n|[。;;]/u)){let a=c.trim();if(!(a.length<4)&&!(a.length>240)&&/计划工期|合同工期|工期|日历天|建设地点|工程地点|建设规模|工程规模|建筑面积|质量标准|质量目标|招标范围|施工范围|工作内容|合同估算|投资估算|最高投标限价|招标控制价|暂列金额|安全目标|文明施工目标|项目名称|工程名称/u.test(a)&&(!/(?:请|务必|不得|禁止|不要|要求你|你需要|生成|输出|格式|模板)/u.test(a)||/(?:日历天|㎡|m2|平方米|万元|元|米|天|%|层|栋|台|套)/u.test(a))&&(b.push(a),b.length>=24))break}return[...new Set(b)]}(a);return 0===b.length?"":["【用户提示词明确给定的事实——最高优先级,必须原样写入正文相关小节】",...b.map(a=>`- ${a}`),"这些事实来自用户要求;若与绑定材料中的数值冲突,以绑定材料为准。"].join("\n")}(k),I=b.sections?.length?`本章小节由生成前规划得到,请完整包含并展开以下小节:
63
+ ${b.sections.map(a=>`- ${a}`).join("\n")}`:"本章没有预设小节;请按用户提示词、模板章节、角色要求和绑定材料自然组织正文。",J=function(a,b,c){let d=function(a,b,c){let d=(0,l.k2)(a.sections?.filter(Boolean)||[],a.title);if(0===d.length)return[];if(c&&c.length>0){let a=d.map(a=>{let b=c.find(b=>b.words>0&&b.title===a);return b?b.words:c.find(b=>b.words>0&&(0,l.kw)(b.title,a))?.words});if(a.every(a=>"number"==typeof a&&a>0))return d.map((b,c)=>({title:b,targetWords:a[c]}))}let e=Math.max(1,Math.floor(b/d.length)),f=Math.max(0,b-e*d.length);return d.map((a,b)=>({title:a,targetWords:0===b?e+f:e}))}(a,b,c);return 0===d.length?"":["本节小节篇幅上限(逐点控制、不得超出;在各自上限内按材料深度展开):",...d.map(a=>`- ${a.title}:不超过 ${H(a.targetWords)} 字,并写入与该小节相关的材料事实、适用边界和必要说明。`)].join("\n")}(b,q.targetWords||q.minWords||0,q.sectionQuotas),K=(0,n._C)(q.bidComposition)?"":(0,m.T4)(b),L=(0,o.Ls)(b),M=(0,o.db)(b),N=(0,x.vN)(b.title,b.sections||[]),O=q.compactProjectContext?q.scopedProjectContext?function(a,b=2e3){let c=a.split(/\r?\n/u).map(a=>a.trim()).filter(Boolean),d=[],e=[],f=[],g=[],h=[],i="body";for(let a of c){if(a.startsWith("【招标文件评分项要求")){i="requirements",d.push(a);continue}if(a.startsWith("可信基础事实主表")){i="facts",e.push(a);continue}if(a.startsWith("章节专业任务卡:")){i="taskCard",f.push(a);continue}if(a.startsWith("章节实施方案:")){i="executionPlan",g.push(a);continue}if("requirements"===i)if(a.startsWith("【"))i="body";else{d.push(a);continue}if("facts"===i){if(a.startsWith("- ")){e.push(a);continue}i="body"}if("taskCard"===i){f.push(a);continue}if("executionPlan"===i){if(a.startsWith("- ")){g.push(a);continue}i="body"}h.push(a)}let j=h.filter(a=>/【.+】/u.test(a)||/=/u.test(a)||/^\d+\.\s+/u.test(a)||/:\S{1,40}$/u.test(a)),k=j.length>=8?j:h,l=[d.join("\n").trim(),e.join("\n").trim(),f.join("\n").trim(),g.join("\n").trim()].filter(Boolean).join("\n"),m=k.join("\n").trim(),n=(a,b)=>a.length<=b?a:`${a.slice(0,b)}
64
64
  (上下文已截断,完整信息见绑定材料与证据)`;return l?`${l}
65
65
  ${n(m,Math.max(400,b-l.length-20))}`:n(m,b)}(j):function(a,b=2e3){let c=a.split(/\r?\n/u).map(a=>a.trim()).filter(Boolean),d=[],e=[],f=!1;for(let a of c){if(a.startsWith("【招标文件评分项要求")){f=!0,d.push(a);continue}f&&a.startsWith("【")&&(f=!1),(f?d:e).push(a)}let g=[],h=[],i=!1;for(let a of e){if(a.startsWith("可信基础事实主表")){i=!0,g.push(a);continue}if(i&&a.startsWith("- ")){g.push(a);continue}i&&!a.startsWith("- ")&&(i=!1),h.push(a)}let j=h.filter(a=>/【.+】/u.test(a)||/=/u.test(a)||/^\d+\.\s+/u.test(a)||/:\S{1,40}$/u.test(a)),k=j.length>=8?j:h,l=d.join("\n").trim(),m=g.join("\n").trim(),n=k.join("\n").trim(),o=(a,b)=>a.length<=b?a:`${a.slice(0,b)}
66
66
  (上下文已截断,完整信息见绑定材料与证据)`,p=[l,m].filter(Boolean).join("\n");return p?`${p}
67
- ${o(n,Math.max(400,b-p.length-20))}`:o(n,b)}(j):j,O=[(0,h.b_)(h.rd),q.forbidDrawingImages?"图片类材料只作为文本事实依据;禁止插入图片或 Markdown 图片语法。":"",(0,n.nD)(q.bidComposition)].filter(Boolean).join("\n\n"),P=q.targetWords||q.minWords||1e3,Q=`- 保留章节标题;本节正文篇幅目标 ${P} 字(合格区间 ${Math.floor(.85*P)}~${Math.ceil(1.15*P)} 字):篇幅向目标收敛,不得超过上限、不得低于下限。`,R=[e?`配置写作主控提示词:
67
+ ${o(n,Math.max(400,b-p.length-20))}`:o(n,b)}(j):j,P=[(0,h.b_)(h.rd),q.forbidDrawingImages?"图片类材料只作为文本事实依据;禁止插入图片或 Markdown 图片语法。":"",(0,n.nD)(q.bidComposition)].filter(Boolean).join("\n\n"),Q=function(a){let b=H(a);return`- 保留章节标题;本节正文总字数不超过 ${b} 字(控制在 ${Math.round(.85*b)}~${b} 字之间),超出即不合格。`}(q.targetWords||q.minWords||1e3),R=[e?`配置写作主控提示词:
68
68
  ${e}`:"",`文档模板:${a.name}`,`章节目的:${b.purpose}`,k?`用户要求:${k}`:"",E,j?`上下文/历史记忆(仅作偏好、历史纠偏和连续性参考;如与知识库证据冲突,以知识库证据为准):
69
- ${N}`:"",q.sharedFactLayerText||"",q.factCoverageContext||"",d.length?`需要特别补足的信息:${d.join("、")}`:"",q.chapterLevelContext||"",y,"请生成可直接导出的 Markdown 章节,要求:","- 内容必须遵循用户提示词、模板章节、提示词角色、项目资料包和自动识别的资料类型;不得编造材料未提供的项目专属事实;任何带数值、工程量、规格、型号、品牌、参数的表述必须逐字来自绑定材料、蓝图参数桶或清单事实锁,材料中没有对应值时不得猜测填充、不得以行业惯例或公共知识为由虚构数值;公共知识豁免仅限法律法规名称、标准规范名称与编号(不带本项目数值)以及通用工艺做法表述,可依据现行有效版本直接引用。","- 将材料要点自然融入正文;不要输出系统证据清单、中间分析过程或后台流程话术。",h.KX,`章节标题:${b.title}`,Q,b.sections?.length?"- 必须完整包含已规划小节;不要新增未规划的二级小节。":"- 未预设小节时,不要为了凑结构强行新增小节。",(0,n._C)(q.bidComposition)?"":b.tablePlans?.length?"- 本章存在结构化表格规划时,必须输出正式 Markdown 表格;表头必须严格使用规划字段,不得擅自改字段、删字段或增加后台溯源列。":b.tableSections?.length?`- 以下小节可使用表格辅助表达:${b.tableSections.join("、")}。`:"",(0,n._C)(q.bidComposition)?"":b.tablePlans?.length?"- 表格字段值必须优先来自项目图谱、可信事实和绑定材料;projectFactOnly 字段不得编造,也不得写任何固定占位话术。":"",H,I,J,K,L,...M,q.blueprintDataText||"",q.blueprintSliceText||"",p||"","",v?"绑定材料:":"",v,q.userWriterRules?`
69
+ ${O}`:"",q.sharedFactLayerText||"",q.factCoverageContext||"",d.length?`需要特别补足的信息:${d.join("、")}`:"",q.chapterLevelContext||"",y,"请生成可直接导出的 Markdown 章节,要求:","- 内容必须遵循用户提示词、模板章节、提示词角色、项目资料包和自动识别的资料类型;不得编造材料未提供的项目专属事实;任何带数值、工程量、规格、型号、品牌、参数的表述必须逐字来自绑定材料、蓝图参数桶或清单事实锁,材料中没有对应值时不得猜测填充、不得以行业惯例或公共知识为由虚构数值;公共知识豁免仅限法律法规名称、标准规范名称与编号(不带本项目数值)以及通用工艺做法表述,可依据现行有效版本直接引用。","- 将材料要点自然融入正文;不要输出系统证据清单、中间分析过程或后台流程话术。",h.KX,`章节标题:${b.title}`,Q,b.sections?.length?"- 必须完整包含已规划小节;不要新增未规划的二级小节。":"- 未预设小节时,不要为了凑结构强行新增小节。",(0,n._C)(q.bidComposition)?"":b.tablePlans?.length?"- 本章存在结构化表格规划时,必须输出正式 Markdown 表格;表头必须严格使用规划字段,不得擅自改字段、删字段或增加后台溯源列。":b.tableSections?.length?`- 以下小节可使用表格辅助表达:${b.tableSections.join("、")}。`:"",(0,n._C)(q.bidComposition)?"":b.tablePlans?.length?"- 表格字段值必须优先来自项目图谱、可信事实和绑定材料;projectFactOnly 字段不得编造,也不得写任何固定占位话术。":"",I,J,K,L,M,...N,q.blueprintDataText||"",q.blueprintSliceText||"",p||"","",v?"绑定材料:":"",v,q.userWriterRules?`
70
70
  【用户写作指令——必须严格遵守】
71
- ${q.userWriterRules}`:""].filter(Boolean).join("\n"),S={l0:O.length,l1:(0,i.CX)([e?`配置写作主控提示词:
71
+ ${q.userWriterRules}`:""].filter(Boolean).join("\n"),S={l0:P.length,l1:(0,i.CX)([e?`配置写作主控提示词:
72
72
  ${e}`:"",k?`用户要求:${k}`:"",E,"请生成可直接导出的 Markdown 章节,要求:","- 内容必须遵循用户提示词、模板章节、提示词角色、项目资料包和自动识别的资料类型;不得编造材料未提供的项目专属事实;任何带数值、工程量、规格、型号、品牌、参数的表述必须逐字来自绑定材料、蓝图参数桶或清单事实锁,材料中没有对应值时不得猜测填充、不得以行业惯例或公共知识为由虚构数值;公共知识豁免仅限法律法规名称、标准规范名称与编号(不带本项目数值)以及通用工艺做法表述,可依据现行有效版本直接引用。","- 将材料要点自然融入正文;不要输出系统证据清单、中间分析过程或后台流程话术。",h.KX]),l2:(0,i.CX)([`文档模板:${a.name}`,`章节目的:${b.purpose}`,j?`上下文/历史记忆(仅作偏好、历史纠偏和连续性参考;如与知识库证据冲突,以知识库证据为准):
73
- ${N}`:"",q.sharedFactLayerText||"",q.factCoverageContext||"",d.length?`需要特别补足的信息:${d.join("、")}`:"",q.chapterLevelContext||"",y]),l3:(0,i.CX)([`章节标题:${b.title}`,Q,b.sections?.length?"- 必须完整包含已规划小节;不要新增未规划的二级小节。":"- 未预设小节时,不要为了凑结构强行新增小节。",b.tablePlans?.length?"- 本章存在结构化表格规划时,必须输出正式 Markdown 表格;表头必须严格使用规划字段,不得擅自改字段、删字段或增加后台溯源列。":b.tableSections?.length?`- 以下小节可使用表格辅助表达:${b.tableSections.join("、")}。`:"",b.tablePlans?.length?"- 表格字段值必须优先来自项目图谱、可信事实和绑定材料;projectFactOnly 字段不得编造,也不得写任何固定占位话术。":"",H,I,J,K,L,...M,q.blueprintDataText||"",q.blueprintSliceText||"",p||"",v?"绑定材料:":"",v,q.userWriterRules?`
73
+ ${O}`:"",q.sharedFactLayerText||"",q.factCoverageContext||"",d.length?`需要特别补足的信息:${d.join("、")}`:"",q.chapterLevelContext||"",y]),l3:(0,i.CX)([`章节标题:${b.title}`,Q,b.sections?.length?"- 必须完整包含已规划小节;不要新增未规划的二级小节。":"- 未预设小节时,不要为了凑结构强行新增小节。",b.tablePlans?.length?"- 本章存在结构化表格规划时,必须输出正式 Markdown 表格;表头必须严格使用规划字段,不得擅自改字段、删字段或增加后台溯源列。":b.tableSections?.length?`- 以下小节可使用表格辅助表达:${b.tableSections.join("、")}。`:"",b.tablePlans?.length?"- 表格字段值必须优先来自项目图谱、可信事实和绑定材料;projectFactOnly 字段不得编造,也不得写任何固定占位话术。":"",I,J,K,L,M,...N,q.blueprintDataText||"",q.blueprintSliceText||"",p||"",v?"绑定材料:":"",v,q.userWriterRules?`
74
74
  【用户写作指令——必须严格遵守】
75
- ${q.userWriterRules}`:""])},T=await (0,i.rI)(O,R,!1,{maxTokens:q.maxTokens,signal:q.signal,diagnostics:q.diagnostics,contextLayers:S,prefixKey:`writer-block:${b.id}`});if(T&&!(T.length<120))return(0,h.kT)((0,h.FD)(T.startsWith("## ")?T:`## ${b.title}
75
+ ${q.userWriterRules}`:""])},T=await (0,i.rI)(P,R,!1,{maxTokens:q.maxTokens,signal:q.signal,diagnostics:q.diagnostics,contextLayers:S,prefixKey:`writer-block:${b.id}`});if(T&&!(T.length<120))return(0,h.kT)((0,h.FD)(T.startsWith("## ")?T:`## ${b.title}
76
76
 
77
- ${T}`,!!q.forbidDrawingImages))}function H(a){return[...new Set((a.match(/[\p{Script=Han}]{2,}|[A-Za-z0-9_-]{3,}/gu)||[]).map(a=>a.toLowerCase()))]}function I(a,b,c){let d=H([a,b.title,...b.requiredFacts||[]].join(" ")),e=/项目概况|工程概况|总体|部署|施工方案|工期|进度|质量|安全|资源|材料|设备/u.test(a),f=c.map((b,c)=>{let f=`${b.filePath}
77
+ ${T}`,!!q.forbidDrawingImages))}function H(a){return Math.max(1,Math.round(.75*a))}function I(a){return[...new Set((a.match(/[\p{Script=Han}]{2,}|[A-Za-z0-9_-]{3,}/gu)||[]).map(a=>a.toLowerCase()))]}function J(a,b,c){let d=I([a,b.title,...b.requiredFacts||[]].join(" ")),e=/项目概况|工程概况|总体|部署|施工方案|工期|进度|质量|安全|资源|材料|设备/u.test(a),f=c.map((b,c)=>{let f=`${b.filePath}
78
78
  ${b.sectionTitle||""}
79
79
  ${b.content}`.toLowerCase(),g=`${b.filePath}
80
80
  ${b.sectionTitle||""}
81
81
  ${b.content}`,h=d.reduce((a,b)=>a+ +!!f.includes(b),0),i=b.sectionTitle&&(a.includes(b.sectionTitle)||b.sectionTitle.includes(a))?4:0,j=s.sv.test(g)||/合同估算价|合同估算价格|计划工期/u.test(g)?1.5:0,k=e&&/计划工期|合同工期|合同估算价|合同估算价格|投资估算|建设地点|建设规模|质量标准|招标范围/u.test(g)?5:0,l=.8*!!/table|sheet|bill|data|drawing|图纸|表格|清单|参数|数据|说明/u.test(`${b.roleId||""} ${b.processingType||""} ${b.filePath}`);return{item:b,score:h+i+j+k+l+.1*b.score-.001*c}}).sort((a,b)=>b.score-a.score),g=f.filter(a=>a.score>0).map(a=>a.item);if(0===g.length)return c;let h=new Set(g);return[...g,...f.filter(({item:a})=>!h.has(a)).filter(({item:a})=>/招标范围|建设规模|建设地点|计划工期|质量标准|施工内容|管理机构|岗位职责|施工部署|现场交通|人车分流/u.test(`${a.sectionTitle||""}
82
- ${a.content}`)).map(a=>a.item)]}let J=/计划工期|合同工期|建设地点|建设规模|质量标准|招标范围|施工范围|工作内容|项目特征|材料|设备|规格|型号|数量|单位|做法|节点|系统|管径|标高|尺寸|厚度|强度|等级|验收|检测|试验|安全|文明|扬尘|环保|消防|临时用电|临水|排水|交叉施工|地下管线|有限空间|危大|专项方案|专家论证|进度节点|保修|移交/iu,K=/报价明细|综合单价|税率|增值税|利润|结算|预留金|暂列金额|暂估价/u,L=/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|最高投标限价|招标控制价/u,M=/材料价格|商务报价|投标总价|合同总价|工程总价/u,N=["暂列金额与暂估价的报价明细","综合单价与清单合价的商务数据","材料价格与商务报价的商务条款"],O=["合同估算价与投资估算的项目信息","最高投标限价与招标控制价的公开信息"];async function P(a){return(0,v.A)({prototypes:[...N],negativePrototypes:[...O],embedDocuments:a})}function Q(a){return(0,j.lG)(a).replace(/\s+/gu,"").replace(/[,。,.;;::、()()【】[\]《》“”"'`]/gu,"")}function R(a){return(0,j.lG)(a).replace(/^\s*#{1,6}\s*/u,"").replace(/^\s*\d+(?:\.\d+)*\s*/u,"").replace(/\s+/gu," ").trim()}function S(a,b){let c=Q(b),d=function(a){let b=R(a),c=Q(b),d=new Set,e=a=>{let b=Q(a);b.length<2||/^(本项目|施工|工程|资料|要求|进行|应当|按照|落实|管理|检查|验收)$/u.test(b)||d.add(b)};for(let a of b.split(/[,。,.;;::、()()【】[\]\s]+/u))e(a);let f=b.match(/^\s*([^::]{2,12})[::]\s*(.+)$/u);for(let a of(f&&(e(f[1]||""),e(f[2]||"")),c.matchAll(/\d+(?:\.\d+)?(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|L|ml|MPa|kPa|℃|%|台|套|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年)?|DN\d+|φ\d+|Φ\d+|GB\d+|JGJ\d+/giu)))e(a[0]);return[...d].slice(0,18)}(a);if(0===d.length)return 0;let e=d.filter(a=>/\d/u.test(a));return e.length>0?e.filter(a=>c.includes(a)).length:d.filter(a=>c.includes(a)).length}async function T(a,b,c){let e=[],f=new Set,g=H(a).filter(a=>a.length>=2),h=[];for(let a of b)for(let b of(0,j.lG)(a.content).split(/\r?\n/u)){let c=(0,w.rj)(R(b));!(c.length<4)&&!(c.length>280)&&(0,w.SR)(c)&&!(/^(?:工作表|序号|COL\d+|资料类型|PDF\s*第|第\d+页)/iu.test(c)||/\|.*\|/u.test(c)&&!/(工程名称|建设地点|建设规模|计划工期|招标范围|合同估算|暂列金额|建筑面积)/u.test(c)||/^(?:[.。;;、\s]+)?(?:工程重点难点|确保安全文明生产|项目概况与招标范围)$/u.test(c)||/^[.。;;、\s]*[^::]{2,40}(?:是否|符合|在采购范围内).{0,30}\d{3,}$/u.test(c)||/^[.。;;、\s]*(?:系统|综合布线系统|智能化设备).{0,40}\d{3,}$/u.test(c)||/^[.。;;、\s]*(?:工程重点难点及危大工程的保障体系与措施|确保安全文明生产的管理体系与措施)$/u.test(c)||/第二章投标人须知|不得存在|报价|中标后不予调整|清单不再单独列项|自行踏勘|元\/条|安全生产许可证|营业执照|联合体投标|投标人资格|投标人资质|资质要求|资格审查|资格后审|业绩要求|信誉要求|财务要求|中标通知书|签订合同|评标办法|电子交易系统|踏勘现场|投标预备会/u.test(c))&&1&&h.push({line:c,filePath:a.filePath,roleId:a.roleId})}let i=await P(c),k=h.filter(({line:a})=>{let b=K.test(a),c=L.test(a),d=M.test(a);return b&&(c||d)||d&&!b}),l=k.length>0?await i(k.map(({line:a})=>a)):[],m=new Set(k.filter((a,b)=>l[b]).map(({line:a})=>a));for(let{line:a,filePath:b,roleId:c}of h){let d=K.test(a),h=L.test(a),i=M.test(a);if(d&&!h&&!i||m.has(a))continue;let j=s.AM.test(a),k=J.test(a),l=g.some(b=>a.includes(b));if(!j&&!k&&!l)continue;let n=Q(a).slice(0,160);if(!f.has(n)&&(f.add(n),e.push({text:a,sourceFile:b,roleId:c,quantified:j}),e.length>=16))break}let n=e.map(a=>`- ${a.text}(来源:${d.basename(a.sourceFile)}${a.roleId?`,角色:${a.roleId}`:""})`),o=n.length?`【当前小节写作任务卡】
82
+ ${a.content}`)).map(a=>a.item)]}let K=/计划工期|合同工期|建设地点|建设规模|质量标准|招标范围|施工范围|工作内容|项目特征|材料|设备|规格|型号|数量|单位|做法|节点|系统|管径|标高|尺寸|厚度|强度|等级|验收|检测|试验|安全|文明|扬尘|环保|消防|临时用电|临水|排水|交叉施工|地下管线|有限空间|危大|专项方案|专家论证|进度节点|保修|移交/iu,L=/报价明细|综合单价|税率|增值税|利润|结算|预留金|暂列金额|暂估价/u,M=/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|最高投标限价|招标控制价/u,N=/材料价格|商务报价|投标总价|合同总价|工程总价/u,O=["暂列金额与暂估价的报价明细","综合单价与清单合价的商务数据","材料价格与商务报价的商务条款"],P=["合同估算价与投资估算的项目信息","最高投标限价与招标控制价的公开信息"];async function Q(a){return(0,v.A)({prototypes:[...O],negativePrototypes:[...P],embedDocuments:a})}function R(a){return(0,j.lG)(a).replace(/\s+/gu,"").replace(/[,。,.;;::、()()【】[\]《》“”"'`]/gu,"")}function S(a){return(0,j.lG)(a).replace(/^\s*#{1,6}\s*/u,"").replace(/^\s*\d+(?:\.\d+)*\s*/u,"").replace(/\s+/gu," ").trim()}function T(a,b){let c=R(b),d=function(a){let b=S(a),c=R(b),d=new Set,e=a=>{let b=R(a);b.length<2||/^(本项目|施工|工程|资料|要求|进行|应当|按照|落实|管理|检查|验收)$/u.test(b)||d.add(b)};for(let a of b.split(/[,。,.;;::、()()【】[\]\s]+/u))e(a);let f=b.match(/^\s*([^::]{2,12})[::]\s*(.+)$/u);for(let a of(f&&(e(f[1]||""),e(f[2]||"")),c.matchAll(/\d+(?:\.\d+)?(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|L|ml|MPa|kPa|℃|%|台|套|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年)?|DN\d+|φ\d+|Φ\d+|GB\d+|JGJ\d+/giu)))e(a[0]);return[...d].slice(0,18)}(a);if(0===d.length)return 0;let e=d.filter(a=>/\d/u.test(a));return e.length>0?e.filter(a=>c.includes(a)).length:d.filter(a=>c.includes(a)).length}async function U(a,b,c){let e=[],f=new Set,g=I(a).filter(a=>a.length>=2),h=[];for(let a of b)for(let b of(0,j.lG)(a.content).split(/\r?\n/u)){let c=(0,w.rj)(S(b));!(c.length<4)&&!(c.length>280)&&(0,w.SR)(c)&&!(/^(?:工作表|序号|COL\d+|资料类型|PDF\s*第|第\d+页)/iu.test(c)||/\|.*\|/u.test(c)&&!/(工程名称|建设地点|建设规模|计划工期|招标范围|合同估算|暂列金额|建筑面积)/u.test(c)||/^(?:[.。;;、\s]+)?(?:工程重点难点|确保安全文明生产|项目概况与招标范围)$/u.test(c)||/^[.。;;、\s]*[^::]{2,40}(?:是否|符合|在采购范围内).{0,30}\d{3,}$/u.test(c)||/^[.。;;、\s]*(?:系统|综合布线系统|智能化设备).{0,40}\d{3,}$/u.test(c)||/^[.。;;、\s]*(?:工程重点难点及危大工程的保障体系与措施|确保安全文明生产的管理体系与措施)$/u.test(c)||/第二章投标人须知|不得存在|报价|中标后不予调整|清单不再单独列项|自行踏勘|元\/条|安全生产许可证|营业执照|联合体投标|投标人资格|投标人资质|资质要求|资格审查|资格后审|业绩要求|信誉要求|财务要求|中标通知书|签订合同|评标办法|电子交易系统|踏勘现场|投标预备会/u.test(c))&&1&&h.push({line:c,filePath:a.filePath,roleId:a.roleId})}let i=await Q(c),k=h.filter(({line:a})=>{let b=L.test(a),c=M.test(a),d=N.test(a);return b&&(c||d)||d&&!b}),l=k.length>0?await i(k.map(({line:a})=>a)):[],m=new Set(k.filter((a,b)=>l[b]).map(({line:a})=>a));for(let{line:a,filePath:b,roleId:c}of h){let d=L.test(a),h=M.test(a),i=N.test(a);if(d&&!h&&!i||m.has(a))continue;let j=s.AM.test(a),k=K.test(a),l=g.some(b=>a.includes(b));if(!j&&!k&&!l)continue;let n=R(a).slice(0,160);if(!f.has(n)&&(f.add(n),e.push({text:a,sourceFile:b,roleId:c,quantified:j}),e.length>=16))break}let n=e.map(a=>`- ${a.text}(来源:${d.basename(a.sourceFile)}${a.roleId?`,角色:${a.roleId}`:""})`),o=n.length?`【当前小节写作任务卡】
83
83
  小节:${a}
84
84
  必须优先落位的资料事实:
85
85
  ${n.join("\n")}
86
86
  成稿要求:1)至少自然写入其中 2 条资料事实;2)如存在数字、规格、标准编号、数量、工期,必须至少原样写入 1 条;3)围绕“资料依据—对象范围—实施做法—检查验收/闭环”展开,不得写成“结合实际、按规范执行”的泛化空话;4)不得改写、换算或编造资料未提供的参数;5)量化参数落位硬性要求:本节正文每千字不少于 2 个不同量化参数(优先使用上方清单参数与资料原文参数),同一参数不得反复堆砌凑数;当本节资料可落位参数不足 2 个/千字时,以全部可落位参数写入为准,不得虚构参数凑数——「参数不足」仅在资料中仍有未落位参数时构成打回理由。`:"",p=C(b),q=p.length?`【量化参数落位清单】
87
- 本节资料中可直接落位的可靠精确参数/编号:${p.join("、")}。这些参数来自绑定资料,不属于编造;涉及对应对象、部位、工序、材料、设备、质量验收或安全控制时必须自然写入正文,并保持原样或等价专业表达。`:"";return{items:e,quantifiedCount:e.filter(a=>a.quantified).length,preciseTokens:p,prompt:[o,q].filter(Boolean).join("\n\n")}}function U(a,b,c){if(0===c.items.length)return;let d=(0,e.V7)(b);if(d<180)return`小节正文过短,需补写专业做法和证据依据`;let f=/概况|范围|清单|图纸|设计|材料|设备|工期|质量|安全|危大|资源|验收/u.test(a),g=c.items.filter(a=>S(a.text,b)>=(a.quantified?1:2)),h=c.items.filter(a=>a.quantified&&S(a.text,b)>=1),i=f?Math.min(c.items.length,2):Math.min(c.items.length,1),j=f&&c.quantifiedCount>0?1:0;if(g.length>=i&&h.length>=j||!f&&d>=650&&/复核|检查|验收|交底|台账|整改|闭环|进场|协调|保护/u.test(b))return;let k=c.items.filter(a=>!g.includes(a)).slice(0,f?4:2).map(a=>a.text);return`知识库事实落位不足:当前小节已落位 ${g.length}/${c.items.length} 条知识库事实、${h.length}/${c.quantifiedCount} 条量化事实;建议补入:${k.join(";")}`}let V=["农村","村村","全村","本村","各村","每村","乡村","跨村","入村","出村","邻村","沿村","自然村","所有村","多村"],W=["村","社区","小区","家园","片区","工区","标段"].map(a=>RegExp(`[\\u4e00-\\u9fa5A-Za-z0-9]{1,6}${a}`,"gu"));function X(a){let b=new Set;for(let c of W)for(let d of a.matchAll(c))V.some(a=>d[0].includes(a))||b.add(d[0]);return b}async function Y(a,b){let c,d=b.blocks;if(0===d.length)return;let l=(a,b)=>a.replace(/^###\s+[^\n]*\n+/u,a=>{let c=a.replace(/^###\s+/u,"").trim();return(0,j.Sw)(c)===b?"":a}),n=d.flatMap(a=>a.subPoints.flatMap(a=>a.sources)),o=(0,m.nn)(a.chapter,n),s=d.map((b,c)=>{let e=(a.chapter.tablePlans||[]).filter(a=>{if(o.includes(a))return!1;let c=a.title||"";return b.subPoints.some(a=>a.sources.some(a=>c.includes(a)||a.includes(c))||c.includes(a.title)||a.title.includes(c))});return c===d.length-1?[...e,...o]:e}),v=(0,z.z)().plannedBlockConcurrency||d.length,w=Math.max(1,Math.min(d.length,(0,i.Sq)(),Number.isFinite(v)?Math.floor(v):d.length)),A=Array(d.length).fill(void 0),B=function(a,b){let c=a.map(a=>`${a.title} ${a.subPoints.map(a=>a.title).join(" ")}`),d=c.map(a=>new Set(H(a).filter(a=>a.length>=2))),e=c.map(a=>X(a)),f=a.map(()=>[]);if(0===b.length)return f;for(let a of b){let b=H(a).filter(a=>a.length>=2),c=X(a),g=-1,h=0;d.forEach((a,d)=>{let f=e[d],i=0;if(f.size>0&&c.size>0){if(![...c].some(a=>[...f].some(b=>a.includes(b)||b.includes(a))))return;i=100}let j=b.reduce((b,c)=>b+ +!!a.has(c),0)+i;j>h&&(h=j,g=d)}),g>=0&&h>0&&f[g].push(a)}return f}(d,[...new Set(a.evidence.flatMap(a=>(0,f.oW)(a.content).split("\n").filter(Boolean)))]),C=(0,z.z)().chapterPoolChars||5e3,D=(0,f.R7)((0,f.QO)(a.chapter,a.evidence),a.chapter.requiredFacts||[],Number.isFinite(C)?Math.floor(C):8e3),E=(0,z.z)().blockEvidenceChars||1e3,F=Number.isFinite(E)&&E>0?Math.floor(E):1e3,I=async(b,c)=>{var f;let h=(0,j.Sw)(b.title),i=b.subPoints.filter(a=>(0,j.Sw)(a.title)!==h).map(a=>a.title),l=new Set([b.title,...b.subPoints.map(a=>a.title)].map(j.Sw).filter(Boolean)),m=new Set(d.flatMap(a=>[a.title,...a.subPoints.map(a=>a.title)]).filter(a=>!l.has((0,j.Sw)(a))).map(j.Sw).filter(Boolean)),n=H(`${b.title} ${i.join(" ")}`).filter(a=>a.length>=2),o=a=>Math.min(24,n.reduce((b,c)=>b+6*!!a.content.includes(c),0)),v=[...a.evidence.map(a=>({item:a,score:n.reduce((b,c)=>b+ +!!a.content.includes(c),0)})).sort((a,b)=>b.score-a.score).map(a=>a.item),...a.sectionEvidenceProvider?await a.sectionEvidenceProvider(b.title).catch(()=>[]):[]],w=x.Yp.test(b.title)?"major":x.gG.test(b.title)||x.gG.test(a.chapter.title)?"division":"",A=x.gG.test(a.chapter.title)&&x.gG.test(b.title),C=a.skeletonProjectContext??a.projectContext,E=w&&!A?(0,q.sh)(C,v):[],I=b.subPoints.map(a=>a.title).filter(Boolean),J=A?[]:(0,q.iA)(E,I),K=A?[]:J.length>0?J:I.length>=3?I:[],L=w?(0,q.Bk)(C,v,3,K):"",M="division"!==w||0!==K.length||A?"":`【分部工程施工方案要素要求】本节为一个分部分项工程的施工方案,写成连贯散文叙述(禁止 Markdown 表格;禁止以“施工概况/施工流程/施工方法”等结构标签充当小节标题或段落开头):
87
+ 本节资料中可直接落位的可靠精确参数/编号:${p.join("、")}。这些参数来自绑定资料,不属于编造;涉及对应对象、部位、工序、材料、设备、质量验收或安全控制时必须自然写入正文,并保持原样或等价专业表达。`:"";return{items:e,quantifiedCount:e.filter(a=>a.quantified).length,preciseTokens:p,prompt:[o,q].filter(Boolean).join("\n\n")}}function V(a,b,c){if(0===c.items.length)return;let d=(0,e.V7)(b);if(d<180)return`小节正文过短,需补写专业做法和证据依据`;let f=/概况|范围|清单|图纸|设计|材料|设备|工期|质量|安全|危大|资源|验收/u.test(a),g=c.items.filter(a=>T(a.text,b)>=(a.quantified?1:2)),h=c.items.filter(a=>a.quantified&&T(a.text,b)>=1),i=f?Math.min(c.items.length,2):Math.min(c.items.length,1),j=f&&c.quantifiedCount>0?1:0;if(g.length>=i&&h.length>=j||!f&&d>=650&&/复核|检查|验收|交底|台账|整改|闭环|进场|协调|保护/u.test(b))return;let k=c.items.filter(a=>!g.includes(a)).slice(0,f?4:2).map(a=>a.text);return`知识库事实落位不足:当前小节已落位 ${g.length}/${c.items.length} 条知识库事实、${h.length}/${c.quantifiedCount} 条量化事实;建议补入:${k.join(";")}`}let W=["农村","村村","全村","本村","各村","每村","乡村","跨村","入村","出村","邻村","沿村","自然村","所有村","多村"],X=["村","社区","小区","家园","片区","工区","标段"].map(a=>RegExp(`[\\u4e00-\\u9fa5A-Za-z0-9]{1,6}${a}`,"gu"));function Y(a){let b=new Set;for(let c of X)for(let d of a.matchAll(c))W.some(a=>d[0].includes(a))||b.add(d[0]);return b}async function Z(a,b){let c,d=b.blocks;if(0===d.length)return;let l=(a,b)=>a.replace(/^###\s+[^\n]*\n+/u,a=>{let c=a.replace(/^###\s+/u,"").trim();return(0,j.Sw)(c)===b?"":a}),n=d.flatMap(a=>a.subPoints.flatMap(a=>a.sources)),o=(0,m.nn)(a.chapter,n),s=d.map((b,c)=>{let e=(a.chapter.tablePlans||[]).filter(a=>{if(o.includes(a))return!1;let c=a.title||"";return b.subPoints.some(a=>a.sources.some(a=>c.includes(a)||a.includes(c))||c.includes(a.title)||a.title.includes(c))});return c===d.length-1?[...e,...o]:e}),v=(0,z.z)().plannedBlockConcurrency||d.length,w=Math.max(1,Math.min(d.length,(0,i.Sq)(),Number.isFinite(v)?Math.floor(v):d.length)),A=Array(d.length).fill(void 0),B=function(a,b){let c=a.map(a=>`${a.title} ${a.subPoints.map(a=>a.title).join(" ")}`),d=c.map(a=>new Set(I(a).filter(a=>a.length>=2))),e=c.map(a=>Y(a)),f=a.map(()=>[]);if(0===b.length)return f;for(let a of b){let b=I(a).filter(a=>a.length>=2),c=Y(a),g=-1,h=0;d.forEach((a,d)=>{let f=e[d],i=0;if(f.size>0&&c.size>0){if(![...c].some(a=>[...f].some(b=>a.includes(b)||b.includes(a))))return;i=100}let j=b.reduce((b,c)=>b+ +!!a.has(c),0)+i;j>h&&(h=j,g=d)}),g>=0&&h>0&&f[g].push(a)}return f}(d,[...new Set(a.evidence.flatMap(a=>(0,f.oW)(a.content).split("\n").filter(Boolean)))]),C=(0,z.z)().chapterPoolChars||5e3,D=(0,f.R7)((0,f.QO)(a.chapter,a.evidence),a.chapter.requiredFacts||[],Number.isFinite(C)?Math.floor(C):8e3),E=(0,z.z)().blockEvidenceChars||1e3,F=Number.isFinite(E)&&E>0?Math.floor(E):1e3,J=async(b,c)=>{var f;let h=(0,j.Sw)(b.title),i=b.subPoints.filter(a=>(0,j.Sw)(a.title)!==h),l=i.map(a=>a.title),m=new Set([b.title,...b.subPoints.map(a=>a.title)].map(j.Sw).filter(Boolean)),n=new Set(d.flatMap(a=>[a.title,...a.subPoints.map(a=>a.title)]).filter(a=>!m.has((0,j.Sw)(a))).map(j.Sw).filter(Boolean)),o=I(`${b.title} ${l.join(" ")}`).filter(a=>a.length>=2),v=a=>Math.min(24,o.reduce((b,c)=>b+6*!!a.content.includes(c),0)),w=[...a.evidence.map(a=>({item:a,score:o.reduce((b,c)=>b+ +!!a.content.includes(c),0)})).sort((a,b)=>b.score-a.score).map(a=>a.item),...a.sectionEvidenceProvider?await a.sectionEvidenceProvider(b.title).catch(()=>[]):[]],A=x.Yp.test(b.title)?"major":x.gG.test(b.title)||x.gG.test(a.chapter.title)?"division":"",C=x.gG.test(a.chapter.title)&&x.gG.test(b.title),E=a.skeletonProjectContext??a.projectContext,J=A&&!C?(0,q.sh)(E,w):[],K=b.subPoints.map(a=>a.title).filter(Boolean),L=C?[]:(0,q.iA)(J,K),M=C?[]:L.length>0?L:K.length>=3?K:[],N=A?(0,q.Bk)(E,w,3,M):"",O="division"!==A||0!==M.length||C?"":`【分部工程施工方案要素要求】本节为一个分部分项工程的施工方案,写成连贯散文叙述(禁止 Markdown 表格;禁止以“施工概况/施工流程/施工方法”等结构标签充当小节标题或段落开头):
88
88
  要素自然融入叙述:作业对象与部位、工程量或规模、材料设备规格型号(数量类数值优先取工程量清单数据);工序先后顺序清晰;工艺做法与工艺参数(数值+单位);验收检测与记录闭环。
89
- 数值来源优先级:工程量、材料规格、设备型号等数量类数值优先取工程量清单数据;清单未覆盖的参数(标高、坡率、构造做法等)才取图纸数据;禁止“按设计图纸执行”“详见设计图纸”“按设计文件确定”式概括话术——必须落到具体数值或具体规范条文。${i.length>0?`
90
- 本节覆盖以下分部分项工作内容,正文必须逐项落实、不得遗漏任何一项:${i.join("、")}。`:""}`,N=A?(f=b.targetWords,`【分部分项工程施工方案总述】本节为本章各分部分项工程施工方案的总体概述小节:各分部工程的具体施工方案已在本章其他小节逐项展开,本节不得复写任何单个分部工程的施工方案,也不得把本章其他小节(各分部工程方案)标题作为本节任何标题。正文直接展开、无需四级标题,禁止 Markdown 表格,按以下四部分组织:
89
+ 数值来源优先级:工程量、材料规格、设备型号等数量类数值优先取工程量清单数据;清单未覆盖的参数(标高、坡率、构造做法等)才取图纸数据;禁止“按设计图纸执行”“详见设计图纸”“按设计文件确定”式概括话术——必须落到具体数值或具体规范条文。${l.length>0?`
90
+ 本节覆盖以下分部分项工作内容,正文必须逐项落实、不得遗漏任何一项:${l.join("、")}。`:""}`,P=C?(f=b.targetWords,`【分部分项工程施工方案总述】本节为本章各分部分项工程施工方案的总体概述小节:各分部工程的具体施工方案已在本章其他小节逐项展开,本节不得复写任何单个分部工程的施工方案,也不得把本章其他小节(各分部工程方案)标题作为本节任何标题。正文直接展开、无需四级标题,禁止 Markdown 表格,按以下四部分组织:
91
91
  一、分部工程划分与专业分组:按专业分组(如道路、排水、景观绿化、电气照明、公建配套等)列明本章覆盖的分部工程范围与作业内容,说明各专业间的相互关系;
92
92
  二、施工总体部署:施工分区与流水段划分、总体施工顺序安排、关键线路与节点控制、各专业施工穿插衔接原则;
93
93
  三、施工组织与资源配置:按专业划分的施工队伍与作业面安排、总体资源投入与调配原则、多专业协调管理机制;
94
94
  四、质量、安全与进度接口:各分部工程间的成品保护与工序交接安排、总体质量控制与检测验收安排、安全文明施工总体要求。
95
- 每部分不少于 ${Math.floor(f/4)} 字,全文合计不少于 ${f} 字;结合本项目资料中的具体工程内容(单体、部位、专业、工程量)展开,禁止空泛原则表述。`):"",O=[...new Set([b.title,...b.subPoints.map(a=>a.title),...b.subPoints.flatMap(a=>a.sources||[]),...K].filter(Boolean))],P=a.blueprintData?(0,p.Rx)(a.blueprintData,{blockTokens:O,quantityCharsCap:(0,z.z)().blueprintBlockQuantityCap,materialCharsCap:(0,z.z)().blueprintBlockMaterialCap}):"",Q=a.blueprintChapter&&a.blueprintData?(0,p.TF)(a.blueprintChapter,a.blueprintData,{blockTitle:b.title,subPointTitles:i,skeletonNames:K,sliceCharsCap:(0,z.z)().blueprintBlockSliceCap}):"",R={...a.chapter,title:b.title,sections:i,tablePlans:s[c]||[]},S=[...b.facts||[],...B[c]].slice(0,8),T=S.length?`【本主题块专属事实(只能在本节使用,不得重复出现在本章其他节;本章其他节已认领各自专属事实,本节不得重复展开其他节专属事实)】${S.map(a=>`- ${a}`).join("\n")}`:"",U=b.subPoints.map(a=>{let c=a.quotaWords&&a.quotaWords>0?`篇幅约 ${a.quotaWords} 字`:"";return(0,j.Sw)(a.title)===h?`- ### ${b.title}(本节标题,覆盖评分细目:${a.sources.join("、")};正文直接展开,无需四级标题;如按细目分节,仅可使用上述细目标题作为四级标题${c?`;${c}`:""})`:a.sources.length>1?`- #### ${a.title}(覆盖评分细目:${a.sources.join("、")}${c?`;${c}`:""})`:`- #### ${a.title}${c?`(${c})`:""}`}).join("\n"),V=m.size>0?`严禁将以下属于本章其他小节的标题作为本节任何标题输出(H3 仅允许「${b.title}」,H4 仅允许上面清单中的标题):${[...m].join("、")}。`:"",W=[T,L,N,M,w&&!A?(0,y.gn)(c):"",b.subPoints.length>0?`本节是「${a.chapter.title}」章的一个主题小节,只写本节标题覆盖的内容,不得重复本章其他节内容;必须按以下清单逐点写出实施性正文,标题必须与给定标题完全一致,不得改名、合并或遗漏;每个要点必须覆盖其标注的全部评分细目内容,但不得为这些细目单独开设小节标题;清单标注的篇幅为该要点目标深度,按标注详略展开:
96
- ${U}${V?`
97
- ${V}`:""}`:`本节是「${a.chapter.title}」章的唯一小节(本章无细分小节规划):正文在 H3 标题下直接展开为连贯的正式叙述,不使用四级标题;覆盖本节标题对应的全部实质内容,不得重复章外内容。`,"【防复读硬约束】本节内同一句话只允许出现一次:同一段落内不得复读任何已写出的句子,不同段落之间不得整句复制,同一工艺/措施只在一处完整表述、其余位置引用结论不重述原文;段落结尾不得复读段内前句(禁止“为此/综上/因此”后接照抄句)。"].filter(Boolean).join("\n\n"),X=[],Y=[],Z=[],$=0,_="",aa="",ab="",ac="",ad="",ae="",af="",ag="";for(let d=0;d<2;d+=1){let f=0===d?"":["【上一轮未通过质检】",X.length?`缺失 H4 要点标题:${X.join("、")}。必须逐点补齐以上 H4 标题并展开正式正文,H4 标题与给定标题完全一致。`:"",Y.length?`重复展开的 H4 要点标题:${Y.join("、")}。同一小节内相同要点被重复展开多轮,必须只保留一轮完整展开,其余重复小节连同标题整体删除,不得以换编号方式重复同一内容。`:"",Z.length?`清单外标题(属于本章其他小节或不在本节要点清单内):${Z.join("、")}。这些标题连同其正文整块删除,本节只允许输出上面清单中的 H4 标题与「${b.title}」H3 标题。`:"",0===X.length&&0===Y.length&&0===Z.length?"必须完整包含每个 H4 要点标题并展开正文,不得合并或遗漏要点。":"",_,aa,ab,ac,ad,ae,af,ag,a.blueprintMustCiteHint?`【蓝图锁定数值检查】正文必须逐条出现以下蓝图锁定数值且与给定值完全一致:${a.blueprintMustCiteHint}。`:"",$>0?$<Math.floor(.85*b.targetWords)?`当前输出仅 ${$} 字,距篇幅下限 ${Math.floor(.85*b.targetWords)} 字还缺 ${Math.floor(.85*b.targetWords)-$} 字,必须逐点展开补足(区间上限 ${Math.ceil(1.15*b.targetWords)} 字)。`:$>Math.ceil(1.15*b.targetWords)?"":`当前输出 ${$} 字(本节合同区间 ${Math.floor(.85*b.targetWords)}~${Math.ceil(1.15*b.targetWords)} 字),保持篇幅并修正上述缺陷。`:`本节篇幅合同区间为 ${Math.floor(.85*b.targetWords)}~${Math.ceil(1.15*b.targetWords)} 字(目标 ${b.targetWords} 字)。`].filter(Boolean).join("");try{let h,l,p=()=>G(a.template,R,v,a.missingFacts,a.promptTexts,a.projectContext,a.requirement,f?`${W}
95
+ 每部分不少于 ${Math.floor(f/4)} 字,全文合计不少于 ${f} 字;结合本项目资料中的具体工程内容(单体、部位、专业、工程量)展开,禁止空泛原则表述。`):"",Q=[...new Set([b.title,...b.subPoints.map(a=>a.title),...b.subPoints.flatMap(a=>a.sources||[]),...M].filter(Boolean))],R=a.blueprintData?(0,p.Rx)(a.blueprintData,{blockTokens:Q,quantityCharsCap:(0,z.z)().blueprintBlockQuantityCap,materialCharsCap:(0,z.z)().blueprintBlockMaterialCap}):"",S=a.blueprintChapter&&a.blueprintData?(0,p.TF)(a.blueprintChapter,a.blueprintData,{blockTitle:b.title,subPointTitles:l,skeletonNames:M,sliceCharsCap:(0,z.z)().blueprintBlockSliceCap}):"",T={...a.chapter,title:b.title,sections:l,tablePlans:s[c]||[]},U=i.map(a=>({title:a.title,words:a.quotaWords||0})),V=[...b.facts||[],...B[c]].slice(0,8),W=V.length?`【本主题块专属事实(只能在本节使用,不得重复出现在本章其他节;本章其他节已认领各自专属事实,本节不得重复展开其他节专属事实)】${V.map(a=>`- ${a}`).join("\n")}`:"",X=b.subPoints.map(a=>{let c=a.quotaWords&&a.quotaWords>0?`篇幅不超过 ${H(a.quotaWords)} 字`:"";return(0,j.Sw)(a.title)===h?`- ### ${b.title}(本节标题,覆盖评分细目:${a.sources.join("、")};正文直接展开,无需四级标题;如按细目分节,仅可使用上述细目标题作为四级标题${c?`;${c}`:""})`:a.sources.length>1?`- #### ${a.title}(覆盖评分细目:${a.sources.join("、")}${c?`;${c}`:""})`:`- #### ${a.title}${c?`(${c})`:""}`}).join("\n"),Y=n.size>0?`严禁将以下属于本章其他小节的标题作为本节任何标题输出(H3 仅允许「${b.title}」,H4 仅允许上面清单中的标题):${[...n].join("、")}。`:"",Z=[W,N,P,O,A&&!C?(0,y.gn)(c):"",b.subPoints.length>0?`本节是「${a.chapter.title}」章的一个主题小节,只写本节标题覆盖的内容,不得重复本章其他节内容;必须按以下清单逐点写出实施性正文,标题必须与给定标题完全一致,不得改名、合并或遗漏;每个要点必须覆盖其标注的全部评分细目内容,但不得为这些细目单独开设小节标题;清单标注的篇幅为该要点字数上限,按标注控制详略、不得超出:
96
+ ${X}${Y?`
97
+ ${Y}`:""}`:`本节是「${a.chapter.title}」章的唯一小节(本章无细分小节规划):正文在 H3 标题下直接展开为连贯的正式叙述,不使用四级标题;覆盖本节标题对应的全部实质内容,不得重复章外内容。`,"【防复读硬约束】本节内同一句话只允许出现一次:同一段落内不得复读任何已写出的句子,不同段落之间不得整句复制,同一工艺/措施只在一处完整表述、其余位置引用结论不重述原文;段落结尾不得复读段内前句(禁止“为此/综上/因此”后接照抄句)。"].filter(Boolean).join("\n\n"),$=[],_=[],aa=[],ab=0,ac="",ad="",ae="",af="",ag="",ah="",ai="",aj="";for(let d=0;d<2;d+=1){let f=0===d?"":["【上一轮未通过质检】",$.length?`缺失 H4 要点标题:${$.join("、")}。必须逐点补齐以上 H4 标题并展开正式正文,H4 标题与给定标题完全一致。`:"",_.length?`重复展开的 H4 要点标题:${_.join("、")}。同一小节内相同要点被重复展开多轮,必须只保留一轮完整展开,其余重复小节连同标题整体删除,不得以换编号方式重复同一内容。`:"",aa.length?`清单外标题(属于本章其他小节或不在本节要点清单内):${aa.join("、")}。这些标题连同其正文整块删除,本节只允许输出上面清单中的 H4 标题与「${b.title}」H3 标题。`:"",0===$.length&&0===_.length&&0===aa.length?"必须完整包含每个 H4 要点标题并展开正文,不得合并或遗漏要点。":"",ac,ad,ae,af,ag,ah,ai,aj,a.blueprintMustCiteHint?`【蓝图锁定数值检查】正文必须逐条出现以下蓝图锁定数值且与给定值完全一致:${a.blueprintMustCiteHint}。`:"",ab>0?ab<Math.floor(.85*b.targetWords)?`当前输出仅 ${ab} 字,距篇幅下限 ${Math.floor(.85*b.targetWords)} 字还缺 ${Math.floor(.85*b.targetWords)-ab} 字,必须逐点展开补足(区间上限 ${Math.ceil(1.15*b.targetWords)} 字)。`:ab>Math.ceil(1.15*b.targetWords)?"":`当前输出 ${ab} 字(本节合同区间 ${Math.floor(.85*b.targetWords)}~${Math.ceil(1.15*b.targetWords)} 字),保持篇幅并修正上述缺陷。`:`本节篇幅合同区间为 ${Math.floor(.85*b.targetWords)}~${Math.ceil(1.15*b.targetWords)} 字(目标 ${b.targetWords} 字)。`].filter(Boolean).join("");try{let h,i,m=()=>G(a.template,T,w,a.missingFacts,a.promptTexts,a.projectContext,a.requirement,f?`${Z}
98
98
 
99
- ${f}`:W,{forbidDrawingImages:a.forbidDrawingImages,bidComposition:a.bidComposition,compactProjectContext:a.compactProjectContext,scopedProjectContext:a.scopedProjectContext,chapterLevelContext:a.roleContext||"",minWords:b.targetWords,targetWords:b.targetWords,maxTokens:Math.max(3200,Math.ceil(1.5*b.targetWords)),sharedFactLayerText:D,evidenceRankBoost:o,onlyRankBoosted:!0,skipT2Catalog:!0,evidenceFloorChars:1e3,evidenceCeilingChars:F,factCoverageContext:a.factCoverageContext||"",blueprintDataText:P,blueprintSliceText:Q,twoStep:!1,signal:a.signal,diagnostics:a.diagnostics}),s=a.diagnostics?await (0,k.X6)(a.diagnostics,`block-draft:${a.chapter.id}:${c}:a${d}`,p):await p();if(!s){console.error(`[gen][block-qc] 块写作返回空内容 attempt=${d}: ${b.title}(目标 ${b.targetWords} 字)`);continue}let x=s.replace(/^##\s+.+$/mu,"").trim(),z=(0,q.KJ)(i,x),B=/^###\s+\S+/mu.test(z)?z:`### ${b.title}
99
+ ${f}`:Z,{forbidDrawingImages:a.forbidDrawingImages,bidComposition:a.bidComposition,compactProjectContext:a.compactProjectContext,scopedProjectContext:a.scopedProjectContext,chapterLevelContext:a.roleContext||"",minWords:b.targetWords,targetWords:b.targetWords,sectionQuotas:U,maxTokens:Math.max(3200,Math.ceil(1.5*b.targetWords)),sharedFactLayerText:D,evidenceRankBoost:v,onlyRankBoosted:!0,skipT2Catalog:!0,evidenceFloorChars:1e3,evidenceCeilingChars:F,factCoverageContext:a.factCoverageContext||"",blueprintDataText:R,blueprintSliceText:S,twoStep:!1,signal:a.signal,diagnostics:a.diagnostics}),p=a.diagnostics?await (0,k.X6)(a.diagnostics,`block-draft:${a.chapter.id}:${c}:a${d}`,m):await m();if(!p){console.error(`[gen][block-qc] 块写作返回空内容 attempt=${d}: ${b.title}(目标 ${b.targetWords} 字)`);continue}let s=p.replace(/^##\s+.+$/mu,"").trim(),x=(0,q.KJ)(l,s),z=/^###\s+\S+/mu.test(x)?x:`### ${b.title}
100
100
 
101
- ${z}`,C=[];if(w){let a=(0,q.I6)(B);a!==B&&(B=a);let b=(B.match(/^#{3,4}\s+(.+)$/gmu)||[]).map(a=>a.replace(/^#{3,4}\s+/u,""));C=K.filter(a=>!b.some(b=>(0,j.Sw)(b).includes((0,j.Sw)(a))))}let E=(0,r.vi)(B);E.cleaned.length>0&&(B=E.markdown,a.diagnostics&&(a.diagnostics.llm.lastInfo=`块结构确定性清理:${b.title}(${E.cleaned.length} 项)`));let H=(0,r.$t)(B),I=0===d&&H.blocking.length>0;I&&(af=(0,r.G5)(H,b.title)||"",console.error(`[gen][block-qc] 首轮结构完整性阻断(${H.blocking.length} 处): ${b.title}: ${H.blocking.slice(0,3).map(a=>a.message).join(" / ")}`));let J=(0,e.V7)(B);$=J;let L=`${D}
102
- ${v.map(a=>a.content).join("\n")}`,M=a.evidence.map(a=>a.content).join("\n"),N=(0,t.yT)("block-numeric-reconciliation",()=>(0,g.I)(B,L,M));N.mismatched.length>0&&a.diagnostics&&(a.diagnostics.llm.lastInfo=`数值核验:${b.title} 发现 ${N.mismatched.length} 处疑似错误数值(${N.mismatched.map(a=>`${a.found}→${a.expected}`).join("、")})`),C.length>0&&C.length<=2&&console.error(`[gen][block-qc] 骨架小缺口豁免(交修复链兜底 ${C.length} 个): ${b.title}: ${C.join("、")}`);let O=C.length<=2?[]:C;if(0===d)try{h=await (0,t.yT)("block-templating",()=>(0,u.SA)(B))}catch(a){console.error(`[gen][block-qc] 模板化扫描失败(放行): ${b.title}`,a)}let T=0===d&&void 0!==h&&(0,u.mv)(h);T&&h&&console.error(`[gen][block-qc] 首轮模板化阻断(套话 ${h.fillerSentences}/${h.totalSentences} 句、占比 ${(100*h.fillerRatio).toFixed(1)}%、模糊 ${h.vagueCount} 处): ${b.title}: ${h.fillerDetails.slice(0,3).join(" / ")}`);let U=[...v.filter(a=>n.some(b=>a.content.includes(b))).map(a=>a.content),...S].join("\n"),V=(0,t.yT)("block-fact-density",()=>(0,u.oM)(B,U)),ah=0===d&&V.blocking;ah&&console.error(`[gen][block-qc] 首轮密度缺口阻断(${V.verdict.params}/${V.verdict.required} 参数,材料 ${V.materialParams} 个): ${b.title}`);let ai=(0,u.jk)(`${a.chapter.title} ${b.title}`);if(0===d&&ai)try{l=await (0,t.yT)("block-attribution-quantification",()=>(0,u.o9)(B))}catch(a){console.error(`[gen][block-qc] 归因量化扫描失败(放行): ${b.title}`,a)}let aj=0===d&&void 0!==l&&(0,u.KM)(l);aj&&l&&console.error(`[gen][block-qc] 首轮归因量化阻断(双达标率 ${(100*l.bothRatio).toFixed(0)}%,${l.entries} 条目): ${b.title}`);let ak=(0,t.yT)("block-format-constraints",()=>(0,u.mY)(B)),al=0===d&&ak.length>0;al&&console.error(`[gen][block-qc] 首轮格式硬约束阻断(后台话术 ${ak.length} 行): ${b.title}: ${ak.slice(0,2).join(" / ")}`);let{missing:am,duplicates:an,extraneous:ao}=(0,t.yT)("block-structure-contract",()=>{let a=B.split("\n").map(a=>(0,j.Sw)(a)).filter(Boolean);return{missing:[...i.filter(b=>{let c=(0,j.Sw)(b);return!!c&&!a.some(a=>a.includes(c))}),...O.map(a=>`工作包小节:${a}`)],duplicates:(0,j.W6)(B),extraneous:(0,j.wx)(B,b.title,i,[...m],[...b.subPoints.flatMap(a=>a.sources),...K])}}),ap=0===d&&N.mismatched.length>0,aq=w&&!A?(0,y.V0)(c):void 0,ar=aq?(0,y.v_)(B):void 0,as=0===d&&void 0!==aq&&void 0!==ar&&ar!==aq,at=0===d&&J<Math.floor(.7*b.targetWords),au=J>Math.ceil(1.15*b.targetWords);if(at||au?console.error(`[gen][block-qc] 篇幅失守阻断 attempt=${d}(${J} 字 vs 块目标 ${b.targetWords} 字,欠产线 <${Math.floor(.7*b.targetWords)} / 超产线 >${Math.ceil(1.15*b.targetWords)})${d>0&&au?"[二轮仍超产 → 块失败]":""}: ${b.title}`):J<Math.floor(.85*b.targetWords)&&console.error(`[gen][block-qc] 篇幅欠产接受区放行(${J} 字 vs 块目标 ${b.targetWords} 字,达标区 ${Math.floor(.85*b.targetWords)}~${Math.ceil(1.15*b.targetWords)}): ${b.title}`),!at&&!au&&0===am.length&&0===an.length&&0===ao.length&&!ap&&!as&&!T&&!I&&!ah&&!aj&&!al)return B;if(X=am,Y=an,Z=ao,_=(0,g.n8)(N),aa=void 0!==aq&&ar!==aq?`【上一轮工序表达形式不符】本块指定的工序顺序表达形式为「${aq}」,上一轮正文${ar?`使用了「${ar}」形式`:"未见明确的工序顺序表达"}。必须改用「${aq}」形式重写工序顺序表达,内容与数值保持不变。`:"",ab=T&&h?`【上一轮空话套话句】以下句子是空泛口号(无责任岗位、量化标准、检查频次等可核查信息):${h.fillerDetails.map(a=>`“${a}”`).join("、")}。必须删除或改写为“责任岗位 + 执行动作 + 量化标准 + 检查频次 + 整改时限”式具体措施,并嵌入本节项目事实(不得编造数值)。`:"",ac=ah?`【上一轮量化参数密度不足】本节 ${V.verdict.chars} 字仅落位 ${V.verdict.params} 个不同量化参数(要求 ≥${V.verdict.required} 个,约 ${u.J5} 个/千字),材料中仍有未落位参数。必须从本节材料事实/证据中选取适用参数自然写入对应部位与工序(同一参数不得反复堆砌,不得从行业惯例或相邻章节借参数,不得编造)。`:"",ad=aj&&l?`【上一轮归因量化不达标】以下条目缺少“成因归因链”或“量化控制目标”的完整表达:${l.missing.map(a=>`“${a.text.slice(0,60)}”`).join("、")}。必须逐条补齐:先写难点/特点成因分析(为什么难),再写可核查的量化目标与控制措施(数值/指标),不得只写口号式措施。`:"",ae=al?`【上一轮后台/兜底话术】以下句子属于后台处理话术(不得出现在正式正文):${ak.map(a=>`“${a.slice(0,60)}”`).join("、")}。必须删除或改写为正式表述——用绑定资料中的明确事实替换“待确认/不适用/以招标文件为准”类表述;确实无资料支撑的内容直接删除该句,不得保留任何后台痕迹。`:"",ag=au?`【上一轮篇幅超限】当前输出 ${J} 字,超出本节篇幅上限 ${Math.ceil(1.15*b.targetWords)} 字(目标 ${b.targetWords} 字)。必须压缩重写:同类工序/措施合并叙述,相同内容只完整表述一次,删除重复铺陈与并列复述;保留全部 H4 标题与关键数值,把总字数压缩到 ${Math.floor(.9*b.targetWords)}~${Math.ceil(1.1*b.targetWords)} 字。`:"",0===am.length&&!I&&!ap&&!T&&!ah&&!aj&&!al){let c=(0,j.dY)((0,j.wq)(B),b.title,i,[...b.subPoints.flatMap(a=>a.sources)]),f=(0,e.V7)(c),g=f>Math.ceil(1.15*b.targetWords),h=f<Math.floor(.7*b.targetWords);if(!g&&(d>0||!h))return a.diagnostics&&(ao.length>0||an.length>0)&&(a.diagnostics.llm.lastInfo=`块标题层已确定性修复:${b.title}(清单外 ${ao.length} 个、重复 H4 ${an.length} 个;${J}→${f} 字)`),c}a.diagnostics&&(a.diagnostics.llm.lastError=`规划块质检未达标:${b.title}(${J} 字,缺 ${am.join("、")||"无"}${an.length?`,重复 H4 ${an.join("、")}`:""}${ao.length?`,清单外 ${ao.slice(0,5).join("、")}${ao.length>5?" 等":""}`:""}${H.blocking.length?`,结构缺陷 ${H.blocking.length} 处`:""}${ah?`,密度缺口 ${V.verdict.params}/${V.verdict.required}`:""}${aj&&l?`,归因量化 ${(100*l.bothRatio).toFixed(0)}%`:""}${al?`,后台话术 ${ak.length} 行`:""})`),console.error(`[gen][block-qc] 块质检不达标 attempt=${d}: ${b.title}(目标 ${b.targetWords} 字,实际 ${J} 字,缺 ${am.join("、")||"无"},重复 ${an.join("、")||"无"},清单外 ${ao.join("、")||"无"},结构缺陷 ${H.blocking.length} 处,密度缺口 ${ah?"是":"否"},归因量化 ${aj?"不达标":"达标"},后台话术 ${al?"有":"无"},keySection=${w||"none"})`)}catch(b){a.diagnostics&&(a.diagnostics.llm.lastError=b instanceof Error?b.message:String(b))}}},J=async(b,c)=>{A[c]=await I(b,c),A[c]&&a.onSectionProgress?.({completed:A.filter(Boolean).length,total:d.length,sectionTitle:b.title,phase:"complete",partialSections:[...A]})};d.length>0&&((0,j.Te)(a.signal),await J(d[0],0));for(let b=1;b<d.length;b+=w){(0,j.Te)(a.signal);let c=d.slice(b,b+w);await Promise.all(c.map((a,c)=>J(a,b+c)))}if(A.every(a=>!a))return;let K=d.map((a,b)=>({index:b,block:a})).filter(({index:a})=>!A[a]),L=[];for(let a=0;a<d.length;a+=1){let b=A[a];if(!b){c=void 0;continue}let e=(0,j.Sw)(d[a].title);c===e&&L.length>0?L[L.length-1]=`${L[L.length-1]}
101
+ ${x}`,B=[];if(A){let a=(0,q.I6)(z);a!==z&&(z=a);let b=(z.match(/^#{3,4}\s+(.+)$/gmu)||[]).map(a=>a.replace(/^#{3,4}\s+/u,""));B=M.filter(a=>!b.some(b=>(0,j.Sw)(b).includes((0,j.Sw)(a))))}let E=(0,r.vi)(z);E.cleaned.length>0&&(z=E.markdown,a.diagnostics&&(a.diagnostics.llm.lastInfo=`块结构确定性清理:${b.title}(${E.cleaned.length} 项)`));let H=(0,r.$t)(z),I=0===d&&H.blocking.length>0;I&&(ai=(0,r.G5)(H,b.title)||"",console.error(`[gen][block-qc] 首轮结构完整性阻断(${H.blocking.length} 处): ${b.title}: ${H.blocking.slice(0,3).map(a=>a.message).join(" / ")}`));let J=(0,e.V7)(z);ab=J;let K=`${D}
102
+ ${w.map(a=>a.content).join("\n")}`,L=a.evidence.map(a=>a.content).join("\n"),N=(0,t.yT)("block-numeric-reconciliation",()=>(0,g.I)(z,K,L));N.mismatched.length>0&&a.diagnostics&&(a.diagnostics.llm.lastInfo=`数值核验:${b.title} 发现 ${N.mismatched.length} 处疑似错误数值(${N.mismatched.map(a=>`${a.found}→${a.expected}`).join("、")})`),B.length>0&&B.length<=2&&console.error(`[gen][block-qc] 骨架小缺口豁免(交修复链兜底 ${B.length} 个): ${b.title}: ${B.join("、")}`);let O=B.length<=2?[]:B;if(0===d)try{h=await (0,t.yT)("block-templating",()=>(0,u.SA)(z))}catch(a){console.error(`[gen][block-qc] 模板化扫描失败(放行): ${b.title}`,a)}let P=0===d&&void 0!==h&&(0,u.mv)(h);P&&h&&console.error(`[gen][block-qc] 首轮模板化阻断(套话 ${h.fillerSentences}/${h.totalSentences} 句、占比 ${(100*h.fillerRatio).toFixed(1)}%、模糊 ${h.vagueCount} 处): ${b.title}: ${h.fillerDetails.slice(0,3).join(" / ")}`);let Q=[...w.filter(a=>o.some(b=>a.content.includes(b))).map(a=>a.content),...V].join("\n"),W=(0,t.yT)("block-fact-density",()=>(0,u.oM)(z,Q)),X=0===d&&W.blocking;X&&console.error(`[gen][block-qc] 首轮密度缺口阻断(${W.verdict.params}/${W.verdict.required} 参数,材料 ${W.materialParams} 个): ${b.title}`);let Y=(0,u.jk)(`${a.chapter.title} ${b.title}`);if(0===d&&Y)try{i=await (0,t.yT)("block-attribution-quantification",()=>(0,u.o9)(z))}catch(a){console.error(`[gen][block-qc] 归因量化扫描失败(放行): ${b.title}`,a)}let ak=0===d&&void 0!==i&&(0,u.KM)(i);ak&&i&&console.error(`[gen][block-qc] 首轮归因量化阻断(双达标率 ${(100*i.bothRatio).toFixed(0)}%,${i.entries} 条目): ${b.title}`);let al=(0,t.yT)("block-format-constraints",()=>(0,u.mY)(z)),am=0===d&&al.length>0;am&&console.error(`[gen][block-qc] 首轮格式硬约束阻断(后台话术 ${al.length} 行): ${b.title}: ${al.slice(0,2).join(" / ")}`);let{missing:an,duplicates:ao,extraneous:ap}=(0,t.yT)("block-structure-contract",()=>{let a=z.split("\n").map(a=>(0,j.Sw)(a)).filter(Boolean);return{missing:[...l.filter(b=>{let c=(0,j.Sw)(b);return!!c&&!a.some(a=>a.includes(c))}),...O.map(a=>`工作包小节:${a}`)],duplicates:(0,j.W6)(z),extraneous:(0,j.wx)(z,b.title,l,[...n],[...b.subPoints.flatMap(a=>a.sources),...M])}}),aq=0===d&&N.mismatched.length>0,ar=A&&!C?(0,y.V0)(c):void 0,as=ar?(0,y.v_)(z):void 0,at=0===d&&void 0!==ar&&void 0!==as&&as!==ar,au=0===d&&J<Math.floor(.7*b.targetWords),av=J>Math.ceil(1.15*b.targetWords);if(au||av?console.error(`[gen][block-qc] 篇幅失守阻断 attempt=${d}(${J} 字 vs 块目标 ${b.targetWords} 字,欠产线 <${Math.floor(.7*b.targetWords)} / 超产线 >${Math.ceil(1.15*b.targetWords)})${d>0&&av?"[二轮仍超产 → 块失败]":""}: ${b.title}`):J<Math.floor(.85*b.targetWords)&&console.error(`[gen][block-qc] 篇幅欠产接受区放行(${J} 字 vs 块目标 ${b.targetWords} 字,达标区 ${Math.floor(.85*b.targetWords)}~${Math.ceil(1.15*b.targetWords)}): ${b.title}`),!au&&!av&&0===an.length&&0===ao.length&&0===ap.length&&!aq&&!at&&!P&&!I&&!X&&!ak&&!am)return z;if($=an,_=ao,aa=ap,ac=(0,g.n8)(N),ad=void 0!==ar&&as!==ar?`【上一轮工序表达形式不符】本块指定的工序顺序表达形式为「${ar}」,上一轮正文${as?`使用了「${as}」形式`:"未见明确的工序顺序表达"}。必须改用「${ar}」形式重写工序顺序表达,内容与数值保持不变。`:"",ae=P&&h?`【上一轮空话套话句】以下句子是空泛口号(无责任岗位、量化标准、检查频次等可核查信息):${h.fillerDetails.map(a=>`“${a}”`).join("、")}。必须删除或改写为“责任岗位 + 执行动作 + 量化标准 + 检查频次 + 整改时限”式具体措施,并嵌入本节项目事实(不得编造数值)。`:"",af=X?`【上一轮量化参数密度不足】本节 ${W.verdict.chars} 字仅落位 ${W.verdict.params} 个不同量化参数(要求 ≥${W.verdict.required} 个,约 ${u.J5} 个/千字),材料中仍有未落位参数。必须从本节材料事实/证据中选取适用参数自然写入对应部位与工序(同一参数不得反复堆砌,不得从行业惯例或相邻章节借参数,不得编造)。`:"",ag=ak&&i?`【上一轮归因量化不达标】以下条目缺少“成因归因链”或“量化控制目标”的完整表达:${i.missing.map(a=>`“${a.text.slice(0,60)}”`).join("、")}。必须逐条补齐:先写难点/特点成因分析(为什么难),再写可核查的量化目标与控制措施(数值/指标),不得只写口号式措施。`:"",ah=am?`【上一轮后台/兜底话术】以下句子属于后台处理话术(不得出现在正式正文):${al.map(a=>`“${a.slice(0,60)}”`).join("、")}。必须删除或改写为正式表述——用绑定资料中的明确事实替换“待确认/不适用/以招标文件为准”类表述;确实无资料支撑的内容直接删除该句,不得保留任何后台痕迹。`:"",aj=av?`【上一轮篇幅超限】当前输出 ${J} 字,超出本节篇幅上限 ${Math.ceil(1.15*b.targetWords)} 字(目标 ${b.targetWords} 字)。必须压缩重写:同类工序/措施合并叙述,相同内容只完整表述一次,删除重复铺陈与并列复述;保留全部 H4 标题与关键数值,把总字数压缩到 ${Math.floor(.8*b.targetWords)}~${Math.floor(.95*b.targetWords)} 字。`:"",0===an.length&&!I&&!aq&&!P&&!X&&!ak&&!am){let c=(0,j.dY)((0,j.wq)(z),b.title,l,[...b.subPoints.flatMap(a=>a.sources)]),f=(0,e.V7)(c),g=f>Math.ceil(1.15*b.targetWords),h=f<Math.floor(.7*b.targetWords);if(!g&&(d>0||!h))return a.diagnostics&&(ap.length>0||ao.length>0)&&(a.diagnostics.llm.lastInfo=`块标题层已确定性修复:${b.title}(清单外 ${ap.length} 个、重复 H4 ${ao.length} 个;${J}→${f} 字)`),c}a.diagnostics&&(a.diagnostics.llm.lastError=`规划块质检未达标:${b.title}(${J} 字,缺 ${an.join("、")||"无"}${ao.length?`,重复 H4 ${ao.join("、")}`:""}${ap.length?`,清单外 ${ap.slice(0,5).join("、")}${ap.length>5?" 等":""}`:""}${H.blocking.length?`,结构缺陷 ${H.blocking.length} 处`:""}${X?`,密度缺口 ${W.verdict.params}/${W.verdict.required}`:""}${ak&&i?`,归因量化 ${(100*i.bothRatio).toFixed(0)}%`:""}${am?`,后台话术 ${al.length} 行`:""})`),console.error(`[gen][block-qc] 块质检不达标 attempt=${d}: ${b.title}(目标 ${b.targetWords} 字,实际 ${J} 字,缺 ${an.join("、")||"无"},重复 ${ao.join("、")||"无"},清单外 ${ap.join("、")||"无"},结构缺陷 ${H.blocking.length} 处,密度缺口 ${X?"是":"否"},归因量化 ${ak?"不达标":"达标"},后台话术 ${am?"有":"无"},keySection=${A||"none"})`)}catch(b){a.diagnostics&&(a.diagnostics.llm.lastError=b instanceof Error?b.message:String(b))}}},K=async(b,c)=>{A[c]=await J(b,c),A[c]&&a.onSectionProgress?.({completed:A.filter(Boolean).length,total:d.length,sectionTitle:b.title,phase:"complete",partialSections:[...A]})};d.length>0&&((0,j.Te)(a.signal),await K(d[0],0));for(let b=1;b<d.length;b+=w){(0,j.Te)(a.signal);let c=d.slice(b,b+w);await Promise.all(c.map((a,c)=>K(a,b+c)))}if(A.every(a=>!a))return;let L=d.map((a,b)=>({index:b,block:a})).filter(({index:a})=>!A[a]),M=[];for(let a=0;a<d.length;a+=1){let b=A[a];if(!b){c=void 0;continue}let e=(0,j.Sw)(d[a].title);c===e&&M.length>0?M[M.length-1]=`${M[M.length-1]}
103
103
 
104
- ${l(b,e)}`:L.push(b),c=e}let M=(0,h.kT)((0,h.FD)(`## ${a.chapter.title}
104
+ ${l(b,e)}`:M.push(b),c=e}let N=(0,h.kT)((0,h.FD)(`## ${a.chapter.title}
105
105
 
106
- ${L.join("\n\n")}`,a.forbidDrawingImages));return 0===K.length?{sections:A,failedBlocks:K,allSucceeded:!0,markdown:M}:(a.diagnostics&&K.length>0&&(a.diagnostics.llm.lastError=`规划块部分失败:${K.map(({block:a})=>a.title).join("、")}`),{sections:A,failedBlocks:K,allSucceeded:!1,markdown:M})}},37095:(a,b,c)=>{c.d(b,{CU:()=>t,H7:()=>s,JB:()=>p,Qf:()=>n,kW:()=>q,oy:()=>o,sn:()=>r});var d=c(29021),e=c(21820),f=c(33873),g=c(19898);function h(a){return f.join(e.homedir(),".customize-agent","projects",(0,g.computeProjectId)(a),"kb-operations.jsonl")}function i(a,b){let c=h(a);d.mkdirSync(f.dirname(c),{recursive:!0});let e=`${c}.${process.pid}.${Date.now()}.tmp`;d.writeFileSync(e,`${b.slice(-200).map(a=>JSON.stringify(a)).join("\n")}
106
+ ${M.join("\n\n")}`,a.forbidDrawingImages));return 0===L.length?{sections:A,failedBlocks:L,allSucceeded:!0,markdown:N}:(a.diagnostics&&L.length>0&&(a.diagnostics.llm.lastError=`规划块部分失败:${L.map(({block:a})=>a.title).join("、")}`),{sections:A,failedBlocks:L,allSucceeded:!1,markdown:N})}},37095:(a,b,c)=>{c.d(b,{CU:()=>t,H7:()=>s,JB:()=>p,Qf:()=>n,kW:()=>q,oy:()=>o,sn:()=>r});var d=c(29021),e=c(21820),f=c(33873),g=c(19898);function h(a){return f.join(e.homedir(),".customize-agent","projects",(0,g.computeProjectId)(a),"kb-operations.jsonl")}function i(a,b){let c=h(a);d.mkdirSync(f.dirname(c),{recursive:!0});let e=`${c}.${process.pid}.${Date.now()}.tmp`;d.writeFileSync(e,`${b.slice(-200).map(a=>JSON.stringify(a)).join("\n")}
107
107
  `,"utf8"),d.renameSync(e,c);let g=k.get(a);g&&(g.mtimeMs=l(c))}let j=Math.round(Date.now()-1e3*process.uptime()),k=new Map;function l(a){try{return d.statSync(a).mtimeMs}catch{return 0}}function m(a){let b=h(a),c=l(b),e=k.get(a);if(e&&e.mtimeMs===c)return e.records;let f=function(a){let b=function(a){let b=h(a);return d.existsSync(b)?d.readFileSync(b,"utf8").split("\n").filter(Boolean).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}}):[]}(a),c=b.filter(a=>"processing"===a.status&&a.updatedAt<j);if(c.length>0){let d=Date.now();for(let a of c)a.status="error",a.stage="error",a.error="服务重启导致任务中断,未完成",a.message=a.error,a.updatedAt=d;i(a,b)}return b}(a);return k.set(a,{mtimeMs:l(b),records:f}),f}function n(a,b){let c=Date.now(),d=m(a),e=d.findIndex(a=>a.id===b.id),f=e>=0?d[e]:void 0,g={id:b.id,type:b.type,title:b.title,stage:b.stage??f?.stage??"uploading",status:b.status??f?.status??"processing",message:b.message??f?.message??"",percent:b.percent??f?.percent??0,fileName:b.fileName??f?.fileName,filePath:b.filePath??f?.filePath,chunkCount:b.chunkCount??f?.chunkCount,textLength:b.textLength??f?.textLength,extractionMode:b.extractionMode??f?.extractionMode,error:b.status&&"error"!==b.status?void 0:b.error??f?.error,details:b.details??f?.details,createdAt:f?.createdAt??c,updatedAt:c};return e>=0?d[e]=g:d.push(g),i(a,d),g}function o(a,b=50){return m(a).sort((a,b)=>b.updatedAt-a.updatedAt).slice(0,b)}function p(a,b){return m(a).find(a=>a.id===b)}function q(a,b){return m(a).filter(a=>!b||a.type===b).sort((a,b)=>b.updatedAt-a.updatedAt)[0]}function r(a){return m(a).filter(a=>"processing"===a.status).sort((a,b)=>b.updatedAt-a.updatedAt)}function s(a){let b=m(a),c=h(a);return d.existsSync(c)&&d.unlinkSync(c),k.delete(a),b.length}function t(a,b){let c=m(a),d=c.findIndex(a=>a.id===b);return!(d<0)&&(c.splice(d,1),i(a,c),!0)}},39372:(a,b,c)=>{c.d(b,{DR:()=>l,EG:()=>n,EK:()=>o,G2:()=>u,Il:()=>s,M6:()=>i,NJ:()=>t,R_:()=>k,_8:()=>p,bz:()=>r,gq:()=>h,md:()=>j});var d=c(76760),e=c(78217),f=c(23500),g=c(22213);function h(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} 字`}}function i(a,b=[],c){let d=[],e=[];for(let b of a)0===b.evidence.length&&d.push(`${b.title} 未检索到资料证据`),b.content.length<80&&d.push(`${b.title} 内容较短,建议人工补充或重新生成`);return c&&a.length<c.chapters.length&&e.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===(0,f.zY)(c).length&&e.push("模板未绑定任何提示词"),{passed:0===e.length,warnings:d,errors:e}}function j(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))||c.some(a=>/空小节|缺少规划小节/u.test(a))?"failed":"success"}function k(a){let b=[{title:"项目特点、重点、难点分析",minChars:1800},{title:"项目主要施工内容",minChars:2200},{title:"主要分部分项工程施工方案",minChars:1200,blockerMinChars:800},{title:"主要施工方法",minChars:2200},{title:"危大工程专项施工方案审批流程",minChars:500,blockerMinChars:250},{title:"原材料进场复试与见证取样",minChars:600,blockerMinChars:300}].find(b=>b.title===a);if(!b)return 0;let c=b.blockerMinChars||Math.floor(.8*b.minChars),d=(0,g.ap)(a);return Math.min(c,d>0?d:c)}function l(a,b){return 0>=(0,e.V7)(a.content)?"failed":"completed"}function m(a,b,c=12){if(0===b.length)return[];let e=b.slice(0,c).map(a=>d.basename(a)),f=b.length>c?` 等 ${b.length} 个文件`:"";return[`${a}:${e.join("、")}${f}`]}function n(a){return a?({ready:"就绪",pending:"待构建",partial:"部分就绪",error:"异常",unavailable:"不可用"})[a]??"未知":"未知"}function o(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),o=k.reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0),p=[...m("部分绑定文件未完成索引,已自动跳过",f),...m("部分绑定文件没有可用切片,已自动跳过",g),...m("部分绑定文件索引失败,已自动跳过",h)],q=c.size>0&&0===o?["所有绑定文件均无可用切片"]:[],r=[...p,...i>0?[`仍有 ${i} 个待索引任务,建议等待索引完成后生成`]:[],...j&&"ready"!==j.status?[`向量索引状态为${n(j.status)},当前召回质量可能下降`]:[]];return{scopedRecords:d,usablePaths:l,missingFiles:f,emptyFiles:g,errorFiles:h,pendingJobs:i,vectorStatus:j,usableChunkCount:o,blockingIssues:q,warnings:r}}function p(a){return[...a].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(",")}function q(a,b=5){return a?Object.entries(a).sort((a,b)=>b[1].inputChars-a[1].inputChars).slice(0,b):[]}function r(a,b=5){return q(a,b).map(([a,b])=>`${a} ${b.calls}次/${(b.inputChars/1e4).toFixed(1)}万字${b.schemaFailures?`(schema失败${b.schemaFailures})`:""}`).join(",")}function s(a){return a.filter(a=>a.name.startsWith("phase:")).sort((a,b)=>a.startedAt-b.startedAt).map(a=>`${a.name}:${(a.durationMs/1e3).toFixed(1)} 秒`)}function t(a,b=5){return q(a,b).map(([a,b])=>{let c=b.cacheHitTokens+b.cacheMissTokens,d=c>0?`,缓存命中 ${Math.round(b.cacheHitTokens/c*100)}%(${b.cacheHitTokens}/${c} token)`:"",e=b.schemaFailures?`,schema 失败 ${b.schemaFailures} 次`:"";return`${a}:${b.calls} 次,输入 ${(b.inputChars/1e4).toFixed(1)} 万字(L3 ${(b.l3Chars/1e4).toFixed(1)} 万字)${d}${e}`})}function u(a,b,c){if(Number.isFinite(c)&&c>0)return Math.ceil(c);let d=new Set(b.filter(Boolean)),e=a.listFiles?.().filter(a=>0===d.size||d.has(a.relativePath)).reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0)??0;return e>0?e:Math.max(1,d.size)}},40693:(a,b,c)=>{c.d(b,{Av:()=>w,CS:()=>z,Fw:()=>r,Hl:()=>s,Ls:()=>q,b7:()=>x,db:()=>u,iX:()=>t,jW:()=>D,l5:()=>E}),c(29055);var d=c(3063),e=c(22157),f=c(41991);let g=a=>a.split(/\n(?=#{1,3}\s)/u)[0].trim(),h=["精心组织","科学管理","精益求精","全力保障","高效推进","力争一流","最大限度","显著提升","大力落实","充分确保","严格把控"],i=RegExp(h.join("|"),"u"),j=["精心组织科学管理确保工程质量","严格把控质量安全进度各项指标","最大限度提升项目管理水平","全力保障项目顺利推进","大力落实各项管理措施"],k=["精心组织劳动力分批进场并登记交底","每道工序完成后实测实量并记录数据","混凝土浇筑后每天洒水养护不少于两次"];async function l(a){return(0,f.A)({prototypes:[...j],negativePrototypes:[...k],lexicalHints:i,embedDocuments:a})}let m=[{pattern:/质量|验收|隐蔽|样板|通病/u,label:"质量闭环",required:["自检","互检","交接检","整改","复查","归档"],prompt:"质量类内容必须形成“自检—互检—交接检—整改—复查—资料归档”闭环。"},{pattern:/安全|风险|危大|临电|消防|吊装|高处/u,label:"安全闭环",required:["辨识","交底","检查","整改","复查","销项"],prompt:"安全类内容必须形成“风险辨识—专项交底—现场检查—隐患整改—复查销项”闭环。"},{pattern:/进度|工期|节点|计划/u,label:"进度闭环",required:["计划","检查","偏差","纠偏","复核"],prompt:"进度类内容必须形成“计划分解—日/周检查—偏差识别—资源纠偏—节点复核”闭环。"},{pattern:/文明|扬尘|噪声|绿色|环保|垃圾/u,label:"环保闭环",required:["监测","预警","处置","台账"],prompt:"文明环保类内容必须形成“监测—预警—联动处置—台账记录”闭环。"},{pattern:/工资|劳务|实名/u,label:"工资闭环",required:["实名","考勤","核算","公示","代发","归档"],prompt:"工资保障类内容必须形成“实名登记—考勤—核算—公示—银行代发—归档”闭环。"},{pattern:/应急|预案|救援|事故/u,label:"应急闭环",required:["发现","警戒","疏散","处置","上报","复盘"],prompt:"应急类内容必须形成“发现险情—警戒疏散—初期处置—救援上报—复盘整改”闭环。"}],n={building:{label:"房建工程",chain:["施工准备","土方/基础","主体结构","二次结构","防水","机电安装","装饰装修","室外工程","竣工验收"],forbidden:["管道闭水试验","沥青摊铺","水稳层","交通导改"],prompt:"房建类章节应按“施工准备—基础—主体—二次结构—防水—机电—装饰—室外—验收”组织,不得混入市政道路工序。"},municipal:{label:"市政工程",chain:["测量放线","管线探测","围挡导行","沟槽/路基","管道/结构","回填","水稳/沥青/铺装","标线设施","验收移交"],forbidden:["主体结构","二次结构","塔吊","外脚手架","屋面防水"],prompt:"市政类章节应按“测量放线—管线探测—围挡导行—沟槽/路基—管道/结构—回填—路面恢复—验收移交”组织,不得写成房建主体结构逻辑。"},renovation:{label:"老旧小区改造",chain:["居民沟通","分区施工","既有保护","外墙/屋面/管网改造","扰民控制","竣工恢复"],forbidden:["大面积深基坑","高支模","大体量主体结构","长距离交通导改"],prompt:"老旧小区改造类章节必须体现“居民沟通—分区施工—既有保护—改造作业—扰民控制—竣工恢复”,不得忽略居民通行和既有设施保护。"},decoration:{label:"装饰装修工程",chain:["基层处理","防水闭水","吊顶龙骨","墙地面铺装","细部收口","成品保护","空气质量验收"],forbidden:["深基坑","路基压实","水稳层","沥青摊铺","大体量土方"],prompt:"装饰装修类章节应按“基层处理—防水闭水—吊顶墙面—地面铺装—细部收口—成品保护—空气质量验收”组织,不得混入基坑、路基等无关内容。"}},o=[{title:"招标评分项响应索引",pattern:/技术标|施工组织设计|评分|响应/u,prompt:"设置招标评分项响应索引,逐项对应章节、响应内容和位置。"},{title:"主要工程量一览表",pattern:/工程量|清单|土方|钢筋|混凝土|管道|路面/u,prompt:"将主要工程量表格化,关联资源配置和进度节点。"},{title:"影像资料留存",pattern:/隐蔽|危大|整改|验收|样板/u,prompt:"隐蔽、危大、材料验收、样板和整改前后对比必须留存影像资料。"},{title:"变更签证管理",pattern:/改造|市政|工期紧|变更|签证/u,prompt:"改造、市政或工期紧项目应补充变更识别、技术核定、签证资料和影响跟踪。"},{title:"危险品专项管理",pattern:/装修|装饰|动火|油漆|稀释剂|氧气|乙炔/u,prompt:"涉及动火、油漆、稀释剂、氧气乙炔时应补充危险品分区存放与动火审批。"},{title:"材料损耗与周转控制",pattern:/钢筋|模板|周转|材料|大体量/u,prompt:"体量大或材料占比高时应补充钢筋翻样、模板周转、余料回收和限额领料。"},{title:"分户验收",pattern:/住宅|住户|交付|分户/u,prompt:"住宅项目应补充分户实测、问题清单、整改销项和交付资料。"}];function p(a){return a.replace(/\s+/gu,"").toLowerCase()}function q(a){let b=`${a.title} ${(a.sections||[]).join(" ")}`;return/施工组织设计|施工组织|施组|技术标|施工方案|质量|安全|文明施工/u.test(b)?["【施工组织设计专项写作规则】","- 禁止空话套话:不要只写“加强管理、严格控制、确保质量、精心组织、科学管理、周密部署、狠抓落实、统筹兼顾”等零信息口号(全文质检会按语义原型拦截并要求重写),必须写成“责任岗位+执行动作+量化标准+检查频次+整改时限+复查销项”。","- 落地措施范例:“由质检员每周不少于1次对级配碎石层压实度抽检,不足95%的当日返工复验”——每句措施要能回答“谁、做什么、什么标准、多久一次、不达标怎么办”;项目特有数据必须来自资料或图谱。",...m.filter(a=>a.pattern.test(b)).map(a=>`- ${a.prompt}`),...o.filter(a=>a.pattern.test(b)).map(a=>`- 高分补充:${a.prompt}`)].join("\n"):""}async function r(a,b){let c=[],d=await l(b);for(let b of a){let a=b.content.split(/[。;;\n]/u).map(a=>a.trim()).filter(a=>a.length>=8);if(0===a.length)continue;let e=await d(a),f=new Set;a.forEach((a,b)=>{if(e[b])for(let b of h)a.includes(b)&&f.add(b)}),f.size>0&&c.push({level:"warning",message:`${b.title} 存在施工组织设计空泛套话:${[...f].slice(0,8).join("、")}`,suggestion:"请按“责任岗位+执行动作+量化标准+检查频次+整改时限+复查销项”重写相关措施。"})}return c}function s(a){let b=[];for(let c of a){let a=`${c.title} ${(c.sections||[]).join(" ")}`;for(let d of m){if(!d.pattern.test(a))continue;let e=d.required.filter(a=>!c.content.includes(a));e.length>=Math.ceil(d.required.length/2)&&b.push({level:"warning",message:`${c.title} 缺少${d.label}关键链条:${e.join("、")}`,suggestion:d.prompt})}}return b}function t(a){let b=p(`${a.markdown} ${a.factsModel.project.map(a=>a.value).join(" ")} ${a.factsModel.preciseFacts.map(a=>a.value).join(" ")}`),c=[];for(let d of Object.values(n)){let e=d.chain.filter(a=>b.includes(p(a)));if(!(RegExp(d.label,"u").test(a.markdown)||e.length>=3))continue;let f=d.forbidden.filter(a=>b.includes(p(a)));f.length>=2&&c.push({level:"warning",message:`疑似${d.label}内容混入不匹配工序:${f.join("、")}`,suggestion:d.prompt}),e.length<Math.min(3,d.chain.length)&&c.push({level:"warning",message:`${d.label}工序链覆盖不足:仅识别到 ${e.join("、")||"未识别到关键工序"}`,suggestion:d.prompt})}return c}function u(a){let b=`${a.title} ${(a.sections||[]).join(" ")} ${(a.queries||[]).join(" ")}`,c=o.filter(a=>a.pattern.test(b));return 0===c.length?"":["【隐藏高分模块触发】",...c.map(a=>`- ${a.title}:${a.prompt}`)].join("\n")}function v(a){let b=a.split("\n"),c=b.findIndex(a=>/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目主要施工\s*内容|主要施工\s*内容)\s*$/u.test(a.trim()));if(c<0){let a=b.findIndex(a=>/^###\s+(?:\d+(?:\.\d+)*\s+)?[^\n]*主要施工\s*内容[^\n]*$/u.test(a.trim()));if(a>=0){let d=b.length;for(let c=a+1;c<b.length;c+=1)if(/^#{2,3}\s+/u.test(b[c].trim())){d=c;break}let f=b.slice(a,d).join("\n").split(/^####\s+/gmu).slice(1).map(a=>a.trim()).filter(Boolean);f.length>=5&&f.every(e.Jb)&&(c=a)}if(c<0)return""}let d=b.length;for(let a=c+1;a<b.length;a+=1)if(/^#{2,3}\s+/u.test(b[a].trim())){d=a;break}return b.slice(c,d).join("\n").replace(/^\*\*([^*\n]{2,50})\*\*\s*$/gmu,"#### $1").replace(/承包人法(?=[::])/gu,"施工方法")}function w(a,b=""){let c=[],d=b||a.map(a=>`${a.title}
108
108
  ${(a.sections||[]).join("\n")}
109
109
  ${a.content}`).join("\n\n"),f=a.filter(a=>/项目主要施工内容|主要施工内容/u.test(`${a.title} ${(a.sections||[]).join(" ")}`)),h=/施工组织设计|施工组织|计划工期|质量标准|项目经理|工程概况/u.test(d)&&/施工/u.test(d),i=(a,b)=>{let d=b.replace(/^####\s+(?:\d+(?:\.\d+)*\s+)?(?:项目主要施工\s*内容|主要施工\s*内容)\s*\n+/mu,""),f=(d.match(/^####\s+(?:\d+(?:\.\d+)*\s+)?[一二三四五六七八九十\d]*[、..]?\s*\S+/gmu)||[]).length||(d.match(/^[一二三四五六七八九十]+、\S+/gmu)||[]).length,h=d.split(/^####\s+/gmu).slice(1).map(a=>g(a)).filter(Boolean),i=h.filter(a=>!(0,e.Jb)(a)),j=h.filter(a=>/资料内容事实|#{2,6}\s+|^\*\*[^*]+\*\*$|未尽事宜|专业施工内容统筹|招标范围还包含|具备有效的.*资质/um.test(a)),k=h.filter(a=>{if(!/施工方法[::]/u.test(a))return!1;let b=a.match(/施工方法[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"";return b.length<30||(b.match(/工程|维修|改造|安装|设备/gu)||[]).length>=4&&!/\d|㎡|m2|m²|mm|厚|验收|检测|调试|试验|复试|记录|报告/u.test(b)}),l=h.filter(a=>{let b=a.match(/施工流程[::]([\s\S]*?)(?=\n施工方法|$)/u)?.[1]||"";return/未尽事宜|本项目为|总建筑面积|保留现状|专业施工内容统筹|招标文件列明|招标范围/u.test(b)}),m=h.map(a=>(a.split("\n")[0]||"").replace(/^\d+(?:\.\d+)*\s+/u,"").replace(/工程$/u,"").replace(/[、..]/gu,"").trim()),n=[...new Set(m.filter((a,b)=>a&&m.indexOf(a)!==b))];n.length>0&&c.push({level:"error",severity:"blocker",message:`${a} 主要施工内容存在 ${n.length} 组重复专业工程小节:${n.slice(0,5).join("、")}`,suggestion:"同一专业工程只保留一个小节,将重复小节的独有内容合并后删除冗余小节,避免专业工程重复铺陈。"}),f<3&&c.push({level:"error",severity:"blocker",message:`${a} 主要施工内容专业工程不足:当前 ${f} 个,要求不少于 3 个`,suggestion:"按资料识别专业工程/分部分项工程逐项展开,每项覆盖作业对象与工程量、工序顺序、施工方法三方面要素(融入连贯叙述,不得以结构标签充当小节标题或段落开头引导)。"}),i.length>0&&c.push({level:"error",severity:"blocker",message:`${a} 主要施工内容存在 ${i.length} 个专业工程内容要素不全(作业对象与工程量/工序顺序/施工方法至少缺一)`,suggestion:"每个专业工程需覆盖作业对象与工程量、工序安排、施工方法三方面要素,融入连贯段落叙述(禁止以“施工概况/施工流程/施工方法”等结构标签充当标题或段落开头引导)。"});let o=h.filter(a=>/按设计图纸执行|按设计文件执行|详见设计图纸|按.{0,10}设计总说明执行|详见图纸|以设计图纸为准|按设计确定/u.test(a));o.length>0&&c.push({level:"error",severity:"blocker",message:`${a} 主要施工内容存在 ${o.length} 个工作包正文含“按设计图纸执行”式概括话术`,suggestion:"工作包正文必须落到具体数值与参数:工程量、材料规格、设备型号等数量类数值优先取工程量清单数据,清单未覆盖的参数(标高、坡率、构造做法)取图纸具体数值;禁止“按设计图纸执行/详见设计图纸/按设计文件确定”式留白。"}),j.length>0&&c.push({level:"error",severity:"blocker",message:`${a} 主要施工内容存在脏事实或标题污染`,suggestion:"清理“资料内容事实”、嵌入的 ### 标题、粗体伪标题、未尽事宜、招标范围罗列等污染内容,只保留可交付正文。"}),k.length>0&&c.push({level:"error",severity:"blocker",message:`${a} 主要施工内容存在 ${k.length} 个专业工程施工方法过弱`,suggestion:"施工方法不能只是专业工程名称或专业范围罗列,必须写资料已确认的工程量、材料、检测、调试、验收或记录要求。"}),l.length>0&&c.push({level:"error",severity:"blocker",message:`${a} 主要施工内容存在 ${l.length} 个专业工程流程污染`,suggestion:"施工流程只能写工序链条,不能混入项目概况、总建筑面积、招标范围、未尽事宜等说明性事实。"}),(0,e.Z1)(b)||c.push({level:"error",severity:"blocker",message:`${a} 主要施工内容缺少工序顺序表达`,suggestion:"施工流程须有明确的工序顺序表达,形式按专业工程序号轮换使用(顺序词叙述(先测量放线,再基层处理,随后工序实施,然后检查验收,最后资料归档)、编号步骤、有序列表、箭头链),禁止相邻专业工程同一形式、禁止通篇同一形式。"});let p=(b.match(/\d+(?:\.\d+)?\s*(?:㎡|m²|mm|cm|m|MPa|kPa|%|日历天|层|台|套|个|项|批|次|小时|年)/giu)||[]).length,q=(b.match(/工程量|材料|设备|范围|流程|验收|检测|复试|调试|隐蔽|检验批|资料|记录|系统|部位|接口|规格|标准/gu)||[]).length;(p<2||q<12)&&c.push({level:"error",severity:"blocker",message:`${a} 主要施工内容事实细度不足:参数 ${p} 项、事实细节 ${q} 项`,suggestion:"主要施工内容必须落到资料已确认的范围、工程量/材料、流程、验收和记录要求;资料未明确的工具、型号、参数不得编造。"});let r=b.split(/\r?\n/u).filter(a=>/^\s*\|.+\|\s*$/u.test(a.trim())),s=b.split(/\r?\n/u).filter(a=>!/^\s*\|.+\|\s*$/u.test(a.trim())).join("").replace(/[\s#*_`>-]/gu,"").length;r.length>=3&&s<50&&c.push({level:"error",severity:"blocker",message:`${a} 主要施工内容不应使用 Markdown 表格替代专业工程正文`,suggestion:"主要施工内容应采用三级小节和段落式专业工程写法,不使用表格承载主体内容。"})};if(0===f.length&&h){let a=v(d);return a?(i("全文",a),c):[{level:"error",severity:"blocker",message:"施工组织设计缺少“项目主要施工内容”小节",suggestion:"必须生成“### 项目主要施工内容”,并在该小节内部使用“#### 专业工程名称”逐项展开。"}]}for(let a of f){let b=v(a.content)||v(d);if(!b){c.push({level:"error",severity:"blocker",message:`${a.title} 主要施工内容小节缺失或标题结构异常`,suggestion:"必须生成“### 项目主要施工内容”,并在该小节内部使用“#### 专业工程名称”逐项展开。"});continue}i(a.title,b)}return c}function x(a){let b=[];for(let c of a){let a=`${c.title} ${(c.sections||[]).join(" ")} ${c.content}`;for(let d of o)d.pattern.test(a)&&!c.content.includes(d.title)&&b.push({level:"info",message:`${c.title} 可补充隐藏高分模块:${d.title}`,suggestion:d.prompt})}return b}function y(a){let b=a.split("\n"),c=b.findIndex(a=>/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]*?(?:主要分部分项(?:工程)?施工方案|主要施工方法)[^\n]*$/u.test(a.trim()));if(c>=0){let a=b.length;for(let d=c+1;d<b.length;d+=1)if(/^#{2,3}\s+/u.test(b[d].trim())){a=d;break}return b.slice(c+1,a).join("\n")}let d=b.findIndex(a=>{let b=a.trim();return!(!/^##\s+/u.test(b)||/主要分部分项(?:工程)?施工方案/u.test(b))&&/^##\s+(?:\d+(?:\.\d+)*\s+)?[^\n]*?主要施工方法[^\n]*$/u.test(b)});if(d>=0){let a=b.length;for(let c=d+1;c<b.length;c+=1)if(/^##\s+/u.test(b[c].trim())){a=c;break}let c=b.slice(d+1,a).join("\n");return/^#{3,4}\s+/mu.test(c)?c:""}return/^#{3,4}\s+/mu.test(a)?a.trim():""}function z(a,b=""){let c=[],f=b||a.map(a=>`${a.title}
@@ -170,7 +170,7 @@ ${d.map((a,b)=>`${b+1}. ${a}`).join("\n")}`,`章节正文:
170
170
  ${c.slice(0,12e3)}`].filter(Boolean).join("\n\n"),{maxTokens:1200,temperature:0,signal:a.signal,diagnostics:a.generationDiagnostics,prefixKey:"requirement-verification"})),e=(c,d,e,g)=>{let h=["【用户要求定向补写修复】",...g>1?[`本轮为第 ${g} 轮(最多 2 轮):上一轮补写后复验仍判定未落实,请务必逐条直接补写实质性内容。`]:[],"下列用户要求经核验未在本章正文中落实。请逐条在正文最合适的位置补充落实,用户要求是最高优先级:","用户要求与系统默认规则冲突时以用户要求为准;已落实内容不得删除或改写;只做局部修改,不得新增、删除或合并小节。",d.map(a=>`- ${a}`).join("\n"),...b?.styleRequirements?.length?[`
171
171
  风格要求(补写内容同样必须遵守):
172
172
  ${b.styleRequirements.map(a=>`- ${a}`).join("\n")}`]:[]].join("\n"),i=[...new Set(d.flatMap(a=>a.match(/[\p{Script=Han}]{2,}|[A-Za-z]{3,}|\d+(?:\.\d+)?/gu)||[]).filter(Boolean))].slice(0,60),j=i.reduce((a,b)=>a+ +!!e.includes(b),0);return bS({originalContent:e,repairRound:"requirement-verification",diagnostics:a.generationDiagnostics,beforeMetrics:[j],apply:async()=>{let b=await a.withProgressHeartbeat(()=>(0,f.l8)({template:a.template,chapter:{id:c.id,title:c.title,content:e,evidence:c.evidence,missingFacts:c.missingFacts,sections:c.sections},issues:d.map(a=>`用户要求未落实:${a}`),promptTexts:h,requirement:a.requirement,forbidDrawingImages:!1,bidComposition:a.bidComposition,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,f.XG)("requirement-verification",a.generationDiagnostics)}));return b.content&&b.content!==e?b.content:e},recheck:a=>[i.reduce((b,c)=>b+ +!!a.includes(c),0)],shouldRollback:(a,b)=>b[0]<a[0]})},g=0,h=0,i=0;for(let b of a.finalChapterDrafts){let c,f=function(a,b){let c=a.requirementSemantics;if(!c)return[];let d=(c.chapterRequirements||[]).filter(a=>a.chapterTitle&&(b.includes(a.chapterTitle)||a.chapterTitle.includes(b))).flatMap(a=>a.requirements);return[...new Set([...c.globalRequirements||[],...d])].filter(Boolean).slice(0,24)}(a,b.title);if(0===f.length)continue;g+=1;let j=a.finalChapterDrafts.findIndex(a=>a.id===b.id);if(j<0)continue;let k=(0,r.X5)({type:"llm_review",roleId:`agent-requirement-verification-${b.id}`,status:"running",message:`用户要求执行核验:${b.title}(${f.length} 条要求)`,details:f.map(a=>`- ${a}`)},{subtitle:"用户要求核验"});(0,r.fx)(a.progressStages,k),(0,r.fx)(a.finalGateRepairStages,k),a.emitProgress(a.finalChapterDrafts,a.progressStages);let l=await d(b.title,b.content,f),m=Array.isArray(l?.unmet)?l.unmet.filter(Boolean).slice(0,12):[];if(!l||!0===l.satisfied||0===m.length){h+=1;let c=(0,r.X5)({type:"llm_review",roleId:`agent-requirement-verification-${b.id}`,status:"success",message:`用户要求核验通过:${b.title}(${f.length} 条要求全部落实)`,details:f.map(a=>`- ${a}`)},{subtitle:"用户要求核验"});(0,r.fx)(a.progressStages,c),(0,r.fx)(a.finalGateRepairStages,c),a.emitProgress(a.finalChapterDrafts,a.progressStages);continue}let n=b.content,o=m,p=m,q=0,s=!1,t=!1,u=!1,v="not-landed";for(;o.length>0&&q<2;){q+=1;let c=(0,r.X5)({type:"llm_review",roleId:`agent-requirement-verification-${b.id}`,status:"running",message:`用户要求定向补写中(第 ${q}/2 轮):${b.title}(${o.length} 条未落实)`,details:o.map(a=>`- ${a}`)},{subtitle:"用户要求核验"});(0,r.fx)(a.progressStages,c),(0,r.fx)(a.finalGateRepairStages,c),a.emitProgress(a.finalChapterDrafts,a.progressStages);let g=await e(b,o,n,q);if(g.rolledBack&&(t=!0),g.rolledBack||g.content===n){v="not-landed";break}if(n=g.content,a.finalChapterDrafts[j]={...b,content:n},s=!0,q>=2){v="limit";break}let h=await d(b.title,n,f),i=Array.isArray(h?.unmet)?h.unmet.filter(Boolean).slice(0,12):[];if(!h||!0===h.satisfied||0===i.length){u=!0,p=[],v="verified";break}if(p=i,i.length>=o.length){v="no-drop";break}o=i}s&&(i+=1),c=u?`用户要求核验闭环通过:${b.title}(${m.length} 条未落实要求经 ${q} 轮定向补写后复验全部落实)`:!s&&t?`用户要求补写已回滚:${b.title}(修复后要求关键词命中减少,保留修复前正文;残留 ${p.length} 条以 warning 记录,不阻断交付)`:s?"no-drop"===v?`用户要求补写部分生效:${b.title}(第 ${q} 轮补写后复验残留 ${p.length} 条未继续下降,停止继续修复;残留以 warning 记录,不阻断交付)`:"limit"===v?`用户要求补写部分生效:${b.title}(已执行 ${q} 轮定向补写,达最多 2 轮上限;末次复验残留 ${p.length} 条以 warning 记录,不阻断交付)`:`用户要求补写部分生效:${b.title}(第 ${q} 轮补写未落地(回滚或模型未修改),保留上一轮修复后正文;复验残留 ${p.length} 条以 warning 记录,不阻断交付)`:`用户要求补写未生效:${b.title}(模型未产生有效修改;残留 ${p.length} 条以 warning 记录,不阻断交付)`;let w=(0,r.X5)({type:"llm_review",roleId:`agent-requirement-verification-${b.id}`,status:u?"success":"failed",message:c,details:[...m.map(a=>`- ${a}`),...!u&&p.length>0?[`残留未落实 ${p.length} 条:${p.join(";")}`]:[]]},{subtitle:"用户要求核验"});(0,r.fx)(a.progressStages,w),(0,r.fx)(a.finalGateRepairStages,w),a.emitProgress(a.finalChapterDrafts,a.progressStages)}i>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.generationDiagnostics.llm.lastInfo=`用户要求执行核验闭环:${c} 条要求,核验 ${g} 章,${h} 章全部落实,${i} 章完成定向补写(每章最多 2 轮收敛修复,未收敛残留以 warning 记录,不阻断交付)`}function cp(a){return Math.max(0,Math.min(100,Math.round(a)))}async function cq(a){let b=await bF(a),c=a.reduce((a,b)=>a+(b.content.match(/本小节围绕|交底覆盖率按100%|24小时内形成整改责任|按施工准备→过程实施→检查验收→问题整改→资料归档的闭环组织|按作业条件确认→技术交底→过程实施|依据本项目已确认资料中的项目边界/gu)||[]).length,0),d=await (0,a4.Bt)(a.map(a=>a.content).join("\n")),e=400*Math.max(0,d.ratio-.1);return{score:cp(100-15*c-25*b.filter(a=>"error"===a.level).length-e),detail:`模板化空话命中 ${c} 处,套话句占比 ${(100*d.ratio).toFixed(1)}%(docx 达标线 ≤10%),废话段问题 ${b.length} 项`}}async function cr(a,b="",c={}){let d=function(a){let b=a.map(a=>`${a.title} ${(a.sections||[]).join(" ")} ${a.content}`).join("\n"),c=[{label:"工程概况",pattern:/工程概况|项目概况|基本概况/u},{label:"主要施工内容",pattern:/主要施工内容/u},{label:"重难点分析",pattern:/重点.{0,4}难点/u},{label:"施工部署",pattern:/施工部署|总体部署|流水/u},{label:"进度计划",pattern:/进度计划|工期保障|工期计划/u},{label:"质量保证",pattern:/质量保证|质量管理|质量控制/u},{label:"安全文明",pattern:/安全.{0,8}(?:管理|措施|文明)|文明施工/u},{label:"资源配置",pattern:/劳动力|机械设备|材料.{0,4}计划|资源配置/u},{label:"绿色环保",pattern:/绿色施工|扬尘|噪声|环保/u},{label:"应急管理",pattern:/应急/u}],d=c.filter(a=>a.pattern.test(b)),e=cp(d.length/c.length*100),f=c.filter(a=>!a.pattern.test(b)).map(a=>a.label);return{score:e,detail:`覆盖 ${d.length}/${c.length} 个核心结构组${f.length?`;缺失:${f.join("、")}`:""}`}}(a),e=function(a){let b=a.map(a=>a.content).join("\n"),c=new Set(b.match(bv.s2)||[]),d=new Set(b.match(/工程量|材料|设备|范围|流程|验收|检测|复试|调试|隐蔽|检验批|资料|记录|系统|部位|接口|规格|标准/gu)||[]),e=Math.max(1,b.length),f=c.size/(e/1e3);return{score:cp(Math.min(100,22*f+d.size/18*15)),detail:`量化参数 ${c.size} 项(每千字 ${f.toFixed(1)}),专业事实词 ${d.size}/18 类`}}(a),f=function(a){let b=a.map(a=>a.content).join("\n"),c=new Set(b.match(bv.aX)||[]),d=Math.max(1,b.length),e=c.size/(d/1e3);return{score:cp(Math.min(100,20*e+40)),detail:`工艺参数 ${c.size} 项(每千字 ${e.toFixed(1)})`}}(a),g=function(a,b=""){let c=(b||a.map(a=>a.content).join("\n\n")).split("\n"),d=0,e=0,f=0;for(;f<c.length;){let a=c[f].trim();if(!/^\|.+\|$/u.test(a)){f+=1;continue}let b=[];for(;f<c.length&&/^\|.+\|$/u.test(c[f].trim());)b.push(c[f].trim()),f+=1;b.length<3||(d+=1,0===b.slice(1).filter(a=>a.replace(/\|/gu,"").replace(/[\s\-:]/gu,"").length>0).reduce((a,b)=>a+b.split("|").slice(1,-1).map(a=>(0,bu.jG)(a.trim())).filter(a=>""===a||"-"===a||"—"===a||"/"===a).length,0)&&(e+=1))}return{score:0===d?40:cp(e/d*100),detail:`表格 ${d} 个,其中字段完整 ${e} 个`}}(a,b),h=await cq(a),i=function(a){let b=bE(a);return{score:cp(100-20*b.length-20*b.filter(a=>"error"===a.level).length),detail:`重复段落问题 ${b.length} 项`}}(a),j=function(a,b=""){let c=b||a.map(a=>a.content).join("\n\n"),d=[{label:"质量标准",pattern:/质量标准|质量要求|合格率/u},{label:"计划工期",pattern:/计划工期|工期要求|日历天/u},{label:"保修",pattern:/缺陷责任期|保修|质保/u},{label:"安全目标",pattern:/安全.{0,8}目标|文明.{0,8}目标/u},{label:"项目经理",pattern:/项目经理|项目负责人/u}],e=d.filter(a=>a.pattern.test(c)),f=d.filter(a=>!a.pattern.test(c));return{score:cp(e.length/d.length*100),detail:`招标硬性要求响应 ${e.length}/${d.length} 项${f.length?`(未响应:${f.map(a=>a.label).join("、")})`:""}`}}(a,b),k=[{key:"structure",label:"结构完整度",score:d.score,detail:d.detail,weight:.18},{key:"factLanding",label:"事实落位率",score:e.score,detail:e.detail,weight:.18},{key:"processParameter",label:"工艺参数密度",score:f.score,detail:f.detail,weight:.16},{key:"table",label:"表格完整度",score:g.score,detail:g.detail,weight:.12},{key:"filler",label:"废话控制",score:h.score,detail:h.detail,weight:.14},{key:"duplication",label:"重复控制",score:i.score,detail:i.detail,weight:.12},{key:"reviewResponse",label:"评标响应度",score:j.score,detail:j.detail,weight:.1}],l=cp(k.reduce((a,b)=>a+b.score*b.weight,0)),m=c.templating?.level==="heavy"?Math.min(l,54):c.templating?.level==="medium"?Math.min(l,69):l,n=m>=85?"专业":m>=70?"良好":m>=55?"合格":"待提升",o=[...bE(a),...await bF(a),...bH(a),...bI(a)].slice(0,5).map(a=>a.message),p=k.filter(a=>a.score<70).map(a=>`${a.label}(${a.score}分)`);return{total:m,grade:n,dimensions:k,summary:`施工组织设计专业度评分 ${m} 分(${n})${c.templating&&"light"!==c.templating.level?`;模板化等级:${"heavy"===c.templating.level?"重度":"中度"}(降档已生效)`:""}${p.length?`;待提升:${p.join("、")}`:""}`,topIssues:o}}async function cs(a){var b;if(!("heavy"===(b=a.templating).level||b.vagueHitCount>0||b.difficultyHeavyTemplated))return{issues:[],reviewed:!1};let c=(0,a4.T4)(a.markdown),d=[`确定性检测信号:模板化等级=${a.templating.level},套话句占比=${(100*a.templating.fillerRatio).toFixed(1)}%,模糊应答词命中=${a.templating.vagueHitCount}(${a.templating.vaguePhrases.join("、")||"无"}),重难点归因+量化双达标占比=${(100*a.templating.difficultyCountermeasureRatio).toFixed(0)}%,跨项目残留=${a.templating.crossProjectResidue.join("、")||"无"}${c.found.length?`,四新技术命中=${c.found.join("、")}`:""}`,`待复核正文(节选):
173
- ${function(a,b=6e3){return[a.match(/#{2,3}\s*[^\n]*(?:重难点|重点难点|工程难点|难点分析)[^\n]*\n[\s\S]{0,3500}/u)?.[0]||"",a.replace(/#{1,6}\s+[^\n]*\n/gu,"").replace(/\s+/gu," ").slice(0,b)].filter(Boolean).join("\n\n").slice(0,b+4e3)}(a.markdown)}`,'返回 JSON:{"issues":["问题1","问题2"]}'];try{let b=await (0,bo.bb)((0,z.y4)('你是招标技术标评审专家。对施工组织设计做语义级复核,只报告确定性规则覆盖不到的语义问题。\n复核维度(按《施工组织设计全维度校验提示词》判定标尺):\n1. 重难点三级判定:识别精准性(是否点明本项目真实难点而非泛泛而谈)→ 归因合理性(是否说明难点成因/风险来源)→ 对策匹配度(对策是否针对该难点的成因,而非通用措施堆砌);\n2. 术语等效性:同一对象是否前后术语一致(如"砼"与"混凝土"混用需统一),是否出现词面不同但概念等效的双重标准表述;\n3. 四新技术升级价值:若正文声称采用四新技术,其价值表述是否停留在"提升效率"式套话,缺少可对标官方推广目录或替代落后工艺的实质说明。\n每条问题必须包含:问题所在内容简述+判定依据(对应上面哪条维度)+一句话改进建议。\n只报告真实存在的问题,正文无问题时返回空数组;不得编造问题。只返回 JSON。'),d.join("\n\n"),{maxTokens:1200,temperature:0,signal:a.signal,diagnostics:a.diagnostics,taskKind:"structuredGeneration"});return{issues:Array.isArray(b?.issues)?b.issues.filter(a=>"string"==typeof a&&a.length>0).slice(0,6):[],reviewed:!0}}catch{return{issues:[],reviewed:!1}}}async function ct(a){var b;a.reviewChecklist=[{key:"export-gate",label:"导出门禁",passed:(b={exportGate:a.qualityBundle.finalExportGate,qualityReport:a.qualityBundle.qualityReport,repairStrategies:a.qualityBundle.repairStrategies}).exportGate.passed,message:b.exportGate.passed?"导出门禁通过":`仍有 ${b.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:b.qualityReport.passed,message:`${b.qualityReport.deliveryProbability}% / ${b.qualityReport.target}%`},{key:"completeness",label:"资料完整性",passed:b.qualityReport.scores.completeness>=85,message:`${b.qualityReport.scores.completeness}/100`},{key:"specificity",label:"方案针对性",passed:b.qualityReport.scores.specificity>=85,message:`${b.qualityReport.scores.specificity}/100`},{key:"compliance",label:"合规性",passed:b.qualityReport.scores.compliance>=80,message:`${b.qualityReport.scores.compliance}/100`},{key:"repair-strategies",label:"修复策略",passed:0===b.repairStrategies.filter(a=>"high"===a.priority).length,message:b.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}];let c=(0,C.Ff)(a.validationIssues);a.generationDiagnostics.quality.blockingCount+=c.blocking,a.generationDiagnostics.quality.importantCount+=c.important,a.generationDiagnostics.quality.minorCount+=c.minor,a.telemetry=function(a){let b=[...a.diagnostics.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>({name:a.name,durationMs:a.durationMs})),c={};for(let[b,d]of Object.entries(a.diagnostics.llm.patchGuardStats||{}))c[b]={hits:d.hits+d.rejects,repaired:d.hits,failed:d.rejects+(d.rollbacks??0)};return{llmCalls:a.diagnostics.llm.calls,llmFailures:a.diagnostics.llm.failures,maxParallelLlm:a.diagnostics.llm.maxActive,searchQueries:a.diagnostics.evidence.searchQueries,evidenceContextChars:a.diagnostics.evidence.contextChars,qualityIssues:{...a.diagnostics.quality},slowMetrics:b,elapsedMs:a.startedAt&&a.endedAt?a.endedAt-a.startedAt:void 0,repairHeat:Object.keys(c).length>0?c:void 0}}({diagnostics:a.generationDiagnostics});let d=a.qualityBundle.finalExportGate.blockingIssues.length;a.telemetry.qualityIssues.blockingCount=d,a.professionalScore=await cr(a.finalChapterDrafts,a.finalMarkdown,{templating:a.qualityBundle.qualityReport.templating}),a.templatingReview=a.qualityBundle.qualityReport.templating?await a.withProgressHeartbeat(()=>cs({templating:a.qualityBundle.qualityReport.templating,markdown:a.finalMarkdown,diagnostics:a.generationDiagnostics,signal:a.signal})):{issues:[],reviewed:!1},a.finalStages=[...a.executionStages,...a.finalGateRepairStages],a.suspensionChecklist=a.qualityBundle.finalExportGate.passed?void 0:(0,i.aF)(a.qualityBundle.finalExportGate.blockingIssues,a.finalChapterDrafts),a.finalStages.push((0,r.X5)({type:"validation",roleId:"agent-final-gate",status:a.qualityBundle.finalExportGate.passed?"success":"failed",message:a.qualityBundle.finalExportGate.passed?"Agent 最终门禁通过":`Agent 最终门禁阻断 ${d} 个问题(已显式挂起,人工处理清单见明细)`,details:a.suspensionChecklist?(0,i.$w)(a.suspensionChecklist):[]},{subtitle:"Agent 最终门禁"}));let e=a.qualityBundle.qualityReport.deliveryProbability<70;a.finalStages.push((0,r.X5)({type:"validation",roleId:"document-delivery-score",status:a.qualityBundle.qualityReport.passed?"success":a.qualityBundle.finalExportGate.passed?"skipped":"failed",message:a.qualityBundle.finalExportGate.passed&&!a.qualityBundle.qualityReport.passed?`${a.qualityBundle.qualityReport.summary}${e?";置信度低于 70%,建议完成续修后再交付归档":"(导出门禁已通过,作为后续优化建议归档)"}`:a.qualityBundle.qualityReport.summary,details:e&&a.qualityBundle.finalExportGate.passed?[...a.qualityBundle.qualityReport.actions,"续修建议:交付置信度低于 70% 门槛,建议按交付复核清单补齐短板维度后重新生成或续修。"]:a.qualityBundle.qualityReport.actions},{subtitle:"交付评分"})),a.finalStages.push((0,r.X5)({type:"validation",roleId:"document-professional-score",status:"专业"===a.professionalScore.grade||"良好"===a.professionalScore.grade?"success":"skipped",message:a.professionalScore.summary,details:[...a.professionalScore.dimensions.map(a=>`${a.label}:${a.score} 分(${a.detail})`),...a.professionalScore.topIssues.map(a=>`待修复:${a}`)]},{subtitle:"专业度评分"})),a.qualityBundle.qualityReport.templating&&"light"!==a.qualityBundle.qualityReport.templating.level&&a.finalStages.push((0,r.X5)({type:"validation",roleId:"document-templating-report",status:"skipped",message:`模板化检测:${"heavy"===a.qualityBundle.qualityReport.templating.level?"重度":"中度"}模板化(套话句占比 ${(100*a.qualityBundle.qualityReport.templating.fillerRatio).toFixed(1)}%,重难点归因+量化双达标占比 ${(100*a.qualityBundle.qualityReport.templating.difficultyCountermeasureRatio).toFixed(0)}%,模糊应答词 ${a.qualityBundle.qualityReport.templating.vagueHitCount} 处)`,details:a.templatingReview.issues},{subtitle:"模板化检测"})),a.writingTaskBrief&&a.finalStages.push((0,r.X5)({type:"reference",roleId:"document-writing-task-brief",status:"success",message:`写作任务书:${a.writingTaskBrief.documentType},${a.writingTaskBrief.chapters.length} 章任务卡,全局写作焦点 ${a.writingTaskBrief.globalWritingFocus.length} 条`,details:[...a.writingTaskBrief.globalWritingFocus,...a.writingTaskBrief.chapters.slice(0,10).map(a=>`${a.chapterTitle}:覆盖 ${a.mustCover.length} 项`)],subtitle:"写作任务书"})),a.finalStages.push((0,r.X5)({type:"reference",roleId:"knowledge-coverage",status:a.qualityBundle.knowledgeCoverage.score>=85?"success":"failed",message:`资料确认覆盖率:${a.qualityBundle.knowledgeCoverage.score}%(证据 ${a.qualityBundle.knowledgeCoverage.evidenceCount} 条,文件 ${a.qualityBundle.knowledgeCoverage.confirmedFiles} 份)`,details:[a.qualityBundle.knowledgeCoverage.remediation]},{subtitle:"资料覆盖"})),a.finalStages.push((0,r.X5)({type:"validation",roleId:"document-review-checklist",status:a.reviewChecklist.every(a=>a.passed)?"success":a.qualityBundle.finalExportGate.passed?"skipped":"failed",message:`交付复核清单:通过 ${a.reviewChecklist.filter(a=>a.passed).length}/${a.reviewChecklist.length}${a.qualityBundle.finalExportGate.passed&&!a.reviewChecklist.every(a=>a.passed)?"(导出门禁已通过,其余项作为优化建议归档)":""}`,details:a.reviewChecklist.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let f=(0,k._8)(a.generationDiagnostics.metrics),g=(0,k.bz)(a.generationDiagnostics.llm.callBreakdown),h=a.generationDiagnostics.factSanitize?`,事实净化 截断${a.generationDiagnostics.factSanitize.truncated}/丢弃${a.generationDiagnostics.factSanitize.dropped}/编号补全${a.generationDiagnostics.factSanitize.repaired}`:"";a.finalStages.push((0,r.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${a.generationDiagnostics.llm.calls} 次,失败 ${a.generationDiagnostics.llm.failures} 次,瞬态重试 ${a.generationDiagnostics.llm.retries} 次,schema 校验失败 ${a.generationDiagnostics.llm.schemaFailures} 次,峰值并行 ${a.generationDiagnostics.llm.maxActive},检索 ${a.generationDiagnostics.evidence.searchQueries} 次/${Math.round(a.generationDiagnostics.evidence.searchMs/1e3)} 秒,证据上下文 ${a.generationDiagnostics.evidence.contextChars} 字,噪声过滤 ${a.generationDiagnostics.evidence.filteredNoise} 条,预算裁剪 ${a.generationDiagnostics.evidence.budgetDropped} 条,质量问题 阻断${a.generationDiagnostics.quality.blockingCount}/重要${a.generationDiagnostics.quality.importantCount}/轻微${a.generationDiagnostics.quality.minorCount}${h}${f?`,Top耗时:${f}`:""}${g?`,调用输入Top5:${g}`:""}`,details:[...(0,k.Il)(a.generationDiagnostics.metrics),...(0,k.NJ)(a.generationDiagnostics.llm.callBreakdown)]},{subtitle:"后台诊断"}))}let cu={prefixCacheHitRateFloor:.4,budgetDropRatioCeiling:.3,llmFailureRateCeiling:.1};async function cv(a){let b=function(a){let b=[],c=a.llm.promptCacheHitTokens??0,d=c+(a.llm.promptCacheMissTokens??0),e=d>0?c/d:null;null!==e&&e<cu.prefixCacheHitRateFloor&&b.push(`固定前缀缓存命中率 ${(100*e).toFixed(1)}% 低于 40%:固定前缀未收敛,检查 L0/L2 恒定段结构`);let f=a.llm.reasoningTokens??0;f>0&&b.push(`推理 token 累计 ${f}:disableThinking 未生效,检查模型 provider 配置`);let g=a.evidence.raw>0?a.evidence.budgetDropped/a.evidence.raw:null;null!==g&&g>cu.budgetDropRatioCeiling&&b.push(`证据预算裁剪 ${(100*g).toFixed(1)}%(${a.evidence.budgetDropped}/${a.evidence.raw}):裁剪过重,疑似预算配置失配`);let h=a.llm.calls>0?a.llm.failures/a.llm.calls:null;return null!==h&&h>cu.llmFailureRateCeiling&&b.push(`LLM 失败率 ${(100*h).toFixed(1)}%(${a.llm.failures}/${a.llm.calls}):失败率偏高,检查限流与重试策略`),{alerts:b,metrics:{prefixCacheHitRate:e,reasoningTokens:f,budgetDropRatio:g,llmFailureRate:h}}}(a.generationDiagnostics),c=process.memoryUsage(),d=Math.round(c.rss/1048576),e=Math.round(c.heapUsed/1048576),f=function(){let a=Number(process.env.DOCUMENT_MEMORY_ALERT_MB??3072);return Number.isFinite(a)&&a>0?a:3072}();console.log(`[gen] memory(finalize) rss=${d}MB heap=${e}MB threshold=${f}MB`);let g=d>=f?[...b.alerts,`进程内存 rss=${d}MB 超过告警阈值 ${f}MB:大文档生成建议 NODE_OPTIONS=--max-old-space-size=4096,并控制并发生成任务数(DOCUMENT_MAX_CONCURRENT_GENERATIONS)`]:b.alerts;a.telemetry.healthAlerts=g,0!==g.length&&a.finalStages.push((0,r.X5)({type:"validation",roleId:"document-health-diagnosis",status:"skipped",message:`自动健康诊断:${g.length} 项告警(不阻断,供配置优化参考)`,details:g},{subtitle:"健康诊断"}))}async function cw(a){(0,l.wF)();let{chapterDraftsByOrder:b,chapterGenerationStagesByOrder:c,chapterGenerationStages:d,effectiveChapters:e,input:f,hasExplicitOutline:m,failedChapterMessages:n}=a,{requirement:o}=f,q=function(a){let{signal:b,requirement:c}=a.input;return{input:a,template:a.template,effectiveChapters:a.effectiveChapters,requirement:c,signal:b,projectRoot:a.projectRoot,projectId:a.projectId,projectMaterialSummary:a.projectMaterialSummary,documentSpec:a.documentSpec,documentBudget:a.documentBudget,promptBindings:a.promptBindings,promptDocumentRules:a.promptDocumentRules,domainProfile:a.domainProfile,scopeConflicts:a.scopeConflicts,evaluationCriteriaItems:a.evaluationCriteriaItems,tenderRequirements:a.tenderRequirements,requirementAssignments:a.requirementAssignments,requirementsSimilarity:a.requirementsSimilarity,factTokenScopeClassifier:a.factTokenScopeClassifier,professionalDepthClassifier:a.professionalDepthClassifier,blueprintData:a.blueprintData,bidComposition:a.bidComposition,billFactLock:a.billFactLock,requirementSemantics:a.requirementSemantics,generationDiagnostics:a.generationDiagnostics,repairPromptTexts:a.repairPromptTexts,progressStages:a.progressStages,chapterGenerationStages:a.chapterGenerationStages,emitProgress:a.emitProgress,withProgressHeartbeat:a.withProgressHeartbeat,missingItems:a.missingItems,failedChapterMessages:a.failedChapterMessages,indexHealth:a.indexHealth,webResearchReport:a.webResearchReport,hasExplicitOutline:a.hasExplicitOutline,retrievalCoverageReports:a.retrievalCoverageReports,projectMaterialScope:a.projectMaterialScope,writingTaskBrief:a.writingTaskBrief,globalConsistencyIssues:a.globalConsistencyIssues,agentWorkflow:a.agentWorkflow,factExtractionPromptTexts:a.factExtractionPromptTexts,readiness:a.readiness,promptPlan:a.promptPlan,allEvidence:a.allEvidence,facts:{},structuredFacts:[],governedStructuredFacts:[],factsModel:void 0,chapterDrafts:[],finalChapterDrafts:[],finalMarkdown:"",validationIssues:[],baseValidationIssues:[],executionStages:[],finalGateRepairStages:[],sources:[],qualityBundle:void 0,scheduleAuthority:void 0,assemblyRateAuthority:void 0,scaleSummary:void 0,supportAuthority:void 0,laborPeakAuthority:void 0,greeningMaintenanceAuthority:void 0,surfaceFixContext:{laborPeakAuthority:void 0,greeningMaintenanceAuthority:void 0,resourceBreakdownAuthority:void 0,supportFormAuthority:void 0},decisionLockEntries:[],finalStages:[],reviewChecklist:[],telemetry:void 0,professionalScore:void 0,templatingReview:{issues:[],reviewed:!1},assets:[],validation:void 0,rebuildFinalMarkdown:()=>"",recomputeFinalValidationBundle:async()=>void 0}}(a),r=b.filter(a=>!!a);if(q.chapterDrafts=r,d.push(...c.filter(a=>!!a)),0===r.length)throw Error(`章节生成未完成:${n.join(";")||"没有生成任何有效章节"}`);if(m&&r.length<e.length)throw Error(`OUTLINE 指定 ${e.length} 章,实际只生成 ${r.length} 章:${n.join(";")||"部分章节未生成"}`);await s(q),await bP(q);let t=(0,A._C)(q.bidComposition),u=q.bidComposition?.formatRules.cover==="forbidden",v=(0,z.rs)((0,z.V3)({templateId:q.template.id,templateName:q.template.name,title:q.template.outputTitle,requirement:q.requirement||"",projectRoot:q.projectRoot,projectId:q.projectId,exportSettings:q.template.exportSettings,generationSettings:q.template.generationSettings,facts:q.facts,structuredFacts:q.structuredFacts,factsModel:q.factsModel,chapters:q.chapterDrafts,sources:q.sources,missingItems:[...new Set(q.missingItems)],validation:q.validation,validationIssues:q.validationIssues,executionStages:q.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:q.assets,partialChapters:q.chapterDrafts.map(a=>({id:a.id,title:a.title,chars:(0,h.V7)(a.content),status:(0,k.DR)(a,q.documentBudget.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:q.chapterDrafts,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:q.promptDocumentRules,bodyTableForbidden:t,coverForbidden:u}),q.chapterDrafts,{forbidDrawingImages:!1,promptRules:q.promptDocumentRules,bodyTableForbidden:t,coverForbidden:u});q.finalChapterDrafts=v.chapters.map(a=>{let b=q.effectiveChapters.find(b=>b.id===a.id)||a;return{...a,sections:a.sections||[],content:(0,k.w_)(a.content,b)}}),q.finalMarkdown=(0,z.rs)((0,z.V3)({templateId:q.template.id,templateName:q.template.name,title:q.template.outputTitle,requirement:q.requirement||"",projectRoot:q.projectRoot,projectId:q.projectId,exportSettings:q.template.exportSettings,generationSettings:q.template.generationSettings,facts:q.facts,structuredFacts:q.structuredFacts,factsModel:q.factsModel,chapters:q.finalChapterDrafts,sources:q.sources,missingItems:[...new Set(q.missingItems)],validation:q.validation,validationIssues:q.validationIssues,executionStages:q.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:q.assets,partialChapters:[],checkpointChapters:q.finalChapterDrafts,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:q.promptDocumentRules,bodyTableForbidden:t,coverForbidden:u}),q.finalChapterDrafts,{forbidDrawingImages:!1,promptRules:q.promptDocumentRules,bodyTableForbidden:t,coverForbidden:u}).markdown,q.finalMarkdown=(0,p._D)((0,k.Ht)((0,z.bR)((0,z.kT)((0,z.K7)(bL((0,k.jO)(q.finalMarkdown,q.structuredFacts,{bodyTableForbidden:t}),q.projectMaterialSummary)))))).markdown,q.finalMarkdown=(0,B.u7)(q.finalMarkdown,{plan:q.bidComposition?.appendixPlan||[],blueprintData:q.blueprintData}),await bR(q),await bT(q),await cb(q),await cc(q),await cf(q),await cn(q),await co(q),await cg(q),await ct(q),await cv(q);let w=q.finalChapterDrafts.map(a=>({...a,evidence:(0,g.QR)(a.evidence||[],{preservePinned:!0})}));return q.finalChapterDrafts=w,{templateId:q.template.id,templateName:q.template.name,title:q.template.outputTitle,requirement:o||"",projectRoot:q.projectRoot,projectId:q.projectId,exportSettings:q.template.exportSettings,generationSettings:q.template.generationSettings,facts:q.facts,structuredFacts:q.structuredFacts,factsModel:q.factsModel,chapters:w,sources:q.sources,missingItems:[...new Set(q.missingItems)],validation:q.validation,validationIssues:q.validationIssues,exportGate:q.qualityBundle.finalExportGate,executionStages:q.finalStages,assets:q.assets,partialChapters:q.finalChapterDrafts.map(a=>({id:a.id,title:a.title,chars:(0,h.V7)(a.content),status:(0,k.DR)(a,q.documentBudget.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:w,promptRules:q.promptDocumentRules,agentWorkflow:q.agentWorkflow,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:q.generationDiagnostics,profile:function(a){let b=`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`,c=[{pattern:/专项施工|危大|专项方案/u,type:"专项施工方案",dimensions:["专项对象边界","工艺参数","风险控制","验收要求","应急措施"]},{pattern:/投标|技术标|响应|招标/u,type:"投标技术方案",dimensions:["招标响应","技术优势","工期质量安全承诺","资源保障","履约可实施性"]},{pattern:/监理|旁站|巡视|平行检验/u,type:"监理规划/细则",dimensions:["监理目标","旁站巡视","平行检验","验收程序","资料签认"]},{pattern:/可研|可行性|项目建议书|投资估算/u,type:"可研/项目建议类文档",dimensions:["建设必要性","方案比选","投资估算","风险分析","实施效益"]},{pattern:/运维|维护|保养|巡检/u,type:"运维维护方案",dimensions:["巡检频次","维护流程","故障响应","备品备件","记录闭环"]}].find(a=>a.pattern.test(b));return{type:c?.type||"施工组织设计/施工技术方案",dimensions:c?.dimensions||["工程概况","施工部署","进度质量安全","资源配置","施工工艺和验收闭环"],requiredEvidencePolicy:"本地知识库为完整事实源;系统暂未确认的事实必须通过扩大检索、事实补抽或落位修复解决,不得归因为用户资料缺失。"}}({template:q.template,chapters:e,requirement:o}),knowledgeCoverage:q.qualityBundle.knowledgeCoverage,factTraces:q.qualityBundle.factTraces,chapterCoverage:q.qualityBundle.chapterCoverage,retrievalCoverage:q.retrievalCoverageReports,qualityReport:q.qualityBundle.qualityReport,repairStrategies:q.qualityBundle.repairStrategies,reviewChecklist:q.reviewChecklist,professionalScore:q.professionalScore,templatingReviewIssues:q.templatingReview.issues,authorityAudit:q.authorityAuditReport,suspensionChecklist:q.suspensionChecklist??(q.qualityBundle.finalExportGate.passed?void 0:(0,i.aF)(q.qualityBundle.finalExportGate.blockingIssues,q.finalChapterDrafts)),writingTaskBrief:q.writingTaskBrief,workflowVersion:j.x,telemetry:q.telemetry},generatedAt:Date.now(),markdown:q.finalMarkdown,bidComposition:q.bidComposition}}var cx=c(71678),cy=c(29055);let cz=[{id:"overview",title:"工程概况与总体理解",requiredSectionPatterns:[/编制依据|编制说明/u,/工程概况|项目概况|基本概况/u,/现场踏勘|施工条件|现场条件/u],chapterPatterns:[/概况|总体|理解|说明|编制|项目/u],remedy:"应设置工程概况章节,包含编制依据、工程基本概况、现场条件与总体理解。",level:"required"},{id:"major-content",title:"项目主要施工内容",requiredSectionPatterns:[/主要施工内容|主要施工项目|施工内容/u],chapterPatterns:[/概况|总体|理解|主要施工|工程/u],remedy:'必须包含"项目主要施工内容"小节,按工作包展开施工概况、施工流程、施工方法。',level:"required"},{id:"key-difficulty",title:"重难点分析与对策",requiredSectionPatterns:[/重点.*难点|难点.*对策|重难点/u],chapterPatterns:[/概况|总体|理解|重点|难点|施工/u],remedy:"应设置项目特点、重点、难点分析小节,并逐项给出应对措施与责任闭环。",level:"required"},{id:"deployment",title:"施工部署与施工组织",requiredSectionPatterns:[/施工部署|总体部署|流水|施工顺序|施工区段/u],chapterPatterns:[/部署|组织|总体|方案/u],remedy:"应设置施工部署小节,明确流水段划分、施工顺序与资源调配。",level:"required"},{id:"schedule",title:"进度计划与工期保障",requiredSectionPatterns:[/进度计划|工期|节点/u],chapterPatterns:[/进度|工期|计划|保障/u],remedy:"应设置进度计划与工期保障小节,含总进度计划、关键节点与纠偏措施。",level:"required"},{id:"quality",title:"质量保证体系与措施",requiredSectionPatterns:[/质量/u],chapterPatterns:[/质量|验收|保障|措施/u],remedy:"应设置质量保证体系与措施小节,含质量目标、三检、隐蔽验收、通病防治。",level:"required"},{id:"safety",title:"安全文明施工与危大工程管控",requiredSectionPatterns:[/安全/u,/危大工程|危大/u],chapterPatterns:[/安全|文明|风险|危大|保障|措施/u],remedy:"应设置安全管理与危大工程管控小节,含危险源辨识、危大清单、专项方案。",level:"required"},{id:"resources",title:"劳动力材料机械设备配置",requiredSectionPatterns:[/劳动力|机械设备|材料.*计划|资源配置|人材机/u],chapterPatterns:[/资源|劳动力|机械|材料|设备|计划/u],remedy:"应设置资源配置小节,含分阶段劳动力、机械设备投入与材料进场计划。",level:"required"},{id:"environment",title:"绿色文明施工与环保措施",requiredSectionPatterns:[/文明施工|扬尘|噪声|绿色|环保|四节/u],chapterPatterns:[/文明|绿色|环保|扬尘|噪声|保障|措施/u],remedy:"应设置文明施工与绿色施工小节,含扬尘噪声管控与四节一环保措施。",level:"required"},{id:"emergency",title:"应急管理体系",requiredSectionPatterns:[/应急/u],chapterPatterns:[/应急|安全|保障|措施/u],remedy:"应设置应急管理小节,含应急组织、物资储备与专项预案。",level:"recommended"}],cA={building:[{id:"key-difficulty",title:"危大工程专项管控(房建)",requiredSectionPatterns:[/深基坑|高支模|起重吊装|脚手架/u],chapterPatterns:[/危大|安全|专项/u],remedy:"房建项目应对深基坑、高支模、起重吊装、脚手架等危大工程逐项给出专项方案与安全管理措施。",level:"recommended"}],municipal:[{id:"key-difficulty",title:"交通导改与管线保护(市政)",requiredSectionPatterns:[/交通导改|交通导行|占道施工/u,/管线保护|管线探测/u],chapterPatterns:[/交通|管线|安全|专项|保障/u],remedy:"市政项目应设置交通导改与既有管线保护专项内容。",level:"recommended"}],renovation:[{id:"key-difficulty",title:"居民协调与既有保护(改造)",requiredSectionPatterns:[/居民|扰民|既有.*保护|不中断/u],chapterPatterns:[/居民|协调|保护|保障|专项/u],remedy:"改造项目应设置居民沟通协调与既有设施保护专项内容。",level:"recommended"}],decoration:[{id:"key-difficulty",title:"成品保护与交叉施工(装饰)",requiredSectionPatterns:[/成品保护/u,/交叉施工|工序穿插/u],chapterPatterns:[/成品保护|交叉|协调|保障|专项/u],remedy:"装饰项目应设置成品保护与交叉施工工序优化专项内容。",level:"recommended"}]};function cB(a){return(0,aK.GQ)(a).replace(/\s+/gu,"").toLowerCase()}function cC(a){return cB(`${a.title} ${(a.sections||[]).join(" ")}`).slice(0,800)}function cD(a){var b;let c,d=(b=a.chapters,[...cz].map(a=>{let c=[],d=new Set;for(let e of b){let b=cB(`${e.title} ${(e.sections||[]).join(" ")}`);for(let f of a.requiredSectionPatterns)f.test(b)&&!d.has(f)&&(d.add(f),c.push(e.title))}let e=[...new Set(c)],f=a.requiredSectionPatterns.filter(a=>!d.has(a)).map(a=>(function(a){let b=a.source.replace(/[\\/^$.*+?()[\]{}]/gu,"").replace(/u$/u,"");return b.split("|").map(a=>a.trim()).find(Boolean)||b})(a)),g=d.size===a.requiredSectionPatterns.length?e.length>1?"fragmented":"satisfied":"missing";return{groupId:a.id,groupTitle:a.title,level:a.level,status:g,carrierChapters:e,missingSections:f,remedy:a.remedy}})),e=[],f=d.filter(a=>"required"===a.level&&"missing"===a.status);for(let a of f)e.push({level:"error",severity:"blocker",message:`评标结构缺失:${a.groupTitle}(缺少:${a.missingSections.join("、")})`,suggestion:a.remedy});for(let a of d.filter(a=>"fragmented"===a.status))e.push({level:"warning",severity:"warning",message:`${a.groupTitle} 小节散落在 ${a.carrierChapters.length} 个章节(${a.carrierChapters.join("、")}),结构可能失真`,suggestion:"建议将同类内容集中到一个承载章节,避免章节间职责重叠。"});for(let b of a.chapters){let a=(b.sections||[]).length;a>18&&e.push({level:"warning",severity:"warning",message:`${b.title} 规划小节 ${a} 个,超过 18 个上限,易产生内容膨胀与重复`,suggestion:"合并语义相近的小节,或将细分内容下移为三级小节而非二级小节。"})}let g=a.chapters.map(a=>({...a,sections:[...a.sections||[]]})),h=new Set;for(let a of f){let b=cz.find(b=>b.id===a.groupId);if(!b)continue;let c=g.findIndex(a=>{let c=cB(a.title);return b.chapterPatterns.some(a=>a.test(c))&&!/雨季|冬季|高温|防汛|扬尘|噪声|工资|劳务|实名|应急|BIM|智慧|管线/u.test(c)}),d=g[c>=0?c:0];for(let c of a.missingSections.filter(a=>!h.has(a))){h.add(c);let a=!function(a){let b=(0,aK.GQ)(a).replace(/\s+/gu,"");return b.length>0&&b.length<=3&&/^[\u4e00-\u9fa5]+$/u.test(b)}(c)?c:b.title;!(0,cx.xb)(a)&&(d.sections.some(b=>cB(b).includes(cB(a))||cB(a).includes(cB(b)))||d.sections.push(a))}}let i=/^(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施$/u;for(let a of g){if(!/人[、,,]材[、,,]机/u.test(a.title))continue;let b=new Set,c=[];for(let d of a.sections){if(cB(d)===cB(a.title))continue;let e=i.exec(d.trim());e?b.has(e[1])||(b.add(e[1]),c.push(d.trim())):c.push(d)}for(let a of["人","材","机"])b.has(a)||c.push(`确保${a}的保障体系与措施`);c.length!==a.sections.length&&(a.sections=c)}if(a.evaluationItems?.length){let b=a.chapters.map(cC);for(let{item:d}of(c=function(a,b,c){let d=[],e=a.map(cC);for(let a of b){let b=a.title;if(!b||e.some(a=>(function(a,b){let c=cB(b);return!!c&&(a.includes(c)||c.includes(a.slice(0,40)))})(a,b)))continue;let f=0;if(c?.semanticSimilarity)for(let a of e)f=Math.max(f,c.semanticSimilarity(b,a));f>=.6||d.push({item:a,title:b,bestSimilarity:c?.semanticSimilarity?f:void 0})}return{items:b,uncovered:d}}(a.chapters,a.evaluationItems,{semanticSimilarity:a.semanticSimilarity})).uncovered){let c=d.title;if(!c||(0,aK.Fe)(c)||(0,aK.ob)(c)||(0,cx.xb)(c))continue;let f=b.reduce((b,d,e)=>{let f=a.semanticSimilarity?a.semanticSimilarity(c,d):+!!d.includes(cB(c));return f>b.score?{index:e,score:f}:b},{index:-1,score:-1}).index,h=g[f>=0?f:0];h.sections.some(a=>cB(a).includes(cB(c))||cB(c).includes(cB(a)))||(h.sections.push(c),h.purpose=`${h.purpose||""};系统已按招标文件技术评审条目自动补足小节“${c}”,必须基于项目资料与适用技术展开实质内容。`,e.push({level:"warning",severity:"warning",message:`评分标准条目“${c}”无承接章节,已自动补小节“${c}”至“${h.title}”`,suggestion:"请确认补充小节与招标文件评审条目口径一致。"}))}}for(let b of(0,cy.y)(a))if("general"!==b)for(let a of cA[b]){let b=cB(g.map(a=>`${a.title} ${(a.sections||[]).join(" ")}`).join(" "));if(a.requiredSectionPatterns.some(a=>a.test(b)))continue;let c=g.findIndex(b=>{let c=cB(b.title);return a.chapterPatterns.some(a=>a.test(c))}),d=g[c>=0?c:0];(0,cx.xb)(a.title)||d.sections.push(a.title)}return{diagnostics:d,issues:e,enrichedChapters:g,criteriaAudit:c}}function cE(a){return a.replace(/\s+/gu,"").toLowerCase()}let cF=[{pattern:/概况|总体|理解|说明|编制/u,goal:"以项目资料已确认的事实卡片展开工程概况与总体理解,不得空泛概述",mustCover:["工程名称、建设地点、建设规模、计划工期、质量标准等资料已确认事实","现场条件与招标范围边界","编制依据与适用范围(按五类逐项列全:招标文件及补疑补遗、国家法律法规、国家/行业现行规范标准、地方法规规章、企业管理体系;地方法规规章必须结合工程所在地属地的现行地方性法规与政府规章,不得只写笼统一句话)","B5 专业工程清单:资料识别的专业工程逐个展开(不少于 5 个,每个专业工程写明作业对象与工程量、工序顺序、施工方法三方面要素,落到工程量与工艺参数)"]},{pattern:/主要施工内容/u,goal:"按专业工程展开作业对象与工程量、工序顺序、施工方法三方面要素(呈现形式不限),落到工程量与工艺参数",mustCover:["资料识别的专业工程(不少于5个)","每个专业工程的作业对象与工程量/工序顺序/施工方法三方面要素","工程量、材料设备规格、检测验收与资料闭环"]},{pattern:/主要分部分项工程施工方案|主要施工方法/u,goal:"按分项工程方案展开作业对象与工程量、工序顺序、施工方法三方面要素(呈现形式不限),落到工艺参数与工序顺序",mustCover:["资料明确的专业工程范围(逐项展开分项工程方案)","每个分项方案的作业对象与工程量/工序顺序/施工方法三方面要素","每个分项方案不少于4个工艺参数与至少1处3环节以上工序顺序表达","工艺参数来自绑定材料或行业通用规范值,不得编造"]},{pattern:/重点|难点/u,goal:"识别项目重点难点并给出针对性对策,每项落到责任岗位与验收节点",mustCover:["重点难点成因与影响范围","对应施工内容与专项措施","责任岗位、检查频次、整改闭环"]},{pattern:/部署|总体|流水|顺序/u,goal:"明确施工部署逻辑、流水段划分与资源调配机制",mustCover:["施工区段与流水划分","各阶段施工顺序与穿插关系","资源动态调配机制"]},{pattern:/进度|工期/u,goal:"围绕总工期与关键节点展开进度保障",mustCover:["总进度计划与关键节点","周/日计划分解","进度偏差识别与纠偏措施"]},{pattern:/质量/u,goal:"覆盖材料验收、过程控制、隐蔽验收、整改复验的质量闭环",mustCover:["质量目标与验收依据","三检制度与样板引路","隐蔽工程验收与材料复试","见证取样送检、试块养护、分部分项报验等质量保障制度逐项落位","质量通病防治与闭环整改","保修与缺陷责任期承诺"]},{pattern:/安全|危大|风险/u,goal:"覆盖风险识别、危大工程专项方案、检查整改与应急响应",mustCover:["危险源辨识与风险分级","危大工程辨识清单逐项完整(按项目实际情况覆盖基坑支护与降水、模板支撑、脚手架、起重吊装、吊篮、拆除等适用项,逐项写明辨识依据,不得遗漏)","危大工程专项方案编制与审批程序","安全交底与隐患排查闭环","B5 应急预案:应急组织架构、应急物资储备清单、专项预案与演练计划(演练频次量化,如每半年 1 次)"]},{pattern:/资源|材料|设备|劳动力|人材机/u,goal:"说明资源配置依据、进场验收与保管调配",mustCover:["机械设备投入计划","分阶段劳动力计划","材料进场计划与验收"]},{pattern:/文明|绿色|环保|扬尘|噪声/u,goal:"覆盖扬尘噪声管控、四节一环保与智慧监测",mustCover:["扬尘治理六个百分百逐项落位(施工工地周边 100% 围挡、物料堆放 100% 覆盖、出入车辆 100% 冲洗、施工现场地面 100% 硬化、拆迁工地 100% 湿法作业、渣土车辆 100% 密闭运输;不涉及拆迁的写明豁免理由)","扬尘噪声分时段管控","四节一环保措施","监测预警与台账","B5 四节一环保量化指标:节水(非传统水源利用率/用水量控制)、节材(材料损耗率/废弃物回收率)、节地(土方平衡率)、节能(能耗指标)各至少 1 项带单位量化指标,附录八基准对照项逐项量化响应"]},{pattern:/应急|预案/u,goal:"覆盖应急组织、物资储备与专项预案",mustCover:["应急组织架构","应急物资储备","专项预案与演练计划"]},{pattern:/竣工|验收|移交|保修/u,goal:"覆盖竣工清理、验收移交与保修响应",mustCover:["竣工清理与垃圾外运","缺陷修补与复查销项","验收移交与保修响应"]},{pattern:/工资|劳务|实名/u,goal:"覆盖劳务实名制与农民工工资保障闭环",mustCover:["劳务实名制管理","工资专用账户与银行代发","考勤与工资支付台账","工伤保险办理与参保信息管理(作业人员工伤保险按项目参保、参保信息纳入实名制管理、工伤事故申报处置流程)"]}],cG=["【结构完整性红线】有序列表编号必须从「1.」起连续、不得跳号或重号,小节内列表独立起编、不得继承父级编号;编号后必须紧跟实质内容(禁止孤立编号);禁止双重冒号「::」「;:」「。:」等行尾标点残留;禁止句子中途截断(行尾无终止标点)与整段重复行;每个小节必须有实质正文,禁止只写标题的空小节","【表格规范红线】每张表只允许一个表头行(禁止重复表头),表名必须独立成行(禁止混入表头首格);数据行不得留空单元格;禁止用「—/若干/约/待定/暂无/待补充」等占位或模糊表达代替具体数据(合计行的「—」与规格型号列「机具无型号」的「—」除外);合计行数值必须可由明细行相加推导;列数与表头一致;说明性内容必须用段落承载,禁止用表格单元格堆砌正文","【数据口径红线(宁缺毋假)】同一指标(劳动力总数、机械台数、工期阶段划分、班组人数等)全文档只允许一套口径,禁止在不同章节或表格中并列矛盾数值;禁止自行取平均值、保守值、众数等在多套口径中盲选统一;无法从资料锁定唯一数值时不得写具体数值(改用定性表述或显式标注待核),严禁编造数值或将候选值随手择一写入","【禁止资料堆砌伪段落】禁止以「本项目主要施工内容包括:X的Y量为Z……」「经识别,本项目工程量为:……」式清单罗列句充当正文段落;禁止把资料条目用顿号/分号首尾相接拼成伪句子;每段必须是连贯的施工描述(含施工对象、工序逻辑、工艺做法、参数落位),工程量清单类明细如需呈现应使用规范表格,不得用罗列句复制表格内容","【工期时序与分批口径红线】时间表述必须符合施工时序逻辑:前期准备动作(施工方案编制报审、图纸会审、交底、考察、封样、检测、培训演练、采购调查等)的完成时限必须落在施工准备阶段内,禁止出现「开工令下发后第 N 日内」且 N 达到或超过总工期的写法(等同于把前期动作排到竣工日);机械、设备、劳动力分批进场表述(首批/剩余/补充进场)各批次数量必须能合计推导为进场总数且与资源配置表同口径,禁止分批数量与总数互相矛盾"];var cH=c(30355),cI=c(2773),cJ=c(38115),cK=c(31129);async function cL(a){a.planning.generationDiagnostics.metrics.push({name:"phase:plan",startedAt:a.planning.planPhaseStartedAt,endedAt:Date.now(),durationMs:Date.now()-a.planning.planPhaseStartedAt}),a.chapterLoop.draftPhaseStartedAt=Date.now();for(let b=0;b<a.planning.effectiveChapters.length;b+=a.blueprint.chapterConcurrency){let c=a.planning.effectiveChapters.slice(b,b+a.blueprint.chapterConcurrency);for(let d of(await Promise.all(c.map(async(c,d)=>{let g,i=b+d;(0,e.Te)(a.global.input.signal);let j=a.understanding.rolePoolRisk??bk({totalChunks:0,loadedChunks:0,vectorReady:void 0}),l=a.blueprint.blueprintActive?{missing:[],failedChecks:[]}:(0,q.RT)(c.title,a.blueprint.integratedBlueprint?.validation,a.planning.chapterIntentClassifier);if(l.missing.length>0){let b=l.failedChecks.length>0?`蓝图校验项「${l.failedChecks.join("、")}」未通过`:"蓝图校验未通过或构建异常";throw a.global.progressStages.push((0,r.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,aK.GQ)(c.title)} 依赖蓝图权威 [${l.missing.join("、")}],${b},已按节点级把关阻断生成`,details:["数值密集型章所需蓝图权威不可用时禁止无权威成稿","请检查清单解析与蓝图构建诊断后重试"],progress:{current:i+1,total:a.planning.effectiveChapters.length,label:"章节阻断"}},{subtitle:(0,aK.GQ)(c.title),order:i})),a.global.emitProgress(),Error(`${(0,aK.GQ)(c.title)} 依赖蓝图权威 [${l.missing.join("、")}],${b},已按节点级把关阻断生成`)}let s=Date.now(),t=a.global.progressStages.length;try{let b,d;a.global.progressStages.push((0,r.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:a.prepare.promptPlan.writerPrompts[0]?.id,status:"running",message:`${(0,aK.GQ)(c.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${i+1}/${a.planning.effectiveChapters.length}`,`二级小节:${c.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:i+1,total:a.planning.effectiveChapters.length,label:"章节生成"}},{subtitle:(0,aK.GQ)(c.title),order:i})),a.global.emitProgress();let u=a.global.input.resumeChapters?.find(a=>a.id===c.id||a.title===c.title),v=u?.content?.trim(),w=u?.evidence?.length?[...u.evidence]:[],x=a.prepare.projectUnderstanding.chapterPlans.find(a=>a.chapterId===c.id||a.chapterTitle===c.title),y=x?Object.values(x.evidenceQueries).flat().filter(Boolean):[],B=c.queries.length>0?c.queries:[a.prepare.template.name,a.prepare.template.outputTitle,c.title],D=a.understanding.chapterGraphMap.get(c.id);if(a.understanding.projectGraph&&D&&D.graphFiles.size>0){let b=[...a.understanding.availableEvidenceScopePaths],d=a=>b.includes(a)?a:b.find(b=>b.endsWith(a)||b.includes(a));for(let b of[...D.graphFiles].map(a=>d(a)||a).filter(b=>(0,f.Tz)(a.prepare.projectRoot,b,a.understanding.availableEvidenceScopePaths))){let d=a.understanding.getCachedFileDetail(b);if(d?.chunks?.length)for(let e of d.chunks)w.push({chapterId:c.id,filePath:d.file?.relativePath||b,score:5+(D.graphWorks.length+D.graphMethods.length)*.5,content:e.content,roleId:a.understanding.fileRoleByPath.get(b),processingType:a.understanding.fileProcessingByPath.get(b),sectionTitle:e.sectionTitle,source:"graph-evidence"})}}let F=a.planning.chapterIntentClassifier.needsBasicFacts(c.title),G=a.blueprint.billFactLock?(()=>{let b=cj(c.title,c.sections||[]);return a.blueprint.billFactLock.entries.filter(a=>a.name&&b.some(b=>a.name.includes(b)||a.description.includes(b)||a.section.includes(b))).slice(0,6).map(a=>`${a.name} ${a.description} ${a.quantity}${a.unit}`.trim().slice(0,80))})():[],H=(0,k.QP)(c,[...B,...y,...G],[]),I=Date.now();a.global.progressStages[t]=(0,r.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:a.prepare.promptPlan.writerPrompts[0]?.id,status:"running",message:`${(0,aK.GQ)(c.title)} 正在执行质量优先的章节检索${D?.graphFiles.size?`(图谱匹配 ${D.graphFiles.size} 个文件)`:""}`,details:H.map(a=>`检索:${a.slice(0,42)}`),progress:{current:i+1,total:a.planning.effectiveChapters.length,label:"证据检索"}},{subtitle:(0,aK.GQ)(c.title),order:i}),a.global.emitProgress();let J=v?[]:[...a.understanding.availableEvidenceScopePaths].filter(Boolean).sort(),K=v?[]:a.understanding.scopedIntelligence?.evidenceByChapterId?.[c.id]||[];if(K.length>0){w.push(...K);let b=a.planning.generationDiagnostics.evidence;b.intentEvidenceInjected=(b.intentEvidenceInjected??0)+K.length}let L=[],M=(c.requiredFacts||[]).filter(a=>!!a&&!H.some(b=>b.includes(a)||a.includes(b))).map(a=>`${c.title} ${a}`),N=(a.prepare.requirementSemantics?.factClues||[]).filter(a=>!H.some(b=>b.includes(a)||a.includes(b))&&!M.some(b=>b.includes(a)||a.includes(b))).map(a=>`${c.title} ${a}`.trim()).slice(0,8),O=[...H,...M,...N];if(J.length>0&&O.length>0){(0,e.Te)(a.global.input.signal);let b=await (0,e.l$)(O,async b=>a.understanding.searchWithCache(b,J,Math.min(a.understanding.requestedEvidencePerChapter,12),c.title),{kind:"search"});L.push(...b)}for(let b of(a.planning.generationDiagnostics.evidence.searchQueries+=O.length,a.planning.generationDiagnostics.evidence.searchMs+=Date.now()-I,a.global.progressStages[t]=(0,r.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,aK.GQ)(c.title)} KB 检索完成:${O.length} 组查询,准备深度召回与语义排序`,progress:{current:i+1,total:a.planning.effectiveChapters.length,label:"证据检索"}},{subtitle:(0,aK.GQ)(c.title),order:i}),a.global.emitProgress(),L)){let d=b.filter(b=>(0,f.Tz)(a.prepare.projectRoot,b.filePath,a.understanding.evidenceScopePaths));w.push(...d.map(b=>({chapterId:c.id,filePath:b.filePath,score:b.score,content:b.content,roleId:a.understanding.fileRoleByPath.get(b.filePath),processingType:a.understanding.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:b.source})));let e=a.planning.generationDiagnostics.evidence;e.retrievedEvidenceInjected=(e.retrievedEvidenceInjected??0)+d.length}F&&J.length>0&&a.blueprint.basicFactSearchResults.length>0&&w.push(...a.blueprint.basicFactSearchResults.filter(b=>(0,f.Tz)(a.prepare.projectRoot,b.filePath,a.understanding.evidenceScopePaths)).map(b=>({chapterId:c.id,filePath:b.filePath,score:b.score,content:b.content,roleId:a.understanding.fileRoleByPath.get(b.filePath),processingType:a.understanding.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"basic-fact-cache"})));let P=v?[]:await (0,cI.$b)({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:c,plan:x,profile:a.prepare.projectMaterialProfile,scopedFilePaths:J,limitPerQuery:Math.min(a.understanding.requestedEvidencePerChapter,10),signal:a.global.input.signal}).catch(()=>[]);w.push(...P);let Q=new Set((c.pinnedEvidenceFilePaths||[]).filter(Boolean)),R=[];a.planning.chapterIntentClassifier.needsBasicFacts(c.title)&&w.push(...a.understanding.safeProjectBasicEvidence.map(a=>({...a,chapterId:c.id,source:"pinned-evidence"})));let S=a.understanding.writerEvidence.filter(a=>/招标|投标须知|评标办法|专用合同条款|投标人须知/u.test(`${a.filePath||""}${a.sectionTitle||""}`));for(let b of(/概况|工程|项目|总体|部署/u.test(c.title)&&S.length>0&&w.push(...S.map(a=>({...a,chapterId:c.id,source:"pinned-evidence"}))),new Set([...Q]))){if(!(0,f.Tz)(a.prepare.projectRoot,b,a.understanding.evidenceScopePaths))continue;let d=Q.has(b),e=a.understanding.getCachedFileDetail(b);e&&w.push(...e.chunks.map(b=>({chapterId:c.id,filePath:e.file.relativePath,score:1,content:b.content,roleId:a.understanding.fileRoleByPath.get(e.file.relativePath),processingType:a.understanding.fileProcessingByPath.get(e.file.relativePath),sectionTitle:b.sectionTitle,source:d?"pinned-evidence":"bound-file"})))}let T=w.filter(b=>(0,f.Tz)(a.prepare.projectRoot,b.filePath,a.understanding.availableEvidenceScopePaths));if(!v&&a.prepare.webAccessConfig.enabled&&a.prepare.webAccessConfig.allowProjectFacts){let b=await $({config:a.prepare.webAccessConfig,chapterId:c.id,chapterTitle:c.title,sectionTitles:c.sections||[],runtimeRules:a.prepare.runtimePromptRules,localFacts:[...a.understanding.preliminaryFactsModel.project,...a.understanding.preliminaryFactsModel.schedule,...a.understanding.preliminaryFactsModel.quality,...a.understanding.preliminaryFactsModel.safety,...a.understanding.preliminaryFactsModel.resources,...a.understanding.preliminaryFactsModel.preciseFacts],signal:a.global.input.signal});a.understanding.webResearchReport.queries.push(...b.queries),a.understanding.webResearchReport.filteredCount+=b.filtered+b.evidence.length}let U=v?[]:(0,cI.SK)({project:a.understanding.project,chapter:c,plan:x,profile:a.prepare.projectMaterialProfile,scopedFilePaths:J,highRisk:j.highRisk});U.length>0&&T.push(...U),T=(0,m.Su)(T,a.understanding.projectMaterialScope),a.understanding.excludedEvidenceKeys.size>0&&(T=T.filter(b=>!a.understanding.excludedEvidenceKeys.has((0,cx.hM)(b))));let V=(()=>{let a=Number(process.env.DOCUMENT_SEMANTIC_TOP_CANDIDATES);return Number.isFinite(a)&&a>0?Math.floor(a):3e3})(),W=(0,k.Mz)(c,T,V),X=await (0,ae.Mv)([cC(c)],W.map(k.t7)),Y=(0,k.UG)(c,T,{preservePinned:!0,semantic:{similarity:X,queryText:cC(c)}},a.planning.generationDiagnostics);Y=(0,o.pm)(Y,a.understanding.canonicalFacts.scopeConflicts),(0,m.U2)(Y,a.understanding.projectMaterialScope,`chapter:${c.id}:initial`);let Z=c.requiredFacts.filter(a=>!Y.some(b=>(0,bi.Lk)(b,a))),_=0,aa=(0,A._C)(a.understanding.bidComposition),ab=D?[D.graphWorks.length?`图谱识别本章工程内容:${D.graphWorks.join("、")}`:"",D.graphMethods.length?`图谱识别本章施工方法:${D.graphMethods.join("、")}`:"",D.graphBoqItems.length?`图谱识别本章BOQ清单项(${D.graphBoqItems.length}项):${D.graphBoqItems.map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",D.gaps.length?`图谱识别本章资料缺口:${D.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",ac=(0,o.Bf)(a.understanding.canonicalFacts.scopeConflicts),ad=(()=>{if(0===a.blueprint.requirementAssignments.length)return"";let b=(0,af.NT)(c.title),d=a.blueprint.requirementAssignments.filter(a=>a.chapterTitle===b).map(a=>a.entry);return(0,af.HF)(d)})(),ag=a.planning.chapterIntentClassifier.needsDustControl(c.title)||a.planning.chapterIntentClassifier.needsDustControl(`${c.title}${c.purpose||""}`)?"【扬尘治理六个百分百——规范固定条目,必须逐项落实并写入正文,每项一句具体措施,六项不得缺项;若本项目无拆迁工程,对“拆迁工地100%湿法作业”必须显性写明“本项目无拆迁工程,不涉及拆迁工地湿法作业”,不得省略】\n- 施工工地周边100%围挡\n- 物料堆放100%覆盖\n- 出入车辆100%冲洗\n- 施工现场地面100%硬化\n- 拆迁工地100%湿法作业\n- 渣土车辆100%密闭运输":"",ah=(c.sections||[]).filter(a=>!/^(?:施工概况|施工流程|施工方法)$/u.test(a.trim())&&!/^附录/u.test(a.trim())),ai=ah.length>0?`【必须输出以下规划小节为三级标题(### 小节名),逐个小节展开正式正文:每小节正文不少于 100 字,不得只写标题、不得空小节、不得用表格替代正文;小节名与章标题相同或相近也必须输出,不得省略或合并】${ah.join("、")}`:"",aj=a.blueprint.billFactLock?function(a,b,c={}){if(!a||0===a.entries.length)return"";let d=/清单|工程量|主要施工内容|主要施工方法|主要分部分项|资源配置|材料|物资/u.test(b),e=Math.max(1,c.maxEntries??(d?120:60)),f=Math.max(1,c.maxChars??(d?9e3:6e3)),g=cj(b,c.sections||[]),h=a.entries.map(a=>({entry:a,score:function(a,b){let c=`${a.name} ${a.description} ${a.section} ${a.subsection}`;return b.reduce((a,b)=>a+ +!!c.includes(b),0)}(a,g)})).sort((a,b)=>b.score-a.score||a.entry.seq-b.entry.seq).map(a=>a.entry).slice(0,e),i=[],j=0;for(let a of h){let b=a.specQuantityPairs.length>0?` [${a.specQuantityPairs.map(a=>`${a.spec} ${a.quantity}`).join(";")}]`:"",c=`${a.seq}. ${a.name}${a.description?`(${a.description})`:""}:${a.quantity}${a.unit}${a.section?`|${a.section}`:""}${b}`;if(j+c.length+1>f)break;i.push(c),j+=c.length+1}return 0===i.length?"":["【工程量清单事实锁——确定性权威数据(逐项照抄,不得改动或重新分配)】",`清单来源:${a.sourceFile.split("/").pop()}(${a.totalEntries} 条目,本节锁定 ${i.length} 条)`,"清单给出规格-数量拆分的必须逐项照抄原值(如 100W 109套、120W 9套),不得自行拆分或重新分配;清单只给总量的不得自行拆分;同一规格-数量拆分在全文各章必须一致。",...i].join("\n")}(a.blueprint.billFactLock,c.title,{sections:c.sections||[]}):"",ak=function(a,b){let c=b.indexOf(a),d=(a,b)=>`${(0,aK.tb)(a,b.title)}${b.sections?.length?`(小节:${b.sections.join("、")})`:""}`,e=b.map((a,b)=>({item:a,index:b})).filter(b=>b.item!==a);return["【跨章写作职责分工——只就本章主题展开,写时即不产生跨章重复】",`- 本章职责:${d(c>=0?c:0,a)}`,...e.length>0?["- 其他章节职责(不得展开复述其主题内容):",...e.map(a=>` - ${d(a.index,a.item)}`)]:[],"- 写作规范:只就本章主题展开;其他章节主题的内容如需关联,一句话引用(“详见第X章”,X 替换为实际章号),不得展开复述;写足本章预算字数,字数不足时深化本章主题内容,不得借写其他章节主题充数。"].join("\n")}(c,a.planning.effectiveChapters),al=[ab,ad,ai,ak,ag,ac.length?`【数据口径强制约束】${ac.join(";")}`:"",...cG,x?.writingGoal,x?.mustCover?.length?`本章必须覆盖:${x.mustCover.join("、")}`:"",x?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${x.mustUseMaterialKinds.join("、")}`:"",aj].filter(Boolean).join("\n"),am=(0,k.C_)(a.prepare.promptPlan,c);if(a.prepare.promptPlan.writerPrompts.length>0&&!am.primaryWriter)throw Error(`${(0,aK.GQ)(c.title)} 写作主控提示词未进入章节生成阶段`);let an=[am.promptTexts,a.prepare.generationControlPrompt].filter(Boolean).join("\n\n"),ao=am.promptDetails.length?am.promptDetails:["未绑定章节写作提示词"],ap=(0,n.rC)({template:a.prepare.template,chapter:c,spec:a.prepare.documentSpec,profile:a.prepare.domainProfile,promptTexts:an,requirement:a.global.input.requirement,plan:x?{requiredContents:x.mustCover,evidenceNeeds:Object.values(x.evidenceQueries).flat()}:void 0}),aq=(0,n.ji)({needs:ap,factsModel:a.understanding.preliminaryFactsModel,evidence:T,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys}),ar=aq.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),as=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>cE(`${a.sectionTitle||""}${a.content||""}`).includes(cE(b)))),c=a.evidence.length<3?["章节证据数量不足"]:[],d=b.length+c.length,e=d>=5?"high":d>=2?"medium":"low",f="high"===e?"evidence_first":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:e,missingFacts:b,missingEvidence:c,suggestedStrategy:f,reason:0===d?"章节事实与证据满足常规生成条件。":`识别到 ${d} 项生成前缺口,按 ${f} 策略生成。`}}({chapter:c,evidence:Y}),at=new Set(Y.map(a=>a.filePath)).size,au=!!D&&(D?.graphFiles.size||0)>=8&&at>=6&&0===Z.length&&"low"===as.riskLevel,av=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:J.length,evidenceCount:Y.length,evidenceFileCount:at,suggestedStrategy:as.suggestedStrategy,highRisk:j.highRisk,missingFactsCount:Z.length,requiredMissingNeedsCount:ar.length,riskLevel:as.riskLevel});if(!au&&av&&J.length>0){let b=new Set([...Z,...ar]).size;b>0&&(a.global.progressStages[t]=(0,r.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,aK.GQ)(c.title)} 正在深度召回缺失事实证据(${b} 项需求)`,progress:{current:i+1,total:a.planning.effectiveChapters.length,label:"深度召回"}},{subtitle:(0,aK.GQ)(c.title),order:i}),a.global.emitProgress());let d=await bl({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:c,scopedFilePaths:J,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,requiredNeeds:[...new Set([...Z,...ar])],extraClues:a.prepare.requirementSemantics?.factClues||[],highRisk:j.highRisk||ar.length>0,signal:a.global.input.signal}).catch(()=>[]);_=d.length;let e=a.planning.generationDiagnostics.evidence;e.retrievedEvidenceInjected=(e.retrievedEvidenceInjected??0)+d.length,d.length>0&&(T=[...T,...(0,m.Su)(d,a.understanding.projectMaterialScope)],a.understanding.excludedEvidenceKeys.size>0&&(T=T.filter(b=>!a.understanding.excludedEvidenceKeys.has((0,cx.hM)(b)))),Y=(0,k.UG)(c,T,{preservePinned:!0},a.planning.generationDiagnostics),Y=(0,o.pm)(Y,a.understanding.canonicalFacts.scopeConflicts),(0,m.U2)(Y,a.understanding.projectMaterialScope,`chapter:${c.id}:deep`),Z=c.requiredFacts.filter(a=>!Y.some(b=>(0,bi.Lk)(b,a)))),ar=(aq=(0,n.ji)({needs:ap,factsModel:a.understanding.preliminaryFactsModel,evidence:T,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),a.global.progressStages[t]=(0,r.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,aK.GQ)(c.title)} 深度召回完成:命中 ${_} 条${ar.length>0?`,仍缺 ${ar.length} 项(触发轻量补充)`:""}`,progress:{current:i+1,total:a.planning.effectiveChapters.length,label:"证据检索"}},{subtitle:(0,aK.GQ)(c.title),order:i}),a.global.emitProgress()}if(ar.length>0&&J.length>0){let b=(0,m.Su)(await bl({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:c,scopedFilePaths:J,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,requiredNeeds:ar,extraClues:a.prepare.requirementSemantics?.factClues||[],highRisk:!0,signal:a.global.input.signal}).catch(()=>[]),a.understanding.projectMaterialScope),d=a.planning.generationDiagnostics.evidence;d.retrievedEvidenceInjected=(d.retrievedEvidenceInjected??0)+b.length,b.length>0&&(T=[...T,...b],a.understanding.excludedEvidenceKeys.size>0&&(T=T.filter(b=>!a.understanding.excludedEvidenceKeys.has((0,cx.hM)(b)))),Y=(0,k.UG)(c,T,{preservePinned:!0},a.planning.generationDiagnostics),Y=(0,o.pm)(Y,a.understanding.canonicalFacts.scopeConflicts),(0,m.U2)(Y,a.understanding.projectMaterialScope,`chapter:${c.id}:supplemental`),Z=c.requiredFacts.filter(a=>!Y.some(b=>(0,bi.Lk)(b,a))),ar=(aq=(0,n.ji)({needs:ap,factsModel:a.understanding.preliminaryFactsModel,evidence:T,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}(0,m.U2)(Y,a.understanding.projectMaterialScope,`chapter:${c.id}:writer-session.global.input`);{let b=a.planning.generationDiagnostics.evidence,c=new Set(["keyword","vector","hybrid","deep-retrieval","required-fact-evidence"]);b.intentEvidenceUsed=(b.intentEvidenceUsed??0)+Y.filter(a=>"project-intelligence"===a.source).length,b.retrievedEvidenceUsed=(b.retrievedEvidenceUsed??0)+Y.filter(a=>!!a.source&&c.has(a.source)).length}for(let b of(0===Y.length&&a.understanding.missingItems.push(`${c.title}:缺少可支撑正文的项目资料证据`),Z))a.understanding.missingItems.push(`${c.title}:事实需求未满足 ${b}`);let aw=(0,r.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:a.understanding.allEvidence.length>0?"success":"failed",message:`已检索/绑定 ${a.understanding.allEvidence.length} 条证据`});a.understanding.knowledgeBaseStageIndex<0?a.understanding.knowledgeBaseStageIndex=(0,r.fx)(a.global.progressStages,aw):a.global.progressStages[a.understanding.knowledgeBaseStageIndex]={...aw,order:a.global.progressStages[a.understanding.knowledgeBaseStageIndex]?.order??aw.order},a.global.emitProgress(),(0,e.Te)(a.global.input.signal);let ax=new Map,ay=b=>{let d=(0,e.c6)({kind:"section",query:`${c.title} ${b}`.trim(),scopedFilePaths:J}),f=ax.get(d);if(f)return Promise.resolve(f);let g=(0,bn.Ym)(b,c,Y),h=g.filter(a=>bv.AM.test(a.content)).length;return g.length>=4&&h>=1?(ax.set(d,g),Promise.resolve(g)):(0,k.hW)({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:c,sectionTitle:b,scopedFilePaths:J,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,signal:a.global.input.signal}).then(a=>(ax.set(d,a),a))},az=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,bi.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,bi.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:c,evidence:Y,risk:j});a.understanding.retrievalCoverageReports.push(az);let aA=new Set(Y.map(a=>a.filePath)),aB=Y.reduce((a,b)=>a+b.content.length,0),aC=[...j.highRisk?[`召回覆盖风险(${j.riskReason||"切片未完全预加载"}):已加载 ${j.loadedChunks}/${j.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${K.length} 条`,`深召回证据:${_} 条`,`事实覆盖:${az.requiredFactCovered}/${az.requiredFactTotal}`,`小节覆盖:${az.sectionCovered}/${az.sectionTotal}`];a.global.progressStages[t]=(0,r.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:a.prepare.promptPlan.writerPrompts[0]?.id,status:"running",message:`${(0,aK.GQ)(c.title)} 已选取 ${Y.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aA.size} 份`,`上下文字符:${aB}`,`检索查询:${H.length} 组`,...aC],progress:{current:i+1,total:a.planning.effectiveChapters.length,label:"正文生成"}},{subtitle:(0,aK.GQ)(c.title),order:i}),a.global.emitProgress(),a.planning.generationDiagnostics.evidence.contextChars+=aB;let aD=(0,n.n9)(aq),aE=a.planning.chapterIntentClassifier.needsBasicFacts(c.title)?a.understanding.earlyFactPool.projectBasicFacts:[],aF=(0,bn.qX)((0,bn.hZ)({chapter:c,plan:void 0,spec:a.prepare.documentSpec,roleFacts:R,evidence:Y,missingFacts:Z,indexedFacts:[...aE,...aD],resolvedFactNeeds:aq,factNeedsPrompt:(0,n.GK)(aq),specAuthorityMap:a.understanding.preliminaryFactsModel.specAuthorityMap})),aG=(0,cH.up)({plan:a.planning.plannedDocument.plan,chapter:c,context:a.understanding.agentWorkflow,evidence:Y});if(a.understanding.agentWorkflow.chapterTasks=[...(a.understanding.agentWorkflow.chapterTasks||[]).filter(a=>a.chapterId!==c.id),aG.task],a.understanding.agentWorkflow.nodes.push(aG.node),(0,bm.cN)(a.understanding.agentWorkflow),(0,r.fx)(a.global.progressStages,(0,r.X5)({type:"validation",roleId:`agent-chapter-task-${c.id}`,status:aG.task.ready||v?"success":"failed",message:aG.task.ready?aG.node.outputSummary||`${(0,aK.GQ)(c.title)} 章节任务规划完成`:v?`${(0,aK.GQ)(c.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:aG.node.outputSummary||`${(0,aK.GQ)(c.title)} 章节任务规划完成`,details:aG.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:a.global.progressStages.length})),a.global.emitProgress(a.global.chapterDrafts),!aG.task.ready&&!v)throw Error(`${(0,aK.GQ)(c.title)} 章节任务未就绪:${aG.task.issues.map(a=>a.message).join(";")}`);let aH={total:aq.length,satisfied:aq.filter(a=>"satisfied"===a.status).length,missing:aq.filter(a=>"missing"===a.status).length,lowConfidence:aq.filter(a=>"low_confidence"===a.status).length};for(let b of ar)a.understanding.missingItems.push(`${c.title}:事实需求未确认 ${b}`);let aI=a.planning.documentBudget.chapterTargets.get(c.id)||1200,aJ=c.sections?.filter(Boolean).length||0,aL=(0,k.gq)({budgetTarget:aI,sectionCount:aJ,title:c.title,longformStrict:a.planning.documentBudget.longformStrict}),aM=Math.ceil(aL.maxWords*(a.planning.documentBudget.maxChars?1.05:1)),aN=(0,q.jM)(c.title,a.planning.chapterIntentClassifier).length>0,aO=(a.blueprint.blueprintActive||aN&&0===l.missing.length)&&a.blueprint.integratedBlueprint?(0,q.md)(a.blueprint.integratedBlueprint,c.title):void 0,aP=aO&&a.blueprint.integratedBlueprint?(0,q.uw)(aO,a.blueprint.integratedBlueprint.data):"",aQ=aL.roundTarget,aR=aJ>0?a.planning.documentBudget.longformStrict?aQ:Math.min(aQ,Math.max(1800,aL.structureTarget)):aQ,aS=0,aT=b=>{let d=Date.now();if(d-aS<3e3)return;aS=d;let e=b.filter(Boolean).join("\n\n");e.trim()&&a.global.emitProgress([...a.global.chapterDrafts,{id:c.id,title:c.title,content:`## ${c.title}
173
+ ${function(a,b=6e3){return[a.match(/#{2,3}\s*[^\n]*(?:重难点|重点难点|工程难点|难点分析)[^\n]*\n[\s\S]{0,3500}/u)?.[0]||"",a.replace(/#{1,6}\s+[^\n]*\n/gu,"").replace(/\s+/gu," ").slice(0,b)].filter(Boolean).join("\n\n").slice(0,b+4e3)}(a.markdown)}`,'返回 JSON:{"issues":["问题1","问题2"]}'];try{let b=await (0,bo.bb)((0,z.y4)('你是招标技术标评审专家。对施工组织设计做语义级复核,只报告确定性规则覆盖不到的语义问题。\n复核维度(按《施工组织设计全维度校验提示词》判定标尺):\n1. 重难点三级判定:识别精准性(是否点明本项目真实难点而非泛泛而谈)→ 归因合理性(是否说明难点成因/风险来源)→ 对策匹配度(对策是否针对该难点的成因,而非通用措施堆砌);\n2. 术语等效性:同一对象是否前后术语一致(如"砼"与"混凝土"混用需统一),是否出现词面不同但概念等效的双重标准表述;\n3. 四新技术升级价值:若正文声称采用四新技术,其价值表述是否停留在"提升效率"式套话,缺少可对标官方推广目录或替代落后工艺的实质说明。\n每条问题必须包含:问题所在内容简述+判定依据(对应上面哪条维度)+一句话改进建议。\n只报告真实存在的问题,正文无问题时返回空数组;不得编造问题。只返回 JSON。'),d.join("\n\n"),{maxTokens:1200,temperature:0,signal:a.signal,diagnostics:a.diagnostics,taskKind:"structuredGeneration"});return{issues:Array.isArray(b?.issues)?b.issues.filter(a=>"string"==typeof a&&a.length>0).slice(0,6):[],reviewed:!0}}catch{return{issues:[],reviewed:!1}}}async function ct(a){var b;a.reviewChecklist=[{key:"export-gate",label:"导出门禁",passed:(b={exportGate:a.qualityBundle.finalExportGate,qualityReport:a.qualityBundle.qualityReport,repairStrategies:a.qualityBundle.repairStrategies}).exportGate.passed,message:b.exportGate.passed?"导出门禁通过":`仍有 ${b.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:b.qualityReport.passed,message:`${b.qualityReport.deliveryProbability}% / ${b.qualityReport.target}%`},{key:"completeness",label:"资料完整性",passed:b.qualityReport.scores.completeness>=85,message:`${b.qualityReport.scores.completeness}/100`},{key:"specificity",label:"方案针对性",passed:b.qualityReport.scores.specificity>=85,message:`${b.qualityReport.scores.specificity}/100`},{key:"compliance",label:"合规性",passed:b.qualityReport.scores.compliance>=80,message:`${b.qualityReport.scores.compliance}/100`},{key:"repair-strategies",label:"修复策略",passed:0===b.repairStrategies.filter(a=>"high"===a.priority).length,message:b.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}];let c=(0,C.Ff)(a.validationIssues);a.generationDiagnostics.quality.blockingCount+=c.blocking,a.generationDiagnostics.quality.importantCount+=c.important,a.generationDiagnostics.quality.minorCount+=c.minor,a.telemetry=function(a){let b=[...a.diagnostics.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>({name:a.name,durationMs:a.durationMs})),c={};for(let[b,d]of Object.entries(a.diagnostics.llm.patchGuardStats||{}))c[b]={hits:d.hits+d.rejects,repaired:d.hits,failed:d.rejects+(d.rollbacks??0)};return{llmCalls:a.diagnostics.llm.calls,llmFailures:a.diagnostics.llm.failures,maxParallelLlm:a.diagnostics.llm.maxActive,searchQueries:a.diagnostics.evidence.searchQueries,evidenceContextChars:a.diagnostics.evidence.contextChars,qualityIssues:{...a.diagnostics.quality},slowMetrics:b,elapsedMs:a.startedAt&&a.endedAt?a.endedAt-a.startedAt:void 0,repairHeat:Object.keys(c).length>0?c:void 0}}({diagnostics:a.generationDiagnostics});let d=a.qualityBundle.finalExportGate.blockingIssues.length;a.telemetry.qualityIssues.blockingCount=d,a.professionalScore=await cr(a.finalChapterDrafts,a.finalMarkdown,{templating:a.qualityBundle.qualityReport.templating}),a.templatingReview=a.qualityBundle.qualityReport.templating?await a.withProgressHeartbeat(()=>cs({templating:a.qualityBundle.qualityReport.templating,markdown:a.finalMarkdown,diagnostics:a.generationDiagnostics,signal:a.signal})):{issues:[],reviewed:!1},a.finalStages=[...a.executionStages,...a.finalGateRepairStages],a.suspensionChecklist=a.qualityBundle.finalExportGate.passed?void 0:(0,i.aF)(a.qualityBundle.finalExportGate.blockingIssues,a.finalChapterDrafts),a.finalStages.push((0,r.X5)({type:"validation",roleId:"agent-final-gate",status:a.qualityBundle.finalExportGate.passed?"success":"failed",message:a.qualityBundle.finalExportGate.passed?"Agent 最终门禁通过":`Agent 最终门禁阻断 ${d} 个问题(已显式挂起,人工处理清单见明细)`,details:a.suspensionChecklist?(0,i.$w)(a.suspensionChecklist):[]},{subtitle:"Agent 最终门禁"}));let e=a.qualityBundle.qualityReport.deliveryProbability<70;a.finalStages.push((0,r.X5)({type:"validation",roleId:"document-delivery-score",status:a.qualityBundle.qualityReport.passed?"success":a.qualityBundle.finalExportGate.passed?"skipped":"failed",message:a.qualityBundle.finalExportGate.passed&&!a.qualityBundle.qualityReport.passed?`${a.qualityBundle.qualityReport.summary}${e?";置信度低于 70%,建议完成续修后再交付归档":"(导出门禁已通过,作为后续优化建议归档)"}`:a.qualityBundle.qualityReport.summary,details:e&&a.qualityBundle.finalExportGate.passed?[...a.qualityBundle.qualityReport.actions,"续修建议:交付置信度低于 70% 门槛,建议按交付复核清单补齐短板维度后重新生成或续修。"]:a.qualityBundle.qualityReport.actions},{subtitle:"交付评分"})),a.finalStages.push((0,r.X5)({type:"validation",roleId:"document-professional-score",status:"专业"===a.professionalScore.grade||"良好"===a.professionalScore.grade?"success":"skipped",message:a.professionalScore.summary,details:[...a.professionalScore.dimensions.map(a=>`${a.label}:${a.score} 分(${a.detail})`),...a.professionalScore.topIssues.map(a=>`待修复:${a}`)]},{subtitle:"专业度评分"})),a.qualityBundle.qualityReport.templating&&"light"!==a.qualityBundle.qualityReport.templating.level&&a.finalStages.push((0,r.X5)({type:"validation",roleId:"document-templating-report",status:"skipped",message:`模板化检测:${"heavy"===a.qualityBundle.qualityReport.templating.level?"重度":"中度"}模板化(套话句占比 ${(100*a.qualityBundle.qualityReport.templating.fillerRatio).toFixed(1)}%,重难点归因+量化双达标占比 ${(100*a.qualityBundle.qualityReport.templating.difficultyCountermeasureRatio).toFixed(0)}%,模糊应答词 ${a.qualityBundle.qualityReport.templating.vagueHitCount} 处)`,details:a.templatingReview.issues},{subtitle:"模板化检测"})),a.writingTaskBrief&&a.finalStages.push((0,r.X5)({type:"reference",roleId:"document-writing-task-brief",status:"success",message:`写作任务书:${a.writingTaskBrief.documentType},${a.writingTaskBrief.chapters.length} 章任务卡,全局写作焦点 ${a.writingTaskBrief.globalWritingFocus.length} 条`,details:[...a.writingTaskBrief.globalWritingFocus,...a.writingTaskBrief.chapters.slice(0,10).map(a=>`${a.chapterTitle}:覆盖 ${a.mustCover.length} 项`)],subtitle:"写作任务书"})),a.finalStages.push((0,r.X5)({type:"reference",roleId:"knowledge-coverage",status:a.qualityBundle.knowledgeCoverage.score>=85?"success":"failed",message:`资料确认覆盖率:${a.qualityBundle.knowledgeCoverage.score}%(证据 ${a.qualityBundle.knowledgeCoverage.evidenceCount} 条,文件 ${a.qualityBundle.knowledgeCoverage.confirmedFiles} 份)`,details:[a.qualityBundle.knowledgeCoverage.remediation]},{subtitle:"资料覆盖"})),a.finalStages.push((0,r.X5)({type:"validation",roleId:"document-review-checklist",status:a.reviewChecklist.every(a=>a.passed)?"success":a.qualityBundle.finalExportGate.passed?"skipped":"failed",message:`交付复核清单:通过 ${a.reviewChecklist.filter(a=>a.passed).length}/${a.reviewChecklist.length}${a.qualityBundle.finalExportGate.passed&&!a.reviewChecklist.every(a=>a.passed)?"(导出门禁已通过,其余项作为优化建议归档)":""}`,details:a.reviewChecklist.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let f=(0,k._8)(a.generationDiagnostics.metrics),g=(0,k.bz)(a.generationDiagnostics.llm.callBreakdown),h=a.generationDiagnostics.factSanitize?`,事实净化 截断${a.generationDiagnostics.factSanitize.truncated}/丢弃${a.generationDiagnostics.factSanitize.dropped}/编号补全${a.generationDiagnostics.factSanitize.repaired}`:"";a.finalStages.push((0,r.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${a.generationDiagnostics.llm.calls} 次,失败 ${a.generationDiagnostics.llm.failures} 次,瞬态重试 ${a.generationDiagnostics.llm.retries} 次,schema 校验失败 ${a.generationDiagnostics.llm.schemaFailures} 次,峰值并行 ${a.generationDiagnostics.llm.maxActive},检索 ${a.generationDiagnostics.evidence.searchQueries} 次/${Math.round(a.generationDiagnostics.evidence.searchMs/1e3)} 秒,证据上下文 ${a.generationDiagnostics.evidence.contextChars} 字,噪声过滤 ${a.generationDiagnostics.evidence.filteredNoise} 条,预算裁剪 ${a.generationDiagnostics.evidence.budgetDropped} 条,质量问题 阻断${a.generationDiagnostics.quality.blockingCount}/重要${a.generationDiagnostics.quality.importantCount}/轻微${a.generationDiagnostics.quality.minorCount}${h}${f?`,Top耗时:${f}`:""}${g?`,调用输入Top5:${g}`:""}`,details:[...(0,k.Il)(a.generationDiagnostics.metrics),...(0,k.NJ)(a.generationDiagnostics.llm.callBreakdown)]},{subtitle:"后台诊断"}))}let cu={prefixCacheHitRateFloor:.4,budgetDropRatioCeiling:.3,llmFailureRateCeiling:.1};async function cv(a){let b=function(a){let b=[],c=a.llm.promptCacheHitTokens??0,d=c+(a.llm.promptCacheMissTokens??0),e=d>0?c/d:null;null!==e&&e<cu.prefixCacheHitRateFloor&&b.push(`固定前缀缓存命中率 ${(100*e).toFixed(1)}% 低于 40%:固定前缀未收敛,检查 L0/L2 恒定段结构`);let f=a.llm.reasoningTokens??0;f>0&&b.push(`推理 token 累计 ${f}:disableThinking 未生效,检查模型 provider 配置`);let g=a.evidence.raw>0?a.evidence.budgetDropped/a.evidence.raw:null;null!==g&&g>cu.budgetDropRatioCeiling&&b.push(`证据预算裁剪 ${(100*g).toFixed(1)}%(${a.evidence.budgetDropped}/${a.evidence.raw}):裁剪过重,疑似预算配置失配`);let h=a.llm.calls>0?a.llm.failures/a.llm.calls:null;return null!==h&&h>cu.llmFailureRateCeiling&&b.push(`LLM 失败率 ${(100*h).toFixed(1)}%(${a.llm.failures}/${a.llm.calls}):失败率偏高,检查限流与重试策略`),{alerts:b,metrics:{prefixCacheHitRate:e,reasoningTokens:f,budgetDropRatio:g,llmFailureRate:h}}}(a.generationDiagnostics),c=process.memoryUsage(),d=Math.round(c.rss/1048576),e=Math.round(c.heapUsed/1048576),f=function(){let a=Number(process.env.DOCUMENT_MEMORY_ALERT_MB??3072);return Number.isFinite(a)&&a>0?a:3072}();console.log(`[gen] memory(finalize) rss=${d}MB heap=${e}MB threshold=${f}MB`);let g=d>=f?[...b.alerts,`进程内存 rss=${d}MB 超过告警阈值 ${f}MB:大文档生成建议 NODE_OPTIONS=--max-old-space-size=4096,并控制并发生成任务数(DOCUMENT_MAX_CONCURRENT_GENERATIONS)`]:b.alerts;a.telemetry.healthAlerts=g,0!==g.length&&a.finalStages.push((0,r.X5)({type:"validation",roleId:"document-health-diagnosis",status:"skipped",message:`自动健康诊断:${g.length} 项告警(不阻断,供配置优化参考)`,details:g},{subtitle:"健康诊断"}))}async function cw(a){(0,l.wF)();let{chapterDraftsByOrder:b,chapterGenerationStagesByOrder:c,chapterGenerationStages:d,effectiveChapters:e,input:f,hasExplicitOutline:m,failedChapterMessages:n}=a,{requirement:o}=f,q=function(a){let{signal:b,requirement:c}=a.input;return{input:a,template:a.template,effectiveChapters:a.effectiveChapters,requirement:c,signal:b,projectRoot:a.projectRoot,projectId:a.projectId,projectMaterialSummary:a.projectMaterialSummary,documentSpec:a.documentSpec,documentBudget:a.documentBudget,promptBindings:a.promptBindings,promptDocumentRules:a.promptDocumentRules,domainProfile:a.domainProfile,scopeConflicts:a.scopeConflicts,evaluationCriteriaItems:a.evaluationCriteriaItems,tenderRequirements:a.tenderRequirements,requirementAssignments:a.requirementAssignments,requirementsSimilarity:a.requirementsSimilarity,factTokenScopeClassifier:a.factTokenScopeClassifier,professionalDepthClassifier:a.professionalDepthClassifier,blueprintData:a.blueprintData,bidComposition:a.bidComposition,billFactLock:a.billFactLock,requirementSemantics:a.requirementSemantics,generationDiagnostics:a.generationDiagnostics,repairPromptTexts:a.repairPromptTexts,progressStages:a.progressStages,chapterGenerationStages:a.chapterGenerationStages,emitProgress:a.emitProgress,withProgressHeartbeat:a.withProgressHeartbeat,missingItems:a.missingItems,failedChapterMessages:a.failedChapterMessages,indexHealth:a.indexHealth,webResearchReport:a.webResearchReport,hasExplicitOutline:a.hasExplicitOutline,retrievalCoverageReports:a.retrievalCoverageReports,projectMaterialScope:a.projectMaterialScope,writingTaskBrief:a.writingTaskBrief,globalConsistencyIssues:a.globalConsistencyIssues,agentWorkflow:a.agentWorkflow,factExtractionPromptTexts:a.factExtractionPromptTexts,readiness:a.readiness,promptPlan:a.promptPlan,allEvidence:a.allEvidence,facts:{},structuredFacts:[],governedStructuredFacts:[],factsModel:void 0,chapterDrafts:[],finalChapterDrafts:[],finalMarkdown:"",validationIssues:[],baseValidationIssues:[],executionStages:[],finalGateRepairStages:[],sources:[],qualityBundle:void 0,scheduleAuthority:void 0,assemblyRateAuthority:void 0,scaleSummary:void 0,supportAuthority:void 0,laborPeakAuthority:void 0,greeningMaintenanceAuthority:void 0,surfaceFixContext:{laborPeakAuthority:void 0,greeningMaintenanceAuthority:void 0,resourceBreakdownAuthority:void 0,supportFormAuthority:void 0},decisionLockEntries:[],finalStages:[],reviewChecklist:[],telemetry:void 0,professionalScore:void 0,templatingReview:{issues:[],reviewed:!1},assets:[],validation:void 0,rebuildFinalMarkdown:()=>"",recomputeFinalValidationBundle:async()=>void 0}}(a),r=b.filter(a=>!!a);if(q.chapterDrafts=r,d.push(...c.filter(a=>!!a)),0===r.length)throw Error(`章节生成未完成:${n.join(";")||"没有生成任何有效章节"}`);if(m&&r.length<e.length)throw Error(`OUTLINE 指定 ${e.length} 章,实际只生成 ${r.length} 章:${n.join(";")||"部分章节未生成"}`);await s(q),await bP(q);let t=(0,A._C)(q.bidComposition),u=q.bidComposition?.formatRules.cover==="forbidden",v=(0,z.rs)((0,z.V3)({templateId:q.template.id,templateName:q.template.name,title:q.template.outputTitle,requirement:q.requirement||"",projectRoot:q.projectRoot,projectId:q.projectId,exportSettings:q.template.exportSettings,generationSettings:q.template.generationSettings,facts:q.facts,structuredFacts:q.structuredFacts,factsModel:q.factsModel,chapters:q.chapterDrafts,sources:q.sources,missingItems:[...new Set(q.missingItems)],validation:q.validation,validationIssues:q.validationIssues,executionStages:q.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:q.assets,partialChapters:q.chapterDrafts.map(a=>({id:a.id,title:a.title,chars:(0,h.V7)(a.content),status:(0,k.DR)(a,q.documentBudget.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:q.chapterDrafts,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:q.promptDocumentRules,bodyTableForbidden:t,coverForbidden:u}),q.chapterDrafts,{forbidDrawingImages:!1,promptRules:q.promptDocumentRules,bodyTableForbidden:t,coverForbidden:u});q.finalChapterDrafts=v.chapters.map(a=>{let b=q.effectiveChapters.find(b=>b.id===a.id)||a;return{...a,sections:a.sections||[],content:(0,k.w_)(a.content,b)}}),q.finalMarkdown=(0,z.rs)((0,z.V3)({templateId:q.template.id,templateName:q.template.name,title:q.template.outputTitle,requirement:q.requirement||"",projectRoot:q.projectRoot,projectId:q.projectId,exportSettings:q.template.exportSettings,generationSettings:q.template.generationSettings,facts:q.facts,structuredFacts:q.structuredFacts,factsModel:q.factsModel,chapters:q.finalChapterDrafts,sources:q.sources,missingItems:[...new Set(q.missingItems)],validation:q.validation,validationIssues:q.validationIssues,executionStages:q.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:q.assets,partialChapters:[],checkpointChapters:q.finalChapterDrafts,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:q.promptDocumentRules,bodyTableForbidden:t,coverForbidden:u}),q.finalChapterDrafts,{forbidDrawingImages:!1,promptRules:q.promptDocumentRules,bodyTableForbidden:t,coverForbidden:u}).markdown,q.finalMarkdown=(0,p._D)((0,k.Ht)((0,z.bR)((0,z.kT)((0,z.K7)(bL((0,k.jO)(q.finalMarkdown,q.structuredFacts,{bodyTableForbidden:t}),q.projectMaterialSummary)))))).markdown,q.finalMarkdown=(0,B.u7)(q.finalMarkdown,{plan:q.bidComposition?.appendixPlan||[],blueprintData:q.blueprintData}),await bR(q),await bT(q),await cb(q),await cc(q),await cf(q),await cn(q),await co(q),await cg(q),await ct(q),await cv(q);let w=q.finalChapterDrafts.map(a=>({...a,evidence:(0,g.QR)(a.evidence||[],{preservePinned:!0})}));return q.finalChapterDrafts=w,{templateId:q.template.id,templateName:q.template.name,title:q.template.outputTitle,requirement:o||"",projectRoot:q.projectRoot,projectId:q.projectId,exportSettings:q.template.exportSettings,generationSettings:q.template.generationSettings,facts:q.facts,structuredFacts:q.structuredFacts,factsModel:q.factsModel,chapters:w,sources:q.sources,missingItems:[...new Set(q.missingItems)],validation:q.validation,validationIssues:q.validationIssues,exportGate:q.qualityBundle.finalExportGate,executionStages:q.finalStages,assets:q.assets,partialChapters:q.finalChapterDrafts.map(a=>({id:a.id,title:a.title,chars:(0,h.V7)(a.content),status:(0,k.DR)(a,q.documentBudget.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:w,promptRules:q.promptDocumentRules,agentWorkflow:q.agentWorkflow,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:q.generationDiagnostics,profile:function(a){let b=`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`,c=[{pattern:/专项施工|危大|专项方案/u,type:"专项施工方案",dimensions:["专项对象边界","工艺参数","风险控制","验收要求","应急措施"]},{pattern:/投标|技术标|响应|招标/u,type:"投标技术方案",dimensions:["招标响应","技术优势","工期质量安全承诺","资源保障","履约可实施性"]},{pattern:/监理|旁站|巡视|平行检验/u,type:"监理规划/细则",dimensions:["监理目标","旁站巡视","平行检验","验收程序","资料签认"]},{pattern:/可研|可行性|项目建议书|投资估算/u,type:"可研/项目建议类文档",dimensions:["建设必要性","方案比选","投资估算","风险分析","实施效益"]},{pattern:/运维|维护|保养|巡检/u,type:"运维维护方案",dimensions:["巡检频次","维护流程","故障响应","备品备件","记录闭环"]}].find(a=>a.pattern.test(b));return{type:c?.type||"施工组织设计/施工技术方案",dimensions:c?.dimensions||["工程概况","施工部署","进度质量安全","资源配置","施工工艺和验收闭环"],requiredEvidencePolicy:"本地知识库为完整事实源;系统暂未确认的事实必须通过扩大检索、事实补抽或落位修复解决,不得归因为用户资料缺失。"}}({template:q.template,chapters:e,requirement:o}),knowledgeCoverage:q.qualityBundle.knowledgeCoverage,factTraces:q.qualityBundle.factTraces,chapterCoverage:q.qualityBundle.chapterCoverage,retrievalCoverage:q.retrievalCoverageReports,qualityReport:q.qualityBundle.qualityReport,repairStrategies:q.qualityBundle.repairStrategies,reviewChecklist:q.reviewChecklist,professionalScore:q.professionalScore,templatingReviewIssues:q.templatingReview.issues,authorityAudit:q.authorityAuditReport,suspensionChecklist:q.suspensionChecklist??(q.qualityBundle.finalExportGate.passed?void 0:(0,i.aF)(q.qualityBundle.finalExportGate.blockingIssues,q.finalChapterDrafts)),writingTaskBrief:q.writingTaskBrief,workflowVersion:j.x,telemetry:q.telemetry},generatedAt:Date.now(),markdown:q.finalMarkdown,bidComposition:q.bidComposition}}var cx=c(71678),cy=c(29055);let cz=[{id:"overview",title:"工程概况与总体理解",requiredSectionPatterns:[/编制依据|编制说明/u,/工程概况|项目概况|基本概况/u,/现场踏勘|施工条件|现场条件/u],chapterPatterns:[/概况|总体|理解|说明|编制|项目/u],remedy:"应设置工程概况章节,包含编制依据、工程基本概况、现场条件与总体理解。",level:"required"},{id:"major-content",title:"项目主要施工内容",requiredSectionPatterns:[/主要施工内容|主要施工项目|施工内容/u],chapterPatterns:[/概况|总体|理解|主要施工|工程/u],remedy:'必须包含"项目主要施工内容"小节,按工作包展开施工概况、施工流程、施工方法。',level:"required"},{id:"key-difficulty",title:"重难点分析与对策",requiredSectionPatterns:[/重点.*难点|难点.*对策|重难点/u],chapterPatterns:[/概况|总体|理解|重点|难点|施工/u],remedy:"应设置项目特点、重点、难点分析小节,并逐项给出应对措施与责任闭环。",level:"required"},{id:"deployment",title:"施工部署与施工组织",requiredSectionPatterns:[/施工部署|总体部署|流水|施工顺序|施工区段/u],chapterPatterns:[/部署|组织|总体|方案/u],remedy:"应设置施工部署小节,明确流水段划分、施工顺序与资源调配。",level:"required"},{id:"schedule",title:"进度计划与工期保障",requiredSectionPatterns:[/进度计划|工期|节点/u],chapterPatterns:[/进度|工期|计划|保障/u],remedy:"应设置进度计划与工期保障小节,含总进度计划、关键节点与纠偏措施。",level:"required"},{id:"quality",title:"质量保证体系与措施",requiredSectionPatterns:[/质量/u],chapterPatterns:[/质量|验收|保障|措施/u],remedy:"应设置质量保证体系与措施小节,含质量目标、三检、隐蔽验收、通病防治。",level:"required"},{id:"safety",title:"安全文明施工与危大工程管控",requiredSectionPatterns:[/安全/u,/危大工程|危大/u],chapterPatterns:[/安全|文明|风险|危大|保障|措施/u],remedy:"应设置安全管理与危大工程管控小节,含危险源辨识、危大清单、专项方案。",level:"required"},{id:"resources",title:"劳动力材料机械设备配置",requiredSectionPatterns:[/劳动力|机械设备|材料.*计划|资源配置|人材机/u],chapterPatterns:[/资源|劳动力|机械|材料|设备|计划/u],remedy:"应设置资源配置小节,含分阶段劳动力、机械设备投入与材料进场计划。",level:"required"},{id:"environment",title:"绿色文明施工与环保措施",requiredSectionPatterns:[/文明施工|扬尘|噪声|绿色|环保|四节/u],chapterPatterns:[/文明|绿色|环保|扬尘|噪声|保障|措施/u],remedy:"应设置文明施工与绿色施工小节,含扬尘噪声管控与四节一环保措施。",level:"required"},{id:"emergency",title:"应急管理体系",requiredSectionPatterns:[/应急/u],chapterPatterns:[/应急|安全|保障|措施/u],remedy:"应设置应急管理小节,含应急组织、物资储备与专项预案。",level:"recommended"}],cA={building:[{id:"key-difficulty",title:"危大工程专项管控(房建)",requiredSectionPatterns:[/深基坑|高支模|起重吊装|脚手架/u],chapterPatterns:[/危大|安全|专项/u],remedy:"房建项目应对深基坑、高支模、起重吊装、脚手架等危大工程逐项给出专项方案与安全管理措施。",level:"recommended"}],municipal:[{id:"key-difficulty",title:"交通导改与管线保护(市政)",requiredSectionPatterns:[/交通导改|交通导行|占道施工/u,/管线保护|管线探测/u],chapterPatterns:[/交通|管线|安全|专项|保障/u],remedy:"市政项目应设置交通导改与既有管线保护专项内容。",level:"recommended"}],renovation:[{id:"key-difficulty",title:"居民协调与既有保护(改造)",requiredSectionPatterns:[/居民|扰民|既有.*保护|不中断/u],chapterPatterns:[/居民|协调|保护|保障|专项/u],remedy:"改造项目应设置居民沟通协调与既有设施保护专项内容。",level:"recommended"}],decoration:[{id:"key-difficulty",title:"成品保护与交叉施工(装饰)",requiredSectionPatterns:[/成品保护/u,/交叉施工|工序穿插/u],chapterPatterns:[/成品保护|交叉|协调|保障|专项/u],remedy:"装饰项目应设置成品保护与交叉施工工序优化专项内容。",level:"recommended"}]};function cB(a){return(0,aK.GQ)(a).replace(/\s+/gu,"").toLowerCase()}function cC(a){return cB(`${a.title} ${(a.sections||[]).join(" ")}`).slice(0,800)}function cD(a){var b;let c,d=(b=a.chapters,[...cz].map(a=>{let c=[],d=new Set;for(let e of b){let b=cB(`${e.title} ${(e.sections||[]).join(" ")}`);for(let f of a.requiredSectionPatterns)f.test(b)&&!d.has(f)&&(d.add(f),c.push(e.title))}let e=[...new Set(c)],f=a.requiredSectionPatterns.filter(a=>!d.has(a)).map(a=>(function(a){let b=a.source.replace(/[\\/^$.*+?()[\]{}]/gu,"").replace(/u$/u,"");return b.split("|").map(a=>a.trim()).find(Boolean)||b})(a)),g=d.size===a.requiredSectionPatterns.length?e.length>1?"fragmented":"satisfied":"missing";return{groupId:a.id,groupTitle:a.title,level:a.level,status:g,carrierChapters:e,missingSections:f,remedy:a.remedy}})),e=[],f=d.filter(a=>"required"===a.level&&"missing"===a.status);for(let a of f)e.push({level:"error",severity:"blocker",message:`评标结构缺失:${a.groupTitle}(缺少:${a.missingSections.join("、")})`,suggestion:a.remedy});for(let a of d.filter(a=>"fragmented"===a.status))e.push({level:"warning",severity:"warning",message:`${a.groupTitle} 小节散落在 ${a.carrierChapters.length} 个章节(${a.carrierChapters.join("、")}),结构可能失真`,suggestion:"建议将同类内容集中到一个承载章节,避免章节间职责重叠。"});for(let b of a.chapters){let a=(b.sections||[]).length;a>18&&e.push({level:"warning",severity:"warning",message:`${b.title} 规划小节 ${a} 个,超过 18 个上限,易产生内容膨胀与重复`,suggestion:"合并语义相近的小节,或将细分内容下移为三级小节而非二级小节。"})}let g=a.chapters.map(a=>({...a,sections:[...a.sections||[]]})),h=new Set;for(let a of f){let b=cz.find(b=>b.id===a.groupId);if(!b)continue;let c=g.findIndex(a=>{let c=cB(a.title);return b.chapterPatterns.some(a=>a.test(c))&&!/雨季|冬季|高温|防汛|扬尘|噪声|工资|劳务|实名|应急|BIM|智慧|管线/u.test(c)}),d=g[c>=0?c:0];for(let c of a.missingSections.filter(a=>!h.has(a))){h.add(c);let a=!function(a){let b=(0,aK.GQ)(a).replace(/\s+/gu,"");return b.length>0&&b.length<=3&&/^[\u4e00-\u9fa5]+$/u.test(b)}(c)?c:b.title;!(0,cx.xb)(a)&&(d.sections.some(b=>cB(b).includes(cB(a))||cB(a).includes(cB(b)))||d.sections.push(a))}}let i=/^(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施$/u;for(let a of g){if(!/人[、,,]材[、,,]机/u.test(a.title))continue;let b=new Set,c=[];for(let d of a.sections){if(cB(d)===cB(a.title))continue;let e=i.exec(d.trim());e?b.has(e[1])||(b.add(e[1]),c.push(d.trim())):c.push(d)}for(let a of["人","材","机"])b.has(a)||c.push(`确保${a}的保障体系与措施`);c.length!==a.sections.length&&(a.sections=c)}if(a.evaluationItems?.length){let b=a.chapters.map(cC);for(let{item:d}of(c=function(a,b,c){let d=[],e=a.map(cC);for(let a of b){let b=a.title;if(!b||e.some(a=>(function(a,b){let c=cB(b);return!!c&&(a.includes(c)||c.includes(a.slice(0,40)))})(a,b)))continue;let f=0;if(c?.semanticSimilarity)for(let a of e)f=Math.max(f,c.semanticSimilarity(b,a));f>=.6||d.push({item:a,title:b,bestSimilarity:c?.semanticSimilarity?f:void 0})}return{items:b,uncovered:d}}(a.chapters,a.evaluationItems,{semanticSimilarity:a.semanticSimilarity})).uncovered){let c=d.title;if(!c||(0,aK.Fe)(c)||(0,aK.ob)(c)||(0,cx.xb)(c))continue;let f=b.reduce((b,d,e)=>{let f=a.semanticSimilarity?a.semanticSimilarity(c,d):+!!d.includes(cB(c));return f>b.score?{index:e,score:f}:b},{index:-1,score:-1}).index,h=g[f>=0?f:0];h.sections.some(a=>cB(a).includes(cB(c))||cB(c).includes(cB(a)))||(h.sections.push(c),h.purpose=`${h.purpose||""};系统已按招标文件技术评审条目自动补足小节“${c}”,必须基于项目资料与适用技术展开实质内容。`,e.push({level:"warning",severity:"warning",message:`评分标准条目“${c}”无承接章节,已自动补小节“${c}”至“${h.title}”`,suggestion:"请确认补充小节与招标文件评审条目口径一致。"}))}}for(let b of(0,cy.y)(a))if("general"!==b)for(let a of cA[b]){let b=cB(g.map(a=>`${a.title} ${(a.sections||[]).join(" ")}`).join(" "));if(a.requiredSectionPatterns.some(a=>a.test(b)))continue;let c=g.findIndex(b=>{let c=cB(b.title);return a.chapterPatterns.some(a=>a.test(c))}),d=g[c>=0?c:0];(0,cx.xb)(a.title)||d.sections.push(a.title)}return{diagnostics:d,issues:e,enrichedChapters:g,criteriaAudit:c}}function cE(a){return a.replace(/\s+/gu,"").toLowerCase()}let cF=[{pattern:/概况|总体|理解|说明|编制/u,goal:"以项目资料已确认的事实卡片展开工程概况与总体理解,不得空泛概述",mustCover:["工程名称、建设地点、建设规模、计划工期、质量标准等资料已确认事实","现场条件与招标范围边界","编制依据与适用范围(按五类逐项列全:招标文件及补疑补遗、国家法律法规、国家/行业现行规范标准、地方法规规章、企业管理体系;地方法规规章必须结合工程所在地属地的现行地方性法规与政府规章,不得只写笼统一句话)","B5 专业工程清单:资料识别的专业工程逐个展开(不少于 5 个,每个专业工程写明作业对象与工程量、工序顺序、施工方法三方面要素,落到工程量与工艺参数)"]},{pattern:/主要施工内容/u,goal:"按专业工程展开作业对象与工程量、工序顺序、施工方法三方面要素(呈现形式不限),落到工程量与工艺参数",mustCover:["资料识别的专业工程(不少于5个)","每个专业工程的作业对象与工程量/工序顺序/施工方法三方面要素","工程量、材料设备规格、检测验收与资料闭环"]},{pattern:/主要分部分项工程施工方案|主要施工方法/u,goal:"按分项工程方案展开作业对象与工程量、工序顺序、施工方法三方面要素(呈现形式不限),落到工艺参数与工序顺序",mustCover:["资料明确的专业工程范围(逐项展开分项工程方案)","每个分项方案的作业对象与工程量/工序顺序/施工方法三方面要素","每个分项方案不少于4个工艺参数与至少1处3环节以上工序顺序表达","工艺参数来自绑定材料或行业通用规范值,不得编造"]},{pattern:/重点|难点/u,goal:"识别项目重点难点并给出针对性对策,每项落到责任岗位与验收节点",mustCover:["重点难点成因与影响范围","对应施工内容与专项措施","责任岗位、检查频次、整改闭环"]},{pattern:/部署|总体|流水|顺序/u,goal:"明确施工部署逻辑、流水段划分与资源调配机制",mustCover:["施工区段与流水划分","各阶段施工顺序与穿插关系","资源动态调配机制"]},{pattern:/进度|工期/u,goal:"围绕总工期与关键节点展开进度保障",mustCover:["总进度计划与关键节点","周/日计划分解","进度偏差识别与纠偏措施"]},{pattern:/质量/u,goal:"覆盖材料验收、过程控制、隐蔽验收、整改复验的质量闭环",mustCover:["质量目标与验收依据","三检制度与样板引路","隐蔽工程验收与材料复试","见证取样送检、试块养护、分部分项报验等质量保障制度逐项落位","质量通病防治与闭环整改","保修与缺陷责任期承诺"]},{pattern:/安全|危大|风险/u,goal:"覆盖风险识别、危大工程专项方案、检查整改与应急响应",mustCover:["危险源辨识与风险分级","危大工程辨识清单逐项完整(按项目实际情况覆盖基坑支护与降水、模板支撑、脚手架、起重吊装、吊篮、拆除等适用项,逐项写明辨识依据,不得遗漏)","危大工程专项方案编制与审批程序","安全交底与隐患排查闭环","B5 应急预案:应急组织架构、应急物资储备清单、专项预案与演练计划(演练频次量化,如每半年 1 次)"]},{pattern:/资源|材料|设备|劳动力|人材机/u,goal:"说明资源配置依据、进场验收与保管调配",mustCover:["机械设备投入计划","分阶段劳动力计划","材料进场计划与验收"]},{pattern:/文明|绿色|环保|扬尘|噪声/u,goal:"覆盖扬尘噪声管控、四节一环保与智慧监测",mustCover:["扬尘治理六个百分百逐项落位(施工工地周边 100% 围挡、物料堆放 100% 覆盖、出入车辆 100% 冲洗、施工现场地面 100% 硬化、拆迁工地 100% 湿法作业、渣土车辆 100% 密闭运输;不涉及拆迁的写明豁免理由)","扬尘噪声分时段管控","四节一环保措施","监测预警与台账","B5 四节一环保量化指标:节水(非传统水源利用率/用水量控制)、节材(材料损耗率/废弃物回收率)、节地(土方平衡率)、节能(能耗指标)各至少 1 项带单位量化指标,附录八基准对照项逐项量化响应"]},{pattern:/应急|预案/u,goal:"覆盖应急组织、物资储备与专项预案",mustCover:["应急组织架构","应急物资储备","专项预案与演练计划"]},{pattern:/竣工|验收|移交|保修/u,goal:"覆盖竣工清理、验收移交与保修响应",mustCover:["竣工清理与垃圾外运","缺陷修补与复查销项","验收移交与保修响应"]},{pattern:/工资|劳务|实名/u,goal:"覆盖劳务实名制与农民工工资保障闭环",mustCover:["劳务实名制管理","工资专用账户与银行代发","考勤与工资支付台账","工伤保险办理与参保信息管理(作业人员工伤保险按项目参保、参保信息纳入实名制管理、工伤事故申报处置流程)"]}],cG=["【结构完整性红线】有序列表编号必须从「1.」起连续、不得跳号或重号,小节内列表独立起编、不得继承父级编号;编号后必须紧跟实质内容(禁止孤立编号);禁止双重冒号「::」「;:」「。:」等行尾标点残留;禁止句子中途截断(行尾无终止标点)与整段重复行;每个小节必须有实质正文,禁止只写标题的空小节","【表格规范红线】每张表只允许一个表头行(禁止重复表头),表名必须独立成行(禁止混入表头首格);数据行不得留空单元格;禁止用「—/若干/约/待定/暂无/待补充」等占位或模糊表达代替具体数据(合计行的「—」与规格型号列「机具无型号」的「—」除外);合计行数值必须可由明细行相加推导;列数与表头一致;说明性内容必须用段落承载,禁止用表格单元格堆砌正文","【数据口径红线(宁缺毋假)】同一指标(劳动力总数、机械台数、工期阶段划分、班组人数等)全文档只允许一套口径,禁止在不同章节或表格中并列矛盾数值;禁止自行取平均值、保守值、众数等在多套口径中盲选统一;无法从资料锁定唯一数值时不得写具体数值(改用定性表述或显式标注待核),严禁编造数值或将候选值随手择一写入","【禁止资料堆砌伪段落】禁止以「本项目主要施工内容包括:X的Y量为Z……」「经识别,本项目工程量为:……」式清单罗列句充当正文段落;禁止把资料条目用顿号/分号首尾相接拼成伪句子;每段必须是连贯的施工描述(含施工对象、工序逻辑、工艺做法、参数落位),工程量清单类明细如需呈现应使用规范表格,不得用罗列句复制表格内容","【工期时序与分批口径红线】时间表述必须符合施工时序逻辑:前期准备动作(施工方案编制报审、图纸会审、交底、考察、封样、检测、培训演练、采购调查等)的完成时限必须落在施工准备阶段内,禁止出现「开工令下发后第 N 日内」且 N 达到或超过总工期的写法(等同于把前期动作排到竣工日);机械、设备、劳动力分批进场表述(首批/剩余/补充进场)各批次数量必须能合计推导为进场总数且与资源配置表同口径,禁止分批数量与总数互相矛盾"];var cH=c(30355),cI=c(2773),cJ=c(38115),cK=c(31129);async function cL(a){a.planning.generationDiagnostics.metrics.push({name:"phase:plan",startedAt:a.planning.planPhaseStartedAt,endedAt:Date.now(),durationMs:Date.now()-a.planning.planPhaseStartedAt}),a.chapterLoop.draftPhaseStartedAt=Date.now();for(let b=0;b<a.planning.effectiveChapters.length;b+=a.blueprint.chapterConcurrency){let c=a.planning.effectiveChapters.slice(b,b+a.blueprint.chapterConcurrency);for(let d of(await Promise.all(c.map(async(c,d)=>{let g,i=b+d;(0,e.Te)(a.global.input.signal);let j=a.understanding.rolePoolRisk??bk({totalChunks:0,loadedChunks:0,vectorReady:void 0}),l=a.blueprint.blueprintActive?{missing:[],failedChecks:[]}:(0,q.RT)(c.title,a.blueprint.integratedBlueprint?.validation,a.planning.chapterIntentClassifier);if(l.missing.length>0){let b=l.failedChecks.length>0?`蓝图校验项「${l.failedChecks.join("、")}」未通过`:"蓝图校验未通过或构建异常";throw a.global.progressStages.push((0,r.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,aK.GQ)(c.title)} 依赖蓝图权威 [${l.missing.join("、")}],${b},已按节点级把关阻断生成`,details:["数值密集型章所需蓝图权威不可用时禁止无权威成稿","请检查清单解析与蓝图构建诊断后重试"],progress:{current:i+1,total:a.planning.effectiveChapters.length,label:"章节阻断"}},{subtitle:(0,aK.GQ)(c.title),order:i})),a.global.emitProgress(),Error(`${(0,aK.GQ)(c.title)} 依赖蓝图权威 [${l.missing.join("、")}],${b},已按节点级把关阻断生成`)}let s=Date.now(),t=a.global.progressStages.length;try{let b,d;a.global.progressStages.push((0,r.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:a.prepare.promptPlan.writerPrompts[0]?.id,status:"running",message:`${(0,aK.GQ)(c.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${i+1}/${a.planning.effectiveChapters.length}`,`二级小节:${c.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:i+1,total:a.planning.effectiveChapters.length,label:"章节生成"}},{subtitle:(0,aK.GQ)(c.title),order:i})),a.global.emitProgress();let u=a.global.input.resumeChapters?.find(a=>a.id===c.id||a.title===c.title),v=u?.content?.trim(),w=u?.evidence?.length?[...u.evidence]:[],x=a.prepare.projectUnderstanding.chapterPlans.find(a=>a.chapterId===c.id||a.chapterTitle===c.title),y=x?Object.values(x.evidenceQueries).flat().filter(Boolean):[],B=c.queries.length>0?c.queries:[a.prepare.template.name,a.prepare.template.outputTitle,c.title],D=a.understanding.chapterGraphMap.get(c.id);if(a.understanding.projectGraph&&D&&D.graphFiles.size>0){let b=[...a.understanding.availableEvidenceScopePaths],d=a=>b.includes(a)?a:b.find(b=>b.endsWith(a)||b.includes(a));for(let b of[...D.graphFiles].map(a=>d(a)||a).filter(b=>(0,f.Tz)(a.prepare.projectRoot,b,a.understanding.availableEvidenceScopePaths))){let d=a.understanding.getCachedFileDetail(b);if(d?.chunks?.length)for(let e of d.chunks)w.push({chapterId:c.id,filePath:d.file?.relativePath||b,score:5+(D.graphWorks.length+D.graphMethods.length)*.5,content:e.content,roleId:a.understanding.fileRoleByPath.get(b),processingType:a.understanding.fileProcessingByPath.get(b),sectionTitle:e.sectionTitle,source:"graph-evidence"})}}let F=a.planning.chapterIntentClassifier.needsBasicFacts(c.title),G=a.blueprint.billFactLock?(()=>{let b=cj(c.title,c.sections||[]);return a.blueprint.billFactLock.entries.filter(a=>a.name&&b.some(b=>a.name.includes(b)||a.description.includes(b)||a.section.includes(b))).slice(0,6).map(a=>`${a.name} ${a.description} ${a.quantity}${a.unit}`.trim().slice(0,80))})():[],H=(0,k.QP)(c,[...B,...y,...G],[]),I=Date.now();a.global.progressStages[t]=(0,r.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:a.prepare.promptPlan.writerPrompts[0]?.id,status:"running",message:`${(0,aK.GQ)(c.title)} 正在执行质量优先的章节检索${D?.graphFiles.size?`(图谱匹配 ${D.graphFiles.size} 个文件)`:""}`,details:H.map(a=>`检索:${a.slice(0,42)}`),progress:{current:i+1,total:a.planning.effectiveChapters.length,label:"证据检索"}},{subtitle:(0,aK.GQ)(c.title),order:i}),a.global.emitProgress();let J=v?[]:[...a.understanding.availableEvidenceScopePaths].filter(Boolean).sort(),K=v?[]:a.understanding.scopedIntelligence?.evidenceByChapterId?.[c.id]||[];if(K.length>0){w.push(...K);let b=a.planning.generationDiagnostics.evidence;b.intentEvidenceInjected=(b.intentEvidenceInjected??0)+K.length}let L=[],M=(c.requiredFacts||[]).filter(a=>!!a&&!H.some(b=>b.includes(a)||a.includes(b))).map(a=>`${c.title} ${a}`),N=(a.prepare.requirementSemantics?.factClues||[]).filter(a=>!H.some(b=>b.includes(a)||a.includes(b))&&!M.some(b=>b.includes(a)||a.includes(b))).map(a=>`${c.title} ${a}`.trim()).slice(0,8),O=[...H,...M,...N];if(J.length>0&&O.length>0){(0,e.Te)(a.global.input.signal);let b=await (0,e.l$)(O,async b=>a.understanding.searchWithCache(b,J,Math.min(a.understanding.requestedEvidencePerChapter,12),c.title),{kind:"search"});L.push(...b)}for(let b of(a.planning.generationDiagnostics.evidence.searchQueries+=O.length,a.planning.generationDiagnostics.evidence.searchMs+=Date.now()-I,a.global.progressStages[t]=(0,r.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,aK.GQ)(c.title)} KB 检索完成:${O.length} 组查询,准备深度召回与语义排序`,progress:{current:i+1,total:a.planning.effectiveChapters.length,label:"证据检索"}},{subtitle:(0,aK.GQ)(c.title),order:i}),a.global.emitProgress(),L)){let d=b.filter(b=>(0,f.Tz)(a.prepare.projectRoot,b.filePath,a.understanding.evidenceScopePaths));w.push(...d.map(b=>({chapterId:c.id,filePath:b.filePath,score:b.score,content:b.content,roleId:a.understanding.fileRoleByPath.get(b.filePath),processingType:a.understanding.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:b.source})));let e=a.planning.generationDiagnostics.evidence;e.retrievedEvidenceInjected=(e.retrievedEvidenceInjected??0)+d.length}F&&J.length>0&&a.blueprint.basicFactSearchResults.length>0&&w.push(...a.blueprint.basicFactSearchResults.filter(b=>(0,f.Tz)(a.prepare.projectRoot,b.filePath,a.understanding.evidenceScopePaths)).map(b=>({chapterId:c.id,filePath:b.filePath,score:b.score,content:b.content,roleId:a.understanding.fileRoleByPath.get(b.filePath),processingType:a.understanding.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"basic-fact-cache"})));let P=v?[]:await (0,cI.$b)({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:c,plan:x,profile:a.prepare.projectMaterialProfile,scopedFilePaths:J,limitPerQuery:Math.min(a.understanding.requestedEvidencePerChapter,10),signal:a.global.input.signal}).catch(()=>[]);w.push(...P);let Q=new Set((c.pinnedEvidenceFilePaths||[]).filter(Boolean)),R=[];a.planning.chapterIntentClassifier.needsBasicFacts(c.title)&&w.push(...a.understanding.safeProjectBasicEvidence.map(a=>({...a,chapterId:c.id,source:"pinned-evidence"})));let S=a.understanding.writerEvidence.filter(a=>/招标|投标须知|评标办法|专用合同条款|投标人须知/u.test(`${a.filePath||""}${a.sectionTitle||""}`));for(let b of(/概况|工程|项目|总体|部署/u.test(c.title)&&S.length>0&&w.push(...S.map(a=>({...a,chapterId:c.id,source:"pinned-evidence"}))),new Set([...Q]))){if(!(0,f.Tz)(a.prepare.projectRoot,b,a.understanding.evidenceScopePaths))continue;let d=Q.has(b),e=a.understanding.getCachedFileDetail(b);e&&w.push(...e.chunks.map(b=>({chapterId:c.id,filePath:e.file.relativePath,score:1,content:b.content,roleId:a.understanding.fileRoleByPath.get(e.file.relativePath),processingType:a.understanding.fileProcessingByPath.get(e.file.relativePath),sectionTitle:b.sectionTitle,source:d?"pinned-evidence":"bound-file"})))}let T=w.filter(b=>(0,f.Tz)(a.prepare.projectRoot,b.filePath,a.understanding.availableEvidenceScopePaths));if(!v&&a.prepare.webAccessConfig.enabled&&a.prepare.webAccessConfig.allowProjectFacts){let b=await $({config:a.prepare.webAccessConfig,chapterId:c.id,chapterTitle:c.title,sectionTitles:c.sections||[],runtimeRules:a.prepare.runtimePromptRules,localFacts:[...a.understanding.preliminaryFactsModel.project,...a.understanding.preliminaryFactsModel.schedule,...a.understanding.preliminaryFactsModel.quality,...a.understanding.preliminaryFactsModel.safety,...a.understanding.preliminaryFactsModel.resources,...a.understanding.preliminaryFactsModel.preciseFacts],signal:a.global.input.signal});a.understanding.webResearchReport.queries.push(...b.queries),a.understanding.webResearchReport.filteredCount+=b.filtered+b.evidence.length}let U=v?[]:(0,cI.SK)({project:a.understanding.project,chapter:c,plan:x,profile:a.prepare.projectMaterialProfile,scopedFilePaths:J,highRisk:j.highRisk});U.length>0&&T.push(...U),T=(0,m.Su)(T,a.understanding.projectMaterialScope),a.understanding.excludedEvidenceKeys.size>0&&(T=T.filter(b=>!a.understanding.excludedEvidenceKeys.has((0,cx.hM)(b))));let V=(()=>{let a=Number(process.env.DOCUMENT_SEMANTIC_TOP_CANDIDATES);return Number.isFinite(a)&&a>0?Math.floor(a):3e3})(),W=(0,k.Mz)(c,T,V),X=await (0,ae.Mv)([cC(c)],W.map(k.t7)),Y=(0,k.UG)(c,T,{preservePinned:!0,semantic:{similarity:X,queryText:cC(c)}},a.planning.generationDiagnostics);Y=(0,o.pm)(Y,a.understanding.canonicalFacts.scopeConflicts),(0,m.U2)(Y,a.understanding.projectMaterialScope,`chapter:${c.id}:initial`);let Z=c.requiredFacts.filter(a=>!Y.some(b=>(0,bi.Lk)(b,a))),_=0,aa=(0,A._C)(a.understanding.bidComposition),ab=D?[D.graphWorks.length?`图谱识别本章工程内容:${D.graphWorks.join("、")}`:"",D.graphMethods.length?`图谱识别本章施工方法:${D.graphMethods.join("、")}`:"",D.graphBoqItems.length?`图谱识别本章BOQ清单项(${D.graphBoqItems.length}项):${D.graphBoqItems.map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",D.gaps.length?`图谱识别本章资料缺口:${D.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",ac=(0,o.Bf)(a.understanding.canonicalFacts.scopeConflicts),ad=(()=>{if(0===a.blueprint.requirementAssignments.length)return"";let b=(0,af.NT)(c.title),d=a.blueprint.requirementAssignments.filter(a=>a.chapterTitle===b).map(a=>a.entry);return(0,af.HF)(d)})(),ag=a.planning.chapterIntentClassifier.needsDustControl(c.title)||a.planning.chapterIntentClassifier.needsDustControl(`${c.title}${c.purpose||""}`)?"【扬尘治理六个百分百——规范固定条目,必须逐项落实并写入正文,每项一句具体措施,六项不得缺项;若本项目无拆迁工程,对“拆迁工地100%湿法作业”必须显性写明“本项目无拆迁工程,不涉及拆迁工地湿法作业”,不得省略】\n- 施工工地周边100%围挡\n- 物料堆放100%覆盖\n- 出入车辆100%冲洗\n- 施工现场地面100%硬化\n- 拆迁工地100%湿法作业\n- 渣土车辆100%密闭运输":"",ah=(c.sections||[]).filter(a=>!/^(?:施工概况|施工流程|施工方法)$/u.test(a.trim())&&!/^附录/u.test(a.trim())),ai=ah.length>0?`【必须输出以下规划小节为三级标题(### 小节名),逐个小节展开正式正文:每小节正文不少于 100 字,不得只写标题、不得空小节、不得用表格替代正文;小节名与章标题相同或相近也必须输出,不得省略或合并】${ah.join("、")}`:"",aj=a.blueprint.billFactLock?function(a,b,c={}){if(!a||0===a.entries.length)return"";let d=/清单|工程量|主要施工内容|主要施工方法|主要分部分项|资源配置|材料|物资/u.test(b),e=Math.max(1,c.maxEntries??(d?120:60)),f=Math.max(1,c.maxChars??(d?9e3:6e3)),g=cj(b,c.sections||[]),h=a.entries.map(a=>({entry:a,score:function(a,b){let c=`${a.name} ${a.description} ${a.section} ${a.subsection}`;return b.reduce((a,b)=>a+ +!!c.includes(b),0)}(a,g)})).sort((a,b)=>b.score-a.score||a.entry.seq-b.entry.seq).map(a=>a.entry).slice(0,e),i=[],j=0;for(let a of h){let b=a.specQuantityPairs.length>0?` [${a.specQuantityPairs.map(a=>`${a.spec} ${a.quantity}`).join(";")}]`:"",c=`${a.seq}. ${a.name}${a.description?`(${a.description})`:""}:${a.quantity}${a.unit}${a.section?`|${a.section}`:""}${b}`;if(j+c.length+1>f)break;i.push(c),j+=c.length+1}return 0===i.length?"":["【工程量清单事实锁——确定性权威数据(逐项照抄,不得改动或重新分配)】",`清单来源:${a.sourceFile.split("/").pop()}(${a.totalEntries} 条目,本节锁定 ${i.length} 条)`,"清单给出规格-数量拆分的必须逐项照抄原值(如 100W 109套、120W 9套),不得自行拆分或重新分配;清单只给总量的不得自行拆分;同一规格-数量拆分在全文各章必须一致。",...i].join("\n")}(a.blueprint.billFactLock,c.title,{sections:c.sections||[]}):"",ak=function(a,b){let c=b.indexOf(a),d=(a,b)=>`${(0,aK.tb)(a,b.title)}${b.sections?.length?`(小节:${b.sections.join("、")})`:""}`,e=b.map((a,b)=>({item:a,index:b})).filter(b=>b.item!==a);return["【跨章写作职责分工——只就本章主题展开,写时即不产生跨章重复】",`- 本章职责:${d(c>=0?c:0,a)}`,...e.length>0?["- 其他章节职责(不得展开复述其主题内容):",...e.map(a=>` - ${d(a.index,a.item)}`)]:[],"- 写作规范:只就本章主题展开;其他章节主题的内容如需关联,一句话引用(“详见第X章”,X 替换为实际章号),不得展开复述;篇幅以本节合同字数为准,不得借写其他章节主题充数。"].join("\n")}(c,a.planning.effectiveChapters),al=[ab,ad,ai,ak,ag,ac.length?`【数据口径强制约束】${ac.join(";")}`:"",...cG,x?.writingGoal,x?.mustCover?.length?`本章必须覆盖:${x.mustCover.join("、")}`:"",x?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${x.mustUseMaterialKinds.join("、")}`:"",aj].filter(Boolean).join("\n"),am=(0,k.C_)(a.prepare.promptPlan,c);if(a.prepare.promptPlan.writerPrompts.length>0&&!am.primaryWriter)throw Error(`${(0,aK.GQ)(c.title)} 写作主控提示词未进入章节生成阶段`);let an=[am.promptTexts,a.prepare.generationControlPrompt].filter(Boolean).join("\n\n"),ao=am.promptDetails.length?am.promptDetails:["未绑定章节写作提示词"],ap=(0,n.rC)({template:a.prepare.template,chapter:c,spec:a.prepare.documentSpec,profile:a.prepare.domainProfile,promptTexts:an,requirement:a.global.input.requirement,plan:x?{requiredContents:x.mustCover,evidenceNeeds:Object.values(x.evidenceQueries).flat()}:void 0}),aq=(0,n.ji)({needs:ap,factsModel:a.understanding.preliminaryFactsModel,evidence:T,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys}),ar=aq.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),as=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>cE(`${a.sectionTitle||""}${a.content||""}`).includes(cE(b)))),c=a.evidence.length<3?["章节证据数量不足"]:[],d=b.length+c.length,e=d>=5?"high":d>=2?"medium":"low",f="high"===e?"evidence_first":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:e,missingFacts:b,missingEvidence:c,suggestedStrategy:f,reason:0===d?"章节事实与证据满足常规生成条件。":`识别到 ${d} 项生成前缺口,按 ${f} 策略生成。`}}({chapter:c,evidence:Y}),at=new Set(Y.map(a=>a.filePath)).size,au=!!D&&(D?.graphFiles.size||0)>=8&&at>=6&&0===Z.length&&"low"===as.riskLevel,av=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:J.length,evidenceCount:Y.length,evidenceFileCount:at,suggestedStrategy:as.suggestedStrategy,highRisk:j.highRisk,missingFactsCount:Z.length,requiredMissingNeedsCount:ar.length,riskLevel:as.riskLevel});if(!au&&av&&J.length>0){let b=new Set([...Z,...ar]).size;b>0&&(a.global.progressStages[t]=(0,r.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,aK.GQ)(c.title)} 正在深度召回缺失事实证据(${b} 项需求)`,progress:{current:i+1,total:a.planning.effectiveChapters.length,label:"深度召回"}},{subtitle:(0,aK.GQ)(c.title),order:i}),a.global.emitProgress());let d=await bl({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:c,scopedFilePaths:J,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,requiredNeeds:[...new Set([...Z,...ar])],extraClues:a.prepare.requirementSemantics?.factClues||[],highRisk:j.highRisk||ar.length>0,signal:a.global.input.signal}).catch(()=>[]);_=d.length;let e=a.planning.generationDiagnostics.evidence;e.retrievedEvidenceInjected=(e.retrievedEvidenceInjected??0)+d.length,d.length>0&&(T=[...T,...(0,m.Su)(d,a.understanding.projectMaterialScope)],a.understanding.excludedEvidenceKeys.size>0&&(T=T.filter(b=>!a.understanding.excludedEvidenceKeys.has((0,cx.hM)(b)))),Y=(0,k.UG)(c,T,{preservePinned:!0},a.planning.generationDiagnostics),Y=(0,o.pm)(Y,a.understanding.canonicalFacts.scopeConflicts),(0,m.U2)(Y,a.understanding.projectMaterialScope,`chapter:${c.id}:deep`),Z=c.requiredFacts.filter(a=>!Y.some(b=>(0,bi.Lk)(b,a)))),ar=(aq=(0,n.ji)({needs:ap,factsModel:a.understanding.preliminaryFactsModel,evidence:T,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),a.global.progressStages[t]=(0,r.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,aK.GQ)(c.title)} 深度召回完成:命中 ${_} 条${ar.length>0?`,仍缺 ${ar.length} 项(触发轻量补充)`:""}`,progress:{current:i+1,total:a.planning.effectiveChapters.length,label:"证据检索"}},{subtitle:(0,aK.GQ)(c.title),order:i}),a.global.emitProgress()}if(ar.length>0&&J.length>0){let b=(0,m.Su)(await bl({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:c,scopedFilePaths:J,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,requiredNeeds:ar,extraClues:a.prepare.requirementSemantics?.factClues||[],highRisk:!0,signal:a.global.input.signal}).catch(()=>[]),a.understanding.projectMaterialScope),d=a.planning.generationDiagnostics.evidence;d.retrievedEvidenceInjected=(d.retrievedEvidenceInjected??0)+b.length,b.length>0&&(T=[...T,...b],a.understanding.excludedEvidenceKeys.size>0&&(T=T.filter(b=>!a.understanding.excludedEvidenceKeys.has((0,cx.hM)(b)))),Y=(0,k.UG)(c,T,{preservePinned:!0},a.planning.generationDiagnostics),Y=(0,o.pm)(Y,a.understanding.canonicalFacts.scopeConflicts),(0,m.U2)(Y,a.understanding.projectMaterialScope,`chapter:${c.id}:supplemental`),Z=c.requiredFacts.filter(a=>!Y.some(b=>(0,bi.Lk)(b,a))),ar=(aq=(0,n.ji)({needs:ap,factsModel:a.understanding.preliminaryFactsModel,evidence:T,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}(0,m.U2)(Y,a.understanding.projectMaterialScope,`chapter:${c.id}:writer-session.global.input`);{let b=a.planning.generationDiagnostics.evidence,c=new Set(["keyword","vector","hybrid","deep-retrieval","required-fact-evidence"]);b.intentEvidenceUsed=(b.intentEvidenceUsed??0)+Y.filter(a=>"project-intelligence"===a.source).length,b.retrievedEvidenceUsed=(b.retrievedEvidenceUsed??0)+Y.filter(a=>!!a.source&&c.has(a.source)).length}for(let b of(0===Y.length&&a.understanding.missingItems.push(`${c.title}:缺少可支撑正文的项目资料证据`),Z))a.understanding.missingItems.push(`${c.title}:事实需求未满足 ${b}`);let aw=(0,r.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:a.understanding.allEvidence.length>0?"success":"failed",message:`已检索/绑定 ${a.understanding.allEvidence.length} 条证据`});a.understanding.knowledgeBaseStageIndex<0?a.understanding.knowledgeBaseStageIndex=(0,r.fx)(a.global.progressStages,aw):a.global.progressStages[a.understanding.knowledgeBaseStageIndex]={...aw,order:a.global.progressStages[a.understanding.knowledgeBaseStageIndex]?.order??aw.order},a.global.emitProgress(),(0,e.Te)(a.global.input.signal);let ax=new Map,ay=b=>{let d=(0,e.c6)({kind:"section",query:`${c.title} ${b}`.trim(),scopedFilePaths:J}),f=ax.get(d);if(f)return Promise.resolve(f);let g=(0,bn.Ym)(b,c,Y),h=g.filter(a=>bv.AM.test(a.content)).length;return g.length>=4&&h>=1?(ax.set(d,g),Promise.resolve(g)):(0,k.hW)({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:c,sectionTitle:b,scopedFilePaths:J,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,signal:a.global.input.signal}).then(a=>(ax.set(d,a),a))},az=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,bi.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,bi.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:c,evidence:Y,risk:j});a.understanding.retrievalCoverageReports.push(az);let aA=new Set(Y.map(a=>a.filePath)),aB=Y.reduce((a,b)=>a+b.content.length,0),aC=[...j.highRisk?[`召回覆盖风险(${j.riskReason||"切片未完全预加载"}):已加载 ${j.loadedChunks}/${j.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${K.length} 条`,`深召回证据:${_} 条`,`事实覆盖:${az.requiredFactCovered}/${az.requiredFactTotal}`,`小节覆盖:${az.sectionCovered}/${az.sectionTotal}`];a.global.progressStages[t]=(0,r.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:a.prepare.promptPlan.writerPrompts[0]?.id,status:"running",message:`${(0,aK.GQ)(c.title)} 已选取 ${Y.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aA.size} 份`,`上下文字符:${aB}`,`检索查询:${H.length} 组`,...aC],progress:{current:i+1,total:a.planning.effectiveChapters.length,label:"正文生成"}},{subtitle:(0,aK.GQ)(c.title),order:i}),a.global.emitProgress(),a.planning.generationDiagnostics.evidence.contextChars+=aB;let aD=(0,n.n9)(aq),aE=a.planning.chapterIntentClassifier.needsBasicFacts(c.title)?a.understanding.earlyFactPool.projectBasicFacts:[],aF=(0,bn.qX)((0,bn.hZ)({chapter:c,plan:void 0,spec:a.prepare.documentSpec,roleFacts:R,evidence:Y,missingFacts:Z,indexedFacts:[...aE,...aD],resolvedFactNeeds:aq,factNeedsPrompt:(0,n.GK)(aq),specAuthorityMap:a.understanding.preliminaryFactsModel.specAuthorityMap})),aG=(0,cH.up)({plan:a.planning.plannedDocument.plan,chapter:c,context:a.understanding.agentWorkflow,evidence:Y});if(a.understanding.agentWorkflow.chapterTasks=[...(a.understanding.agentWorkflow.chapterTasks||[]).filter(a=>a.chapterId!==c.id),aG.task],a.understanding.agentWorkflow.nodes.push(aG.node),(0,bm.cN)(a.understanding.agentWorkflow),(0,r.fx)(a.global.progressStages,(0,r.X5)({type:"validation",roleId:`agent-chapter-task-${c.id}`,status:aG.task.ready||v?"success":"failed",message:aG.task.ready?aG.node.outputSummary||`${(0,aK.GQ)(c.title)} 章节任务规划完成`:v?`${(0,aK.GQ)(c.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:aG.node.outputSummary||`${(0,aK.GQ)(c.title)} 章节任务规划完成`,details:aG.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:a.global.progressStages.length})),a.global.emitProgress(a.global.chapterDrafts),!aG.task.ready&&!v)throw Error(`${(0,aK.GQ)(c.title)} 章节任务未就绪:${aG.task.issues.map(a=>a.message).join(";")}`);let aH={total:aq.length,satisfied:aq.filter(a=>"satisfied"===a.status).length,missing:aq.filter(a=>"missing"===a.status).length,lowConfidence:aq.filter(a=>"low_confidence"===a.status).length};for(let b of ar)a.understanding.missingItems.push(`${c.title}:事实需求未确认 ${b}`);let aI=a.planning.documentBudget.chapterTargets.get(c.id)||1200,aJ=c.sections?.filter(Boolean).length||0,aL=(0,k.gq)({budgetTarget:aI,sectionCount:aJ,title:c.title,longformStrict:a.planning.documentBudget.longformStrict}),aM=Math.ceil(aL.maxWords*(a.planning.documentBudget.maxChars?1.05:1)),aN=(0,q.jM)(c.title,a.planning.chapterIntentClassifier).length>0,aO=(a.blueprint.blueprintActive||aN&&0===l.missing.length)&&a.blueprint.integratedBlueprint?(0,q.md)(a.blueprint.integratedBlueprint,c.title):void 0,aP=aO&&a.blueprint.integratedBlueprint?(0,q.uw)(aO,a.blueprint.integratedBlueprint.data):"",aQ=aL.roundTarget,aR=aJ>0?a.planning.documentBudget.longformStrict?aQ:Math.min(aQ,Math.max(1800,aL.structureTarget)):aQ,aS=0,aT=b=>{let d=Date.now();if(d-aS<3e3)return;aS=d;let e=b.filter(Boolean).join("\n\n");e.trim()&&a.global.emitProgress([...a.global.chapterDrafts,{id:c.id,title:c.title,content:`## ${c.title}
174
174
 
175
175
  ${e}`,evidence:Y,missingFacts:Z,sections:c.sections||[],tablePlans:c.tablePlans||[],inProgress:!0}])},aU=a=>{"complete"===a.phase&&a.partialSections&&aT(a.partialSections)};if(v)d=(0,k.w_)(v,c),d=await (0,k._k)(d,a.understanding.bidProcedureJudge),g=(0,r.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:am.primaryPromptId,status:"success",message:`${(0,aK.GQ)(c.title)} 已复用已有章节正文:当前 ${(0,h.V7)(d)} 字,跳过 Writer,直接进入章节收口`,details:[`有效证据:${Y.length} 条`,`事实需求:${aH.satisfied}/${aH.total} 已满足,缺失 ${aH.missing},低置信 ${aH.lowConfidence}`,"来源:resumeChapters/checkpointChapters"],progress:{current:i+1,total:a.planning.effectiveChapters.length,label:"复用章节"}},{subtitle:(0,aK.GQ)(c.title),order:i}),a.global.progressStages[t]=g,a.global.emitProgress(a.global.chapterDrafts);else{let g;a.global.progressStages[t]=(0,r.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:am.primaryPromptId,status:"running",message:`${(0,aK.GQ)(c.title)} 正在规划主题块并准备并发成稿`,details:[...ao,`有效证据:${Y.length} 条`,`事实需求:${aH.satisfied}/${aH.total} 已满足,缺失 ${aH.missing},低置信 ${aH.lowConfidence}`,aL.label,`生成上限约 ${aM} 字`,`模板细目:${c.sections?.length||0} 条`,"先由章级 Planner 聚类为主题块并语义合并,再按主题块全并发出稿,避免逐小节碎片化"],progress:{current:i+1,total:a.planning.effectiveChapters.length,label:"主题块并发"}},{subtitle:(0,aK.GQ)(c.title),order:i}),a.global.emitProgress();let h=async(a,b,c)=>{let d=await Promise.all(b.map(({block:b})=>(0,bn.nl)({...a,targetWords:b.targetWords,maxWords:Math.ceil(1.1*b.targetWords)},{blocks:[b],coveredSections:[],fallbackSections:[]}).then(a=>a?.markdown).catch(()=>void 0))),e=[...c];return b.forEach(({index:a},b)=>{let c=d[b];c&&(e[a]=c.replace(/^##\s+.+$/mu,"").trim())}),e},j=await a.global.withProgressHeartbeat(()=>(0,f.X6)(a.planning.generationDiagnostics,`chapter-plan:${c.id}`,async()=>(0,q.OY)({blueprintChapter:aO,inputSections:c.sections||[],chapterTitle:(0,aK.GQ)(c.title),targetWords:aR,projectContext:a.planning.projectContext,evidence:Y}))),l=await a.global.withProgressHeartbeat(()=>(0,cJ.G8)({chapterTitle:(0,aK.GQ)(c.title),blocks:j.blocks.map(a=>({title:a.title,pointTitles:a.subPoints.map(a=>a.title)})),fingerprintPool:a.planning.fingerprintPool||(0,cK.$R)(),excludeDocumentId:a.global.input.diversitySeed,profile:a.planning.diversityProfile,signal:a.global.input.signal,diagnostics:a.planning.generationDiagnostics}));if(l.renamed>0&&(j={...j,blocks:j.blocks.map((a,b)=>({...a,title:l.titles[b]}))}),j.blocks.length>0){b=j;let d=[an,(0,cH.$8)(aG.task,j)].filter(Boolean).join("\n\n"),e=j.blocks.reduce((a,b)=>a+b.subPoints.length,0),k=j.blocks.reduce((a,b)=>a+b.subPoints.reduce((a,b)=>a+Math.max(0,b.sources.length-1),0),0),m=aO?j.fallbackSections.length>0?`(蓝图章切片确定性转换:${j.fallbackSections.length} 条细目由覆盖校验挂回主题块)`:"(蓝图章切片确定性转换:主题块来自蓝图小节/工作包)":"(蓝图未覆盖本章,已按语义域确定性分组)";a.global.progressStages[t]=(0,r.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:am.primaryPromptId,status:"running",message:`${(0,aK.GQ)(c.title)} 已规划 ${j.blocks.length} 个主题块,正在按主题块并发成稿${m}`,details:[...ao,`有效证据:${Y.length} 条`,`输入细目 ${aJ} 条 → 主题块 ${j.blocks.length} 个(每块 2~4 个 H4 要点)`,`语义合并 ${k} 条细目,目录级 H4 合计 ${e} 个`,"单块 1800~2800 字,主题块间全并发,单节深度与整体耗时双优",...l.summary?[l.summary]:[]],progress:{current:i+1,total:a.planning.effectiveChapters.length,label:"主题块并发"}},{subtitle:(0,aK.GQ)(c.title),order:i});let n=a.global.progressStages.find(a=>a.roleId===`agent-chapter-task-${c.id}`);n&&(n.message=`${aG.task.sections.filter(a=>a.ready).length}/${aG.task.sections.length} 条细目任务就绪(已规划为 ${j.blocks.length} 个主题块)`),a.global.emitProgress(a.global.chapterDrafts);let o={template:a.prepare.template,chapter:c,evidence:Y,missingFacts:Z,promptTexts:d,projectContext:a.planning.chapterScopedProjectContext(c),skeletonProjectContext:a.planning.projectContext,requirement:a.global.input.requirement,roleContext:al,targetWords:aR,maxWords:aM,forbidDrawingImages:aa,bidComposition:a.understanding.bidComposition,factCoverageContext:aF,compactProjectContext:!0,scopedProjectContext:!0,blueprintData:a.blueprint.integratedBlueprint?.validation.passed?a.blueprint.integratedBlueprint.data:void 0,blueprintChapter:aO,blueprintMustCiteHint:aP,sectionEvidenceProvider:ay,onSectionProgress:aU,diagnostics:a.planning.generationDiagnostics,signal:a.global.input.signal},p=await a.global.withProgressHeartbeat(()=>(0,f.X6)(a.planning.generationDiagnostics,`chapter-planned-block-draft:${c.id}`,()=>(0,bn.nl)(o,j)));if(p?.allSucceeded)g=p.markdown;else if(p){let a=await h(o,p.failedBlocks,p.sections);a.every(a=>!!a)&&(g=`## ${c.title}
176
176