@customize-agent/server 4.19.0 → 4.19.1

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.
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=1153,exports.ids=[1153,9227],exports.modules={31557:(a,b,c)=>{c.d(b,{h0x:()=>d.h0,bVF:()=>d.bV,OXS:()=>er,QJx:()=>d.QJ,jGg:()=>d.jG,R1O:()=>eq,Bhi:()=>d.Bh,xmB:()=>d.xm,J5_:()=>d.J5});var d=c(23500),e=c(76760),f=c(19898),g=c(44533),h=c(29281),i=c(25840),j=c(6444),k=c(85441),l=c(73859),m=c(56942),n=c(70933),o=c(70208),p=c(91977),q=c(61373),r=c(78217),s=c(23760),t=c(35882),u=c(23021),v=c(37047),w=c(71678),x=c(73024),y=c(95734),z=c(1218),A=c(22157);function B(a=!1){return{awardObjectives:[],specialQualityStandards:[],awardClauses:[],systematicBenchmarks:[],frontScheduleClauses:[],dateFabricationProhibited:!1,prohibitionNotes:[],extracted:a}}let C={type:"object",required:["awardObjectives","specialQualityStandards","awardClauses","systematicBenchmarks","prohibitionNotes"],properties:{awardObjectives:{type:"array",maxItems:10,items:{type:"object",required:!0,properties:{text:{type:"string",minLength:2,maxLength:120},coreTerms:{type:"array",maxItems:4,items:{type:"string",maxLength:24}},source:{type:"string",maxLength:80}}}},specialQualityStandards:{type:"array",maxItems:10,items:{type:"object",required:!0,properties:{text:{type:"string",minLength:2,maxLength:120},coreTerms:{type:"array",maxItems:4,items:{type:"string",maxLength:24}},source:{type:"string",maxLength:80}}}},awardClauses:{type:"array",maxItems:10,items:{type:"object",required:!0,properties:{text:{type:"string",minLength:2,maxLength:200},coreTerms:{type:"array",maxItems:4,items:{type:"string",maxLength:24}},source:{type:"string",maxLength:80}}}},greenBuildingGrade:{type:"object",properties:{text:{type:"string",minLength:2,maxLength:120},coreTerms:{type:"array",maxItems:4,items:{type:"string",maxLength:24}},source:{type:"string",maxLength:80}}},smartSiteGrade:{type:"object",properties:{text:{type:"string",minLength:2,maxLength:120},coreTerms:{type:"array",maxItems:4,items:{type:"string",maxLength:24}},source:{type:"string",maxLength:80}}},assemblyRate:{type:"object",properties:{text:{type:"string",minLength:2,maxLength:120},coreTerms:{type:"array",maxItems:4,items:{type:"string",maxLength:24}},source:{type:"string",maxLength:80}}},systematicBenchmarks:{type:"array",maxItems:10,items:{type:"object",required:!0,properties:{text:{type:"string",minLength:2,maxLength:120},coreTerms:{type:"array",maxItems:4,items:{type:"string",maxLength:24}},source:{type:"string",maxLength:80}}}},frontScheduleClauses:{type:"array",maxItems:20,items:{type:"object",required:!0,properties:{text:{type:"string",minLength:2,maxLength:200},coreTerms:{type:"array",maxItems:4,items:{type:"string",maxLength:24}},source:{type:"string",maxLength:80}}}},dateFabricationProhibited:{type:"boolean"},prohibitionNotes:{type:"array",maxItems:12,items:{type:"object",required:!0,properties:{text:{type:"string",minLength:2,maxLength:200},coreTerms:{type:"array",maxItems:4,items:{type:"string",maxLength:24}},source:{type:"string",maxLength:80}}}}}};function D(a){if(a?.text&&!(a.text.trim().length<2))return{text:a.text.trim(),coreTerms:(a.coreTerms||[]).map(a=>a.trim()).filter(a=>a.length>=2&&a.length<=16).slice(0,4),source:a.source?.trim()||void 0}}function E(a){if(!Array.isArray(a))return[];let b=new Set,c=[];for(let d of a){let a=D(d);if(!a)continue;let e=a.text;b.has(e)||(b.add(e),c.push(a))}return c}async function F(a,b={}){let c,d=B(!1);if(!a||0===a.length)return d;let e=[...a].sort((a,b)=>{let c=`${a.sectionTitle||""}
1
+ "use strict";exports.id=1153,exports.ids=[1153,9227],exports.modules={31557:(a,b,c)=>{c.d(b,{h0x:()=>d.h0,bVF:()=>d.bV,OXS:()=>eq,QJx:()=>d.QJ,jGg:()=>d.jG,R1O:()=>ep,Bhi:()=>d.Bh,xmB:()=>d.xm,J5_:()=>d.J5});var d=c(23500),e=c(76760),f=c(19898),g=c(44533),h=c(29281),i=c(25840),j=c(6444),k=c(85441),l=c(73859),m=c(56942),n=c(70933),o=c(70208),p=c(91977),q=c(61373),r=c(78217),s=c(23760),t=c(35882),u=c(23021),v=c(37047),w=c(71678),x=c(73024),y=c(95734),z=c(1218),A=c(22157);function B(a=!1){return{awardObjectives:[],specialQualityStandards:[],awardClauses:[],systematicBenchmarks:[],frontScheduleClauses:[],dateFabricationProhibited:!1,prohibitionNotes:[],extracted:a}}let C={type:"object",required:["awardObjectives","specialQualityStandards","awardClauses","systematicBenchmarks","prohibitionNotes"],properties:{awardObjectives:{type:"array",maxItems:10,items:{type:"object",required:!0,properties:{text:{type:"string",minLength:2,maxLength:120},coreTerms:{type:"array",maxItems:4,items:{type:"string",maxLength:24}},source:{type:"string",maxLength:80}}}},specialQualityStandards:{type:"array",maxItems:10,items:{type:"object",required:!0,properties:{text:{type:"string",minLength:2,maxLength:120},coreTerms:{type:"array",maxItems:4,items:{type:"string",maxLength:24}},source:{type:"string",maxLength:80}}}},awardClauses:{type:"array",maxItems:10,items:{type:"object",required:!0,properties:{text:{type:"string",minLength:2,maxLength:200},coreTerms:{type:"array",maxItems:4,items:{type:"string",maxLength:24}},source:{type:"string",maxLength:80}}}},greenBuildingGrade:{type:"object",properties:{text:{type:"string",minLength:2,maxLength:120},coreTerms:{type:"array",maxItems:4,items:{type:"string",maxLength:24}},source:{type:"string",maxLength:80}}},smartSiteGrade:{type:"object",properties:{text:{type:"string",minLength:2,maxLength:120},coreTerms:{type:"array",maxItems:4,items:{type:"string",maxLength:24}},source:{type:"string",maxLength:80}}},assemblyRate:{type:"object",properties:{text:{type:"string",minLength:2,maxLength:120},coreTerms:{type:"array",maxItems:4,items:{type:"string",maxLength:24}},source:{type:"string",maxLength:80}}},systematicBenchmarks:{type:"array",maxItems:10,items:{type:"object",required:!0,properties:{text:{type:"string",minLength:2,maxLength:120},coreTerms:{type:"array",maxItems:4,items:{type:"string",maxLength:24}},source:{type:"string",maxLength:80}}}},frontScheduleClauses:{type:"array",maxItems:20,items:{type:"object",required:!0,properties:{text:{type:"string",minLength:2,maxLength:200},coreTerms:{type:"array",maxItems:4,items:{type:"string",maxLength:24}},source:{type:"string",maxLength:80}}}},dateFabricationProhibited:{type:"boolean"},prohibitionNotes:{type:"array",maxItems:12,items:{type:"object",required:!0,properties:{text:{type:"string",minLength:2,maxLength:200},coreTerms:{type:"array",maxItems:4,items:{type:"string",maxLength:24}},source:{type:"string",maxLength:80}}}}}};function D(a){if(a?.text&&!(a.text.trim().length<2))return{text:a.text.trim(),coreTerms:(a.coreTerms||[]).map(a=>a.trim()).filter(a=>a.length>=2&&a.length<=16).slice(0,4),source:a.source?.trim()||void 0}}function E(a){if(!Array.isArray(a))return[];let b=new Set,c=[];for(let d of a){let a=D(d);if(!a)continue;let e=a.text;b.has(e)||(b.add(e),c.push(a))}return c}async function F(a,b={}){let c,d=B(!1);if(!a||0===a.length)return d;let e=[...a].sort((a,b)=>{let c=`${a.sectionTitle||""}
2
2
  ${a.content||""}`,d=`${b.sectionTitle||""}
3
3
  ${b.content||""}`;return Number(H.test(d))-Number(H.test(c))}),f=[],g=0,h=[];for(let a of e){if(!a.content||!a.content.trim())continue;let b=`【${a.filePath||"资料"}|${a.sectionTitle||"正文"}】
4
4
  ${(0,z.wj)(a.content)}`;f.length>0&&g+b.length>4e4&&(h.push(f),f=[],g=0),f.push(b),g+=b.length}async function i(a){let c=a.join("\n\n");if(!c.trim())return d;let e=function(a){let b=0x811c9dc5;for(let c=0;c<a.length;c+=1)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193);return(b>>>0).toString(16)}(c),f=await (0,y.bb)([(0,q.y4)("你是招标文件“要求与标准”结构化提取器。"),'从施工项目绑定资料(招标文件/合同条款/技术标准/检查规范等)中提取文本性评分项要求——这些是评标专家会核对文档是否响应、且影响否决与得分的实质要求。\n只提取资料中明确写出的要求,绝不臆造;资料没有该类别时输出空数组或缺省。\ncoreTerms 是用于在正文中核对该要求是否被响应的核心词(2-4 个),必须选最能代表该要求的专有名词/等级/体系名(如“黄山杯”“二星级”“六个百分百”),不要泛化词。\ndateFabricationProhibited:资料写明“以开工令为准/开工日期以监理开工令为准/不得自定开工日期”时为 true,否则 false。\nsystematicBenchmarks 提取体系化基准要求(如“扬尘治理六个百分百”“四节一环保”),单条零散要求放 prohibitionNotes。\nfrontScheduleClauses:从“投标人须知前附表/投标人须知”章节提取施工组织设计必须响应的实质条款——计划工期与质量要求、创优目标与奖惩(如“确保黄山杯,支付300万元”)、缺陷责任期与质保金、履约担保、工期延误赔偿、项目经理/关键人员要求、分包限制、装配式/绿色建筑/智慧工地等级、安全文明与扬尘要求、付款方式(影响资金安排)。只提取施组正文需要写入或必须遵守的条款;投标程序类条款(开标时间地点、保证金账户、投标文件递交/解密方式、评标委员会组成等纯程序信息)一律不提取。\n工程量清单的项目特征描述不是评分项要求,不要提取。\n必须输出且仅输出一个 JSON 对象,字段结构如下(没有内容的字段输出空数组 [] 或省略可选字段,绝不输出其他字段名):\n{\n "awardObjectives": [{ "text": "创优目标原文", "coreTerms": ["核心词"], "source": "来源文件" }],\n "specialQualityStandards": [{ "text": "...", "coreTerms": [], "source": "..." }],\n "awardClauses": [{ "text": "...", "coreTerms": [], "source": "..." }],\n "greenBuildingGrade": { "text": "...", "coreTerms": [], "source": "..." },\n "smartSiteGrade": { "text": "...", "coreTerms": [], "source": "..." },\n "assemblyRate": { "text": "...", "coreTerms": [], "source": "..." },\n "systematicBenchmarks": [{ "text": "...", "coreTerms": [], "source": "..." }],\n "frontScheduleClauses": [{ "text": "...", "coreTerms": [], "source": "..." }],\n "dateFabricationProhibited": false,\n "prohibitionNotes": [{ "text": "...", "coreTerms": [], "source": "..." }]\n}\n只返回 JSON。'].join("\n"),c,{maxTokens:16e3,temperature:.1,signal:b.signal,diagnostics:b.diagnostics,schema:C,taskKind:"structuredGeneration"});return f?{awardObjectives:E(f.awardObjectives),specialQualityStandards:E(f.specialQualityStandards),awardClauses:E(f.awardClauses),greenBuildingGrade:D(f.greenBuildingGrade),smartSiteGrade:D(f.smartSiteGrade),assemblyRate:D(f.assemblyRate),systematicBenchmarks:E(f.systematicBenchmarks),frontScheduleClauses:E(f.frontScheduleClauses).filter(a=>!(0,A.hh)(a.text)),dateFabricationProhibited:!0===f.dateFabricationProhibited,prohibitionNotes:E(f.prohibitionNotes).filter(a=>!(0,A.hh)(a.text)),extracted:!0,sourceHash:e}:{...d,sourceHash:e}}for(let a of(f.length>0&&h.push(f),h)){let b=await i(a);c=c?function(a,b){let c,d,e,f,g,h;return{...a,awardObjectives:Y(a.awardObjectives,b.awardObjectives),specialQualityStandards:Y(a.specialQualityStandards,b.specialQualityStandards),awardClauses:Y(a.awardClauses,b.awardClauses),greenBuildingGrade:(c=a.greenBuildingGrade,d=b.greenBuildingGrade,c||d),smartSiteGrade:(e=a.smartSiteGrade,f=b.smartSiteGrade,e||f),assemblyRate:(g=a.assemblyRate,h=b.assemblyRate,g||h),systematicBenchmarks:Y(a.systematicBenchmarks,b.systematicBenchmarks),frontScheduleClauses:Y(a.frontScheduleClauses,b.frontScheduleClauses),prohibitionNotes:Y(a.prohibitionNotes,b.prohibitionNotes),dateFabricationProhibited:a.dateFabricationProhibited||b.dateFabricationProhibited,extracted:a.extracted||b.extracted}}(c,b):b}return c||d}let G=["工程创优奖项申报要求:争创或确保获得市级、省级或国家级优质工程奖,含具体奖项名称","绿色建筑星级等级要求","智慧工地等级要求","装配式建筑装配率要求","特殊质量标准与质量要求条款","扬尘治理六个百分百要求","质量目标必须确保达到合格或优良标准的要求"],H=/确保|争创|创优|获得.{0,10}[杯奖]|优质工程奖|绿色建筑|星级|智慧工地|装配率|装配式|六个百分百|四节一环保/u,I={specialQualityStandards:{label:"特殊质量标准",lexical:/特殊质量标准|质量标准和要求的约定|质量要求.{0,12}(?:为|是|满足)/u,hint:"特殊质量标准与质量要求条款(除创优/等级外的实质质量约束)"},frontScheduleClauses:{label:"前附表响应条款",lexical:/计划工期|日历天|缺陷责任期|履约担保|质保金|工期延误|项目经理|技术负责人|分包|转包|付款方式|支付.{0,10}万|[杯奖]|创优|奖项/u,hint:"投标人须知前附表施组响应实质条款(工期/质量/创优奖惩/人员/分包/付款等)"},dateFabricationProhibited:{label:"禁编日期条款",lexical:/开工令|以开工令|不得.{0,12}(?:自定|自行确定|编造)/u,hint:"以开工令为准的禁编日期条款(布尔字段)"},prohibitionNotes:{label:"禁止性要求",lexical:/不得|禁止|严禁|不允许/u,hint:"禁止/不得类条款与零散约束要求"}},J={awardObjectives:{label:"创优目标",lexical:/创优|争创|确保获得|确保.{0,8}[杯奖]|优质工程奖/u},awardClauses:{label:"奖项条款",lexical:/获得.{0,12}[杯奖]|支付.{0,10}万|不予支付|奖项的约定/u},greenBuildingGrade:{label:"绿色建筑等级",lexical:/绿色建筑.{0,20}(?:等级|星级|标准|要求)|[一二三]星级/u},smartSiteGrade:{label:"智慧工地等级",lexical:/智慧工地.{0,20}(?:等级|要求|基本级|优良级|良好级)/u},assemblyRate:{label:"装配率",lexical:/装配率.{0,20}(?:%|不低于|不少于|为|要求)|装配式.{0,20}装配率/u},systematicBenchmarks:{label:"体系基准",lexical:/六个百分百|四节一环保|文明施工专项费用|围挡出入口.{0,12}冲洗|扬尘.{0,12}(?:冲洗|防治|治理)/u},...I},K=["awardObjectives","awardClauses","greenBuildingGrade","smartSiteGrade","assemblyRate","systematicBenchmarks"];function L(a){return J[a].label}function M(a){if(!a)return[...K];let b=[];return 0===a.awardObjectives.length&&b.push("awardObjectives"),0===a.awardClauses.length&&b.push("awardClauses"),a.greenBuildingGrade||b.push("greenBuildingGrade"),a.smartSiteGrade||b.push("smartSiteGrade"),a.assemblyRate||b.push("assemblyRate"),0===a.systematicBenchmarks.length&&b.push("systematicBenchmarks"),b}function N(a){if(!a)return["awardObjectives","specialQualityStandards","awardClauses","greenBuildingGrade","smartSiteGrade","assemblyRate","systematicBenchmarks","frontScheduleClauses","dateFabricationProhibited","prohibitionNotes"];let b=[];return 0===a.awardObjectives.length&&b.push("awardObjectives"),0===a.specialQualityStandards.length&&b.push("specialQualityStandards"),0===a.awardClauses.length&&b.push("awardClauses"),a.greenBuildingGrade||b.push("greenBuildingGrade"),a.smartSiteGrade||b.push("smartSiteGrade"),a.assemblyRate||b.push("assemblyRate"),0===a.systematicBenchmarks.length&&b.push("systematicBenchmarks"),0===a.frontScheduleClauses.length&&b.push("frontScheduleClauses"),a.dateFabricationProhibited||b.push("dateFabricationProhibited"),0===a.prohibitionNotes.length&&b.push("prohibitionNotes"),b}let O={awardObjectives:'"awardObjectives": [{ "text": "创优目标原文", "coreTerms": ["核心词"], "source": "来源文件" }]',awardClauses:'"awardClauses": [{ "text": "条款原文", "coreTerms": [], "source": "..." }]',greenBuildingGrade:'"greenBuildingGrade": { "text": "...", "coreTerms": [], "source": "..." }',smartSiteGrade:'"smartSiteGrade": { "text": "...", "coreTerms": [], "source": "..." }',assemblyRate:'"assemblyRate": { "text": "...", "coreTerms": [], "source": "..." }',systematicBenchmarks:'"systematicBenchmarks": [{ "text": "...", "coreTerms": [], "source": "..." }]',specialQualityStandards:'"specialQualityStandards": [{ "text": "...", "coreTerms": [], "source": "..." }]',frontScheduleClauses:'"frontScheduleClauses": [{ "text": "...", "coreTerms": [], "source": "..." }]',dateFabricationProhibited:'"dateFabricationProhibited": true',prohibitionNotes:'"prohibitionNotes": [{ "text": "...", "coreTerms": [], "source": "..." }]'},P={type:"object",properties:C.properties};async function Q(a,b,c={}){let d=a,e=N(d),f=[];for(let a=0;a<2&&e.length>0;a+=1){let a=new Map;for(let c of e){if(f.includes(c))continue;let d=function(a,b){let c=[];for(let d of a){let a=(0,z.wj)(`${d.sectionTitle||""}
@@ -81,7 +81,7 @@ ${n.slice(0,2e3)}
81
81
  ${e.join("\n")}`)}let e=(a.evaluationCriteriaItems||[]).filter(Boolean);e.length&&b.push(`评标办法技术评审条目:
82
82
  ${e.map(a=>`- ${a}`).join("\n")}`);let f=a.tenderRequirements;if(f&&f.extracted){let a=[],c=(b,c)=>{for(let d of c||[])a.push(`${b}:${d.text}`)};c("创优目标",f.awardObjectives),c("特殊质量标准",f.specialQualityStandards),c("奖项条款",f.awardClauses),f.greenBuildingGrade&&a.push(`绿色建筑等级:${f.greenBuildingGrade.text}`),f.smartSiteGrade&&a.push(`智慧工地等级:${f.smartSiteGrade.text}`),f.assemblyRate&&a.push(`装配率要求:${f.assemblyRate.text}`),c("体系基准",f.systematicBenchmarks),c("禁止性约束",f.prohibitionNotes),f.dateFabricationProhibited&&a.push("禁编日期条款:正文不得自设具体开工/竣工日期"),a.length&&b.push(`招标文件评分项要求:
83
83
  ${a.map(a=>`- ${a}`).join("\n")}`)}let g=(a.factsModel?.bills||[]).slice(0,10).map(a=>`${a.fieldName||a.key} ${a.value}`.replace(/\s+/gu," ").trim()).filter(Boolean);return g.length&&b.push(`工程量清单特征摘要:
84
- ${g.map(a=>`- ${a}`).join("\n")}`),b.join("\n\n")}({factsModel:al,evaluationCriteriaItems:P,tenderRequirements:Q}),diagnostics:v,signal:X,heartbeat:W,onStage:a=>{let b=(0,aI.X5)({type:"llm_review",roleId:"agent-qingtian-review",status:a.status,message:a.message,details:a.details},{subtitle:"全维度评审"});(0,aI.fx)(l,b),(0,aI.fx)(aS,b),V(aC,l)}});aT=ba.reviewed?ba.remainingIssues.map(a=>{let b="否决级"===a.riskLevel||"高风险"===a.riskLevel;return{level:b?"error":"warning",severity:b?"blocker":"warning",repairability:b?"llm_repairable":"not_repair_needed",category:"qingtian_review",owner:"llm",message:`[全维度评审\xb7${a.dimension}\xb7${a.riskLevel}]${a.location?`${a.location}:`:""}${a.description}${a.quote?`(原文:“${a.quote.slice(0,40)}”)`:""}`,suggestion:a.basis}}):[],ba.fixedCount>0?(aD=aE(),await aU()):aT.length>0&&await aU();let bb=(0,a5.qj)(aD);bb!==aD&&(aD=bb,await aU());let bc=function(a){let b=a.split(/\r?\n/u),c=[],d=0,e=0;for(;e<b.length;){if(!/^\s*\|/u.test(b[e])){c.push(b[e]),e+=1;continue}let a=e;for(;a+1<b.length&&/^\s*\|/u.test(b[a+1]);)a+=1;let f=d9(b.slice(e,a+1));f.removed>0&&(d+=1),c.push(...f.lines),e=a+1}return{markdown:c.join("\n"),removed:d}}(aD);bc.markdown!==aD&&(aD=bc.markdown,await aU());let bd=(0,a5.g4)([a=>{let b=(0,a5.br)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}},a=>{let b=(0,a5.Vw)(a);return{markdown:b,fixedCount:+(b!==a)}},a=>{let b=(0,a5.lR)(a);return{markdown:b.markdown,fixedCount:b.removedCount}},a=>{let b=(0,a5.JF)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}},a=>{let b=(0,a5.BR)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}},a=>{let b=(0,a5.ir)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}},a=>{let b=ar(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}],aD,3);bd.markdown!==aD&&(aD=bd.markdown,await aU());let be=(0,a5._D)(aD);be.fixedCount>0&&(aD=be.markdown,await aU());let bf=[{key:"export-gate",label:"导出门禁",passed:(c={exportGate:aR,qualityReport:aP,repairStrategies:aQ}).exportGate.passed,message:c.exportGate.passed?"导出门禁通过":`仍有 ${c.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:c.qualityReport.passed,message:`${c.qualityReport.deliveryProbability}% / ${c.qualityReport.target}%`},{key:"completeness",label:"资料完整性",passed:c.qualityReport.scores.completeness>=85,message:`${c.qualityReport.scores.completeness}/100`},{key:"specificity",label:"方案针对性",passed:c.qualityReport.scores.specificity>=85,message:`${c.qualityReport.scores.specificity}/100`},{key:"compliance",label:"合规性",passed:c.qualityReport.scores.compliance>=80,message:`${c.qualityReport.scores.compliance}/100`},{key:"repair-strategies",label:"修复策略",passed:0===c.repairStrategies.filter(a=>"high"===a.priority).length,message:c.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}],bg=(0,s.Ff)(av);v.quality.blockingCount+=bg.blocking,v.quality.importantCount+=bg.important,v.quality.minorCount+=bg.minor;let bh=function(a){let b=[...a.diagnostics.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>({name:a.name,durationMs:a.durationMs}));return{llmCalls:a.diagnostics.llm.calls,llmFailures:a.diagnostics.llm.failures,maxParallelLlm:a.diagnostics.llm.maxActive,searchQueries:a.diagnostics.evidence.searchQueries,evidenceContextChars:a.diagnostics.evidence.contextChars,qualityIssues:{...a.diagnostics.quality},slowMetrics:b,elapsedMs:a.startedAt&&a.endedAt?a.endedAt-a.startedAt:void 0}}({diagnostics:v}),bi=aR.blockingIssues.length;bh.qualityIssues.blockingCount=bi;let bj=await dT(aC,aD,{templating:aP.templating}),bk=aP.templating?await W(()=>dU({templating:aP.templating,markdown:aD,diagnostics:v,signal:X})):{issues:[],reviewed:!1},bl=[...aB,...aS];bl.push((0,aI.X5)({type:"validation",roleId:"agent-final-gate",status:aR.passed?"success":"failed",message:aR.passed?"Agent 最终门禁通过":`Agent 最终门禁阻断 ${bi} 个问题`,details:aR.blockingIssues.map(a=>a.message)},{subtitle:"Agent 最终门禁"}));let bm=aP.deliveryProbability<70;bl.push((0,aI.X5)({type:"validation",roleId:"document-delivery-score",status:aP.passed?"success":aR.passed?"skipped":"failed",message:aR.passed&&!aP.passed?`${aP.summary}${bm?";置信度低于 70%,建议完成续修后再交付归档":"(导出门禁已通过,作为后续优化建议归档)"}`:aP.summary,details:bm&&aR.passed?[...aP.actions,"续修建议:交付置信度低于 70% 门槛,建议按交付复核清单补齐短板维度后重新生成或续修。"]:aP.actions},{subtitle:"交付评分"})),bl.push((0,aI.X5)({type:"validation",roleId:"document-professional-score",status:"专业"===bj.grade||"良好"===bj.grade?"success":"skipped",message:bj.summary,details:[...bj.dimensions.map(a=>`${a.label}:${a.score} 分(${a.detail})`),...bj.topIssues.map(a=>`待修复:${a}`)]},{subtitle:"专业度评分"})),aP.templating&&"light"!==aP.templating.level&&bl.push((0,aI.X5)({type:"validation",roleId:"document-templating-report",status:"skipped",message:`模板化检测:${"heavy"===aP.templating.level?"重度":"中度"}模板化(套话句占比 ${(100*aP.templating.fillerRatio).toFixed(1)}%,重难点归因+量化双达标占比 ${(100*aP.templating.difficultyCountermeasureRatio).toFixed(0)}%,模糊应答词 ${aP.templating.vagueHitCount} 处)`,details:bk.issues},{subtitle:"模板化检测"})),O&&bl.push((0,aI.X5)({type:"reference",roleId:"document-writing-task-brief",status:"success",message:`写作任务书:${O.documentType},${O.chapters.length} 章任务卡,全局写作焦点 ${O.globalWritingFocus.length} 条`,details:[...O.globalWritingFocus,...O.chapters.slice(0,10).map(a=>`${a.chapterTitle}:覆盖 ${a.mustCover.length} 项`)],subtitle:"写作任务书"})),bl.push((0,aI.X5)({type:"reference",roleId:"knowledge-coverage",status:aK.score>=85?"success":"failed",message:`资料确认覆盖率:${aK.score}%(证据 ${aK.evidenceCount} 条,文件 ${aK.confirmedFiles} 份)`,details:[aK.remediation]},{subtitle:"资料覆盖"})),bl.push((0,aI.X5)({type:"validation",roleId:"document-review-checklist",status:bf.every(a=>a.passed)?"success":aR.passed?"skipped":"failed",message:`交付复核清单:通过 ${bf.filter(a=>a.passed).length}/${bf.length}${aR.passed&&!bf.every(a=>a.passed)?"(导出门禁已通过,其余项作为优化建议归档)":""}`,details:bf.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let bn=[...v.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(","),bo=function(a,b=5){return dB(a,b).map(([a,b])=>`${a} ${b.calls}次/${(b.inputChars/1e4).toFixed(1)}万字`).join(",")}(v.llm.callBreakdown),bt=v.factSanitize?`,事实净化 截断${v.factSanitize.truncated}/丢弃${v.factSanitize.dropped}/编号补全${v.factSanitize.repaired}`:"";bl.push((0,aI.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${v.llm.calls} 次,失败 ${v.llm.failures} 次,瞬态重试 ${v.llm.retries} 次,schema 校验失败 ${v.llm.schemaFailures} 次,峰值并行 ${v.llm.maxActive},检索 ${v.evidence.searchQueries} 次/${Math.round(v.evidence.searchMs/1e3)} 秒,证据上下文 ${v.evidence.contextChars} 字,噪声过滤 ${v.evidence.filteredNoise} 条,预算裁剪 ${v.evidence.budgetDropped} 条,质量问题 阻断${v.quality.blockingCount}/重要${v.quality.importantCount}/轻微${v.quality.minorCount}${bt}${bn?`,Top耗时:${bn}`:""}${bo?`,调用输入Top5:${bo}`:""}`,details:[...v.metrics.filter(a=>a.name.startsWith("phase:")).sort((a,b)=>a.startedAt-b.startedAt).map(a=>`${a.name}:${(a.durationMs/1e3).toFixed(1)} 秒`),...function(a,b=5){return dB(a,b).map(([a,b])=>{let c=b.cacheHitTokens+b.cacheMissTokens,d=c>0?`,缓存命中 ${Math.round(b.cacheHitTokens/c*100)}%(${b.cacheHitTokens}/${c} token)`:"";return`${a}:${b.calls} 次,输入 ${(b.inputChars/1e4).toFixed(1)} 万字(L3 ${(b.l3Chars/1e4).toFixed(1)} 万字)${d}`})}(v.llm.callBreakdown)]},{subtitle:"后台诊断"}));let bu=aC.map(a=>({...a,evidence:(0,n.QR)(a.evidence||[],{preservePinned:!0})}));return aC=bu,{templateId:i.id,templateName:i.name,title:i.outputTitle,requirement:Y||"",projectRoot:B,projectId:C,exportSettings:i.exportSettings,generationSettings:i.generationSettings,facts:ab,structuredFacts:aj,factsModel:al,chapters:bu,sources:at,missingItems:[...new Set(G)],validation:as,validationIssues:av,exportGate:aR,executionStages:bl,assets:az,partialChapters:aC.map(a=>({id:a.id,title:a.title,chars:(0,r.V7)(a.content),status:cS(a,t.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:bu,promptRules:y,agentWorkflow:L,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:v,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:i,chapters:h,requirement:Y}),knowledgeCoverage:aK,factTraces:aL,chapterCoverage:aN,retrievalCoverage:H,qualityReport:aP,repairStrategies:aQ,reviewChecklist:bf,professionalScore:bj,templatingReviewIssues:bk.issues,writingTaskBrief:O,workflowVersion:cw.x,telemetry:bh,qualityBenchmark:await cu(aD)},generatedAt:Date.now(),markdown:aD}}var ee=c(70963),ef=c(25284),eg=c(30355);function eh(a){return a.replace(/\s+/gu,"").toLowerCase()}var ei=c(14070),ej=c(48017);let ek=/两可|按图纸|资料[^。;;\n]{0,14}(?:未明确|两可|冲突)|支护[^。;;\n]{0,10}并存/u;async function el(a){let{chapterDraftsFinal:b,progressStages:c,emitProgress:d}=a,e=a.globalConsistencyIssues,f=b.map(a=>a.content).join("\n\n"),g=(0,a5.t1)(f),h=await (0,v.Mv)(g.sentences,g.overviewBody?[g.overviewBody]:[]),i=0,j=0,k=0;for(let a of b){let b=a.content.split(/\r?\n/u).length,c=(0,a5.lR)(a.content),d=(0,a5.Vc)(c.markdown),e=(0,a5.U$)(d.markdown,h),f=b-e.split(/\r?\n/u).length;f>0&&(i+=c.removedCount,j+=d.removedCount,k+=f-c.removedCount-d.removedCount,a.content=e)}if(i>0||j>0||k>0){let a=b.map(a=>a.content).join("\n\n"),f=[...(0,a5.ub)(a),...(0,a5.cl)(a),...(0,a5.l4)(a,{semanticSimilarity:h})].map(a=>`${a.message};${a.suggestion||""}`);e=[...new Set([...e.filter(a=>!/表格重复|段落完全重复|概况复述/u.test(a)),...f])];let g=[i>0?`重复表格 ${i} 行`:"",j>0?`重复段落 ${j} 行`:"",k>0?`概况复述句 ${k} 行`:""].filter(Boolean).join("、");(0,aI.fx)(c,(0,aI.X5)({type:"llm_review",roleId:"post-table-dedup",status:"success",message:`补表后确定性去重:${g}`},{subtitle:"表格执行率核验"})),d(b)}let l=await (0,a5.yR)(b);if(l>0){let a=(await (0,a5.LF)(b)).map(a=>`${a.message};${a.suggestion||""}`);e=[...new Set([...e.filter(a=>!/跨章语义重复/u.test(a)),...a])],(0,aI.fx)(c,(0,aI.X5)({type:"llm_review",roleId:"post-table-semantic-dedup",status:"success",message:`补表后语义重复 strip:删除雷同段 ${l} 段`},{subtitle:"表格执行率核验"})),d(b)}return e}async function em(a){let{effectiveChapters:b,chapterDraftsFinal:c,template:d,repairPromptTexts:e,requirement:f,signal:g,generationDiagnostics:h,progressStages:i,emitProgress:j,withProgressHeartbeat:k}=a,l=(0,aF.Xi)(b,c),m=!1;if(l.length>0)for(let a=0;a<1&&l.length>0;a+=1){(0,aI.fx)(i,(0,aI.X5)({type:"llm_review",roleId:"table-execution-repair",status:"running",message:`表格执行率修复第 ${a+1} 轮(${l.length} 个章节缺表)`},{subtitle:"表格执行率修复"})),j(c);let n=0,o=[],p=l.flatMap(a=>{let b=c.find(b=>b.title===a.chapterTitle||a.chapterTitle.includes(b.title)||b.title.includes(a.chapterTitle));return b?[{gap:a,draft:b}]:[]}),q=async a=>{let{gap:b,draft:c}=a,i=[...new Set(b.plans.map(a=>a.moduleTitle).filter(Boolean))],j=i.length>0?c.evidence.filter(a=>{let b=a.sectionTitle;return!b||i.some(a=>b===a||b.includes(a)||a.includes(b))}):c.evidence,l={id:c.id,title:c.title,content:c.content,evidence:j.length?j:c.evidence,missingFacts:c.missingFacts||[],sections:c.sections},m=`计划表格缺失(计划 ${b.planned} 张,实际仅 ${b.actual} 张):${b.plans.map(a=>`${a.title}(表头:${a.fields.map(a=>a.name).join("、")})`).join(";")}。必须按表头字段补齐这些 markdown 表格并紧跟相关小节输出,不得删除已有正文;每个表格前须有 1~2 句引导叙述说明表格作用与关键结论,表格不能替代小节正文;deriveFromProject 字段基于项目工程量、总工期与工序流水按定额工效推导具体数值,projectFactOnly 字段不得编造。`;return await k(()=>(0,aJ.X6)(h,`table-execution-repair:${c.id}`,()=>(0,aJ.l8)({template:d,chapter:l,issues:[m],promptTexts:e,requirement:f,forbidDrawingImages:!0,diagnostics:h,signal:g,maxTokens:Math.min(12e3,Math.max(6e3,1200*b.plans.length))})))},r=await Promise.allSettled(p.map(a=>q(a))),s=new Set;if(r.forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;o.push(`${p[b].gap.chapterTitle}:修复异常(${a.reason instanceof Error?a.reason.message:"未知错误"})`);return}let c=a.value,{gap:d,draft:e}=p[b];c.content&&c.content!==e.content&&!s.has(e.id)?(e.content=c.content,s.add(e.id),n+=1):s.has(e.id)||o.push(`${d.chapterTitle}:缺 ${d.plans.map(a=>a.title).join("、")}(${h?.llm.lastError||"补表 patch 未应用"})`)}),0===n){(0,aI.fx)(i,(0,aI.X5)({type:"llm_review",roleId:"table-execution-repair",status:"failed",message:`表格执行率修复第 ${a+1} 轮:补表 patch 未应用(${l.length} 个章节缺表)`,details:o},{subtitle:"表格执行率修复"})),j(c);break}m=!0,j(c),l=(0,aF.Xi)(b,c),(0,aI.fx)(i,(0,aI.X5)({type:"llm_review",roleId:"table-execution-repair",status:l.length>0?"failed":"success",message:l.length>0?`表格执行率修复第 ${a+1} 轮完成,仍有 ${l.length} 个章节缺表`:`表格执行率修复第 ${a+1} 轮完成`},{subtitle:"表格执行率修复"})),(0,aI.fx)(i,(0,aI.X5)({type:"llm_review",roleId:"table-execution-review",status:l.length>0?"failed":"success",message:l.length>0?`表格执行率复检:仍有 ${l.length} 个章节缺表`:"表格执行率复检通过"},{subtitle:"表格执行率核验"}))}return{tableFixApplied:m}}async function en(a){let{chapterDraftsFinal:b,template:c,repairPromptTexts:d,requirement:e,signal:f,generationDiagnostics:g,progressStages:h,emitProgress:i,withProgressHeartbeat:j}=a,k=!1;for(let a=0;a<2;a+=1){let l=b.map(a=>a.content).join("\n\n"),m=await (0,cg.Bt)(l),n=await (0,cg.gE)(l),o=m.ratio>=.1||m.vagueSemanticSentences>0,p=n.countermeasures>0&&n.ratio<.5;if(!o&&!p)break;let q=o?await dN(b):[],r=(p?n.entries.filter(a=>!a.attributed||!a.quantified).slice(0,20):[]).flatMap(a=>{let c=a.text.replace(/\s+/gu,""),d=b.find(a=>a.content.replace(/\s+/gu,"").includes(c));return d?[{chapter:d,text:a.text,missingAttribution:!a.attributed,missingTarget:!a.quantified}]:[]}),s=b.flatMap(a=>{let b=q.filter(b=>(b.chapterId||b.chapterTitle)===(a.id||a.title)).map(a=>a.sentence),c=r.filter(b=>b.chapter.id===a.id).map(a=>({text:a.text,missingAttribution:a.missingAttribution,missingTarget:a.missingTarget}));return b.length>0||c.length>0?[{chapter:a,sentences:b,difficulty:c}]:[]});if(0===s.length)break;(0,aI.fx)(h,(0,aI.X5)({type:"llm_review",roleId:"templating-repair",status:"running",message:`模板化修复第 ${a+1} 轮:套话句占比 ${(100*m.ratio).toFixed(1)}%,重难点双达标 ${(100*n.ratio).toFixed(0)}%(${s.length} 章)`},{subtitle:"模板化修复"})),i(b);let t=0,u=async a=>{let b=[];a.sentences.length>0&&b.push(`第 1~${a.sentences.length} 条目标原文是本章已检出的空话套话句:逐条删除,或改写为“责任岗位 + 执行动作 + 量化标准 + 检查频次 + 整改时限”的具体措施表述;改写必须使用本章证据摘要中的项目事实与量化数据,不得凭空编造数值;属必须保留的合规承诺句可保留但须具体化到可核查。`);let h=a.sentences.length+1;for(let c of a.difficulty){let a=[c.missingAttribution?"归因句(该难点的成因/风险来源)":"",c.missingTarget?"量化控制目标(数值+单位,来自本章证据摘要或行业规范,不得编造)":""].filter(Boolean).join("与");b.push(`第 ${h} 条目标原文是重难点分析条目,缺少${c.missingAttribution&&c.missingTarget?"成因归因与量化控制目标":a}:保留条目原有事实与数值,在其内补充${a}。`),h+=1}return b.push("清单之外的内容一律不得改动;不得删除任何小节标题、表格与数值参数。"),j(()=>(0,aJ.X6)(g,`templating-repair:${a.chapter.id}`,()=>(0,aJ.l8)({template:c,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[b.join("\n")],promptTexts:d,requirement:e,forbidDrawingImages:!0,diagnostics:g,signal:f,anchorTexts:[...a.sentences,...a.difficulty.map(a=>a.text)],maxTokens:6e3})))};if((await Promise.allSettled(s.map(a=>u(a)))).forEach((a,b)=>{if("rejected"===a.status){if(f?.aborted)throw a.reason;console.error("[gen] templating repair failed:",a.reason);return}let c=a.value,{chapter:d}=s[b];c.content&&c.content!==d.content&&(d.content=c.content,t+=1)}),i(b),0===t){(0,aI.fx)(h,(0,aI.X5)({type:"llm_review",roleId:"templating-repair",status:"failed",message:`模板化修复第 ${a+1} 轮:修复 patch 未落地(${s.length} 章锚点失配或 LLM 未产出)`,details:[`套话句占比 ${(100*m.ratio).toFixed(1)}% 未收敛,重难点双达标 ${(100*n.ratio).toFixed(0)}%`]},{subtitle:"模板化修复"}));break}k=!0}if(k){let a=b.map(a=>a.content).join("\n\n"),c=await (0,cg.Bt)(a),d=await (0,cg.gE)(a),e=c.ratio<.1&&(!d.heavyTemplated||0===d.countermeasures);(0,aI.fx)(h,(0,aI.X5)({type:"llm_review",roleId:"templating-repair",status:e?"success":"failed",message:`模板化修复完成:套话句占比 ${(100*c.ratio).toFixed(1)}%(达标线 ≤10%),重难点归因+量化双达标 ${(100*d.ratio).toFixed(0)}%(达标线 ≥50%)`,details:e?[]:["未完全收敛:残留套话/缺要素条目由评分侧展示,不阻断交付"]},{subtitle:"模板化修复"})),i(b)}return{templatingFixApplied:k}}async function eo(a){let{chapterDraftsFinal:b,projectContext:c,template:d,repairPromptTexts:e,requirement:f,signal:g,generationDiagnostics:h,progressStages:i,emitProgress:j,withProgressHeartbeat:k}=a,l=/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目主要施工\s*内容|主要施工\s*内容|主要分部分项工程施工方案|主要分部分项施工方案|主要施工方法)\s*$/u,m=!1,n=0,o=0,p=(0,a8.sh)(c,b.flatMap(a=>a.evidence||[]));if(p.length>0){let a=/项目主要施工内容|主要施工内容|主要分部分项工程施工方案|主要分部分项施工方案|主要施工方法/u;for(let c of b){if(c.content.split("\n").some(a=>l.test(a.trim())))continue;let d=(c.sections||[]).find(b=>a.test(b));if(!d)continue;Array.isArray(c.sections)||(c.sections=[]);let e=c.sections.findIndex(b=>a.test(b)),f=e>=0?e+1:c.sections.length+1,g=`### ${b.indexOf(c)+1}.${f} ${d}`;c.content=`${c.content.replace(/\s+$/u,"")}
84
+ ${g.map(a=>`- ${a}`).join("\n")}`),b.join("\n\n")}({factsModel:al,evaluationCriteriaItems:P,tenderRequirements:Q}),diagnostics:v,signal:X,heartbeat:W,onStage:a=>{let b=(0,aI.X5)({type:"llm_review",roleId:"agent-qingtian-review",status:a.status,message:a.message,details:a.details},{subtitle:"全维度评审"});(0,aI.fx)(l,b),(0,aI.fx)(aS,b),V(aC,l)}});aT=ba.reviewed?ba.remainingIssues.map(a=>{let b="否决级"===a.riskLevel||"高风险"===a.riskLevel;return{level:b?"error":"warning",severity:b?"blocker":"warning",repairability:b?"llm_repairable":"not_repair_needed",category:"qingtian_review",owner:"llm",message:`[全维度评审\xb7${a.dimension}\xb7${a.riskLevel}]${a.location?`${a.location}:`:""}${a.description}${a.quote?`(原文:“${a.quote.slice(0,40)}”)`:""}`,suggestion:a.basis}}):[],ba.fixedCount>0?(aD=aE(),await aU()):aT.length>0&&await aU();let bb=(0,a5.qj)(aD);bb!==aD&&(aD=bb,await aU());let bc=function(a){let b=a.split(/\r?\n/u),c=[],d=0,e=0;for(;e<b.length;){if(!/^\s*\|/u.test(b[e])){c.push(b[e]),e+=1;continue}let a=e;for(;a+1<b.length&&/^\s*\|/u.test(b[a+1]);)a+=1;let f=d9(b.slice(e,a+1));f.removed>0&&(d+=1),c.push(...f.lines),e=a+1}return{markdown:c.join("\n"),removed:d}}(aD);bc.markdown!==aD&&(aD=bc.markdown,await aU());let bd=(0,a5.g4)([a=>{let b=(0,a5.br)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}},a=>{let b=(0,a5.Vw)(a);return{markdown:b,fixedCount:+(b!==a)}},a=>{let b=(0,a5.lR)(a);return{markdown:b.markdown,fixedCount:b.removedCount}},a=>{let b=(0,a5.JF)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}},a=>{let b=(0,a5.BR)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}},a=>{let b=(0,a5.ir)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}},a=>{let b=ar(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}],aD,3);bd.markdown!==aD&&(aD=bd.markdown,await aU());let be=(0,a5._D)(aD);be.fixedCount>0&&(aD=be.markdown,await aU());let bf=[{key:"export-gate",label:"导出门禁",passed:(c={exportGate:aR,qualityReport:aP,repairStrategies:aQ}).exportGate.passed,message:c.exportGate.passed?"导出门禁通过":`仍有 ${c.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:c.qualityReport.passed,message:`${c.qualityReport.deliveryProbability}% / ${c.qualityReport.target}%`},{key:"completeness",label:"资料完整性",passed:c.qualityReport.scores.completeness>=85,message:`${c.qualityReport.scores.completeness}/100`},{key:"specificity",label:"方案针对性",passed:c.qualityReport.scores.specificity>=85,message:`${c.qualityReport.scores.specificity}/100`},{key:"compliance",label:"合规性",passed:c.qualityReport.scores.compliance>=80,message:`${c.qualityReport.scores.compliance}/100`},{key:"repair-strategies",label:"修复策略",passed:0===c.repairStrategies.filter(a=>"high"===a.priority).length,message:c.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}],bg=(0,s.Ff)(av);v.quality.blockingCount+=bg.blocking,v.quality.importantCount+=bg.important,v.quality.minorCount+=bg.minor;let bh=function(a){let b=[...a.diagnostics.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>({name:a.name,durationMs:a.durationMs}));return{llmCalls:a.diagnostics.llm.calls,llmFailures:a.diagnostics.llm.failures,maxParallelLlm:a.diagnostics.llm.maxActive,searchQueries:a.diagnostics.evidence.searchQueries,evidenceContextChars:a.diagnostics.evidence.contextChars,qualityIssues:{...a.diagnostics.quality},slowMetrics:b,elapsedMs:a.startedAt&&a.endedAt?a.endedAt-a.startedAt:void 0}}({diagnostics:v}),bi=aR.blockingIssues.length;bh.qualityIssues.blockingCount=bi;let bj=await dT(aC,aD,{templating:aP.templating}),bk=aP.templating?await W(()=>dU({templating:aP.templating,markdown:aD,diagnostics:v,signal:X})):{issues:[],reviewed:!1},bl=[...aB,...aS];bl.push((0,aI.X5)({type:"validation",roleId:"agent-final-gate",status:aR.passed?"success":"failed",message:aR.passed?"Agent 最终门禁通过":`Agent 最终门禁阻断 ${bi} 个问题`,details:aR.blockingIssues.map(a=>a.message)},{subtitle:"Agent 最终门禁"}));let bm=aP.deliveryProbability<70;bl.push((0,aI.X5)({type:"validation",roleId:"document-delivery-score",status:aP.passed?"success":aR.passed?"skipped":"failed",message:aR.passed&&!aP.passed?`${aP.summary}${bm?";置信度低于 70%,建议完成续修后再交付归档":"(导出门禁已通过,作为后续优化建议归档)"}`:aP.summary,details:bm&&aR.passed?[...aP.actions,"续修建议:交付置信度低于 70% 门槛,建议按交付复核清单补齐短板维度后重新生成或续修。"]:aP.actions},{subtitle:"交付评分"})),bl.push((0,aI.X5)({type:"validation",roleId:"document-professional-score",status:"专业"===bj.grade||"良好"===bj.grade?"success":"skipped",message:bj.summary,details:[...bj.dimensions.map(a=>`${a.label}:${a.score} 分(${a.detail})`),...bj.topIssues.map(a=>`待修复:${a}`)]},{subtitle:"专业度评分"})),aP.templating&&"light"!==aP.templating.level&&bl.push((0,aI.X5)({type:"validation",roleId:"document-templating-report",status:"skipped",message:`模板化检测:${"heavy"===aP.templating.level?"重度":"中度"}模板化(套话句占比 ${(100*aP.templating.fillerRatio).toFixed(1)}%,重难点归因+量化双达标占比 ${(100*aP.templating.difficultyCountermeasureRatio).toFixed(0)}%,模糊应答词 ${aP.templating.vagueHitCount} 处)`,details:bk.issues},{subtitle:"模板化检测"})),O&&bl.push((0,aI.X5)({type:"reference",roleId:"document-writing-task-brief",status:"success",message:`写作任务书:${O.documentType},${O.chapters.length} 章任务卡,全局写作焦点 ${O.globalWritingFocus.length} 条`,details:[...O.globalWritingFocus,...O.chapters.slice(0,10).map(a=>`${a.chapterTitle}:覆盖 ${a.mustCover.length} 项`)],subtitle:"写作任务书"})),bl.push((0,aI.X5)({type:"reference",roleId:"knowledge-coverage",status:aK.score>=85?"success":"failed",message:`资料确认覆盖率:${aK.score}%(证据 ${aK.evidenceCount} 条,文件 ${aK.confirmedFiles} 份)`,details:[aK.remediation]},{subtitle:"资料覆盖"})),bl.push((0,aI.X5)({type:"validation",roleId:"document-review-checklist",status:bf.every(a=>a.passed)?"success":aR.passed?"skipped":"failed",message:`交付复核清单:通过 ${bf.filter(a=>a.passed).length}/${bf.length}${aR.passed&&!bf.every(a=>a.passed)?"(导出门禁已通过,其余项作为优化建议归档)":""}`,details:bf.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let bn=[...v.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(","),bo=function(a,b=5){return dB(a,b).map(([a,b])=>`${a} ${b.calls}次/${(b.inputChars/1e4).toFixed(1)}万字`).join(",")}(v.llm.callBreakdown),bt=v.factSanitize?`,事实净化 截断${v.factSanitize.truncated}/丢弃${v.factSanitize.dropped}/编号补全${v.factSanitize.repaired}`:"";bl.push((0,aI.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${v.llm.calls} 次,失败 ${v.llm.failures} 次,瞬态重试 ${v.llm.retries} 次,schema 校验失败 ${v.llm.schemaFailures} 次,峰值并行 ${v.llm.maxActive},检索 ${v.evidence.searchQueries} 次/${Math.round(v.evidence.searchMs/1e3)} 秒,证据上下文 ${v.evidence.contextChars} 字,噪声过滤 ${v.evidence.filteredNoise} 条,预算裁剪 ${v.evidence.budgetDropped} 条,质量问题 阻断${v.quality.blockingCount}/重要${v.quality.importantCount}/轻微${v.quality.minorCount}${bt}${bn?`,Top耗时:${bn}`:""}${bo?`,调用输入Top5:${bo}`:""}`,details:[...v.metrics.filter(a=>a.name.startsWith("phase:")).sort((a,b)=>a.startedAt-b.startedAt).map(a=>`${a.name}:${(a.durationMs/1e3).toFixed(1)} 秒`),...function(a,b=5){return dB(a,b).map(([a,b])=>{let c=b.cacheHitTokens+b.cacheMissTokens,d=c>0?`,缓存命中 ${Math.round(b.cacheHitTokens/c*100)}%(${b.cacheHitTokens}/${c} token)`:"";return`${a}:${b.calls} 次,输入 ${(b.inputChars/1e4).toFixed(1)} 万字(L3 ${(b.l3Chars/1e4).toFixed(1)} 万字)${d}`})}(v.llm.callBreakdown)]},{subtitle:"后台诊断"}));let bu=aC.map(a=>({...a,evidence:(0,n.QR)(a.evidence||[],{preservePinned:!0})}));return aC=bu,{templateId:i.id,templateName:i.name,title:i.outputTitle,requirement:Y||"",projectRoot:B,projectId:C,exportSettings:i.exportSettings,generationSettings:i.generationSettings,facts:ab,structuredFacts:aj,factsModel:al,chapters:bu,sources:at,missingItems:[...new Set(G)],validation:as,validationIssues:av,exportGate:aR,executionStages:bl,assets:az,partialChapters:aC.map(a=>({id:a.id,title:a.title,chars:(0,r.V7)(a.content),status:cS(a,t.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:bu,promptRules:y,agentWorkflow:L,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:v,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:i,chapters:h,requirement:Y}),knowledgeCoverage:aK,factTraces:aL,chapterCoverage:aN,retrievalCoverage:H,qualityReport:aP,repairStrategies:aQ,reviewChecklist:bf,professionalScore:bj,templatingReviewIssues:bk.issues,writingTaskBrief:O,workflowVersion:cw.x,telemetry:bh,qualityBenchmark:await cu(aD)},generatedAt:Date.now(),markdown:aD}}var ee=c(70963),ef=c(25284),eg=c(30355);function eh(a){return a.replace(/\s+/gu,"").toLowerCase()}var ei=c(14070);let ej=/两可|按图纸|资料[^。;;\n]{0,14}(?:未明确|两可|冲突)|支护[^。;;\n]{0,10}并存/u;async function ek(a){let{chapterDraftsFinal:b,progressStages:c,emitProgress:d}=a,e=a.globalConsistencyIssues,f=b.map(a=>a.content).join("\n\n"),g=(0,a5.t1)(f),h=await (0,v.Mv)(g.sentences,g.overviewBody?[g.overviewBody]:[]),i=0,j=0,k=0;for(let a of b){let b=a.content.split(/\r?\n/u).length,c=(0,a5.lR)(a.content),d=(0,a5.Vc)(c.markdown),e=(0,a5.U$)(d.markdown,h),f=b-e.split(/\r?\n/u).length;f>0&&(i+=c.removedCount,j+=d.removedCount,k+=f-c.removedCount-d.removedCount,a.content=e)}if(i>0||j>0||k>0){let a=b.map(a=>a.content).join("\n\n"),f=[...(0,a5.ub)(a),...(0,a5.cl)(a),...(0,a5.l4)(a,{semanticSimilarity:h})].map(a=>`${a.message};${a.suggestion||""}`);e=[...new Set([...e.filter(a=>!/表格重复|段落完全重复|概况复述/u.test(a)),...f])];let g=[i>0?`重复表格 ${i} 行`:"",j>0?`重复段落 ${j} 行`:"",k>0?`概况复述句 ${k} 行`:""].filter(Boolean).join("、");(0,aI.fx)(c,(0,aI.X5)({type:"llm_review",roleId:"post-table-dedup",status:"success",message:`补表后确定性去重:${g}`},{subtitle:"表格执行率核验"})),d(b)}let l=await (0,a5.yR)(b);if(l>0){let a=(await (0,a5.LF)(b)).map(a=>`${a.message};${a.suggestion||""}`);e=[...new Set([...e.filter(a=>!/跨章语义重复/u.test(a)),...a])],(0,aI.fx)(c,(0,aI.X5)({type:"llm_review",roleId:"post-table-semantic-dedup",status:"success",message:`补表后语义重复 strip:删除雷同段 ${l} 段`},{subtitle:"表格执行率核验"})),d(b)}return e}async function el(a){let{effectiveChapters:b,chapterDraftsFinal:c,template:d,repairPromptTexts:e,requirement:f,signal:g,generationDiagnostics:h,progressStages:i,emitProgress:j,withProgressHeartbeat:k}=a,l=(0,aF.Xi)(b,c),m=!1;if(l.length>0)for(let a=0;a<1&&l.length>0;a+=1){(0,aI.fx)(i,(0,aI.X5)({type:"llm_review",roleId:"table-execution-repair",status:"running",message:`表格执行率修复第 ${a+1} 轮(${l.length} 个章节缺表)`},{subtitle:"表格执行率修复"})),j(c);let n=0,o=[],p=l.flatMap(a=>{let b=c.find(b=>b.title===a.chapterTitle||a.chapterTitle.includes(b.title)||b.title.includes(a.chapterTitle));return b?[{gap:a,draft:b}]:[]}),q=async a=>{let{gap:b,draft:c}=a,i=[...new Set(b.plans.map(a=>a.moduleTitle).filter(Boolean))],j=i.length>0?c.evidence.filter(a=>{let b=a.sectionTitle;return!b||i.some(a=>b===a||b.includes(a)||a.includes(b))}):c.evidence,l={id:c.id,title:c.title,content:c.content,evidence:j.length?j:c.evidence,missingFacts:c.missingFacts||[],sections:c.sections},m=`计划表格缺失(计划 ${b.planned} 张,实际仅 ${b.actual} 张):${b.plans.map(a=>`${a.title}(表头:${a.fields.map(a=>a.name).join("、")})`).join(";")}。必须按表头字段补齐这些 markdown 表格并紧跟相关小节输出,不得删除已有正文;每个表格前须有 1~2 句引导叙述说明表格作用与关键结论,表格不能替代小节正文;deriveFromProject 字段基于项目工程量、总工期与工序流水按定额工效推导具体数值,projectFactOnly 字段不得编造。`;return await k(()=>(0,aJ.X6)(h,`table-execution-repair:${c.id}`,()=>(0,aJ.l8)({template:d,chapter:l,issues:[m],promptTexts:e,requirement:f,forbidDrawingImages:!0,diagnostics:h,signal:g,maxTokens:Math.min(12e3,Math.max(6e3,1200*b.plans.length))})))},r=await Promise.allSettled(p.map(a=>q(a))),s=new Set;if(r.forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;o.push(`${p[b].gap.chapterTitle}:修复异常(${a.reason instanceof Error?a.reason.message:"未知错误"})`);return}let c=a.value,{gap:d,draft:e}=p[b];c.content&&c.content!==e.content&&!s.has(e.id)?(e.content=c.content,s.add(e.id),n+=1):s.has(e.id)||o.push(`${d.chapterTitle}:缺 ${d.plans.map(a=>a.title).join("、")}(${h?.llm.lastError||"补表 patch 未应用"})`)}),0===n){(0,aI.fx)(i,(0,aI.X5)({type:"llm_review",roleId:"table-execution-repair",status:"failed",message:`表格执行率修复第 ${a+1} 轮:补表 patch 未应用(${l.length} 个章节缺表)`,details:o},{subtitle:"表格执行率修复"})),j(c);break}m=!0,j(c),l=(0,aF.Xi)(b,c),(0,aI.fx)(i,(0,aI.X5)({type:"llm_review",roleId:"table-execution-repair",status:l.length>0?"failed":"success",message:l.length>0?`表格执行率修复第 ${a+1} 轮完成,仍有 ${l.length} 个章节缺表`:`表格执行率修复第 ${a+1} 轮完成`},{subtitle:"表格执行率修复"})),(0,aI.fx)(i,(0,aI.X5)({type:"llm_review",roleId:"table-execution-review",status:l.length>0?"failed":"success",message:l.length>0?`表格执行率复检:仍有 ${l.length} 个章节缺表`:"表格执行率复检通过"},{subtitle:"表格执行率核验"}))}return{tableFixApplied:m}}async function em(a){let{chapterDraftsFinal:b,template:c,repairPromptTexts:d,requirement:e,signal:f,generationDiagnostics:g,progressStages:h,emitProgress:i,withProgressHeartbeat:j}=a,k=!1;for(let a=0;a<2;a+=1){let l=b.map(a=>a.content).join("\n\n"),m=await (0,cg.Bt)(l),n=await (0,cg.gE)(l),o=m.ratio>=.1||m.vagueSemanticSentences>0,p=n.countermeasures>0&&n.ratio<.5;if(!o&&!p)break;let q=o?await dN(b):[],r=(p?n.entries.filter(a=>!a.attributed||!a.quantified).slice(0,20):[]).flatMap(a=>{let c=a.text.replace(/\s+/gu,""),d=b.find(a=>a.content.replace(/\s+/gu,"").includes(c));return d?[{chapter:d,text:a.text,missingAttribution:!a.attributed,missingTarget:!a.quantified}]:[]}),s=b.flatMap(a=>{let b=q.filter(b=>(b.chapterId||b.chapterTitle)===(a.id||a.title)).map(a=>a.sentence),c=r.filter(b=>b.chapter.id===a.id).map(a=>({text:a.text,missingAttribution:a.missingAttribution,missingTarget:a.missingTarget}));return b.length>0||c.length>0?[{chapter:a,sentences:b,difficulty:c}]:[]});if(0===s.length)break;(0,aI.fx)(h,(0,aI.X5)({type:"llm_review",roleId:"templating-repair",status:"running",message:`模板化修复第 ${a+1} 轮:套话句占比 ${(100*m.ratio).toFixed(1)}%,重难点双达标 ${(100*n.ratio).toFixed(0)}%(${s.length} 章)`},{subtitle:"模板化修复"})),i(b);let t=0,u=async a=>{let b=[];a.sentences.length>0&&b.push(`第 1~${a.sentences.length} 条目标原文是本章已检出的空话套话句:逐条删除,或改写为“责任岗位 + 执行动作 + 量化标准 + 检查频次 + 整改时限”的具体措施表述;改写必须使用本章证据摘要中的项目事实与量化数据,不得凭空编造数值;属必须保留的合规承诺句可保留但须具体化到可核查。`);let h=a.sentences.length+1;for(let c of a.difficulty){let a=[c.missingAttribution?"归因句(该难点的成因/风险来源)":"",c.missingTarget?"量化控制目标(数值+单位,来自本章证据摘要或行业规范,不得编造)":""].filter(Boolean).join("与");b.push(`第 ${h} 条目标原文是重难点分析条目,缺少${c.missingAttribution&&c.missingTarget?"成因归因与量化控制目标":a}:保留条目原有事实与数值,在其内补充${a}。`),h+=1}return b.push("清单之外的内容一律不得改动;不得删除任何小节标题、表格与数值参数。"),j(()=>(0,aJ.X6)(g,`templating-repair:${a.chapter.id}`,()=>(0,aJ.l8)({template:c,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[b.join("\n")],promptTexts:d,requirement:e,forbidDrawingImages:!0,diagnostics:g,signal:f,anchorTexts:[...a.sentences,...a.difficulty.map(a=>a.text)],maxTokens:6e3})))};if((await Promise.allSettled(s.map(a=>u(a)))).forEach((a,b)=>{if("rejected"===a.status){if(f?.aborted)throw a.reason;console.error("[gen] templating repair failed:",a.reason);return}let c=a.value,{chapter:d}=s[b];c.content&&c.content!==d.content&&(d.content=c.content,t+=1)}),i(b),0===t){(0,aI.fx)(h,(0,aI.X5)({type:"llm_review",roleId:"templating-repair",status:"failed",message:`模板化修复第 ${a+1} 轮:修复 patch 未落地(${s.length} 章锚点失配或 LLM 未产出)`,details:[`套话句占比 ${(100*m.ratio).toFixed(1)}% 未收敛,重难点双达标 ${(100*n.ratio).toFixed(0)}%`]},{subtitle:"模板化修复"}));break}k=!0}if(k){let a=b.map(a=>a.content).join("\n\n"),c=await (0,cg.Bt)(a),d=await (0,cg.gE)(a),e=c.ratio<.1&&(!d.heavyTemplated||0===d.countermeasures);(0,aI.fx)(h,(0,aI.X5)({type:"llm_review",roleId:"templating-repair",status:e?"success":"failed",message:`模板化修复完成:套话句占比 ${(100*c.ratio).toFixed(1)}%(达标线 ≤10%),重难点归因+量化双达标 ${(100*d.ratio).toFixed(0)}%(达标线 ≥50%)`,details:e?[]:["未完全收敛:残留套话/缺要素条目由评分侧展示,不阻断交付"]},{subtitle:"模板化修复"})),i(b)}return{templatingFixApplied:k}}async function en(a){let{chapterDraftsFinal:b,projectContext:c,template:d,repairPromptTexts:e,requirement:f,signal:g,generationDiagnostics:h,progressStages:i,emitProgress:j,withProgressHeartbeat:k}=a,l=/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目主要施工\s*内容|主要施工\s*内容|主要分部分项工程施工方案|主要分部分项施工方案|主要施工方法)\s*$/u,m=!1,n=0,o=0,p=(0,a8.sh)(c,b.flatMap(a=>a.evidence||[]));if(p.length>0){let a=/项目主要施工内容|主要施工内容|主要分部分项工程施工方案|主要分部分项施工方案|主要施工方法/u;for(let c of b){if(c.content.split("\n").some(a=>l.test(a.trim())))continue;let d=(c.sections||[]).find(b=>a.test(b));if(!d)continue;Array.isArray(c.sections)||(c.sections=[]);let e=c.sections.findIndex(b=>a.test(b)),f=e>=0?e+1:c.sections.length+1,g=`### ${b.indexOf(c)+1}.${f} ${d}`;c.content=`${c.content.replace(/\s+$/u,"")}
85
85
 
86
86
  ${g}
87
87
  `,m=!0}let c=b.some(a=>a.content.split("\n").some(a=>l.test(a.trim()))),d=b.some(b=>(b.sections||[]).some(b=>a.test(b)));if(!c&&!d){let a=b.find(a=>/整体理解|工程概况|项目理解|招标范围|编制边界|现场踏勘|施工界面|主要施工方法|施工方案/u.test(a.title))||b[0];if(a){let c=b.indexOf(a);Array.isArray(a.sections)||(a.sections=[]);let d=a.sections.findIndex(a=>/项目主要施工内容|主要施工内容/u.test(a)),e=d>=0?d+1:(a.sections.push("项目主要施工内容"),a.sections.length),f=`### ${c+1}.${e} 项目主要施工内容`;a.content=`${a.content.replace(/\s+$/u,"")}
@@ -89,20 +89,20 @@ ${g}
89
89
  ${f}
90
90
  `,m=!0}}}for(let a of b){if(0===p.length)continue;let b=a.content;for(let c of a.content.split("\n").map(a=>a.trim()).filter(a=>l.test(a))){let a=c.replace(/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u,""),d=(0,a8.eB)(b,a,p);d!==b&&(b=d,n+=1);let e=(0,a8.qj)(b,a,p);e!==b&&(b=e,n+=1)}a.content=b}for(let a=0;a<2;a+=1){let c=b.flatMap(a=>{if(0===p.length)return[];let b=a.content.split("\n").map(a=>a.trim()).filter(a=>l.test(a)).flatMap(b=>{let c=b.replace(/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u,""),d=(0,a8.ab)(a.content,c,p);return d.length>0?[{headingLine:b,sectionTitle:c,missing:d}]:[]});return b.length>0?[{chapter:a,entries:b}]:[]});if(0===c.length)break;(0,aI.fx)(i,(0,aI.X5)({type:"llm_review",roleId:"workpackage-skeleton-repair",status:"running",message:`工作包骨架补写第 ${a+1} 轮(${c.length} 章)`},{subtitle:"工作包骨架收口"})),j(b);let n=async a=>{let b=a.entries.map((a,b)=>{let c=a.missing.map((a,b)=>`#### ${b+1} ${a}`).join("\n");return`第 ${b+1} 处:「${a.headingLine}」小节内部缺少以下工作包小节(内部结构已由系统从资料锁定):
91
91
  ${c}
92
- 请在该小节内部按上述标题逐一补齐(标题一字不差,不得增删改、合并或调序),每个工作包小节按三要素展开正式正文:作业对象与工程量(什么部位、什么规模)、工序顺序(先后顺序清晰)、施工方法(工艺做法、工艺参数、验收检测)。已有内容一律不得改动,不得删除任何已有小节与段落,不得输出 Markdown 表格。`});return k(()=>(0,aJ.X6)(h,`workpackage-skeleton-repair:${a.chapter.id}`,()=>(0,aJ.l8)({template:d,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[b.join("\n"),"清单之外的内容一律不得改动;不得删除任何小节标题、表格与数值参数。"],promptTexts:e,requirement:f,forbidDrawingImages:!0,diagnostics:h,signal:g,anchorTexts:a.entries.map(a=>({text:a.headingLine,append:!0})),maxTokens:6e3})))},q=await Promise.allSettled(c.map(a=>n(a))),r=0;if(q.forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;console.error("[gen] workpackage skeleton repair failed:",a.reason);return}let d=a.value,{chapter:e}=c[b];d.content&&d.content!==e.content&&(e.content=d.content,r+=1,o+=1)}),j(b),0===r)break;m=!0}return(m||n>0)&&((0,aI.fx)(i,(0,aI.X5)({type:"llm_review",roleId:"workpackage-skeleton-repair",status:"success",message:`工作包骨架收口完成:表格剥离 ${n} 处、骨架补写 ${o} 章`},{subtitle:"工作包骨架收口"})),j(b)),{skeletonFixApplied:m}}async function ep(a){let{chapterDraftsFinal:b,template:c,reviewPromptTexts:d,repairPromptTexts:e,requirement:f,signal:g,projectContext:h,generationDiagnostics:i,preliminaryFactsModel:j,scopeConflicts:k,progressStages:l,emitProgress:m,withProgressHeartbeat:n,blueprintData:o}=a,p=[],q=!1;try{let r=a.globalReviewSamplingRate??1,t=r>=1||b.length<=2?b:b.filter((a,b)=>b%Math.max(2,Math.round(1/r))==0),u=t.length,w=async()=>{let a=b.map(a=>a.content).join("\n\n"),[e,j]=await Promise.all([n(()=>aS({template:c,chapters:t,chapterReviews:[],promptTexts:d,requirement:f,projectContext:h,diagnostics:i,signal:g})),bF(a,{diagnostics:i,signal:g})]);return{issues:[...new Set([...e.issues,...j.map(a=>{let b={level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`数据一致性矛盾(${a.kind}):${a.description}(原文 A:“${a.itemA.slice(0,60)}” ↔ 原文 B:“${a.itemB.slice(0,60)}”)`,suggestion:"全文数据必须一致:以绑定资料(图纸/清单/招标文件)为准选定唯一值,统一矛盾数值对,删除或修正其余矛盾表述。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。"};return`${b.message};${b.suggestion||""}`})])],stage:e.stage}},x=[],y=async()=>{let a=b.map(a=>a.content).join("\n\n"),c=(0,a5.t1)(a),d=await (0,v.Mv)(c.sentences,c.overviewBody?[c.overviewBody]:[]);return[...(await (0,s.qm)(a,j,k)).filter(a=>/跨章一致性冲突/u.test(a.message)),...(await (0,s.hr)(a,j)).filter(a=>"error"===a.level),...(0,a5.rA)(a),...(0,a5.Et)(a),...(0,a5.H)(a),...(0,a5.$$)(a,j.specAuthorityMap),...(0,a5.N$)(a),...(0,a5.Fr)(a),...(0,a5.bq)(a),...(0,a5.vH)(a),...(0,a5.cT)(a),...(0,a5.ub)(a),...(0,a5.cl)(a),...(0,a5.zP)(a),...await (0,a5.r8)(a,A),...await (0,a5.sn)(a),...(0,a5.l4)(a,{semanticSimilarity:d}),...await (0,a5.LF)(b),...o?(function(a,b){let c=[],d=a.split("\n").filter(a=>!/^\s*\|/u.test(a.trim())).join("\n");if(b.resources.labor.peakValue>0)for(let a of d.matchAll(/(?:劳动力峰值|施工高峰|高峰人数|高峰期劳动力|劳动力高峰)(?:为|约|达到|共计)?[^\n。;;]{0,20}?(\d+(?:\.\d+)?)\s*人/gu)){let d=Number(a[1]);if(d>0&&d!==b.resources.labor.peakValue){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用冲突:正文出现与蓝图不一致的劳动力峰值 ${d} 人`,suggestion:`请统一使用蓝图劳动力峰值:${b.resources.labor.peakValue} 人`});break}}if(b.contract.totalDays>0)for(let a of d.matchAll(/(?:总工期|施工工期|合同工期|工期)(?:为|约|共计|控制)?[^\n。;;]{0,20}?(\d+(?:\.\d+)?)\s*(?:日历)?天/gu)){let d=Number(a[1]);if(d>0&&d!==b.contract.totalDays){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用冲突:正文出现与蓝图不一致的工期表述 ${d}日历天`,suggestion:`请统一使用蓝图总工期:${b.contract.totalDays} 日历天`});break}}for(let d of b.redLineFacts.filter(a=>!a.amount&&"自然村数量"!==a.key)){let b=bv(d.value.trim());b&&(RegExp(b,"u").test(a)||c.push({level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图红线事实缺口:正文未体现「${d.key}=${d.value}」`,suggestion:`请在对应章节补写该红线事实(数值必须与蓝图一致)`}))}let e=b.redLineFacts.find(a=>"自然村数量"===a.key),f=e?Number(/(\d+)/u.exec(e.value)?.[1]):0;if(f>0)for(let a of d.matchAll(/(\d+)\s*个(?:美丽宜居)?自然村(?!分组)/gu)){let b=Number(a[1]);if(b>0&&b!==f){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图红线事实冲突:正文出现与蓝图不一致的自然村数量 ${b} 个`,suggestion:`请统一使用蓝图自然村数量:${f} 个自然村`});break}}for(let[a,e]of Object.entries(b.quantities)){if(!e||e.value<=0)continue;let b=e.unit||"",f=RegExp(`${bv(a)}[^
93
- 。;;]{0,40}?(\\d+(?:\\.\\d+)?)\\s*${b?bv(b):""}`,"gu");for(let g of d.matchAll(f)){let d=Number(g[1]);if(d>0&&d!==e.value){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用冲突:正文出现与蓝图不一致的工程量 ${a} ${d}${b}`,suggestion:`请统一使用蓝图工程量:${a} ${e.value}${b}`});break}}}return c})(a,o).filter(a=>"error"===a.level):[]].map(a=>`${a.message};${a.suggestion||""}`)},z=await w(),A=(0,a5.P3)(j),B=(0,a5.z4)(j),C=z.issues;x=await y(),p=[...new Set([...C,...x])];let D=0;for(let a of b){let b=(0,a5.fE)(a.content,{...by(o),supportAuthority:A});b.fixedCount>0&&(a.content=b.markdown,D+=b.fixedCount)}D>0&&(x=await y(),p=[...new Set([...C,...x])]);let E=!1;for(let a=0;a<1&&p.length>0;a+=1){(0,aI.fx)(l,(0,aI.X5)({type:"llm_review",roleId:"global-consistency-repair",status:"running",message:`跨章一致性冲突第 ${a+1} 轮定向修复(${p.length} 个冲突)`},{subtitle:"跨章一致性修复"})),m(b);let d=0,h=b.flatMap(a=>{let b=a.content.replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡"),c=p.filter(c=>{if(c.includes(a.title))return!0;if(/基坑深度数值未锁定/u.test(c))return/基坑|支护|开挖|土方|降水/u.test(a.title)||a.content.includes("基坑");if((c.match(/不一致的表述\s*([^;;。\n]+)/u)?.[1]||"").split(/[、,,]/u).some(a=>{let c=a.trim().replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡");return c.length>=3&&b.includes(c)}))return!0;let d=c.match(/正文([^配比厚度\s]{1,6}?)(?:配比|厚度)/u)?.[1];return!!(d&&a.content.includes(d)||[...c.matchAll(/“([^”]{6,80})”/gu)].some(a=>b.includes(a[1].replace(/\s+/gu,""))))||[...c.matchAll(/(\d[\d,,.]*)\s*(?:人|台|日|个|次|天|月|套|具|处|项|条)/gu)].some(a=>b.includes(a[0].replace(/\s+/gu,"")))});return c.length>0?[{chapter:a,related:c}]:[]});if((await Promise.allSettled(h.map(({chapter:a,related:b})=>n(()=>(0,aJ.X6)(i,`global-consistency-repair:${a.id}`,()=>(0,aJ.l8)({template:c,chapter:{id:a.id,title:a.title,content:a.content,evidence:a.evidence||[],missingFacts:a.missingFacts||[],sections:a.sections},issues:b.map(a=>{let b=/重复/u.test(a)?"请删除本冲突描述的重复内容(保留首次出现的完整版本),不得改动其余正文。":/基坑深度数值未锁定/u.test(a)?void 0!==B?`请在本章基坑支护/开挖小节写出确定性的基坑开挖深度表述:本工程基坑开挖深度为 ${B}m(权威口径来自图纸标注,严禁写其他深度数值或「按图纸确定」类回避表述),并同步保留既有危大工程分级标注。`:"请从本章证据摘要中的图纸标注/勘察资料锁定基坑开挖深度数值,以确定性表述写入基坑支护小节(严禁「按图纸确定」类回避表述),不得编造数值。":/规格错位/u.test(a)?"请按冲突描述中的工程量清单权威规格修正本章对应部位的规格表述:同一材料不同部位允许不同规格,同一部位只允许权威规格,禁止把多种规格全文归一为一种。":"请严格按冲突描述中给出的资料口径修正本章对应表述,不得引入新的数值;与资料口径一致的既有表述(含分层/子项数值)不得改动;同一材料多种规格按所属部位/分部分项分别使用,禁止全文统一为一种规格。";return`${a};${b}`}),promptTexts:e,requirement:f,forbidDrawingImages:!0,diagnostics:i,signal:g})))))).forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;console.error("[gen] global consistency repair failed:",a.reason);return}let c=a.value,{chapter:e}=h[b];c.content&&c.content!==e.content&&(e.content=c.content,d+=1)}),0===d){E&&(C=(await w()).issues);break}m(b);let j=await y();x=j,0===a||0===j.length?(C=(await w()).issues,E=!1):E=!0,p=[...new Set([...C,...j])],(0,aI.fx)(l,(0,aI.X5)({type:"llm_review",roleId:"global-consistency-review",status:p.length>0?"failed":"success",message:p.length>0?`跨章一致性复检:仍有 ${p.length} 个冲突`:"跨章一致性复检通过"},{subtitle:"全局一致性审查"})),m(b)}await en({chapterDraftsFinal:b,template:c,repairPromptTexts:e,requirement:f,signal:g,generationDiagnostics:i,progressStages:l,emitProgress:m,withProgressHeartbeat:n}),await eo({chapterDraftsFinal:b,projectContext:h,template:c,repairPromptTexts:e,requirement:f,signal:g,generationDiagnostics:i,progressStages:l,emitProgress:m,withProgressHeartbeat:n});let F=await (0,s.KI)(b,j,k),G=(0,a5.GG)(j),H=(0,a5.hI)(j),I=(0,a5.Pt)(j),J=by(o),K=(0,a5.dc)(b.map(a=>a.content).join("\n\n")),L=0;for(let a of b){let b=(0,a5.fE)(a.content,{scheduleAuthority:G,assemblyRateAuthority:H,...J,supportAuthority:A,laborPeakAuthority:K});b.fixedCount>0&&(a.content=b.markdown,L+=b.fixedCount)}let M=b.map(a=>a.content).join("\n\n"),N=(0,a5.t1)(M),O=await (0,v.Mv)(N.sentences,N.overviewBody?[N.overviewBody]:[]),P=0,Q=0,R=0,S=0,T=0,U=0,V=(0,a5.qG)(b);for(let a of(P+=V.removedCount,b)){let b=a.content.split(/\r?\n/u).length,c=(0,a5.lR)(a.content),d=(0,a5.Vc)(c.markdown),e=(0,a5.U$)(d.markdown,O),f=(0,a5.$h)(e),g=(0,a5.EN)(f.markdown,{areaSummary:I,scheduleDays:G}),h=(0,a5.K2)(g.markdown),i=h.markdown.split(/\r?\n/u).length,j=b-i,k=f.fixedCount-0+g.fixedCount+h.fixedCount;S+=f.fixedCount,T+=g.fixedCount,U+=h.fixedCount,(j>0||k>0)&&(P+=c.removedCount,Q+=d.removedCount,R+=j-c.removedCount-d.removedCount,a.content=h.markdown)}let W=await (0,a5.yR)(b),X=0,Y=0,Z=0,$=0,_=0,aa=0,ab=0;for(let a of b){let b=(0,a5.ir)(a.content);b.fixedCount>0&&(a.content=b.markdown,X+=b.fixedCount);let c=(0,a5.xp)(a.content);c.fixedCount>0&&(a.content=c.markdown,Y+=c.fixedCount);let d=await (0,a5.lv)(a.content);d.fixedCount>0&&(a.content=d.markdown,Z+=d.fixedCount);let e=(0,a5.Co)(a.content);e.fixedCount>0&&(a.content=e.markdown,$+=e.fixedCount);let f=(0,a5.zj)(a.content);f.fixedCount>0&&(a.content=f.markdown,_+=f.fixedCount);let g=(0,a5.SZ)(a.content);g.fixedCount>0&&(a.content=g.markdown,aa+=g.fixedCount);let h=(0,a5.GI)(a.content);h.fixedCount>0&&(a.content=h.markdown,ab+=h.fixedCount)}if(q=!0,F.fixedCount>0||L>0||P>0||Q>0||R>0||W>0||S>0||T>0||U>0||X>0||Y>0||Z>0||$>0||_>0||aa>0||ab>0){x=await y(),p=[...new Set([...C,...x])];let a=[F.fixedCount>0?`数值 ${F.fixedCount} 处`:"",L>0?`跨章数值 ${L} 处`:"",P>0?`重复表格 ${P} 行`:"",Q>0?`重复段落 ${Q} 行`:"",R>0?`概况复述句 ${R} 行`:"",W>0?`跨章语义重复段 ${W} 段`:"",X>0?`自伤表述改写 ${X} 处`:"",Y>0?`危大辨识补漏 ${Y} 项`:"",Z>0?`扬尘六个百分百补写 ${Z} 项`:"",$>0?`内部术语清洗 ${$} 处`:"",_>0?`无表头表格补齐 ${_} 处`:"",aa>0?`两可表述归一 ${aa} 处`:"",ab>0?`配置污染清洗 ${ab} 处`:""].filter(Boolean).join("、");(0,aI.fx)(l,(0,aI.X5)({type:"llm_review",roleId:"global-consistency-deterministic-fix",status:"success",message:`跨章一致性定点修复:${a}${F.details.slice(0,4).length>0?`(${F.details.slice(0,4).join("、")})`:""}`,details:F.details.slice(4)},{subtitle:"跨章一致性修复"})),m(b)}let ac=x.filter(a=>!ek.test(a)),ad=[...C,...x.filter(a=>ek.test(a))],ae=ac.length>0?"failed":"success",af=ac.length>0?`跨章一致性修复完成:仍残留 ${ac.length} 个可修复冲突(已记录,由交付门禁兑底)`:ad.length>0?`跨章一致性修复完成:确定性冲突已全部消除;另有 ${ad.length} 个审查提示/资料两可项(已记录,由交付门禁复核)`:"跨章一致性修复完成:冲突已全部消除";(0,aI.fx)(l,(0,aI.X5)({type:"llm_review",roleId:"global-consistency-repair",status:ae,message:af},{subtitle:"跨章一致性修复"})),m(b);let ag=u<b.length?{...z.stage,message:`${z.stage.message||"全局一致性审查完成"}(抽检 ${u}/${b.length} 章)`}:z.stage;(0,aI.fx)(l,ag),m(b)}catch(a){if(g?.aborted)throw a;console.error("[gen] global consistency review failed:",a)}return{issues:p,dedupRan:q}}async function eq(a){let b=(0,d.QJ)(a.templateId);if(!b)throw Error("Document template not found");let c=b.chapters.find(b=>b.id===a.chapterId);if(!c)throw Error("Document chapter not found");let f=e.resolve(a.projectRoot||(0,g.aY)());if(!f)throw Error("No knowledge base project found");let h=(0,g.Qh)(),i=(0,aL.Hh)(f,b,{requirement:a.requirement}),j=(0,aL.W9)(f,b,{requirement:a.requirement}),{kindByPath:k,processingByPath:l}=(0,aL.Hz)(j),m=new Set(i),q=(0,a_.Zq)(f,i),r=new Map([...k.entries()].map(([a,b])=>[a,(0,aL._W)(b)])),s=new Map([...l.entries()].map(([a,b])=>[a,b])),t=dC(await h.getProject(f),[...m],a.maxEvidencePerChapter),u=[],v=[...m].filter(Boolean).sort(),w=dy(c,c.queries,[]),x=function(a,b){let c=Number(process.env.DOCUMENT_MAX_QUERIES_PER_CHAPTER);return Math.max(2,Math.min(9,Math.floor(Number.isFinite(c)&&c>0?c:4)+ +((a.sections||[]).length>=6||a.requiredFacts.length>=8)+Math.min(2,b.length)))}(c,[]);for(let a of w.slice(0,x)){let b=await h.search(f,a,{scope:"project",filters:{filePaths:v},limit:Math.min(t,12),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15},generationMode:!0});u.push(...b.results.filter(a=>(0,aJ.Tz)(f,a.filePath,m)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:r.get(a.filePath),processingType:s.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let y=dx(c,(0,a_.Su)(u.filter(a=>(0,aJ.Tz)(f,a.filePath,m)),q),{maxItems:function(a,b,c=!1){return Math.max(12,Math.min(c?58:26,a+10+4*((b.sections||[]).length>=6||b.requiredFacts.length>=8)+18*!!c))}(t,c),maxChars:16e3,preservePinned:!0});(0,a_.U2)(y,q,`regenerate:${c.id}`);let z=a.currentMarkdown||"",A=new Set(a.existingFacts??[]),B=c.requiredFacts.filter(a=>!A.has(a)&&!y.some(b=>(0,p.Lk)(b,a)));if(0===y.length)throw Error(`${(0,o.GQ)(c.title)} 缺少可支撑正文的项目资料证据`);let C=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",z?`> 当前文档上下文摘要:${z.replace(/\s+/gu," ")}`:"",`本章依据已锁定项目资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`,"","### 资料依据",...y.map(n.OF)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:C,evidence:y,missingFacts:B}}async function er(a){let b;(0,A.Te)(a.signal);let c=(0,d.QJ)(a.templateId);if(!c)throw Error("Document template not found");let C=e.resolve(a.projectRoot||(0,g.aY)());if(!C)throw Error("No knowledge base project found");let D=(0,f.computeProjectId)(C),E=c,G=(0,g.Qh)(),H=[],I=[],J=(b,c=T)=>{let d=b?[...b].sort((a,b)=>{let c=I.indexOf(a.id),d=I.indexOf(b.id);return(c<0?Number.MAX_SAFE_INTEGER:c)-(d<0?Number.MAX_SAFE_INTEGER:d)}):void 0;a.onProgress?.([...c],d?{chapters:d}:void 0)},O=Math.max(15e3,Math.min(6e4,Number(process.env.DOCUMENT_GENERATION_HEARTBEAT_MS??3e4))),P=async(b,c=T)=>{let d=setInterval(()=>{a.signal?.aborted||J(H,c)},O);try{return await b()}finally{clearInterval(d)}},R=(0,d.N6)(E)||"none",S=(0,i.Mu)(R)?.name||R,T=[(0,aI.X5)({type:"role_binding",roleId:R,status:"running",message:`生成任务已创建,正在读取模板与角色配置:${E.name}`,details:[`当前项目:${D}`,`资料目录:${(0,g.NW)(C)}`,"正在读取项目资料包和提示词配置"],progress:{current:1,total:4,label:"初始化配置"}},{subtitle:S,roleName:S,order:0})];J();let Y=(0,d.bj)(E),ac=Y.bindings;(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在分析模板规范、用户要求与项目资料包",details:["解析 OUTLINE 与模板章节","读取项目资料包","自动识别资料类型并构建项目理解"],progress:{current:1,total:3,label:"准备分析"}},{subtitle:"生成准备",order:T.length})),J();let ad=(0,cR.Qu)({template:E,requirement:a.requirement,projectRoot:C,facts:[]}).materialScope.selectedFiles;if(0===ad.length)throw Error("模板未绑定可用项目资料包,请先在模板中绑定需要参与生成的项目文件夹。");let ae=await P(()=>(0,g.q1)(C,ad));ae.deletedFiles>0&&((0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"知识库索引与绑定文件清单已同步",details:[`已清除 ${ae.deletedFiles} 个跨项目文件的索引(${ae.deletedChunks} 切片),生成全程只使用绑定资料`],progress:{current:1,total:3,label:"准备分析"}},{subtitle:"生成准备",order:T.length})),J());let af=(0,aL.W9)(C,E,{requirement:a.requirement}),ag=(0,aL._n)(E,af),{kindByPath:ah,processingByPath:ai}=(0,aL.Hz)(af),aj=(0,aJ.fC)([...Y.writerPrompts,...Y.chapterPrompts]),an=(0,o.cs)([{text:a.requirement,source:"用户需求",strict:!0},{text:aj,source:"提示词角色",strict:!0}]),ao=an.length>=2;ao&&(E={...c,chapters:an});let ap=await P(()=>Promise.resolve((0,k.P)(C,{requirement:a.requirement,boundFilePaths:ad})));(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在生成自动文档规格并评估生成准备度",details:[`项目资料:${ad.length} 份`,`资料类型:${Object.values(af.groups).filter(a=>a.length>0).length} 类`,"生成事实字段与章节约束"],progress:{current:2,total:3,label:"规格评估"}},{subtitle:"生成准备",order:T.length})),J();let aq=await P(()=>Promise.resolve((0,j.x)(E,a.requirement||""))),ar=aq.spec,au=(0,l.$i)(E,a.requirement||""),av=(0,m.$)({template:E,spec:ar,summary:ap,resolvedRoles:[]});if(!av.ready)throw Error(`生成准备度不足:${av.blockingIssues.join(";")}`);let aw=['【全文写作硬约束(每一章生成时必须遵守,违反即评审失分)】\n1. 禁止编造时间事实:开工日期、竣工日期、工期起止等未在项目资料中确认的日期一律不得写入正文;进度表述改用“开工后第 N 天”“第 N 周”等相对口径,或引用资料中已确认的日期。\n2. 禁止商务数据:暂列金额、暂估价、综合单价、清单合价、税率、投标报价等商务条款数据不得写入施工组织设计正文,商务口径只允许出现在项目信息表中。\n3. 禁止资料来源罗列话术:不得出现“根据/依据招标文件、工程量清单、图纸及答疑”式来源罗列句,直接陈述项目事实与施工安排;编制依据小节可集中列出依据文件。\n4. 禁止跨章复述概况:除“工程概况/项目概况”章节外,其余章节不得以“本项目为/本工程为”开头整段复述项目总体概况,应直接展开本章主题内容。\n5. 禁止后台内部话术:不得出现“工作包”“WRITER_MISSING_SECTION”“已确认资料”等系统内部术语与兜底话术,一律改写为正式施工组织设计表述。\n6. 合规数值红线(安全、职业健康、危大工程章节必须逐条对照,违反即合规失分):\n a. 高温停工按《防暑降温措施管理办法》(安监总安健〔2012〕89号):日最高气温达到40℃以上应停止当日室外露天作业;37℃~40℃时室外露天作业时间累计不得超过6小时且气温最高时段3小时内不得安排室外露天作业;35℃~37℃时应换班轮休缩短连续作业时间。不得写成42℃等其他阈值。\n b. 危大工程判定线按住建部令第37号及建办质〔2018〕31号:基坑(槽)土方开挖、支护、降水,开挖深度超过3m(含3m)属危大工程,超过5m(含5m)属超过一定规模(需专家论证);模板支撑搭设高度8m及以上或搭设跨度18m及以上属超过一定规模;落地式钢管脚手架搭设高度24m及以上属危大工程、50m及以上属超过一定规模,悬挑式脚手架分段架体搭设高度20m及以上属超过一定规模;采用非常规起重设备方法且单件起吊重量10kN及以上属危大工程、100kN及以上属超过一定规模。判定必须给出本项目对应参数(开挖深度/支撑高度/搭设高度/起吊重量),参数未在资料中确认的不得自行判定为危大或超危大。证据中含基坑底标高、\xb10.000对应绝对标高、垫层底标高等数值的,必须直接引用并据此给出开挖深度具体数值(开挖深度=地面标高-坑底标高),不得仅写“开挖深度超过3m”而不给数值;标高、坡率(如1:1.5)等设计参数应写入基坑支护与土方开挖相关小节。\n c. 专家论证程序按住建部令第37号:超过一定规模的危大工程专项方案应组织不少于5名符合专业要求的专家(从地方住建主管部门专家库选取)论证;修改后的方案由施工单位技术负责人审核签字、加盖单位公章,并由总监理工程师审查签字、加盖执业印章后方可实施。\n d. 监测预警值单一口径:同一监测指标(基坑位移速率、沉降预警值等)全文只能出现一个数值口径,不得前后矛盾;预警值优先引用设计文件明确值,无设计要求时按现行监测技术标准选取并注明依据。\n e. 自设数值自洽:自设的防护尺寸、频次、时间节点等数值必须与同章及跨章表述一致,且尽量引用现行规范依据;无规范依据的自设值不得写成硬性规定。\n7. 禁止数据自查话术:不得把表格口径推算、数据一致性自查过程写入正文(如"上表合计行…与…不一致,故…修正为…"),表格与正文数值必须直接自洽;不得把招标条款编号碎片(如"3项规定""1委员会确定中""56m15:…")作为小节标题。\n8. 禁止商务投标函内容:投标/评标纪律承诺、廉洁承诺、廉洁自律、行贿、串标、围标、弄虚作假、干扰评标等商务投标函条款与承诺一律不得写入施工组织设计正文(招标文件中的此类条款属商务文件应响应内容,不是技术标内容);本节只写技术方案与管理措施,不得以承诺句形式响应此类条款。',ag.prompt,(0,k.F)(ap,{publicSafe:!0}),(0,j.N)(ar,aq.sourceHash,{publicSafe:!0}),(0,m.R)(av,{publicSafe:!0})].filter(Boolean).join("\n\n"),ay=a.previousSignals?(0,ej._2)(a.previousSignals):"",az=[ag.prompt,(0,k.F)(ap),(0,j.N)(ar,aq.sourceHash),(0,m.R)(av)].filter(Boolean).join("\n\n"),aA=(0,aJ.fC)([...Y.writerPrompts,...Y.formattingPrompts]),aB=(0,aJ.fC)([...Y.writerPrompts,...Y.chapterPrompts,...Y.formattingPrompts]),aC=(0,aJ.fC)(Y.prompts),aG=(0,h.I)().load().webAccess||{enabled:!1,allowProjectFacts:!1,maxQueriesPerChapter:2,maxResultsPerQuery:3,trustedDomains:[]},aP=(0,as.c_)({promptTexts:[aw,aC].filter(Boolean).join("\n\n"),requirement:a.requirement,template:E,rolePrompts:Y.prompts}),aQ=[(0,as.el)(aP),!aG.enabled?"":"公开资料补充使用规则:\n1. 公开资料只可用于补充通用规范、政策、工艺和措施。\n2. 不得使用公开资料新增或修改项目名称、建设地点、建设规模、工期、质量标准、工程量、材料规格、图纸参数、商务数据。\n3. 本地项目资料与公开资料冲突时,必须以本地项目资料为准。\n4. 不得在正文中出现任何检索过程、外部页面、工具调用或系统内部过程性表述。\n5. 不得把公开资料中的其他项目案例参数写入本项目正文。"].filter(Boolean).join("\n\n"),aR=[aw,aQ,`生成前规划章节结构:
94
- ${(0,q.CK)(E)}`,aA||aB].filter(Boolean).join("\n\n"),aS=[az,aQ,(0,aJ.fC)([...Y.extractionPrompts,...Y.referencePrompts])].filter(Boolean).join("\n\n"),aT=[aw,aQ,(0,aJ.fC)([...Y.writerPrompts,...Y.chapterPrompts,...Y.formattingPrompts])].filter(Boolean).join("\n\n"),aU=[aw,aQ,(0,aJ.fC)(Y.formattingPrompts)].filter(Boolean).join("\n\n");(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"document-preparation",status:"success",message:`模板规范与项目资料理解完成,识别 ${ad.length} 份项目资料`,details:[`提示词绑定:${ac.length} 个`,`项目资料包:${af.materialRoots.join("、")||"当前知识库"}`,ao?`识别 OUTLINE 章节:${an.length} 个`:"未识别显式 OUTLINE,使用模板章节"],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备",order:T.length})),J(),a.previousSignals&&((0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"previous-version-inheritance",status:"success",message:`版本继承:提取上一版《${a.previousSignals.versionTitle}》结构 ${a.previousSignals.structureLines.length} 项、关键口径 ${a.previousSignals.factLines.length} 条、已知问题 ${a.previousSignals.issueLines.length} 项作为生成参照`,details:[...a.previousSignals.structureLines.slice(0,6).map(a=>`沿用参考:${a}`),"旧版数据仅作参照,与项目资料不一致处一律以资料为准"]},{subtitle:"版本继承",order:T.length})),J());let aV=new Set(ad),aW=new Map([...ah.entries()].map(([a,b])=>[a,(0,aL._W)(b)])),aX=new Map([...ai.entries()].map(([a,b])=>[a,b]));(0,aI.fx)(T,(0,aI.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:"running",message:"正在读取项目资料包索引",details:["使用上传阶段已完成的解析、切片和索引结果","不在生成流程中重新解析或入库","准备按资料类型召回章节证据"],progress:{current:1,total:3,label:"读取索引"}},{subtitle:"知识库检索",order:T.length})),J();let aY=await P(()=>G.getProject(C)),aZ=function(a,b){let c=new Set(b.filter(Boolean)),d=(a.listFiles?.()||[]).filter(a=>0===c.size||c.has(a.relativePath)),e=new Set(d.map(a=>a.relativePath)),f=[...c].filter(a=>!e.has(a)),g=d.filter(a=>0===Math.max(0,Math.ceil(Number(a.chunkCount)||0))).map(a=>a.relativePath),h=d.filter(a=>"error"===a.status).map(a=>a.relativePath),i="function"==typeof a.countPendingIndexJobs?a.countPendingIndexJobs():0,j="function"==typeof a.getVectorStatus?a.getVectorStatus():void 0,k=d.filter(a=>"error"!==a.status&&Math.max(0,Math.ceil(Number(a.chunkCount)||0))>0),l=k.map(a=>a.relativePath),m=k.reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0),n=[...dA("部分绑定文件未完成索引,已自动跳过",f),...dA("部分绑定文件没有可用切片,已自动跳过",g),...dA("部分绑定文件索引失败,已自动跳过",h)],o=c.size>0&&0===m?["所有绑定文件均无可用切片"]:[],p=[...n,...i>0?[`仍有 ${i} 个待索引任务,建议等待索引完成后生成`]:[],...j&&"ready"!==j.status?[`向量索引状态为 ${j.status},当前召回质量可能下降`]:[]];return{scopedRecords:d,usablePaths:l,missingFiles:f,emptyFiles:g,errorFiles:h,pendingJobs:i,vectorStatus:j,usableChunkCount:m,blockingIssues:o,warnings:p}}(aY,[...aV]);if(aZ.blockingIssues.length>0)throw Error(`生成前知识索引不可用:${aZ.blockingIssues.join(";")}`);let a0=new Set(aZ.usablePaths),a1=(0,a_.Zq)(D,[...a0]),a2=dC(aY,[...a0],a.maxEvidencePerChapter),a3=aZ.pendingJobs>0||0===aZ.usableChunkCount,a4=function(a){let b=Math.max(0,Math.ceil(a.totalChunks||0)),c=Math.max(0,Math.ceil(a.loadedChunks||0)),d=Math.max(0,b-c),e=b>0?c/b:1,f=[...b>=1e3&&e<.35?["切片未完全预加载"]:[],...!1===a.vectorReady?["向量索引未就绪"]:[]];return{totalChunks:b,loadedChunks:c,omittedChunks:d,loadedRatio:e,highRisk:f.length>0,riskReason:f.join("、")||void 0}}({totalChunks:Math.min(aZ.usableChunkCount,20*ad.length),loadedChunks:Math.min(aZ.usableChunkCount,20*ad.length),vectorReady:aZ.vectorStatus?"ready"===aZ.vectorStatus.status:void 0});(0,aI.fx)(T,(0,aI.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:a3?"failed":"success",message:`已读取知识索引:项目资料 ${aZ.scopedRecords.length} 份,可用切片 ${aZ.usableChunkCount} 条`,details:[`项目资料:${aV.size} 份`,`可用证据文件:${a0.size} 份`,`向量状态:${aZ.vectorStatus?.status||"unknown"}`,...aZ.warnings,"后续将按招标正文/清单/图纸/补疑等资料类型召回"],progress:{current:3,total:3,label:"索引已就绪"}},{subtitle:"知识库检索",order:T.length})),J(),(0,A.Te)(a.signal);let a5=[],a6=[],bp={enabled:aG.enabled,queries:[],evidenceCount:0,filteredCount:0,chapters:[]},bq=[],br=[],bw=[],bx=[],by=[],bz=-1,bE=new Map,bF=new Map,bG=a=>{let b=`${a}::full`;if(!bF.has(b))try{bF.set(b,aY.getFileDetail?.(a))}catch{bF.set(b,void 0)}return bF.get(b)},bH=async(a,b,c,d)=>{let e=dt(d),f="0"!==process.env.DOCUMENT_GENERATION_RERANKER,g=(0,A.c6)({query:a,scopedFilePaths:b,limit:c,weights:e,generationMode:!0,reranker:f}),h=bE.get(g);if(h)return h;let i=await G.search(C,a,{scope:"project",filters:{filePaths:b},limit:c,weights:e,generationMode:!0,disableReranker:!f}).catch(()=>null),j=i?.results||[];return bE.set(g,j),j},bI={stage:(0,aI.X5)({type:"file_understanding",roleId:"project-understanding",status:"success",message:`已完成项目资料理解:${af.files.length} 份资料,${Object.values(af.groups).filter(a=>a.length>0).length} 类资料类型`,details:ag.prompt.split("\n").slice(0,16)},{subtitle:"项目资料理解",order:T.length})};(0,aI.fx)(T,bI.stage),J();let bJ=(0,a_.Su)(await cV({manager:G,project:aY,projectRoot:C,scopedFilePaths:[...aV].filter(Boolean).sort(),fileRoleByPath:aW,fileProcessingByPath:aX,signal:a.signal}),a1);(0,a_.U2)(bJ,a1,"project-basic-evidence"),bJ.length>0&&(a5.push(...bJ),(0,aI.fx)(T,(0,aI.X5)({type:"knowledge_retrieval",roleId:"project-basic-evidence",status:"success",message:`已锁定项目基础事实证据 ${bJ.length} 条`,details:bJ.slice(0,8).map(a=>`${e.basename(a.filePath)}|${a.sectionTitle||"正文片段"}|score=${a.score.toFixed(2)}`)},{subtitle:"基础事实召回",order:T.length})),J());let{safe:bK,excluded:bL}=await (0,w.a0)(a5),bM=await (0,w.M8)();bL.length>0&&((0,aI.fx)(T,(0,aI.X5)({type:"knowledge_retrieval",roleId:"evidence-content-safety",status:"success",message:`证据内容安全过滤:${bL.length} 条投标程序/评标纪律类证据已从写作链断开(系统侧提取通道不受影响)`,details:bL.slice(0,6).map(a=>`${e.basename(a.filePath)}|${a.sectionTitle||"正文片段"}`)},{subtitle:"证据内容安全",order:T.length})),J());let bN=bJ.filter(a=>!bL.includes(a)),bO=new Set(bL.map(w.hM)),bP=(0,z.d6)({evidence:bK,template:E,spec:ar,profile:au,scope:a1}),bQ=bP.localFacts,bR=bP.projectBasicFacts,bS=[...bQ,...bR,...bP.preciseFacts],bT=(0,ef.hp)({projectRoot:C,template:E,requirement:a.requirement}),bU=[...bT?.facts||[],...bS,...cG(bK)],bV=await (0,z.d7)(bU,bP.structuredTables,bq,ar,au),bW=(0,cR.Qu)({template:E,requirement:a.requirement,projectRoot:C,facts:bU,projectGraph:bT?.projectGraph,projectGraphSource:bT?"project-intelligence":void 0});for(let a of(0,cR.SU)(bW))(0,aI.fx)(T,a);bT&&(0,aI.fx)(T,(0,aI.X5)({type:"file_understanding",roleId:"project-intelligence-cache",status:"success",message:`已复用入库后项目理解资产与绑定 scope 快照:${bT.files.length} 份绑定资料`,details:[`项目级缓存时间:${new Date(bT.cache.createdAt).toLocaleString()}`,`scope 快照:${bT.scopeSnapshot.scopeHash.slice(0,12)}`,`复用预计算事实:${bT.facts.length} 条`,`复用预计算项目图谱:${bT.projectGraph.works.length}工程/${bT.projectGraph.methods.length}工法/${bT.projectGraph.resources.length}资源`,`复用施工组织设计专项图谱:${bT.constructionOrganizationGraph.workPackages.length} 个工作包/${bT.constructionOrganizationGraph.controlMatrix.length} 条控制矩阵`,`图谱来源:${bT.cache.projectGraphMessage}`,`章节意图证据覆盖:${Object.keys(bT.evidenceByChapterId||{}).length}/${E.chapters.length} 章`,`排除正文不适用资料:${bT.files.filter(a=>!a.usableForBody).length} 份`]},{subtitle:"项目理解缓存 / Scope 快照"})),J();let bX=bW.baseProjectGraph;if(!bT){(0,aI.fx)(T,(0,aI.X5)({type:"file_understanding",roleId:"project-graph",status:"running",message:`正在临时构建完整项目图谱:${a5.length} 条证据 → LLM 结构化提取`,details:["缓存缺失或版本过期,建议重新构建项目理解缓存;本次生成将临时构建完整项目图谱。","提取:工程内容、施工方法、材料设备、技术标准、重点难点"],progress:{current:2,total:3,label:"项目图谱"}},{subtitle:"项目资料图谱分析",order:T.length})),J();let b=await P(()=>(0,ee.i)({evidence:bK,signal:a.signal,projectRoot:C,requirement:a.requirement,templateId:E.id}),T);if(!b.graph)throw Error(`完整项目图谱构建失败:${b.stage.message||b.stage.status}`);bX=b.graph,(0,aI.fx)(T,b.stage),J()}bX&&(ag=(0,aL._n)(E,af,bX));let bY=cQ({facts:bU,projectGraph:bX,requiredKeys:cy.map(a=>a.key),projectRoot:C,requirement:a.requirement,templateId:E.id});bV.canonical=bY;let bZ=(0,o.effectiveTemplateChapters)(E,ar,{preserveExplicitOutline:ao}),b$=(0,t.dK)({template:E,chapters:bZ,requirement:a.requirement}).chapters,b_=a5.filter(a=>/评审|评分标准|评分办法|详细评审/u.test(`${a.sectionTitle||""}${a.content}`)).map(a=>a.content),b0=(0,u.tL)(b_);b_.length>0&&0===b0.length&&(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"bid-structure-audit",status:"skipped",message:"评审章节证据存在但未提取到评分条目标题:评分标准编号条目提取为空,承接审计将静默通过",details:["请检查招标文件评标办法章节编号格式;评分项要求(创优目标/绿色等级/禁编日期)由评分项要求提取通道覆盖"]},{subtitle:"评标结构校验",order:T.length}));let b1=await (0,v.Mv)(b0.map(a=>a.title),b$.map(u.Yx)),b2=(0,u.KX)({template:E,chapters:b$,requirement:a.requirement,evaluationItems:b0,semanticSimilarity:b1}),b3=(async()=>{try{var b;let c,d=[];for(let a of[...aV].sort()){if(!/招标|补疑|答疑|评标/u.test(a))continue;let b=bG(a);if(b?.chunks?.length)for(let c of b.chunks)d.push({chapterId:"tender-requirements",filePath:b.file?.relativePath||a,score:1,content:c.content||"",roleId:aW.get(a),processingType:aX.get(a),sectionTitle:c.sectionTitle,source:"pinned-evidence"})}let f=d.length>0?await U(d):(0,n.QR)([...a5.filter(a=>/招标|评标|投标须知|专用合同|合同条款|技术标准|技术要求/u.test(`${a.filePath||""}${a.sectionTitle||""}`)),...a5.filter(a=>!/招标|评标|投标须知|专用合同|合同条款|技术标准|技术要求/u.test(`${a.filePath||""}${a.sectionTitle||""}`))],{preservePinned:!0});if(d.length>0){let a=d.reduce((a,b)=>a+(b.content?.length||0),0),b=f.reduce((a,b)=>a+(b.content?.length||0),0);(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-requirement-preselect",status:"success",message:`评分项要求有用数据预筛:${d.length} → ${f.length} 条切片(${Math.round(b/Math.max(1,a)*100)}% 字符量)`,details:["投标程序/清单/目录/格式类切片已从主提取输入剔除(义务词形+语义命中双通道保留)","全量切片仍作必提条款窄通道召回池,兜底不失效"]},{subtitle:"评分项要求提取\xb7预筛",order:T.length})),J()}let g="0"!==process.env.DOCUMENT_EXTRACTION_CACHE?(b={collectionEvidence:d,preselectEvidence:f},(0,A.c6)({version:"tender-requirements-extraction-v3",collection:_(b.collectionEvidence),preselectInput:_(b.preselectEvidence)})):void 0,h=g?function(a,b){try{let c=e.join($(a),`tender-requirements-${b}.json`),d=JSON.parse(x.readFileSync(c,"utf8"));if(!Z(d)||W(d))return;return d}catch{return}}(C,g):void 0;if(h)c=h,(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-requirements-cache",status:"success",message:"复用上次提取结果(招标文件与预筛输入哈希命中,跳过主提取/窄通道 LLM)",details:am(c)},{subtitle:"评分项要求提取\xb7缓存复用",order:T.length})),J();else{c=await P(()=>F(f,{signal:a.signal})),!Z(c)&&f.length>0&&(c=await P(()=>F(f,{signal:a.signal})));let b=await V(d),h=M(c);if(b.length>0&&h.length>0){let d=await P(()=>F(b,{signal:a.signal}));Z(d)&&(c=X(c,d),(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-mandatory-extraction",status:"success",message:"必提条款窄通道补提完成(主提取漏提字段已补齐)",details:am(d)},{subtitle:"评分项要求提取\xb7必提补提",order:T.length})),J())}let i=[];if(N(c).length>0&&d.length>0){let b=await P(()=>Q(c,d,{signal:a.signal}));c=b.model,i=b.stillGaps;let e=b.noEvidenceGaps,f=b.stillGaps;0===b.stillGaps.length&&((0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-field-gap-extraction",status:"success",message:"评分项要求字段定向补提完成(字段级聚焦提取,全部评分项要求字段已提取)",details:am(c)},{subtitle:"评分项要求提取\xb7字段补提",order:T.length})),J());let g=a=>K.includes(a);if(f.length>0){let a=f.filter(g),b=f.filter(a=>!g(a)),c=[a.length>0?`必提字段 ${a.map(a=>L(a)).join("、")}`:"",b.length>0?`常规字段 ${b.map(a=>L(a)).join("、")}`:""].filter(Boolean);(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-field-gap-missing",status:"skipped",message:`字段定向补提后仍缺失:${c.join(";")}(条款窗口证据存在但 LLM 提取失败)`,details:["请检查 LLM 可用性与输出质量;正文将无法显性响应上述评分项要求"]},{subtitle:"评分项要求提取\xb7字段缺口",order:T.length})),J()}if(e.length>0){let a=e.filter(g),b=e.filter(a=>!g(a)),c=[a.length>0?`必提字段 ${a.map(a=>L(a)).join("、")}`:"",b.length>0?`常规字段 ${b.map(a=>L(a)).join("、")}`:""].filter(Boolean);(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-field-gap-no-evidence",status:"skipped",message:`${c.join(";")}:招标资料中未找到对应条款(判定为无此要求,非漏提)`,details:["若项目实际存在该要求,请检查招标文件相关章节切片完整性"]},{subtitle:"评分项要求提取\xb7字段缺口",order:T.length})),J()}}g&&0===i.length&&function(a,b,c){if(!(!c||!Z(c)||W(c)))try{x.writeFileSync(e.join($(a),`tender-requirements-${b}.json`),JSON.stringify(c,null,2))}catch{}}(C,g,c)}return Z(c)?((0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"success",message:"招标文件评分项要求结构化提取完成",details:am(c)},{subtitle:"评分项要求提取",order:T.length})),J()):f.length>0&&((0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"skipped",message:"评分项要求提取未获得有效结果(模型不可用或资料中无要求),零响应检测自动跳过",details:[]},{subtitle:"评分项要求提取",order:T.length})),J()),c}catch(a){return(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"skipped",message:"评分项要求提取链异常,已降级为空模型(零响应检测自动跳过)",details:[`异常信息:${a instanceof Error?a.message:String(a)}`,"请检查 LLM 可用性与本地语义模型状态"]},{subtitle:"评分项要求提取",order:T.length})),J(),B(!1)}})(),b4=(0,aF.w9)({chapters:b2.enrichedChapters,projectGraph:bX,canonicalFacts:bY});E={...E,chapters:b4};let b5=(0,eg.NP)({template:E,context:bW,title:E.name});b5.catch(()=>void 0);let b6=new Map;if(bX){let a=new Set;for(let b of[...bX.works,...bX.methods,...bX.resources,...bX.schedule,...bX.standards,...bX.risks,...bX.requirements,...bX.siteConditions])(b.sourceFiles||[]).forEach(b=>a.add(b));for(let b of b4){let c=[b.title,b.purpose,...b.sections||[],...b.requiredFacts||[],...b.queries||[]].join(" "),d=a=>a&&((0,ei.C1)(a,c,.18)||(0,ei.C1)(a,b.title,.12)),e=/概况|总体|部署|施工|进度|工期|质量|安全|资源|人材机|材料|机械|劳动力|风险|危大|绿色|环保/u.test(c),f=bX.works.filter(a=>a.name&&(d(a.name)||e)),g=bX.methods.filter(a=>a.name&&(d(a.name)||(a.applicableWorks||[]).some(d)||e)),h=bX.resources.filter(a=>a.name&&(d(a.name)||/资源|人材机|材料|机械|劳动力/u.test(c)&&/material|equipment|labor/u.test(a.type))),i=bX.gaps.filter(a=>!(0,ef.Ut)(a)&&(d(a)||e)),j=new Set;for(let a of f)(a.sourceFiles||[]).forEach(a=>j.add(a));for(let a of g)(a.sourceFiles||[]).forEach(a=>j.add(a));for(let a of h)(a.sourceFiles||[]).forEach(a=>j.add(a));0===j.size&&e&&[...a].forEach(a=>j.add(a)),b6.set(b.id,{graphFiles:j,graphBoqItems:h.map(a=>({name:a.name,quantity:a.quantity,unit:a.unit,sourceFiles:a.sourceFiles||[]})),graphWorks:f.map(a=>a.name),graphMethods:g.map(a=>a.name),gaps:i})}bT||((0,aI.fx)(T,(0,aI.X5)({type:"file_understanding",roleId:"project-graph-match",status:"success",message:`图谱→章节映射完成:${bX.works.length}工程 ${bX.methods.length}工法 ${bX.resources.length}资源 → ${b4.length}章`,details:b4.map(a=>{let b=b6.get(a.id);return`${(0,o.GQ)(a.title)}:匹配文件${b?.graphFiles.size||0}个,BOQ项${b?.graphBoqItems.length||0}个`})},{subtitle:"图谱章节映射"})),J())}let b7=b4,b8=(0,ef.TD)(bT?.constructionOrganizationGraph)||bT?.constructionOrganizationContext,b9=a=>{let b=b6.get(a);return b&&(b.graphWorks.length||b.graphMethods.length||b.graphBoqItems.length)?[b.graphWorks.length?`专业工程:${b.graphWorks.slice(0,8).join("、")}`:"",b.graphMethods.length?`主要工法/工艺:${b.graphMethods.slice(0,8).join("、")}`:"",b.graphBoqItems.length?`关键资源:${b.graphBoqItems.slice(0,8).map(a=>a.name).join("、")}`:""].filter(Boolean).join(";"):""},ca=[ag.prompt,b8].filter(Boolean).join("\n\n"),cb=[ca,ay].filter(Boolean).join("\n\n"),cc={...E,chapters:b7},cd=(0,as.My)([aR,a.requirement||""].filter(Boolean).join("\n\n"),b7),ce=(0,r.tF)({requirement:a.requirement,promptTexts:aR,template:cc,chapters:b7,spec:ar}),cf=0,cg=0,ch=[],ci=await (0,A.l$)(b7.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b,chapterIndex:c})=>{if(b.sections?.length){cf+=1;let a=cd.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,o.GQ)(a.chapterTitle)===(0,o.GQ)(b.title)).flatMap(a=>a.requiredSections.sort((a,b)=>(a.order||0)-(b.order||0)).map(a=>a.title));for(let c of[...a,...b.sections]){let a=(0,as.EN)(String(c).trim());a&&a!==String(c).trim()&&ch.push(`${(0,o.GQ)(b.title)}:${c} → ${a}`)}let d=(0,as.k2)([...a,...b.sections],b.title);return{...b,sections:d.length?d:(0,as.k2)(b.sections,b.title)}}cg+=1;let d=(0,n.QR)(bK.filter(a=>a.chapterId===b.id||(0,p.Lk)(a,b.title)),{preservePinned:!0}),e=ag.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",f=dm(Y,b),g=await (0,as.SP)({template:cc,chapter:b,chapterIndex:c,evidence:d,promptTexts:f.promptTexts,projectContext:cb,requirement:a.requirement,roleContext:e,targetWords:ce.chapterTargets.get(b.id)||1200,projectGraphSummary:b9(b.id),structuralRules:cd,signal:a.signal}),h=cd.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,o.GQ)(a.chapterTitle)===(0,o.GQ)(b.title)).flatMap(a=>a.requiredSections.map(a=>`强制小节:${a.title}`));if((0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"section-planning",promptId:f.primaryPromptId,status:g.length?"success":"failed",message:`${(0,o.GQ)(b.title)} 小节规划${g.length?`生成 ${g.length} 个小节`:"未生成可用小节"}`,details:[...f.promptDetails,...h,...g.length?g.map(a=>`规划小节:${a}`):["规划结果为空或被污染过滤"]]},{subtitle:"小节规划"})),!g.length)throw Error(`${(0,o.GQ)(b.title)} 小节规划未生成可用小节`);return{...b,sections:g}},{kind:"llmRepair",targetWords:ce.targetChars||4e3}),cj=await b3,ck=(0,t.dK)({template:E,chapters:ci,requirement:a.requirement}),cl=ck.chapters;if("template-locked"!==process.env.DOCUMENT_SECTION_PLANNING_MODE){let b=0,c=await (0,A.l$)(ck.chapters.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b})=>{if(!(b.sections||[]).length)return{chapterId:b.id,additions:[]};let c=(0,n.QR)(bK.filter(a=>a.chapterId===b.id||(0,p.Lk)(a,b.title)),{preservePinned:!0}),d=ag.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",e=dm(Y,b),f=await (0,as.wy)({template:cc,chapter:b,evidence:c,promptTexts:e.promptTexts,projectContext:cb,requirement:a.requirement,roleContext:d,projectGraphSummary:b9(b.id),maxTotalSections:t.a0,signal:a.signal});return{chapterId:b.id,additions:f}},{kind:"llmRepair",targetWords:ce.targetChars||4e3}),d=[];cl=ck.chapters.map(a=>{let e=(c.find(b=>b.chapterId===a.id)?.additions||[]).filter(b=>!(a.sections||[]).some(a=>a.includes(b)||b.includes(a)));if(!e.length)return a;let f=e.slice(0,Math.max(0,t.a0-(a.sections||[]).length));return f.length?(b+=f.length,d.push({chapterTitle:a.title,sections:f}),{...a,sections:[...a.sections||[],...f]}):a}),(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"section-planning-additions",status:b>0?"success":"skipped",message:b>0?`专业小节补规划:为 ${d.length} 个章节新增 ${b} 个专业工作面小节`:"专业小节补规划:LLM 未产出有效增量,保留模板锁定结构",details:d.length?d.map(a=>`${(0,o.GQ)(a.chapterTitle)}:${a.sections.join("、")}`):["无新增(LLM 空响应/无支撑依据/与已有小节重复)"]},{subtitle:"专业小节补规划",order:T.length})),J()}let cm="0"!==process.env.DOCUMENT_REQUIREMENT_CALIBRATION,cn=cl;if(cm&&Z(cj)){let b=await P(()=>at({chapters:cl,requirementSummary:am(cj),templateName:E.name,signal:a.signal}));if(b.length>0){let a=function(a,b){if(!b.length)return{chapters:a,applied:[]};let c=[],d=a.map(a=>({...a,sections:[...a.sections||[]]}));for(let a of b){let b=d.findIndex(b=>(0,o.GQ)(b.title)===(0,o.GQ)(a.chapterTitle)||(0,as.nz)(b.title)===(0,as.nz)(a.chapterTitle));if(b<0)continue;let e=d[b],f=a.sections.filter(a=>!(e.sections||[]).some(b=>(0,as.kw)(b,a)));0!==f.length&&(e.sections.push(...f),c.push({chapterTitle:a.chapterTitle,sections:f}))}return a.every((a,b)=>{let c=d[b];return!!c&&(a.sections||[]).every(a=>(c.sections||[]).some(b=>(0,as.kw)(b,a)))})?{chapters:d,applied:c}:{chapters:a,applied:[]}}(cl,b);a.applied.length>0?(cn=a.chapters,(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"success",message:`大纲要求校准:新增 ${a.applied.reduce((a,b)=>a+b.sections.length,0)} 个评分项承接小节(结构守恒校验通过)`,details:a.applied.map(a=>`${(0,o.GQ)(a.chapterTitle)}:${a.sections.join("、")}`)},{subtitle:"大纲要求校准",order:T.length}))):(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"skipped",message:"大纲要求校准未通过结构守恒校验,回退原规划",details:["校准新增小节未通过章名匹配/标题清洗校验,全部丢弃"]},{subtitle:"大纲要求校准",order:T.length})),J()}else(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"skipped",message:"大纲要求校准未产出有效增量(章节结构已覆盖评分项要求或校准调用失败),回退原规划",details:[]},{subtitle:"大纲要求校准",order:T.length})),J()}let co=await (0,w.mI)(cn),cp=cn.reduce((a,b,c)=>a+Math.max(0,(b.sections||[]).length-(co[c]?.sections||[]).length),0);{let a=ck.report;a.unattached.length>0?(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"construction-org-outline-unattached",status:"success",message:`标准模块挂靠:${a.totals.attachedModules} 个模块、${a.totals.sectionCount} 个小节;${a.unattached.length} 个可选模块未挂靠(无语义匹配章节,已记录)`,details:a.unattached.map(a=>`未挂靠:${a.moduleTitle}(${a.sections.length} 小节,${a.level})`)},{subtitle:"标准模块挂靠"})):(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"construction-org-outline-attached",status:"success",message:`标准模块挂靠:${a.totals.attachedModules} 个模块、${a.totals.sectionCount} 个小节全部挂靠`,details:a.attached.map(a=>`${"fallback"===a.kind?"兜底挂靠":"挂靠"}:${a.moduleTitle} → ${a.chapterTitle}`)},{subtitle:"标准模块挂靠"}))}let cq=await (0,v.Mv)(b0.map(a=>a.title),co.map(u.Yx)),cr=(0,u.KX)({template:E,chapters:co,requirement:a.requirement,evaluationItems:b0,semanticSimilarity:cq});b7=(0,aF.w9)({chapters:cr.enrichedChapters,projectGraph:bX,canonicalFacts:bY}),b7=(0,u.ji)(b7);let cs=await (0,w.mI)(b7),ct=b7.reduce((a,b,c)=>a+Math.max(0,(b.sections||[]).length-(cs[c]?.sections||[]).length),0);b7=cs;let cu=cp+ct;cu>0&&((0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"outline-topic-filter",status:"success",message:`大纲小节主题过滤:剔除 ${cu} 个评标纪律/商务报价类离题小节`,details:["被剔除小节不进入写作、目录与预算计划",...ct>0?[`评标结构校验补挂回路二次剔除:${ct} 个条款碎片/纪律小节`]:[]]},{subtitle:"大纲主题约束",order:T.length})),J()),(cr.issues.length>0||b2.issues.length>0)&&(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"bid-structure-audit",status:cr.issues.some(a=>"blocker"===a.severity)?"failed":"success",message:`评标结构符合性校验:${cr.diagnostics.length} 个结构组,${cr.diagnostics.filter(a=>"satisfied"===a.status).length} 个已满足,${cr.diagnostics.filter(a=>"missing"===a.status&&"required"===a.level).length} 个必查缺失(已自动补挂),${cr.diagnostics.filter(a=>"fragmented"===a.status).length} 个分散`,details:[...cr.diagnostics.map(a=>`${"satisfied"===a.status?"满足":"fragmented"===a.status?"分散":"补挂"}:${a.groupTitle}${"missing"===a.status?`(补挂小节:${a.missingSections.join("、")})`:""}`),...cr.issues.map(a=>`提示:${a.message}`).slice(0,8)]},{subtitle:"评标结构校验"})),E={...E,chapters:b7};let cv=await (0,v.Mv)(ab(cj).map(({item:a})=>aa(a)),b7.map(a=>ak(a.title))),cw=await al(cj,b7,cv);cw.length>0&&((0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-requirement-routing",status:"success",message:`评分项要求章节级路由:${cw.length} 条要求已路由到责任章节(生成时显性响应)`,details:cw.map(a=>`${a.kind}“${a.item.text}” → ${a.chapterTitle}(相似度 ${a.score.toFixed(2)})`)},{subtitle:"要求响应路由",order:T.length})),J());let cx=await ax(),cz=await aD(),cA=function(a){let b=(0,t.yt)({template:{id:"runtime",name:a.templateName||"",outputTitle:"",description:"",category:"",chapters:a.chapters},chapters:a.chapters,requirement:a.requirement}),c=/施工组织设计|施工组织|施组|技术标/u.test(`${a.templateName||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`)||b.length>0,d=Object.values(a.factsModel?.canonical?.byKey||{}).map(a=>`${a.label}=${a.value}`),e=d.filter(a=>/建设规模|建筑面积|占地|用地面积|装配|层数|高度/u.test(a)).slice(0,8),f=(a.tenderRequirements?.frontScheduleClauses||[]).map(a=>a.text).filter(Boolean).slice(0,12),g=["正文必须落到本项目资料已确认的事实,不得使用模板化空话或跨小节复制段落","措施类内容写成“责任岗位+执行动作+量化标准+检查频次+整改时限+复查销项”闭环句式:同一自然段内三要素(责任岗位+检查频次+整改闭环)须同时出现,全文每 1500 字至少 1 段闭环句式","正文每 1000 字至少落位 6 处带单位量化工艺参数(mm/MPa/养护天数/间距/压实度等),施工流程与施工方法须有明确的工序顺序表达(形式由模型自然选择、不做统一要求:顺序词叙述、编号步骤、有序/无序列表或箭头链均可),每个分部分项方案至少 1 处 3 环节以上工序顺序表达",'专业工程类小节必须覆盖作业对象与工程量、工序顺序、施工方法三方面要素(呈现形式不限,段落式叙述或带标签分点均可),小节标题用专业工程正式名称(如"拆除工程"),禁止使用"工作包"等后台概念命名','质量目标与创优目标必须使用招标文件原文的奖项名称逐字落位,禁止替换、降级或省略为其他奖项名称(如把招标文件指定奖项写成其他奖项);招标文件"确保/达到"类等级要求不得弱化为"争创/争取"','B5 属地创优目标(安徽省属地适配项):招标文件未明确具体奖项时,正文必须提出不低于招标文件要求的属地创优目标,如"争创合肥市级优质工程""争创市级安全文明标准化工地"等,并在质量与文明施工章节落位','B5 表格数据一致性(丰乐镇第三轮实测:合计行 5088 与阶段工日之和 5808 矛盾、班组人数 22/28/30 多值并存):表格类内容(劳动力投入、材料配置、机械设备等)合计行数值必须与上方明细行数据一致、可由各行相加推导;各阶段人数与全项目峰值人数必须显式区分口径并保持一致(如写明"阶段高峰人数按阶段分别统计,合计行仅列全项目峰值口径");同一班组人数在配置表与进退场表中必须同值,不得多值并存',...f.length?[`投标人须知前附表响应条款(正文必须逐条落位或遵守,零响应即评标失分):${f.map((a,b)=>`${b+1}.${a}`).join(";")}`]:[]],h=a.chapters.map(b=>{var c;let d=(c=b.title,aE.find(a=>a.pattern.test(c))),e=(a.projectGraph?.works||[]).filter(a=>a.name&&(b.title.includes(a.name.slice(0,2))||/概况|总体|施工内容|方案|施工/u.test(b.title))).slice(0,10),f=(a.projectGraph?.resources||[]).filter(a=>a.quantity&&/概况|资源|总体|施工内容|方案/u.test(b.title)).slice(0,12).map(a=>({itemCode:"",itemName:a.name,quantity:a.quantity,unit:a.unit}));return{chapterId:b.id,chapterTitle:b.title,writingGoal:d?.goal||"结合本章标题与项目资料事实展开专业内容,避免泛化叙述",mustCover:[...d?.mustCover||[],...(b.requiredFacts||[]).slice(0,6)],factDomains:[...b.requiredFacts||[],...e.map(a=>a.name)].slice(0,10),evidenceRefs:b.queries.slice(0,6).map(a=>({filePath:a,kind:"query",priority:"should"})),boqTargets:f,drawingTargets:[],gaps:[]}});return{documentType:c?"施工组织设计":"专业文档",globalWritingFocus:c?[...g,"招标硬性要求必须逐项明确响应:质量标准、计划工期、缺陷责任期与保修、安全文明目标、项目经理及组织机构;工期/质量/保修类承诺可在概况与质量章节落位,不得遗漏",...e.length?[`项目规模事实卡(口径裁决值,正文引用规模数据必须与之一致,不得混淆总占地与建筑总量口径):${e.join(";")}`]:[],...d.length?[`项目可信基础事实(写作时必须优先落位):${d.slice(0,10).join(";")}`]:[]]:g.slice(0,2),chapters:h}}({chapters:b7,factsModel:bV,projectGraph:bX||void 0,requirement:a.requirement,templateName:E.name,tenderRequirements:cj}),cB=function(a){if(!a||!Z(a))return"";let b=[],c=(a,c)=>{for(let d of c)b.push(`${a}:${d.text}${d.source?`(来源:${d.source})`:""}。`)};return(c("本项目创优目标(必须全文显性响应,质量目标章节必须逐条承接并配套创优保证措施;奖项名称必须与招标文件原文逐字一致,禁止替换、降级或省略为其他奖项名称,“确保/达到”不得弱化为“争创”)",a.awardObjectives),c("特殊质量标准(实质性要求,质量目标必须显性写明)",a.specialQualityStandards),c("奖项条款(与创优目标关联,创优保证措施须覆盖申报与兑现条件)",a.awardClauses),a.greenBuildingGrade&&b.push(`绿色建筑等级要求:${a.greenBuildingGrade.text}。必须编制系统性绿色施工保证方案(节能/节地/节水/节材/室内环境指标控制与验收),不得仅以单一指标替代整体响应。`),a.smartSiteGrade&&b.push(`智慧工地等级要求:${a.smartSiteGrade.text},智慧工地建设方案须达到该等级。`),a.assemblyRate&&b.push(`装配率要求:${a.assemblyRate.text},装配式施工方案须覆盖水平构件与相关部品。`),c("体系基准要求(必须逐项覆盖表述,不得零散遗漏)",a.systematicBenchmarks),c("投标人须知前附表响应条款(施组必须逐条响应或遵守,零响应即评标失分)",a.frontScheduleClauses.filter(a=>!(0,w.dn)(a.text))),a.dateFabricationProhibited&&b.push("禁止编造开工日期:招标文件以开工令时间为准,正文不得自行设定具体日历开工日期,一律表述为“以开工令时间为准”。"),c("禁止性/约束性要求(正文不得违反)",a.prohibitionNotes),0===b.length)?"":`【招标文件评分项要求(系统从绑定资料提取,必须逐条响应,零响应即评标失分)】
92
+ 请在该小节内部按上述标题逐一补齐(标题一字不差,不得增删改、合并或调序),每个工作包小节按三要素展开正式正文:作业对象与工程量(什么部位、什么规模)、工序顺序(先后顺序清晰)、施工方法(工艺做法、工艺参数、验收检测)。已有内容一律不得改动,不得删除任何已有小节与段落,不得输出 Markdown 表格。`});return k(()=>(0,aJ.X6)(h,`workpackage-skeleton-repair:${a.chapter.id}`,()=>(0,aJ.l8)({template:d,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[b.join("\n"),"清单之外的内容一律不得改动;不得删除任何小节标题、表格与数值参数。"],promptTexts:e,requirement:f,forbidDrawingImages:!0,diagnostics:h,signal:g,anchorTexts:a.entries.map(a=>({text:a.headingLine,append:!0})),maxTokens:6e3})))},q=await Promise.allSettled(c.map(a=>n(a))),r=0;if(q.forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;console.error("[gen] workpackage skeleton repair failed:",a.reason);return}let d=a.value,{chapter:e}=c[b];d.content&&d.content!==e.content&&(e.content=d.content,r+=1,o+=1)}),j(b),0===r)break;m=!0}return(m||n>0)&&((0,aI.fx)(i,(0,aI.X5)({type:"llm_review",roleId:"workpackage-skeleton-repair",status:"success",message:`工作包骨架收口完成:表格剥离 ${n} 处、骨架补写 ${o} 章`},{subtitle:"工作包骨架收口"})),j(b)),{skeletonFixApplied:m}}async function eo(a){let{chapterDraftsFinal:b,template:c,reviewPromptTexts:d,repairPromptTexts:e,requirement:f,signal:g,projectContext:h,generationDiagnostics:i,preliminaryFactsModel:j,scopeConflicts:k,progressStages:l,emitProgress:m,withProgressHeartbeat:n,blueprintData:o}=a,p=[],q=!1;try{let r=a.globalReviewSamplingRate??1,t=r>=1||b.length<=2?b:b.filter((a,b)=>b%Math.max(2,Math.round(1/r))==0),u=t.length,w=async()=>{let a=b.map(a=>a.content).join("\n\n"),[e,j]=await Promise.all([n(()=>aS({template:c,chapters:t,chapterReviews:[],promptTexts:d,requirement:f,projectContext:h,diagnostics:i,signal:g})),bF(a,{diagnostics:i,signal:g})]);return{issues:[...new Set([...e.issues,...j.map(a=>{let b={level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`数据一致性矛盾(${a.kind}):${a.description}(原文 A:“${a.itemA.slice(0,60)}” ↔ 原文 B:“${a.itemB.slice(0,60)}”)`,suggestion:"全文数据必须一致:以绑定资料(图纸/清单/招标文件)为准选定唯一值,统一矛盾数值对,删除或修正其余矛盾表述。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。"};return`${b.message};${b.suggestion||""}`})])],stage:e.stage}},x=[],y=async()=>{let a=b.map(a=>a.content).join("\n\n"),c=(0,a5.t1)(a),d=await (0,v.Mv)(c.sentences,c.overviewBody?[c.overviewBody]:[]);return[...(await (0,s.qm)(a,j,k)).filter(a=>/跨章一致性冲突/u.test(a.message)),...(await (0,s.hr)(a,j)).filter(a=>"error"===a.level),...(0,a5.rA)(a),...(0,a5.Et)(a),...(0,a5.H)(a),...(0,a5.$$)(a,j.specAuthorityMap),...(0,a5.N$)(a),...(0,a5.Fr)(a),...(0,a5.bq)(a),...(0,a5.vH)(a),...(0,a5.cT)(a),...(0,a5.ub)(a),...(0,a5.cl)(a),...(0,a5.zP)(a),...await (0,a5.r8)(a,A),...await (0,a5.sn)(a),...(0,a5.l4)(a,{semanticSimilarity:d}),...await (0,a5.LF)(b),...o?(function(a,b){let c=[],d=a.split("\n").filter(a=>!/^\s*\|/u.test(a.trim())).join("\n");if(b.resources.labor.peakValue>0)for(let a of d.matchAll(/(?:劳动力峰值|施工高峰|高峰人数|高峰期劳动力|劳动力高峰)(?:为|约|达到|共计)?[^\n。;;]{0,20}?(\d+(?:\.\d+)?)\s*人/gu)){let d=Number(a[1]);if(d>0&&d!==b.resources.labor.peakValue){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用冲突:正文出现与蓝图不一致的劳动力峰值 ${d} 人`,suggestion:`请统一使用蓝图劳动力峰值:${b.resources.labor.peakValue} 人`});break}}if(b.contract.totalDays>0)for(let a of d.matchAll(/(?:总工期|施工工期|合同工期|工期)(?:为|约|共计|控制)?[^\n。;;]{0,20}?(\d+(?:\.\d+)?)\s*(?:日历)?天/gu)){let d=Number(a[1]);if(d>0&&d!==b.contract.totalDays){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用冲突:正文出现与蓝图不一致的工期表述 ${d}日历天`,suggestion:`请统一使用蓝图总工期:${b.contract.totalDays} 日历天`});break}}for(let d of b.redLineFacts.filter(a=>!a.amount&&"自然村数量"!==a.key)){let b=bv(d.value.trim());b&&(RegExp(b,"u").test(a)||c.push({level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图红线事实缺口:正文未体现「${d.key}=${d.value}」`,suggestion:`请在对应章节补写该红线事实(数值必须与蓝图一致)`}))}let e=b.redLineFacts.find(a=>"自然村数量"===a.key),f=e?Number(/(\d+)/u.exec(e.value)?.[1]):0;if(f>0)for(let a of d.matchAll(/(\d+)\s*个(?:美丽宜居)?自然村(?!分组)/gu)){let b=Number(a[1]);if(b>0&&b!==f){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图红线事实冲突:正文出现与蓝图不一致的自然村数量 ${b} 个`,suggestion:`请统一使用蓝图自然村数量:${f} 个自然村`});break}}for(let[a,e]of Object.entries(b.quantities)){if(!e||e.value<=0)continue;let b=e.unit||"",f=RegExp(`${bv(a)}[^
93
+ 。;;]{0,40}?(\\d+(?:\\.\\d+)?)\\s*${b?bv(b):""}`,"gu");for(let g of d.matchAll(f)){let d=Number(g[1]);if(d>0&&d!==e.value){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用冲突:正文出现与蓝图不一致的工程量 ${a} ${d}${b}`,suggestion:`请统一使用蓝图工程量:${a} ${e.value}${b}`});break}}}return c})(a,o).filter(a=>"error"===a.level):[]].map(a=>`${a.message};${a.suggestion||""}`)},z=await w(),A=(0,a5.P3)(j),B=(0,a5.z4)(j),C=z.issues;x=await y(),p=[...new Set([...C,...x])];let D=0;for(let a of b){let b=(0,a5.fE)(a.content,{...by(o),supportAuthority:A});b.fixedCount>0&&(a.content=b.markdown,D+=b.fixedCount)}D>0&&(x=await y(),p=[...new Set([...C,...x])]);let E=!1;for(let a=0;a<1&&p.length>0;a+=1){(0,aI.fx)(l,(0,aI.X5)({type:"llm_review",roleId:"global-consistency-repair",status:"running",message:`跨章一致性冲突第 ${a+1} 轮定向修复(${p.length} 个冲突)`},{subtitle:"跨章一致性修复"})),m(b);let d=0,h=b.flatMap(a=>{let b=a.content.replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡"),c=p.filter(c=>{if(c.includes(a.title))return!0;if(/基坑深度数值未锁定/u.test(c))return/基坑|支护|开挖|土方|降水/u.test(a.title)||a.content.includes("基坑");if((c.match(/不一致的表述\s*([^;;。\n]+)/u)?.[1]||"").split(/[、,,]/u).some(a=>{let c=a.trim().replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡");return c.length>=3&&b.includes(c)}))return!0;let d=c.match(/正文([^配比厚度\s]{1,6}?)(?:配比|厚度)/u)?.[1];return!!(d&&a.content.includes(d)||[...c.matchAll(/“([^”]{6,80})”/gu)].some(a=>b.includes(a[1].replace(/\s+/gu,""))))||[...c.matchAll(/(\d[\d,,.]*)\s*(?:人|台|日|个|次|天|月|套|具|处|项|条)/gu)].some(a=>b.includes(a[0].replace(/\s+/gu,"")))});return c.length>0?[{chapter:a,related:c}]:[]});if((await Promise.allSettled(h.map(({chapter:a,related:b})=>n(()=>(0,aJ.X6)(i,`global-consistency-repair:${a.id}`,()=>(0,aJ.l8)({template:c,chapter:{id:a.id,title:a.title,content:a.content,evidence:a.evidence||[],missingFacts:a.missingFacts||[],sections:a.sections},issues:b.map(a=>{let b=/重复/u.test(a)?"请删除本冲突描述的重复内容(保留首次出现的完整版本),不得改动其余正文。":/基坑深度数值未锁定/u.test(a)?void 0!==B?`请在本章基坑支护/开挖小节写出确定性的基坑开挖深度表述:本工程基坑开挖深度为 ${B}m(权威口径来自图纸标注,严禁写其他深度数值或「按图纸确定」类回避表述),并同步保留既有危大工程分级标注。`:"请从本章证据摘要中的图纸标注/勘察资料锁定基坑开挖深度数值,以确定性表述写入基坑支护小节(严禁「按图纸确定」类回避表述),不得编造数值。":/规格错位/u.test(a)?"请按冲突描述中的工程量清单权威规格修正本章对应部位的规格表述:同一材料不同部位允许不同规格,同一部位只允许权威规格,禁止把多种规格全文归一为一种。":"请严格按冲突描述中给出的资料口径修正本章对应表述,不得引入新的数值;与资料口径一致的既有表述(含分层/子项数值)不得改动;同一材料多种规格按所属部位/分部分项分别使用,禁止全文统一为一种规格。";return`${a};${b}`}),promptTexts:e,requirement:f,forbidDrawingImages:!0,diagnostics:i,signal:g})))))).forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;console.error("[gen] global consistency repair failed:",a.reason);return}let c=a.value,{chapter:e}=h[b];c.content&&c.content!==e.content&&(e.content=c.content,d+=1)}),0===d){E&&(C=(await w()).issues);break}m(b);let j=await y();x=j,0===a||0===j.length?(C=(await w()).issues,E=!1):E=!0,p=[...new Set([...C,...j])],(0,aI.fx)(l,(0,aI.X5)({type:"llm_review",roleId:"global-consistency-review",status:p.length>0?"failed":"success",message:p.length>0?`跨章一致性复检:仍有 ${p.length} 个冲突`:"跨章一致性复检通过"},{subtitle:"全局一致性审查"})),m(b)}await em({chapterDraftsFinal:b,template:c,repairPromptTexts:e,requirement:f,signal:g,generationDiagnostics:i,progressStages:l,emitProgress:m,withProgressHeartbeat:n}),await en({chapterDraftsFinal:b,projectContext:h,template:c,repairPromptTexts:e,requirement:f,signal:g,generationDiagnostics:i,progressStages:l,emitProgress:m,withProgressHeartbeat:n});let F=await (0,s.KI)(b,j,k),G=(0,a5.GG)(j),H=(0,a5.hI)(j),I=(0,a5.Pt)(j),J=by(o),K=(0,a5.dc)(b.map(a=>a.content).join("\n\n")),L=0;for(let a of b){let b=(0,a5.fE)(a.content,{scheduleAuthority:G,assemblyRateAuthority:H,...J,supportAuthority:A,laborPeakAuthority:K});b.fixedCount>0&&(a.content=b.markdown,L+=b.fixedCount)}let M=b.map(a=>a.content).join("\n\n"),N=(0,a5.t1)(M),O=await (0,v.Mv)(N.sentences,N.overviewBody?[N.overviewBody]:[]),P=0,Q=0,R=0,S=0,T=0,U=0,V=(0,a5.qG)(b);for(let a of(P+=V.removedCount,b)){let b=a.content.split(/\r?\n/u).length,c=(0,a5.lR)(a.content),d=(0,a5.Vc)(c.markdown),e=(0,a5.U$)(d.markdown,O),f=(0,a5.$h)(e),g=(0,a5.EN)(f.markdown,{areaSummary:I,scheduleDays:G}),h=(0,a5.K2)(g.markdown),i=h.markdown.split(/\r?\n/u).length,j=b-i,k=f.fixedCount-0+g.fixedCount+h.fixedCount;S+=f.fixedCount,T+=g.fixedCount,U+=h.fixedCount,(j>0||k>0)&&(P+=c.removedCount,Q+=d.removedCount,R+=j-c.removedCount-d.removedCount,a.content=h.markdown)}let W=await (0,a5.yR)(b),X=0,Y=0,Z=0,$=0,_=0,aa=0,ab=0;for(let a of b){let b=(0,a5.ir)(a.content);b.fixedCount>0&&(a.content=b.markdown,X+=b.fixedCount);let c=(0,a5.xp)(a.content);c.fixedCount>0&&(a.content=c.markdown,Y+=c.fixedCount);let d=await (0,a5.lv)(a.content);d.fixedCount>0&&(a.content=d.markdown,Z+=d.fixedCount);let e=(0,a5.Co)(a.content);e.fixedCount>0&&(a.content=e.markdown,$+=e.fixedCount);let f=(0,a5.zj)(a.content);f.fixedCount>0&&(a.content=f.markdown,_+=f.fixedCount);let g=(0,a5.SZ)(a.content);g.fixedCount>0&&(a.content=g.markdown,aa+=g.fixedCount);let h=(0,a5.GI)(a.content);h.fixedCount>0&&(a.content=h.markdown,ab+=h.fixedCount)}if(q=!0,F.fixedCount>0||L>0||P>0||Q>0||R>0||W>0||S>0||T>0||U>0||X>0||Y>0||Z>0||$>0||_>0||aa>0||ab>0){x=await y(),p=[...new Set([...C,...x])];let a=[F.fixedCount>0?`数值 ${F.fixedCount} 处`:"",L>0?`跨章数值 ${L} 处`:"",P>0?`重复表格 ${P} 行`:"",Q>0?`重复段落 ${Q} 行`:"",R>0?`概况复述句 ${R} 行`:"",W>0?`跨章语义重复段 ${W} 段`:"",X>0?`自伤表述改写 ${X} 处`:"",Y>0?`危大辨识补漏 ${Y} 项`:"",Z>0?`扬尘六个百分百补写 ${Z} 项`:"",$>0?`内部术语清洗 ${$} 处`:"",_>0?`无表头表格补齐 ${_} 处`:"",aa>0?`两可表述归一 ${aa} 处`:"",ab>0?`配置污染清洗 ${ab} 处`:""].filter(Boolean).join("、");(0,aI.fx)(l,(0,aI.X5)({type:"llm_review",roleId:"global-consistency-deterministic-fix",status:"success",message:`跨章一致性定点修复:${a}${F.details.slice(0,4).length>0?`(${F.details.slice(0,4).join("、")})`:""}`,details:F.details.slice(4)},{subtitle:"跨章一致性修复"})),m(b)}let ac=x.filter(a=>!ej.test(a)),ad=[...C,...x.filter(a=>ej.test(a))],ae=ac.length>0?"failed":"success",af=ac.length>0?`跨章一致性修复完成:仍残留 ${ac.length} 个可修复冲突(已记录,由交付门禁兑底)`:ad.length>0?`跨章一致性修复完成:确定性冲突已全部消除;另有 ${ad.length} 个审查提示/资料两可项(已记录,由交付门禁复核)`:"跨章一致性修复完成:冲突已全部消除";(0,aI.fx)(l,(0,aI.X5)({type:"llm_review",roleId:"global-consistency-repair",status:ae,message:af},{subtitle:"跨章一致性修复"})),m(b);let ag=u<b.length?{...z.stage,message:`${z.stage.message||"全局一致性审查完成"}(抽检 ${u}/${b.length} 章)`}:z.stage;(0,aI.fx)(l,ag),m(b)}catch(a){if(g?.aborted)throw a;console.error("[gen] global consistency review failed:",a)}return{issues:p,dedupRan:q}}async function ep(a){let b=(0,d.QJ)(a.templateId);if(!b)throw Error("Document template not found");let c=b.chapters.find(b=>b.id===a.chapterId);if(!c)throw Error("Document chapter not found");let f=e.resolve(a.projectRoot||(0,g.aY)());if(!f)throw Error("No knowledge base project found");let h=(0,g.Qh)(),i=(0,aL.Hh)(f,b,{requirement:a.requirement}),j=(0,aL.W9)(f,b,{requirement:a.requirement}),{kindByPath:k,processingByPath:l}=(0,aL.Hz)(j),m=new Set(i),q=(0,a_.Zq)(f,i),r=new Map([...k.entries()].map(([a,b])=>[a,(0,aL._W)(b)])),s=new Map([...l.entries()].map(([a,b])=>[a,b])),t=dC(await h.getProject(f),[...m],a.maxEvidencePerChapter),u=[],v=[...m].filter(Boolean).sort(),w=dy(c,c.queries,[]),x=function(a,b){let c=Number(process.env.DOCUMENT_MAX_QUERIES_PER_CHAPTER);return Math.max(2,Math.min(9,Math.floor(Number.isFinite(c)&&c>0?c:4)+ +((a.sections||[]).length>=6||a.requiredFacts.length>=8)+Math.min(2,b.length)))}(c,[]);for(let a of w.slice(0,x)){let b=await h.search(f,a,{scope:"project",filters:{filePaths:v},limit:Math.min(t,12),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15},generationMode:!0});u.push(...b.results.filter(a=>(0,aJ.Tz)(f,a.filePath,m)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:r.get(a.filePath),processingType:s.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let y=dx(c,(0,a_.Su)(u.filter(a=>(0,aJ.Tz)(f,a.filePath,m)),q),{maxItems:function(a,b,c=!1){return Math.max(12,Math.min(c?58:26,a+10+4*((b.sections||[]).length>=6||b.requiredFacts.length>=8)+18*!!c))}(t,c),maxChars:16e3,preservePinned:!0});(0,a_.U2)(y,q,`regenerate:${c.id}`);let z=a.currentMarkdown||"",A=new Set(a.existingFacts??[]),B=c.requiredFacts.filter(a=>!A.has(a)&&!y.some(b=>(0,p.Lk)(b,a)));if(0===y.length)throw Error(`${(0,o.GQ)(c.title)} 缺少可支撑正文的项目资料证据`);let C=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",z?`> 当前文档上下文摘要:${z.replace(/\s+/gu," ")}`:"",`本章依据已锁定项目资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`,"","### 资料依据",...y.map(n.OF)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:C,evidence:y,missingFacts:B}}async function eq(a){let b;(0,A.Te)(a.signal);let c=(0,d.QJ)(a.templateId);if(!c)throw Error("Document template not found");let C=e.resolve(a.projectRoot||(0,g.aY)());if(!C)throw Error("No knowledge base project found");let D=(0,f.computeProjectId)(C),E=c,G=(0,g.Qh)(),H=[],I=[],J=(b,c=T)=>{let d=b?[...b].sort((a,b)=>{let c=I.indexOf(a.id),d=I.indexOf(b.id);return(c<0?Number.MAX_SAFE_INTEGER:c)-(d<0?Number.MAX_SAFE_INTEGER:d)}):void 0;a.onProgress?.([...c],d?{chapters:d}:void 0)},O=Math.max(15e3,Math.min(6e4,Number(process.env.DOCUMENT_GENERATION_HEARTBEAT_MS??3e4))),P=async(b,c=T)=>{let d=setInterval(()=>{a.signal?.aborted||J(H,c)},O);try{return await b()}finally{clearInterval(d)}},R=(0,d.N6)(E)||"none",S=(0,i.Mu)(R)?.name||R,T=[(0,aI.X5)({type:"role_binding",roleId:R,status:"running",message:`生成任务已创建,正在读取模板与角色配置:${E.name}`,details:[`当前项目:${D}`,`资料目录:${(0,g.NW)(C)}`,"正在读取项目资料包和提示词配置"],progress:{current:1,total:4,label:"初始化配置"}},{subtitle:S,roleName:S,order:0})];J();let Y=(0,d.bj)(E),ac=Y.bindings;(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在分析模板规范、用户要求与项目资料包",details:["解析 OUTLINE 与模板章节","读取项目资料包","自动识别资料类型并构建项目理解"],progress:{current:1,total:3,label:"准备分析"}},{subtitle:"生成准备",order:T.length})),J();let ad=(0,cR.Qu)({template:E,requirement:a.requirement,projectRoot:C,facts:[]}).materialScope.selectedFiles;if(0===ad.length)throw Error("模板未绑定可用项目资料包,请先在模板中绑定需要参与生成的项目文件夹。");let ae=await P(()=>(0,g.q1)(C,ad));ae.deletedFiles>0&&((0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"知识库索引与绑定文件清单已同步",details:[`已清除 ${ae.deletedFiles} 个跨项目文件的索引(${ae.deletedChunks} 切片),生成全程只使用绑定资料`],progress:{current:1,total:3,label:"准备分析"}},{subtitle:"生成准备",order:T.length})),J());let af=(0,aL.W9)(C,E,{requirement:a.requirement}),ag=(0,aL._n)(E,af),{kindByPath:ah,processingByPath:ai}=(0,aL.Hz)(af),aj=(0,aJ.fC)([...Y.writerPrompts,...Y.chapterPrompts]),an=(0,o.cs)([{text:a.requirement,source:"用户需求",strict:!0},{text:aj,source:"提示词角色",strict:!0}]),ao=an.length>=2;ao&&(E={...c,chapters:an});let ap=await P(()=>Promise.resolve((0,k.P)(C,{requirement:a.requirement,boundFilePaths:ad})));(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在生成自动文档规格并评估生成准备度",details:[`项目资料:${ad.length} 份`,`资料类型:${Object.values(af.groups).filter(a=>a.length>0).length} 类`,"生成事实字段与章节约束"],progress:{current:2,total:3,label:"规格评估"}},{subtitle:"生成准备",order:T.length})),J();let aq=await P(()=>Promise.resolve((0,j.x)(E,a.requirement||""))),ar=aq.spec,au=(0,l.$i)(E,a.requirement||""),av=(0,m.$)({template:E,spec:ar,summary:ap,resolvedRoles:[]});if(!av.ready)throw Error(`生成准备度不足:${av.blockingIssues.join(";")}`);let aw=['【全文写作硬约束(每一章生成时必须遵守,违反即评审失分)】\n1. 禁止编造时间事实:开工日期、竣工日期、工期起止等未在项目资料中确认的日期一律不得写入正文;进度表述改用“开工后第 N 天”“第 N 周”等相对口径,或引用资料中已确认的日期。\n2. 禁止商务数据:暂列金额、暂估价、综合单价、清单合价、税率、投标报价等商务条款数据不得写入施工组织设计正文,商务口径只允许出现在项目信息表中。\n3. 禁止资料来源罗列话术:不得出现“根据/依据招标文件、工程量清单、图纸及答疑”式来源罗列句,直接陈述项目事实与施工安排;编制依据小节可集中列出依据文件。\n4. 禁止跨章复述概况:除“工程概况/项目概况”章节外,其余章节不得以“本项目为/本工程为”开头整段复述项目总体概况,应直接展开本章主题内容。\n5. 禁止后台内部话术:不得出现“工作包”“WRITER_MISSING_SECTION”“已确认资料”等系统内部术语与兜底话术,一律改写为正式施工组织设计表述。\n6. 合规数值红线(安全、职业健康、危大工程章节必须逐条对照,违反即合规失分):\n a. 高温停工按《防暑降温措施管理办法》(安监总安健〔2012〕89号):日最高气温达到40℃以上应停止当日室外露天作业;37℃~40℃时室外露天作业时间累计不得超过6小时且气温最高时段3小时内不得安排室外露天作业;35℃~37℃时应换班轮休缩短连续作业时间。不得写成42℃等其他阈值。\n b. 危大工程判定线按住建部令第37号及建办质〔2018〕31号:基坑(槽)土方开挖、支护、降水,开挖深度超过3m(含3m)属危大工程,超过5m(含5m)属超过一定规模(需专家论证);模板支撑搭设高度8m及以上或搭设跨度18m及以上属超过一定规模;落地式钢管脚手架搭设高度24m及以上属危大工程、50m及以上属超过一定规模,悬挑式脚手架分段架体搭设高度20m及以上属超过一定规模;采用非常规起重设备方法且单件起吊重量10kN及以上属危大工程、100kN及以上属超过一定规模。判定必须给出本项目对应参数(开挖深度/支撑高度/搭设高度/起吊重量),参数未在资料中确认的不得自行判定为危大或超危大。证据中含基坑底标高、\xb10.000对应绝对标高、垫层底标高等数值的,必须直接引用并据此给出开挖深度具体数值(开挖深度=地面标高-坑底标高),不得仅写“开挖深度超过3m”而不给数值;标高、坡率(如1:1.5)等设计参数应写入基坑支护与土方开挖相关小节。\n c. 专家论证程序按住建部令第37号:超过一定规模的危大工程专项方案应组织不少于5名符合专业要求的专家(从地方住建主管部门专家库选取)论证;修改后的方案由施工单位技术负责人审核签字、加盖单位公章,并由总监理工程师审查签字、加盖执业印章后方可实施。\n d. 监测预警值单一口径:同一监测指标(基坑位移速率、沉降预警值等)全文只能出现一个数值口径,不得前后矛盾;预警值优先引用设计文件明确值,无设计要求时按现行监测技术标准选取并注明依据。\n e. 自设数值自洽:自设的防护尺寸、频次、时间节点等数值必须与同章及跨章表述一致,且尽量引用现行规范依据;无规范依据的自设值不得写成硬性规定。\n7. 禁止数据自查话术:不得把表格口径推算、数据一致性自查过程写入正文(如"上表合计行…与…不一致,故…修正为…"),表格与正文数值必须直接自洽;不得把招标条款编号碎片(如"3项规定""1委员会确定中""56m15:…")作为小节标题。\n8. 禁止商务投标函内容:投标/评标纪律承诺、廉洁承诺、廉洁自律、行贿、串标、围标、弄虚作假、干扰评标等商务投标函条款与承诺一律不得写入施工组织设计正文(招标文件中的此类条款属商务文件应响应内容,不是技术标内容);本节只写技术方案与管理措施,不得以承诺句形式响应此类条款。',ag.prompt,(0,k.F)(ap,{publicSafe:!0}),(0,j.N)(ar,aq.sourceHash,{publicSafe:!0}),(0,m.R)(av,{publicSafe:!0})].filter(Boolean).join("\n\n"),ay=[ag.prompt,(0,k.F)(ap),(0,j.N)(ar,aq.sourceHash),(0,m.R)(av)].filter(Boolean).join("\n\n"),az=(0,aJ.fC)([...Y.writerPrompts,...Y.formattingPrompts]),aA=(0,aJ.fC)([...Y.writerPrompts,...Y.chapterPrompts,...Y.formattingPrompts]),aB=(0,aJ.fC)(Y.prompts),aC=(0,h.I)().load().webAccess||{enabled:!1,allowProjectFacts:!1,maxQueriesPerChapter:2,maxResultsPerQuery:3,trustedDomains:[]},aG=(0,as.c_)({promptTexts:[aw,aB].filter(Boolean).join("\n\n"),requirement:a.requirement,template:E,rolePrompts:Y.prompts}),aP=[(0,as.el)(aG),!aC.enabled?"":"公开资料补充使用规则:\n1. 公开资料只可用于补充通用规范、政策、工艺和措施。\n2. 不得使用公开资料新增或修改项目名称、建设地点、建设规模、工期、质量标准、工程量、材料规格、图纸参数、商务数据。\n3. 本地项目资料与公开资料冲突时,必须以本地项目资料为准。\n4. 不得在正文中出现任何检索过程、外部页面、工具调用或系统内部过程性表述。\n5. 不得把公开资料中的其他项目案例参数写入本项目正文。"].filter(Boolean).join("\n\n"),aQ=[aw,aP,`生成前规划章节结构:
94
+ ${(0,q.CK)(E)}`,az||aA].filter(Boolean).join("\n\n"),aR=[ay,aP,(0,aJ.fC)([...Y.extractionPrompts,...Y.referencePrompts])].filter(Boolean).join("\n\n"),aS=[aw,aP,(0,aJ.fC)([...Y.writerPrompts,...Y.chapterPrompts,...Y.formattingPrompts])].filter(Boolean).join("\n\n"),aT=[aw,aP,(0,aJ.fC)(Y.formattingPrompts)].filter(Boolean).join("\n\n");(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"document-preparation",status:"success",message:`模板规范与项目资料理解完成,识别 ${ad.length} 份项目资料`,details:[`提示词绑定:${ac.length} 个`,`项目资料包:${af.materialRoots.join("、")||"当前知识库"}`,ao?`识别 OUTLINE 章节:${an.length} 个`:"未识别显式 OUTLINE,使用模板章节"],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备",order:T.length})),J();let aU=new Set(ad),aV=new Map([...ah.entries()].map(([a,b])=>[a,(0,aL._W)(b)])),aW=new Map([...ai.entries()].map(([a,b])=>[a,b]));(0,aI.fx)(T,(0,aI.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:"running",message:"正在读取项目资料包索引",details:["使用上传阶段已完成的解析、切片和索引结果","不在生成流程中重新解析或入库","准备按资料类型召回章节证据"],progress:{current:1,total:3,label:"读取索引"}},{subtitle:"知识库检索",order:T.length})),J();let aX=await P(()=>G.getProject(C)),aY=function(a,b){let c=new Set(b.filter(Boolean)),d=(a.listFiles?.()||[]).filter(a=>0===c.size||c.has(a.relativePath)),e=new Set(d.map(a=>a.relativePath)),f=[...c].filter(a=>!e.has(a)),g=d.filter(a=>0===Math.max(0,Math.ceil(Number(a.chunkCount)||0))).map(a=>a.relativePath),h=d.filter(a=>"error"===a.status).map(a=>a.relativePath),i="function"==typeof a.countPendingIndexJobs?a.countPendingIndexJobs():0,j="function"==typeof a.getVectorStatus?a.getVectorStatus():void 0,k=d.filter(a=>"error"!==a.status&&Math.max(0,Math.ceil(Number(a.chunkCount)||0))>0),l=k.map(a=>a.relativePath),m=k.reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0),n=[...dA("部分绑定文件未完成索引,已自动跳过",f),...dA("部分绑定文件没有可用切片,已自动跳过",g),...dA("部分绑定文件索引失败,已自动跳过",h)],o=c.size>0&&0===m?["所有绑定文件均无可用切片"]:[],p=[...n,...i>0?[`仍有 ${i} 个待索引任务,建议等待索引完成后生成`]:[],...j&&"ready"!==j.status?[`向量索引状态为 ${j.status},当前召回质量可能下降`]:[]];return{scopedRecords:d,usablePaths:l,missingFiles:f,emptyFiles:g,errorFiles:h,pendingJobs:i,vectorStatus:j,usableChunkCount:m,blockingIssues:o,warnings:p}}(aX,[...aU]);if(aY.blockingIssues.length>0)throw Error(`生成前知识索引不可用:${aY.blockingIssues.join(";")}`);let aZ=new Set(aY.usablePaths),a0=(0,a_.Zq)(D,[...aZ]),a1=dC(aX,[...aZ],a.maxEvidencePerChapter),a2=aY.pendingJobs>0||0===aY.usableChunkCount,a3=function(a){let b=Math.max(0,Math.ceil(a.totalChunks||0)),c=Math.max(0,Math.ceil(a.loadedChunks||0)),d=Math.max(0,b-c),e=b>0?c/b:1,f=[...b>=1e3&&e<.35?["切片未完全预加载"]:[],...!1===a.vectorReady?["向量索引未就绪"]:[]];return{totalChunks:b,loadedChunks:c,omittedChunks:d,loadedRatio:e,highRisk:f.length>0,riskReason:f.join("、")||void 0}}({totalChunks:Math.min(aY.usableChunkCount,20*ad.length),loadedChunks:Math.min(aY.usableChunkCount,20*ad.length),vectorReady:aY.vectorStatus?"ready"===aY.vectorStatus.status:void 0});(0,aI.fx)(T,(0,aI.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:a2?"failed":"success",message:`已读取知识索引:项目资料 ${aY.scopedRecords.length} 份,可用切片 ${aY.usableChunkCount} 条`,details:[`项目资料:${aU.size} 份`,`可用证据文件:${aZ.size} 份`,`向量状态:${aY.vectorStatus?.status||"unknown"}`,...aY.warnings,"后续将按招标正文/清单/图纸/补疑等资料类型召回"],progress:{current:3,total:3,label:"索引已就绪"}},{subtitle:"知识库检索",order:T.length})),J(),(0,A.Te)(a.signal);let a4=[],a5=[],a6={enabled:aC.enabled,queries:[],evidenceCount:0,filteredCount:0,chapters:[]},bp=[],bq=[],br=[],bw=[],bx=[],by=-1,bz=new Map,bE=new Map,bF=a=>{let b=`${a}::full`;if(!bE.has(b))try{bE.set(b,aX.getFileDetail?.(a))}catch{bE.set(b,void 0)}return bE.get(b)},bG=async(a,b,c,d)=>{let e=dt(d),f="0"!==process.env.DOCUMENT_GENERATION_RERANKER,g=(0,A.c6)({query:a,scopedFilePaths:b,limit:c,weights:e,generationMode:!0,reranker:f}),h=bz.get(g);if(h)return h;let i=await G.search(C,a,{scope:"project",filters:{filePaths:b},limit:c,weights:e,generationMode:!0,disableReranker:!f}).catch(()=>null),j=i?.results||[];return bz.set(g,j),j},bH={stage:(0,aI.X5)({type:"file_understanding",roleId:"project-understanding",status:"success",message:`已完成项目资料理解:${af.files.length} 份资料,${Object.values(af.groups).filter(a=>a.length>0).length} 类资料类型`,details:ag.prompt.split("\n").slice(0,16)},{subtitle:"项目资料理解",order:T.length})};(0,aI.fx)(T,bH.stage),J();let bI=(0,a_.Su)(await cV({manager:G,project:aX,projectRoot:C,scopedFilePaths:[...aU].filter(Boolean).sort(),fileRoleByPath:aV,fileProcessingByPath:aW,signal:a.signal}),a0);(0,a_.U2)(bI,a0,"project-basic-evidence"),bI.length>0&&(a4.push(...bI),(0,aI.fx)(T,(0,aI.X5)({type:"knowledge_retrieval",roleId:"project-basic-evidence",status:"success",message:`已锁定项目基础事实证据 ${bI.length} 条`,details:bI.slice(0,8).map(a=>`${e.basename(a.filePath)}|${a.sectionTitle||"正文片段"}|score=${a.score.toFixed(2)}`)},{subtitle:"基础事实召回",order:T.length})),J());let{safe:bJ,excluded:bK}=await (0,w.a0)(a4),bL=await (0,w.M8)();bK.length>0&&((0,aI.fx)(T,(0,aI.X5)({type:"knowledge_retrieval",roleId:"evidence-content-safety",status:"success",message:`证据内容安全过滤:${bK.length} 条投标程序/评标纪律类证据已从写作链断开(系统侧提取通道不受影响)`,details:bK.slice(0,6).map(a=>`${e.basename(a.filePath)}|${a.sectionTitle||"正文片段"}`)},{subtitle:"证据内容安全",order:T.length})),J());let bM=bI.filter(a=>!bK.includes(a)),bN=new Set(bK.map(w.hM)),bO=(0,z.d6)({evidence:bJ,template:E,spec:ar,profile:au,scope:a0}),bP=bO.localFacts,bQ=bO.projectBasicFacts,bR=[...bP,...bQ,...bO.preciseFacts],bS=(0,ef.hp)({projectRoot:C,template:E,requirement:a.requirement}),bT=[...bS?.facts||[],...bR,...cG(bJ)],bU=await (0,z.d7)(bT,bO.structuredTables,bp,ar,au),bV=(0,cR.Qu)({template:E,requirement:a.requirement,projectRoot:C,facts:bT,projectGraph:bS?.projectGraph,projectGraphSource:bS?"project-intelligence":void 0});for(let a of(0,cR.SU)(bV))(0,aI.fx)(T,a);bS&&(0,aI.fx)(T,(0,aI.X5)({type:"file_understanding",roleId:"project-intelligence-cache",status:"success",message:`已复用入库后项目理解资产与绑定 scope 快照:${bS.files.length} 份绑定资料`,details:[`项目级缓存时间:${new Date(bS.cache.createdAt).toLocaleString()}`,`scope 快照:${bS.scopeSnapshot.scopeHash.slice(0,12)}`,`复用预计算事实:${bS.facts.length} 条`,`复用预计算项目图谱:${bS.projectGraph.works.length}工程/${bS.projectGraph.methods.length}工法/${bS.projectGraph.resources.length}资源`,`复用施工组织设计专项图谱:${bS.constructionOrganizationGraph.workPackages.length} 个工作包/${bS.constructionOrganizationGraph.controlMatrix.length} 条控制矩阵`,`图谱来源:${bS.cache.projectGraphMessage}`,`章节意图证据覆盖:${Object.keys(bS.evidenceByChapterId||{}).length}/${E.chapters.length} 章`,`排除正文不适用资料:${bS.files.filter(a=>!a.usableForBody).length} 份`]},{subtitle:"项目理解缓存 / Scope 快照"})),J();let bW=bV.baseProjectGraph;if(!bS){(0,aI.fx)(T,(0,aI.X5)({type:"file_understanding",roleId:"project-graph",status:"running",message:`正在临时构建完整项目图谱:${a4.length} 条证据 → LLM 结构化提取`,details:["缓存缺失或版本过期,建议重新构建项目理解缓存;本次生成将临时构建完整项目图谱。","提取:工程内容、施工方法、材料设备、技术标准、重点难点"],progress:{current:2,total:3,label:"项目图谱"}},{subtitle:"项目资料图谱分析",order:T.length})),J();let b=await P(()=>(0,ee.i)({evidence:bJ,signal:a.signal,projectRoot:C,requirement:a.requirement,templateId:E.id}),T);if(!b.graph)throw Error(`完整项目图谱构建失败:${b.stage.message||b.stage.status}`);bW=b.graph,(0,aI.fx)(T,b.stage),J()}bW&&(ag=(0,aL._n)(E,af,bW));let bX=cQ({facts:bT,projectGraph:bW,requiredKeys:cy.map(a=>a.key),projectRoot:C,requirement:a.requirement,templateId:E.id});bU.canonical=bX;let bY=(0,o.effectiveTemplateChapters)(E,ar,{preserveExplicitOutline:ao}),bZ=(0,t.dK)({template:E,chapters:bY,requirement:a.requirement}).chapters,b$=a4.filter(a=>/评审|评分标准|评分办法|详细评审/u.test(`${a.sectionTitle||""}${a.content}`)).map(a=>a.content),b_=(0,u.tL)(b$);b$.length>0&&0===b_.length&&(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"bid-structure-audit",status:"skipped",message:"评审章节证据存在但未提取到评分条目标题:评分标准编号条目提取为空,承接审计将静默通过",details:["请检查招标文件评标办法章节编号格式;评分项要求(创优目标/绿色等级/禁编日期)由评分项要求提取通道覆盖"]},{subtitle:"评标结构校验",order:T.length}));let b0=await (0,v.Mv)(b_.map(a=>a.title),bZ.map(u.Yx)),b1=(0,u.KX)({template:E,chapters:bZ,requirement:a.requirement,evaluationItems:b_,semanticSimilarity:b0}),b2=(async()=>{try{var b;let c,d=[];for(let a of[...aU].sort()){if(!/招标|补疑|答疑|评标/u.test(a))continue;let b=bF(a);if(b?.chunks?.length)for(let c of b.chunks)d.push({chapterId:"tender-requirements",filePath:b.file?.relativePath||a,score:1,content:c.content||"",roleId:aV.get(a),processingType:aW.get(a),sectionTitle:c.sectionTitle,source:"pinned-evidence"})}let f=d.length>0?await U(d):(0,n.QR)([...a4.filter(a=>/招标|评标|投标须知|专用合同|合同条款|技术标准|技术要求/u.test(`${a.filePath||""}${a.sectionTitle||""}`)),...a4.filter(a=>!/招标|评标|投标须知|专用合同|合同条款|技术标准|技术要求/u.test(`${a.filePath||""}${a.sectionTitle||""}`))],{preservePinned:!0});if(d.length>0){let a=d.reduce((a,b)=>a+(b.content?.length||0),0),b=f.reduce((a,b)=>a+(b.content?.length||0),0);(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-requirement-preselect",status:"success",message:`评分项要求有用数据预筛:${d.length} → ${f.length} 条切片(${Math.round(b/Math.max(1,a)*100)}% 字符量)`,details:["投标程序/清单/目录/格式类切片已从主提取输入剔除(义务词形+语义命中双通道保留)","全量切片仍作必提条款窄通道召回池,兜底不失效"]},{subtitle:"评分项要求提取\xb7预筛",order:T.length})),J()}let g="0"!==process.env.DOCUMENT_EXTRACTION_CACHE?(b={collectionEvidence:d,preselectEvidence:f},(0,A.c6)({version:"tender-requirements-extraction-v3",collection:_(b.collectionEvidence),preselectInput:_(b.preselectEvidence)})):void 0,h=g?function(a,b){try{let c=e.join($(a),`tender-requirements-${b}.json`),d=JSON.parse(x.readFileSync(c,"utf8"));if(!Z(d)||W(d))return;return d}catch{return}}(C,g):void 0;if(h)c=h,(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-requirements-cache",status:"success",message:"复用上次提取结果(招标文件与预筛输入哈希命中,跳过主提取/窄通道 LLM)",details:am(c)},{subtitle:"评分项要求提取\xb7缓存复用",order:T.length})),J();else{c=await P(()=>F(f,{signal:a.signal})),!Z(c)&&f.length>0&&(c=await P(()=>F(f,{signal:a.signal})));let b=await V(d),h=M(c);if(b.length>0&&h.length>0){let d=await P(()=>F(b,{signal:a.signal}));Z(d)&&(c=X(c,d),(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-mandatory-extraction",status:"success",message:"必提条款窄通道补提完成(主提取漏提字段已补齐)",details:am(d)},{subtitle:"评分项要求提取\xb7必提补提",order:T.length})),J())}let i=[];if(N(c).length>0&&d.length>0){let b=await P(()=>Q(c,d,{signal:a.signal}));c=b.model,i=b.stillGaps;let e=b.noEvidenceGaps,f=b.stillGaps;0===b.stillGaps.length&&((0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-field-gap-extraction",status:"success",message:"评分项要求字段定向补提完成(字段级聚焦提取,全部评分项要求字段已提取)",details:am(c)},{subtitle:"评分项要求提取\xb7字段补提",order:T.length})),J());let g=a=>K.includes(a);if(f.length>0){let a=f.filter(g),b=f.filter(a=>!g(a)),c=[a.length>0?`必提字段 ${a.map(a=>L(a)).join("、")}`:"",b.length>0?`常规字段 ${b.map(a=>L(a)).join("、")}`:""].filter(Boolean);(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-field-gap-missing",status:"skipped",message:`字段定向补提后仍缺失:${c.join(";")}(条款窗口证据存在但 LLM 提取失败)`,details:["请检查 LLM 可用性与输出质量;正文将无法显性响应上述评分项要求"]},{subtitle:"评分项要求提取\xb7字段缺口",order:T.length})),J()}if(e.length>0){let a=e.filter(g),b=e.filter(a=>!g(a)),c=[a.length>0?`必提字段 ${a.map(a=>L(a)).join("、")}`:"",b.length>0?`常规字段 ${b.map(a=>L(a)).join("、")}`:""].filter(Boolean);(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-field-gap-no-evidence",status:"skipped",message:`${c.join(";")}:招标资料中未找到对应条款(判定为无此要求,非漏提)`,details:["若项目实际存在该要求,请检查招标文件相关章节切片完整性"]},{subtitle:"评分项要求提取\xb7字段缺口",order:T.length})),J()}}g&&0===i.length&&function(a,b,c){if(!(!c||!Z(c)||W(c)))try{x.writeFileSync(e.join($(a),`tender-requirements-${b}.json`),JSON.stringify(c,null,2))}catch{}}(C,g,c)}return Z(c)?((0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"success",message:"招标文件评分项要求结构化提取完成",details:am(c)},{subtitle:"评分项要求提取",order:T.length})),J()):f.length>0&&((0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"skipped",message:"评分项要求提取未获得有效结果(模型不可用或资料中无要求),零响应检测自动跳过",details:[]},{subtitle:"评分项要求提取",order:T.length})),J()),c}catch(a){return(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"skipped",message:"评分项要求提取链异常,已降级为空模型(零响应检测自动跳过)",details:[`异常信息:${a instanceof Error?a.message:String(a)}`,"请检查 LLM 可用性与本地语义模型状态"]},{subtitle:"评分项要求提取",order:T.length})),J(),B(!1)}})(),b3=(0,aF.w9)({chapters:b1.enrichedChapters,projectGraph:bW,canonicalFacts:bX});E={...E,chapters:b3};let b4=(0,eg.NP)({template:E,context:bV,title:E.name});b4.catch(()=>void 0);let b5=new Map;if(bW){let a=new Set;for(let b of[...bW.works,...bW.methods,...bW.resources,...bW.schedule,...bW.standards,...bW.risks,...bW.requirements,...bW.siteConditions])(b.sourceFiles||[]).forEach(b=>a.add(b));for(let b of b3){let c=[b.title,b.purpose,...b.sections||[],...b.requiredFacts||[],...b.queries||[]].join(" "),d=a=>a&&((0,ei.C1)(a,c,.18)||(0,ei.C1)(a,b.title,.12)),e=/概况|总体|部署|施工|进度|工期|质量|安全|资源|人材机|材料|机械|劳动力|风险|危大|绿色|环保/u.test(c),f=bW.works.filter(a=>a.name&&(d(a.name)||e)),g=bW.methods.filter(a=>a.name&&(d(a.name)||(a.applicableWorks||[]).some(d)||e)),h=bW.resources.filter(a=>a.name&&(d(a.name)||/资源|人材机|材料|机械|劳动力/u.test(c)&&/material|equipment|labor/u.test(a.type))),i=bW.gaps.filter(a=>!(0,ef.Ut)(a)&&(d(a)||e)),j=new Set;for(let a of f)(a.sourceFiles||[]).forEach(a=>j.add(a));for(let a of g)(a.sourceFiles||[]).forEach(a=>j.add(a));for(let a of h)(a.sourceFiles||[]).forEach(a=>j.add(a));0===j.size&&e&&[...a].forEach(a=>j.add(a)),b5.set(b.id,{graphFiles:j,graphBoqItems:h.map(a=>({name:a.name,quantity:a.quantity,unit:a.unit,sourceFiles:a.sourceFiles||[]})),graphWorks:f.map(a=>a.name),graphMethods:g.map(a=>a.name),gaps:i})}bS||((0,aI.fx)(T,(0,aI.X5)({type:"file_understanding",roleId:"project-graph-match",status:"success",message:`图谱→章节映射完成:${bW.works.length}工程 ${bW.methods.length}工法 ${bW.resources.length}资源 → ${b3.length}章`,details:b3.map(a=>{let b=b5.get(a.id);return`${(0,o.GQ)(a.title)}:匹配文件${b?.graphFiles.size||0}个,BOQ项${b?.graphBoqItems.length||0}个`})},{subtitle:"图谱章节映射"})),J())}let b6=b3,b7=(0,ef.TD)(bS?.constructionOrganizationGraph)||bS?.constructionOrganizationContext,b8=a=>{let b=b5.get(a);return b&&(b.graphWorks.length||b.graphMethods.length||b.graphBoqItems.length)?[b.graphWorks.length?`专业工程:${b.graphWorks.slice(0,8).join("、")}`:"",b.graphMethods.length?`主要工法/工艺:${b.graphMethods.slice(0,8).join("、")}`:"",b.graphBoqItems.length?`关键资源:${b.graphBoqItems.slice(0,8).map(a=>a.name).join("、")}`:""].filter(Boolean).join(";"):""},b9=[ag.prompt,b7].filter(Boolean).join("\n\n"),ca=b9,cb={...E,chapters:b6},cc=(0,as.My)([aQ,a.requirement||""].filter(Boolean).join("\n\n"),b6),cd=(0,r.tF)({requirement:a.requirement,promptTexts:aQ,template:cb,chapters:b6,spec:ar}),ce=0,cf=0,cg=[],ch=await (0,A.l$)(b6.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b,chapterIndex:c})=>{if(b.sections?.length){ce+=1;let a=cc.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,o.GQ)(a.chapterTitle)===(0,o.GQ)(b.title)).flatMap(a=>a.requiredSections.sort((a,b)=>(a.order||0)-(b.order||0)).map(a=>a.title));for(let c of[...a,...b.sections]){let a=(0,as.EN)(String(c).trim());a&&a!==String(c).trim()&&cg.push(`${(0,o.GQ)(b.title)}:${c} → ${a}`)}let d=(0,as.k2)([...a,...b.sections],b.title);return{...b,sections:d.length?d:(0,as.k2)(b.sections,b.title)}}cf+=1;let d=(0,n.QR)(bJ.filter(a=>a.chapterId===b.id||(0,p.Lk)(a,b.title)),{preservePinned:!0}),e=ag.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",f=dm(Y,b),g=await (0,as.SP)({template:cb,chapter:b,chapterIndex:c,evidence:d,promptTexts:f.promptTexts,projectContext:ca,requirement:a.requirement,roleContext:e,targetWords:cd.chapterTargets.get(b.id)||1200,projectGraphSummary:b8(b.id),structuralRules:cc,signal:a.signal}),h=cc.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,o.GQ)(a.chapterTitle)===(0,o.GQ)(b.title)).flatMap(a=>a.requiredSections.map(a=>`强制小节:${a.title}`));if((0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"section-planning",promptId:f.primaryPromptId,status:g.length?"success":"failed",message:`${(0,o.GQ)(b.title)} 小节规划${g.length?`生成 ${g.length} 个小节`:"未生成可用小节"}`,details:[...f.promptDetails,...h,...g.length?g.map(a=>`规划小节:${a}`):["规划结果为空或被污染过滤"]]},{subtitle:"小节规划"})),!g.length)throw Error(`${(0,o.GQ)(b.title)} 小节规划未生成可用小节`);return{...b,sections:g}},{kind:"llmRepair",targetWords:cd.targetChars||4e3}),ci=await b2,cj=(0,t.dK)({template:E,chapters:ch,requirement:a.requirement}),ck=cj.chapters;if("template-locked"!==process.env.DOCUMENT_SECTION_PLANNING_MODE){let b=0,c=await (0,A.l$)(cj.chapters.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b})=>{if(!(b.sections||[]).length)return{chapterId:b.id,additions:[]};let c=(0,n.QR)(bJ.filter(a=>a.chapterId===b.id||(0,p.Lk)(a,b.title)),{preservePinned:!0}),d=ag.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",e=dm(Y,b),f=await (0,as.wy)({template:cb,chapter:b,evidence:c,promptTexts:e.promptTexts,projectContext:ca,requirement:a.requirement,roleContext:d,projectGraphSummary:b8(b.id),maxTotalSections:t.a0,signal:a.signal});return{chapterId:b.id,additions:f}},{kind:"llmRepair",targetWords:cd.targetChars||4e3}),d=[];ck=cj.chapters.map(a=>{let e=(c.find(b=>b.chapterId===a.id)?.additions||[]).filter(b=>!(a.sections||[]).some(a=>a.includes(b)||b.includes(a)));if(!e.length)return a;let f=e.slice(0,Math.max(0,t.a0-(a.sections||[]).length));return f.length?(b+=f.length,d.push({chapterTitle:a.title,sections:f}),{...a,sections:[...a.sections||[],...f]}):a}),(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"section-planning-additions",status:b>0?"success":"skipped",message:b>0?`专业小节补规划:为 ${d.length} 个章节新增 ${b} 个专业工作面小节`:"专业小节补规划:LLM 未产出有效增量,保留模板锁定结构",details:d.length?d.map(a=>`${(0,o.GQ)(a.chapterTitle)}:${a.sections.join("、")}`):["无新增(LLM 空响应/无支撑依据/与已有小节重复)"]},{subtitle:"专业小节补规划",order:T.length})),J()}let cl="0"!==process.env.DOCUMENT_REQUIREMENT_CALIBRATION,cm=ck;if(cl&&Z(ci)){let b=await P(()=>at({chapters:ck,requirementSummary:am(ci),templateName:E.name,signal:a.signal}));if(b.length>0){let a=function(a,b){if(!b.length)return{chapters:a,applied:[]};let c=[],d=a.map(a=>({...a,sections:[...a.sections||[]]}));for(let a of b){let b=d.findIndex(b=>(0,o.GQ)(b.title)===(0,o.GQ)(a.chapterTitle)||(0,as.nz)(b.title)===(0,as.nz)(a.chapterTitle));if(b<0)continue;let e=d[b],f=a.sections.filter(a=>!(e.sections||[]).some(b=>(0,as.kw)(b,a)));0!==f.length&&(e.sections.push(...f),c.push({chapterTitle:a.chapterTitle,sections:f}))}return a.every((a,b)=>{let c=d[b];return!!c&&(a.sections||[]).every(a=>(c.sections||[]).some(b=>(0,as.kw)(b,a)))})?{chapters:d,applied:c}:{chapters:a,applied:[]}}(ck,b);a.applied.length>0?(cm=a.chapters,(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"success",message:`大纲要求校准:新增 ${a.applied.reduce((a,b)=>a+b.sections.length,0)} 个评分项承接小节(结构守恒校验通过)`,details:a.applied.map(a=>`${(0,o.GQ)(a.chapterTitle)}:${a.sections.join("、")}`)},{subtitle:"大纲要求校准",order:T.length}))):(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"skipped",message:"大纲要求校准未通过结构守恒校验,回退原规划",details:["校准新增小节未通过章名匹配/标题清洗校验,全部丢弃"]},{subtitle:"大纲要求校准",order:T.length})),J()}else(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"skipped",message:"大纲要求校准未产出有效增量(章节结构已覆盖评分项要求或校准调用失败),回退原规划",details:[]},{subtitle:"大纲要求校准",order:T.length})),J()}let cn=await (0,w.mI)(cm),co=cm.reduce((a,b,c)=>a+Math.max(0,(b.sections||[]).length-(cn[c]?.sections||[]).length),0);{let a=cj.report;a.unattached.length>0?(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"construction-org-outline-unattached",status:"success",message:`标准模块挂靠:${a.totals.attachedModules} 个模块、${a.totals.sectionCount} 个小节;${a.unattached.length} 个可选模块未挂靠(无语义匹配章节,已记录)`,details:a.unattached.map(a=>`未挂靠:${a.moduleTitle}(${a.sections.length} 小节,${a.level})`)},{subtitle:"标准模块挂靠"})):(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"construction-org-outline-attached",status:"success",message:`标准模块挂靠:${a.totals.attachedModules} 个模块、${a.totals.sectionCount} 个小节全部挂靠`,details:a.attached.map(a=>`${"fallback"===a.kind?"兜底挂靠":"挂靠"}:${a.moduleTitle} → ${a.chapterTitle}`)},{subtitle:"标准模块挂靠"}))}let cp=await (0,v.Mv)(b_.map(a=>a.title),cn.map(u.Yx)),cq=(0,u.KX)({template:E,chapters:cn,requirement:a.requirement,evaluationItems:b_,semanticSimilarity:cp});b6=(0,aF.w9)({chapters:cq.enrichedChapters,projectGraph:bW,canonicalFacts:bX}),b6=(0,u.ji)(b6);let cr=await (0,w.mI)(b6),cs=b6.reduce((a,b,c)=>a+Math.max(0,(b.sections||[]).length-(cr[c]?.sections||[]).length),0);b6=cr;let ct=co+cs;ct>0&&((0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"outline-topic-filter",status:"success",message:`大纲小节主题过滤:剔除 ${ct} 个评标纪律/商务报价类离题小节`,details:["被剔除小节不进入写作、目录与预算计划",...cs>0?[`评标结构校验补挂回路二次剔除:${cs} 个条款碎片/纪律小节`]:[]]},{subtitle:"大纲主题约束",order:T.length})),J()),(cq.issues.length>0||b1.issues.length>0)&&(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"bid-structure-audit",status:cq.issues.some(a=>"blocker"===a.severity)?"failed":"success",message:`评标结构符合性校验:${cq.diagnostics.length} 个结构组,${cq.diagnostics.filter(a=>"satisfied"===a.status).length} 个已满足,${cq.diagnostics.filter(a=>"missing"===a.status&&"required"===a.level).length} 个必查缺失(已自动补挂),${cq.diagnostics.filter(a=>"fragmented"===a.status).length} 个分散`,details:[...cq.diagnostics.map(a=>`${"satisfied"===a.status?"满足":"fragmented"===a.status?"分散":"补挂"}:${a.groupTitle}${"missing"===a.status?`(补挂小节:${a.missingSections.join("、")})`:""}`),...cq.issues.map(a=>`提示:${a.message}`).slice(0,8)]},{subtitle:"评标结构校验"})),E={...E,chapters:b6};let cu=await (0,v.Mv)(ab(ci).map(({item:a})=>aa(a)),b6.map(a=>ak(a.title))),cv=await al(ci,b6,cu);cv.length>0&&((0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"tender-requirement-routing",status:"success",message:`评分项要求章节级路由:${cv.length} 条要求已路由到责任章节(生成时显性响应)`,details:cv.map(a=>`${a.kind}“${a.item.text}” → ${a.chapterTitle}(相似度 ${a.score.toFixed(2)})`)},{subtitle:"要求响应路由",order:T.length})),J());let cw=await ax(),cx=await aD(),cz=function(a){let b=(0,t.yt)({template:{id:"runtime",name:a.templateName||"",outputTitle:"",description:"",category:"",chapters:a.chapters},chapters:a.chapters,requirement:a.requirement}),c=/施工组织设计|施工组织|施组|技术标/u.test(`${a.templateName||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`)||b.length>0,d=Object.values(a.factsModel?.canonical?.byKey||{}).map(a=>`${a.label}=${a.value}`),e=d.filter(a=>/建设规模|建筑面积|占地|用地面积|装配|层数|高度/u.test(a)).slice(0,8),f=(a.tenderRequirements?.frontScheduleClauses||[]).map(a=>a.text).filter(Boolean).slice(0,12),g=["正文必须落到本项目资料已确认的事实,不得使用模板化空话或跨小节复制段落","措施类内容写成“责任岗位+执行动作+量化标准+检查频次+整改时限+复查销项”闭环句式:同一自然段内三要素(责任岗位+检查频次+整改闭环)须同时出现,全文每 1500 字至少 1 段闭环句式","正文每 1000 字至少落位 6 处带单位量化工艺参数(mm/MPa/养护天数/间距/压实度等),施工流程与施工方法须有明确的工序顺序表达(形式由模型自然选择、不做统一要求:顺序词叙述、编号步骤、有序/无序列表或箭头链均可),每个分部分项方案至少 1 处 3 环节以上工序顺序表达",'专业工程类小节必须覆盖作业对象与工程量、工序顺序、施工方法三方面要素(呈现形式不限,段落式叙述或带标签分点均可),小节标题用专业工程正式名称(如"拆除工程"),禁止使用"工作包"等后台概念命名','质量目标与创优目标必须使用招标文件原文的奖项名称逐字落位,禁止替换、降级或省略为其他奖项名称(如把招标文件指定奖项写成其他奖项);招标文件"确保/达到"类等级要求不得弱化为"争创/争取"','B5 属地创优目标(安徽省属地适配项):招标文件未明确具体奖项时,正文必须提出不低于招标文件要求的属地创优目标,如"争创合肥市级优质工程""争创市级安全文明标准化工地"等,并在质量与文明施工章节落位','B5 表格数据一致性(丰乐镇第三轮实测:合计行 5088 与阶段工日之和 5808 矛盾、班组人数 22/28/30 多值并存):表格类内容(劳动力投入、材料配置、机械设备等)合计行数值必须与上方明细行数据一致、可由各行相加推导;各阶段人数与全项目峰值人数必须显式区分口径并保持一致(如写明"阶段高峰人数按阶段分别统计,合计行仅列全项目峰值口径");同一班组人数在配置表与进退场表中必须同值,不得多值并存',...f.length?[`投标人须知前附表响应条款(正文必须逐条落位或遵守,零响应即评标失分):${f.map((a,b)=>`${b+1}.${a}`).join(";")}`]:[]],h=a.chapters.map(b=>{var c;let d=(c=b.title,aE.find(a=>a.pattern.test(c))),e=(a.projectGraph?.works||[]).filter(a=>a.name&&(b.title.includes(a.name.slice(0,2))||/概况|总体|施工内容|方案|施工/u.test(b.title))).slice(0,10),f=(a.projectGraph?.resources||[]).filter(a=>a.quantity&&/概况|资源|总体|施工内容|方案/u.test(b.title)).slice(0,12).map(a=>({itemCode:"",itemName:a.name,quantity:a.quantity,unit:a.unit}));return{chapterId:b.id,chapterTitle:b.title,writingGoal:d?.goal||"结合本章标题与项目资料事实展开专业内容,避免泛化叙述",mustCover:[...d?.mustCover||[],...(b.requiredFacts||[]).slice(0,6)],factDomains:[...b.requiredFacts||[],...e.map(a=>a.name)].slice(0,10),evidenceRefs:b.queries.slice(0,6).map(a=>({filePath:a,kind:"query",priority:"should"})),boqTargets:f,drawingTargets:[],gaps:[]}});return{documentType:c?"施工组织设计":"专业文档",globalWritingFocus:c?[...g,"招标硬性要求必须逐项明确响应:质量标准、计划工期、缺陷责任期与保修、安全文明目标、项目经理及组织机构;工期/质量/保修类承诺可在概况与质量章节落位,不得遗漏",...e.length?[`项目规模事实卡(口径裁决值,正文引用规模数据必须与之一致,不得混淆总占地与建筑总量口径):${e.join(";")}`]:[],...d.length?[`项目可信基础事实(写作时必须优先落位):${d.slice(0,10).join(";")}`]:[]]:g.slice(0,2),chapters:h}}({chapters:b6,factsModel:bU,projectGraph:bW||void 0,requirement:a.requirement,templateName:E.name,tenderRequirements:ci}),cA=function(a){if(!a||!Z(a))return"";let b=[],c=(a,c)=>{for(let d of c)b.push(`${a}:${d.text}${d.source?`(来源:${d.source})`:""}。`)};return(c("本项目创优目标(必须全文显性响应,质量目标章节必须逐条承接并配套创优保证措施;奖项名称必须与招标文件原文逐字一致,禁止替换、降级或省略为其他奖项名称,“确保/达到”不得弱化为“争创”)",a.awardObjectives),c("特殊质量标准(实质性要求,质量目标必须显性写明)",a.specialQualityStandards),c("奖项条款(与创优目标关联,创优保证措施须覆盖申报与兑现条件)",a.awardClauses),a.greenBuildingGrade&&b.push(`绿色建筑等级要求:${a.greenBuildingGrade.text}。必须编制系统性绿色施工保证方案(节能/节地/节水/节材/室内环境指标控制与验收),不得仅以单一指标替代整体响应。`),a.smartSiteGrade&&b.push(`智慧工地等级要求:${a.smartSiteGrade.text},智慧工地建设方案须达到该等级。`),a.assemblyRate&&b.push(`装配率要求:${a.assemblyRate.text},装配式施工方案须覆盖水平构件与相关部品。`),c("体系基准要求(必须逐项覆盖表述,不得零散遗漏)",a.systematicBenchmarks),c("投标人须知前附表响应条款(施组必须逐条响应或遵守,零响应即评标失分)",a.frontScheduleClauses.filter(a=>!(0,w.dn)(a.text))),a.dateFabricationProhibited&&b.push("禁止编造开工日期:招标文件以开工令时间为准,正文不得自行设定具体日历开工日期,一律表述为“以开工令时间为准”。"),c("禁止性/约束性要求(正文不得违反)",a.prohibitionNotes),0===b.length)?"":`【招标文件评分项要求(系统从绑定资料提取,必须逐条响应,零响应即评标失分)】
95
95
  ${b.map((a,b)=>`${b+1}. ${a}`).join("\n")}
96
- ${(0,A.TP)("以上为系统提取的评分项要求内容:实质要求(奖项名称、数字参数、等级指标等)必须显性响应进正文;本段提示词文字本身(编号、括号说明等元话语)禁止复述进正文")}`}(cj);cb=[ca,cB].filter(Boolean).join("\n\n");let cC="0"!==process.env.DOCUMENT_CONTEXT_SLIM_CHAPTER,cD=a=>cC?[b8,cB].filter(Boolean).join("\n\n"):cb,cE=(0,r.tF)({requirement:a.requirement,promptTexts:aR,template:E,chapters:b7,spec:ar}),cF=await b5;bW.documentPlan=cF.plan,bW.nodes.push(cF.node),(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:cF.node.outputSummary||"Agent 文档规划完成",details:cF.plan.chapters.map(a=>`${a.title}:${a.sections.length} 条细目`)},{subtitle:"Agent Document Planner",order:T.length})),I=b7.map(a=>a.id);let cH=cE.targetChars||[...cE.chapterTargets.values()].reduce((a,b)=>a+b,0),cI=(0,aJ.JP)({template:E,targetWords:cH,requirement:a.requirement,materialFileCount:ad.length,evidenceCount:a5.length}),cJ=(0,aK.C)({template:E,chapters:b7,targetWords:cH,requirement:a.requirement,materialFileCount:ad.length,evidenceCount:a5.length,hasVeryLargeExplicitChapter:b7.some(a=>(a.sections||[]).filter(Boolean).length>=30),configuredChapterConcurrency:Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),strategy:cI}),cK=(0,aJ.Zk)(cI);(bP.factSanitize.truncated>0||bP.factSanitize.dropped>0||bP.factSanitize.repaired>0)&&(cK.factSanitize={...bP.factSanitize});let cL=Date.now();(0,y.t5)(cH),(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${cI.mode} 生成策略:章节审查 ${cI.enableChapterReview?"启用":"跳过"}、全局审查 ${cI.enableGlobalReview?`${cI.globalReviewSamplingRate&&cI.globalReviewSamplingRate<1?`抽检 ${Math.round((cI.globalReviewSamplingRate??1)*100)}%`:"启用"}`:"跳过"}、最终质量审查 ${cI.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${cI.enableDocumentBudgetExpansion?"启用":"跳过"}`,details:cJ.triggers},{subtitle:"后台自动策略"})),bY.scopeConflicts.length>0&&(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"scope-conflict-resolution",status:"success",message:`源级数据口径冲突已裁决(补疑/澄清修正文件权威最高):${bY.scopeConflicts.map(a=>a.resolution?`${a.scope} → ${a.resolution}`:`${a.scope} → 待人工复核`).join(";")}`,details:bY.scopeConflicts.flatMap(a=>a.values.map(a=>`来源「${a.sourceFile||"未知文件"}」取值 ${a.value}${a.unit}`))},{subtitle:"数据口径裁决"}));let cM=(0,aI.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${cg} 章由 LLM 基于${ao?"OUTLINE 章节":"模板章节"}、项目资料理解和证据规划小节,${cf} 章已由模板显式提供小节并跳过规划`,details:ch.length?[...ch]:void 0},{subtitle:"小节规划策略"}),cN=ao?`;识别到 OUTLINE 章节 ${an.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",cP=[...Y.prompts.map(a=>`${a.category}|${a.roleId}|${a.id}|${a.name}|${a.bindingSource}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`),...Y.unresolvedRoles.map(a=>`unresolved|${a}|项目角色配置中的提示词角色不存在`),...Y.missingResourceRoles.map(a=>`missingResource|${a}|提示词角色未显式绑定资源`)];(0,aI.fx)(T,(0,aI.X5)({type:"role_binding",roleId:R,status:"success",message:`已绑定项目资料 ${ad.length} 份、${Y.prompts.length} 个有效提示词;写作 ${Y.writerPrompts.length}、章节 ${Y.chapterPrompts.length}、抽取 ${Y.extractionPrompts.length};已自动抽取运行时规则 ${aP.executionSummary.length} 条${cN}`,details:[...cP,...aP.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:S,roleName:S})),(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${aP.executionSummary.length} 条,版本 ${aP.sourceHash}`,details:aP.executionSummary.length?[...aP.executionSummary,`必需表格:${aP.requiredTables.join("、")||"无"}`,`必含关键词:${aP.requiredKeywords?.join("、")||"无"}`,`禁含内容:${aP.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})),(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"document-readiness",status:av.ready?"success":"failed",message:"生成准备度:绑定资料已就绪",details:av.diagnostics},{subtitle:"生成准备度检查"})),(0,aI.fx)(T,cM),J();let cS=Math.round(([...cE.chapterTargets.values()].reduce((a,b)=>a+b,0)||cE.targetChars||0)/Math.max(1,b7.length)),cU=Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),cW=cJ.chapterConcurrency,cX=cJ.reviewConcurrency;(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节流水线调度:${b7.length} 章全部同批并行生成,审查修复 ${cX} 路流水线(章节生成完立即进入审查,与后续章节生成重叠)`,details:[`有效章节数:${b7.length}`,`平均章节目标:${cS} 字`,Number.isFinite(cU)&&cU>0?`章节并发来自 DOCUMENT_CHAPTER_CONCURRENCY=${Math.floor(cU)}`:`全部章节并行生成,在飞调用不设并发上限;每章单轮修复(失败即放弃)`]},{subtitle:"章节流水线策略"})),J();let cY=new A.jf(cX),cZ=[],c$=[...a0].filter(Boolean).sort(),c_=Date.now(),c0=c$.length>0?(await (0,A.l$)(cT,async a=>bH(a,c$,Math.min(a2,12),""),{kind:"search"})).flat():[];cK.evidence.searchQueries+=cT.length,cK.evidence.searchMs+=Date.now()-c_;let c1=Date.now();try{b=function(a){let b=Date.now(),c={stage:"阶段 0",standardBlocksLoaded:0,standardBlockGaps:[],laborDerivationBasis:"清单汇总 \xd7 经验区间系数(定额工效知识不全,降级区间表达)",llmCalls:0,fallbackUsed:[],warnings:[],durationMs:0},d={version:"2.0.0",projectCode:function(a,b){let c=a=>a.replace(/^\d+(?:\.\d+)*\s*--\s*(?=\d{4}年)/u,""),d=/项目名称[::]\s*([^\n]{2,60})/u.exec(a);if(d){let a=c(d[1].trim()),b=a.split(/工期[::]|质量标准[::]|计价|施工地点/u)[0]?.trim()||a;if(b)return b}let e=/(\d{4}\s*年度\S{2,40}建设项目)/u.exec(a);return e?c(e[1].trim()):b||""}(a.basicFacts||"",a.templateName)||void 0,docType:"单位工程施工组织设计",createdAt:new Date().toISOString().slice(0,10),sourceMaterials:[...a.boundFilePaths]},g=function(a){let b=a.boundFilePaths.filter(a=>/工程量清单/u.test(a)&&a.toLowerCase().endsWith(".xls")).filter(a=>{let b=a.split("/").pop()||a;return!/封面|编制说明/u.test(b)});if(0===b.length)return{warning:`绑定资料中未识别到工程量清单 .xls 文件(${a.boundFilePaths.length} 份资料)`};let c=e.join(a7.homedir(),".customize-agent","projects",(0,f.computeProjectId)(e.resolve(a.projectRoot)),"kb.db");if(!x.existsSync(c))return{warning:`项目知识库索引不存在:${c}`};let d=[];for(let a of b)try{let b=function(a,b){let c=new((0,f.loadBetterSqlite3)())(a,{readonly:!0});try{return c.pragma("busy_timeout = 10000"),c.prepare("SELECT chunk_index, content, section_title FROM kb_chunks WHERE relative_path = ? ORDER BY chunk_index").all(b).map(a=>({chunkIndex:a.chunk_index,content:a.content,sectionTitle:a.section_title||""}))}finally{c.close()}}(c,a);if(0===b.length){d.push(`${a}(索引无切片)`);continue}let e=function(a){let b=a.sourceFile||"",c={totalChunks:a.chunks.length,markdownChunks:0,declarationChunks:0,skippedChunks:0,droppedIncompleteRows:0},d=[],e=[];for(let b of a.chunks){let a=b.sectionTitle,f=a.includes("表格路径声明");if(a.includes("附录")){c.skippedChunks++;continue}f?(e.push(b),c.declarationChunks++):"表格数据"===a||a.includes("表标题")||a.includes("第")||a.includes("工作表:")?(d.push(b),c.markdownChunks++):c.skippedChunks++}let f=new Map,g=a=>{let b=bb.exec(a);if(!b)return;let c=b[1],d=f.get(c),e=bd.exec(a),g=bc.exec(a);d?(!d.villageGroup&&e&&(d.villageGroup=e[1].trim()),void 0===d.totalPages&&g&&(d.totalPages=Number(g[1]))):f.set(c,{villageGroup:e?e[1].trim():"",totalPages:g?Number(g[1]):void 0})};for(let a of d)g(a.sectionTitle),g(a.content.split("\n")[0]||"");let h=[],i="",j="",k="",l="";for(let a of d){let d=bf(a),e=d||l;d&&(l=d);let g=f.get(e),m=g?.villageGroup||e||"",n=a.content.split("\n"),o=i;i="";let p=function(a){if(bc.exec(a))return 1;be.lastIndex=0;let b=be.exec(a);return be.lastIndex=0,b?Number(b[1]):void 0}(a.content);for(let d=0;d<n.length;d++){let e=n[d]||"";if(e.startsWith("|"))o.trim()&&c.droppedIncompleteRows++,o=e;else if(o)o+=e;else{let a=be.exec(e);a&&(p=Number(a[1])),be.lastIndex=0;continue}if(o.endsWith("|")){let c=o.split("|").map(a=>a.trim());o="";let d=c[1]??"",e=p,f=function(a){let b=a.join(" "),c=/第(\d+)页\s*共\d+页/u.exec(b);return c?Number(c[1]):void 0}(c);if(f&&(p=f),/^\d+$/u.test(d)&&ba.test(c[2]??"")){let f=Number((c[8]??"").trim()),g={seq:Number(d),code:c[2]??"",name:c[4]??"",description:c[5]??"",unit:c[6]??"",quantity:Number.isFinite(f)?f:0,section:j,subsection:k,villageGroup:m,page:e,sourceFile:b,chunkIndex:a.chunkIndex,sourceKind:"markdown"};g.seq>0&&h.push(g)}else/^[一二三四五六七八九十\d]+(?:\.\d+)?$/u.test(c[2]??"")&&!c[1]&&c[4]&&"分部小计"!==c[4]&&((c[2]??"").includes(".")?k=c[4]:(j=c[4],k=""))}}o.trim()&&(i=o)}i.trim()&&c.droppedIncompleteRows++;let m=[];for(let a of(l="",e)){let c=bf(a),d=c||l;c&&(l=c);let e=f.get(d),g=e?.villageGroup||d||"";m.push(...function(a,b){let c,d,e=[],f=a.split("\n"),g=()=>{c&&"number"==typeof c.seq&&c.seq>0&&e.push({seq:c.seq,code:c.code||"",name:c.name||"",description:(c.description||"").trim(),unit:c.unit||"",quantity:"number"==typeof c.quantity?c.quantity:0,section:"",subsection:"",villageGroup:b.villageGroup,sourceFile:b.sourceFile,chunkIndex:b.chunkIndex,sourceKind:"declaration"}),c=void 0,d=void 0},h=a=>{if(!c||!d)return;let b=a.trim();if(b){if("seq"===d){let a=Number(b);Number.isFinite(a)&&a>0&&(c.seq=a)}else if("code"===d)c.code=(c.code||"")+b;else if("name"===d)c.name=(c.name||"")+b;else if("description"===d)c.description=(c.description||"")+(c.description?" ":"")+b;else if("unit"===d)c.unit=b;else if("quantity"===d){let a=Number(b);Number.isFinite(a)&&(c.quantity=a)}}};for(let a of f){if(/^R\d+C\d+$/u.test(a)){/^R\d+C1$/u.test(a)?(g(),c={},d="seq"):d=void 0;continue}if(/^序号:$/u.test(a)){d="seq";continue}if(/^项目编码:$/u.test(a)){d="code";continue}if(/^项目名称:$/u.test(a)){d="name";continue}if(/^项目特征描述:$/u.test(a)){d="description";continue}if(/^单位:$/u.test(a)){d="unit";continue}if(/^工程量:$/u.test(a)){d="quantity";continue}if(/^(?:人工费|机械费|暂估价|合价|金额.*)$/u.test(a)){d=void 0;continue}h(a)}return g(),e}(a.content,{villageGroup:g,sourceFile:b,chunkIndex:a.chunkIndex}))}let n=new Map;for(let a of h)n.set(`${a.villageGroup}|${a.seq}`,a);for(let a of m){let b=`${a.villageGroup}|${a.seq}`;n.has(b)||n.set(b,a)}let o=[...n.values()].sort((a,b)=>a.villageGroup.localeCompare(b.villageGroup,"zh-CN")||a.seq-b.seq);var p=o,q=h;let r=bg(q);for(let a of p){let b;if("declaration"===a.sourceKind&&!a.section){for(let c of r.get(a.villageGroup)||[]){if(c.seq>a.seq)break;b=c}b&&(a.section=b.section,a.subsection=b.subsection)}}let s=[];for(let[a,b]of bg(o)){let c=b.map(a=>a.seq).sort((a,b)=>a-b),e=c[c.length-1]||0,g=[];for(let a=1;a<=e;a++)c.includes(a)||g.push(a);let h=function(a,b){for(let[c,d]of a)if(d.villageGroup===b)return{sheetId:c,...d}}(f,a),i=h?.totalPages,j=function(a,b,c){let d=new Set,e="";for(let f of a){let a=bf(f),g=a||e;if(a&&(e=a),!c||g===c){if(!c&&!(f.content.split("\n")[0]||"").includes(b))continue;for(let a of(bc.test(f.content)&&d.add(1),be.lastIndex=0,f.content.matchAll(be))){let b=Number(a[1]);d.add(b),b>1&&d.add(b-1)}be.lastIndex=0}}return[...d]}(d,a,h?.sheetId),k=i?Array.from({length:i},(a,b)=>b+1).filter(a=>!j.includes(a)):[],l=b.filter(a=>"declaration"===a.sourceKind).length,m=b.filter(a=>!a.code).length,n=b.filter(a=>!a.name).length,o=b.filter(a=>a.code&&!ba.test(a.code)).length;s.push({villageGroup:a,sheetId:h?.sheetId||"",totalPagesDeclared:i,pagesCovered:j.sort((a,b)=>a-b),pagesMissing:k,entryCount:b.length,entrySeqMissing:g,entriesFromDeclaration:l,entriesWithoutCode:m,entriesWithoutName:n,entriesWithInvalidCode:o,complete:0===g.length&&b.length>0})}return s.sort((a,b)=>a.villageGroup.localeCompare(b.villageGroup,"zh-CN")),{entries:o,villages:s,totalEntries:o.length,sourceFile:b,complete:s.length>0&&s.every(a=>a.complete),diagnostics:c}}({chunks:b,sourceFile:a});if(e.totalEntries>0)return{boq:e};d.push(`${a}(解析出 0 条目)`)}catch(b){d.push(`${a}(${b instanceof Error?b.message:String(b)})`)}return{warning:`清单解析失败:${d.join(";")}`}}({projectRoot:a.projectRoot,boundFilePaths:a.boundFilePaths});g.warning&&c.warnings.push(g.warning);let h=g.boq;h&&(c.boq={sourceFile:h.sourceFile,totalEntries:h.totalEntries,complete:h.complete,villageCount:h.villages.length,pagesMissingTotal:h.villages.reduce((a,b)=>a+b.pagesMissing.length,0)},h.complete||c.warnings.push("清单解析完整性校验未通过(序号缺口/页码缺失),蓝图覆盖校验将兜底报告")),c.stage="阶段 A";let i=function(a){let{boq:b}=a,c=bk(b),d=function(a){let b=[];for(let c of bl)for(let d of a.entries){if(!c.namePattern.test(`${d.name} ${d.description}`))continue;let a=c.extract(d);if(a){b.push({key:c.key,value:a,source:`清单条目 ${d.seq}「${d.name}」特征原文`,amount:c.amount});break}}return b}(b),f=function(a,b){let c=/(\d+)\s*个(?:美丽宜居)?自然村/u.exec(a);if(c)return Number(c[1]);let d=/(\d+)\s*个(?:美丽宜居)?自然村/u.exec(b);return d?Number(d[1]):0}(a.projectName,a.basicFacts||"")||b.villages.length;f>0&&d.push({key:"自然村数量",value:`${f} 个自然村`,source:"招标文件项目名称(清单自然村分组兜底)"});let g=function(a){let b={},c=a.entries.filter(a=>"垫层"===a.name).map(a=>/C\d{2}/u.exec(a.description)?.[0]).filter(a=>!!a);if(c.length>0){let a=new Map;for(let b of c)a.set(b,(a.get(b)||0)+1);b.cushion=[...a.entries()].sort((a,b)=>b[1]-a[1]||(a[0]<b[0]?-1:1))[0][0]}return b}(b),h=function(a,b){let c=/(?<!节点)(?<!阶段)(?<!分项)(?<!关键)(?:计划工期|合同工期|工期总日历天数|工期控制|工期目标|总工期|工期)[^。;;\n]{0,12}?(\d{1,4})\s*个?\s*日历天/u.exec(a)||/(\d{1,4})\s*个?\s*日历天[^。;;\n]{0,8}?(?:总工期|倒排|分解|完成)/u.exec(a),d=c?Number(c[1]):0,e=/质量(?:标准|要求)[^。;;\n]{0,20}?[::]\s*([^。;;\n]{1,20})/u.exec(a)||/合格/u.exec(a),f=e?(e[1]||"合格").trim():"",g=/(合造价〔\d{4}〕\d+号)/u.exec(a);return{totalDays:d,qualityStandard:f,pricingFile:g?g[1]:""}}(a.basicFacts||"",0),i=function(a,b){let c=new Map;for(let b of a.entries){if(b.quantity<=0)continue;let a=function(a){let b=`${a.name} ${a.description}`;return/塑料管|管道|检查井|雨水口|化粪池|涵管/u.test(b)?"管道铺设":/挖一般土方|挖沟槽|挖基坑|回填|清淤|余方|弃置/u.test(b)&&"m3"===a.unit?"土方工程":/混凝土|垫层|涵头|压顶/u.test(b)?"混凝土工程":/水泥混凝土|碎石|路床|铺装|道路|青砖|散水|块料/u.test(b)&&"m2"===a.unit?"道路铺装":/砌筑|砌体|砖/u.test(b)?"砌筑工程":/绿化|栽植|种植|苗木|草籽|喷播|灌木|乔木|色带|草坪/u.test(b)?"绿化工程":"安装工程"}(b),d=bm.find(a=>a.pattern.test(`${b.name} ${b.description}`))?.trade||"普工",e=`${a}|${d}`,f=bn[a]||{unit:b.unit,min:.05,max:.1},g=c.get(e)||{trade:d,workdaysMin:0,workdaysMax:0,unit:f.unit,basisQty:0};g.workdaysMin+=b.quantity*f.min,g.workdaysMax+=b.quantity*f.max,g.basisQty+=b.quantity,c.set(e,g)}let d=new Map;for(let a of c.values()){let b=d.get(a.trade)||{min:0,max:0,unit:a.unit,qty:0};b.min+=a.workdaysMin,b.max+=a.workdaysMax,b.qty+=a.basisQty,d.set(a.trade,b)}let e=Math.max(30,Math.round(.85*(b>0?b:360))),f=[...d.entries()].sort((a,b)=>b[1].max-a[1].max).map(([a,b])=>({trade:a,min:Math.max(1,Math.round(b.min/e*1.3)),max:Math.max(1,Math.round(b.max/e*1.6)),basis:`工种工程量约 ${Math.round(b.qty)}${b.unit} \xd7 经验工效区间 \xf7 有效工期 ${e} 天(定额工效知识不全,降级区间表达)`})),g=f.reduce((a,b)=>a+(b.min||0),0),h=f.reduce((a,b)=>a+(b.max||0),0),i={min:Math.max(10,Math.round(.75*g)),max:Math.max(10,Math.round(.9*h))},j=Math.round((i.min+i.max)/2);return{peak:i,peakValue:j,peakBasis:`各工种同期在场按 0.75~0.9 重叠系数折算(各工种人数区间之和 ${g}~${h} 人),峰值唯一口径取区间中值 ${j} 人`,byPhase:[],byTrade:f}}(b,h.totalDays),j=function(a){let b=[];for(let c of bo){let d=a.entries.filter(a=>c.pattern.test(`${a.name} ${a.description}`));if(0===d.length)continue;let e=d.reduce((a,b)=>a+b.quantity,0),f=Math.max(1,Math.min(4,Math.ceil(Math.log10(Math.max(10,e))-1))),g=Math.max(f,Math.min(8,f+2));b.push({name:c.name,spec:c.spec,min:f,max:g,basis:`${c.basis};相关条目工程量合计约 ${Math.round(e)}${d[0]?.unit||""}`})}return b}(b),k=function(a){let b=new Map;for(let c of a.entries){if(!c.name||c.quantity<=0)continue;let a=b.get(c.name);a?a.quantity+=c.quantity:b.set(c.name,{quantity:c.quantity,unit:c.unit})}return[...b.entries()].sort((a,b)=>b[1].quantity-a[1].quantity).slice(0,40).map(([a,b])=>({name:a,quantity:Math.round(1e3*b.quantity)/1e3,unit:b.unit,batchDesc:"按施工段分批进场",basis:"清单汇总 + 进度匹配"}))}(b),l=function(a,b){let c=b>0?b:360,d=[{key:"prep",label:"施工准备与清杂拆除",pattern:/清杂|拆除|场地平整|临时/u},{key:"pipe",label:"污水管网工程",pattern:/塑料管|检查井|管网|排水|化粪池|雨水口/u},{key:"road",label:"道路铺装工程",pattern:/道路|路床|水泥混凝土|级配碎石|路缘石|青砖|散水|过路涵/u},{key:"landscape",label:"景观与绿化工程",pattern:/景观|绿化|栽植|种植|苗木|喷播|小菜园|沟塘|清淤/u},{key:"lighting",label:"亮化与收尾工程",pattern:/路灯|亮化|配电|电缆|防雷/u}].map(b=>({...b,weight:a.entries.filter(a=>b.pattern.test(`${a.name} ${a.description}`)).reduce((a,b)=>a+b.quantity,0)})),e=Math.max(1,Math.round(.08*c)),f=c-e,g=d.slice(1),h=g.reduce((a,b)=>a+b.weight,0)||1,i=[{key:"prep",label:"施工准备与清杂拆除",duration:e,basis:`前导工作封顶 8% 总工期(清杂整治可与主体并行穿插,不按工程量权重独占)`}];for(let a of g){let b=Math.max(1,Math.round(a.weight/h*f*.95));i.push({key:a.key,label:a.label,duration:b,basis:`分部工程量权重 ${(a.weight/h*100).toFixed(1)}% \xd7 剩余工期 ${f} 天`})}let j=i.reduce((a,b)=>a+(b.duration||0),0);for(let a=i.length-1;a>=0&&j>c;a--){let b=j-c,d=Math.min(i[a]?.duration||0,b);i[a]&&d>0&&(i[a].duration=(i[a].duration||0)-d,j-=d)}return i}(b,h.totalDays),m=function(a){let b=[],c=a.entries.filter(a=>/塑料管|管道/u.test(a.name)&&"m"===a.unit).reduce((a,b)=>a+b.quantity,0);c>0&&b.push({scope:"污水管网管道",planDesc:`管道闭水试验分段检验,按每 200m 一段划分约 ${Math.max(1,Math.ceil(c/200))} 段(总长 ${Math.round(c)}m)`});let d=a.entries.filter(a=>/水泥混凝土|级配碎石|路床/u.test(a.name)&&"m2"===a.unit).reduce((a,b)=>a+b.quantity,0);d>0&&b.push({scope:"道路工程",planDesc:`路床压实度按每层每 200m\xb2 不少于 1 点检验,约 ${Math.max(1,Math.ceil(d/200))} 点(总面积 ${Math.round(d)}m\xb2)`});let e=a.entries.filter(a=>/检查井/u.test(a.name)).reduce((a,b)=>a+b.quantity,0);return e>0&&b.push({scope:"检查井",planDesc:`检查井逐座验收,共 ${Math.round(e)} 座`}),b}(b),n=function(a){let b=a.entries.filter(a=>/挖一般土方|挖沟槽土方|挖基坑土方|清淤/u.test(a.name)&&"m3"===a.unit).reduce((a,b)=>a+b.quantity,0),c=a.entries.filter(a=>/回填|路肩土|种植土/u.test(a.name)&&"m3"===a.unit).reduce((a,b)=>a+b.quantity,0),d=Math.max(0,Math.round((b-c)*1e3)/1e3);return{excavation:Math.round(1e3*b)/1e3,backfill:Math.round(1e3*c)/1e3,disposal:d,basis:"清单挖/填/弃量汇总(挖方含清淤),补疑口径:购土回填运距自行考虑"}}(b),o=function(a,b){let c=[{name:"挖掘机",kw:90},{name:"自卸汽车",kw:120},{name:"压路机",kw:75},{name:"蛙式打夯机",kw:3},{name:"混凝土搅拌运输车",kw:110},{name:"插入式振捣器",kw:1.5},{name:"洒水车",kw:90},{name:"高空作业车",kw:60}],d=a.reduce((a,b)=>a+(c.find(a=>a.name===b.name)?.kw||10)*(b.max||1),0);return{powerLoad:`按机械设备负荷计算:P = 1.1 \xd7 (K1\xd7ΣP1/cosφ + K2\xd7ΣP2) ≈ ${Math.round(.7*d)} kW(机械总功率约 ${Math.round(d)} kW \xd7 同时系数 0.7)`,waterUsage:`按用水量公式计算:q = Σ(工程量 \xd7 用水定额) + 生活用水,高峰人数 ${b.peakValue} 人 \xd7 生活用水 60L/人\xb7日 + 施工用水,总用水量按管网分段配置`}}(j,i),p=function(a,b){let c=function(){let a=e.join(a7.homedir(),".customize-agent","template-references"),b=e.join(a,"files","standard-blocks");if(!x.existsSync(b))return[];let c=e.join(a,"standard-blocks.json"),d=[];if(x.existsSync(c))try{d=(JSON.parse(x.readFileSync(c,"utf8")).blocks||[]).map(a=>a.id)}catch{d=[]}return 0===d.length&&(d=x.readdirSync(b).filter(a=>a.endsWith(".md")).map(a=>a.replace(/\.md$/u,""))),d.flatMap(a=>{let c=e.join(b,`${a}.md`);if(!x.existsSync(c))return[];let d=x.readFileSync(c,"utf8"),f=(/^title:\s*(\S.*)$/mu.exec(d)||[])[1]?.trim()||a;return[{id:a,title:f,source:(/^source:\s*(\S.*)$/mu.exec(d)||[])[1]?.trim()||"",lines:d.split("\n").filter(Boolean)}]})}(),d=[],f=[];for(let e of c){let c=[],f=!1;for(let a of e.lines){if(a.startsWith("---")||/^(id|title|source|updatedAt|tags):/u.test(a)||a.startsWith("# "))continue;if(a.startsWith("## ")){f=!0;continue}if(f)continue;let b=a.trim();if(!/^[-*\d]+[.、]?\s+/u.test(b))continue;let d=b.replace(/^[-*\d]+[.、]?\s+/u,"").trim();d&&c.push(d)}if("hazardous-works-37"===e.id){let c=function(a,b){let c,d=[],e=[...b.matchAll(/(?:开挖深度|挖深|基坑深度|沟槽深度)[^。;;\n]{0,30}?(\d+(?:\.\d+)?)\s*m/gu)].map(a=>Number(a[1])),f=a.entries.some(a=>/挖一般土方|挖沟槽|挖基坑/u.test(a.name)),g=!1;if(f){d.push("基坑(槽)土方开挖、降水——判定阈值:开挖深度超过3m(含3m)属危大工程,超过5m(含5m)属超过一定规模(须专家论证)");let a=e.length>0?Math.max(...e):void 0;void 0===a?(c="本项目含沟槽/基坑土方开挖,但资料(清单特征「挖土深度:详见设计图纸」)未给出具体开挖深度,危大等级判定待人工确认(不静默判定)",g=!0):c=a<3?`资料确认最大开挖深度 ${a}m < 3m,未达危大工程阈值,按一般土方工程管控`:a<5?`资料确认最大开挖深度 ${a}m,达到 3m(含)未达 5m,属危大工程,需编制专项施工方案(施工单位技术负责人审核签字、总监理工程师审查签字)`:`资料确认最大开挖深度 ${a}m ≥ 5m,属超过一定规模的危大工程,专项方案须专家论证(不少于5名符合专业要求的专家)`}else c="本项目清单未含基坑(槽)土方开挖条目,基坑工程危大判定不涉及";return d.push("专家论证程序:超过一定规模的危大工程专项方案组织不少于5名符合专业要求的专家论证;修改后的方案由施工单位技术负责人审核签字、加盖单位公章,并由总监理工程师审查签字、加盖执业印章后方可实施"),{items:d,conclusion:c,gap:g}}(a,b);d.push({id:"hazardous_works",title:"危大工程判定",source:e.source,items:[...c.items,`本项目判定结论:${c.conclusion}`],gap:c.gap})}else d.push({id:e.id,title:e.title,source:e.source,items:c.slice(0,30)})}for(let a of["organization","construction_prep","survey_plan","product_protection","emergency_plans","seasonal_measures","fire_control","tech_management","smart_site","handover_warranty","quality_innovation"])f.push(a),d.push({id:a,title:a,source:"(缺口:参考文档资产未建设)",items:[],gap:!0});return{blocks:d,gaps:f}}(b,(a.evidence||[]).map(a=>String(a.content||"")).join("\n")),q=function(a){let b=a.villages.map(a=>a.villageGroup).map(a=>({name:a,basis:"清单按自然村分组(工程名称)"})),c=b.length>1?`多村平行施工 + 村内流水作业(${b.length} 个自然村分组)`:"村内流水作业",d=[...new Set(a.entries.map(a=>a.section).filter(Boolean))];return{sections:b,sequence:d.length>0?d.join(" → "):"清杂拆除 → 管网道路 → 景观绿化 → 亮化收尾",sequenceBasis:"清单分部分项编排顺序归纳(管网先行、绿化收尾)",flow:c}}(b),r=function(a){let b=[],c=a.villages.length;return c>=2&&b.push({name:`${c} 个自然村分散施工组织协调`,measure:"按自然村分组划分施工段,多村平行施工 + 村内流水作业,配置专职协调员",basis:`清单按 ${c} 个自然村分组`}),a.entries.some(a=>/挖沟槽|沟槽开挖|塑料管铺设/u.test(`${a.name} ${a.description}`))&&b.push({name:"雨季管网沟槽施工",measure:"雨季排水与边坡防护,分段开挖、快速回填(联动季节施工措施板块)",basis:"清单含沟槽开挖与管道铺设条目"}),a.entries.some(a=>/道路|路床|路面/u.test(a.name))&&c>0&&b.push({name:"村庄内道路施工交通疏导",measure:"分段封闭施工,设置临时道路保障居民出行(补疑条款:居民出行临时道路)",basis:"清单含道路工程条目且村内施工"}),[...a.entries.map(a=>a.description)].some(a=>/杆线|管线保护|既有管线/u.test(a))&&b.push({name:"既有杆管线保护",measure:"开挖前探测交底,杆线保护措施费含在清单单价内",basis:"清单特征原文含杆线保护条款"}),0===b.length&&b.push({name:"多工序交叉施工组织",measure:"按清单分部分项编排顺序组织流水作业,加强工序衔接检查",basis:"清单分部分项结构"}),b}(b),s=function(a){let b=bs({facts:a.facts||[],evidence:a.evidence||[]}),c=[];a.contract&&a.contract.totalDays>0&&c.push({id:"contract_days",label:"总工期",values:[`${a.contract.totalDays} 日历天`]}),a.labor&&a.labor.peakValue>0&&c.push({id:"labor_peak",label:"劳动力峰值",values:[`${a.labor.peakValue} 人`]});let d=a.villageCount||0;if(d>0&&c.push({id:"village_count",label:"自然村数量",values:[`${d} 个自然村`]}),a.boq){let b=function(a){let b=new Map;for(let c of a.entries){if(!c.name||c.quantity<=0||/暂列|金额|计日工|税|费/u.test(c.name))continue;let a=c.section||"未分部条目",d=b.get(a)||[];d.push(c),b.set(a,d)}return[...b.entries()].sort((a,b)=>b[1].length-a[1].length).slice(0,3).map(([a,b])=>{let c=[...b].sort((a,b)=>b.quantity-a.quantity||(a.name<b.name?-1:1))[0];return`${c.name} ${c.quantity}${c.unit}(${a})`})}(a.boq);b.length>0&&c.push({id:"core_quantities",label:"核心工程量",values:b})}return{entries:[...b,...c]}}({facts:a.facts,evidence:a.evidence,contract:h,labor:i,boq:b,villageCount:f}),t=[...new Set(b.entries.map(a=>a.section).filter(Boolean))];return{data:{project:{name:a.projectName||"(待提取:项目名称)",scope:b.villages.length>0?`${b.villages.length} 个自然村分组(${b.villages.map(a=>a.villageGroup).join("、")})`:"",works:t},contract:{totalDays:h.totalDays,qualityStandard:h.qualityStandard,pricingFile:h.pricingFile},climate:{rainySeason:"6-8月",highTemp:"7-8月",winter:"12-2月"},milestones:l,resources:{labor:i,equipment:j},materialsPlan:k,fundPlan:{wageRule:"工资性工程款按合造价〔2022〕8号执行",usagePlan:"按进度分阶段使用"},testPlan:[],earthworkBalance:n,tempUtilities:o,redLineFacts:d,amountRule:"商务禁区延续:金额类数据禁入正文(合同估算价例外),fund_plan/red_line_facts 渲染时遵守",decisionLock:s,quantities:c,specAuthorities:g,inspectionBatches:m,standardBlocks:p.blocks,constructionDeployment:q,keyDifficulties:r,drawingNote:"总平面布置图/横道图/组织机构图为后期人工配图,蓝图只规划对应章节正文内容"},diagnostics:{standardBlocksLoaded:p.blocks.filter(a=>!a.gap).length,standardBlockGaps:p.gaps}}}({boq:h||{entries:[],villages:[],totalEntries:0,sourceFile:"",complete:!1,diagnostics:{totalChunks:0,markdownChunks:0,declarationChunks:0,skippedChunks:0,droppedIncompleteRows:0}},basicFacts:a.basicFacts,evidence:a.evidence,facts:a.facts,projectName:d.projectCode||""});c.standardBlocksLoaded=i.diagnostics.standardBlocksLoaded,c.standardBlockGaps=i.diagnostics.standardBlockGaps,c.stage="阶段 B/C";let j=function(a){let{chapterTitles:b,boq:c}=a,d=new Map;for(let a of c.entries){let b=a.section||"未分部条目",c=d.get(b)||[];c.push(a),d.set(b,c)}let e=new Map;for(let[a,b]of d){let c=function(a,b){let c=[...b].sort((a,b)=>a.seq-b.seq),d={},e=new Map;for(let a of c)a.name&&e.set(a.name,(e.get(a.name)||0)+a.quantity);for(let[a,b]of e){let e=c.find(b=>b.name===a)?.unit||"";d[a]={value:Math.round(1e3*b)/1e3,unit:e}}let f=[...new Set(c.map(a=>a.name).filter(Boolean))].slice(0,16),g=function(a){let b=[];for(let c of a)for(let a of bu(c.description))/含|配合|安装|铺设|浇筑|夯实|碾压|养护|刻痕|拉毛|切缝|灌缝|喷播|栽植|回填|吊装|固定/u.test(a.value)&&a.value.length<=60&&b.push(`${c.name}:${a.value}`);return[...new Set(b)].slice(0,20)}(c),h=[],i=new Set;for(let a of c){for(let b of bu(a.description)){let a=`${b.key}=${b.value}`;if(!i.has(a)&&(i.add(a),h.push({key:b.key,value:b.value,source:"boq"}),h.length>=24))break}if(h.length>=24)break}let j=[];for(let a of c)for(let b of bu(a.description))/压实|试验|检测|验收|闭水|合格/u.test(`${b.key}${b.value}`)&&j.length<12&&!j.includes(b.value)&&j.push(b.value);let k=(0,bh.cn)([a]),l=[];for(let a of(0===j.length&&k.length>0&&j.push(...k[0].acceptance.slice(0,6).map(a=>`${a}(知识卡)`)),k.slice(0,2)))for(let b of a.standards)l.includes(b)||l.push(b);return{name:a,kind:"major",quantities:d,processChain:f,methods:g,params:h,acceptance:j,standards:l,skeleton:["施工概况","施工流程","施工方法"],source:"boq",coveredSeqs:c.map(a=>a.seq)}}(a,b);e.set(a,[c])}return[...e.values()].flat(),{chapters:b.map((b,c)=>{var d;let f=String(c+1),g=bt.filter(a=>a.chapterPattern.test(b)).map(a=>`${a.item}(评审权重 ${a.weight})`),h=/主要分部分项|施工方案|施工方法/u.test(b)?[...e.entries()].map(([a,b],c)=>({id:`${f}.${c+1}`,title:a,targetWords:2400,requiredParams:b.flatMap(a=>Object.keys(a.quantities).slice(0,5).map(a=>({path:`data.quantities.${a}`,mode:"must_cite",strict:!0}))),scoredItems:["评标分项:主要施工方法(1.5)"],tablePlans:["主要工程量一览表"],workPackages:b})):[];return{id:f,title:b,isActive:(d=a.docType,!(/专项施工方案|专项方案|危大/u.test(d)&&/总平面|平面布置|施工部署|总体部署/u.test(b))),requiredParams:[],scoredItems:g,subSections:h}})}}({chapterTitles:a.chapterTitles,boq:h||{entries:[],villages:[],totalEntries:0,sourceFile:"",complete:!1,diagnostics:{totalChunks:0,markdownChunks:0,declarationChunks:0,skippedChunks:0,droppedIncompleteRows:0}},docType:d.docType});c.stage="阶段 D";let k={meta:d,data:i.data,outline:j,validation:{passed:!1,checks:[]},diagnostics:c};return k.validation=function(a,b){let c=[],d=(0,y.Jx)(a,bj);c.push({name:"1. Schema 校验",passed:0===d.length,message:0===d.length?"结构/类型/必填/边界全部通过":d.join(";")});let e=function(a,b){let c=[];if(b){let d=bk(b);for(let[b,e]of Object.entries(a.data.quantities)){let a=d[b];if(!a){c.push(`quantities.${b} 不在清单解析产物值集中(疑似编造)`);continue}Math.abs(a.value-e.value)>.011&&c.push(`quantities.${b} 数值 ${e.value} 与清单聚合值 ${a.value} 不一致`)}}for(let b of a.data.redLineFacts)b.value&&b.source||c.push(`红线事实「${b.key}」缺值或缺来源`);return c}(a,b);c.push({name:"2. 事实锚定校验",passed:0===e.length,message:0===e.length?"L1a 值全部 ∈ 清单解析产物值集,红线事实逐条有源":e.join(";")});let f=function(a,b){let c=[],d=a.outline.chapters.flatMap(a=>a.subSections).flatMap(a=>a.workPackages);if(b){let a=new Map;for(let b of d)for(let c of b.coveredSeqs){let d=b.name,e=a.get(d)||new Set;e.add(c),a.set(d,e)}let e=b.entries.filter(b=>{let c=a.get(b.section||"未分部条目");return!c||!c.has(b.seq)});e.length>0&&c.push(`清单条目零丢失校验失败:${e.length} 条未被工作包覆盖(如序号 ${e.slice(0,5).map(a=>a.seq).join("、")})`)}let e=new Set;for(let b of a.outline.chapters)for(let a of b.scoredItems)e.add(a.split("(")[0]||"");let f=bt.filter(a=>![...e].some(b=>b.includes(a.item))).map(a=>a.item);return f.length>0&&c.push(`十项评审承接缺失:${f.join("、")} 无章/节显性承接声明`),0===a.data.keyDifficulties.length&&c.push("重难点及保证措施未逐项列明(十项评审⑩硬要求)"),c}(a,b);c.push({name:"3. 覆盖校验",passed:0===f.length,message:0===f.length?"清单条目零丢失、十项评审全承接、重难点逐项列明":f.join(";")});let g=function(a){let b=[],c=a.data.contract?.totalDays||0,d=(a.data.milestones||[]).reduce((a,b)=>a+(b.duration||0),0);c>0&&d>c&&b.push(`里程碑总和 ${d} 天超过总工期 ${c} 天`);let{labor:e}=a.data.resources||{};if(e)for(let a of(e.peak&&e.peak.min>e.peak.max&&b.push(`劳动力峰值区间异常(min ${e.peak.min} > max ${e.peak.max})`),e.peakValue>0&&e.peak&&(e.peakValue<e.peak.min||e.peakValue>e.peak.max)&&b.push(`劳动力峰值唯一口径 ${e.peakValue} 人超出推导区间 ${e.peak.min}~${e.peak.max} 人`),e.byTrade||[]))(a.min||0)>(a.max||0)&&b.push(`工种「${a.trade}」人数区间异常`);let f=new Set((a.data.decisionLock?.entries??[]).map(a=>a.id));for(let c of(a.data.contract?.totalDays>0&&!f.has("contract_days")&&b.push(`决策锁缺失数据条目 contract_days(总工期 ${a.data.contract.totalDays} 日历天未入锁)`),e&&e.peakValue>0&&!f.has("labor_peak")&&b.push(`决策锁缺失数据条目 labor_peak(劳动力峰值 ${e.peakValue} 人未入锁)`),a.data.redLineFacts?.some(a=>"自然村数量"===a.key)&&!f.has("village_count")&&b.push("决策锁缺失数据条目 village_count(自然村数量红线事实未入锁)"),a.data.resources?.equipment||[]))(c.min||0)>(c.max||0)&&b.push(`机械「${c.name}」台数区间异常`);let g=(a.data.standardBlocks||[]).find(a=>"six-hundred-percent"===a.id);return g&&!g.gap&&6!==g.items.length&&b.push(`扬尘治理六个百分百板块条目数 ${g.items.length} 条(应为恰六条)`),b}(a);return c.push({name:"4. 内部一致性校验",passed:0===g.length,message:0===g.length?"里程碑/劳动力/机械区间自洽":g.join(";")}),{passed:c.every(a=>a.passed),checks:c}}(k,h),k.validation.passed||c.warnings.push(`蓝图校验未通过:${k.validation.checks.filter(a=>!a.passed).map(a=>a.name).join("、")}(一期旁路仅报告,不阻断生成)`),c.durationMs=Date.now()-b,k}({projectRoot:C,boundFilePaths:ad,chapterTitles:b7.map(a=>a.title),templateName:E.name,basicFacts:function(a){let b=Object.values(a.byKey||{}).filter(a=>!!(a&&a.label&&a.value)).sort((a,b)=>(b.priority||0)-(a.priority||0));return 0===b.length?"":b.slice(0,60).map(a=>`- ${a.label}:${a.value}`).join("\n")}(bY),evidence:bK,facts:[...bP.localFacts,...bP.projectBasicFacts,...bP.preciseFacts],signal:a.signal,diagnostics:cK});let c=function(a,b){let c=e.join((0,bi.Gl)(a),"assets","blueprint.json");return x.writeFileSync(c,JSON.stringify(b,null,2),"utf8"),c}(C,b),d=b.outline.chapters.reduce((a,b)=>a+b.subSections.reduce((a,b)=>a+b.workPackages.length,0),0);(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"integrated-blueprint",status:b.validation.passed?"success":"failed",message:b.validation.passed?`一体化蓝图已构建并落盘:清单 ${b.diagnostics.boq?.totalEntries??0} 条目、标准板块 ${b.diagnostics.standardBlocksLoaded} 个、工作包 ${d} 个(校验通过,参数桶与章切片接管各章写作)`:`一体化蓝图已构建但校验未通过(参数桶不注入,不阻断生成):${b.validation.checks.filter(a=>!a.passed).map(a=>a.name).join("、")}`,details:[`耗时 ${Date.now()-c1}ms`,`落盘:${c}`,`清单解析:${b.diagnostics.boq?`${b.diagnostics.boq.totalEntries} 条目 / ${b.diagnostics.boq.villageCount} 村 / 完整性校验${b.diagnostics.boq.complete?"通过":"未通过"}`:"未解析(见警告)"}`,`标准板块缺口:${b.diagnostics.standardBlockGaps.length>0?b.diagnostics.standardBlockGaps.join("、"):"无"}`,`四道校验:${b.validation.checks.map(a=>`${a.name}${a.passed?"✓":"✗"}`).join(" / ")}`,...b.diagnostics.warnings.slice(0,6).map(a=>`警告:${a}`)]},{subtitle:"一体化蓝图"})),J()}catch(a){b=void 0,(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"integrated-blueprint",status:"failed",message:`一体化蓝图构建异常(参数桶不注入,不阻断生成):${a instanceof Error?a.message:String(a)}`,details:[`耗时 ${Date.now()-c1}ms`,"蓝图异常时参数桶与章切片不注入,各章按证据独立成稿"]},{subtitle:"一体化蓝图"})),J()}let c2=!!b?.validation.passed,c3=b?.validation.passed?function(a){let b=["【一体化蓝图参数桶——全项目口径唯一权威源,正文引用必须与此一致,不得自行推导不同数值】"];b.push(`- 项目:${a.project.name}(${a.project.scope})`),a.contract.totalDays>0&&b.push(`- 总工期:${a.contract.totalDays} 日历天`),a.contract.qualityStandard&&b.push(`- 质量标准:${a.contract.qualityStandard}`),a.contract.pricingFile&&b.push(`- 计价依据:${a.contract.pricingFile}`),a.milestones.length>0&&b.push(`- 里程碑:${a.milestones.map(a=>`${a.label}${a.duration?` ${a.duration} 天`:""}`).join("、")}(总和 ≤ 总工期)`),a.resources.labor.peakValue>0&&b.push(`- 劳动力峰值:${a.resources.labor.peakValue} 人(全项目唯一口径,各章必须引用该值,不得自设其他峰值)`),a.resources.labor.byTrade.length>0&&b.push(`- 工种配置(人数以劳动力峰值唯一口径为准,不另设工种数值):${a.resources.labor.byTrade.map(a=>a.trade).join("、")}`),a.resources.equipment.length>0&&b.push(`- 主要机械:${a.resources.equipment.map(a=>`${a.name}${a.spec?`(${a.spec})`:""} ${a.quantity&&a.quantity>0?a.quantity:Math.round(((a.min??1)+(a.max??a.min??1))/2)} 台`).join("、")}`),a.materialsPlan.length>0&&b.push(`- 物资计划(清单汇总):${a.materialsPlan.slice(0,12).map(a=>`${a.name} ${a.quantity??""}${a.unit}`).join("、")}${a.materialsPlan.length>12?" 等":""}`),a.inspectionBatches.length>0&&b.push(`- 检验批划分:${a.inspectionBatches.map(a=>`${a.scope}——${a.planDesc}`).join(";")}`),void 0!==a.earthworkBalance.excavation&&b.push(`- 土方平衡:挖方 ${a.earthworkBalance.excavation}m\xb3、填方 ${a.earthworkBalance.backfill}m\xb3${a.earthworkBalance.disposal?`、弃方 ${a.earthworkBalance.disposal}m\xb3`:""}(清单汇总口径)`),b.push(`- 临时用电:${a.tempUtilities.powerLoad}`),b.push(`- 临时用水:${a.tempUtilities.waterUsage}`);let c=a.redLineFacts.filter(a=>!a.amount);c.length>0&&b.push(`- 评审红线事实(must_cite,正文必须逐条出现且数值一致):${c.map(a=>`${a.key}=${a.value}`).join(";")}`);let d=a.redLineFacts.filter(a=>a.amount);return d.length>0&&b.push(`- 金额类红线事实(商务禁区,不进正文):${d.map(a=>`${a.key}=${a.value}`).join(";")}`),a.decisionLock.entries.length>0&&b.push(`- 关键决策锁:${a.decisionLock.entries.map(a=>`${a.label}:${a.values.join("、")}`).join(";")}`),a.constructionDeployment.sections.length>0&&b.push(`- 施工部署:${a.constructionDeployment.flow};施工顺序 ${a.constructionDeployment.sequence}`),a.keyDifficulties.length>0&&b.push(`- 重难点(逐项列明):${a.keyDifficulties.map(a=>`${a.name}——${a.measure}`).join(";")}`),b.push(`- 金额禁区:${a.amountRule}`),b.push(a.drawingNote),b.join("\n")}(b.data):"";cK.metrics.push({name:"phase:plan",startedAt:cL,endedAt:Date.now(),durationMs:Date.now()-cL});let c4=Date.now();for(let c=0;c<b7.length;c+=cW){let d=b7.slice(c,c+cW);for(let e of(await Promise.all(d.map(async(d,e)=>{let f,g=c+e;(0,A.Te)(a.signal);let h=Date.now(),i=T.length;try{let c,e;T.push((0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:Y.writerPrompts[0]?.id,status:"running",message:`${(0,o.GQ)(d.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${g+1}/${b7.length}`,`二级小节:${d.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:g+1,total:b7.length,label:"章节生成"}},{subtitle:(0,o.GQ)(d.title),order:g})),J();let j=a.resumeChapters?.find(a=>a.id===d.id||a.title===d.title),k=j?.content?.trim(),l=j?.evidence?.length?[...j.evidence]:[],m=ag.chapterPlans.find(a=>a.chapterId===d.id||a.chapterTitle===d.title),t=m?Object.values(m.evidenceQueries).flat().filter(Boolean):[],x=d.queries.length>0?d.queries:[E.name,E.outputTitle,d.title],B=b6.get(d.id);if(bX&&B&&B.graphFiles.size>0){let a=[...a0],b=b=>a.includes(b)?b:a.find(a=>a.endsWith(b)||a.includes(b));for(let a of[...B.graphFiles].map(a=>b(a)||a).filter(a=>(0,aJ.Tz)(C,a,a0))){let b=bG(a);if(b?.chunks?.length)for(let c of b.chunks)l.push({chapterId:d.id,filePath:b.file?.relativePath||a,score:5+(B.graphWorks.length+B.graphMethods.length)*.5,content:c.content,roleId:aW.get(a),processingType:aX.get(a),sectionTitle:c.sectionTitle,source:"graph-evidence"})}}let D=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title),F=dy(d,[...x,...t],[]),I=Date.now();T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:Y.writerPrompts[0]?.id,status:"running",message:`${(0,o.GQ)(d.title)} 正在执行质量优先的章节检索${B?.graphFiles.size?`(图谱匹配 ${B.graphFiles.size} 个文件)`:""}`,details:F.map(a=>`检索:${a.slice(0,42)}`),progress:{current:g+1,total:b7.length,label:"证据检索"}},{subtitle:(0,o.GQ)(d.title),order:g}),J();let K=k?[]:[...a0].filter(Boolean).sort(),L=k?[]:bT?.evidenceByChapterId?.[d.id]||[];L.length>0&&l.push(...L);let M=[],N=(d.requiredFacts||[]).filter(a=>!!a&&!F.some(b=>b.includes(a)||a.includes(b))).map(a=>`${d.title} ${a}`),O=[...F,...N];if(K.length>0&&O.length>0){(0,A.Te)(a.signal);let b=await (0,A.l$)(O,async a=>bH(a,K,Math.min(a2,12),d.title),{kind:"search"});M.push(...b)}for(let a of(cK.evidence.searchQueries+=O.length,cK.evidence.searchMs+=Date.now()-I,T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,o.GQ)(d.title)} KB 检索完成:${O.length} 组查询,准备深度召回与语义排序`,progress:{current:g+1,total:b7.length,label:"证据检索"}},{subtitle:(0,o.GQ)(d.title),order:g}),J(),M))l.push(...a.filter(a=>(0,aJ.Tz)(C,a.filePath,aV)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:aW.get(a.filePath),processingType:aX.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));D&&K.length>0&&c0.length>0&&l.push(...c0.filter(a=>(0,aJ.Tz)(C,a.filePath,aV)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:aW.get(a.filePath),processingType:aX.get(a.filePath),sectionTitle:a.sectionTitle,source:"basic-fact-cache"})));let Q=k?[]:await (0,aL.$b)({manager:G,projectRoot:C,chapter:d,plan:m,profile:af,scopedFilePaths:K,limitPerQuery:Math.min(a2,10),signal:a.signal}).catch(()=>[]);l.push(...Q);let R=new Set((d.pinnedEvidenceFilePaths||[]).filter(Boolean)),S=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)&&l.push(...bN.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"})));let U=bK.filter(a=>/招标|投标须知|评标办法|专用合同条款|投标人须知/u.test(`${a.filePath||""}${a.sectionTitle||""}`));for(let a of(/概况|工程|项目|总体|部署/u.test(d.title)&&U.length>0&&l.push(...U.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"}))),new Set([...R]))){if(!(0,aJ.Tz)(C,a,aV))continue;let b=R.has(a),c=bG(a);c&&l.push(...c.chunks.map(a=>({chapterId:d.id,filePath:c.file.relativePath,score:1,content:a.content,roleId:aW.get(c.file.relativePath),processingType:aX.get(c.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let V=l.filter(a=>(0,aJ.Tz)(C,a.filePath,a0));if(!k&&aG.enabled&&aG.allowProjectFacts){let b=await a$({config:aG,chapterId:d.id,chapterTitle:d.title,sectionTitles:d.sections||[],runtimeRules:aP,localFacts:[...bV.project,...bV.schedule,...bV.quality,...bV.safety,...bV.resources,...bV.preciseFacts],signal:a.signal});bp.queries.push(...b.queries),bp.filteredCount+=b.filtered+b.evidence.length}let W=k?[]:(0,aL.SK)({project:aY,chapter:d,plan:m,profile:af,scopedFilePaths:K,highRisk:a4.highRisk});W.length>0&&V.push(...W),V=(0,a_.Su)(V,a1),bO.size>0&&(V=V.filter(a=>!bO.has((0,w.hM)(a))));let X=(()=>{let a=Number(process.env.DOCUMENT_SEMANTIC_TOP_CANDIDATES);return Number.isFinite(a)&&a>0?Math.floor(a):3e3})(),Z=function(a,b,c){if(c<=0||b.length<=c)return b;let d=b.map(b=>({item:b,lexical:(0,n.A1)(b,a.requiredFacts)*du(a,b.processingType)+dv(a,b)}));return d.sort((a,b)=>b.lexical-a.lexical),d.slice(0,c).map(a=>a.item)}(d,V,X),$=await (0,v.Mv)([(0,u.Yx)(d)],Z.map(dw)),_=dx(d,V,{preservePinned:!0,semantic:{similarity:$,queryText:(0,u.Yx)(d)}},cK);_=cO(_,bY.scopeConflicts),(0,a_.U2)(_,a1,`chapter:${d.id}:initial`);let aa=d.requiredFacts.filter(a=>!_.some(b=>(0,p.Lk)(b,a))),ab=0,ac=B?[B.graphWorks.length?`图谱识别本章工程内容:${B.graphWorks.join("、")}`:"",B.graphMethods.length?`图谱识别本章施工方法:${B.graphMethods.join("、")}`:"",B.graphBoqItems.length?`图谱识别本章BOQ清单项(${B.graphBoqItems.length}项):${B.graphBoqItems.map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",B.gaps.length?`图谱识别本章资料缺口:${B.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",ae=function(a){let b=[];for(let c of a){if(!c.resolution)continue;let a=c.values.filter(a=>`${a.value}${a.unit}`!==c.resolution);if(0===a.length)continue;let d=a.map(a=>`${a.value}${a.unit}`).join("、");"high"===c.confidence?b.push(`${c.scope}必须统一为 ${c.resolution}(补疑/答疑/澄清类修正文件权威最高;${d} 已被修正,正文禁止出现)`):"medium"===c.confidence?b.push(`${c.scope}应统一为 ${c.resolution}(按资料来源优先级裁决;${d} 为败选值,正文避免使用)`):b.push(`${c.scope}参考口径为 ${c.resolution}(锚定较弱,请人工复核;${d} 不参与自动改写)`)}return b}(bY.scopeConflicts),ah=cw.length>0?(()=>{let a=ak(d.title),b=cw.filter(b=>b.chapterTitle===a);return 0===b.length?"":["【本章必须显性响应的招标要求(逐条写入正文,零响应即评标失分)】",...b.map(a=>`- ${a.kind}:${a.item.text}`)].join("\n")})():"",ai=/扬尘|文明施工|环境保护|绿色施工|安全文明|环保/u.test(`${d.title}${d.purpose||""}`)?"【扬尘治理六个百分百——规范固定条目,必须逐项落实并写入正文,每项一句具体措施,六项不得缺项;若本项目无拆迁工程,对“拆迁工地100%湿法作业”必须显性写明“本项目无拆迁工程,不涉及拆迁工地湿法作业”,不得省略】\n- 施工工地周边100%围挡\n- 物料堆放100%覆盖\n- 出入车辆100%冲洗\n- 施工现场地面100%硬化\n- 拆迁工地100%湿法作业\n- 渣土车辆100%密闭运输":"",aj=(d.sections||[]).filter(a=>!/^(?:施工概况|施工流程|施工方法)$/u.test(a.trim())&&!/^附录/u.test(a.trim())),al=aj.length>0?`【必须输出以下规划小节为三级标题(### 小节名),逐个小节展开正式正文:每小节正文不少于 100 字,不得只写标题、不得空小节、不得用表格替代正文;小节名与章标题相同或相近也必须输出,不得省略或合并】${aj.join("、")}`:"",am=[ac,ah,al,ai,ae.length?`【数据口径强制约束】${ae.join(";")}`:"",m?.writingGoal,m?.mustCover?.length?`本章必须覆盖:${m.mustCover.join("、")}`:"",m?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${m.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),an=dm(Y,d);if(Y.writerPrompts.length>0&&!an.primaryWriter)throw Error(`${(0,o.GQ)(d.title)} 写作主控提示词未进入章节生成阶段`);let ao=[an.promptTexts,aw].filter(Boolean).join("\n\n"),ap=an.promptDetails.length?an.promptDetails:["未绑定章节写作提示词"],aq=(0,z.rC)({template:E,chapter:d,spec:ar,profile:au,promptTexts:ao,requirement:a.requirement,plan:m?{requiredContents:m.mustCover,evidenceNeeds:Object.values(m.evidenceQueries).flat()}:void 0}),as=(0,z.ji)({needs:aq,factsModel:bV,evidence:V,profile:au,excludedEvidenceKeys:bO}),at=as.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),av=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>eh(`${a.sectionTitle||""}${a.content||""}`).includes(eh(b)))),c=(a.chapter.tablePlans||[]).flatMap(a=>a.fillability?.missingProjectFactFields||[]),d=a.evidence.length<3?["章节证据数量不足"]:[],e=b.length+c.length+d.length,f=e>=5?"high":e>=2?"medium":"low",g="high"===f?"evidence_first":c.length>0?"generate_with_review_notes":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:f,missingFacts:b,missingEvidence:d,tableFieldGaps:[...new Set(c)],suggestedStrategy:g,reason:0===e?"章节事实、证据和表格可填性满足常规生成条件。":`识别到 ${e} 项生成前缺口,按 ${g} 策略生成。`}}({chapter:d,evidence:_}),ax=new Set(_.map(a=>a.filePath)).size,ay=!!B&&(B?.graphFiles.size||0)>=8&&ax>=6&&0===aa.length&&"low"===av.riskLevel,az=function(a){let b=a.evidenceFileCount<=2;return a.scopedFileCount>80?b:"evidence_first"===a.suggestedStrategy||a.highRisk||a.missingFactsCount>0||a.requiredMissingNeedsCount>0||b||a.evidenceCount<8&&"low"!==a.riskLevel}({scopedFileCount:K.length,evidenceCount:_.length,evidenceFileCount:ax,suggestedStrategy:av.suggestedStrategy,highRisk:a4.highRisk,missingFactsCount:aa.length,requiredMissingNeedsCount:at.length,riskLevel:av.riskLevel});if(!ay&&az&&K.length>0){let b=new Set([...aa,...at]).size;b>0&&(T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,o.GQ)(d.title)} 正在深度召回缺失事实证据(${b} 项需求)`,progress:{current:g+1,total:b7.length,label:"深度召回"}},{subtitle:(0,o.GQ)(d.title),order:g}),J());let c=await aH({manager:G,projectRoot:C,chapter:d,scopedFilePaths:K,fileRoleByPath:aW,fileProcessingByPath:aX,requiredNeeds:[...new Set([...aa,...at])],highRisk:a4.highRisk||at.length>0,signal:a.signal}).catch(()=>[]);ab=c.length,c.length>0&&(V=[...V,...(0,a_.Su)(c,a1)],bO.size>0&&(V=V.filter(a=>!bO.has((0,w.hM)(a)))),_=dx(d,V,{preservePinned:!0},cK),_=cO(_,bY.scopeConflicts),(0,a_.U2)(_,a1,`chapter:${d.id}:deep`),aa=d.requiredFacts.filter(a=>!_.some(b=>(0,p.Lk)(b,a)))),at=(as=(0,z.ji)({needs:aq,factsModel:bV,evidence:V,profile:au,excludedEvidenceKeys:bO})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,o.GQ)(d.title)} 深度召回完成:命中 ${ab} 条${at.length>0?`,仍缺 ${at.length} 项(触发轻量补充)`:""}`,progress:{current:g+1,total:b7.length,label:"证据检索"}},{subtitle:(0,o.GQ)(d.title),order:g}),J()}if(at.length>0&&K.length>0){let b=(0,a_.Su)(await aH({manager:G,projectRoot:C,chapter:d,scopedFilePaths:K,fileRoleByPath:aW,fileProcessingByPath:aX,requiredNeeds:at,highRisk:!0,signal:a.signal}).catch(()=>[]),a1);b.length>0&&(V=[...V,...b],bO.size>0&&(V=V.filter(a=>!bO.has((0,w.hM)(a)))),_=dx(d,V,{preservePinned:!0},cK),_=cO(_,bY.scopeConflicts),(0,a_.U2)(_,a1,`chapter:${d.id}:supplemental`),aa=d.requiredFacts.filter(a=>!_.some(b=>(0,p.Lk)(b,a))),at=(as=(0,z.ji)({needs:aq,factsModel:bV,evidence:V,profile:au,excludedEvidenceKeys:bO})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}for(let a of((0,a_.U2)(_,a1,`chapter:${d.id}:writer-input`),0===_.length&&bq.push(`${d.title}:缺少可支撑正文的项目资料证据`),aa))bq.push(`${d.title}:事实需求未满足 ${a}`);let aA=(0,aI.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:a5.length>0?"success":"failed",message:`已检索/绑定 ${a5.length} 条证据`});bz<0?bz=(0,aI.fx)(T,aA):T[bz]={...aA,order:T[bz]?.order??aA.order},J(),(0,A.Te)(a.signal);let aB=new Map,aC=b=>{let c=(0,A.c6)({kind:"section",query:`${d.title} ${b}`.trim(),scopedFilePaths:K}),e=aB.get(c);if(e)return Promise.resolve(e);let f=(0,aM.Ym)(b,d,_),g=f.filter(a=>aN.AM.test(a.content)).length;return f.length>=4&&g>=1?(aB.set(c,f),Promise.resolve(f)):dz({manager:G,projectRoot:C,chapter:d,sectionTitle:b,scopedFilePaths:K,fileRoleByPath:aW,fileProcessingByPath:aX,signal:a.signal}).then(a=>(aB.set(c,a),a))},aD=b=>{if(0===b.length||0===K.length)return Promise.resolve([]);let c=b.join(" ");return dz({manager:G,projectRoot:C,chapter:d,sectionTitle:c,scopedFilePaths:K,fileRoleByPath:aW,fileProcessingByPath:aX,signal:a.signal}).catch(()=>[])},aE=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,p.Lk)(a,b)||`${a.sectionTitle||""} ${a.content}`.includes(b))).length,d=a.chapter.requiredFacts.length,e=a.chapter.requiredFacts.filter(b=>a.evidence.some(a=>(0,p.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:d,evidence:_,risk:a4});a6.push(aE);let aF=new Set(_.map(a=>a.filePath)),aK=_.reduce((a,b)=>a+b.content.length,0),aQ=[...a4.highRisk?[`召回覆盖风险(${a4.riskReason||"切片未完全预加载"}):已加载 ${a4.loadedChunks}/${a4.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${L.length} 条`,`深召回证据:${ab} 条`,`事实覆盖:${aE.requiredFactCovered}/${aE.requiredFactTotal}`,`小节覆盖:${aE.sectionCovered}/${aE.sectionTotal}`];T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:Y.writerPrompts[0]?.id,status:"running",message:`${(0,o.GQ)(d.title)} 已选取 ${_.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aF.size} 份`,`上下文字符:${aK}`,`检索查询:${F.length} 组`,...aQ],progress:{current:g+1,total:b7.length,label:"正文生成"}},{subtitle:(0,o.GQ)(d.title),order:g}),J(),cK.evidence.contextChars+=aK;let aR=(0,z.n9)(as),aS=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)?bR:[],aT=(0,aM.qX)((0,aM.hZ)({chapter:d,plan:void 0,spec:ar,roleFacts:S,evidence:_,missingFacts:aa,indexedFacts:[...aS,...aR],resolvedFactNeeds:as,factNeedsPrompt:(0,z.GK)(as),specAuthorityMap:bV.specAuthorityMap})),aU=(0,eg.up)({plan:cF.plan,chapter:d,context:bW,evidence:_});if(bW.chapterTasks=[...(bW.chapterTasks||[]).filter(a=>a.chapterId!==d.id),aU.task],bW.nodes.push(aU.node),(0,cR.cN)(bW),(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:`agent-chapter-task-${d.id}`,status:aU.task.ready||k?"success":"failed",message:aU.task.ready?aU.node.outputSummary||`${(0,o.GQ)(d.title)} 章节任务规划完成`:k?`${(0,o.GQ)(d.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:aU.node.outputSummary||`${(0,o.GQ)(d.title)} 章节任务规划完成`,details:aU.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:T.length})),J(H),!aU.task.ready&&!k)throw Error(`${(0,o.GQ)(d.title)} 章节任务未就绪:${aU.task.issues.map(a=>a.message).join(";")}`);let aZ=[ao,(0,eg.bT)(aU.task)].filter(Boolean).join("\n\n"),a3={total:as.length,satisfied:as.filter(a=>"satisfied"===a.status).length,missing:as.filter(a=>"missing"===a.status).length,lowConfidence:as.filter(a=>"low_confidence"===a.status).length};for(let a of at)bq.push(`${d.title}:事实需求未确认 ${a}`);let a7=cE.chapterTargets.get(d.id)||1200,ba=d.sections?.filter(Boolean).length||0,bb=/[、,,;;]/u.test(d.title),bc=function(a){let{budgetTarget:b,sectionCount:c,title:d,longformStrict:e}=a,f=/[、,,;;]/u.test(d),g=/工期|进度|质量|安全|危大|资源|人材机|保障|措施|重难点/u.test(d),h=/概况|结语|附录|说明/u.test(d),i=c>0?c*(f?720:g?900:780):g?5200:3600,j=e?h?2600:g?5200:3600:Math.min(1200,b),k=e?Math.min(Math.max(4200,b),c>=30?9800:f?8800:g?9200:7200):b,l=e?Math.max(j,b):Math.max(j,Math.min(b,i,k));return{budgetTarget:b,roundTarget:l,structureTarget:i,maxWords:Math.ceil(l*(a.longformStrict?1.12:1.18)),label:`章节预算约 ${b} 字,本轮生成约 ${l} 字,结构目标约 ${i} 字`}}({budgetTarget:a7,sectionCount:ba,title:d.title,longformStrict:cE.longformStrict}),bd=Math.ceil(bc.maxWords*(cE.maxChars?1.05:1)),be=c2?function(a,b){let c=a.outline.chapters.find(a=>a.title===b);return c||a.outline.chapters.find(a=>b.includes(a.title)||a.title.includes(b))}(b,d.title):void 0,bf=be?function(a){let b=[`【第 ${a.id} 章「${a.title}」蓝图切片——以下项目专属事实由蓝图冻结锁定,正文必须一致引用】`];for(let c of a.subSections){b.push(`
96
+ ${(0,A.TP)("以上为系统提取的评分项要求内容:实质要求(奖项名称、数字参数、等级指标等)必须显性响应进正文;本段提示词文字本身(编号、括号说明等元话语)禁止复述进正文")}`}(ci);ca=[b9,cA].filter(Boolean).join("\n\n");let cB="0"!==process.env.DOCUMENT_CONTEXT_SLIM_CHAPTER,cC=a=>cB?[b7,cA].filter(Boolean).join("\n\n"):ca,cD=(0,r.tF)({requirement:a.requirement,promptTexts:aQ,template:E,chapters:b6,spec:ar}),cE=await b4;bV.documentPlan=cE.plan,bV.nodes.push(cE.node),(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:cE.node.outputSummary||"Agent 文档规划完成",details:cE.plan.chapters.map(a=>`${a.title}:${a.sections.length} 条细目`)},{subtitle:"Agent Document Planner",order:T.length})),I=b6.map(a=>a.id);let cF=cD.targetChars||[...cD.chapterTargets.values()].reduce((a,b)=>a+b,0),cH=(0,aJ.JP)({template:E,targetWords:cF,requirement:a.requirement,materialFileCount:ad.length,evidenceCount:a4.length}),cI=(0,aK.C)({template:E,chapters:b6,targetWords:cF,requirement:a.requirement,materialFileCount:ad.length,evidenceCount:a4.length,hasVeryLargeExplicitChapter:b6.some(a=>(a.sections||[]).filter(Boolean).length>=30),configuredChapterConcurrency:Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),strategy:cH}),cJ=(0,aJ.Zk)(cH);(bO.factSanitize.truncated>0||bO.factSanitize.dropped>0||bO.factSanitize.repaired>0)&&(cJ.factSanitize={...bO.factSanitize});let cK=Date.now();(0,y.t5)(cF),(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${cH.mode} 生成策略:章节审查 ${cH.enableChapterReview?"启用":"跳过"}、全局审查 ${cH.enableGlobalReview?`${cH.globalReviewSamplingRate&&cH.globalReviewSamplingRate<1?`抽检 ${Math.round((cH.globalReviewSamplingRate??1)*100)}%`:"启用"}`:"跳过"}、最终质量审查 ${cH.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${cH.enableDocumentBudgetExpansion?"启用":"跳过"}`,details:cI.triggers},{subtitle:"后台自动策略"})),bX.scopeConflicts.length>0&&(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"scope-conflict-resolution",status:"success",message:`源级数据口径冲突已裁决(补疑/澄清修正文件权威最高):${bX.scopeConflicts.map(a=>a.resolution?`${a.scope} → ${a.resolution}`:`${a.scope} → 待人工复核`).join(";")}`,details:bX.scopeConflicts.flatMap(a=>a.values.map(a=>`来源「${a.sourceFile||"未知文件"}」取值 ${a.value}${a.unit}`))},{subtitle:"数据口径裁决"}));let cL=(0,aI.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${cf} 章由 LLM 基于${ao?"OUTLINE 章节":"模板章节"}、项目资料理解和证据规划小节,${ce} 章已由模板显式提供小节并跳过规划`,details:cg.length?[...cg]:void 0},{subtitle:"小节规划策略"}),cM=ao?`;识别到 OUTLINE 章节 ${an.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",cN=[...Y.prompts.map(a=>`${a.category}|${a.roleId}|${a.id}|${a.name}|${a.bindingSource}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`),...Y.unresolvedRoles.map(a=>`unresolved|${a}|项目角色配置中的提示词角色不存在`),...Y.missingResourceRoles.map(a=>`missingResource|${a}|提示词角色未显式绑定资源`)];(0,aI.fx)(T,(0,aI.X5)({type:"role_binding",roleId:R,status:"success",message:`已绑定项目资料 ${ad.length} 份、${Y.prompts.length} 个有效提示词;写作 ${Y.writerPrompts.length}、章节 ${Y.chapterPrompts.length}、抽取 ${Y.extractionPrompts.length};已自动抽取运行时规则 ${aG.executionSummary.length} 条${cM}`,details:[...cN,...aG.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:S,roleName:S})),(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${aG.executionSummary.length} 条,版本 ${aG.sourceHash}`,details:aG.executionSummary.length?[...aG.executionSummary,`必需表格:${aG.requiredTables.join("、")||"无"}`,`必含关键词:${aG.requiredKeywords?.join("、")||"无"}`,`禁含内容:${aG.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})),(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"document-readiness",status:av.ready?"success":"failed",message:"生成准备度:绑定资料已就绪",details:av.diagnostics},{subtitle:"生成准备度检查"})),(0,aI.fx)(T,cL),J();let cP=Math.round(([...cD.chapterTargets.values()].reduce((a,b)=>a+b,0)||cD.targetChars||0)/Math.max(1,b6.length)),cS=Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),cU=cI.chapterConcurrency,cW=cI.reviewConcurrency;(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节流水线调度:${b6.length} 章全部同批并行生成,审查修复 ${cW} 路流水线(章节生成完立即进入审查,与后续章节生成重叠)`,details:[`有效章节数:${b6.length}`,`平均章节目标:${cP} 字`,Number.isFinite(cS)&&cS>0?`章节并发来自 DOCUMENT_CHAPTER_CONCURRENCY=${Math.floor(cS)}`:`全部章节并行生成,在飞调用不设并发上限;每章单轮修复(失败即放弃)`]},{subtitle:"章节流水线策略"})),J();let cX=new A.jf(cW),cY=[],cZ=[...aZ].filter(Boolean).sort(),c$=Date.now(),c_=cZ.length>0?(await (0,A.l$)(cT,async a=>bG(a,cZ,Math.min(a1,12),""),{kind:"search"})).flat():[];cJ.evidence.searchQueries+=cT.length,cJ.evidence.searchMs+=Date.now()-c$;let c0=Date.now();try{b=function(a){let b=Date.now(),c={stage:"阶段 0",standardBlocksLoaded:0,standardBlockGaps:[],laborDerivationBasis:"清单汇总 \xd7 经验区间系数(定额工效知识不全,降级区间表达)",llmCalls:0,fallbackUsed:[],warnings:[],durationMs:0},d={version:"2.0.0",projectCode:function(a,b){let c=a=>a.replace(/^\d+(?:\.\d+)*\s*--\s*(?=\d{4}年)/u,""),d=/项目名称[::]\s*([^\n]{2,60})/u.exec(a);if(d){let a=c(d[1].trim()),b=a.split(/计划工期[::]|合同工期[::]|总工期[::]|工期[::]|质量标准[::]|计价[::]|施工地点/u)[0]?.trim()||a;if(b)return b}let e=/(\d{4}\s*年度\S{2,40}建设项目)/u.exec(a);return e?c(e[1].trim()):b||""}(a.basicFacts||"",a.templateName)||void 0,docType:"单位工程施工组织设计",createdAt:new Date().toISOString().slice(0,10),sourceMaterials:[...a.boundFilePaths]},g=function(a){let b=a.boundFilePaths.filter(a=>/工程量清单/u.test(a)&&a.toLowerCase().endsWith(".xls")).filter(a=>{let b=a.split("/").pop()||a;return!/封面|编制说明/u.test(b)});if(0===b.length)return{warning:`绑定资料中未识别到工程量清单 .xls 文件(${a.boundFilePaths.length} 份资料)`};let c=e.join(a7.homedir(),".customize-agent","projects",(0,f.computeProjectId)(e.resolve(a.projectRoot)),"kb.db");if(!x.existsSync(c))return{warning:`项目知识库索引不存在:${c}`};let d=[];for(let a of b)try{let b=function(a,b){let c=new((0,f.loadBetterSqlite3)())(a,{readonly:!0});try{return c.pragma("busy_timeout = 10000"),c.prepare("SELECT chunk_index, content, section_title FROM kb_chunks WHERE relative_path = ? ORDER BY chunk_index").all(b).map(a=>({chunkIndex:a.chunk_index,content:a.content,sectionTitle:a.section_title||""}))}finally{c.close()}}(c,a);if(0===b.length){d.push(`${a}(索引无切片)`);continue}let e=function(a){let b=a.sourceFile||"",c={totalChunks:a.chunks.length,markdownChunks:0,declarationChunks:0,skippedChunks:0,droppedIncompleteRows:0},d=[],e=[];for(let b of a.chunks){let a=b.sectionTitle,f=a.includes("表格路径声明");if(a.includes("附录")){c.skippedChunks++;continue}f?(e.push(b),c.declarationChunks++):"表格数据"===a||a.includes("表标题")||a.includes("第")||a.includes("工作表:")?(d.push(b),c.markdownChunks++):c.skippedChunks++}let f=new Map,g=a=>{let b=bb.exec(a);if(!b)return;let c=b[1],d=f.get(c),e=bd.exec(a),g=bc.exec(a);d?(!d.villageGroup&&e&&(d.villageGroup=e[1].trim()),void 0===d.totalPages&&g&&(d.totalPages=Number(g[1]))):f.set(c,{villageGroup:e?e[1].trim():"",totalPages:g?Number(g[1]):void 0})};for(let a of d)g(a.sectionTitle),g(a.content.split("\n")[0]||"");let h=[],i="",j="",k="",l="";for(let a of d){let d=bf(a),e=d||l;d&&(l=d);let g=f.get(e),m=g?.villageGroup||e||"",n=a.content.split("\n"),o=i;i="";let p=function(a){if(bc.exec(a))return 1;be.lastIndex=0;let b=be.exec(a);return be.lastIndex=0,b?Number(b[1]):void 0}(a.content);for(let d=0;d<n.length;d++){let e=n[d]||"";if(e.startsWith("|"))o.trim()&&c.droppedIncompleteRows++,o=e;else if(o)o+=e;else{let a=be.exec(e);a&&(p=Number(a[1])),be.lastIndex=0;continue}if(o.endsWith("|")){let c=o.split("|").map(a=>a.trim());o="";let d=c[1]??"",e=p,f=function(a){let b=a.join(" "),c=/第(\d+)页\s*共\d+页/u.exec(b);return c?Number(c[1]):void 0}(c);if(f&&(p=f),/^\d+$/u.test(d)&&ba.test(c[2]??"")){let f=Number((c[8]??"").trim()),g={seq:Number(d),code:c[2]??"",name:c[4]??"",description:c[5]??"",unit:c[6]??"",quantity:Number.isFinite(f)?f:0,section:j,subsection:k,villageGroup:m,page:e,sourceFile:b,chunkIndex:a.chunkIndex,sourceKind:"markdown"};g.seq>0&&h.push(g)}else/^[一二三四五六七八九十\d]+(?:\.\d+)?$/u.test(c[2]??"")&&!c[1]&&c[4]&&"分部小计"!==c[4]&&((c[2]??"").includes(".")?k=c[4]:(j=c[4],k=""))}}o.trim()&&(i=o)}i.trim()&&c.droppedIncompleteRows++;let m=[];for(let a of(l="",e)){let c=bf(a),d=c||l;c&&(l=c);let e=f.get(d),g=e?.villageGroup||d||"";m.push(...function(a,b){let c,d,e=[],f=a.split("\n"),g=()=>{c&&"number"==typeof c.seq&&c.seq>0&&e.push({seq:c.seq,code:c.code||"",name:c.name||"",description:(c.description||"").trim(),unit:c.unit||"",quantity:"number"==typeof c.quantity?c.quantity:0,section:"",subsection:"",villageGroup:b.villageGroup,sourceFile:b.sourceFile,chunkIndex:b.chunkIndex,sourceKind:"declaration"}),c=void 0,d=void 0},h=a=>{if(!c||!d)return;let b=a.trim();if(b){if("seq"===d){let a=Number(b);Number.isFinite(a)&&a>0&&(c.seq=a)}else if("code"===d)c.code=(c.code||"")+b;else if("name"===d)c.name=(c.name||"")+b;else if("description"===d)c.description=(c.description||"")+(c.description?" ":"")+b;else if("unit"===d)c.unit=b;else if("quantity"===d){let a=Number(b);Number.isFinite(a)&&(c.quantity=a)}}};for(let a of f){if(/^R\d+C\d+$/u.test(a)){/^R\d+C1$/u.test(a)?(g(),c={},d="seq"):d=void 0;continue}if(/^序号:$/u.test(a)){d="seq";continue}if(/^项目编码:$/u.test(a)){d="code";continue}if(/^项目名称:$/u.test(a)){d="name";continue}if(/^项目特征描述:$/u.test(a)){d="description";continue}if(/^单位:$/u.test(a)){d="unit";continue}if(/^工程量:$/u.test(a)){d="quantity";continue}if(/^(?:人工费|机械费|暂估价|合价|金额.*)$/u.test(a)){d=void 0;continue}h(a)}return g(),e}(a.content,{villageGroup:g,sourceFile:b,chunkIndex:a.chunkIndex}))}let n=new Map;for(let a of h)n.set(`${a.villageGroup}|${a.seq}`,a);for(let a of m){let b=`${a.villageGroup}|${a.seq}`;n.has(b)||n.set(b,a)}let o=[...n.values()].sort((a,b)=>a.villageGroup.localeCompare(b.villageGroup,"zh-CN")||a.seq-b.seq);var p=o,q=h;let r=bg(q);for(let a of p){let b;if("declaration"===a.sourceKind&&!a.section){for(let c of r.get(a.villageGroup)||[]){if(c.seq>a.seq)break;b=c}b&&(a.section=b.section,a.subsection=b.subsection)}}let s=[];for(let[a,b]of bg(o)){let c=b.map(a=>a.seq).sort((a,b)=>a-b),e=c[c.length-1]||0,g=[];for(let a=1;a<=e;a++)c.includes(a)||g.push(a);let h=function(a,b){for(let[c,d]of a)if(d.villageGroup===b)return{sheetId:c,...d}}(f,a),i=h?.totalPages,j=function(a,b,c){let d=new Set,e="";for(let f of a){let a=bf(f),g=a||e;if(a&&(e=a),!c||g===c){if(!c&&!(f.content.split("\n")[0]||"").includes(b))continue;for(let a of(bc.test(f.content)&&d.add(1),be.lastIndex=0,f.content.matchAll(be))){let b=Number(a[1]);d.add(b),b>1&&d.add(b-1)}be.lastIndex=0}}return[...d]}(d,a,h?.sheetId),k=i?Array.from({length:i},(a,b)=>b+1).filter(a=>!j.includes(a)):[],l=b.filter(a=>"declaration"===a.sourceKind).length,m=b.filter(a=>!a.code).length,n=b.filter(a=>!a.name).length,o=b.filter(a=>a.code&&!ba.test(a.code)).length;s.push({villageGroup:a,sheetId:h?.sheetId||"",totalPagesDeclared:i,pagesCovered:j.sort((a,b)=>a-b),pagesMissing:k,entryCount:b.length,entrySeqMissing:g,entriesFromDeclaration:l,entriesWithoutCode:m,entriesWithoutName:n,entriesWithInvalidCode:o,complete:0===g.length&&b.length>0})}return s.sort((a,b)=>a.villageGroup.localeCompare(b.villageGroup,"zh-CN")),{entries:o,villages:s,totalEntries:o.length,sourceFile:b,complete:s.length>0&&s.every(a=>a.complete),diagnostics:c}}({chunks:b,sourceFile:a});if(e.totalEntries>0)return{boq:e};d.push(`${a}(解析出 0 条目)`)}catch(b){d.push(`${a}(${b instanceof Error?b.message:String(b)})`)}return{warning:`清单解析失败:${d.join(";")}`}}({projectRoot:a.projectRoot,boundFilePaths:a.boundFilePaths});g.warning&&c.warnings.push(g.warning);let h=g.boq;h&&(c.boq={sourceFile:h.sourceFile,totalEntries:h.totalEntries,complete:h.complete,villageCount:h.villages.length,pagesMissingTotal:h.villages.reduce((a,b)=>a+b.pagesMissing.length,0)},h.complete||c.warnings.push("清单解析完整性校验未通过(序号缺口/页码缺失),蓝图覆盖校验将兜底报告")),c.stage="阶段 A";let i=function(a){let{boq:b}=a,c=bk(b),d=function(a){let b=[];for(let c of bl)for(let d of a.entries){if(!c.namePattern.test(`${d.name} ${d.description}`))continue;let a=c.extract(d);if(a){b.push({key:c.key,value:a,source:`清单条目 ${d.seq}「${d.name}」特征原文`,amount:c.amount});break}}return b}(b),f=function(a,b){let c=/(\d+)\s*个(?:美丽宜居)?自然村/u.exec(a);if(c)return Number(c[1]);let d=/(\d+)\s*个(?:美丽宜居)?自然村/u.exec(b);return d?Number(d[1]):0}(a.projectName,a.basicFacts||"")||b.villages.length;f>0&&d.push({key:"自然村数量",value:`${f} 个自然村`,source:"招标文件项目名称(清单自然村分组兜底)"});let g=function(a){let b={},c=a.entries.filter(a=>"垫层"===a.name).map(a=>/C\d{2}/u.exec(a.description)?.[0]).filter(a=>!!a);if(c.length>0){let a=new Map;for(let b of c)a.set(b,(a.get(b)||0)+1);b.cushion=[...a.entries()].sort((a,b)=>b[1]-a[1]||(a[0]<b[0]?-1:1))[0][0]}return b}(b),h=function(a,b){let c=/(?<!节点)(?<!阶段)(?<!分项)(?<!关键)(?:计划工期|合同工期|工期总日历天数|工期控制|工期目标|总工期|工期)[^。;;\n]{0,12}?(\d{1,4})\s*个?\s*日历天/u.exec(a)||/(\d{1,4})\s*个?\s*日历天[^。;;\n]{0,8}?(?:总工期|倒排|分解|完成)/u.exec(a),d=c?Number(c[1]):0,e=/质量(?:标准|要求)[^。;;\n]{0,20}?[::]\s*([^。;;\n]{1,20})/u.exec(a)||/合格/u.exec(a),f=e?(e[1]||"合格").trim():"",g=/(合造价〔\d{4}〕\d+号)/u.exec(a);return{totalDays:d,qualityStandard:f,pricingFile:g?g[1]:""}}(a.basicFacts||"",0),i=function(a,b){let c=new Map;for(let b of a.entries){if(b.quantity<=0)continue;let a=function(a){let b=`${a.name} ${a.description}`;return/塑料管|管道|检查井|雨水口|化粪池|涵管/u.test(b)?"管道铺设":/挖一般土方|挖沟槽|挖基坑|回填|清淤|余方|弃置/u.test(b)&&"m3"===a.unit?"土方工程":/混凝土|垫层|涵头|压顶/u.test(b)?"混凝土工程":/水泥混凝土|碎石|路床|铺装|道路|青砖|散水|块料/u.test(b)&&"m2"===a.unit?"道路铺装":/砌筑|砌体|砖/u.test(b)?"砌筑工程":/绿化|栽植|种植|苗木|草籽|喷播|灌木|乔木|色带|草坪/u.test(b)?"绿化工程":"安装工程"}(b),d=bm.find(a=>a.pattern.test(`${b.name} ${b.description}`))?.trade||"普工",e=`${a}|${d}`,f=bn[a]||{unit:b.unit,min:.05,max:.1},g=c.get(e)||{trade:d,workdaysMin:0,workdaysMax:0,unit:f.unit,basisQty:0};g.workdaysMin+=b.quantity*f.min,g.workdaysMax+=b.quantity*f.max,g.basisQty+=b.quantity,c.set(e,g)}let d=new Map;for(let a of c.values()){let b=d.get(a.trade)||{min:0,max:0,unit:a.unit,qty:0};b.min+=a.workdaysMin,b.max+=a.workdaysMax,b.qty+=a.basisQty,d.set(a.trade,b)}let e=Math.max(30,Math.round(.85*(b>0?b:360))),f=[...d.entries()].sort((a,b)=>b[1].max-a[1].max).map(([a,b])=>({trade:a,min:Math.max(1,Math.round(b.min/e*1.3)),max:Math.max(1,Math.round(b.max/e*1.6)),basis:`工种工程量约 ${Math.round(b.qty)}${b.unit} \xd7 经验工效区间 \xf7 有效工期 ${e} 天(定额工效知识不全,降级区间表达)`})),g=f.reduce((a,b)=>a+(b.min||0),0),h=f.reduce((a,b)=>a+(b.max||0),0),i={min:Math.max(10,Math.round(.75*g)),max:Math.max(10,Math.round(.9*h))},j=Math.round((i.min+i.max)/2);return{peak:i,peakValue:j,peakBasis:`各工种同期在场按 0.75~0.9 重叠系数折算(各工种人数区间之和 ${g}~${h} 人),峰值唯一口径取区间中值 ${j} 人`,byPhase:[],byTrade:f}}(b,h.totalDays),j=function(a){let b=[];for(let c of bo){let d=a.entries.filter(a=>c.pattern.test(`${a.name} ${a.description}`));if(0===d.length)continue;let e=d.reduce((a,b)=>a+b.quantity,0),f=Math.max(1,Math.min(4,Math.ceil(Math.log10(Math.max(10,e))-1))),g=Math.max(f,Math.min(8,f+2));b.push({name:c.name,spec:c.spec,min:f,max:g,basis:`${c.basis};相关条目工程量合计约 ${Math.round(e)}${d[0]?.unit||""}`})}return b}(b),k=function(a){let b=new Map;for(let c of a.entries){if(!c.name||c.quantity<=0)continue;let a=b.get(c.name);a?a.quantity+=c.quantity:b.set(c.name,{quantity:c.quantity,unit:c.unit})}return[...b.entries()].sort((a,b)=>b[1].quantity-a[1].quantity).slice(0,40).map(([a,b])=>({name:a,quantity:Math.round(1e3*b.quantity)/1e3,unit:b.unit,batchDesc:"按施工段分批进场",basis:"清单汇总 + 进度匹配"}))}(b),l=function(a,b){let c=b>0?b:360,d=[{key:"prep",label:"施工准备与清杂拆除",pattern:/清杂|拆除|场地平整|临时/u},{key:"pipe",label:"污水管网工程",pattern:/塑料管|检查井|管网|排水|化粪池|雨水口/u},{key:"road",label:"道路铺装工程",pattern:/道路|路床|水泥混凝土|级配碎石|路缘石|青砖|散水|过路涵/u},{key:"landscape",label:"景观与绿化工程",pattern:/景观|绿化|栽植|种植|苗木|喷播|小菜园|沟塘|清淤/u},{key:"lighting",label:"亮化与收尾工程",pattern:/路灯|亮化|配电|电缆|防雷/u}].map(b=>({...b,weight:a.entries.filter(a=>b.pattern.test(`${a.name} ${a.description}`)).reduce((a,b)=>a+b.quantity,0)})),e=Math.max(1,Math.round(.08*c)),f=c-e,g=d.slice(1),h=g.reduce((a,b)=>a+b.weight,0)||1,i=[{key:"prep",label:"施工准备与清杂拆除",duration:e,basis:`前导工作封顶 8% 总工期(清杂整治可与主体并行穿插,不按工程量权重独占)`}];for(let a of g){let b=Math.max(1,Math.round(a.weight/h*f*.95));i.push({key:a.key,label:a.label,duration:b,basis:`分部工程量权重 ${(a.weight/h*100).toFixed(1)}% \xd7 剩余工期 ${f} 天`})}let j=i.reduce((a,b)=>a+(b.duration||0),0);for(let a=i.length-1;a>=0&&j>c;a--){let b=j-c,d=Math.min(i[a]?.duration||0,b);i[a]&&d>0&&(i[a].duration=(i[a].duration||0)-d,j-=d)}return i}(b,h.totalDays),m=function(a){let b=[],c=a.entries.filter(a=>/塑料管|管道/u.test(a.name)&&"m"===a.unit).reduce((a,b)=>a+b.quantity,0);c>0&&b.push({scope:"污水管网管道",planDesc:`管道闭水试验分段检验,按每 200m 一段划分约 ${Math.max(1,Math.ceil(c/200))} 段(总长 ${Math.round(c)}m)`});let d=a.entries.filter(a=>/水泥混凝土|级配碎石|路床/u.test(a.name)&&"m2"===a.unit).reduce((a,b)=>a+b.quantity,0);d>0&&b.push({scope:"道路工程",planDesc:`路床压实度按每层每 200m\xb2 不少于 1 点检验,约 ${Math.max(1,Math.ceil(d/200))} 点(总面积 ${Math.round(d)}m\xb2)`});let e=a.entries.filter(a=>/检查井/u.test(a.name)).reduce((a,b)=>a+b.quantity,0);return e>0&&b.push({scope:"检查井",planDesc:`检查井逐座验收,共 ${Math.round(e)} 座`}),b}(b),n=function(a){let b=a.entries.filter(a=>/挖一般土方|挖沟槽土方|挖基坑土方|清淤/u.test(a.name)&&"m3"===a.unit).reduce((a,b)=>a+b.quantity,0),c=a.entries.filter(a=>/回填|路肩土|种植土/u.test(a.name)&&"m3"===a.unit).reduce((a,b)=>a+b.quantity,0),d=Math.max(0,Math.round((b-c)*1e3)/1e3);return{excavation:Math.round(1e3*b)/1e3,backfill:Math.round(1e3*c)/1e3,disposal:d,basis:"清单挖/填/弃量汇总(挖方含清淤),补疑口径:购土回填运距自行考虑"}}(b),o=function(a,b){let c=[{name:"挖掘机",kw:90},{name:"自卸汽车",kw:120},{name:"压路机",kw:75},{name:"蛙式打夯机",kw:3},{name:"混凝土搅拌运输车",kw:110},{name:"插入式振捣器",kw:1.5},{name:"洒水车",kw:90},{name:"高空作业车",kw:60}],d=a.reduce((a,b)=>a+(c.find(a=>a.name===b.name)?.kw||10)*(b.max||1),0);return{powerLoad:`按机械设备负荷计算:P = 1.1 \xd7 (K1\xd7ΣP1/cosφ + K2\xd7ΣP2) ≈ ${Math.round(.7*d)} kW(机械总功率约 ${Math.round(d)} kW \xd7 同时系数 0.7)`,waterUsage:`按用水量公式计算:q = Σ(工程量 \xd7 用水定额) + 生活用水,高峰人数 ${b.peakValue} 人 \xd7 生活用水 60L/人\xb7日 + 施工用水,总用水量按管网分段配置`}}(j,i),p=function(a,b){let c=function(){let a=e.join(a7.homedir(),".customize-agent","template-references"),b=e.join(a,"files","standard-blocks");if(!x.existsSync(b))return[];let c=e.join(a,"standard-blocks.json"),d=[];if(x.existsSync(c))try{d=(JSON.parse(x.readFileSync(c,"utf8")).blocks||[]).map(a=>a.id)}catch{d=[]}return 0===d.length&&(d=x.readdirSync(b).filter(a=>a.endsWith(".md")).map(a=>a.replace(/\.md$/u,""))),d.flatMap(a=>{let c=e.join(b,`${a}.md`);if(!x.existsSync(c))return[];let d=x.readFileSync(c,"utf8"),f=(/^title:\s*(\S.*)$/mu.exec(d)||[])[1]?.trim()||a;return[{id:a,title:f,source:(/^source:\s*(\S.*)$/mu.exec(d)||[])[1]?.trim()||"",lines:d.split("\n").filter(Boolean)}]})}(),d=[],f=[];for(let e of c){let c=[],f=!1;for(let a of e.lines){if(a.startsWith("---")||/^(id|title|source|updatedAt|tags):/u.test(a)||a.startsWith("# "))continue;if(a.startsWith("## ")){f=!0;continue}if(f)continue;let b=a.trim();if(!/^[-*\d]+[.、]?\s+/u.test(b))continue;let d=b.replace(/^[-*\d]+[.、]?\s+/u,"").trim();d&&c.push(d)}if("hazardous-works-37"===e.id){let c=function(a,b){let c,d=[],e=[...b.matchAll(/(?:开挖深度|挖深|基坑深度|沟槽深度)[^。;;\n]{0,30}?(\d+(?:\.\d+)?)\s*m/gu)].map(a=>Number(a[1])),f=a.entries.some(a=>/挖一般土方|挖沟槽|挖基坑/u.test(a.name)),g=!1;if(f){d.push("基坑(槽)土方开挖、降水——判定阈值:开挖深度超过3m(含3m)属危大工程,超过5m(含5m)属超过一定规模(须专家论证)");let a=e.length>0?Math.max(...e):void 0;void 0===a?(c="本项目含沟槽/基坑土方开挖,但资料(清单特征「挖土深度:详见设计图纸」)未给出具体开挖深度,危大等级判定待人工确认(不静默判定)",g=!0):c=a<3?`资料确认最大开挖深度 ${a}m < 3m,未达危大工程阈值,按一般土方工程管控`:a<5?`资料确认最大开挖深度 ${a}m,达到 3m(含)未达 5m,属危大工程,需编制专项施工方案(施工单位技术负责人审核签字、总监理工程师审查签字)`:`资料确认最大开挖深度 ${a}m ≥ 5m,属超过一定规模的危大工程,专项方案须专家论证(不少于5名符合专业要求的专家)`}else c="本项目清单未含基坑(槽)土方开挖条目,基坑工程危大判定不涉及";return d.push("专家论证程序:超过一定规模的危大工程专项方案组织不少于5名符合专业要求的专家论证;修改后的方案由施工单位技术负责人审核签字、加盖单位公章,并由总监理工程师审查签字、加盖执业印章后方可实施"),{items:d,conclusion:c,gap:g}}(a,b);d.push({id:"hazardous_works",title:"危大工程判定",source:e.source,items:[...c.items,`本项目判定结论:${c.conclusion}`],gap:c.gap})}else d.push({id:e.id,title:e.title,source:e.source,items:c.slice(0,30)})}for(let a of["organization","construction_prep","survey_plan","product_protection","emergency_plans","seasonal_measures","fire_control","tech_management","smart_site","handover_warranty","quality_innovation"])f.push(a),d.push({id:a,title:a,source:"(缺口:参考文档资产未建设)",items:[],gap:!0});return{blocks:d,gaps:f}}(b,(a.evidence||[]).map(a=>String(a.content||"")).join("\n")),q=function(a){let b=a.villages.map(a=>a.villageGroup).map(a=>({name:a,basis:"清单按自然村分组(工程名称)"})),c=b.length>1?`多村平行施工 + 村内流水作业(${b.length} 个自然村分组)`:"村内流水作业",d=[...new Set(a.entries.map(a=>a.section).filter(Boolean))];return{sections:b,sequence:d.length>0?d.join(" → "):"清杂拆除 → 管网道路 → 景观绿化 → 亮化收尾",sequenceBasis:"清单分部分项编排顺序归纳(管网先行、绿化收尾)",flow:c}}(b),r=function(a){let b=[],c=a.villages.length;return c>=2&&b.push({name:`${c} 个自然村分散施工组织协调`,measure:"按自然村分组划分施工段,多村平行施工 + 村内流水作业,配置专职协调员",basis:`清单按 ${c} 个自然村分组`}),a.entries.some(a=>/挖沟槽|沟槽开挖|塑料管铺设/u.test(`${a.name} ${a.description}`))&&b.push({name:"雨季管网沟槽施工",measure:"雨季排水与边坡防护,分段开挖、快速回填(联动季节施工措施板块)",basis:"清单含沟槽开挖与管道铺设条目"}),a.entries.some(a=>/道路|路床|路面/u.test(a.name))&&c>0&&b.push({name:"村庄内道路施工交通疏导",measure:"分段封闭施工,设置临时道路保障居民出行(补疑条款:居民出行临时道路)",basis:"清单含道路工程条目且村内施工"}),[...a.entries.map(a=>a.description)].some(a=>/杆线|管线保护|既有管线/u.test(a))&&b.push({name:"既有杆管线保护",measure:"开挖前探测交底,杆线保护措施费含在清单单价内",basis:"清单特征原文含杆线保护条款"}),0===b.length&&b.push({name:"多工序交叉施工组织",measure:"按清单分部分项编排顺序组织流水作业,加强工序衔接检查",basis:"清单分部分项结构"}),b}(b),s=function(a){let b=bs({facts:a.facts||[],evidence:a.evidence||[]}),c=[];a.contract&&a.contract.totalDays>0&&c.push({id:"contract_days",label:"总工期",values:[`${a.contract.totalDays} 日历天`]}),a.labor&&a.labor.peakValue>0&&c.push({id:"labor_peak",label:"劳动力峰值",values:[`${a.labor.peakValue} 人`]});let d=a.villageCount||0;if(d>0&&c.push({id:"village_count",label:"自然村数量",values:[`${d} 个自然村`]}),a.boq){let b=function(a){let b=new Map;for(let c of a.entries){if(!c.name||c.quantity<=0||/暂列|金额|计日工|税|费/u.test(c.name))continue;let a=c.section||"未分部条目",d=b.get(a)||[];d.push(c),b.set(a,d)}return[...b.entries()].sort((a,b)=>b[1].length-a[1].length).slice(0,3).map(([a,b])=>{let c=[...b].sort((a,b)=>b.quantity-a.quantity||(a.name<b.name?-1:1))[0];return`${c.name} ${c.quantity}${c.unit}(${a})`})}(a.boq);b.length>0&&c.push({id:"core_quantities",label:"核心工程量",values:b})}return{entries:[...b,...c]}}({facts:a.facts,evidence:a.evidence,contract:h,labor:i,boq:b,villageCount:f}),t=[...new Set(b.entries.map(a=>a.section).filter(Boolean))];return{data:{project:{name:a.projectName||"(待提取:项目名称)",scope:b.villages.length>0?`${b.villages.length} 个自然村分组(${b.villages.map(a=>a.villageGroup).join("、")})`:"",works:t},contract:{totalDays:h.totalDays,qualityStandard:h.qualityStandard,pricingFile:h.pricingFile},climate:{rainySeason:"6-8月",highTemp:"7-8月",winter:"12-2月"},milestones:l,resources:{labor:i,equipment:j},materialsPlan:k,fundPlan:{wageRule:"工资性工程款按合造价〔2022〕8号执行",usagePlan:"按进度分阶段使用"},testPlan:[],earthworkBalance:n,tempUtilities:o,redLineFacts:d,amountRule:"商务禁区延续:金额类数据禁入正文(合同估算价例外),fund_plan/red_line_facts 渲染时遵守",decisionLock:s,quantities:c,specAuthorities:g,inspectionBatches:m,standardBlocks:p.blocks,constructionDeployment:q,keyDifficulties:r,drawingNote:"总平面布置图/横道图/组织机构图为后期人工配图,蓝图只规划对应章节正文内容"},diagnostics:{standardBlocksLoaded:p.blocks.filter(a=>!a.gap).length,standardBlockGaps:p.gaps}}}({boq:h||{entries:[],villages:[],totalEntries:0,sourceFile:"",complete:!1,diagnostics:{totalChunks:0,markdownChunks:0,declarationChunks:0,skippedChunks:0,droppedIncompleteRows:0}},basicFacts:a.basicFacts,evidence:a.evidence,facts:a.facts,projectName:d.projectCode||""});c.standardBlocksLoaded=i.diagnostics.standardBlocksLoaded,c.standardBlockGaps=i.diagnostics.standardBlockGaps,c.stage="阶段 B/C";let j=function(a){let{chapterTitles:b,boq:c}=a,d=new Map;for(let a of c.entries){let b=a.section||"未分部条目",c=d.get(b)||[];c.push(a),d.set(b,c)}let e=new Map;for(let[a,b]of d){let c=function(a,b){let c=[...b].sort((a,b)=>a.seq-b.seq),d={},e=new Map;for(let a of c)a.name&&e.set(a.name,(e.get(a.name)||0)+a.quantity);for(let[a,b]of e){let e=c.find(b=>b.name===a)?.unit||"";d[a]={value:Math.round(1e3*b)/1e3,unit:e}}let f=[...new Set(c.map(a=>a.name).filter(Boolean))].slice(0,16),g=function(a){let b=[];for(let c of a)for(let a of bu(c.description))/含|配合|安装|铺设|浇筑|夯实|碾压|养护|刻痕|拉毛|切缝|灌缝|喷播|栽植|回填|吊装|固定/u.test(a.value)&&a.value.length<=60&&b.push(`${c.name}:${a.value}`);return[...new Set(b)].slice(0,20)}(c),h=[],i=new Set;for(let a of c){for(let b of bu(a.description)){let a=`${b.key}=${b.value}`;if(!i.has(a)&&(i.add(a),h.push({key:b.key,value:b.value,source:"boq"}),h.length>=24))break}if(h.length>=24)break}let j=[];for(let a of c)for(let b of bu(a.description))/压实|试验|检测|验收|闭水|合格/u.test(`${b.key}${b.value}`)&&j.length<12&&!j.includes(b.value)&&j.push(b.value);let k=(0,bh.cn)([a]),l=[];for(let a of(0===j.length&&k.length>0&&j.push(...k[0].acceptance.slice(0,6).map(a=>`${a}(知识卡)`)),k.slice(0,2)))for(let b of a.standards)l.includes(b)||l.push(b);return{name:a,kind:"major",quantities:d,processChain:f,methods:g,params:h,acceptance:j,standards:l,skeleton:["施工概况","施工流程","施工方法"],source:"boq",coveredSeqs:c.map(a=>a.seq)}}(a,b);e.set(a,[c])}return[...e.values()].flat(),{chapters:b.map((b,c)=>{var d;let f=String(c+1),g=bt.filter(a=>a.chapterPattern.test(b)).map(a=>`${a.item}(评审权重 ${a.weight})`),h=/主要分部分项|施工方案|施工方法/u.test(b)?[...e.entries()].map(([a,b],c)=>({id:`${f}.${c+1}`,title:a,targetWords:2400,requiredParams:b.flatMap(a=>Object.keys(a.quantities).slice(0,5).map(a=>({path:`data.quantities.${a}`,mode:"must_cite",strict:!0}))),scoredItems:["评标分项:主要施工方法(1.5)"],tablePlans:["主要工程量一览表"],workPackages:b})):[];return{id:f,title:b,isActive:(d=a.docType,!(/专项施工方案|专项方案|危大/u.test(d)&&/总平面|平面布置|施工部署|总体部署/u.test(b))),requiredParams:[],scoredItems:g,subSections:h}})}}({chapterTitles:a.chapterTitles,boq:h||{entries:[],villages:[],totalEntries:0,sourceFile:"",complete:!1,diagnostics:{totalChunks:0,markdownChunks:0,declarationChunks:0,skippedChunks:0,droppedIncompleteRows:0}},docType:d.docType});c.stage="阶段 D";let k={meta:d,data:i.data,outline:j,validation:{passed:!1,checks:[]},diagnostics:c};return k.validation=function(a,b){let c=[],d=(0,y.Jx)(a,bj);c.push({name:"1. Schema 校验",passed:0===d.length,message:0===d.length?"结构/类型/必填/边界全部通过":d.join(";")});let e=function(a,b){let c=[];if(b){let d=bk(b);for(let[b,e]of Object.entries(a.data.quantities)){let a=d[b];if(!a){c.push(`quantities.${b} 不在清单解析产物值集中(疑似编造)`);continue}Math.abs(a.value-e.value)>.011&&c.push(`quantities.${b} 数值 ${e.value} 与清单聚合值 ${a.value} 不一致`)}}for(let b of a.data.redLineFacts)b.value&&b.source||c.push(`红线事实「${b.key}」缺值或缺来源`);return c}(a,b);c.push({name:"2. 事实锚定校验",passed:0===e.length,message:0===e.length?"L1a 值全部 ∈ 清单解析产物值集,红线事实逐条有源":e.join(";")});let f=function(a,b){let c=[],d=a.outline.chapters.flatMap(a=>a.subSections).flatMap(a=>a.workPackages);if(b){let a=new Map;for(let b of d)for(let c of b.coveredSeqs){let d=b.name,e=a.get(d)||new Set;e.add(c),a.set(d,e)}let e=b.entries.filter(b=>{let c=a.get(b.section||"未分部条目");return!c||!c.has(b.seq)});e.length>0&&c.push(`清单条目零丢失校验失败:${e.length} 条未被工作包覆盖(如序号 ${e.slice(0,5).map(a=>a.seq).join("、")})`)}let e=new Set;for(let b of a.outline.chapters)for(let a of b.scoredItems)e.add(a.split("(")[0]||"");let f=bt.filter(a=>![...e].some(b=>b.includes(a.item))).map(a=>a.item);return f.length>0&&c.push(`十项评审承接缺失:${f.join("、")} 无章/节显性承接声明`),0===a.data.keyDifficulties.length&&c.push("重难点及保证措施未逐项列明(十项评审⑩硬要求)"),c}(a,b);c.push({name:"3. 覆盖校验",passed:0===f.length,message:0===f.length?"清单条目零丢失、十项评审全承接、重难点逐项列明":f.join(";")});let g=function(a){let b=[],c=a.data.contract?.totalDays||0,d=(a.data.milestones||[]).reduce((a,b)=>a+(b.duration||0),0);c>0&&d>c&&b.push(`里程碑总和 ${d} 天超过总工期 ${c} 天`);let{labor:e}=a.data.resources||{};if(e)for(let a of(e.peak&&e.peak.min>e.peak.max&&b.push(`劳动力峰值区间异常(min ${e.peak.min} > max ${e.peak.max})`),e.peakValue>0&&e.peak&&(e.peakValue<e.peak.min||e.peakValue>e.peak.max)&&b.push(`劳动力峰值唯一口径 ${e.peakValue} 人超出推导区间 ${e.peak.min}~${e.peak.max} 人`),e.byTrade||[]))(a.min||0)>(a.max||0)&&b.push(`工种「${a.trade}」人数区间异常`);let f=new Set((a.data.decisionLock?.entries??[]).map(a=>a.id));for(let c of(a.data.contract?.totalDays>0&&!f.has("contract_days")&&b.push(`决策锁缺失数据条目 contract_days(总工期 ${a.data.contract.totalDays} 日历天未入锁)`),e&&e.peakValue>0&&!f.has("labor_peak")&&b.push(`决策锁缺失数据条目 labor_peak(劳动力峰值 ${e.peakValue} 人未入锁)`),a.data.redLineFacts?.some(a=>"自然村数量"===a.key)&&!f.has("village_count")&&b.push("决策锁缺失数据条目 village_count(自然村数量红线事实未入锁)"),a.data.resources?.equipment||[]))(c.min||0)>(c.max||0)&&b.push(`机械「${c.name}」台数区间异常`);let g=(a.data.standardBlocks||[]).find(a=>"six-hundred-percent"===a.id);return g&&!g.gap&&6!==g.items.length&&b.push(`扬尘治理六个百分百板块条目数 ${g.items.length} 条(应为恰六条)`),b}(a);return c.push({name:"4. 内部一致性校验",passed:0===g.length,message:0===g.length?"里程碑/劳动力/机械区间自洽":g.join(";")}),{passed:c.every(a=>a.passed),checks:c}}(k,h),k.validation.passed||c.warnings.push(`蓝图校验未通过:${k.validation.checks.filter(a=>!a.passed).map(a=>a.name).join("、")}(一期旁路仅报告,不阻断生成)`),c.durationMs=Date.now()-b,k}({projectRoot:C,boundFilePaths:ad,chapterTitles:b6.map(a=>a.title),templateName:E.name,basicFacts:function(a){let b=Object.values(a.byKey||{}).filter(a=>!!(a&&a.label&&a.value)).sort((a,b)=>(b.priority||0)-(a.priority||0));return 0===b.length?"":b.slice(0,60).map(a=>`- ${a.label}:${a.value}`).join("\n")}(bX),evidence:bJ,facts:[...bO.localFacts,...bO.projectBasicFacts,...bO.preciseFacts],signal:a.signal,diagnostics:cJ});let c=function(a,b){let c=e.join((0,bi.Gl)(a),"assets","blueprint.json");return x.writeFileSync(c,JSON.stringify(b,null,2),"utf8"),c}(C,b),d=b.outline.chapters.reduce((a,b)=>a+b.subSections.reduce((a,b)=>a+b.workPackages.length,0),0);(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"integrated-blueprint",status:b.validation.passed?"success":"failed",message:b.validation.passed?`一体化蓝图已构建并落盘:清单 ${b.diagnostics.boq?.totalEntries??0} 条目、标准板块 ${b.diagnostics.standardBlocksLoaded} 个、工作包 ${d} 个(校验通过,参数桶与章切片接管各章写作)`:`一体化蓝图已构建但校验未通过(参数桶不注入,不阻断生成):${b.validation.checks.filter(a=>!a.passed).map(a=>a.name).join("、")}`,details:[`耗时 ${Date.now()-c0}ms`,`落盘:${c}`,`清单解析:${b.diagnostics.boq?`${b.diagnostics.boq.totalEntries} 条目 / ${b.diagnostics.boq.villageCount} 村 / 完整性校验${b.diagnostics.boq.complete?"通过":"未通过"}`:"未解析(见警告)"}`,`标准板块缺口:${b.diagnostics.standardBlockGaps.length>0?b.diagnostics.standardBlockGaps.join("、"):"无"}`,`四道校验:${b.validation.checks.map(a=>`${a.name}${a.passed?"✓":"✗"}`).join(" / ")}`,...b.diagnostics.warnings.slice(0,6).map(a=>`警告:${a}`)]},{subtitle:"一体化蓝图"})),J()}catch(a){b=void 0,(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:"integrated-blueprint",status:"failed",message:`一体化蓝图构建异常(参数桶不注入,不阻断生成):${a instanceof Error?a.message:String(a)}`,details:[`耗时 ${Date.now()-c0}ms`,"蓝图异常时参数桶与章切片不注入,各章按证据独立成稿"]},{subtitle:"一体化蓝图"})),J()}let c1=!!b?.validation.passed,c2=b?.validation.passed?function(a){let b=["【一体化蓝图参数桶——全项目口径唯一权威源,正文引用必须与此一致,不得自行推导不同数值】"];b.push(`- 项目:${a.project.name}(${a.project.scope})`),a.contract.totalDays>0&&b.push(`- 总工期:${a.contract.totalDays} 日历天`),a.contract.qualityStandard&&b.push(`- 质量标准:${a.contract.qualityStandard}`),a.contract.pricingFile&&b.push(`- 计价依据:${a.contract.pricingFile}`),a.milestones.length>0&&b.push(`- 里程碑:${a.milestones.map(a=>`${a.label}${a.duration?` ${a.duration} 天`:""}`).join("、")}(总和 ≤ 总工期)`),a.resources.labor.peakValue>0&&b.push(`- 劳动力峰值:${a.resources.labor.peakValue} 人(全项目唯一口径,各章必须引用该值,不得自设其他峰值)`),a.resources.labor.byTrade.length>0&&b.push(`- 工种配置(人数以劳动力峰值唯一口径为准,不另设工种数值):${a.resources.labor.byTrade.map(a=>a.trade).join("、")}`),a.resources.equipment.length>0&&b.push(`- 主要机械:${a.resources.equipment.map(a=>`${a.name}${a.spec?`(${a.spec})`:""} ${a.quantity&&a.quantity>0?a.quantity:Math.round(((a.min??1)+(a.max??a.min??1))/2)} 台`).join("、")}`),a.materialsPlan.length>0&&b.push(`- 物资计划(清单汇总):${a.materialsPlan.slice(0,12).map(a=>`${a.name} ${a.quantity??""}${a.unit}`).join("、")}${a.materialsPlan.length>12?" 等":""}`),a.inspectionBatches.length>0&&b.push(`- 检验批划分:${a.inspectionBatches.map(a=>`${a.scope}——${a.planDesc}`).join(";")}`),void 0!==a.earthworkBalance.excavation&&b.push(`- 土方平衡:挖方 ${a.earthworkBalance.excavation}m\xb3、填方 ${a.earthworkBalance.backfill}m\xb3${a.earthworkBalance.disposal?`、弃方 ${a.earthworkBalance.disposal}m\xb3`:""}(清单汇总口径)`),b.push(`- 临时用电:${a.tempUtilities.powerLoad}`),b.push(`- 临时用水:${a.tempUtilities.waterUsage}`);let c=a.redLineFacts.filter(a=>!a.amount);c.length>0&&b.push(`- 评审红线事实(must_cite,正文必须逐条出现且数值一致):${c.map(a=>`${a.key}=${a.value}`).join(";")}`);let d=a.redLineFacts.filter(a=>a.amount);return d.length>0&&b.push(`- 金额类红线事实(商务禁区,不进正文):${d.map(a=>`${a.key}=${a.value}`).join(";")}`),a.decisionLock.entries.length>0&&b.push(`- 关键决策锁:${a.decisionLock.entries.map(a=>`${a.label}:${a.values.join("、")}`).join(";")}`),a.constructionDeployment.sections.length>0&&b.push(`- 施工部署:${a.constructionDeployment.flow};施工顺序 ${a.constructionDeployment.sequence}`),a.keyDifficulties.length>0&&b.push(`- 重难点(逐项列明):${a.keyDifficulties.map(a=>`${a.name}——${a.measure}`).join(";")}`),b.push(`- 金额禁区:${a.amountRule}`),b.push(a.drawingNote),b.join("\n")}(b.data):"";cJ.metrics.push({name:"phase:plan",startedAt:cK,endedAt:Date.now(),durationMs:Date.now()-cK});let c3=Date.now();for(let c=0;c<b6.length;c+=cU){let d=b6.slice(c,c+cU);for(let e of(await Promise.all(d.map(async(d,e)=>{let f,g=c+e;(0,A.Te)(a.signal);let h=Date.now(),i=T.length;try{let c,e;T.push((0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:Y.writerPrompts[0]?.id,status:"running",message:`${(0,o.GQ)(d.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${g+1}/${b6.length}`,`二级小节:${d.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:g+1,total:b6.length,label:"章节生成"}},{subtitle:(0,o.GQ)(d.title),order:g})),J();let j=a.resumeChapters?.find(a=>a.id===d.id||a.title===d.title),k=j?.content?.trim(),l=j?.evidence?.length?[...j.evidence]:[],m=ag.chapterPlans.find(a=>a.chapterId===d.id||a.chapterTitle===d.title),t=m?Object.values(m.evidenceQueries).flat().filter(Boolean):[],x=d.queries.length>0?d.queries:[E.name,E.outputTitle,d.title],B=b5.get(d.id);if(bW&&B&&B.graphFiles.size>0){let a=[...aZ],b=b=>a.includes(b)?b:a.find(a=>a.endsWith(b)||a.includes(b));for(let a of[...B.graphFiles].map(a=>b(a)||a).filter(a=>(0,aJ.Tz)(C,a,aZ))){let b=bF(a);if(b?.chunks?.length)for(let c of b.chunks)l.push({chapterId:d.id,filePath:b.file?.relativePath||a,score:5+(B.graphWorks.length+B.graphMethods.length)*.5,content:c.content,roleId:aV.get(a),processingType:aW.get(a),sectionTitle:c.sectionTitle,source:"graph-evidence"})}}let D=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title),F=dy(d,[...x,...t],[]),I=Date.now();T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:Y.writerPrompts[0]?.id,status:"running",message:`${(0,o.GQ)(d.title)} 正在执行质量优先的章节检索${B?.graphFiles.size?`(图谱匹配 ${B.graphFiles.size} 个文件)`:""}`,details:F.map(a=>`检索:${a.slice(0,42)}`),progress:{current:g+1,total:b6.length,label:"证据检索"}},{subtitle:(0,o.GQ)(d.title),order:g}),J();let K=k?[]:[...aZ].filter(Boolean).sort(),L=k?[]:bS?.evidenceByChapterId?.[d.id]||[];L.length>0&&l.push(...L);let M=[],N=(d.requiredFacts||[]).filter(a=>!!a&&!F.some(b=>b.includes(a)||a.includes(b))).map(a=>`${d.title} ${a}`),O=[...F,...N];if(K.length>0&&O.length>0){(0,A.Te)(a.signal);let b=await (0,A.l$)(O,async a=>bG(a,K,Math.min(a1,12),d.title),{kind:"search"});M.push(...b)}for(let a of(cJ.evidence.searchQueries+=O.length,cJ.evidence.searchMs+=Date.now()-I,T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,o.GQ)(d.title)} KB 检索完成:${O.length} 组查询,准备深度召回与语义排序`,progress:{current:g+1,total:b6.length,label:"证据检索"}},{subtitle:(0,o.GQ)(d.title),order:g}),J(),M))l.push(...a.filter(a=>(0,aJ.Tz)(C,a.filePath,aU)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:aV.get(a.filePath),processingType:aW.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));D&&K.length>0&&c_.length>0&&l.push(...c_.filter(a=>(0,aJ.Tz)(C,a.filePath,aU)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:aV.get(a.filePath),processingType:aW.get(a.filePath),sectionTitle:a.sectionTitle,source:"basic-fact-cache"})));let Q=k?[]:await (0,aL.$b)({manager:G,projectRoot:C,chapter:d,plan:m,profile:af,scopedFilePaths:K,limitPerQuery:Math.min(a1,10),signal:a.signal}).catch(()=>[]);l.push(...Q);let R=new Set((d.pinnedEvidenceFilePaths||[]).filter(Boolean)),S=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)&&l.push(...bM.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"})));let U=bJ.filter(a=>/招标|投标须知|评标办法|专用合同条款|投标人须知/u.test(`${a.filePath||""}${a.sectionTitle||""}`));for(let a of(/概况|工程|项目|总体|部署/u.test(d.title)&&U.length>0&&l.push(...U.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"}))),new Set([...R]))){if(!(0,aJ.Tz)(C,a,aU))continue;let b=R.has(a),c=bF(a);c&&l.push(...c.chunks.map(a=>({chapterId:d.id,filePath:c.file.relativePath,score:1,content:a.content,roleId:aV.get(c.file.relativePath),processingType:aW.get(c.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let V=l.filter(a=>(0,aJ.Tz)(C,a.filePath,aZ));if(!k&&aC.enabled&&aC.allowProjectFacts){let b=await a$({config:aC,chapterId:d.id,chapterTitle:d.title,sectionTitles:d.sections||[],runtimeRules:aG,localFacts:[...bU.project,...bU.schedule,...bU.quality,...bU.safety,...bU.resources,...bU.preciseFacts],signal:a.signal});a6.queries.push(...b.queries),a6.filteredCount+=b.filtered+b.evidence.length}let W=k?[]:(0,aL.SK)({project:aX,chapter:d,plan:m,profile:af,scopedFilePaths:K,highRisk:a3.highRisk});W.length>0&&V.push(...W),V=(0,a_.Su)(V,a0),bN.size>0&&(V=V.filter(a=>!bN.has((0,w.hM)(a))));let X=(()=>{let a=Number(process.env.DOCUMENT_SEMANTIC_TOP_CANDIDATES);return Number.isFinite(a)&&a>0?Math.floor(a):3e3})(),Z=function(a,b,c){if(c<=0||b.length<=c)return b;let d=b.map(b=>({item:b,lexical:(0,n.A1)(b,a.requiredFacts)*du(a,b.processingType)+dv(a,b)}));return d.sort((a,b)=>b.lexical-a.lexical),d.slice(0,c).map(a=>a.item)}(d,V,X),$=await (0,v.Mv)([(0,u.Yx)(d)],Z.map(dw)),_=dx(d,V,{preservePinned:!0,semantic:{similarity:$,queryText:(0,u.Yx)(d)}},cJ);_=cO(_,bX.scopeConflicts),(0,a_.U2)(_,a0,`chapter:${d.id}:initial`);let aa=d.requiredFacts.filter(a=>!_.some(b=>(0,p.Lk)(b,a))),ab=0,ac=B?[B.graphWorks.length?`图谱识别本章工程内容:${B.graphWorks.join("、")}`:"",B.graphMethods.length?`图谱识别本章施工方法:${B.graphMethods.join("、")}`:"",B.graphBoqItems.length?`图谱识别本章BOQ清单项(${B.graphBoqItems.length}项):${B.graphBoqItems.map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",B.gaps.length?`图谱识别本章资料缺口:${B.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",ae=function(a){let b=[];for(let c of a){if(!c.resolution)continue;let a=c.values.filter(a=>`${a.value}${a.unit}`!==c.resolution);if(0===a.length)continue;let d=a.map(a=>`${a.value}${a.unit}`).join("、");"high"===c.confidence?b.push(`${c.scope}必须统一为 ${c.resolution}(补疑/答疑/澄清类修正文件权威最高;${d} 已被修正,正文禁止出现)`):"medium"===c.confidence?b.push(`${c.scope}应统一为 ${c.resolution}(按资料来源优先级裁决;${d} 为败选值,正文避免使用)`):b.push(`${c.scope}参考口径为 ${c.resolution}(锚定较弱,请人工复核;${d} 不参与自动改写)`)}return b}(bX.scopeConflicts),ah=cv.length>0?(()=>{let a=ak(d.title),b=cv.filter(b=>b.chapterTitle===a);return 0===b.length?"":["【本章必须显性响应的招标要求(逐条写入正文,零响应即评标失分)】",...b.map(a=>`- ${a.kind}:${a.item.text}`)].join("\n")})():"",ai=/扬尘|文明施工|环境保护|绿色施工|安全文明|环保/u.test(`${d.title}${d.purpose||""}`)?"【扬尘治理六个百分百——规范固定条目,必须逐项落实并写入正文,每项一句具体措施,六项不得缺项;若本项目无拆迁工程,对“拆迁工地100%湿法作业”必须显性写明“本项目无拆迁工程,不涉及拆迁工地湿法作业”,不得省略】\n- 施工工地周边100%围挡\n- 物料堆放100%覆盖\n- 出入车辆100%冲洗\n- 施工现场地面100%硬化\n- 拆迁工地100%湿法作业\n- 渣土车辆100%密闭运输":"",aj=(d.sections||[]).filter(a=>!/^(?:施工概况|施工流程|施工方法)$/u.test(a.trim())&&!/^附录/u.test(a.trim())),al=aj.length>0?`【必须输出以下规划小节为三级标题(### 小节名),逐个小节展开正式正文:每小节正文不少于 100 字,不得只写标题、不得空小节、不得用表格替代正文;小节名与章标题相同或相近也必须输出,不得省略或合并】${aj.join("、")}`:"",am=[ac,ah,al,ai,ae.length?`【数据口径强制约束】${ae.join(";")}`:"",m?.writingGoal,m?.mustCover?.length?`本章必须覆盖:${m.mustCover.join("、")}`:"",m?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${m.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),an=dm(Y,d);if(Y.writerPrompts.length>0&&!an.primaryWriter)throw Error(`${(0,o.GQ)(d.title)} 写作主控提示词未进入章节生成阶段`);let ao=[an.promptTexts,aw].filter(Boolean).join("\n\n"),ap=an.promptDetails.length?an.promptDetails:["未绑定章节写作提示词"],aq=(0,z.rC)({template:E,chapter:d,spec:ar,profile:au,promptTexts:ao,requirement:a.requirement,plan:m?{requiredContents:m.mustCover,evidenceNeeds:Object.values(m.evidenceQueries).flat()}:void 0}),as=(0,z.ji)({needs:aq,factsModel:bU,evidence:V,profile:au,excludedEvidenceKeys:bN}),at=as.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),av=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>eh(`${a.sectionTitle||""}${a.content||""}`).includes(eh(b)))),c=(a.chapter.tablePlans||[]).flatMap(a=>a.fillability?.missingProjectFactFields||[]),d=a.evidence.length<3?["章节证据数量不足"]:[],e=b.length+c.length+d.length,f=e>=5?"high":e>=2?"medium":"low",g="high"===f?"evidence_first":c.length>0?"generate_with_review_notes":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:f,missingFacts:b,missingEvidence:d,tableFieldGaps:[...new Set(c)],suggestedStrategy:g,reason:0===e?"章节事实、证据和表格可填性满足常规生成条件。":`识别到 ${e} 项生成前缺口,按 ${g} 策略生成。`}}({chapter:d,evidence:_}),ax=new Set(_.map(a=>a.filePath)).size,ay=!!B&&(B?.graphFiles.size||0)>=8&&ax>=6&&0===aa.length&&"low"===av.riskLevel,az=function(a){let b=a.evidenceFileCount<=2;return a.scopedFileCount>80?b:"evidence_first"===a.suggestedStrategy||a.highRisk||a.missingFactsCount>0||a.requiredMissingNeedsCount>0||b||a.evidenceCount<8&&"low"!==a.riskLevel}({scopedFileCount:K.length,evidenceCount:_.length,evidenceFileCount:ax,suggestedStrategy:av.suggestedStrategy,highRisk:a3.highRisk,missingFactsCount:aa.length,requiredMissingNeedsCount:at.length,riskLevel:av.riskLevel});if(!ay&&az&&K.length>0){let b=new Set([...aa,...at]).size;b>0&&(T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,o.GQ)(d.title)} 正在深度召回缺失事实证据(${b} 项需求)`,progress:{current:g+1,total:b6.length,label:"深度召回"}},{subtitle:(0,o.GQ)(d.title),order:g}),J());let c=await aH({manager:G,projectRoot:C,chapter:d,scopedFilePaths:K,fileRoleByPath:aV,fileProcessingByPath:aW,requiredNeeds:[...new Set([...aa,...at])],highRisk:a3.highRisk||at.length>0,signal:a.signal}).catch(()=>[]);ab=c.length,c.length>0&&(V=[...V,...(0,a_.Su)(c,a0)],bN.size>0&&(V=V.filter(a=>!bN.has((0,w.hM)(a)))),_=dx(d,V,{preservePinned:!0},cJ),_=cO(_,bX.scopeConflicts),(0,a_.U2)(_,a0,`chapter:${d.id}:deep`),aa=d.requiredFacts.filter(a=>!_.some(b=>(0,p.Lk)(b,a)))),at=(as=(0,z.ji)({needs:aq,factsModel:bU,evidence:V,profile:au,excludedEvidenceKeys:bN})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,o.GQ)(d.title)} 深度召回完成:命中 ${ab} 条${at.length>0?`,仍缺 ${at.length} 项(触发轻量补充)`:""}`,progress:{current:g+1,total:b6.length,label:"证据检索"}},{subtitle:(0,o.GQ)(d.title),order:g}),J()}if(at.length>0&&K.length>0){let b=(0,a_.Su)(await aH({manager:G,projectRoot:C,chapter:d,scopedFilePaths:K,fileRoleByPath:aV,fileProcessingByPath:aW,requiredNeeds:at,highRisk:!0,signal:a.signal}).catch(()=>[]),a0);b.length>0&&(V=[...V,...b],bN.size>0&&(V=V.filter(a=>!bN.has((0,w.hM)(a)))),_=dx(d,V,{preservePinned:!0},cJ),_=cO(_,bX.scopeConflicts),(0,a_.U2)(_,a0,`chapter:${d.id}:supplemental`),aa=d.requiredFacts.filter(a=>!_.some(b=>(0,p.Lk)(b,a))),at=(as=(0,z.ji)({needs:aq,factsModel:bU,evidence:V,profile:au,excludedEvidenceKeys:bN})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}for(let a of((0,a_.U2)(_,a0,`chapter:${d.id}:writer-input`),0===_.length&&bp.push(`${d.title}:缺少可支撑正文的项目资料证据`),aa))bp.push(`${d.title}:事实需求未满足 ${a}`);let aA=(0,aI.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:a4.length>0?"success":"failed",message:`已检索/绑定 ${a4.length} 条证据`});by<0?by=(0,aI.fx)(T,aA):T[by]={...aA,order:T[by]?.order??aA.order},J(),(0,A.Te)(a.signal);let aB=new Map,aD=b=>{let c=(0,A.c6)({kind:"section",query:`${d.title} ${b}`.trim(),scopedFilePaths:K}),e=aB.get(c);if(e)return Promise.resolve(e);let f=(0,aM.Ym)(b,d,_),g=f.filter(a=>aN.AM.test(a.content)).length;return f.length>=4&&g>=1?(aB.set(c,f),Promise.resolve(f)):dz({manager:G,projectRoot:C,chapter:d,sectionTitle:b,scopedFilePaths:K,fileRoleByPath:aV,fileProcessingByPath:aW,signal:a.signal}).then(a=>(aB.set(c,a),a))},aE=b=>{if(0===b.length||0===K.length)return Promise.resolve([]);let c=b.join(" ");return dz({manager:G,projectRoot:C,chapter:d,sectionTitle:c,scopedFilePaths:K,fileRoleByPath:aV,fileProcessingByPath:aW,signal:a.signal}).catch(()=>[])},aF=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,p.Lk)(a,b)||`${a.sectionTitle||""} ${a.content}`.includes(b))).length,d=a.chapter.requiredFacts.length,e=a.chapter.requiredFacts.filter(b=>a.evidence.some(a=>(0,p.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:d,evidence:_,risk:a3});a5.push(aF);let aK=new Set(_.map(a=>a.filePath)),aP=_.reduce((a,b)=>a+b.content.length,0),aQ=[...a3.highRisk?[`召回覆盖风险(${a3.riskReason||"切片未完全预加载"}):已加载 ${a3.loadedChunks}/${a3.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${L.length} 条`,`深召回证据:${ab} 条`,`事实覆盖:${aF.requiredFactCovered}/${aF.requiredFactTotal}`,`小节覆盖:${aF.sectionCovered}/${aF.sectionTotal}`];T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:Y.writerPrompts[0]?.id,status:"running",message:`${(0,o.GQ)(d.title)} 已选取 ${_.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aK.size} 份`,`上下文字符:${aP}`,`检索查询:${F.length} 组`,...aQ],progress:{current:g+1,total:b6.length,label:"正文生成"}},{subtitle:(0,o.GQ)(d.title),order:g}),J(),cJ.evidence.contextChars+=aP;let aR=(0,z.n9)(as),aS=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)?bQ:[],aT=(0,aM.qX)((0,aM.hZ)({chapter:d,plan:void 0,spec:ar,roleFacts:S,evidence:_,missingFacts:aa,indexedFacts:[...aS,...aR],resolvedFactNeeds:as,factNeedsPrompt:(0,z.GK)(as),specAuthorityMap:bU.specAuthorityMap})),aY=(0,eg.up)({plan:cE.plan,chapter:d,context:bV,evidence:_});if(bV.chapterTasks=[...(bV.chapterTasks||[]).filter(a=>a.chapterId!==d.id),aY.task],bV.nodes.push(aY.node),(0,cR.cN)(bV),(0,aI.fx)(T,(0,aI.X5)({type:"validation",roleId:`agent-chapter-task-${d.id}`,status:aY.task.ready||k?"success":"failed",message:aY.task.ready?aY.node.outputSummary||`${(0,o.GQ)(d.title)} 章节任务规划完成`:k?`${(0,o.GQ)(d.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:aY.node.outputSummary||`${(0,o.GQ)(d.title)} 章节任务规划完成`,details:aY.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:T.length})),J(H),!aY.task.ready&&!k)throw Error(`${(0,o.GQ)(d.title)} 章节任务未就绪:${aY.task.issues.map(a=>a.message).join(";")}`);let a2=[ao,(0,eg.bT)(aY.task)].filter(Boolean).join("\n\n"),a7={total:as.length,satisfied:as.filter(a=>"satisfied"===a.status).length,missing:as.filter(a=>"missing"===a.status).length,lowConfidence:as.filter(a=>"low_confidence"===a.status).length};for(let a of at)bp.push(`${d.title}:事实需求未确认 ${a}`);let ba=cD.chapterTargets.get(d.id)||1200,bb=d.sections?.filter(Boolean).length||0,bc=/[、,,;;]/u.test(d.title),bd=function(a){let{budgetTarget:b,sectionCount:c,title:d,longformStrict:e}=a,f=/[、,,;;]/u.test(d),g=/工期|进度|质量|安全|危大|资源|人材机|保障|措施|重难点/u.test(d),h=/概况|结语|附录|说明/u.test(d),i=c>0?c*(f?720:g?900:780):g?5200:3600,j=e?h?2600:g?5200:3600:Math.min(1200,b),k=e?Math.min(Math.max(4200,b),c>=30?9800:f?8800:g?9200:7200):b,l=e?Math.max(j,b):Math.max(j,Math.min(b,i,k));return{budgetTarget:b,roundTarget:l,structureTarget:i,maxWords:Math.ceil(l*(a.longformStrict?1.12:1.18)),label:`章节预算约 ${b} 字,本轮生成约 ${l} 字,结构目标约 ${i} 字`}}({budgetTarget:ba,sectionCount:bb,title:d.title,longformStrict:cD.longformStrict}),be=Math.ceil(bd.maxWords*(cD.maxChars?1.05:1)),bf=c1?function(a,b){let c=a.outline.chapters.find(a=>a.title===b);return c||a.outline.chapters.find(a=>b.includes(a.title)||a.title.includes(b))}(b,d.title):void 0,bg=bf?function(a){let b=[`【第 ${a.id} 章「${a.title}」蓝图切片——以下项目专属事实由蓝图冻结锁定,正文必须一致引用】`];for(let c of a.subSections){b.push(`
97
97
  ## ${c.id} ${c.title}(目标 ${c.targetWords??2400} 字)`);let a=c.requiredParams.filter(a=>"must_cite"===a.mode).map(a=>a.path);for(let d of(a.length>0&&b.push(`must_cite 参数(正文必须出现且与蓝图一致):${a.join("、")}`),c.workPackages)){b.push(`
98
- ### 工作包:${d.name}(${"major"===d.kind?"主要":"一般"}工作包)`);let a=Object.entries(d.quantities).map(([a,b])=>`${a} ${b.value}${b.unit}`).join("、");a&&b.push(`- 工程量:${a}`),d.processChain.length>0&&b.push(`- 工序链:${d.processChain.join(" → ")}`),d.methods.length>0&&b.push(`- 施工方法(清单特征原文):${d.methods.join(";")}`),d.params.length>0&&b.push(`- 工艺参数:${d.params.map(a=>`${a.key}=${a.value}`).join(";")}`),d.acceptance.length>0&&b.push(`- 验收要求:${d.acceptance.join(";")}`),d.standards.length>0&&b.push(`- 规范依据:${d.standards.join(";")}`)}}return b.join("\n")}(be):"",bg=be&&b?function(a,b){let c=new Set,d=[];for(let e of a.subSections.flatMap(a=>a.requiredParams.filter(a=>"must_cite"===a.mode&&a.strict)))if(!c.has(e.path)){if(c.add(e.path),"data.contract.total_days"===e.path&&b.contract.totalDays>0){d.push(`总工期 ${b.contract.totalDays} 日历天`);continue}if(e.path.startsWith("data.quantities.")){let a=b.quantities[e.path.slice(16)];a&&a.value>0&&d.push(`${e.path.slice(16)} ${a.value}${a.unit}`)}}return d.join(";")}(be,b.data):"",bh=bc.roundTarget,bi=(0,aM.uV)(bh,bh),bj=ba>0?cE.longformStrict?bh:Math.min(bh,Math.max(1800,bc.structureTarget)):bh,bk=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),bl=process.env.DOCUMENT_SECTION_FIRST_GENERATION,bm=void 0!==bl&&0===Number(bl),bn=void 0!==bl&&0!==Number(bl),bo=ba>=2&&ba<=bk&&!bb,br=!!(be&&be.subSections.length>ba),bs=!bm&&ba>=2&&(ba>bk||bb||br||cE.longformStrict&&ba>=6),bt=!bm&&!bs&&ba>=2&&ba<=bk&&(bn||bo||cE.longformStrict),bu=0,bw=a=>{let b=Date.now();if(b-bu<3e3)return;bu=b;let c=a.filter(Boolean).join("\n\n");c.trim()&&J([...H,{id:d.id,title:d.title,content:`## ${d.title}
98
+ ### 工作包:${d.name}(${"major"===d.kind?"主要":"一般"}工作包)`);let a=Object.entries(d.quantities).map(([a,b])=>`${a} ${b.value}${b.unit}`).join("、");a&&b.push(`- 工程量:${a}`),d.processChain.length>0&&b.push(`- 工序链:${d.processChain.join(" → ")}`),d.methods.length>0&&b.push(`- 施工方法(清单特征原文):${d.methods.join(";")}`),d.params.length>0&&b.push(`- 工艺参数:${d.params.map(a=>`${a.key}=${a.value}`).join(";")}`),d.acceptance.length>0&&b.push(`- 验收要求:${d.acceptance.join(";")}`),d.standards.length>0&&b.push(`- 规范依据:${d.standards.join(";")}`)}}return b.join("\n")}(bf):"",bh=bf&&b?function(a,b){let c=new Set,d=[];for(let e of a.subSections.flatMap(a=>a.requiredParams.filter(a=>"must_cite"===a.mode&&a.strict)))if(!c.has(e.path)){if(c.add(e.path),"data.contract.total_days"===e.path&&b.contract.totalDays>0){d.push(`总工期 ${b.contract.totalDays} 日历天`);continue}if(e.path.startsWith("data.quantities.")){let a=b.quantities[e.path.slice(16)];a&&a.value>0&&d.push(`${e.path.slice(16)} ${a.value}${a.unit}`)}}return d.join(";")}(bf,b.data):"",bi=bd.roundTarget,bj=(0,aM.uV)(bi,bi),bk=bb>0?cD.longformStrict?bi:Math.min(bi,Math.max(1800,bd.structureTarget)):bi,bl=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),bm=process.env.DOCUMENT_SECTION_FIRST_GENERATION,bn=void 0!==bm&&0===Number(bm),bo=void 0!==bm&&0!==Number(bm),bq=bb>=2&&bb<=bl&&!bc,br=!!(bf&&bf.subSections.length>bb),bs=!bn&&bb>=2&&(bb>bl||bc||br||cD.longformStrict&&bb>=6),bt=!bn&&!bs&&bb>=2&&bb<=bl&&(bo||bq||cD.longformStrict),bu=0,bz=a=>{let b=Date.now();if(b-bu<3e3)return;bu=b;let c=a.filter(Boolean).join("\n\n");c.trim()&&J([...H,{id:d.id,title:d.title,content:`## ${d.title}
99
99
 
100
- ${c}`,evidence:_,missingFacts:aa,sections:d.sections||[],tablePlans:d.tablePlans||[],inProgress:!0}])},bE=a=>{"complete"===a.phase&&a.partialSections&&bw(a.partialSections)};if(k)e=dk(k,d),e=await db(e,bM),f=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"success",message:`${(0,o.GQ)(d.title)} 已复用已有章节正文:当前 ${(0,r.V7)(e)} 字,跳过 Writer,直接进入章节收口`,details:[`有效证据:${_.length} 条`,`事实需求:${a3.satisfied}/${a3.total} 已满足,缺失 ${a3.missing},低置信 ${a3.lowConfidence}`,"来源:resumeChapters/checkpointChapters"],progress:{current:g+1,total:b7.length,label:"复用章节"}},{subtitle:(0,o.GQ)(d.title),order:g}),T[i]=f,J(H);else{let f;T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"running",message:bs?`${(0,o.GQ)(d.title)} 正在规划主题块并准备并发成稿`:bt?`${(0,o.GQ)(d.title)} 正在按小节并发成稿`:`${(0,o.GQ)(d.title)} 正在整章一次成稿`,details:bs||bt?[...ap,`有效证据:${_.length} 条`,`事实需求:${a3.satisfied}/${a3.total} 已满足,缺失 ${a3.missing},低置信 ${a3.lowConfidence}`,bc.label,`生成上限约 ${bd} 字`,`模板细目:${d.sections?.length||0} 条`,bs?"细目较多,先由章级 Planner 聚类为主题块并语义合并,再按主题块全并发出稿,避免逐小节碎片化":"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...ap,`有效证据:${_.length} 条`,`事实需求:${a3.satisfied}/${a3.total} 已满足,缺失 ${a3.missing},低置信 ${a3.lowConfidence}`,bc.label,`生成上限约 ${bd} 字`,`规划小节:${ba} 个`,"首次生成必须覆盖章节结构、小节和事实,篇幅目标仅作为规划参考"],progress:{current:g+1,total:b7.length,label:bs?"主题块并发":bt?"小节并发":"整章成稿"}},{subtitle:(0,o.GQ)(d.title),order:g}),J();let h=async(a,b,c)=>{let d=await Promise.all(b.map(({block:b})=>(0,aM.nl)({...a,targetWords:b.targetWords,maxWords:Math.ceil(1.1*b.targetWords)},{blocks:[b],coveredSections:[],fallbackSections:[],llmPlanned:!1}).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};if(bs){let b=await P(()=>(0,aJ.X6)(cK,`chapter-plan:${d.id}`,async()=>(function(a){let b,{blueprintChapter:c,inputSections:d,chapterTitle:e,targetWords:f}=a,g=[],h=[];if(c&&0!==c.subSections.length){for(let a of c.subSections){let b=a.workPackages.map(a=>({title:a.name,sources:[a.name]}));for(let c=0;c<b.length;c+=6){let d=b.slice(c,c+6);g.push({title:1===d.length?a.title:`${a.title}(${c/6+1})`,subPoints:d,facts:[],targetWords:1200})}}if(0===g.length){let a=bD(d,e,f);g=a.blocks,h=a.coveredSections,b=a.fallbackSections}else h=d.filter(a=>g.some(b=>bA(b.title,a)||b.subPoints.some(b=>b.sources.some(b=>bA(b,a))||bA(b.title,a)))),b=d.filter(a=>!h.includes(a))}else{let a=bD(d,e,f);g=a.blocks,h=a.coveredSections,b=a.fallbackSections}if(b.length>0){for(let a of bD(b,e,f).blocks)g.some(b=>bA(b.title,a.title)||a.subPoints.some(a=>b.subPoints.some(b=>bA(b.title,a.title))))||g.push(a);h=[...h,...b],b=[]}if(a.projectContext&&a.evidence){let b=a.projectContext,c=a.evidence,d=a9.gG.test(e)?[]:(a.blueprintChapter?.subSections??[]).map(a=>a.title);g=g.map(a=>{if(!bC(a.title))return a;let e=function(a,b){let c=[];for(let b of a){let a=b.trim(),d=a.replace(/\s+/gu,"");if(!(!d||/^其他$|^其它$|^其他工程$|^其余/u.test(d))&&!c.some(a=>{let b=a.replace(/\s+/gu,"");return b.includes(d)||d.includes(b)})&&(c.push(a),c.length>=12))break}return c}([...(0,a8.Ep)(b,c),...d],0);return e.length<3?a:{...a,subPoints:e.map(a=>({title:a,sources:[a]}))}})}return bB(g,f),{blocks:g,coveredSections:h,fallbackSections:b,llmPlanned:!1}})({blueprintChapter:be,inputSections:d.sections||[],chapterTitle:(0,o.GQ)(d.title),targetWords:bj,projectContext:cb,evidence:_}))),e=function(a){if(!a.blocks.some(a=>1===a.subPoints.length&&a.targetWords>2400&&!bC(a.title)))return a;let b=a.blocks.flatMap(a=>{if(1!==a.subPoints.length||a.targetWords<=2400||bC(a.title))return[a];let b=Math.max(1200,Math.floor(a.targetWords/2));return[{...a,title:`${a.title}(一)`,targetWords:b,halfFocus:"本部分为该主题的前半部分,聚焦总体构成与组织框架:逐项列明构成要素、总体规模指标与组织方式;只写本部分内容,不得涉及后半部分的具体展开。"},{...a,title:`${a.title}(二)`,targetWords:b,halfFocus:"本部分为该主题的后半部分,聚焦具体展开与实施要求:逐项展开实施内容、工艺要求与衔接安排;只写本部分内容,不得重复前半部分的总体框架。"}]});return{...a,blocks:b}}(b);if(e.blocks.length>0){c=e;let b=[ao,(0,eg.$8)(aU.task,e)].filter(Boolean).join("\n\n"),j=e.blocks.reduce((a,b)=>a+b.subPoints.length,0),k=e.blocks.reduce((a,b)=>a+b.subPoints.reduce((a,b)=>a+Math.max(0,b.sources.length-1),0),0),l=be?e.fallbackSections.length>0?`(蓝图章切片确定性转换:${e.fallbackSections.length} 条细目由覆盖校验挂回主题块)`:"(蓝图章切片确定性转换:主题块来自蓝图小节/工作包)":"(蓝图未覆盖本章,已按语义域确定性分组)";T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"running",message:`${(0,o.GQ)(d.title)} 已规划 ${e.blocks.length} 个主题块,正在按主题块并发成稿${l}`,details:[...ap,`有效证据:${_.length} 条`,`输入细目 ${ba} 条 → 主题块 ${e.blocks.length} 个(每块 2~4 个 H4 要点)`,`语义合并 ${k} 条细目,目录级 H4 合计 ${j} 个`,"单块 1200~2200 字,主题块间全并发,单节深度与整体耗时双优"],progress:{current:g+1,total:b7.length,label:"主题块并发"}},{subtitle:(0,o.GQ)(d.title),order:g});let m=T.find(a=>a.roleId===`agent-chapter-task-${d.id}`);m&&(m.message=`${aU.task.sections.filter(a=>a.ready).length}/${aU.task.sections.length} 条细目任务就绪(已规划为 ${e.blocks.length} 个主题块)`),J(H);let n={template:E,chapter:d,evidence:_,missingFacts:aa,promptTexts:b,projectContext:cD(d),skeletonProjectContext:cb,requirement:a.requirement,roleContext:am,targetWords:bj,maxWords:bd,forbidDrawingImages:!1,factCoverageContext:aT,compactProjectContext:!0,scopedProjectContext:cC,blueprintDataText:c3,blueprintSliceText:bf,blueprintMustCiteHint:bg,sectionEvidenceProvider:aC,onSectionProgress:bE,diagnostics:cK,signal:a.signal},p=await P(()=>(0,aJ.X6)(cK,`chapter-planned-block-draft:${d.id}`,()=>(0,aM.nl)(n,e)));if(p?.allSucceeded)f=p.markdown;else if(p){let a=await h(n,p.failedBlocks,p.sections),b=p.failedBlocks.filter(({index:b})=>!a[b]);b.length>0&&(a=await h(n,b,a)),a.every(a=>!!a)&&(f=`## ${d.title}
100
+ ${c}`,evidence:_,missingFacts:aa,sections:d.sections||[],tablePlans:d.tablePlans||[],inProgress:!0}])},bE=a=>{"complete"===a.phase&&a.partialSections&&bz(a.partialSections)};if(k)e=dk(k,d),e=await db(e,bL),f=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"success",message:`${(0,o.GQ)(d.title)} 已复用已有章节正文:当前 ${(0,r.V7)(e)} 字,跳过 Writer,直接进入章节收口`,details:[`有效证据:${_.length} 条`,`事实需求:${a7.satisfied}/${a7.total} 已满足,缺失 ${a7.missing},低置信 ${a7.lowConfidence}`,"来源:resumeChapters/checkpointChapters"],progress:{current:g+1,total:b6.length,label:"复用章节"}},{subtitle:(0,o.GQ)(d.title),order:g}),T[i]=f,J(H);else{let f;T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"running",message:bs?`${(0,o.GQ)(d.title)} 正在规划主题块并准备并发成稿`:bt?`${(0,o.GQ)(d.title)} 正在按小节并发成稿`:`${(0,o.GQ)(d.title)} 正在整章一次成稿`,details:bs||bt?[...ap,`有效证据:${_.length} 条`,`事实需求:${a7.satisfied}/${a7.total} 已满足,缺失 ${a7.missing},低置信 ${a7.lowConfidence}`,bd.label,`生成上限约 ${be} 字`,`模板细目:${d.sections?.length||0} 条`,bs?"细目较多,先由章级 Planner 聚类为主题块并语义合并,再按主题块全并发出稿,避免逐小节碎片化":"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...ap,`有效证据:${_.length} 条`,`事实需求:${a7.satisfied}/${a7.total} 已满足,缺失 ${a7.missing},低置信 ${a7.lowConfidence}`,bd.label,`生成上限约 ${be} 字`,`规划小节:${bb} 个`,"首次生成必须覆盖章节结构、小节和事实,篇幅目标仅作为规划参考"],progress:{current:g+1,total:b6.length,label:bs?"主题块并发":bt?"小节并发":"整章成稿"}},{subtitle:(0,o.GQ)(d.title),order:g}),J();let h=async(a,b,c)=>{let d=await Promise.all(b.map(({block:b})=>(0,aM.nl)({...a,targetWords:b.targetWords,maxWords:Math.ceil(1.1*b.targetWords)},{blocks:[b],coveredSections:[],fallbackSections:[],llmPlanned:!1}).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};if(bs){let b=await P(()=>(0,aJ.X6)(cJ,`chapter-plan:${d.id}`,async()=>(function(a){let b,{blueprintChapter:c,inputSections:d,chapterTitle:e,targetWords:f}=a,g=[],h=[];if(c&&0!==c.subSections.length){for(let a of c.subSections){let b=a.workPackages.map(a=>({title:a.name,sources:[a.name]}));for(let c=0;c<b.length;c+=6){let d=b.slice(c,c+6);g.push({title:1===d.length?a.title:`${a.title}(${c/6+1})`,subPoints:d,facts:[],targetWords:1200})}}if(0===g.length){let a=bD(d,e,f);g=a.blocks,h=a.coveredSections,b=a.fallbackSections}else h=d.filter(a=>g.some(b=>bA(b.title,a)||b.subPoints.some(b=>b.sources.some(b=>bA(b,a))||bA(b.title,a)))),b=d.filter(a=>!h.includes(a))}else{let a=bD(d,e,f);g=a.blocks,h=a.coveredSections,b=a.fallbackSections}if(b.length>0){for(let a of bD(b,e,f).blocks)g.some(b=>bA(b.title,a.title)||a.subPoints.some(a=>b.subPoints.some(b=>bA(b.title,a.title))))||g.push(a);h=[...h,...b],b=[]}if(a.projectContext&&a.evidence){let b=a.projectContext,c=a.evidence,d=a9.gG.test(e)?[]:(a.blueprintChapter?.subSections??[]).map(a=>a.title);g=g.map(a=>{if(!bC(a.title))return a;let e=function(a,b){let c=[];for(let b of a){let a=b.trim(),d=a.replace(/\s+/gu,"");if(!(!d||/^其他$|^其它$|^其他工程$|^其余/u.test(d))&&!c.some(a=>{let b=a.replace(/\s+/gu,"");return b.includes(d)||d.includes(b)})&&(c.push(a),c.length>=12))break}return c}([...(0,a8.Ep)(b,c),...d],0);return e.length<3?a:{...a,subPoints:e.map(a=>({title:a,sources:[a]}))}})}return bB(g,f),{blocks:g,coveredSections:h,fallbackSections:b,llmPlanned:!1}})({blueprintChapter:bf,inputSections:d.sections||[],chapterTitle:(0,o.GQ)(d.title),targetWords:bk,projectContext:ca,evidence:_}))),e=function(a){if(!a.blocks.some(a=>1===a.subPoints.length&&a.targetWords>2400&&!bC(a.title)))return a;let b=a.blocks.flatMap(a=>{if(1!==a.subPoints.length||a.targetWords<=2400||bC(a.title))return[a];let b=Math.max(1200,Math.floor(a.targetWords/2));return[{...a,title:`${a.title}(一)`,targetWords:b,halfFocus:"本部分为该主题的前半部分,聚焦总体构成与组织框架:逐项列明构成要素、总体规模指标与组织方式;只写本部分内容,不得涉及后半部分的具体展开。"},{...a,title:`${a.title}(二)`,targetWords:b,halfFocus:"本部分为该主题的后半部分,聚焦具体展开与实施要求:逐项展开实施内容、工艺要求与衔接安排;只写本部分内容,不得重复前半部分的总体框架。"}]});return{...a,blocks:b}}(b);if(e.blocks.length>0){c=e;let b=[ao,(0,eg.$8)(aY.task,e)].filter(Boolean).join("\n\n"),j=e.blocks.reduce((a,b)=>a+b.subPoints.length,0),k=e.blocks.reduce((a,b)=>a+b.subPoints.reduce((a,b)=>a+Math.max(0,b.sources.length-1),0),0),l=bf?e.fallbackSections.length>0?`(蓝图章切片确定性转换:${e.fallbackSections.length} 条细目由覆盖校验挂回主题块)`:"(蓝图章切片确定性转换:主题块来自蓝图小节/工作包)":"(蓝图未覆盖本章,已按语义域确定性分组)";T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"running",message:`${(0,o.GQ)(d.title)} 已规划 ${e.blocks.length} 个主题块,正在按主题块并发成稿${l}`,details:[...ap,`有效证据:${_.length} 条`,`输入细目 ${bb} 条 → 主题块 ${e.blocks.length} 个(每块 2~4 个 H4 要点)`,`语义合并 ${k} 条细目,目录级 H4 合计 ${j} 个`,"单块 1200~2200 字,主题块间全并发,单节深度与整体耗时双优"],progress:{current:g+1,total:b6.length,label:"主题块并发"}},{subtitle:(0,o.GQ)(d.title),order:g});let m=T.find(a=>a.roleId===`agent-chapter-task-${d.id}`);m&&(m.message=`${aY.task.sections.filter(a=>a.ready).length}/${aY.task.sections.length} 条细目任务就绪(已规划为 ${e.blocks.length} 个主题块)`),J(H);let n={template:E,chapter:d,evidence:_,missingFacts:aa,promptTexts:b,projectContext:cC(d),skeletonProjectContext:ca,requirement:a.requirement,roleContext:am,targetWords:bk,maxWords:be,forbidDrawingImages:!1,factCoverageContext:aT,compactProjectContext:!0,scopedProjectContext:cB,blueprintDataText:c2,blueprintSliceText:bg,blueprintMustCiteHint:bh,sectionEvidenceProvider:aD,onSectionProgress:bE,diagnostics:cJ,signal:a.signal},p=await P(()=>(0,aJ.X6)(cJ,`chapter-planned-block-draft:${d.id}`,()=>(0,aM.nl)(n,e)));if(p?.allSucceeded)f=p.markdown;else if(p){let a=await h(n,p.failedBlocks,p.sections),b=p.failedBlocks.filter(({index:b})=>!a[b]);b.length>0&&(a=await h(n,b,a)),a.every(a=>!!a)&&(f=`## ${d.title}
101
101
 
102
- ${a.join("\n\n")}`)}}}else f=bt?await P(()=>(0,aJ.X6)(cK,`chapter-section-draft:${d.id}`,()=>(0,aM.N1)({template:E,chapter:d,evidence:_,missingFacts:aa,promptTexts:aZ,projectContext:cD(d),skeletonProjectContext:cb,requirement:a.requirement,roleContext:am,targetWords:bj,maxWords:bd,forbidDrawingImages:!1,factCoverageContext:aT,projectRoot:C,modelName:(0,y.$y)()?.model.name,materialContextHash:(0,A.c6)({materialFilePaths:ad,promptTexts:ao}),allowPartialResult:!1,compactProjectContext:!0,scopedProjectContext:cC,blueprintDataText:c3,blueprintSliceText:bf,sectionEvidenceProvider:aC,onSectionProgress:bE,diagnostics:cK,signal:a.signal}))):await P(()=>(0,aJ.X6)(cK,`chapter-draft:${d.id}`,()=>(0,aM.eu)(E,d,_,aa,aZ,cD(d),a.requirement,am,{forbidDrawingImages:!1,minWords:bh,targetWords:bh,maxWords:bd,maxTokens:bi,factCoverageContext:aT,blueprintDataText:c3,blueprintSliceText:bf,signal:a.signal,diagnostics:cK,supplementEvidenceProvider:aD,evidenceFloorChars:cJ.evidenceFloorChars,evidenceCeilingChars:cJ.evidenceCeilingChars})));if(f||(cK.llm.lastError=cK.llm.lastError||"全部成稿路径未返回有效正文"),f&&be&&b){let a=function(a,b,c){let d=[],e=[],f=a,g=b.subSections.flatMap(a=>a.requiredParams.filter(a=>"must_cite"===a.mode&&a.strict)),h=new Set;for(let a of g)if(!h.has(a.path)){if(h.add(a.path),"data.contract.total_days"===a.path){if(c.contract.totalDays<=0)continue;let a=/(?:总工期|施工工期|合同工期|工期)(?:为|约|共计|控制)?[^\n。;;]{0,20}?(\d+(?:\.\d+)?)\s*(?:日历)?天/gu,b=!1;f=f.replace(a,(a,e)=>{b=!0;let f=Number(e);return f===c.contract.totalDays||f<=0?a:(d.push({anchor:"总工期",from:`${f}天`,to:`${c.contract.totalDays}天`}),a.replace(e,String(c.contract.totalDays)))}),b||e.push(`总工期 ${c.contract.totalDays} 日历天`);continue}if(a.path.startsWith("data.quantities.")){let b=a.path.slice(16),g=c.quantities[b];if(!g||g.value<=0)continue;let h=g.unit||"",i=RegExp(`${bv(b)}[^\\n。;;]{0,40}?(\\d+(?:\\.\\d+)?)\\s*${h?bv(h):""}`,"gu"),j=!1;f=f.replace(i,(a,c)=>{j=!0;let e=Number(c);return e===g.value||e<=0?a:(d.push({anchor:b,from:`${e}${h}`,to:`${g.value}${h}`}),a.replace(c,String(g.value)))}),j||e.push(`${b} ${g.value}${h}`)}}return{markdown:f,fixed:d,missing:e}}(f,be,b.data);a.fixed.length>0?(f=a.markdown,cK.llm.lastInfo=`蓝图引用对齐:${d.title} 回填 ${a.fixed.length} 处(${a.fixed.map(a=>`${a.anchor} ${a.from}→${a.to}`).join("、")})${a.missing.length?`;未引用缺口 ${a.missing.length} 项:${a.missing.join("、")}`:""}`):a.missing.length>0&&(cK.llm.lastInfo=`蓝图引用缺口观测:${d.title} 未在正文引用 ${a.missing.length} 项 must_cite 参数(${a.missing.slice(0,6).join("、")}${a.missing.length>6?" 等":""}),由跨章一致性审查兑底`)}if((0,A.Te)(a.signal),!f){let a=`${(0,o.GQ)(d.title)} 大模型未返回有效正文,已阻断生成`;throw T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"failed",message:a,details:[`LLM 最近错误:${cK.llm.lastError||"空响应或超时"}`,`证据条数:${_.length}`],progress:{current:g+1,total:b7.length,label:"章节阻断"}},{subtitle:(0,o.GQ)(d.title),order:g}),J(H),Error(a)}if(!f.trim())throw Error(`${(0,o.GQ)(d.title)} 首次生成失败,未获得可用于定稿的正文`);let j=c&&c.blocks.length>0?c.blocks.map(a=>a.title):(d.sections||[]).filter(Boolean),k=c&&c.blocks.length>0?c.blocks.flatMap(a=>a.subPoints.map(a=>a.title)):[],l=f;j.length>0&&(l=(0,A.Ww)(l,j,3)),k.length>0&&(l=(0,A.Ww)(l,k,4)),e=dk(l,d),e=await db(e,bM)}let bF=await aO({chapter:d,content:e,evidence:_}),bI=(0,r.V7)(e),bJ=(0,q.r4)(e),bL=c&&c.blocks.length>0?c.blocks.map(a=>a.title):(d.sections||[]).filter(Boolean),bP=bL.length>0?bL:bJ.length>0?bJ:[],bQ=(0,s.qK)(e,[{title:d.title,content:e,sections:bP}]).map(a=>a.message),bS=bF.slice(0,6).map(a=>`小节事实密度需优化:${a}`),bU=[...bQ,...bS],bZ=function(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))||c.some(a=>/空小节|缺少规划小节/u.test(a))?"failed":"success"}(bI,0,bU);return f=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:bZ,message:(0,aI.AQ)(`${(0,o.GQ)(d.title)} 已由大模型成稿:当前 ${bI} 字;章节预算约 ${bc.budgetTarget} 字,本轮目标约 ${bc.roundTarget} 字${bU.length?`;待优化:${bU.slice(0,8).join("、")}`:""}`,h),details:[`本轮完成率:${Math.round(bI/Math.max(1,bc.roundTarget)*100)}%`,`结构目标约 ${bc.structureTarget} 字`,...ap,`二级小节:${bP.length} 个`],progress:{current:g+1,total:b7.length,label:bU.length?"章节已生成":"章节达标"}},{subtitle:(0,o.GQ)(d.title),order:g}),by[g]=f,async()=>{let a={id:d.id,title:d.title,content:e,evidence:_,missingFacts:aa,sections:bP,tablePlans:d.tablePlans||[]};bx[g]=a,H=bx.filter(a=>!!a),J(H)}}catch(h){if(a.signal?.aborted)throw h;let b=cK.llm.lastError,c=`failures=${cK.llm.failures} retries=${cK.llm.retries} reasoningTokens=${cK.llm.reasoningTokens||0}`;console.error(`[gen] chapter ${d.title} failed:`,h,b?`| LLM lastError: ${b}`:"| LLM lastError: (none)","|",c);let e=`${d.title}:${h instanceof Error?h.message:"生成失败"}`;br.push(e),f=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,o.GQ)(d.title)} 生成失败:${e}`,details:[`LLM 最近错误:${b||"无记录"}`,`LLM 调用失败 ${cK.llm.failures} 次、重试 ${cK.llm.retries} 次`]},{subtitle:(0,o.GQ)(d.title),order:g}),by[g]=f}f&&(T[i]=f),J(H)}))))e&&cZ.push(cY.run(e))}await Promise.all(cZ),cK.metrics.push({name:"phase:draft",startedAt:c4,endedAt:Date.now(),durationMs:Date.now()-c4});let c5=Date.now(),c6=bx.filter(a=>!!a);bw.push(...by.filter(a=>!!a));let c7=[],c8=!1;if(cI.enableGlobalReview){let c=await ep({globalReviewSamplingRate:cI.globalReviewSamplingRate,chapterDraftsFinal:c6,template:E,reviewPromptTexts:aT,repairPromptTexts:aU,requirement:a.requirement,signal:a.signal,projectContext:cb,generationDiagnostics:cK,preliminaryFactsModel:bV,scopeConflicts:bY.scopeConflicts,progressStages:T,emitProgress:J,withProgressHeartbeat:P,blueprintData:b?.validation.passed?b.data:void 0});c7=c.issues,c8=c.dedupRan}else await eo({chapterDraftsFinal:c6,template:E,repairPromptTexts:aU,projectContext:cb,requirement:a.requirement,signal:a.signal,generationDiagnostics:cK,progressStages:T,emitProgress:J,withProgressHeartbeat:P});let{tableFixApplied:c9}=await em({effectiveChapters:b7,chapterDraftsFinal:c6,template:E,repairPromptTexts:aU,requirement:a.requirement,signal:a.signal,generationDiagnostics:cK,progressStages:T,emitProgress:J,withProgressHeartbeat:P});return(c9||!c8)&&(c7=await el({chapterDraftsFinal:c6,globalConsistencyIssues:c7,progressStages:T,emitProgress:J})),!function(a){let{generationDiagnostics:b,progressStages:c,chapterDraftsFinal:d,emitProgress:e}=a,f=b.evidence,g=b.llm,h=(0,v.Bd)();b.semantic=h;let i=h.embedCacheHits+h.embedCacheMisses,j=i>0?Math.round(1e4*h.embedCacheHits/i)/100:null,k=(g.promptCacheHitTokens||0)+(g.promptCacheMissTokens||0),l=k>0?Math.round(1e4*(g.promptCacheHitTokens||0)/k)/100:null,m=g.layerChars,n=m?m.l0+m.l1+m.l2+m.l3:0,o=a=>n>0?Math.round(1e4*a/n)/100:0,p=m&&n>0?`上下文分层:L0 system 恒定 ${m.l0} 字(${o(m.l0)}%)、L1 任务级 ${m.l1} 字(${o(m.l1)}%)、L2 章级 ${m.l2} 字(${o(m.l2)}%)、L3 小节级 ${m.l3} 字(${o(m.l3)}%)`:"上下文分层:本次生成未采集 L0-L3 分层统计";(0,aI.fx)(c,(0,aI.X5)({type:"validation",roleId:"budget-trim-report",status:"success",message:`预算裁剪报告:证据 ${f.raw} 条 → 采用 ${f.used} 条(噪声过滤 ${f.filteredNoise} 条、预算兜底裁剪 ${f.budgetDropped} 条),证据上下文 ${f.contextChars} 字`,details:[`证据质量:平均噪声分 ${f.avgNoiseScore},平均事实密度 ${f.avgFactDensity}`,`证据分层(T0 关键事实/T1 高相关片段/T2 目录索引):T0 注入 ${f.t0Chars||0} 字、T1 注入 ${f.t1Chars||0} 字、T2 索引 ${f.t2Lines||0} 行、目录省略 ${f.omittedChars||0} 字——A2 块级增量压缩后 T1 应显著低于 T0+T2`,`检索:${f.searchQueries} 组查询,耗时 ${Math.round(f.searchMs/1e3)} 秒`,`LLM:${g.calls} 次调用,失败 ${g.failures} 次,重试 ${g.retries} 次,schema 校验失败 ${g.schemaFailures} 次`,`LLM 上下文输入:${g.inputChars||0} 字符(system+user)${g.unlayeredChars?`(其中未分层调用 ${g.unlayeredChars} 字符,占比 ${Math.round(g.unlayeredChars/(g.inputChars||1)*1e4)/100}%)`:""},输入 ${g.inputTokens||0} token / 输出 ${g.outputTokens||0} token`,p,null===l?"上下文缓存:提供商未返回 prefix cache 指标(prompt_cache_hit/miss_tokens),无法观测命中率":`上下文缓存:命中 ${g.promptCacheHitTokens} token / 未命中 ${g.promptCacheMissTokens} token(命中率 ${l}%)——未命中占比高说明固定前缀未收敛,system/user 分离(A5)后应显著上升`,`推理 token:${g.reasoningTokens?`${g.reasoningTokens} token(思考未完全关闭,disableThinking 未生效风险)`:"0(思考已关闭)"}`,null===j?"bge 嵌入缓存:本次生成无嵌入调用":`bge 嵌入缓存:命中 ${h.embedCacheHits} 条 / 未命中 ${h.embedCacheMisses} 条(命中率 ${j}%,全局 LRU 容量 ${process.env.DOCUMENT_EMBED_CACHE_SIZE||2e3})`,"防爆兜底类软限制(保留并逐项记录裁剪量):selectEvidenceByBudget 的 maxItems/maxChars、uniqueEvidence 噪声过滤、evidenceBundlePrompt 的 maxChars、块级证据 top-k 截断、块级 facts 截断","语义取舍类软限制(已迁移本地语义模型):evaluationTexts 词面过滤→条目对象化、criterionFeatures 二字滑窗→bge-small 余弦、章节证据字符硬截→语义排序取 top-k","LLM 输出侧:schema 校验(截断位置可诊断)、空响应重试提示词收敛、块成稿 maxTokens 按目标字数 1:1.2(不走 thinking \xd76 放大)"]},{subtitle:"预算裁剪审计"})),e(d)}({generationDiagnostics:cK,progressStages:T,chapterDraftsFinal:c6,emitProgress:J}),cK.metrics.push({name:"phase:global-review",startedAt:c5,endedAt:Date.now(),durationMs:Date.now()-c5}),(0,aJ.X6)(cK,"phase:finalize",()=>ed({chapterDrafts:c6,chapterDraftsByOrder:bx,chapterGenerationStagesByOrder:by,chapterGenerationStages:bw,effectiveChapters:b7,template:E,allEvidence:a5,projectMaterialScope:a1,progressStages:T,documentSpec:ar,projectMaterialProfile:af,projectMaterialSummary:ap,domainProfile:au,documentBudget:cE,promptTexts:aR,reviewPromptTexts:aT,input:a,generationStrategy:cI,generationDiagnostics:cK,chapterScopedContext:cD,promptBindings:ac,promptDocumentRules:aP,projectUnderstanding:ag,projectContext:cb,projectRoot:C,projectId:D,readiness:av,factExtractionPromptTexts:aS,blueprintData:b?.validation.passed?b.data:void 0,hasExplicitOutline:ao,missingItems:bq,retrievalCoverageReports:a6,failedChapterMessages:br,webResearchReport:bp,indexHealth:aZ,promptPlan:Y,globalConsistencyIssues:c7,scopeConflicts:bY.scopeConflicts,writingTaskBrief:cA,evaluationCriteriaItems:b0.map(a=>a.title).filter(Boolean),tenderRequirements:cj,requirementsSimilarity:cv,factTokenScopeClassifier:cx,professionalDepthClassifier:cz,agentWorkflow:bW,emitProgress:J,withProgressHeartbeat:P}))}},48017:(a,b,c)=>{c.d(b,{BB:()=>e,_2:()=>f,_D:()=>g});var d=c(71678);function e(a,b){return(a.templateId||"")===b.templateId&&(a.requirement||"").trim()===(b.requirement||"").trim()}function f(a){if(!a)return"";let b=["【上一版本继承参考(仅作参照,必须与项目资料一致方可沿用;不一致处一律以项目资料为准)】",`上一版本文档《${a.versionTitle}》的结构与关键口径如下:新版本应尽量保持结构延续性(评审机构按同结构对照评审),并避免重犯上一版已知问题。`];return a.structureLines.length>0&&(b.push(`一、上一版本章节与小节结构(共 ${a.structureLines.length} 项):`),b.push(...a.structureLines.slice(0,40).map(a=>` - ${a}`)),b.push(" 要求:项目资料支撑相同的章节/小节结构尽量沿用(含施工方法章的专业分项小节),不得因重新规划而丢失上一版已有的专业分项小节。")),a.factLines.length>0&&(b.push("二、上一版本关键数值口径(数值必须以本项目资料为准,上一版数值仅作一致性参照):"),b.push(...a.factLines.map(a=>` - ${a}`)),b.push(" 要求:全文同类数值只能有一个口径;上一版口径与项目资料一致时沿用,不一致时按资料修正。")),a.issueLines.length>0&&(b.push("三、上一版已知问题(新版必须避免重犯):"),b.push(...a.issueLines.slice(0,12).map(a=>` - ${a}`))),b.join("\n")}function g(a){let b=a.markdown||"";if(!b.trim())return null;let c={versionTitle:a.title||"上一版本",completedAt:a.completedAt||0,structureLines:function(a){let b=[];for(let c of a.matchAll(/^#{2,4}\s+(.+)$/gmu)){let a=(c[1]||"").replace(/[☑✓✔☐□☒○●◉◇◆]/gu,"").trim();if(!a||/^(?:目录|参考文献|附录)/u.test(a))continue;let e=a.replace(/^\d{1,3}(?:[..]\d{1,3})*[、..]?\s*/u,"");(0,d.xb)(e)||b.push(a)}return[...new Set(b)].slice(0,80)}(b),factLines:function(a){let b=[];for(let c of[/(?:劳动力|作业人员|施工人员|高峰期|高峰|峰值)[^。;\n\d]{0,18}?([\d,]+)\s*人/gu,/(?:总工期|计划工期|工期)[^。;\n\d]{0,12}?(\d{2,4})\s*(?:个)?(?:日历)?天/gu,/(?:总建筑面积|建筑面积)[^。;\n\d]{0,10}?([\d,]+(?:\.\d+)?)\s*(?:㎡|平方米|m2|m²)/gu])for(let d of a.matchAll(c)){let c=a.lastIndexOf("\n",d.index-1)+1,e=a.indexOf("\n",d.index),f=a.slice(c,e<0?void 0:e).trim().slice(0,60);f&&!b.includes(f)&&b.push(f)}return b.slice(0,12)}(b),issueLines:(a.warningIssues||[]).slice(0,12)};return 0===c.structureLines.length&&0===c.factLines.length&&0===c.issueLines.length?null:c}},48661:(a,b,c)=>{c.d(b,{BH:()=>Q,Gl:()=>y,JU:()=>U,Jz:()=>V,M$:()=>K,Oy:()=>E,QG:()=>P,QH:()=>D,SE:()=>F,YL:()=>_,a6:()=>N,r:()=>O,v7:()=>L,yE:()=>T});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(31557),i=c(23760),j=c(87942),k=c(19898),l=c(44533),m=c(78217),n=c(48017),o=c(37095);function p(a,b){return a?.map(a=>"running"===a.status?{...a,status:"failed",message:b}:a)}function q(a){return a.title&&"生成中"!==a.title?a.title:`${a.templateName||"文档"}生成失败`}function r(...a){let b=new Map;for(let c of a)for(let a of c||[])a.id&&a.content?.trim()&&b.set(a.id,a);return[...b.values()]}function s(a){return(a||[]).map(a=>({id:a.id,title:a.title,chars:(0,m.V7)(a.content),status:a.inProgress?"in_progress":a.content.trim().length>0?"completed":"failed",updatedAt:Date.now(),timedOut:a.timedOut,elapsedMs:a.elapsedMs}))}let t=globalThis,u=t.__generatedDocumentTasks??=new Map,v=Math.max(36e5,Number(process.env.DOCUMENT_ABANDONED_RECORD_STALE_MS??864e5)),w=t.__generatedDocumentProcessStartedAt??=Date.now(),x=Math.max(3e4,Number(process.env.DOCUMENT_RECENT_UPDATE_GRACE_MS??6e4));function y(a=(0,l.aY)()){let b=g.join(f.homedir(),".customize-agent","projects",function(a=(0,l.aY)()){return(0,k.computeProjectId)(g.resolve(a))}(a),"generatedDocuments");return e.mkdirSync(g.join(b,"drafts"),{recursive:!0}),e.mkdirSync(g.join(b,"assets"),{recursive:!0}),b}function z(a=(0,l.aY)()){return g.join(y(a),"index.json")}function A(a=(0,l.aY)()){return g.join(y(a),"assets.json")}function B(a,b=(0,l.aY)()){return g.join(y(b),"drafts",`${a}.json`)}function C(a,b=(0,l.aY)()){return g.join(y(b),"drafts",`${a}.meta.json`)}function D(a,b=(0,l.aY)()){let c=G(C(a,b),null);return c&&Number.isFinite(c.updatedAt)?c:null}function E(a){return!(!a||"generating"!==a.status||Date.now()-a.updatedAt<x)&&(a.updatedAt<w||Date.now()-a.updatedAt>=v)}function F(a,b=(0,l.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(y(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join((0,l.NW)(b),a.path):null}function G(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function H(a,b){e.mkdirSync(g.dirname(a),{recursive:!0});let c=`${a}.${process.pid}.${Date.now()}.tmp`;e.writeFileSync(c,JSON.stringify(b,null,2)),e.renameSync(c,a)}function I(a){for(let b of u.values())if(b.documentId===a)return b;return null}function J(a,b=(0,l.aY)()){if("generating"!==a.status||I(a.id)||Date.now()-a.updatedAt<x)return a;let c=a.updatedAt<w?0:v;if(Date.now()-a.updatedAt<c)return a;let d="生成任务已中断,请点击继续生成或重新生成",e=a.checkpointChapters?.length?"warning":"failed",f={...a,title:q(a),status:e,error:a.error||d,executionStages:p(a.executionStages,d),completedAt:Date.now(),warningIssues:a.checkpointChapters?.length?[...a.warningIssues||[],d]:a.warningIssues};return a.taskId&&$(b,{taskId:a.taskId,title:`生成 ${f.title}`,status:"warning"===e?"warning":"error",percent:100,message:d,stages:f.executionStages,error:d}),f}function K(a=(0,l.aY)()){return G(z(a),[]).map(b=>{if("generating"!==b.status)return b;let c=G(B(b.id,a),null);if(!c)return b;let d=J(c,a);return d!==c?X(M(d,a,{preserveUpdatedAt:!0})):X(c)}).sort((a,b)=>(b.createdAt||b.updatedAt)-(a.createdAt||a.updatedAt))}function L(a,b=(0,l.aY)()){let c=G(B(a,b),null);if(!c)return null;let d=J(c,b);return function(a,b=(0,l.aY)()){if("generating"===a.status||!(a.editedMarkdown||a.markdown)?.trim())return a;let c=`document-${a.id}`;if(a.assets?.some(a=>a.id===c&&a.path))return a;let d=S(a,b);return d?M({...a,assets:[d,...(a.assets||[]).filter(a=>a.id!==d.id)]},b):a}(d!==c?M(d,b,{preserveUpdatedAt:!0}):d,b)}function M(a,b=(0,l.aY)(),c){let d=Date.now(),e=Y({...a,updatedAt:c?.preserveUpdatedAt?a.updatedAt:d});H(B(e.id,b),e),H(C(e.id,b),{updatedAt:e.updatedAt,status:e.status,completedAt:e.completedAt});let f=G(z(b),[]).filter(a=>a.id!==e.id);return f.unshift(X(e)),H(z(b),f),e}function N(a,b,c=(0,l.aY)()){let d=L(a,c);return d?M({...d,...b,id:a},c):null}function O(a,b=(0,l.aY)()){let c=L(a,b);if(!c)return null;if("generating"!==c.status)return c;for(let[b,c]of u)c.documentId===a&&(c.status="aborted",c.controller.abort(),u.delete(b));let d="用户中止",e=p(c.executionStages,d),f=M({...c,status:"aborted",error:d,executionStages:e,completedAt:Date.now()},b);return f.taskId&&$(b,{taskId:f.taskId,title:`生成 ${f.title}`,status:"warning",percent:100,message:d,stages:e,error:d}),f}function P(a,b=(0,l.aY)()){try{e.rmSync(B(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}let c=G(z(b),[]).filter(b=>b.id!==a);H(z(b),c)}function Q(a=(0,l.aY)()){return G(A(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function R(a,b,c=(0,l.aY)()){let d=Date.now(),e=[...Q(c)];for(let c of a){let a=e.findIndex(a=>a.id===c.id),f=c.path?.startsWith("generatedDocuments/assets/")||"generated"===c.status||"prompt_ready"===c.status?"generated":"knowledge_base",h={...c,name:g.basename(c.path||c.url||c.id),source:f,indexed:a>=0&&e[a].indexed,usedByDocumentIds:a>=0?[...new Set([...e[a].usedByDocumentIds,b])]:[b],createdAt:a>=0?e[a].createdAt:d,updatedAt:d};a>=0?e[a]={...e[a],...h}:e.push(h)}return H(A(c),e),e}function S(a,b=(0,l.aY)()){let c=a.editedMarkdown||a.markdown;if(!c?.trim())return null;let d=`generatedDocuments/assets/${a.title.replace(/[\\/:*?"<>|]/gu,"_").slice(0,120)||"generated-document"}-${a.id}.md`,f=g.join(y(b),d.replace(/^generatedDocuments\//u,""));e.mkdirSync(g.dirname(f),{recursive:!0}),e.writeFileSync(f,c,"utf8");let h={id:`document-${a.id}`,type:"file",role:"generated",path:d,status:"generated",message:"模板运行生成的 Markdown 文档,仅登记到生成资源,不进入知识库"};return R([h],a.id,b).find(a=>a.id===h.id)||null}function T(a,b=(0,l.aY)()){return Q(b).find(b=>b.id===a)||null}function U(a,b=(0,l.aY)()){let c=T(a,b);if(!c)return!1;let d=F(c,b);if(d&&d.startsWith(y(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return H(A(b),Q(b).filter(b=>b.id!==a)),!0}function V(a,b,c=(0,l.aY)()){let d=T(a,c);if(!d)return null;let f=F(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function W(a){let b=Math.max(4,Math.floor(Number(process.env.DOCUMENT_PERSIST_EVIDENCE_MAX_ITEMS??10))),c=Math.max(300,Math.floor(Number(process.env.DOCUMENT_PERSIST_EVIDENCE_ITEM_CHARS??900)));return{...a,evidence:(a.evidence||[]).slice(0,b).map(a=>({...a,content:"string"==typeof a.content?a.content.replace(/\s+/gu," ").slice(0,c):""}))}}function X(a){let b=[...a.executionStages||a.draft?.executionStages||[]].reverse().find(a=>a.message||a.subtitle||a.roleId),c=a.partialChapters||s(a.checkpointChapters||a.draft?.checkpointChapters||a.draft?.chapters),d=a.draft?.validationIssues||[],e=a.draft?.exportGate?a.draft.exportGate.blockingIssues?.length??0:d.filter(a=>"blocker"===a.severity||"error"===a.level).length,f=d.filter(a=>"warning"===a.severity||"warning"===a.level).length||a.warningIssues?.length||0,g=d.filter(a=>"suggestion"===a.severity||"info"===a.level).length;return{id:a.id,taskId:a.taskId,templateId:a.templateId,templateName:a.templateName,templateVersion:a.templateVersion,title:a.title,requirement:a.requirement,projectRoot:a.projectRoot,projectId:a.projectId,knowledgeBasePath:a.knowledgeBasePath,status:a.status,createdAt:a.createdAt,updatedAt:a.updatedAt,completedAt:a.completedAt,elapsedMs:a.completedAt?a.completedAt-a.createdAt:a.updatedAt-a.createdAt,error:a.error,warningIssues:(a.warningIssues||[]).slice(0,12),warningCount:f,blockerCount:e,suggestionCount:g,wordCount:(0,m.V7)(a.editedMarkdown||a.markdown||a.draft?.markdown||""),chapterCount:c?.length||a.draft?.chapters?.length||0,completedChapterCount:(c||[]).filter(a=>"completed"===a.status).length,latestStage:b?.subtitle||b?.roleName||b?.roleId,latestMessage:b?.message,assets:(a.assets||[]).slice(0,8),partialChapters:c}}function Y(a){let b=a.draft?{...a.draft,chapters:a.draft.chapters?.map(W),checkpointChapters:a.draft.checkpointChapters?.map(W)}:a.draft;return{...a,draft:b,checkpointChapters:a.checkpointChapters?.map(W)}}function Z(a,b){let c=L(a.documentId,b);return c&&"generating"===c.status?{taskId:a.id,documentId:a.documentId,record:c}:null}function $(a,b){(0,o.Qf)(a,{id:b.taskId,type:"document",title:b.title,stage:"processing"===b.status?"generating":"error"===b.status?"error":"done",status:b.status,percent:b.percent,message:b.message,error:b.error,details:(b.stages||[]).filter(a=>"role_binding"===a.type||"runtime-prompt-rules"===a.roleId||"document-readiness"===a.roleId||"failed"===a.status).flatMap(a=>[`${a.subtitle||a.roleName||a.roleId}:${a.message||a.status}`,...(a.details||[]).slice(0,8).map(a=>` - ${a}`)]).slice(0,80)})}function _(a,b=(0,l.aY)()){let c,e=g.resolve(b),f=(0,k.computeProjectId)(e),o=Date.now(),t=a.resumeDocumentId?L(a.resumeDocumentId,e):null;if(t){let a=I(t.id),b=a?Z(a,e):null;if(b)return b}if(!t)for(let b of u.values()){let c=Z(b,e);if(c&&c.record.templateId===a.templateId&&c.record.projectRoot===e)return c}let v=Math.max(1,Number(process.env.DOCUMENT_MAX_CONCURRENT_GENERATIONS??2));if(u.size>=v)throw Error(`当前已有 ${u.size} 个文档生成任务在运行(上限 ${v}),请等待完成或中止后再运行`);let w=t?.id||`doc-${o}-${d.randomBytes(4).toString("hex")}`,x=`task-${o}-${d.randomBytes(4).toString("hex")}`,y=t?{...t,taskId:x,status:"generating",error:void 0,completedAt:void 0,executionStages:[{type:"validation",roleId:"resume-generation",status:"running",message:"已重新进入生成流程;仅复用通过当前工作流版本、项目、模板、需求和导出门禁校验的章节,其余章节重新生成"}],partialChapters:void 0,checkpointChapters:void 0,draft:void 0,warningIssues:void 0,updatedAt:o}:{id:w,taskId:x,templateId:a.templateId,templateVersion:(0,h.QJx)(a.templateId)?.version,title:"生成中",requirement:a.requirement||"",maxEvidencePerChapter:a.maxEvidencePerChapter,projectRoot:e,projectId:f,knowledgeBasePath:(0,l.NW)(e),markdown:"",status:"generating",assets:[],createdAt:o,updatedAt:o};M(y,e),$(e,{taskId:x,title:`生成 ${y.title}`,status:"processing",percent:1,message:"文档生成任务已进入后台队列",stages:y.executionStages});let z=new AbortController,A={},B=function(a,b,c){if(!a)return[];let d=(0,h.QJx)(b.templateId),e=a.reviewMetadata?.workflowVersion?.version||a.draft?.reviewMetadata?.workflowVersion?.version,f=a.draft?.exportGate?.passed===!0,g=a.templateId===b.templateId&&(!d||!a.templateVersion||a.templateVersion===d.version),i=a.projectRoot===c&&a.projectId===(0,k.computeProjectId)(c),l=(a.requirement||"")===(b.requirement||"");if(!g||!i||!l||e!==j.x.version||!f)return[];let m=new Set((a.draft?.partialChapters||a.partialChapters||[]).filter(a=>"completed"===a.status).map(a=>a.id));return r(a.draft?.chapters,a.checkpointChapters).filter(a=>m.has(a.id)&&!!a.content?.trim()&&!/WRITER_MISSING_SECTION|Writer 未完成/u.test(a.content))}(t,a,e),C=null;if(0===B.length&&"0"!==process.env.DOCUMENT_INHERIT_PREVIOUS){let b=K(e).find(b=>("completed"===b.status||"completed_with_issues"===b.status)&&b.id!==(t?.id||w)&&(0,n.BB)(b,a));if(b){let a=L(b.id,e);if(C=a?(0,n._D)(a):null){let a=L(w,e);a&&"generating"===a.status&&M({...a,executionStages:[...a.executionStages||[],{type:"validation",roleId:"previous-version-inheritance",status:"success",message:`版本继承:提取上一版《${C.versionTitle}》结构 ${C.structureLines.length} 项、关键口径 ${C.factLines.length} 条、已知问题 ${C.issueLines.length} 项作为生成参照`}]},e)}}}let D="",E=0,F="",G=Math.max(1e3,Math.min(15e3,Number(process.env.DOCUMENT_PROGRESS_SAVE_INTERVAL_MS??5e3))),H=Math.max(3e4,Math.min(3e5,Number(process.env.DOCUMENT_PROGRESS_HEARTBEAT_SAVE_INTERVAL_MS??6e4))),J=(0,h.OXS)({...a,projectRoot:e,resumeChapters:B,previousSignals:C||void 0,signal:z.signal,onProgress:(a,b)=>{try{A.current&&(A.current.lastProgressAt=Date.now()),c=a,b?.chapters?.length&&(D=b.chapters.map(a=>`# ${a.title}
102
+ ${a.join("\n\n")}`)}}}else f=bt?await P(()=>(0,aJ.X6)(cJ,`chapter-section-draft:${d.id}`,()=>(0,aM.N1)({template:E,chapter:d,evidence:_,missingFacts:aa,promptTexts:a2,projectContext:cC(d),skeletonProjectContext:ca,requirement:a.requirement,roleContext:am,targetWords:bk,maxWords:be,forbidDrawingImages:!1,factCoverageContext:aT,projectRoot:C,modelName:(0,y.$y)()?.model.name,materialContextHash:(0,A.c6)({materialFilePaths:ad,promptTexts:ao}),allowPartialResult:!1,compactProjectContext:!0,scopedProjectContext:cB,blueprintDataText:c2,blueprintSliceText:bg,sectionEvidenceProvider:aD,onSectionProgress:bE,diagnostics:cJ,signal:a.signal}))):await P(()=>(0,aJ.X6)(cJ,`chapter-draft:${d.id}`,()=>(0,aM.eu)(E,d,_,aa,a2,cC(d),a.requirement,am,{forbidDrawingImages:!1,minWords:bi,targetWords:bi,maxWords:be,maxTokens:bj,factCoverageContext:aT,blueprintDataText:c2,blueprintSliceText:bg,signal:a.signal,diagnostics:cJ,supplementEvidenceProvider:aE,evidenceFloorChars:cI.evidenceFloorChars,evidenceCeilingChars:cI.evidenceCeilingChars})));if(f||(cJ.llm.lastError=cJ.llm.lastError||"全部成稿路径未返回有效正文"),f&&bf&&b){let a=function(a,b,c){let d=[],e=[],f=a,g=b.subSections.flatMap(a=>a.requiredParams.filter(a=>"must_cite"===a.mode&&a.strict)),h=new Set;for(let a of g)if(!h.has(a.path)){if(h.add(a.path),"data.contract.total_days"===a.path){if(c.contract.totalDays<=0)continue;let a=/(?:总工期|施工工期|合同工期|工期)(?:为|约|共计|控制)?[^\n。;;]{0,20}?(\d+(?:\.\d+)?)\s*(?:日历)?天/gu,b=!1;f=f.replace(a,(a,e)=>{b=!0;let f=Number(e);return f===c.contract.totalDays||f<=0?a:(d.push({anchor:"总工期",from:`${f}天`,to:`${c.contract.totalDays}天`}),a.replace(e,String(c.contract.totalDays)))}),b||e.push(`总工期 ${c.contract.totalDays} 日历天`);continue}if(a.path.startsWith("data.quantities.")){let b=a.path.slice(16),g=c.quantities[b];if(!g||g.value<=0)continue;let h=g.unit||"",i=RegExp(`${bv(b)}[^\\n。;;]{0,40}?(\\d+(?:\\.\\d+)?)\\s*${h?bv(h):""}`,"gu"),j=!1;f=f.replace(i,(a,c)=>{j=!0;let e=Number(c);return e===g.value||e<=0?a:(d.push({anchor:b,from:`${e}${h}`,to:`${g.value}${h}`}),a.replace(c,String(g.value)))}),j||e.push(`${b} ${g.value}${h}`)}}return{markdown:f,fixed:d,missing:e}}(f,bf,b.data);a.fixed.length>0?(f=a.markdown,cJ.llm.lastInfo=`蓝图引用对齐:${d.title} 回填 ${a.fixed.length} 处(${a.fixed.map(a=>`${a.anchor} ${a.from}→${a.to}`).join("、")})${a.missing.length?`;未引用缺口 ${a.missing.length} 项:${a.missing.join("、")}`:""}`):a.missing.length>0&&(cJ.llm.lastInfo=`蓝图引用缺口观测:${d.title} 未在正文引用 ${a.missing.length} 项 must_cite 参数(${a.missing.slice(0,6).join("、")}${a.missing.length>6?" 等":""}),由跨章一致性审查兑底`)}if((0,A.Te)(a.signal),!f){let a=`${(0,o.GQ)(d.title)} 大模型未返回有效正文,已阻断生成`;throw T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"failed",message:a,details:[`LLM 最近错误:${cJ.llm.lastError||"空响应或超时"}`,`证据条数:${_.length}`],progress:{current:g+1,total:b6.length,label:"章节阻断"}},{subtitle:(0,o.GQ)(d.title),order:g}),J(H),Error(a)}if(!f.trim())throw Error(`${(0,o.GQ)(d.title)} 首次生成失败,未获得可用于定稿的正文`);let j=c&&c.blocks.length>0?c.blocks.map(a=>a.title):(d.sections||[]).filter(Boolean),k=c&&c.blocks.length>0?c.blocks.flatMap(a=>a.subPoints.map(a=>a.title)):[],l=f;j.length>0&&(l=(0,A.Ww)(l,j,3)),k.length>0&&(l=(0,A.Ww)(l,k,4)),e=dk(l,d),e=await db(e,bL)}let bH=await aO({chapter:d,content:e,evidence:_}),bI=(0,r.V7)(e),bK=(0,q.r4)(e),bO=c&&c.blocks.length>0?c.blocks.map(a=>a.title):(d.sections||[]).filter(Boolean),bP=bO.length>0?bO:bK.length>0?bK:[],bR=(0,s.qK)(e,[{title:d.title,content:e,sections:bP}]).map(a=>a.message),bT=bH.slice(0,6).map(a=>`小节事实密度需优化:${a}`),bY=[...bR,...bT],bZ=function(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))||c.some(a=>/空小节|缺少规划小节/u.test(a))?"failed":"success"}(bI,0,bY);return f=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:bZ,message:(0,aI.AQ)(`${(0,o.GQ)(d.title)} 已由大模型成稿:当前 ${bI} 字;章节预算约 ${bd.budgetTarget} 字,本轮目标约 ${bd.roundTarget} 字${bY.length?`;待优化:${bY.slice(0,8).join("、")}`:""}`,h),details:[`本轮完成率:${Math.round(bI/Math.max(1,bd.roundTarget)*100)}%`,`结构目标约 ${bd.structureTarget} 字`,...ap,`二级小节:${bP.length} 个`],progress:{current:g+1,total:b6.length,label:bY.length?"章节已生成":"章节达标"}},{subtitle:(0,o.GQ)(d.title),order:g}),bx[g]=f,async()=>{let a={id:d.id,title:d.title,content:e,evidence:_,missingFacts:aa,sections:bP,tablePlans:d.tablePlans||[]};bw[g]=a,H=bw.filter(a=>!!a),J(H)}}catch(h){if(a.signal?.aborted)throw h;let b=cJ.llm.lastError,c=`failures=${cJ.llm.failures} retries=${cJ.llm.retries} reasoningTokens=${cJ.llm.reasoningTokens||0}`;console.error(`[gen] chapter ${d.title} failed:`,h,b?`| LLM lastError: ${b}`:"| LLM lastError: (none)","|",c);let e=`${d.title}:${h instanceof Error?h.message:"生成失败"}`;bq.push(e),f=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,o.GQ)(d.title)} 生成失败:${e}`,details:[`LLM 最近错误:${b||"无记录"}`,`LLM 调用失败 ${cJ.llm.failures} 次、重试 ${cJ.llm.retries} 次`]},{subtitle:(0,o.GQ)(d.title),order:g}),bx[g]=f}f&&(T[i]=f),J(H)}))))e&&cY.push(cX.run(e))}await Promise.all(cY),cJ.metrics.push({name:"phase:draft",startedAt:c3,endedAt:Date.now(),durationMs:Date.now()-c3});let c4=Date.now(),c5=bw.filter(a=>!!a);br.push(...bx.filter(a=>!!a));let c6=[],c7=!1;if(cH.enableGlobalReview){let c=await eo({globalReviewSamplingRate:cH.globalReviewSamplingRate,chapterDraftsFinal:c5,template:E,reviewPromptTexts:aS,repairPromptTexts:aT,requirement:a.requirement,signal:a.signal,projectContext:ca,generationDiagnostics:cJ,preliminaryFactsModel:bU,scopeConflicts:bX.scopeConflicts,progressStages:T,emitProgress:J,withProgressHeartbeat:P,blueprintData:b?.validation.passed?b.data:void 0});c6=c.issues,c7=c.dedupRan}else await en({chapterDraftsFinal:c5,template:E,repairPromptTexts:aT,projectContext:ca,requirement:a.requirement,signal:a.signal,generationDiagnostics:cJ,progressStages:T,emitProgress:J,withProgressHeartbeat:P});let{tableFixApplied:c8}=await el({effectiveChapters:b6,chapterDraftsFinal:c5,template:E,repairPromptTexts:aT,requirement:a.requirement,signal:a.signal,generationDiagnostics:cJ,progressStages:T,emitProgress:J,withProgressHeartbeat:P});return(c8||!c7)&&(c6=await ek({chapterDraftsFinal:c5,globalConsistencyIssues:c6,progressStages:T,emitProgress:J})),!function(a){let{generationDiagnostics:b,progressStages:c,chapterDraftsFinal:d,emitProgress:e}=a,f=b.evidence,g=b.llm,h=(0,v.Bd)();b.semantic=h;let i=h.embedCacheHits+h.embedCacheMisses,j=i>0?Math.round(1e4*h.embedCacheHits/i)/100:null,k=(g.promptCacheHitTokens||0)+(g.promptCacheMissTokens||0),l=k>0?Math.round(1e4*(g.promptCacheHitTokens||0)/k)/100:null,m=g.layerChars,n=m?m.l0+m.l1+m.l2+m.l3:0,o=a=>n>0?Math.round(1e4*a/n)/100:0,p=m&&n>0?`上下文分层:L0 system 恒定 ${m.l0} 字(${o(m.l0)}%)、L1 任务级 ${m.l1} 字(${o(m.l1)}%)、L2 章级 ${m.l2} 字(${o(m.l2)}%)、L3 小节级 ${m.l3} 字(${o(m.l3)}%)`:"上下文分层:本次生成未采集 L0-L3 分层统计";(0,aI.fx)(c,(0,aI.X5)({type:"validation",roleId:"budget-trim-report",status:"success",message:`预算裁剪报告:证据 ${f.raw} 条 → 采用 ${f.used} 条(噪声过滤 ${f.filteredNoise} 条、预算兜底裁剪 ${f.budgetDropped} 条),证据上下文 ${f.contextChars} 字`,details:[`证据质量:平均噪声分 ${f.avgNoiseScore},平均事实密度 ${f.avgFactDensity}`,`证据分层(T0 关键事实/T1 高相关片段/T2 目录索引):T0 注入 ${f.t0Chars||0} 字、T1 注入 ${f.t1Chars||0} 字、T2 索引 ${f.t2Lines||0} 行、目录省略 ${f.omittedChars||0} 字——A2 块级增量压缩后 T1 应显著低于 T0+T2`,`检索:${f.searchQueries} 组查询,耗时 ${Math.round(f.searchMs/1e3)} 秒`,`LLM:${g.calls} 次调用,失败 ${g.failures} 次,重试 ${g.retries} 次,schema 校验失败 ${g.schemaFailures} 次`,`LLM 上下文输入:${g.inputChars||0} 字符(system+user)${g.unlayeredChars?`(其中未分层调用 ${g.unlayeredChars} 字符,占比 ${Math.round(g.unlayeredChars/(g.inputChars||1)*1e4)/100}%)`:""},输入 ${g.inputTokens||0} token / 输出 ${g.outputTokens||0} token`,p,null===l?"上下文缓存:提供商未返回 prefix cache 指标(prompt_cache_hit/miss_tokens),无法观测命中率":`上下文缓存:命中 ${g.promptCacheHitTokens} token / 未命中 ${g.promptCacheMissTokens} token(命中率 ${l}%)——未命中占比高说明固定前缀未收敛,system/user 分离(A5)后应显著上升`,`推理 token:${g.reasoningTokens?`${g.reasoningTokens} token(思考未完全关闭,disableThinking 未生效风险)`:"0(思考已关闭)"}`,null===j?"bge 嵌入缓存:本次生成无嵌入调用":`bge 嵌入缓存:命中 ${h.embedCacheHits} 条 / 未命中 ${h.embedCacheMisses} 条(命中率 ${j}%,全局 LRU 容量 ${process.env.DOCUMENT_EMBED_CACHE_SIZE||2e3})`,"防爆兜底类软限制(保留并逐项记录裁剪量):selectEvidenceByBudget 的 maxItems/maxChars、uniqueEvidence 噪声过滤、evidenceBundlePrompt 的 maxChars、块级证据 top-k 截断、块级 facts 截断","语义取舍类软限制(已迁移本地语义模型):evaluationTexts 词面过滤→条目对象化、criterionFeatures 二字滑窗→bge-small 余弦、章节证据字符硬截→语义排序取 top-k","LLM 输出侧:schema 校验(截断位置可诊断)、空响应重试提示词收敛、块成稿 maxTokens 按目标字数 1:1.2(不走 thinking \xd76 放大)"]},{subtitle:"预算裁剪审计"})),e(d)}({generationDiagnostics:cJ,progressStages:T,chapterDraftsFinal:c5,emitProgress:J}),cJ.metrics.push({name:"phase:global-review",startedAt:c4,endedAt:Date.now(),durationMs:Date.now()-c4}),(0,aJ.X6)(cJ,"phase:finalize",()=>ed({chapterDrafts:c5,chapterDraftsByOrder:bw,chapterGenerationStagesByOrder:bx,chapterGenerationStages:br,effectiveChapters:b6,template:E,allEvidence:a4,projectMaterialScope:a0,progressStages:T,documentSpec:ar,projectMaterialProfile:af,projectMaterialSummary:ap,domainProfile:au,documentBudget:cD,promptTexts:aQ,reviewPromptTexts:aS,input:a,generationStrategy:cH,generationDiagnostics:cJ,chapterScopedContext:cC,promptBindings:ac,promptDocumentRules:aG,projectUnderstanding:ag,projectContext:ca,projectRoot:C,projectId:D,readiness:av,factExtractionPromptTexts:aR,blueprintData:b?.validation.passed?b.data:void 0,hasExplicitOutline:ao,missingItems:bp,retrievalCoverageReports:a5,failedChapterMessages:bq,webResearchReport:a6,indexHealth:aY,promptPlan:Y,globalConsistencyIssues:c6,scopeConflicts:bX.scopeConflicts,writingTaskBrief:cz,evaluationCriteriaItems:b_.map(a=>a.title).filter(Boolean),tenderRequirements:ci,requirementsSimilarity:cu,factTokenScopeClassifier:cw,professionalDepthClassifier:cx,agentWorkflow:bV,emitProgress:J,withProgressHeartbeat:P}))}},48661:(a,b,c)=>{c.d(b,{BH:()=>P,Gl:()=>x,JU:()=>T,Jz:()=>U,M$:()=>J,Oy:()=>D,QG:()=>O,QH:()=>C,SE:()=>E,YL:()=>$,a6:()=>M,r:()=>N,v7:()=>K,yE:()=>S});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(31557),i=c(23760),j=c(87942),k=c(19898),l=c(44533),m=c(78217),n=c(37095);function o(a,b){return a?.map(a=>"running"===a.status?{...a,status:"failed",message:b}:a)}function p(a){return a.title&&"生成中"!==a.title?a.title:`${a.templateName||"文档"}生成失败`}function q(...a){let b=new Map;for(let c of a)for(let a of c||[])a.id&&a.content?.trim()&&b.set(a.id,a);return[...b.values()]}function r(a){return(a||[]).map(a=>({id:a.id,title:a.title,chars:(0,m.V7)(a.content),status:a.inProgress?"in_progress":a.content.trim().length>0?"completed":"failed",updatedAt:Date.now(),timedOut:a.timedOut,elapsedMs:a.elapsedMs}))}let s=globalThis,t=s.__generatedDocumentTasks??=new Map,u=Math.max(36e5,Number(process.env.DOCUMENT_ABANDONED_RECORD_STALE_MS??864e5)),v=s.__generatedDocumentProcessStartedAt??=Date.now(),w=Math.max(3e4,Number(process.env.DOCUMENT_RECENT_UPDATE_GRACE_MS??6e4));function x(a=(0,l.aY)()){let b=g.join(f.homedir(),".customize-agent","projects",function(a=(0,l.aY)()){return(0,k.computeProjectId)(g.resolve(a))}(a),"generatedDocuments");return e.mkdirSync(g.join(b,"drafts"),{recursive:!0}),e.mkdirSync(g.join(b,"assets"),{recursive:!0}),b}function y(a=(0,l.aY)()){return g.join(x(a),"index.json")}function z(a=(0,l.aY)()){return g.join(x(a),"assets.json")}function A(a,b=(0,l.aY)()){return g.join(x(b),"drafts",`${a}.json`)}function B(a,b=(0,l.aY)()){return g.join(x(b),"drafts",`${a}.meta.json`)}function C(a,b=(0,l.aY)()){let c=F(B(a,b),null);return c&&Number.isFinite(c.updatedAt)?c:null}function D(a){return!(!a||"generating"!==a.status||Date.now()-a.updatedAt<w)&&(a.updatedAt<v||Date.now()-a.updatedAt>=u)}function E(a,b=(0,l.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(x(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join((0,l.NW)(b),a.path):null}function F(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function G(a,b){e.mkdirSync(g.dirname(a),{recursive:!0});let c=`${a}.${process.pid}.${Date.now()}.tmp`;e.writeFileSync(c,JSON.stringify(b,null,2)),e.renameSync(c,a)}function H(a){for(let b of t.values())if(b.documentId===a)return b;return null}function I(a,b=(0,l.aY)()){if("generating"!==a.status||H(a.id)||Date.now()-a.updatedAt<w)return a;let c=a.updatedAt<v?0:u;if(Date.now()-a.updatedAt<c)return a;let d="生成任务已中断,请点击继续生成或重新生成",e=a.checkpointChapters?.length?"warning":"failed",f={...a,title:p(a),status:e,error:a.error||d,executionStages:o(a.executionStages,d),completedAt:Date.now(),warningIssues:a.checkpointChapters?.length?[...a.warningIssues||[],d]:a.warningIssues};return a.taskId&&Z(b,{taskId:a.taskId,title:`生成 ${f.title}`,status:"warning"===e?"warning":"error",percent:100,message:d,stages:f.executionStages,error:d}),f}function J(a=(0,l.aY)()){return F(y(a),[]).map(b=>{if("generating"!==b.status)return b;let c=F(A(b.id,a),null);if(!c)return b;let d=I(c,a);return d!==c?W(L(d,a,{preserveUpdatedAt:!0})):W(c)}).sort((a,b)=>(b.createdAt||b.updatedAt)-(a.createdAt||a.updatedAt))}function K(a,b=(0,l.aY)()){let c=F(A(a,b),null);if(!c)return null;let d=I(c,b);return function(a,b=(0,l.aY)()){if("generating"===a.status||!(a.editedMarkdown||a.markdown)?.trim())return a;let c=`document-${a.id}`;if(a.assets?.some(a=>a.id===c&&a.path))return a;let d=R(a,b);return d?L({...a,assets:[d,...(a.assets||[]).filter(a=>a.id!==d.id)]},b):a}(d!==c?L(d,b,{preserveUpdatedAt:!0}):d,b)}function L(a,b=(0,l.aY)(),c){let d=Date.now(),e=X({...a,updatedAt:c?.preserveUpdatedAt?a.updatedAt:d});G(A(e.id,b),e),G(B(e.id,b),{updatedAt:e.updatedAt,status:e.status,completedAt:e.completedAt});let f=F(y(b),[]).filter(a=>a.id!==e.id);return f.unshift(W(e)),G(y(b),f),e}function M(a,b,c=(0,l.aY)()){let d=K(a,c);return d?L({...d,...b,id:a},c):null}function N(a,b=(0,l.aY)()){let c=K(a,b);if(!c)return null;if("generating"!==c.status)return c;for(let[b,c]of t)c.documentId===a&&(c.status="aborted",c.controller.abort(),t.delete(b));let d="用户中止",e=o(c.executionStages,d),f=L({...c,status:"aborted",error:d,executionStages:e,completedAt:Date.now()},b);return f.taskId&&Z(b,{taskId:f.taskId,title:`生成 ${f.title}`,status:"warning",percent:100,message:d,stages:e,error:d}),f}function O(a,b=(0,l.aY)()){try{e.rmSync(A(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}let c=F(y(b),[]).filter(b=>b.id!==a);G(y(b),c)}function P(a=(0,l.aY)()){return F(z(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function Q(a,b,c=(0,l.aY)()){let d=Date.now(),e=[...P(c)];for(let c of a){let a=e.findIndex(a=>a.id===c.id),f=c.path?.startsWith("generatedDocuments/assets/")||"generated"===c.status||"prompt_ready"===c.status?"generated":"knowledge_base",h={...c,name:g.basename(c.path||c.url||c.id),source:f,indexed:a>=0&&e[a].indexed,usedByDocumentIds:a>=0?[...new Set([...e[a].usedByDocumentIds,b])]:[b],createdAt:a>=0?e[a].createdAt:d,updatedAt:d};a>=0?e[a]={...e[a],...h}:e.push(h)}return G(z(c),e),e}function R(a,b=(0,l.aY)()){let c=a.editedMarkdown||a.markdown;if(!c?.trim())return null;let d=`generatedDocuments/assets/${a.title.replace(/[\\/:*?"<>|]/gu,"_").slice(0,120)||"generated-document"}-${a.id}.md`,f=g.join(x(b),d.replace(/^generatedDocuments\//u,""));e.mkdirSync(g.dirname(f),{recursive:!0}),e.writeFileSync(f,c,"utf8");let h={id:`document-${a.id}`,type:"file",role:"generated",path:d,status:"generated",message:"模板运行生成的 Markdown 文档,仅登记到生成资源,不进入知识库"};return Q([h],a.id,b).find(a=>a.id===h.id)||null}function S(a,b=(0,l.aY)()){return P(b).find(b=>b.id===a)||null}function T(a,b=(0,l.aY)()){let c=S(a,b);if(!c)return!1;let d=E(c,b);if(d&&d.startsWith(x(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return G(z(b),P(b).filter(b=>b.id!==a)),!0}function U(a,b,c=(0,l.aY)()){let d=S(a,c);if(!d)return null;let f=E(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function V(a){let b=Math.max(4,Math.floor(Number(process.env.DOCUMENT_PERSIST_EVIDENCE_MAX_ITEMS??10))),c=Math.max(300,Math.floor(Number(process.env.DOCUMENT_PERSIST_EVIDENCE_ITEM_CHARS??900)));return{...a,evidence:(a.evidence||[]).slice(0,b).map(a=>({...a,content:"string"==typeof a.content?a.content.replace(/\s+/gu," ").slice(0,c):""}))}}function W(a){let b=[...a.executionStages||a.draft?.executionStages||[]].reverse().find(a=>a.message||a.subtitle||a.roleId),c=a.partialChapters||r(a.checkpointChapters||a.draft?.checkpointChapters||a.draft?.chapters),d=a.draft?.validationIssues||[],e=a.draft?.exportGate?a.draft.exportGate.blockingIssues?.length??0:d.filter(a=>"blocker"===a.severity||"error"===a.level).length,f=d.filter(a=>"warning"===a.severity||"warning"===a.level).length||a.warningIssues?.length||0,g=d.filter(a=>"suggestion"===a.severity||"info"===a.level).length;return{id:a.id,taskId:a.taskId,templateId:a.templateId,templateName:a.templateName,templateVersion:a.templateVersion,title:a.title,requirement:a.requirement,projectRoot:a.projectRoot,projectId:a.projectId,knowledgeBasePath:a.knowledgeBasePath,status:a.status,createdAt:a.createdAt,updatedAt:a.updatedAt,completedAt:a.completedAt,elapsedMs:a.completedAt?a.completedAt-a.createdAt:a.updatedAt-a.createdAt,error:a.error,warningIssues:(a.warningIssues||[]).slice(0,12),warningCount:f,blockerCount:e,suggestionCount:g,wordCount:(0,m.V7)(a.editedMarkdown||a.markdown||a.draft?.markdown||""),chapterCount:c?.length||a.draft?.chapters?.length||0,completedChapterCount:(c||[]).filter(a=>"completed"===a.status).length,latestStage:b?.subtitle||b?.roleName||b?.roleId,latestMessage:b?.message,assets:(a.assets||[]).slice(0,8),partialChapters:c}}function X(a){let b=a.draft?{...a.draft,chapters:a.draft.chapters?.map(V),checkpointChapters:a.draft.checkpointChapters?.map(V)}:a.draft;return{...a,draft:b,checkpointChapters:a.checkpointChapters?.map(V)}}function Y(a,b){let c=K(a.documentId,b);return c&&"generating"===c.status?{taskId:a.id,documentId:a.documentId,record:c}:null}function Z(a,b){(0,n.Qf)(a,{id:b.taskId,type:"document",title:b.title,stage:"processing"===b.status?"generating":"error"===b.status?"error":"done",status:b.status,percent:b.percent,message:b.message,error:b.error,details:(b.stages||[]).filter(a=>"role_binding"===a.type||"runtime-prompt-rules"===a.roleId||"document-readiness"===a.roleId||"failed"===a.status).flatMap(a=>[`${a.subtitle||a.roleName||a.roleId}:${a.message||a.status}`,...(a.details||[]).slice(0,8).map(a=>` - ${a}`)]).slice(0,80)})}function $(a,b=(0,l.aY)()){let c,e=g.resolve(b),f=(0,k.computeProjectId)(e),n=Date.now(),s=a.resumeDocumentId?K(a.resumeDocumentId,e):null;if(s){let a=H(s.id),b=a?Y(a,e):null;if(b)return b}if(!s)for(let b of t.values()){let c=Y(b,e);if(c&&c.record.templateId===a.templateId&&c.record.projectRoot===e)return c}let u=Math.max(1,Number(process.env.DOCUMENT_MAX_CONCURRENT_GENERATIONS??2));if(t.size>=u)throw Error(`当前已有 ${t.size} 个文档生成任务在运行(上限 ${u}),请等待完成或中止后再运行`);let v=s?.id||`doc-${n}-${d.randomBytes(4).toString("hex")}`,w=`task-${n}-${d.randomBytes(4).toString("hex")}`,x=s?{...s,taskId:w,status:"generating",error:void 0,completedAt:void 0,executionStages:[{type:"validation",roleId:"resume-generation",status:"running",message:"已重新进入生成流程;仅复用通过当前工作流版本、项目、模板、需求和导出门禁校验的章节,其余章节重新生成"}],partialChapters:void 0,checkpointChapters:void 0,draft:void 0,warningIssues:void 0,updatedAt:n}:{id:v,taskId:w,templateId:a.templateId,templateVersion:(0,h.QJx)(a.templateId)?.version,title:"生成中",requirement:a.requirement||"",maxEvidencePerChapter:a.maxEvidencePerChapter,projectRoot:e,projectId:f,knowledgeBasePath:(0,l.NW)(e),markdown:"",status:"generating",assets:[],createdAt:n,updatedAt:n};L(x,e),Z(e,{taskId:w,title:`生成 ${x.title}`,status:"processing",percent:1,message:"文档生成任务已进入后台队列",stages:x.executionStages});let y=new AbortController,z={},A=function(a,b,c){if(!a)return[];let d=(0,h.QJx)(b.templateId),e=a.reviewMetadata?.workflowVersion?.version||a.draft?.reviewMetadata?.workflowVersion?.version,f=a.draft?.exportGate?.passed===!0,g=a.templateId===b.templateId&&(!d||!a.templateVersion||a.templateVersion===d.version),i=a.projectRoot===c&&a.projectId===(0,k.computeProjectId)(c),l=(a.requirement||"")===(b.requirement||"");if(!g||!i||!l||e!==j.x.version||!f)return[];let m=new Set((a.draft?.partialChapters||a.partialChapters||[]).filter(a=>"completed"===a.status).map(a=>a.id));return q(a.draft?.chapters,a.checkpointChapters).filter(a=>m.has(a.id)&&!!a.content?.trim()&&!/WRITER_MISSING_SECTION|Writer 未完成/u.test(a.content))}(s,a,e),B="",C=0,D="",E=Math.max(1e3,Math.min(15e3,Number(process.env.DOCUMENT_PROGRESS_SAVE_INTERVAL_MS??5e3))),F=Math.max(3e4,Math.min(3e5,Number(process.env.DOCUMENT_PROGRESS_HEARTBEAT_SAVE_INTERVAL_MS??6e4))),G=(0,h.OXS)({...a,projectRoot:e,resumeChapters:A,signal:y.signal,onProgress:(a,b)=>{try{z.current&&(z.current.lastProgressAt=Date.now()),c=a,b?.chapters?.length&&(B=b.chapters.map(a=>`# ${a.title}
103
103
 
104
- ${a.content}`).join("\n\n"));let d=Date.now(),f=JSON.stringify({stages:a.map(a=>({type:a.type,roleId:a.roleId,status:a.status,message:a.message,progress:a.progress})),checkpoint:b?.chapters?.map(a=>[a.id,a.content.length,a.sections?.length||0])||[]});if(!b?.chapters&&f===F&&d-E<Math.max(G,H))return;let g=L(w,e);if(g&&"generating"===g.status){let c=b?.chapters?r(g.checkpointChapters,b.chapters).map(W):g.checkpointChapters,h=c?.length?c.map(a=>`# ${a.title}
104
+ ${a.content}`).join("\n\n"));let d=Date.now(),f=JSON.stringify({stages:a.map(a=>({type:a.type,roleId:a.roleId,status:a.status,message:a.message,progress:a.progress})),checkpoint:b?.chapters?.map(a=>[a.id,a.content.length,a.sections?.length||0])||[]});if(!b?.chapters&&f===D&&d-C<Math.max(E,F))return;let g=K(v,e);if(g&&"generating"===g.status){let c=b?.chapters?q(g.checkpointChapters,b.chapters).map(V):g.checkpointChapters,h=c?.length?c.map(a=>`# ${a.title}
105
105
 
106
- ${a.content}`).join("\n\n"):g.markdown,i=M(Y({...g,executionStages:a,checkpointChapters:c,partialChapters:b?.chapters?s(c):g.partialChapters,markdown:h,wordCount:h?(0,m.V7)(h):g.wordCount}),e),j=[...a].reverse().find(a=>"running"===a.status)||a[a.length-1];$(e,{taskId:x,title:`生成 ${i.templateName||i.title}`,status:"processing",percent:Math.max(1,Math.min(99,j?.progress?Math.round(j.progress.current/Math.max(1,j.progress.total)*90):30)),message:j?.message||"文档生成中",stages:a}),E=d,F=f,console.log(`[gen] progress saved: ${a.length} stages, checkpoint=${c?.length||0}, doc=${w}`)}}catch(a){console.error("[gen] progress save error:",a)}}}).then(async a=>{A.current&&(A.current.lastProgressAt=Date.now());let b=L(w,e);if(!b||"generating"!==b.status)return b??y;let c=/结构化事实读取不足|正文可能未显式覆盖|仅包含文件类型和占位符|不在本次招标范围内|知识库文件索引失败|暂无可检索内容切片|未抽取到结构化事实|兜底片段|资料抽取诊断|无法直接读取文本内容|占位符|缺乏详细的.*具体尺寸|需结合原文件进一步深化|章节生成存在兜底/u,d=a.markdown||"",f=/^##\s+(?!目录$)(?!附录)(?!第[一二三四五六七八九十百千万\d]+章\s+)/gmu.test(d),g=/(?:第?\d+页|P\.?\s*\d+)/iu.test(d),h=/施工方/u.test(d),j=a.validationIssues.filter(a=>"error"===a.level||"warning"===a.level).map(a=>a.suggestion?`${a.message}:${a.suggestion}`:a.message).filter(a=>!/^\s*[[{]/u.test(a)&&!/"status"\s*:/u.test(a)&&!c.test(a)).filter(a=>!/正文存在非正式章二级标题/u.test(a)||f).filter(a=>!/资料页码|文件页码|页码引用/u.test(a)||g).filter(a=>!/禁止内容|施工方/u.test(a)||h).filter(b=>!a.exportGate.passed||!/目录与正文不一致|表格分隔线位置不规范/u.test(b)),k=(0,i.yw)(a.markdown,a.chapters).filter(a=>"empty"===a.reason);k.length>0&&j.unshift(`小节内容补写未完成:仍有 ${k.length} 个空洞小节,请继续生成或补充资料后重试`),a.exportGate.passed||0!==j.length||j.push("导出门禁未通过:存在未完成的硬阻断检查项");let l=a.exportGate.passed?"completed":(0,m.V7)(d)>=3e3?"completed_with_issues":"failed",n=Y({...b,templateName:a.templateName,templateVersion:a.templateVersion??b.templateVersion,title:a.title,markdown:a.markdown,status:l,draft:a,executionStages:a.executionStages,partialChapters:a.partialChapters,checkpointChapters:a.chapters,reviewMetadata:a.reviewMetadata,promptProvenance:a.promptProvenance??b.promptProvenance,agentWorkflow:a.agentWorkflow,assets:a.assets||[],completedAt:Date.now(),warningIssues:j}),o=S(n,e),p=M({...n,assets:o?[o,...(n.assets||[]).filter(a=>a.id!==o.id)]:n.assets},e);return R(a.assets||[],w,e),$(e,{taskId:x,title:`生成 ${p.title}`,status:"completed"===p.status?"success":"completed_with_issues"===p.status?"warning":"error",percent:100,message:"completed"===p.status?"文档生成完成,已通过导出门禁":"completed_with_issues"===p.status?`文档已生成(带 ${j.length||1} 项待复核问题,可下载后人工完善)`:`文档生成未通过导出门禁,存在 ${j.length||1} 个阻断问题`,stages:a.executionStages,error:"completed"===p.status||"completed_with_issues"===p.status?void 0:j.join(";")}),p}).catch(a=>{let b=L(w,e);if(!b||"generating"!==b.status)return b??y;let d=a instanceof Error?a.message:String(a),f=a instanceof Error&&/用户中止|aborted|abort/i.test(a.message)?"aborted":b.checkpointChapters?.length||D?"warning":"failed",g=D||b.markdown||b.checkpointChapters?.map(a=>`# ${a.title}
106
+ ${a.content}`).join("\n\n"):g.markdown,i=L(X({...g,executionStages:a,checkpointChapters:c,partialChapters:b?.chapters?r(c):g.partialChapters,markdown:h,wordCount:h?(0,m.V7)(h):g.wordCount}),e),j=[...a].reverse().find(a=>"running"===a.status)||a[a.length-1];Z(e,{taskId:w,title:`生成 ${i.templateName||i.title}`,status:"processing",percent:Math.max(1,Math.min(99,j?.progress?Math.round(j.progress.current/Math.max(1,j.progress.total)*90):30)),message:j?.message||"文档生成中",stages:a}),C=d,D=f,console.log(`[gen] progress saved: ${a.length} stages, checkpoint=${c?.length||0}, doc=${v}`)}}catch(a){console.error("[gen] progress save error:",a)}}}).then(async a=>{z.current&&(z.current.lastProgressAt=Date.now());let b=K(v,e);if(!b||"generating"!==b.status)return b??x;let c=/结构化事实读取不足|正文可能未显式覆盖|仅包含文件类型和占位符|不在本次招标范围内|知识库文件索引失败|暂无可检索内容切片|未抽取到结构化事实|兜底片段|资料抽取诊断|无法直接读取文本内容|占位符|缺乏详细的.*具体尺寸|需结合原文件进一步深化|章节生成存在兜底/u,d=a.markdown||"",f=/^##\s+(?!目录$)(?!附录)(?!第[一二三四五六七八九十百千万\d]+章\s+)/gmu.test(d),g=/(?:第?\d+页|P\.?\s*\d+)/iu.test(d),h=/施工方/u.test(d),j=a.validationIssues.filter(a=>"error"===a.level||"warning"===a.level).map(a=>a.suggestion?`${a.message}:${a.suggestion}`:a.message).filter(a=>!/^\s*[[{]/u.test(a)&&!/"status"\s*:/u.test(a)&&!c.test(a)).filter(a=>!/正文存在非正式章二级标题/u.test(a)||f).filter(a=>!/资料页码|文件页码|页码引用/u.test(a)||g).filter(a=>!/禁止内容|施工方/u.test(a)||h).filter(b=>!a.exportGate.passed||!/目录与正文不一致|表格分隔线位置不规范/u.test(b)),k=(0,i.yw)(a.markdown,a.chapters).filter(a=>"empty"===a.reason);k.length>0&&j.unshift(`小节内容补写未完成:仍有 ${k.length} 个空洞小节,请继续生成或补充资料后重试`),a.exportGate.passed||0!==j.length||j.push("导出门禁未通过:存在未完成的硬阻断检查项");let l=a.exportGate.passed?"completed":(0,m.V7)(d)>=3e3?"completed_with_issues":"failed",n=X({...b,templateName:a.templateName,templateVersion:a.templateVersion??b.templateVersion,title:a.title,markdown:a.markdown,status:l,draft:a,executionStages:a.executionStages,partialChapters:a.partialChapters,checkpointChapters:a.chapters,reviewMetadata:a.reviewMetadata,promptProvenance:a.promptProvenance??b.promptProvenance,agentWorkflow:a.agentWorkflow,assets:a.assets||[],completedAt:Date.now(),warningIssues:j}),o=R(n,e),p=L({...n,assets:o?[o,...(n.assets||[]).filter(a=>a.id!==o.id)]:n.assets},e);return Q(a.assets||[],v,e),Z(e,{taskId:w,title:`生成 ${p.title}`,status:"completed"===p.status?"success":"completed_with_issues"===p.status?"warning":"error",percent:100,message:"completed"===p.status?"文档生成完成,已通过导出门禁":"completed_with_issues"===p.status?`文档已生成(带 ${j.length||1} 项待复核问题,可下载后人工完善)`:`文档生成未通过导出门禁,存在 ${j.length||1} 个阻断问题`,stages:a.executionStages,error:"completed"===p.status||"completed_with_issues"===p.status?void 0:j.join(";")}),p}).catch(a=>{let b=K(v,e);if(!b||"generating"!==b.status)return b??x;let d=a instanceof Error?a.message:String(a),f=a instanceof Error&&/用户中止|aborted|abort/i.test(a.message)?"aborted":b.checkpointChapters?.length||B?"warning":"failed",g=B||b.markdown||b.checkpointChapters?.map(a=>`# ${a.title}
107
107
 
108
- ${a.content}`).join("\n\n")||"",h=p(c||b.executionStages,d),i=M(Y({...b,title:"failed"===f?q(b):b.title&&"生成中"!==b.title?b.title:`${b.templateName||"文档"}生成未完成`,status:f,error:d,markdown:g,executionStages:h,completedAt:Date.now(),warningIssues:"warning"===f?[...b.warningIssues||[],d]:b.warningIssues}),e);return $(e,{taskId:x,title:`生成 ${i.title}`,status:"warning"===f?"warning":"error",percent:100,message:d,stages:h,error:d}),i}).finally(()=>{u.delete(x)}),N={id:x,documentId:w,status:"generating",controller:z,promise:J,startedAt:o,lastProgressAt:o};return A.current=N,u.set(x,N),{taskId:x,documentId:w,record:y}}},79227:(a,b,c)=>{c.d(b,{C:()=>f,previewGenerationBudgetForTemplate:()=>g});var d=c(46482),e=c(95734);function f(a){let b=Math.max(1,a.chapters.length),c=a.targetWords>0?Math.round(a.targetWords/b):1200,d=a.strategy,f=[],g=a.materialFileCount<4&&a.evidenceCount<6,h=Math.max(1,Math.min(b,(Number.isFinite(a.configuredChapterConcurrency)&&a.configuredChapterConcurrency>0?Math.floor(a.configuredChapterConcurrency):void 0)??b)),i=(0,e.Qf)(a.targetWords),j="fast"===d.mode?1:Math.max(1,b),{floorChars:k,ceilingChars:l}=c>=6e3?{floorChars:14e3,ceilingChars:4e4}:c>=3e3?{floorChars:11e3,ceilingChars:28e3}:{floorChars:8e3,ceilingChars:18e3},m=d.repairRoundBudget?d.repairRoundBudget:Math.max(2,Math.min(4,2+ +(a.targetWords>=2e4)+ +!!g)),n=Math.min(m*b,Math.max(12,2*b));return"strict"===d.mode&&f.push("strict:风险领域关键词命中(专项/安全/质量/验收/合同/合规等)"),a.targetWords>=4e4&&f.push("strict:目标篇幅超长(≥4 万字)"),g&&f.push("strict:资料稀疏(资料包文件 <4 且可用证据 <6 条)"),"fast"===d.mode&&f.push("fast:小文档(≤6000 字且 ≤4 章)全局审查降级为 35% 抽检"),"longform"===d.mode&&f.push("longform:长文档(≥3 万字或 ≥8 章)"),"balanced"===d.mode&&f.push("balanced:常规篇幅文档,标准审查深度"),f.push(`全章节并行生成(${h}/${b} 章同批),审查流水线 ${j} 路,全局 LLM 并发不设上限,每章证据预算 ${Math.round(k/1e3)}k-${Math.round(l/1e3)}k 字符,修复轮次预算每章 ${m} 轮(文档级总池 ${n} 轮,收敛判定优先)`),{strategy:d,chapterConcurrency:h,reviewConcurrency:j,llmConcurrency:i,evidenceFloorChars:k,evidenceCeilingChars:l,repairRoundBudget:m,repairPoolBudget:n,triggers:f}}function g(a){let b=Math.max(1,a.chapters.length),c=Math.max(0,Math.round(a.targetWords??0)),e=(0,d.JP)({template:a.template,targetWords:c,requirement:a.requirement,materialFileCount:a.materialFileCount,evidenceCount:a.evidenceCount}),g=f({template:a.template,chapters:a.chapters,targetWords:c,requirement:a.requirement,materialFileCount:a.materialFileCount,evidenceCount:a.evidenceCount,hasVeryLargeExplicitChapter:a.hasVeryLargeExplicitChapter??!1,configuredChapterConcurrency:a.configuredChapterConcurrency??0,strategy:e});return{mode:e.mode,enableGlobalReview:e.enableGlobalReview,globalReviewSamplingRate:e.globalReviewSamplingRate??1,repairRoundBudget:g.repairRoundBudget,chapterConcurrency:g.chapterConcurrency,reviewConcurrency:g.reviewConcurrency,evidenceFloorChars:g.evidenceFloorChars,evidenceCeilingChars:g.evidenceCeilingChars,targetWords:c,chapterCount:b,triggers:g.triggers}}},87942:(a,b,c)=>{c.d(b,{x:()=>d});let d={version:"professional-document-workflow-v9",rules:["complete-local-knowledge-assumption","knowledge-coverage-recovery","fact-trace-placement","chapter-coverage-gate","structured-quality-report","post-repair-verification"]}}};
108
+ ${a.content}`).join("\n\n")||"",h=o(c||b.executionStages,d),i=L(X({...b,title:"failed"===f?p(b):b.title&&"生成中"!==b.title?b.title:`${b.templateName||"文档"}生成未完成`,status:f,error:d,markdown:g,executionStages:h,completedAt:Date.now(),warningIssues:"warning"===f?[...b.warningIssues||[],d]:b.warningIssues}),e);return Z(e,{taskId:w,title:`生成 ${i.title}`,status:"warning"===f?"warning":"error",percent:100,message:d,stages:h,error:d}),i}).finally(()=>{t.delete(w)}),I={id:w,documentId:v,status:"generating",controller:y,promise:G,startedAt:n,lastProgressAt:n};return z.current=I,t.set(w,I),{taskId:w,documentId:v,record:x}}},79227:(a,b,c)=>{c.d(b,{C:()=>f,previewGenerationBudgetForTemplate:()=>g});var d=c(46482),e=c(95734);function f(a){let b=Math.max(1,a.chapters.length),c=a.targetWords>0?Math.round(a.targetWords/b):1200,d=a.strategy,f=[],g=a.materialFileCount<4&&a.evidenceCount<6,h=Math.max(1,Math.min(b,(Number.isFinite(a.configuredChapterConcurrency)&&a.configuredChapterConcurrency>0?Math.floor(a.configuredChapterConcurrency):void 0)??b)),i=(0,e.Qf)(a.targetWords),j="fast"===d.mode?1:Math.max(1,b),{floorChars:k,ceilingChars:l}=c>=6e3?{floorChars:14e3,ceilingChars:4e4}:c>=3e3?{floorChars:11e3,ceilingChars:28e3}:{floorChars:8e3,ceilingChars:18e3},m=d.repairRoundBudget?d.repairRoundBudget:Math.max(2,Math.min(4,2+ +(a.targetWords>=2e4)+ +!!g)),n=Math.min(m*b,Math.max(12,2*b));return"strict"===d.mode&&f.push("strict:风险领域关键词命中(专项/安全/质量/验收/合同/合规等)"),a.targetWords>=4e4&&f.push("strict:目标篇幅超长(≥4 万字)"),g&&f.push("strict:资料稀疏(资料包文件 <4 且可用证据 <6 条)"),"fast"===d.mode&&f.push("fast:小文档(≤6000 字且 ≤4 章)全局审查降级为 35% 抽检"),"longform"===d.mode&&f.push("longform:长文档(≥3 万字或 ≥8 章)"),"balanced"===d.mode&&f.push("balanced:常规篇幅文档,标准审查深度"),f.push(`全章节并行生成(${h}/${b} 章同批),审查流水线 ${j} 路,全局 LLM 并发不设上限,每章证据预算 ${Math.round(k/1e3)}k-${Math.round(l/1e3)}k 字符,修复轮次预算每章 ${m} 轮(文档级总池 ${n} 轮,收敛判定优先)`),{strategy:d,chapterConcurrency:h,reviewConcurrency:j,llmConcurrency:i,evidenceFloorChars:k,evidenceCeilingChars:l,repairRoundBudget:m,repairPoolBudget:n,triggers:f}}function g(a){let b=Math.max(1,a.chapters.length),c=Math.max(0,Math.round(a.targetWords??0)),e=(0,d.JP)({template:a.template,targetWords:c,requirement:a.requirement,materialFileCount:a.materialFileCount,evidenceCount:a.evidenceCount}),g=f({template:a.template,chapters:a.chapters,targetWords:c,requirement:a.requirement,materialFileCount:a.materialFileCount,evidenceCount:a.evidenceCount,hasVeryLargeExplicitChapter:a.hasVeryLargeExplicitChapter??!1,configuredChapterConcurrency:a.configuredChapterConcurrency??0,strategy:e});return{mode:e.mode,enableGlobalReview:e.enableGlobalReview,globalReviewSamplingRate:e.globalReviewSamplingRate??1,repairRoundBudget:g.repairRoundBudget,chapterConcurrency:g.chapterConcurrency,reviewConcurrency:g.reviewConcurrency,evidenceFloorChars:g.evidenceFloorChars,evidenceCeilingChars:g.evidenceCeilingChars,targetWords:c,chapterCount:b,triggers:g.triggers}}},87942:(a,b,c)=>{c.d(b,{x:()=>d});let d={version:"professional-document-workflow-v9",rules:["complete-local-knowledge-assumption","knowledge-coverage-recovery","fact-trace-placement","chapter-coverage-gate","structured-quality-report","post-repair-verification"]}}};