@customize-agent/server 4.17.2 → 4.17.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +20 -20
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/208.js +1 -1
- package/.next/server/chunks/3541.js +6 -6
- package/.next/server/chunks/5284.js +1 -1
- package/.next/server/chunks/6482.js +2 -2
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/asset-library.html +1 -1
- package/.next/server/pages/document-roles.html +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/guide.html +1 -1
- package/.next/server/pages/index.html +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/overview.html +1 -1
- package/.next/server/pages/prompt.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages/template-references.html +1 -1
- package/.next/server/pages-manifest.json +23 -23
- package/.next/static/chunks/{224-790cf01fcf6820ee.js → 224-0415408fff1d1c8b.js} +1 -1
- package/.next/static/chunks/260-580088826d643423.js +1 -0
- package/.next/static/chunks/{289-42781fb699646699.js → 289-fc1b25371e004552.js} +1 -1
- package/.next/static/chunks/788-dca0d550ad6bd8b2.js +1 -0
- package/.next/static/chunks/pages/documents-66057ee3c8ffff6d.js +1 -0
- package/.next/static/chunks/pages/knowledge/files-33782c4b41f33750.js +1 -0
- package/.next/static/chunks/pages/knowledge/manage-5b1b4d3804752f8b.js +1 -0
- package/.next/static/chunks/pages/prompt-edc2dfea09aaedc1.js +1 -0
- package/.next/static/chunks/pages/system/logs-ee67e2c93147dfc3.js +1 -0
- package/.next/static/{oHTkuAe-o_kSbOGg7O_tz → nYmsVv7POGxMRO372dK_1}/_buildManifest.js +1 -1
- package/package.json +1 -1
- package/.next/static/chunks/260-244c94eacd903620.js +0 -1
- package/.next/static/chunks/788-e98701da4d6ca319.js +0 -1
- package/.next/static/chunks/pages/documents-185ab225628d4705.js +0 -1
- package/.next/static/chunks/pages/knowledge/files-98ec72061cdb64d3.js +0 -1
- package/.next/static/chunks/pages/knowledge/manage-558987c599dc4cd5.js +0 -1
- package/.next/static/chunks/pages/prompt-839287c514595765.js +0 -1
- package/.next/static/chunks/pages/system/logs-2e849bcdf371d791.js +0 -1
- /package/.next/static/{oHTkuAe-o_kSbOGg7O_tz → nYmsVv7POGxMRO372dK_1}/_ssgManifest.js +0 -0
|
@@ -91,14 +91,14 @@ ${a.knownConflictLines}
|
|
|
91
91
|
**编制依据补充说明**:${d.join(";")}。
|
|
92
92
|
`,f=/^(?:###|####)\s+(?:[\d.]+[\s\u00a0]*)?编制说明与工程概况$/mu.exec(a);if(f){let b=a.indexOf("\n",f.index)+1;return`${a.slice(0,b)}${e}${a.slice(b)}`}return`${a.replace(/\s+$/u,"")}
|
|
93
93
|
${e}`}function eB(a,b){if(!b)return"";let c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){if(!/^\s*\|/u.test(c[a])||!c[a].includes(b))continue;let d=a;for(;d>0&&/^\s*\|/u.test(c[d-1]);)d-=1;let e=a;for(;e+1<c.length&&/^\s*\|/u.test(c[e+1]);)e+=1;return c.slice(d,e+1).join("\n")}return""}function eC(a){let b=a.map(a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>a.trim()));if(b.length<2)return{lines:a,removed:0};let c=b.length>1&&b[1].length>0&&b[1].every(a=>/^:?-{2,}:?$/u.test(a))?1:0,d=()=>Math.max(...b.map(a=>a.length)),e=0,f=!1;for(let a=c+1;a<b.length;a+=1){let c=b[a];if(/^(?:合计|小计|总计|累计)/u.test(c[0]||""))for(let a=1;a<c.length;a+=1)""===c[a]&&(c[a]="—",f=!0)}let g=b[0],h=b.slice(c+1);if(h.length>0&&/表$/u.test(g[0]||"")&&h.every(a=>a.length>0&&""===a[a.length-1])&&h.some(a=>""!==a[0])){b[0]=g.slice(1);for(let a=c+1;a<b.length;a+=1)b[a]=b[a].slice(0,b[a].length-1);f=!0,e+=1}if(b.length>c+1){let a=[];for(let e=0;e<d();e+=1)b.slice(c+1).every(a=>""===(a[e]||""))&&a.push(e);if(a.length>0){for(let c of b)for(let b=a.length-1;b>=0;b-=1)c.splice(a[b],1);f=!0,e+=1}}let i=/^(?:—+|-+|\/|N\/A|n\/a|待定|待补充|待确认|待查|待补|若干|暂无|无数据)$/u;for(let a=b.length-1;a>c;a-=1)!/^(?:合计|小计|总计|累计)/u.test(b[a][0]||"")&&b[a].some(a=>""===a||i.test(a))&&(b.splice(a,1),f=!0,e+=1);for(let a=c+1;a<b.length;a+=1){let c=b[a];for(let a=0;a<c.length;a+=1)/^约\d/u.test(c[a]||"")&&(c[a]=(c[a]||"").replace(/^约/u,""),f=!0)}return(b.length<=c+1&&(b.splice(0,b.length),f=!0,e+=1),f)?{lines:b.map((a,b)=>b===c?`| ${a.map(()=>"---").join(" | ")} |`:`| ${a.join(" | ")} |`),removed:e}:{lines:a,removed:0}}function eD(a){return dQ((0,v.rs)((0,v.V3)({templateId:a.template.id,templateName:a.template.name,title:a.template.outputTitle,requirement:a.requirement||"",projectRoot:a.projectRoot,projectId:a.projectId,exportSettings:a.template.exportSettings,generationSettings:a.template.generationSettings,facts:a.facts,structuredFacts:a.structuredFacts,factsModel:a.factsModel,chapters:a.chapters,sources:a.sources,missingItems:[...new Set(a.missingItems)],validation:a.validation,validationIssues:a.validationIssues,executionStages:a.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:a.assets,partialChapters:[],checkpointChapters:a.chapters,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:a.promptDocumentRules}),a.chapters,{forbidDrawingImages:!1,promptRules:a.promptDocumentRules}).markdown)}async function eE(a){let{documentSpec:b,validationIssues:c,factsModel:d,finalChapterDrafts:e,finalMarkdown:f,template:g,promptBindings:h,promptDocumentRules:i,projectMaterialSummary:j,domainProfile:k,structuredFacts:m,documentBudget:o,scopeConflicts:p,evaluationCriteriaItems:q,effectiveChapters:r,tenderRequirements:s,requirementsSimilarity:t,factTokenScopeClassifier:u,professionalDepthClassifier:y}=a;return c_((0,x.kQ)(b,c,d,e,f,g.projectBindings||[],h),function(a){let b=[],c=a.markdown||"";for(let e of a.spec.factFields.filter(a=>a.required)){var d;!((d=e.name).length<4||bZ(d))&&/\d|GB|JGJ|C\d|HRB|DN|mm|MPa|kPa|工期|质量|安全|项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数/u.test(d)&&!b_(c,e.name)&&b.push({level:"info",message:`正文可能未显式覆盖“${e.name}”`,suggestion:"建议检查对应章节是否已自然表达该事实。"})}let e=a.summary.facts.projectName;!e||"当前知识库项目"===e||bZ(e)||b_(c,e)||b.push({level:"warning",message:"正文未明显体现关键对象名称",suggestion:"建议在概况、背景或首页标题中体现当前文档的关键对象名称。"});let f=a.summary.facts.documentNo;for(let a of(f&&!c.includes(f)&&b.push({level:"info",message:"正文未体现文档/任务编号",suggestion:"如文档需要编号,请在概况、背景或首页信息中补充。"}),["知识库证据","资料类型","提示词角色","文档规范包","规范包","后台自动规范","后台优化建议","基础事实候选","材料未提供","未检索到"]))c.includes(a)&&b.push({level:"error",message:`正文包含后台流程话术:${a}`,suggestion:"请重新生成或在审查阶段删除后台流程描述。"});return b}({markdown:f,spec:b,summary:j}),function(a){let b=a.profile||l,c=[],d=new Map;for(let c of a.facts){let a=c.fieldName||c.key;a&&function(a,b){let c=n(b,a);return c?"single"===c.cardinality&&"allow_multiple"!==c.conflictPolicy&&"ignore"!==c.conflictPolicy:/项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数|工期|质量标准|合同价格形式|绿色建筑等级|投标有效期|质保期/u.test(a)}(a,b)&&b1(String(c.value),b)&&d.set(a,[...d.get(a)||[],{value:String(c.value),source:c.sourceFile}])}for(let[a,e]of d){let d=new Map;for(let a of e){let c=b1(a.value,b);c&&d.set(c,[...d.get(c)||[],a])}if(d.size>1){let b=[...d.values()].map(a=>`${a[0].value}(${a.map(a=>a.source).filter(Boolean).join("、")||"未知来源"})`).join(" vs ");c.push({level:"error",message:`事实一致性冲突:${a} 存在多个值:${b}`,suggestion:"请确认当前绑定材料组,或在模板绑定中只绑定当前文档所需材料。"})}}let e=a.summary.facts.projectName;if(e&&"当前知识库项目"!==e&&!/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|招标工程量清单封面|招标工程量清单扉页|工程量清单表|清单封面|清单扉页|\d{1,2}\.\d{1,2}/u.test(e)){let b=b0(a.markdown),d=[e,...a.summary.fingerprint.projectNames].flatMap(a=>[a,a.replace(/^\d+(?:\.\d+)?[^\u4e00-\u9fa5]*/u,""),a.replace(/\([^)]*\)|([^)]*)/gu,"")]).map(a=>b0(a)).filter(a=>a.length>=4),f=d.filter(a=>a.length>=8),g=d.filter(a=>a.length<8),h=f.some(a=>b.includes(a)||a.length>=12&&b.includes(a.slice(0,Math.max(8,Math.floor(.72*a.length))))),i=g.some(a=>b.includes(a));(f.length>0?h:!(g.length>0)||i)||c.push({level:"warning",message:`正文未包含当前对象名称:${e}`,suggestion:"请确认标题、概况或背景信息是否已体现当前对象名称。"})}return c}({markdown:f,facts:m,summary:j,profile:k}),function(a,b){let c=[],d=new Set([b.projectName,...b.fingerprint.projectNames].filter(Boolean));for(let e of b.contaminationCandidates)e.length>=6&&!d.has(e)&&a.replace(/\s+/gu,"").includes(e.replace(/\s+/gu,""))&&c.push({level:"error",message:`正文疑似混入其他对象名称:${e}`,suggestion:"请检查绑定材料选择、模板绑定文件和知识库证据范围。"});let e=b.fingerprint.documentNos,f=a.match(/\b\d{4}[A-Z]{2,}\d{4,}\b/gu)?.find(a=>!e.includes(a));return f&&e.length>0&&c.push({level:"error",message:`正文疑似混入其他文档编号:${f}`,suggestion:"请重新生成并检查是否召回了其他绑定材料。"}),c}(f,j),0===dp(m).length||!/资料未明确|系统暂未从知识库确认|项目资料暂未明确/u.test(f)?[]:["计划工期","合同工期","质量标准","合同估算价","合同估算价格","建设地点","建设规模"].filter(a=>RegExp(`${a}[^
|
|
94
|
-
|。;;]{0,40}(?:资料未明确|系统暂未从知识库确认|项目资料暂未明确)`,"u").test(f)).map(a=>({level:"error",message:`${a} 已抽取到项目资料事实但正文仍显示暂未明确`,suggestion:"请优先使用项目基础事实卡片中的资料原值,不得用占位表达覆盖已确认事实。"})),await cR({markdown:f,chapters:e,factsModel:d,template:g,promptBindings:h,promptDocumentRules:i,scopeConflicts:p,evaluationCriteriaItems:q,effectiveChapters:r,tenderRequirements:s,requirementsSimilarity:t,factTokenScopeClassifier:u,professionalDepthClassifier:y}),dW(f,[...m,...d.preciseFacts],{maxIssues:30}).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议后续优化事实自然落位;导出阶段不因未落位的引用型或可优化事实阻断。"})),(0,w.PE)(g.generationSettings||g.exportSettings,f).filter(a=>!(o.minPages&&/低于目标页数/u.test(a.message))),(0,w.ty)(o,f),(0,v.UG)(f,g),(0,dh.IA)(f),await (0,b3.WT)(f),f.includes("WRITER_MISSING_SECTION")||f.includes("Writer 未完成")?[{level:"error",severity:"blocker",category:"structure",owner:"system",message:"最终正文仍包含未完成小节标记",suggestion:"必须重新补写对应小节并删除 WRITER_MISSING_SECTION/Writer 未完成。"}]:[],function(a){let b=[{title:"项目特点、重点、难点分析",minChars:1800},{title:"项目主要施工内容",minChars:2200},{title:"主要分部分项工程施工方案",minChars:1200,blockerMinChars:800},{title:"主要施工方法",minChars:2200},{title:"危大工程专项施工方案审批流程",minChars:500,blockerMinChars:250},{title:"原材料进场复试与见证取样",minChars:600,blockerMinChars:300}],c=[];for(let d of a)for(let a of b){let b=(0,z.Xl)(d.content,a.title)||(0,z.Xl)(d.content,a.title,{fuzzy:!0}),e=(0,w.V7)(b);if(!b||e>=a.minChars)continue;let f=function(a){let b=[{title:"项目特点、重点、难点分析",minChars:1800},{title:"项目主要施工内容",minChars:2200},{title:"主要分部分项工程施工方案",minChars:1200,blockerMinChars:800},{title:"主要施工方法",minChars:2200},{title:"危大工程专项施工方案审批流程",minChars:500,blockerMinChars:250},{title:"原材料进场复试与见证取样",minChars:600,blockerMinChars:300}].find(b=>b.title===a);if(!b)return 0;let c=b.blockerMinChars||Math.floor(.8*b.minChars),d=(0,di.ap)(a);return Math.min(c,d>0?d:c)}(a.title);e>=f?c.push({level:"warning",severity:"warning",message:`${d.title} ${a.title} 正文深度接近目标:当前 ${e} 字,目标 ${a.minChars} 字`,suggestion:"已达到可交付深度,建议后续按项目数据继续优化扩写。"}):c.push({level:"error",severity:"blocker",message:`${d.title} ${a.title} 正文不足:当前 ${e} 字,要求不少于 ${f} 字`,suggestion:"关键小节必须补足项目数据、重点难点与施工内容对应关系后方可导出。"})}return c}(e),function(a){let b=[{title:"项目特点、重点、难点分析",minNumericFacts:5,minObjectFacts:8,objectPatterns:[/建筑面积|面积/u,/层|框架结构|既有建筑/u,/结构形式|结构加固|墙体补强|装配式/u,/拆除|改造|装修|装饰/u,/工期|日历天/u,/质量标准|合格/u,/营业商铺|经营区域|场地/u,/管网|防水|室外道排/u,/智能化|弱电|消防|暖通|通风空调|水电/u]},{title:"项目主要施工内容",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/拆除|垃圾外运|既有设施保护/u,/结构加固|墙体补强|框架结构/u,/装饰|装修|基层|面层|环保|阻燃/u,/防水|管网|给排水|阀门|道排/u,/消防|水电|电气|弱电|智能化|通风空调/u,/屋面|立面|室外|附属/u,/施工流程|施工方法|施工顺序|工艺流程/u,/验收|检测|调试|资料闭环/u]},{title:"主要分部分项工程施工方案",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/拆除|垃圾外运|既有设施保护/u,/结构加固|墙体补强|框架结构/u,/装饰|装修|基层|面层|环保|阻燃/u,/防水|管网|给排水|阀门|道排/u,/消防|水电|电气|弱电|智能化|通风空调/u,/屋面|立面|室外|附属/u,/施工流程|施工方法|施工顺序|工艺流程/u,/验收|检测|调试|资料闭环/u]},{title:"主要施工方法",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/拆除|垃圾外运|既有设施保护/u,/结构加固|墙体补强|框架结构/u,/装饰|装修|基层|面层|环保|阻燃/u,/防水|管网|给排水|阀门|道排/u,/消防|水电|电气|弱电|智能化|通风空调/u,/屋面|立面|室外|附属/u,/施工流程|施工方法|施工顺序|工艺流程/u,/验收|检测|调试|资料闭环/u]}];return a.flatMap(a=>b.flatMap(b=>{let c=(0,z.Xl)(a.content,b.title);if(!c)return[];let d=new Set(c.match(/\d+(?:\.\d+)?\s*(?:m²|㎡|平方米|m|mm|层|栋|日历天|天|%|台|套|根|处|个|kg|t|吨)/giu)||[]).size,e=b.objectPatterns.filter(a=>a.test(c)).length,f=[];return d<b.minNumericFacts&&f.push({level:"warning",severity:"warning",message:`${a.title} ${b.title} 参数落位不足:当前 ${d} 个,建议不少于 ${b.minNumericFacts} 个`,suggestion:"关键小节必须写入项目规模、工期、层数、结构、专业工程或验收参数等具体数值。"}),e<b.minObjectFacts&&f.push({level:"warning",severity:"warning",message:`${a.title} ${b.title} 专业事实覆盖不足:当前 ${e} 类,建议不少于 ${b.minObjectFacts} 类`,suggestion:"优先基于当前项目绑定资料补充工程对象、专业范围、重点难点和对应施工内容;不得为满足类别数量编造或混入其他项目事实。"}),f}))}(e),(await eh(e,f)).map(a=>"error"===a.level?{...a,severity:"blocker"}:a)).map(a=>"error"===a.level?{...a,severity:a.severity||"blocker"}:a)}let eF=/章节级证据覆盖较弱|章节事实覆盖不足|小节事实或量化参数落位可继续优化/u;async function eG(a){var b;let{finalChapterDrafts:c,effectiveChapters:d,factsModel:e,allEvidence:f,finalMarkdown:g,validationIssues:h,retrievalCoverageReports:i,includeRetrievalCoverage:j,template:k}=a,l=function(a){let b=a.chapters.map(b=>{let c=function(a){let b=["project"];return/进度|工期|节点|部署/u.test(a.title)&&b.push("schedule"),/质量|验收|材料/u.test(a.title)&&b.push("quality","rules"),/安全|文明|风险|危大/u.test(a.title)&&b.push("safety","rules"),/资源|材料|设备|劳动力|机械/u.test(a.title)&&b.push("resources"),/施工|工艺|技术|方案|清单|工程量|图纸/u.test(a.title)&&b.push("quantities"),[...new Set(b)]}(a.templateChapters.find(a=>a.id===b.id||a.title===b.title)||b),d=c.filter(c=>{var d;return d=a.factsModel,("project"===c?d.project.length>0||d.preciseFacts.length>0:"schedule"===c?d.schedule.length>0:"quality"===c?d.quality.length>0||d.specifications.length>0:"safety"===c?d.safety.length>0||d.rules.length>0:"resources"===c?d.resources.length>0||d.bills.length>0:"quantities"===c?d.bills.length>0||d.drawings.length>0||d.tables.length>0:"rules"===c&&(d.rules.length>0||d.specifications.length>0))||(b.evidence||[]).some(a=>RegExp(cS[c]||c,"u").test(`${a.sectionTitle||""} ${a.content||""}`))}),e=c.filter(a=>!d.includes(a)),f=c.length?Math.round(d.length/c.length*100):100;return{chapterId:b.id,title:b.title,requiredDomains:c,confirmedDomains:d,unconfirmedDomains:e,score:f}}),c=new Set(a.evidence.map(a=>a.filePath).filter(Boolean)),d=b.length?Math.round(b.reduce((a,b)=>a+b.score,0)/b.length):100;return{score:d,evidenceCount:a.evidence.length,confirmedFiles:c.size,chapterReports:b,unconfirmedDomains:[...new Set(b.flatMap(a=>a.unconfirmedDomains))],remediation:d>=95?"知识库事实覆盖已达到高置信交付要求。":"系统需扩大本地知识库检索、补抽结构化事实,并将已确认事实落位到对应章节。"}}({chapters:c,templateChapters:d,factsModel:e,evidence:f}),m=(0,cf.e$)(g,e),n=(b={chapters:c,templateChapters:d,factsModel:e}).chapters.map(a=>{let c=b.templateChapters.find(b=>b.id===a.id||b.title===a.title),d=function(a,b){let c=`${a.title} ${(b?.sections||a.sections||[]).join(" ")}`;return[{key:"structure",label:"结构完整",passed:(a.sections||b?.sections||[]).length>=2||/###\s+/u.test(a.content)},{key:"depth",label:"内容深度",passed:(0,w.V7)(a.content)>=600},{key:"evidence",label:"证据绑定",passed:(a.evidence||[]).length>0},{key:"professional",label:"专业控制点",passed:/验收|复核|检查|交底|控制点|整改|闭环|台账|进场|工序/u.test(a.content)},{key:"schedule",label:"工期支撑",passed:!/进度|工期|节点/u.test(c)||/工期|节点|计划|纠偏|资源|穿插/u.test(a.content)},{key:"quality",label:"质量验收",passed:!/质量|验收/u.test(c)||/质量|验收|复验|隐蔽|检验批|整改/u.test(a.content)},{key:"safety",label:"安全闭环",passed:!/安全|文明|风险|危大/u.test(c)||/风险|检查|整改|应急|培训|交底/u.test(a.content)}]}(a,c),e=d.filter(a=>a.passed).length;return{chapterId:a.id,title:a.title,score:d.length?Math.round(e/d.length*100):100,checks:d,action:e===d.length?"章节覆盖完整。":"系统需补齐章节结构、证据绑定、专业控制点和跨章依赖。"}}),o=c_(h,l.score>=85?[]:[{level:"warning",message:`系统知识库覆盖确认率偏低:${l.score}%`,suggestion:`${l.remediation} 未确认事实域:${l.unconfirmedDomains.map(a=>cS[a]||a).join("、")||"无"}`}],(0,cf.c$)(m,{maxIssues:20}),n.filter(a=>a.score<80).map(a=>({level:"warning",message:`章节覆盖不足:${a.title} ${a.score}%`,suggestion:`${a.action} 未通过项:${a.checks.filter(a=>!a.passed).map(a=>a.label).join("、")}`})),j?i.filter(a=>a.risk.highRisk&&(0===a.requiredFactTotal?a.evidenceCount<8:a.requiredFactCovered<a.requiredFactTotal)).map(a=>({level:"warning",message:`系统知识库召回覆盖需复核:${a.chapterTitle}`,suggestion:`知识库总切片 ${a.risk.totalChunks},当前预加载 ${a.risk.loadedChunks}${a.risk.riskReason?`(${a.risk.riskReason})`:""},已启用深召回;事实覆盖 ${a.requiredFactCovered}/${a.requiredFactTotal},小节覆盖 ${a.sectionCovered}/${a.sectionTotal}。`})):[]);o=o.map(a=>eF.test(a.message)&&"warning"===a.level?{...a,level:"info"}:a);let p=(0,cW.Ah)((0,cV.aF)(g))?.profile.fiveElementCompleteBlocks,q=await cU({markdown:g,chapters:c,issues:o,knowledgeCoverage:l,factTraces:m,template:k,referenceCompleteBlocks:p}),r=function(a){let b=[],c=a.issues.filter(a=>"error"===a.level);c.length>0&&b.push({priority:"high",title:"阻断问题修复",action:`修复 ${c.length} 个导出阻断问题,优先处理事实冲突、结构缺失、模板规则违规和占位残留。`});let d=(a.factTraces||[]).filter(a=>"unplaced"===a.status&&(0,cf.O7)(a));if(d.length>0){let a=d.length>12?`${d.length} 项(示例:${d.slice(0,8).map(a=>a.label).join("、")} 等)`:`${d.length} 项(${d.map(a=>a.label).join("、")})`;b.push({priority:"high",title:"事实落位修复",action:`将 ${a} 已确认知识库事实写入对应章节,保持原始数值、单位和来源口径。`})}a.knowledgeCoverage&&a.knowledgeCoverage.score<95&&b.push({priority:"medium",title:"知识库确认覆盖修复",action:"扩大本地知识库检索范围,执行事实补抽和章节证据重分配;这是系统检索、抽取、落位问题,不要求用户追加资料。"});let e=(a.chapterCoverage||[]).filter(a=>a.score<80);if(e.length>0){let a=e.length>10?`${e.slice(0,8).map(a=>a.title).join("、")} 及其他${e.length-8}章`:e.map(a=>a.title).join("、");b.push({priority:"medium",title:"章节覆盖修复",action:`补齐低覆盖章节(${e.length}章):${a}。`})}return a.qualityReport&&!a.qualityReport.passed&&b.push({priority:"medium",title:"交付置信度修复",action:a.qualityReport.actions.join(" ")}),b}({issues:o,qualityReport:q,knowledgeCoverage:l,factTraces:m,chapterCoverage:n});o=c_(o,q.passed?[]:[{level:"info",message:`交付置信度未达目标:${q.deliveryProbability}% / ${q.target}%`,suggestion:q.actions.join(" ")}],r.filter(a=>"high"===a.priority).map(a=>({level:"info",message:`修复策略待执行:${a.title}`,suggestion:a.action})));let s=(0,x.Ai)(o,e,c);return{knowledgeCoverage:l,factTraces:m,chapterCoverage:n,qualityReport:q,repairStrategies:r,validationIssues:o,finalExportGate:s}}async function eH(a){let b,{chapterDraftsByOrder:c,chapterGenerationStagesByOrder:e,chapterGenerationStages:f,effectiveChapters:g,template:h,allEvidence:i,projectMaterialScope:j,progressStages:k,documentSpec:l,projectMaterialSummary:m,domainProfile:n,documentBudget:o,input:p,generationDiagnostics:q,promptTexts:r,promptBindings:t,promptDocumentRules:y,projectRoot:A,projectId:B,readiness:C,factExtractionPromptTexts:D,hasExplicitOutline:E,missingItems:F,retrievalCoverageReports:G,failedChapterMessages:H,webResearchReport:I,indexHealth:J,agentWorkflow:K,globalConsistencyIssues:L,scopeConflicts:M,writingTaskBrief:N,evaluationCriteriaItems:O,tenderRequirements:P,requirementsSimilarity:Q,factTokenScopeClassifier:S,professionalDepthClassifier:T,emitProgress:U,withProgressHeartbeat:V}=a,{signal:W,requirement:X}=p,Y=c.filter(a=>!!a);if(f.push(...e.filter(a=>!!a)),0===Y.length)throw Error(`章节生成未完成:${H.join(";")||"没有生成任何有效章节"}`);if(E&&Y.length<g.length)throw Error(`OUTLINE 指定 ${g.length} 章,实际只生成 ${Y.length} 章:${H.join(";")||"部分章节未生成"}`);let Z=aa(Y.flatMap(a=>a.evidence||[]),j);ac(Z,j,"finalize:chapter-evidence"),Z.length>0&&(i.push(...Z),i.splice(0,i.length,...(0,s.QR)(i,{preservePinned:!0})));let $=aa(i,j);i.splice(0,i.length,...$),ac(i,j,"finalize:all-evidence"),(0,z.Te)(W);let _=(0,s.QR)(i,{preservePinned:!0});i.splice(0,i.length,...aa(_,j)),ac(i,j,"finalize:post-file-understanding");let ad=function(a,b,c){let d={};for(let e of(0,u.Uy)(a,c)){let a=b.find(a=>(0,u.I2)(a,e));a&&(d[e.name]=`${a.content.replace(/\s+/gu," ")}(来源:${a.filePath},角色:${a.roleId||"未标注"})`)}return d}(h,i,l),{localFacts:ae,projectBasicFacts:ag,preciseFacts:ah,structuredTables:ai}=as({evidence:i,template:h,spec:l,profile:n,scope:j,diagnostics:q}),aj={facts:[],stages:[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"已有本地/资料事实覆盖主要必需字段,跳过 LLM 全量事实抽取"}]};if(function(a,b,c){let d=(0,u.Uy)(b,c).filter(a=>a.required);return 0===d.length?a.filter(a=>a.confidence>=.75&&(0,z.lG)(a.value).trim().length>=2).length<12:d.filter(b=>a.some(a=>(function(a,b){let c=(0,z.lG)(a.value).trim();if(!c||c.length<2||c.length>220&&a.confidence<.8)return!1;let d=`${a.fieldId||""} ${a.fieldName||""} ${a.key}`.toLowerCase();return!!(d.includes(b.id.toLowerCase())||d.includes(b.name.toLowerCase()))&&("project_basic_fact"===a.roleId||a.roleId?.startsWith("role-")||a.sourceRef?.filePath?a.confidence>=.55:a.confidence>=.75)})(a,b))).length/d.length<.9}([...ae,...ag,...ah],h,l)){let a=(0,s.QR)(i,{preservePinned:!0});try{aj=await af(a,D,h,l,W,q)}catch(a){if(W?.aborted)throw a;console.error("[gen] fact extraction failed:",a)}}for(let a of aj.stages)(0,bu.fx)(k,a);let ak=ab((aE=[...ae,...ag,...ah,...aj.facts],aE.filter(a=>!!a.sourceFile)),j),al=dg(ak,M??dd(ak));for(let a of al)ad[a.key]=`${(0,z.lG)(a.value)}(来源:${a.sourceFile},角色:${a.roleId})`;let am=await aD(al,ai,F,l,n),an=Y.map(a=>{let b=l.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=(b?.requiredFactIds||[]).map(a=>l.factFields.find(b=>b.id===a)?.name).filter(Boolean),d=[...new Set([...a.missingFacts||[],...c].filter(Boolean))],e=d.filter(b=>!a.missingFacts.includes(b)),f=d.filter(b=>a.missingFacts.includes(b));return{chapterId:a.id,title:a.title,requiredFacts:d,coveredFacts:e,missingFacts:f,evidenceCount:a.evidence.length}}),ao=function(a,b=[],c){let e=[],f=[];for(let b of a)0===b.evidence.length&&e.push(`${b.title} 未检索到资料证据`),b.content.length<80&&e.push(`${b.title} 内容较短,建议人工补充或重新生成`);return c&&a.length<c.chapters.length&&f.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===(0,d.zY)(c).length&&f.push("模板未绑定任何提示词"),{passed:0===f.length,warnings:e,errors:f}}(Y,al,h);ao.warnings=[...ao.warnings,...C.warnings],ao.errors=[...ao.errors,...C.blockingIssues];let ap=[...i.reduce((a,b)=>a.set(b.filePath,(a.get(b.filePath)??0)+1),new Map).entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),aq=new Map;for(let a of i)aq.set(a.source||"unknown",(aq.get(a.source||"unknown")??0)+1);let ar=c_((0,by.w9)(ao,am,Y),function(a){let b=[];for(let c of a)0===c.evidenceCount?b.push({level:"error",message:`章节缺少证据:${c.title}`,suggestion:"请补充对应绑定材料或调整模板章节检索词。"}):c.missingFacts.length>0&&b.push({level:"warning",message:`章节事实覆盖不足:${c.title},缺失 ${c.missingFacts.slice(0,6).join("、")}`,suggestion:"建议补充章节 requiredFacts 或绑定材料证据。"});return b}(an),(L||[]).filter(a=>!/^跨章一致性冲突|^工序规格冲突/u.test(a)).slice(0,10).map(a=>({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨章一致性复核:${a}`,suggestion:"跨章数值口径不一致属低级错误,必须定向修复统一口径后重新校验。"}))),at=Y.map(a=>a.content).join("\n\n");ar=c_(ar,dW(at,ak,{maxIssues:20}).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议 Agent Writer 在章节生成阶段优先落位可信基础事实;导出阶段不因未落位的低置信或泛化事实阻断。"})));let au=Math.max(0,g.length-Y.length);ar=c_(ar,[...au>0?[{level:"error",severity:"blocker",message:`部分章节生成失败:${au} 章`,suggestion:H.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。"}]:[]]);let av=await Promise.all(Y.map(async a=>{let b=g.find(b=>b.id===a.id);if(!b)return[];let c=await bM({chapter:b,content:a.content,evidence:a.evidence||[]});return c.length>0?[{level:"warning",message:`${a.title} 小节事实或量化参数落位可继续优化:${c.slice(0,5).join(";")}`,suggestion:"建议在 Agent Writer 阶段扩大定向证据,不得在导出阶段补写。"}]:[]}));ar=c_(ar,av.flat());let aw=[],ax=[...k];for(let a of f)(0,bu.fx)(ax,a);let ay=function(a,b=300){if(a.length<=b)return a;let c=b-4-1;if(c<=0)return a.slice(-b);let d=a.slice(0,4),e=a.slice(-c),f=a.slice(4,a.length-c),g=f.filter(a=>"failed"===a.status).length;return[...d,{type:"validation",roleId:"stage-archive",status:g>0?"failed":"success",message:`已归档 ${f.length} 个中间执行阶段${g>0?`(含 ${g} 个失败记录)`:""}`,details:f[0]?.subtitle?[`归档区间:${f[0].subtitle} → ${f[f.length-1]?.subtitle||""}`]:[]},...e]}(ax);(0,bu.fx)(ay,(0,bu.X5)({type:"reference",roleId:"knowledge-usage-report",status:"success",message:`资料使用报告:证据 ${i.length} 条,来源文件 ${ap.length} 份,结构化事实 ${ak.length} 条`,details:[`证据类型:${[...aq.entries()].map(([a,b])=>`${a} ${b}`).join(",")||"无"}`,`索引健康:可用切片 ${J.usableChunkCount} 条,待索引 ${J.pendingJobs} 个,向量 ${J.vectorStatus?.status||"unknown"}`]},{subtitle:"资料使用报告"})),(0,bu.fx)(ay,(0,bu.X5)({type:"reference",roleId:"web-research-report",status:I.enabled?"success":"skipped",message:I.enabled?`联网增强:检索章节 ${new Set(I.chapters).size} 个,查询 ${I.queries.length} 个,使用公开资料 ${I.evidenceCount} 条`:"联网增强未开启",details:I.enabled?[`检索主题:${[...new Set(I.queries)].join(";")||"无"}`,`过滤结果:${I.filteredCount} 条`,"公开资料仅用于通用规范、政策、工艺和措施补充,不作为项目事实来源"]:["可在模型配置中开启联网增强"]},{subtitle:"联网增强报告"}));let az=(0,v.rs)((0,v.V3)({templateId:h.id,templateName:h.name,title:h.outputTitle,requirement:X||"",projectRoot:A,projectId:B,exportSettings:h.exportSettings,generationSettings:h.generationSettings,facts:ad,structuredFacts:ak,factsModel:am,chapters:Y,sources:ap,missingItems:[...new Set(F)],validation:ao,validationIssues:ar,executionStages:ay,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:aw,partialChapters:Y.map(a=>({id:a.id,title:a.title,chars:(0,w.V7)(a.content),status:dk(a,o.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:Y,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:y}),Y,{forbidDrawingImages:!1,promptRules:y}).chapters.map(a=>{let b=g.find(b=>b.id===a.id)||a;return{...a,sections:a.sections||[],content:dP(a.content,b)}}),aA=(0,v.rs)((0,v.V3)({templateId:h.id,templateName:h.name,title:h.outputTitle,requirement:X||"",projectRoot:A,projectId:B,exportSettings:h.exportSettings,generationSettings:h.generationSettings,facts:ad,structuredFacts:ak,factsModel:am,chapters:az,sources:ap,missingItems:[...new Set(F)],validation:ao,validationIssues:ar,executionStages:ay,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:aw,partialChapters:[],checkpointChapters:az,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:y}),az,{forbidDrawingImages:!1,promptRules:y}).markdown;aA=dQ(eA((0,v.bR)((0,v.kT)((0,v.K7)(ey(dD(aA,ak),m)))),h));let aB="1"===process.env.DOCUMENT_FINALIZE_ENTRY_FIX?await (0,x.KI)(az,am,M):{fixedCount:0,details:[]},aC=(await (0,x.Yb)(aA,am,M)).fixedCount>0;if(aB.fixedCount>0||aC){var aE,aF,aG;aA=dQ(eA((0,v.bR)((0,v.kT)((0,v.K7)(ey(dD(eD({template:h,requirement:X,projectRoot:A,projectId:B,facts:ad,structuredFacts:ak,factsModel:am,chapters:az,sources:ap,missingItems:F,validation:ao,validationIssues:ar,executionStages:ay,assets:aw,promptDocumentRules:y}),ak),m)))),h));let a=await (0,x.Yb)(aA,am,M);a.fixedCount>0&&(aA=a.markdown);let b=aB.fixedCount+a.fixedCount,c=[...new Set([...aB.details,...a.details])];for(let a of c.map(a=>({caseType:"deterministic_fix",recordedAt:Date.now(),fixName:"applyDeterministicConsistencyFixes",detail:a})))c2("deterministic-fix-cases.jsonl",a);(0,bu.fx)(ay,(0,bu.X5)({type:"validation",roleId:"deterministic-consistency-fix",status:"success",message:`跨章一致性数值定点修复:${b} 处(${c.slice(0,4).join("、")})`,details:c.slice(4)},{subtitle:"跨章一致性修复"}))}let aH=c8({facts:ak,markdown:aA});aH.size>0&&ay.push({type:"fact_extraction",roleId:"canonical-facts",status:"success",message:`已决策可信基础事实 ${aH.size} 项`,details:[...aH.values()].map(a=>`${a.label}=${a.value}(${a.source},confidence=${a.confidence})`).slice(0,12)});let aI=ar,aJ="0"!==process.env.DOCUMENT_CONSISTENCY_REVIEW_SNAPSHOT,aK=aJ?(aF={signal:W,diagnostics:q},async a=>{let c=(0,z.c6)(a);if(b?.markdownHash===c)return b.conflicts;aF.diagnostics&&(aF.diagnostics.llm.lastError=void 0);let d=await b9(a,{signal:aF.signal,diagnostics:aF.diagnostics});return aF.diagnostics?.llm.lastError===void 0&&(b={markdownHash:c,conflicts:d}),d}):async a=>b9(a,{signal:W,diagnostics:q}),aL=aJ?aK(aA):void 0;aL?.catch(()=>void 0);let aM="0"!==process.env.DOCUMENT_DATA_CONSISTENCY_BATCH_REVIEW;ar=await eE({documentSpec:l,validationIssues:ar,factsModel:am,finalChapterDrafts:az,finalMarkdown:aA,template:h,promptBindings:t,promptDocumentRules:y,projectMaterialSummary:m,domainProfile:n,structuredFacts:ak,documentBudget:o,scopeConflicts:M,evaluationCriteriaItems:O,effectiveChapters:g,tenderRequirements:P,requirementsSimilarity:Q,factTokenScopeClassifier:S,professionalDepthClassifier:T});let aN=await eG({finalChapterDrafts:az,effectiveChapters:g,factsModel:am,allEvidence:i,finalMarkdown:aA,validationIssues:ar,retrievalCoverageReports:G,includeRetrievalCoverage:!0,template:h}),{knowledgeCoverage:aO,factTraces:aP,chapterCoverage:aQ,qualityReport:aR,repairStrategies:aS,finalExportGate:aT}=aN;ar=aN.validationIssues;let aU=[],aV=new Set,aW=[],aX=async()=>{let a=aI.filter(a=>![...aV].some(b=>{let[c,d]=b.split("::");var e=a.message;if(!/空小节|小节内容补写未完成|小节生成未达标|小节只有标题|正文小节正文过短|规划小节正文过短|缺少规划小节|缺少[“"'].+[”"']小节|正文不足|小节缺失或标题结构异常|分部分项工程施工方案/u.test(e))return!1;let f=d.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");if(RegExp(`^\\s*${f}\\s*正文不足,未达到任务最小深度$`,"u").test(e)||/缺少[“"'][^”"']+[”"']小节/u.test(e)&&e.includes(d))return!0;let g=d.replace(/^(?:项目|主要)/u,"").replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");return e.includes(c)&&(e.includes(d)||g!==f&&e.includes(g))})&&!/已确认事实未在正文中落位/u.test(a.message)&&!(/概况段跨章复述/u.test(a.message)&&!/本项目为|本工程为|该项目为|该工程为/u.test(aA))&&!(/后台内部术语|后台内部话术/u.test(a.message)&&!/工作包|事实卡|事实主表|后台数据库|落位|峰值口径|控制口径|数据口径/u.test(aA)));ar=[...ar=await eE({documentSpec:l,validationIssues:a,factsModel:am,finalChapterDrafts:az,finalMarkdown:aA,template:h,promptBindings:t,promptDocumentRules:y,projectMaterialSummary:m,domainProfile:n,structuredFacts:ak,documentBudget:o,scopeConflicts:M,evaluationCriteriaItems:O,effectiveChapters:g,tenderRequirements:P,requirementsSimilarity:Q,factTokenScopeClassifier:S,professionalDepthClassifier:T}),...aW],aN=await eG({finalChapterDrafts:az,effectiveChapters:g,factsModel:am,allEvidence:i,finalMarkdown:aA,validationIssues:ar,retrievalCoverageReports:G,includeRetrievalCoverage:!1,template:h}),({knowledgeCoverage:aO,factTraces:aP,chapterCoverage:aQ,qualityReport:aR,repairStrategies:aS,finalExportGate:aT}=aN),ar=aN.validationIssues},aY=Date.now();for(let b=0;b<3;b+=1){let b=Array.from(new Map([...aT.blockingIssues,...ar.filter(a=>"error"===a.level)].map(a=>(function(a){let b=/^(.*?)(?:\s+|)(?:空小节|小节内容补写未完成|小节生成未达标|小节只有标题|只有标题或表格无正文|规划小节正文过短|正文小节正文过短|缺少规划小节|正文不足)[::,,]\s*(.+)$/u.exec(a.message),c=/^(.*?)\s+(项目特点、重点、难点分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试与见证取样)\s+正文不足/u.exec(a.message),d=/^(.+?)\s*正文不足,未达到任务最小深度$/u.exec(a.message),e=/^(?:施工组织设计\s*)?缺少[“"'](.+?)[”"']小节$/u.exec(a.message),f=/^(.*?)\s+(主要施工内容|分部分项工程施工方案)小节缺失或标题结构异常$/u.exec(a.message),g=/^(.*?)\s+分部分项工程施工方案/u.exec(a.message);if(!b&&!e&&!f&&!g)return;let h=c?c[1].trim():d||e?"":f?f[1].trim():g?g[1].trim():b[1].trim(),i=c?c[2]:d?d[1].trim():e?e[1].trim():f?"主要施工内容"===f[2]?"项目主要施工内容":"主要分部分项工程施工方案":g?"主要分部分项工程施工方案":b[2].split(/[::,,,]/u)[0].trim();return{issue:a,chapterTitle:h,sectionTitle:i,critical:/项目特点.*重点.*难点|重点.*难点.*分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试与见证取样/u.test(i)}})(a)).filter(a=>!!a).map(a=>[`${a.chapterTitle}::${a.sectionTitle}`,a])).values()).sort((a,b)=>Number(b.critical)-Number(a.critical));if(0===b.length)break;let c=[],d=[],e=new Map;for(let{issue:a,chapterTitle:f,sectionTitle:h}of b){let b=f,i=b?az.findIndex(a=>a.title===b||b.includes(a.title)||a.title.includes(b)):-1;i<0&&(i=az.findIndex(a=>(a.content||"").includes(h))),i<0&&(i=az.findIndex(a=>(g.find(b=>b.id===a.id||b.title===a.title)?.sections||[]).some(a=>a.includes(h)||h.includes(a))));let j=az[i],k=g.find(a=>a.id===j?.id||a.title===j?.title);if(i<0||!j||!k){c.push(`失败:${b}/${h} 未定位到章节`);continue}b=b||j.title;let l=e.get(i);void 0===l?(e.set(i,d.length),d.push({chapterIndex:i,items:[{issue:a,chapterTitle:b,sectionTitle:h}]})):d[l].items.push({issue:a,chapterTitle:b,sectionTitle:h})}let f=Math.max(1,Math.min(6,Number(process.env.DOCUMENT_FINAL_GATE_REPAIR_CONCURRENCY||3)));for(let b=0;b<d.length;b+=f){let e=d.slice(b,b+f);await Promise.all(e.map(async({chapterIndex:b,items:d})=>{let e=az[b],f=g.find(a=>a.id===e.id||a.title===e.title);for(let{issue:g,chapterTitle:j,sectionTitle:l}of d){let d=az[b],m=(0,bu.X5)({type:"llm_review",roleId:`agent-final-gate-repair-${e.id}`,status:"running",message:`Final Gate 正在补写空小节:${j} / ${l}`,details:c},{subtitle:"Final Gate Repair"});(0,bu.fx)(k,m),(0,bu.fx)(aU,m),U(az,k);let n=(0,by.ap)(l),o=Math.max(620,n>0?Math.ceil(n/.7):620),p=q.llm.lastError;q.llm.lastError=void 0;let s=await V(()=>(0,by.mF)({template:h,chapter:f,sectionTitle:l,evidence:e.evidence?.length?e.evidence:i,missingFacts:[],promptTexts:r,projectContext:a.chapterScopedContext?a.chapterScopedContext(f):a.projectContext,compactProjectContext:!0,scopedProjectContext:!!a.chapterScopedContext,requirement:X,roleContext:"Final Gate 空小节定向修复",targetWords:o,maxWords:Math.ceil(1.32*o),forbidDrawingImages:!1,qualityFeedback:function(a,b){let c=z.V.test(a)?`该小节按专业工程/分项工程方案组织,每个 #### 分项方案必须按“施工概况(作业对象、部位、工程量)”“施工流程(工序顺序表达串联工序链)”“施工方法(工具机具、材料规格、工艺参数、验收标准)”三段展开,“施工概况”“施工流程”“施工方法”三个标签必须在每个分项方案正文中逐字出现。标签形态要求:三个标签必须写成纯文本行首形态(如“施工概况:”),严禁粗体包裹(**施工概况**:)或重复前缀(施工概况:**施工概况**:)。每个分项方案的施工流程段至少 1 条不少于 4 个环节的工序顺序表达(箭头链、编号步骤、有序/无序列表或顺序词叙述均可,如“基层清理→放线定位→分层施工→养护→验收”),施工方法段内也必须包含一条工序顺序表达。每个分项方案至少 4 个带单位工艺参数,小分项(拆除、门窗维修、立面修补等)同样必须写足,参数类型参考:拆除面积㎡、垃圾外运量t、外运距离km、日拆除进度㎡/天、更换数量樘、启闭力N、胶缝宽度mm、安装偏差mm。`:"";return`Final Gate 发现“${a}”为空小节或深度不足。请基于证据完整重写该小节正式正文(原小节内容将被整体替换),包含检查责任、验收节点、资料闭环、整改复验要求,不得输出占位或解释。量化参数只引用与本小节直接相关的具体数字(工期、工程量、材料规格、强度等级等);禁止以“本项目为……”开头整段复述项目概况(建设地点、总建筑面积、层数、总工期等总述信息只在概况类小节集中交代一次),正文直接切入本小节专业内容。${c}${b?`此前生成被拒原因:${b},必须逐条修正。`:""}`}(l,p),diagnostics:q,signal:W,allowLenientStructureGate:!0})),t=!1,u=/正文不足|缺少[“"'].+[”"']小节|小节缺失或标题结构异常/u.test(g.message)?n:0;if(s&&(0,w.V7)(s)>=(u||80)){let a=/小节缺失或标题结构异常/u.test(g.message),e=a?d.content:function(a,b,c){let d=a=>a.replace(/[\u00a0\u3000]/gu," ").replace(/^\d+(?:\.\d+)*\s+/u,"").trim(),e=a=>a.trim().replace(/^#{2,6}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]+\n+/u,"").trim(),f=a.split("\n"),g=a=>(0,z.VX)(a,b),h=a=>{let b=/^(#{3,4})\s+(.+)$/u.exec(f[a].trim());if(!b||3!==b[1].length)return!1;for(let b=a+1;b<f.length;b+=1){let a=f[b].trim();if(/^#{2,3}\s+/u.test(a))break;if(/^####\s+/u.test(a))return!0}return!1},i=0;for(let j=0;j<f.length;j+=1){let k=f[j],l=i;i+=k.length+1;let m=/^(#{3,4})\s+(.+)$/u.exec(k.trim());if(!m)continue;let n=d(m[2]),o=n===b||n.includes(b);if(!o&&!g(n)||!o&&g(n)&&h(j))continue;let p=m[1].length,q=(z.V.test(n)||z.V.test(b))&&3===p?/^#{2,3}\s+/u:/^#{2,4}\s+/u,r=f.length;for(let a=j+1;a<f.length;a+=1)if(q.test(f[a].trim())){r=a;break}let s=r<f.length?f.slice(0,r).join("\n").length:a.length,t=e(c);return`${a.slice(0,l)}${k.trim()}
|
|
94
|
+
|。;;]{0,40}(?:资料未明确|系统暂未从知识库确认|项目资料暂未明确)`,"u").test(f)).map(a=>({level:"error",message:`${a} 已抽取到项目资料事实但正文仍显示暂未明确`,suggestion:"请优先使用项目基础事实卡片中的资料原值,不得用占位表达覆盖已确认事实。"})),await cR({markdown:f,chapters:e,factsModel:d,template:g,promptBindings:h,promptDocumentRules:i,scopeConflicts:p,evaluationCriteriaItems:q,effectiveChapters:r,tenderRequirements:s,requirementsSimilarity:t,factTokenScopeClassifier:u,professionalDepthClassifier:y}),dW(f,[...m,...d.preciseFacts],{maxIssues:30}).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议后续优化事实自然落位;导出阶段不因未落位的引用型或可优化事实阻断。"})),(0,w.PE)(g.generationSettings||g.exportSettings,f).filter(a=>!(o.minPages&&/低于目标页数/u.test(a.message))),(0,w.ty)(o,f),(0,v.UG)(f,g),(0,dh.IA)(f),await (0,b3.WT)(f),f.includes("WRITER_MISSING_SECTION")||f.includes("Writer 未完成")?[{level:"error",severity:"blocker",category:"structure",owner:"system",message:"最终正文仍包含未完成小节标记",suggestion:"必须重新补写对应小节并删除 WRITER_MISSING_SECTION/Writer 未完成。"}]:[],function(a){let b=[{title:"项目特点、重点、难点分析",minChars:1800},{title:"项目主要施工内容",minChars:2200},{title:"主要分部分项工程施工方案",minChars:1200,blockerMinChars:800},{title:"主要施工方法",minChars:2200},{title:"危大工程专项施工方案审批流程",minChars:500,blockerMinChars:250},{title:"原材料进场复试与见证取样",minChars:600,blockerMinChars:300}],c=[];for(let d of a)for(let a of b){let b=(0,z.Xl)(d.content,a.title)||(0,z.Xl)(d.content,a.title,{fuzzy:!0}),e=(0,w.V7)(b);if(!b||e>=a.minChars)continue;let f=function(a){let b=[{title:"项目特点、重点、难点分析",minChars:1800},{title:"项目主要施工内容",minChars:2200},{title:"主要分部分项工程施工方案",minChars:1200,blockerMinChars:800},{title:"主要施工方法",minChars:2200},{title:"危大工程专项施工方案审批流程",minChars:500,blockerMinChars:250},{title:"原材料进场复试与见证取样",minChars:600,blockerMinChars:300}].find(b=>b.title===a);if(!b)return 0;let c=b.blockerMinChars||Math.floor(.8*b.minChars),d=(0,di.ap)(a);return Math.min(c,d>0?d:c)}(a.title);e>=f?c.push({level:"warning",severity:"warning",message:`${d.title} ${a.title} 正文深度接近目标:当前 ${e} 字,目标 ${a.minChars} 字`,suggestion:"已达到可交付深度,建议后续按项目数据继续优化扩写。"}):c.push({level:"error",severity:"blocker",message:`${d.title} ${a.title} 正文不足:当前 ${e} 字,要求不少于 ${f} 字`,suggestion:"关键小节必须补足项目数据、重点难点与施工内容对应关系后方可导出。"})}return c}(e),function(a){let b=[{title:"项目特点、重点、难点分析",minNumericFacts:5,minObjectFacts:8,objectPatterns:[/建筑面积|面积/u,/层|框架结构|既有建筑/u,/结构形式|结构加固|墙体补强|装配式/u,/拆除|改造|装修|装饰/u,/工期|日历天/u,/质量标准|合格/u,/营业商铺|经营区域|场地/u,/管网|防水|室外道排/u,/智能化|弱电|消防|暖通|通风空调|水电/u]},{title:"项目主要施工内容",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/拆除|垃圾外运|既有设施保护/u,/结构加固|墙体补强|框架结构/u,/装饰|装修|基层|面层|环保|阻燃/u,/防水|管网|给排水|阀门|道排/u,/消防|水电|电气|弱电|智能化|通风空调/u,/屋面|立面|室外|附属/u,/施工流程|施工方法|施工顺序|工艺流程/u,/验收|检测|调试|资料闭环/u]},{title:"主要分部分项工程施工方案",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/拆除|垃圾外运|既有设施保护/u,/结构加固|墙体补强|框架结构/u,/装饰|装修|基层|面层|环保|阻燃/u,/防水|管网|给排水|阀门|道排/u,/消防|水电|电气|弱电|智能化|通风空调/u,/屋面|立面|室外|附属/u,/施工流程|施工方法|施工顺序|工艺流程/u,/验收|检测|调试|资料闭环/u]},{title:"主要施工方法",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/拆除|垃圾外运|既有设施保护/u,/结构加固|墙体补强|框架结构/u,/装饰|装修|基层|面层|环保|阻燃/u,/防水|管网|给排水|阀门|道排/u,/消防|水电|电气|弱电|智能化|通风空调/u,/屋面|立面|室外|附属/u,/施工流程|施工方法|施工顺序|工艺流程/u,/验收|检测|调试|资料闭环/u]}];return a.flatMap(a=>b.flatMap(b=>{let c=(0,z.Xl)(a.content,b.title);if(!c)return[];let d=new Set(c.match(/\d+(?:\.\d+)?\s*(?:m²|㎡|平方米|m|mm|层|栋|日历天|天|%|台|套|根|处|个|kg|t|吨)/giu)||[]).size,e=b.objectPatterns.filter(a=>a.test(c)).length,f=[];return d<b.minNumericFacts&&f.push({level:"warning",severity:"warning",message:`${a.title} ${b.title} 参数落位不足:当前 ${d} 个,建议不少于 ${b.minNumericFacts} 个`,suggestion:"关键小节必须写入项目规模、工期、层数、结构、专业工程或验收参数等具体数值。"}),e<b.minObjectFacts&&f.push({level:"warning",severity:"warning",message:`${a.title} ${b.title} 专业事实覆盖不足:当前 ${e} 类,建议不少于 ${b.minObjectFacts} 类`,suggestion:"优先基于当前项目绑定资料补充工程对象、专业范围、重点难点和对应施工内容;不得为满足类别数量编造或混入其他项目事实。"}),f}))}(e),(await eh(e,f)).map(a=>"error"===a.level?{...a,severity:"blocker"}:a)).map(a=>"error"===a.level?{...a,severity:a.severity||"blocker"}:a)}let eF=/章节级证据覆盖较弱|章节事实覆盖不足|小节事实或量化参数落位可继续优化/u;async function eG(a){var b;let{finalChapterDrafts:c,effectiveChapters:d,factsModel:e,allEvidence:f,finalMarkdown:g,validationIssues:h,retrievalCoverageReports:i,includeRetrievalCoverage:j,template:k}=a,l=function(a){let b=a.chapters.map(b=>{let c=function(a){let b=["project"];return/进度|工期|节点|部署/u.test(a.title)&&b.push("schedule"),/质量|验收|材料/u.test(a.title)&&b.push("quality","rules"),/安全|文明|风险|危大/u.test(a.title)&&b.push("safety","rules"),/资源|材料|设备|劳动力|机械/u.test(a.title)&&b.push("resources"),/施工|工艺|技术|方案|清单|工程量|图纸/u.test(a.title)&&b.push("quantities"),[...new Set(b)]}(a.templateChapters.find(a=>a.id===b.id||a.title===b.title)||b),d=c.filter(c=>{var d;return d=a.factsModel,("project"===c?d.project.length>0||d.preciseFacts.length>0:"schedule"===c?d.schedule.length>0:"quality"===c?d.quality.length>0||d.specifications.length>0:"safety"===c?d.safety.length>0||d.rules.length>0:"resources"===c?d.resources.length>0||d.bills.length>0:"quantities"===c?d.bills.length>0||d.drawings.length>0||d.tables.length>0:"rules"===c&&(d.rules.length>0||d.specifications.length>0))||(b.evidence||[]).some(a=>RegExp(cS[c]||c,"u").test(`${a.sectionTitle||""} ${a.content||""}`))}),e=c.filter(a=>!d.includes(a)),f=c.length?Math.round(d.length/c.length*100):100;return{chapterId:b.id,title:b.title,requiredDomains:c,confirmedDomains:d,unconfirmedDomains:e,score:f}}),c=new Set(a.evidence.map(a=>a.filePath).filter(Boolean)),d=b.length?Math.round(b.reduce((a,b)=>a+b.score,0)/b.length):100;return{score:d,evidenceCount:a.evidence.length,confirmedFiles:c.size,chapterReports:b,unconfirmedDomains:[...new Set(b.flatMap(a=>a.unconfirmedDomains))],remediation:d>=95?"知识库事实覆盖已达到高置信交付要求。":"系统需扩大本地知识库检索、补抽结构化事实,并将已确认事实落位到对应章节。"}}({chapters:c,templateChapters:d,factsModel:e,evidence:f}),m=(0,cf.e$)(g,e),n=(b={chapters:c,templateChapters:d,factsModel:e}).chapters.map(a=>{let c=b.templateChapters.find(b=>b.id===a.id||b.title===a.title),d=function(a,b){let c=`${a.title} ${(b?.sections||a.sections||[]).join(" ")}`;return[{key:"structure",label:"结构完整",passed:(a.sections||b?.sections||[]).length>=2||/###\s+/u.test(a.content)},{key:"depth",label:"内容深度",passed:(0,w.V7)(a.content)>=600},{key:"evidence",label:"证据绑定",passed:(a.evidence||[]).length>0},{key:"professional",label:"专业控制点",passed:/验收|复核|检查|交底|控制点|整改|闭环|台账|进场|工序/u.test(a.content)},{key:"schedule",label:"工期支撑",passed:!/进度|工期|节点/u.test(c)||/工期|节点|计划|纠偏|资源|穿插/u.test(a.content)},{key:"quality",label:"质量验收",passed:!/质量|验收/u.test(c)||/质量|验收|复验|隐蔽|检验批|整改/u.test(a.content)},{key:"safety",label:"安全闭环",passed:!/安全|文明|风险|危大/u.test(c)||/风险|检查|整改|应急|培训|交底/u.test(a.content)}]}(a,c),e=d.filter(a=>a.passed).length;return{chapterId:a.id,title:a.title,score:d.length?Math.round(e/d.length*100):100,checks:d,action:e===d.length?"章节覆盖完整。":"系统需补齐章节结构、证据绑定、专业控制点和跨章依赖。"}}),o=c_(h,l.score>=85?[]:[{level:"warning",message:`系统知识库覆盖确认率偏低:${l.score}%`,suggestion:`${l.remediation} 未确认事实域:${l.unconfirmedDomains.map(a=>cS[a]||a).join("、")||"无"}`}],(0,cf.c$)(m,{maxIssues:20}),n.filter(a=>a.score<80).map(a=>({level:"warning",message:`章节覆盖不足:${a.title} ${a.score}%`,suggestion:`${a.action} 未通过项:${a.checks.filter(a=>!a.passed).map(a=>a.label).join("、")}`})),j?i.filter(a=>a.risk.highRisk&&(0===a.requiredFactTotal?a.evidenceCount<8:a.requiredFactCovered<a.requiredFactTotal)).map(a=>({level:"warning",message:`系统知识库召回覆盖需复核:${a.chapterTitle}`,suggestion:`知识库总切片 ${a.risk.totalChunks},当前预加载 ${a.risk.loadedChunks}${a.risk.riskReason?`(${a.risk.riskReason})`:""},已启用深召回;事实覆盖 ${a.requiredFactCovered}/${a.requiredFactTotal},小节覆盖 ${a.sectionCovered}/${a.sectionTotal}。`})):[]);o=o.map(a=>eF.test(a.message)&&"warning"===a.level?{...a,level:"info"}:a);let p=(0,cW.Ah)((0,cV.aF)(g))?.profile.fiveElementCompleteBlocks,q=await cU({markdown:g,chapters:c,issues:o,knowledgeCoverage:l,factTraces:m,template:k,referenceCompleteBlocks:p}),r=function(a){let b=[],c=a.issues.filter(a=>"error"===a.level);c.length>0&&b.push({priority:"high",title:"阻断问题修复",action:`修复 ${c.length} 个导出阻断问题,优先处理事实冲突、结构缺失、模板规则违规和占位残留。`});let d=(a.factTraces||[]).filter(a=>"unplaced"===a.status&&(0,cf.O7)(a));if(d.length>0){let a=d.length>12?`${d.length} 项(示例:${d.slice(0,8).map(a=>a.label).join("、")} 等)`:`${d.length} 项(${d.map(a=>a.label).join("、")})`;b.push({priority:"high",title:"事实落位修复",action:`将 ${a} 已确认知识库事实写入对应章节,保持原始数值、单位和来源口径。`})}a.knowledgeCoverage&&a.knowledgeCoverage.score<95&&b.push({priority:"medium",title:"知识库确认覆盖修复",action:"扩大本地知识库检索范围,执行事实补抽和章节证据重分配;这是系统检索、抽取、落位问题,不要求用户追加资料。"});let e=(a.chapterCoverage||[]).filter(a=>a.score<80);if(e.length>0){let a=e.length>10?`${e.slice(0,8).map(a=>a.title).join("、")} 及其他${e.length-8}章`:e.map(a=>a.title).join("、");b.push({priority:"medium",title:"章节覆盖修复",action:`补齐低覆盖章节(${e.length}章):${a}。`})}return a.qualityReport&&!a.qualityReport.passed&&b.push({priority:"medium",title:"交付置信度修复",action:a.qualityReport.actions.join(" ")}),b}({issues:o,qualityReport:q,knowledgeCoverage:l,factTraces:m,chapterCoverage:n});o=c_(o,q.passed?[]:[{level:"info",message:`交付置信度未达目标:${q.deliveryProbability}% / ${q.target}%`,suggestion:q.actions.join(" ")}],r.filter(a=>"high"===a.priority).map(a=>({level:"info",message:`修复策略待执行:${a.title}`,suggestion:a.action})));let s=(0,x.Ai)(o,e,c);return{knowledgeCoverage:l,factTraces:m,chapterCoverage:n,qualityReport:q,repairStrategies:r,validationIssues:o,finalExportGate:s}}async function eH(a){let b,{chapterDraftsByOrder:c,chapterGenerationStagesByOrder:e,chapterGenerationStages:f,effectiveChapters:g,template:h,allEvidence:i,projectMaterialScope:j,progressStages:k,documentSpec:l,projectMaterialSummary:m,domainProfile:n,documentBudget:o,input:p,generationDiagnostics:q,promptTexts:r,promptBindings:t,promptDocumentRules:y,projectRoot:A,projectId:B,readiness:C,factExtractionPromptTexts:D,hasExplicitOutline:E,missingItems:F,retrievalCoverageReports:G,failedChapterMessages:H,webResearchReport:I,indexHealth:J,agentWorkflow:K,globalConsistencyIssues:L,scopeConflicts:M,writingTaskBrief:N,evaluationCriteriaItems:O,tenderRequirements:P,requirementsSimilarity:Q,factTokenScopeClassifier:S,professionalDepthClassifier:T,emitProgress:U,withProgressHeartbeat:V}=a,{signal:W,requirement:X}=p,Y=c.filter(a=>!!a);if(f.push(...e.filter(a=>!!a)),0===Y.length)throw Error(`章节生成未完成:${H.join(";")||"没有生成任何有效章节"}`);if(E&&Y.length<g.length)throw Error(`OUTLINE 指定 ${g.length} 章,实际只生成 ${Y.length} 章:${H.join(";")||"部分章节未生成"}`);let Z=aa(Y.flatMap(a=>a.evidence||[]),j);ac(Z,j,"finalize:chapter-evidence"),Z.length>0&&(i.push(...Z),i.splice(0,i.length,...(0,s.QR)(i,{preservePinned:!0})));let $=aa(i,j);i.splice(0,i.length,...$),ac(i,j,"finalize:all-evidence"),(0,z.Te)(W);let _=(0,s.QR)(i,{preservePinned:!0});i.splice(0,i.length,...aa(_,j)),ac(i,j,"finalize:post-file-understanding");let ad=function(a,b,c){let d={};for(let e of(0,u.Uy)(a,c)){let a=b.find(a=>(0,u.I2)(a,e));a&&(d[e.name]=`${a.content.replace(/\s+/gu," ")}(来源:${a.filePath},角色:${a.roleId||"未标注"})`)}return d}(h,i,l),{localFacts:ae,projectBasicFacts:ag,preciseFacts:ah,structuredTables:ai}=as({evidence:i,template:h,spec:l,profile:n,scope:j,diagnostics:q}),aj={facts:[],stages:[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"已有本地/资料事实覆盖主要必需字段,跳过 LLM 全量事实抽取"}]};if(function(a,b,c){let d=(0,u.Uy)(b,c).filter(a=>a.required);return 0===d.length?a.filter(a=>a.confidence>=.75&&(0,z.lG)(a.value).trim().length>=2).length<12:d.filter(b=>a.some(a=>(function(a,b){let c=(0,z.lG)(a.value).trim();if(!c||c.length<2||c.length>220&&a.confidence<.8)return!1;let d=`${a.fieldId||""} ${a.fieldName||""} ${a.key}`.toLowerCase();return!!(d.includes(b.id.toLowerCase())||d.includes(b.name.toLowerCase()))&&("project_basic_fact"===a.roleId||a.roleId?.startsWith("role-")||a.sourceRef?.filePath?a.confidence>=.55:a.confidence>=.75)})(a,b))).length/d.length<.9}([...ae,...ag,...ah],h,l)){let a=(0,s.QR)(i,{preservePinned:!0});try{aj=await af(a,D,h,l,W,q)}catch(a){if(W?.aborted)throw a;console.error("[gen] fact extraction failed:",a)}}for(let a of aj.stages)(0,bu.fx)(k,a);let ak=ab((aF=[...ae,...ag,...ah,...aj.facts],aF.filter(a=>!!a.sourceFile)),j),al=dg(ak,M??dd(ak));for(let a of al)ad[a.key]=`${(0,z.lG)(a.value)}(来源:${a.sourceFile},角色:${a.roleId})`;let am=await aD(al,ai,F,l,n),an=(0,b2.GG)(am),ao=Y.map(a=>{let b=l.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=(b?.requiredFactIds||[]).map(a=>l.factFields.find(b=>b.id===a)?.name).filter(Boolean),d=[...new Set([...a.missingFacts||[],...c].filter(Boolean))],e=d.filter(b=>!a.missingFacts.includes(b)),f=d.filter(b=>a.missingFacts.includes(b));return{chapterId:a.id,title:a.title,requiredFacts:d,coveredFacts:e,missingFacts:f,evidenceCount:a.evidence.length}}),ap=function(a,b=[],c){let e=[],f=[];for(let b of a)0===b.evidence.length&&e.push(`${b.title} 未检索到资料证据`),b.content.length<80&&e.push(`${b.title} 内容较短,建议人工补充或重新生成`);return c&&a.length<c.chapters.length&&f.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===(0,d.zY)(c).length&&f.push("模板未绑定任何提示词"),{passed:0===f.length,warnings:e,errors:f}}(Y,al,h);ap.warnings=[...ap.warnings,...C.warnings],ap.errors=[...ap.errors,...C.blockingIssues];let aq=[...i.reduce((a,b)=>a.set(b.filePath,(a.get(b.filePath)??0)+1),new Map).entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),ar=new Map;for(let a of i)ar.set(a.source||"unknown",(ar.get(a.source||"unknown")??0)+1);let at=c_((0,by.w9)(ap,am,Y),function(a){let b=[];for(let c of a)0===c.evidenceCount?b.push({level:"error",message:`章节缺少证据:${c.title}`,suggestion:"请补充对应绑定材料或调整模板章节检索词。"}):c.missingFacts.length>0&&b.push({level:"warning",message:`章节事实覆盖不足:${c.title},缺失 ${c.missingFacts.slice(0,6).join("、")}`,suggestion:"建议补充章节 requiredFacts 或绑定材料证据。"});return b}(ao),(L||[]).filter(a=>!/^跨章一致性冲突|^工序规格冲突/u.test(a)).slice(0,10).map(a=>({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨章一致性复核:${a}`,suggestion:"跨章数值口径不一致属低级错误,必须定向修复统一口径后重新校验。"}))),au=Y.map(a=>a.content).join("\n\n");at=c_(at,dW(au,ak,{maxIssues:20}).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议 Agent Writer 在章节生成阶段优先落位可信基础事实;导出阶段不因未落位的低置信或泛化事实阻断。"})));let av=Math.max(0,g.length-Y.length);at=c_(at,[...av>0?[{level:"error",severity:"blocker",message:`部分章节生成失败:${av} 章`,suggestion:H.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。"}]:[]]);let aw=await Promise.all(Y.map(async a=>{let b=g.find(b=>b.id===a.id);if(!b)return[];let c=await bM({chapter:b,content:a.content,evidence:a.evidence||[]});return c.length>0?[{level:"warning",message:`${a.title} 小节事实或量化参数落位可继续优化:${c.slice(0,5).join(";")}`,suggestion:"建议在 Agent Writer 阶段扩大定向证据,不得在导出阶段补写。"}]:[]}));at=c_(at,aw.flat());let ax=[],ay=[...k];for(let a of f)(0,bu.fx)(ay,a);let az=function(a,b=300){if(a.length<=b)return a;let c=b-4-1;if(c<=0)return a.slice(-b);let d=a.slice(0,4),e=a.slice(-c),f=a.slice(4,a.length-c),g=f.filter(a=>"failed"===a.status).length;return[...d,{type:"validation",roleId:"stage-archive",status:g>0?"failed":"success",message:`已归档 ${f.length} 个中间执行阶段${g>0?`(含 ${g} 个失败记录)`:""}`,details:f[0]?.subtitle?[`归档区间:${f[0].subtitle} → ${f[f.length-1]?.subtitle||""}`]:[]},...e]}(ay);(0,bu.fx)(az,(0,bu.X5)({type:"reference",roleId:"knowledge-usage-report",status:"success",message:`资料使用报告:证据 ${i.length} 条,来源文件 ${aq.length} 份,结构化事实 ${ak.length} 条`,details:[`证据类型:${[...ar.entries()].map(([a,b])=>`${a} ${b}`).join(",")||"无"}`,`索引健康:可用切片 ${J.usableChunkCount} 条,待索引 ${J.pendingJobs} 个,向量 ${J.vectorStatus?.status||"unknown"}`]},{subtitle:"资料使用报告"})),(0,bu.fx)(az,(0,bu.X5)({type:"reference",roleId:"web-research-report",status:I.enabled?"success":"skipped",message:I.enabled?`联网增强:检索章节 ${new Set(I.chapters).size} 个,查询 ${I.queries.length} 个,使用公开资料 ${I.evidenceCount} 条`:"联网增强未开启",details:I.enabled?[`检索主题:${[...new Set(I.queries)].join(";")||"无"}`,`过滤结果:${I.filteredCount} 条`,"公开资料仅用于通用规范、政策、工艺和措施补充,不作为项目事实来源"]:["可在模型配置中开启联网增强"]},{subtitle:"联网增强报告"}));let aA=(0,v.rs)((0,v.V3)({templateId:h.id,templateName:h.name,title:h.outputTitle,requirement:X||"",projectRoot:A,projectId:B,exportSettings:h.exportSettings,generationSettings:h.generationSettings,facts:ad,structuredFacts:ak,factsModel:am,chapters:Y,sources:aq,missingItems:[...new Set(F)],validation:ap,validationIssues:at,executionStages:az,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:ax,partialChapters:Y.map(a=>({id:a.id,title:a.title,chars:(0,w.V7)(a.content),status:dk(a,o.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:Y,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:y}),Y,{forbidDrawingImages:!1,promptRules:y}).chapters.map(a=>{let b=g.find(b=>b.id===a.id)||a;return{...a,sections:a.sections||[],content:dP(a.content,b)}}),aB=(0,v.rs)((0,v.V3)({templateId:h.id,templateName:h.name,title:h.outputTitle,requirement:X||"",projectRoot:A,projectId:B,exportSettings:h.exportSettings,generationSettings:h.generationSettings,facts:ad,structuredFacts:ak,factsModel:am,chapters:aA,sources:aq,missingItems:[...new Set(F)],validation:ap,validationIssues:at,executionStages:az,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:ax,partialChapters:[],checkpointChapters:aA,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:y}),aA,{forbidDrawingImages:!1,promptRules:y}).markdown;aB=dQ(eA((0,v.bR)((0,v.kT)((0,v.K7)(ey(dD(aB,ak),m)))),h));let aC="1"===process.env.DOCUMENT_FINALIZE_ENTRY_FIX?await (0,x.KI)(aA,am,M):{fixedCount:0,details:[]},aE=(await (0,x.Yb)(aB,am,M)).fixedCount>0;if(aC.fixedCount>0||aE){var aF,aG,aH;aB=dQ(eA((0,v.bR)((0,v.kT)((0,v.K7)(ey(dD(eD({template:h,requirement:X,projectRoot:A,projectId:B,facts:ad,structuredFacts:ak,factsModel:am,chapters:aA,sources:aq,missingItems:F,validation:ap,validationIssues:at,executionStages:az,assets:ax,promptDocumentRules:y}),ak),m)))),h));let a=await (0,x.Yb)(aB,am,M);a.fixedCount>0&&(aB=a.markdown);let b=aC.fixedCount+a.fixedCount,c=[...new Set([...aC.details,...a.details])];for(let a of c.map(a=>({caseType:"deterministic_fix",recordedAt:Date.now(),fixName:"applyDeterministicConsistencyFixes",detail:a})))c2("deterministic-fix-cases.jsonl",a);(0,bu.fx)(az,(0,bu.X5)({type:"validation",roleId:"deterministic-consistency-fix",status:"success",message:`跨章一致性数值定点修复:${b} 处(${c.slice(0,4).join("、")})`,details:c.slice(4)},{subtitle:"跨章一致性修复"}))}let aI=c8({facts:ak,markdown:aB});aI.size>0&&az.push({type:"fact_extraction",roleId:"canonical-facts",status:"success",message:`已决策可信基础事实 ${aI.size} 项`,details:[...aI.values()].map(a=>`${a.label}=${a.value}(${a.source},confidence=${a.confidence})`).slice(0,12)});let aJ=at,aK="0"!==process.env.DOCUMENT_CONSISTENCY_REVIEW_SNAPSHOT,aL=aK?(aG={signal:W,diagnostics:q},async a=>{let c=(0,z.c6)(a);if(b?.markdownHash===c)return b.conflicts;aG.diagnostics&&(aG.diagnostics.llm.lastError=void 0);let d=await b9(a,{signal:aG.signal,diagnostics:aG.diagnostics});return aG.diagnostics?.llm.lastError===void 0&&(b={markdownHash:c,conflicts:d}),d}):async a=>b9(a,{signal:W,diagnostics:q}),aM=aK?aL(aB):void 0;aM?.catch(()=>void 0);let aN="0"!==process.env.DOCUMENT_DATA_CONSISTENCY_BATCH_REVIEW;at=await eE({documentSpec:l,validationIssues:at,factsModel:am,finalChapterDrafts:aA,finalMarkdown:aB,template:h,promptBindings:t,promptDocumentRules:y,projectMaterialSummary:m,domainProfile:n,structuredFacts:ak,documentBudget:o,scopeConflicts:M,evaluationCriteriaItems:O,effectiveChapters:g,tenderRequirements:P,requirementsSimilarity:Q,factTokenScopeClassifier:S,professionalDepthClassifier:T});let aO=await eG({finalChapterDrafts:aA,effectiveChapters:g,factsModel:am,allEvidence:i,finalMarkdown:aB,validationIssues:at,retrievalCoverageReports:G,includeRetrievalCoverage:!0,template:h}),{knowledgeCoverage:aP,factTraces:aQ,chapterCoverage:aR,qualityReport:aS,repairStrategies:aT,finalExportGate:aU}=aO;at=aO.validationIssues;let aV=[],aW=new Set,aX=[],aY=async()=>{let a=aJ.filter(a=>![...aW].some(b=>{let[c,d]=b.split("::");var e=a.message;if(!/空小节|小节内容补写未完成|小节生成未达标|小节只有标题|正文小节正文过短|规划小节正文过短|缺少规划小节|缺少[“"'].+[”"']小节|正文不足|小节缺失或标题结构异常|分部分项工程施工方案/u.test(e))return!1;let f=d.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");if(RegExp(`^\\s*${f}\\s*正文不足,未达到任务最小深度$`,"u").test(e)||/缺少[“"'][^”"']+[”"']小节/u.test(e)&&e.includes(d))return!0;let g=d.replace(/^(?:项目|主要)/u,"").replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");return e.includes(c)&&(e.includes(d)||g!==f&&e.includes(g))})&&!/已确认事实未在正文中落位/u.test(a.message)&&!(/概况段跨章复述/u.test(a.message)&&!/本项目为|本工程为|该项目为|该工程为/u.test(aB))&&!(/后台内部术语|后台内部话术/u.test(a.message)&&!/工作包|事实卡|事实主表|后台数据库|落位|峰值口径|控制口径|数据口径/u.test(aB)));at=[...at=await eE({documentSpec:l,validationIssues:a,factsModel:am,finalChapterDrafts:aA,finalMarkdown:aB,template:h,promptBindings:t,promptDocumentRules:y,projectMaterialSummary:m,domainProfile:n,structuredFacts:ak,documentBudget:o,scopeConflicts:M,evaluationCriteriaItems:O,effectiveChapters:g,tenderRequirements:P,requirementsSimilarity:Q,factTokenScopeClassifier:S,professionalDepthClassifier:T}),...aX],aO=await eG({finalChapterDrafts:aA,effectiveChapters:g,factsModel:am,allEvidence:i,finalMarkdown:aB,validationIssues:at,retrievalCoverageReports:G,includeRetrievalCoverage:!1,template:h}),({knowledgeCoverage:aP,factTraces:aQ,chapterCoverage:aR,qualityReport:aS,repairStrategies:aT,finalExportGate:aU}=aO),at=aO.validationIssues},aZ=Date.now();for(let b=0;b<3;b+=1){let b=Array.from(new Map([...aU.blockingIssues,...at.filter(a=>"error"===a.level)].map(a=>(function(a){let b=/^(.*?)(?:\s+|)(?:空小节|小节内容补写未完成|小节生成未达标|小节只有标题|只有标题或表格无正文|规划小节正文过短|正文小节正文过短|缺少规划小节|正文不足)[::,,]\s*(.+)$/u.exec(a.message),c=/^(.*?)\s+(项目特点、重点、难点分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试与见证取样)\s+正文不足/u.exec(a.message),d=/^(.+?)\s*正文不足,未达到任务最小深度$/u.exec(a.message),e=/^(?:施工组织设计\s*)?缺少[“"'](.+?)[”"']小节$/u.exec(a.message),f=/^(.*?)\s+(主要施工内容|分部分项工程施工方案)小节缺失或标题结构异常$/u.exec(a.message),g=/^(.*?)\s+分部分项工程施工方案/u.exec(a.message);if(!b&&!e&&!f&&!g)return;let h=c?c[1].trim():d||e?"":f?f[1].trim():g?g[1].trim():b[1].trim(),i=c?c[2]:d?d[1].trim():e?e[1].trim():f?"主要施工内容"===f[2]?"项目主要施工内容":"主要分部分项工程施工方案":g?"主要分部分项工程施工方案":b[2].split(/[::,,,]/u)[0].trim();return{issue:a,chapterTitle:h,sectionTitle:i,critical:/项目特点.*重点.*难点|重点.*难点.*分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试与见证取样/u.test(i)}})(a)).filter(a=>!!a).map(a=>[`${a.chapterTitle}::${a.sectionTitle}`,a])).values()).sort((a,b)=>Number(b.critical)-Number(a.critical));if(0===b.length)break;let c=[],d=[],e=new Map;for(let{issue:a,chapterTitle:f,sectionTitle:h}of b){let b=f,i=b?aA.findIndex(a=>a.title===b||b.includes(a.title)||a.title.includes(b)):-1;i<0&&(i=aA.findIndex(a=>(a.content||"").includes(h))),i<0&&(i=aA.findIndex(a=>(g.find(b=>b.id===a.id||b.title===a.title)?.sections||[]).some(a=>a.includes(h)||h.includes(a))));let j=aA[i],k=g.find(a=>a.id===j?.id||a.title===j?.title);if(i<0||!j||!k){c.push(`失败:${b}/${h} 未定位到章节`);continue}b=b||j.title;let l=e.get(i);void 0===l?(e.set(i,d.length),d.push({chapterIndex:i,items:[{issue:a,chapterTitle:b,sectionTitle:h}]})):d[l].items.push({issue:a,chapterTitle:b,sectionTitle:h})}let f=Math.max(1,Math.min(6,Number(process.env.DOCUMENT_FINAL_GATE_REPAIR_CONCURRENCY||3)));for(let b=0;b<d.length;b+=f){let e=d.slice(b,b+f);await Promise.all(e.map(async({chapterIndex:b,items:d})=>{let e=aA[b],f=g.find(a=>a.id===e.id||a.title===e.title);for(let{issue:g,chapterTitle:j,sectionTitle:l}of d){let d=aA[b],m=(0,bu.X5)({type:"llm_review",roleId:`agent-final-gate-repair-${e.id}`,status:"running",message:`Final Gate 正在补写空小节:${j} / ${l}`,details:c},{subtitle:"Final Gate Repair"});(0,bu.fx)(k,m),(0,bu.fx)(aV,m),U(aA,k);let n=(0,by.ap)(l),o=Math.max(620,n>0?Math.ceil(n/.7):620),p=q.llm.lastError;q.llm.lastError=void 0;let s=await V(()=>(0,by.mF)({template:h,chapter:f,sectionTitle:l,evidence:e.evidence?.length?e.evidence:i,missingFacts:[],promptTexts:r,projectContext:a.chapterScopedContext?a.chapterScopedContext(f):a.projectContext,compactProjectContext:!0,scopedProjectContext:!!a.chapterScopedContext,requirement:X,roleContext:"Final Gate 空小节定向修复",targetWords:o,maxWords:Math.ceil(1.32*o),forbidDrawingImages:!1,qualityFeedback:function(a,b){let c=z.V.test(a)?`该小节按专业工程/分项工程方案组织,每个 #### 分项方案必须按“施工概况(作业对象、部位、工程量)”“施工流程(工序顺序表达串联工序链)”“施工方法(工具机具、材料规格、工艺参数、验收标准)”三段展开,“施工概况”“施工流程”“施工方法”三个标签必须在每个分项方案正文中逐字出现。标签形态要求:三个标签必须写成纯文本行首形态(如“施工概况:”),严禁粗体包裹(**施工概况**:)或重复前缀(施工概况:**施工概况**:)。每个分项方案的施工流程段至少 1 条不少于 4 个环节的工序顺序表达(箭头链、编号步骤、有序/无序列表或顺序词叙述均可,如“基层清理→放线定位→分层施工→养护→验收”),施工方法段内也必须包含一条工序顺序表达。每个分项方案至少 4 个带单位工艺参数,小分项(拆除、门窗维修、立面修补等)同样必须写足,参数类型参考:拆除面积㎡、垃圾外运量t、外运距离km、日拆除进度㎡/天、更换数量樘、启闭力N、胶缝宽度mm、安装偏差mm。`:"";return`Final Gate 发现“${a}”为空小节或深度不足。请基于证据完整重写该小节正式正文(原小节内容将被整体替换),包含检查责任、验收节点、资料闭环、整改复验要求,不得输出占位或解释。量化参数只引用与本小节直接相关的具体数字(工期、工程量、材料规格、强度等级等);禁止以“本项目为……”开头整段复述项目概况(建设地点、总建筑面积、层数、总工期等总述信息只在概况类小节集中交代一次),正文直接切入本小节专业内容。${c}${b?`此前生成被拒原因:${b},必须逐条修正。`:""}`}(l,p),diagnostics:q,signal:W,allowLenientStructureGate:!0})),t=!1,u=/正文不足|缺少[“"'].+[”"']小节|小节缺失或标题结构异常/u.test(g.message)?n:0;if(s&&(0,w.V7)(s)>=(u||80)){let a=/小节缺失或标题结构异常/u.test(g.message),e=a?d.content:function(a,b,c){let d=a=>a.replace(/[\u00a0\u3000]/gu," ").replace(/^\d+(?:\.\d+)*\s+/u,"").trim(),e=a=>a.trim().replace(/^#{2,6}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]+\n+/u,"").trim(),f=a.split("\n"),g=a=>(0,z.VX)(a,b),h=a=>{let b=/^(#{3,4})\s+(.+)$/u.exec(f[a].trim());if(!b||3!==b[1].length)return!1;for(let b=a+1;b<f.length;b+=1){let a=f[b].trim();if(/^#{2,3}\s+/u.test(a))break;if(/^####\s+/u.test(a))return!0}return!1},i=0;for(let j=0;j<f.length;j+=1){let k=f[j],l=i;i+=k.length+1;let m=/^(#{3,4})\s+(.+)$/u.exec(k.trim());if(!m)continue;let n=d(m[2]),o=n===b||n.includes(b);if(!o&&!g(n)||!o&&g(n)&&h(j))continue;let p=m[1].length,q=(z.V.test(n)||z.V.test(b))&&3===p?/^#{2,3}\s+/u:/^#{2,4}\s+/u,r=f.length;for(let a=j+1;a<f.length;a+=1)if(q.test(f[a].trim())){r=a;break}let s=r<f.length?f.slice(0,r).join("\n").length:a.length,t=e(c);return`${a.slice(0,l)}${k.trim()}
|
|
95
95
|
|
|
96
96
|
${t}${a.slice(s)}`}return a}(d.content,l,s);if(!(t=!a&&e!==d.content)&&(a||/(?:缺少规划小节|缺少[“"'].+[”"']小节)/u.test(g.message))){let a=`${d.content.replace(/\s+$/u,"")}
|
|
97
97
|
|
|
98
98
|
### ${l}
|
|
99
99
|
|
|
100
100
|
${s.replace(/^#{2,6}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]+\n+/u,"").trim()}
|
|
101
|
-
`;t=!0,
|
|
101
|
+
`;t=!0,aA[b]={...d,content:dP(a,f)},aW.add(`${j}::${l}`),c.push(`成功:${j}/${l}(${(0,w.V7)(s)}字,追加为缺失小节)`)}else t?(aA[b]={...d,content:dP(e,f)},aW.add(`${j}::${l}`),c.push(`成功:${j}/${l}(${(0,w.V7)(s)}字)`)):c.push(`失败:${j}/${l}(未定位到原小节块)`)}else{let a=(0,w.V7)(s||"");c.push(`失败:${j}/${l}(${a>0&&a<(u||80)?`补写仅 ${a} 字,未达 ${u||80} 字验收线`:q.llm.lastError||"空响应"})`)}let v=(0,bu.X5)({type:"llm_review",roleId:`agent-final-gate-repair-${e.id}`,status:t?"success":"failed",message:t?`Final Gate 空小节修复完成:${j} / ${l}`:`Final Gate 空小节修复失败:${j} / ${l}`,details:c},{subtitle:"Final Gate Repair"});(0,bu.fx)(k,v),(0,bu.fx)(aV,v),U(aA,k)}}))}aB=dQ(eA((0,v.bR)((0,v.kT)((0,v.K7)(ey(dD(eD({template:h,requirement:X,projectRoot:A,projectId:B,facts:ad,structuredFacts:ak,factsModel:am,chapters:aA,sources:aq,missingItems:F,validation:ap,validationIssues:at,executionStages:az,assets:ax,promptDocumentRules:y}),ak),m)))),h)),await aY()}let a$=dV(aB,[...ak,...am.preciseFacts]);if(a$.length>0){let a=[[/项目名称|工程名称|项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|施工范围/u,/概况|基本信息|概述|总述|简介/u],[/计划工期|合同工期/u,/工期|进度|施工部署|总体部署|流水/u],[/质量标准|质量目标/u,/质量/u],[/危大|安全/u,/安全/u],[/资源|材料|机械|设备|机具/u,/资源|投入|物资|机械|设备|机具|周转/u]],b=new Map,c=[];for(let d of a$){let e=a.find(([a])=>a.test(d.label)),f=e?aA.find(a=>e[1].test(a.title)):void 0;if(!f){c.push(`${d.label}=${d.value}`);continue}let g=b.get(f.id)||[];g.push({label:d.label,value:d.value}),b.set(f.id,g)}let d=0;for(let[a,e]of b){let b=aA.findIndex(b=>b.id===a);if(b<0)continue;let f=aA[b],i=g.find(a=>a.id===f.id||a.title===f.title),j=(0,bu.X5)({type:"llm_review",roleId:`agent-fact-landing-${a}`,status:"running",message:`正在落位 ${e.length} 条重要事实:${f.title}`,details:[...e.map(a=>`${a.label}=${a.value}`),...c.map(a=>`跳过:${a}(无匹配章节)`)]},{subtitle:"事实落位修复"});(0,bu.fx)(k,j),(0,bu.fx)(aV,j),U(aA,k);let l=["【事实落位定向修复】\n下列资料事实是项目硬数据,当前正文未出现。请逐条定位到本章最合适的位置(项目概况引导段、项目基本信息表对应行或对应小节),以局部 patch 方式自然写入,保持原始数值、单位与表述口径,不得改写、换算或编造。\n不得新增、删除或合并小节;表格内补充必须保持表头结构不变;只修改与落位事实直接相关的局部文本。",e.map(a=>`- ${a.label}=${a.value}`).join("\n")].join("\n"),m=await V(()=>(0,bv.l8)({template:h,chapter:{id:f.id,title:f.title,content:f.content,evidence:f.evidence,missingFacts:f.missingFacts,sections:f.sections},issues:e.map(a=>`已确认事实未在正文中落位:${a.label}=${a.value}`),promptTexts:l,requirement:X,forbidDrawingImages:!1,diagnostics:q,signal:W}));m.content&&m.content!==f.content&&(aA[b]={...f,content:i?dP(m.content,i):m.content},d+=m.appliedCount);let n=(0,bu.X5)({type:"llm_review",roleId:`agent-fact-landing-${a}`,status:m.appliedCount>0?"success":"failed",message:m.appliedCount>0?`重要事实落位完成:${f.title}(${m.appliedCount} 处 patch)`:`重要事实落位未生效:${f.title}`,details:e.map(a=>`${a.label}=${a.value}`)},{subtitle:"事实落位修复"});(0,bu.fx)(k,n),(0,bu.fx)(aV,n),U(aA,k)}d>0&&(aB=dQ(eA((0,v.bR)((0,v.kT)((0,v.K7)(ey(dD(eD({template:h,requirement:X,projectRoot:A,projectId:B,facts:ad,structuredFacts:ak,factsModel:am,chapters:aA,sources:aq,missingItems:F,validation:ap,validationIssues:at,executionStages:az,assets:ax,promptDocumentRules:y}),ak),m)))),h)),await aY())}let a_=(0,x.NS)(aB).filter(a=>"error"===a.level&&/空单元格|占位符单元格|列数不一致|分隔线位置不规范/u.test(a.message));if(a_.length>0){let a=0,b=[],c=new Map;for(let a=0;a<a_.length;a+=1){let d=a_[a],e=(d.message.split(":")[1]||"").split("(")[0]?.split("、")[0]||"",f=/([“"']?([^”"'))]{2,30})[”"']?行/u.exec(d.message)?.[1]||"",g=e?aA.findIndex(a=>{let b=a.content||"";return b.includes(e)&&(!f||b.includes(f))}):-1;if(g<0)continue;let h={chapterIndex:g,issueIndex:a,message:d.message,suggestion:d.suggestion||"",tableAnchor:e},i=c.get(g);void 0===i?(c.set(g,b.length),b.push([h])):b[i].push(h)}let d=Math.max(1,Math.min(4,Number(process.env.DOCUMENT_TABLE_FIX_CONCURRENCY||2)));for(let c=0;c<b.length;c+=d){let e=b.slice(c,c+d);await Promise.all(e.map(async b=>{for(let{chapterIndex:c,issueIndex:d,message:e,suggestion:f,tableAnchor:i}of b){let b=aA[c],j=g.find(a=>a.id===b.id||a.title===b.title),l=(0,bu.X5)({type:"llm_review",roleId:`agent-table-fix-${b.id}-${d}`,status:"running",message:`正在修复表格数据缺失:${b.title}`,details:[e]},{subtitle:"表格数据修复"});(0,bu.fx)(k,l),(0,bu.fx)(aV,l),U(aA,k);let m=eB(b.content,i)||eB(aB,i)||"",n=`【表格数据完整性定向修复】
|
|
102
102
|
下列表格存在数据缺失缺陷:正式交付文档的表格不得出现空单元格,也不得用“—/若干/约/待定”等占位或模糊表达代替具体数据。
|
|
103
103
|
缺陷表格原文(只允许修改这一张表,逐格修复;不得改动其他表格与小节):
|
|
104
104
|
${m.slice(0,2e3)}
|
|
@@ -111,12 +111,12 @@ ${m.slice(0,2e3)}
|
|
|
111
111
|
修复后表格原文(逐格检查仍然为空的单元格,立即填入具体值):
|
|
112
112
|
${c.slice(0,2e3)}
|
|
113
113
|
空单元格所在列若正文已有对应内容(如“验收标准”列),从本节正文对应段落逐项摘录填入;正文没有的按专业惯例推算具体值;无法推算的删除该行并说明原因。
|
|
114
|
-
合计/小计/总计/累计行空单元格填“—”;表名占用表头第一格时必须移出表格。`,e=await V(()=>(0,bv.l8)({template:h,chapter:{id:b.id,title:b.title,content:p,evidence:b.evidence,missingFacts:b.missingFacts,sections:b.sections},issues:a.map(a=>a.message),promptTexts:d,requirement:X,forbidDrawingImages:!1,diagnostics:q,signal:W}));e.content&&e.content!==p&&(p=e.content)}}(p=function(a,b){let c=eB(a,b);if(!c)return{content:a,removed:0};let d=eC(c.split(/\r?\n/u));return d.removed>0?{content:a.replace(c,d.lines.join("\n")),removed:d.removed}:{content:a,removed:0}}(p,i).content)!==b.content&&(az[c]={...b,content:j?dP(p,j):p},a+=1);let r=(0,x.NS)(p).some(a=>"error"===a.level&&/空单元格|占位符单元格|列数不一致/u.test(a.message)&&a.message.includes(i)),s=(0,bu.X5)({type:"llm_review",roleId:`agent-table-fix-${b.id}-${d}`,status:r?"failed":"success",message:r?`表格数据修复未生效:${b.title}`:`表格数据修复完成:${b.title}`,details:[e]},{subtitle:"表格数据修复"});(0,bu.fx)(k,s),(0,bu.fx)(aU,s),U(az,k)}}))}a>0&&(aA=dQ(eA((0,v.bR)((0,v.kT)((0,v.K7)(ey(dD(eD({template:h,requirement:X,projectRoot:A,projectId:B,facts:ad,structuredFacts:ak,factsModel:am,chapters:az,sources:ap,missingItems:F,validation:ao,validationIssues:ar,executionStages:ay,assets:aw,promptDocumentRules:y}),ak),m)))),h)),await aX())}q.metrics.push({name:"phase:final-gate",startedAt:aY,endedAt:Date.now(),durationMs:Date.now()-aY});let a_=/封面|页眉|页脚|附图|图片引用|CAD图|示意图|插图/u,a0=aL?await aL:await aK(aA);if(a0.length>0){let a=new Set,b=a0.map(a=>ca(a)).filter(b=>{let c=cb(b.message);return!(!c||a.has(c))&&(a.add(c),!0)});ar=[...ar,...b]}let a1=b7({facts:[...ae,...ag,...ah],evidence:i});a1.length>0&&(ar=[...ar,...cd(aA,a1).map(a=>ce(a))]);let a2=/属地创优目标缺失|四节一环保量化指标缺失|工伤保险表述缺失/u,a3=(()=>{let a=ar.filter(a=>"error"===a.level&&!a_.test(a.message)&&!/表格|标题重复|目录/u.test(a.message)),b=a.filter(a=>!a2.test(a.message));return[...a.filter(a=>a2.test(a.message)),...b]})(),a4=a=>(a.content||"").replace(/[\s,,]/gu,""),a5=[{code:"source-phrase",match:/资料来源罗列话术/u},{code:"internal-term",match:/后台内部术语|后台内部话术/u},{code:"overview-recap",match:/概况段跨章复述/u},{code:"fact-verification",match:/生成后事实反查失败/u},{code:"major-content-dirty",match:/主要施工内容存在脏事实或标题污染/u},{code:"major-content-flow",match:/主要施工内容存在.*流程污染/u},{code:"major-content-method",match:/主要施工内容存在.*施工方法过弱/u},{code:"major-content-dup",match:/主要施工内容存在.*重复专业工程小节/u},{code:"duplicate-subsection",match:/同名小节重复/u},{code:"cross-chapter-section",match:/跨章同名小节/u},{code:"major-content-structure",match:/主要施工内容/u},{code:"requirement-unresponded",match:/评分项要求未响应/u},{code:"self-undermining",match:/自伤表述候选/u},{code:"fabricated-date",match:/正文编造开工日期/u},{code:"field-value-mismatch",match:/字段-数值错配/u},{code:"area-arithmetic",match:/面积算术矛盾/u},{code:"labor-contradiction",match:/劳动力数据矛盾/u},{code:"data-consistency",match:/数据一致性矛盾/u},{code:"semantic-choice",match:/语义矛盾/u},{code:"support-conflict",match:/基坑支护方案前后不一致/u},{code:"dangerous-list-inconsistent",match:/危大工程辨识清单不一致/u},{code:"six-hundred-percent",match:/扬尘治理六个百分百/u},{code:"local-award",match:/本地创优目标缺失/u},{code:"green-quant",match:/四节一环保量化指标缺失/u},{code:"work-injury",match:/工伤保险表述缺失/u},{code:"param-conflict",match:/同一参数概念出现多口径数值冲突/u},{code:"system-zero-coverage",match:/专业工程系统在正文零覆盖/u},{code:"dangerous-list-missing",match:/危大工程辨识清单遗漏|未编制危大工程辨识清单/u},{code:"repeated-word",match:/正文存在叠词重复表述/u},{code:"commercial-data",match:/正文出现商务条款数据/u},{code:"qualification-mixed",match:/投标人资格内容小节/u},{code:"boq-placement",match:/清单项落位不足/u},{code:"precise-param",match:/可靠精确参数使用不足/u},{code:"stage-phrasing",match:/施工阶段划分口径不统一/u},{code:"emergency-depth",match:/应急预案小节深度不足/u}],a6=a=>a5.find(b=>b.match.test(a))?.code||"",a7=a=>{let b={"source-phrase":"【资料来源罗列话术定向修复】\n该章节正文包含“根据/依据招标文件、工程量清单、施工图纸…”等资料来源罗列句,正式交付文档不得出现。\n请以局部 patch 方式删除罗列表述:直接陈述项目事实、施工内容与控制措施;句中携带的实质数据(工期、规模、金额、编号等)必须保留,改为直接陈述方式重写,不得丢失事实。只修改相关句子,不得改动其他内容。","internal-term":"【后台内部术语定向修复】\n该章节正文包含后台内部术语或内部话术(生成系统概念,缺陷描述中已列命中句子),正式交付文档禁止出现。\n请以局部 patch 方式将每一处该表述按上下文语义改写为面向评标人的正式表述(如“按工作包逐项说明”→“按专业工程逐项说明”,“根据已确认资料”→“根据现场实测与图纸要求”),保持段落结构与事实数据不变,不得新增或删除小节。","overview-recap":"【概况段跨章复述定向修复】\n该章节正文包含以“本项目为”开头整段复述项目概况的内容(与概况章正文重复),正式交付文档不得跨章复述概况。\n请以局部 patch 方式删除这些复述句:整段概况陈述必须删除;句中如含本章必需的事实数据,改写为局部引用(一句话内点到即止)。只修改复述句,不得改动其他内容。","fact-verification":"【总量口径数字定向修复】\n该章节正文出现资料事实主表中未找到的总量口径数字。\n请以局部 patch 方式逐项核对:主表已确认的口径必须一字不改引用;无法在主表中反查到的数字一律删除或改为定性表述(如“按计划配置”“满足规范要求”),禁止编造具体数值。只修改相关数字所在句子。","major-content-dirty":"【主要施工内容污染清理】\n该章节“主要施工内容”小节混入了项目概况复述句(本项目为…/总建筑面积…/保留现状…等)、嵌入的正文标题或伪标题。\n请以局部 patch 方式逐段清理:删除概况复述句与“未尽事宜”类说明;本小节只保留各专业工程的“施工概况:”“施工流程:”“施工方法:”正式正文;概况数据确需引用时只写与专业工程直接相关的具体数字,不复述完整概况段。只修改污染段落,不得删除已有事实数据。","major-content-flow":"【专业工程流程污染清理】\n该章节“主要施工内容”小节的“施工流程”混入了项目概况、总建筑面积、招标范围、未尽事宜等说明性事实。\n请以局部 patch 方式重写被污染的“施工流程:”段:只保留纯工序链(每个专业工程至少 4 个环节,工序顺序表达形式由模型自然选择:顺序词叙述、编号步骤、有序/无序列表或箭头链均可),将混入的概况说明删除或移至“施工概况”段。","major-content-method":"【专业工程施工方法强化】\n该章节部分专业工程的“施工方法”只有工程名称或范围罗列,缺少实质工艺。\n请以局部 patch 方式强化对应“施工方法:”段:写入资料已确认的工程量、材料规格、检测、调试、验收或记录要求,至少 4 个带单位工艺参数;资料未明确的参数不得编造。","major-content-dup":"【专业工程重复小节合并】\n该章节“主要施工内容”存在同名或近似专业工程小节重复铺陈。\n请以局部 patch 方式合并:同一专业工程只保留一个小节,将重复小节的独有内容并入保留小节后删除冗余小节(含其标题),保留小节仍须含“施工概况:”“施工流程:”“施工方法:”三标签。","duplicate-subsection":"【同名小节重复合并】\n该章节存在同名 H4 小节重复出现(缺陷描述已列重复小节名与次数),目录重复堆叠属评标硬扣分点。\n请以局部 patch 方式修复:同一主题只保留一个小节——将重复小节中的独有内容合并进保留小节(含正文与表格),删除冗余小节的标题与重复内容;若两小节主题确实不同,则将后者标题重命名为可区分的具体主题(禁止只加“一/二”序号敷衍)。合并后全文不得出现两个同名标题。","cross-chapter-section":"【跨章同名小节改写归并】\n该章节存在与其他章节同名的小节(缺陷描述已给出小节名与归属章),同一主题小节全文只保留一处,跨章串章重复即目录污染。\n请以局部 patch 方式修复本章的同名小节:内容与本章主题相关的,改写标题为与本章语境可区分的具体主题(禁止只加“一/二”序号敷衍)并归并内容;内容与本章无关的,整节删除(replacement 输出空字符串,锚点定位该小节标题行起至下一同级/上级标题行前的全部内容)。只处理该同名小节,不得改动其他内容。","major-content-structure":"【主要施工内容结构定向修复】\n该章节的主要施工内容小节结构不达标。\n请以局部 patch 方式修复:①将“项目主要施工内容”写成三级标题(### 项目主要施工内容),内部专业工程写成四级标题(#### 专业工程名称);②同一专业工程只保留一个小节,重复小节的独有内容合并后删除冗余小节;③每个专业工程小节必须含“施工概况:”“施工流程:”“施工方法:”三个标签,施工流程至少有 1 处 4 个环节以上的工序顺序表达(形式由模型自然选择:顺序词叙述、编号步骤、有序/无序列表或箭头链均可),施工方法至少 4 个带单位工艺参数。不得删除已有的事实数据。","requirement-unresponded":"【评分项要求定向补写】\n招标文件明确要求该评分项必须显性响应,当前正文零命中,零响应即评标失分。\n请以局部 patch 方式在该章节合适位置补写一段响应文本:逐字写明该要求原文(含核心词),并配套本项目落实措施与保证体系(组织、技术、检查、验收闭环);不新增小节、不改动其他内容。","self-undermining":"【自伤表述定向改写】\n该章节正文包含暴露投标短板的表述,正式投标文件不得主动示弱。\n请以局部 patch 方式将该句改写为正向落实表述(如“按施工图绿色建筑专篇编制专项方案,逐项落实评分项并跟踪验收”);若该表述属现场条件类合理风险描述(地质/管线尚不明确),保留但必须补充勘查计划与应对措施。只修改相关句子。","fabricated-date":"【编造开工日期定向修复】\n该章节正文出现招标资料未提供、且违反“以开工令时间为准”条款的具体日历日期。\n请以局部 patch 方式删除该具体日期,统一改写为“以开工令时间为准”;如为进度计划节点,必须标注为计划推算节点并保持与总工期一致。只修改相关句子。","field-value-mismatch":"【字段数值错配定向修复】\n该章节正文将总占地面积误作建筑面积(或其他相近槽位混淆)。\n请以局部 patch 方式按绑定资料口径修正该数值并保持字段标签正确:总占地面积与建筑面积必须分开表述,不得互换数值。只修改相关句子。","area-arithmetic":"【面积算术一致性定向修复】\n该章节正文同一语句内地上+地下面积之和不等于单体建筑面积。\n请以局部 patch 方式按绑定资料口径统一三者数值,使地上+地下=总/单体面积,删除错误数值表述。只修改相关句子。","labor-contradiction":"【劳动力数据定向修复】\n该章节正文“高峰期 X 人”与分阶段投入明细表峰值矛盾(缺陷描述中的数值对即矛盾数字)。\n请以局部 patch 方式以分阶段明细表为准统一劳动力峰值数据:正文峰值表述与表格数据必须一致,删除矛盾数字或调整表格。只修改相关句子。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。","data-consistency":"【数据一致性矛盾定向修复】\n该章节正文存在数据矛盾(缺陷描述中的原文 A 与原文 B 为矛盾数值对,必须统一)。\n请以局部 patch 方式统一数据:以绑定资料(图纸/工程量清单/招标文件)为准选定唯一数值,将矛盾数值对中的错误表述删除或修正为一致值;资料未明确的改为定性表述(如“按规范要求取值”),禁止编造。只修改相关数值所在句子。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。","semantic-choice":'【语义矛盾定向修复】\n该章节正文出现与项目关键决策锁不一致的"实体-选择"表述(缺陷描述已给出锁定值、冲突取值与冲突原句),同一决策两套方案并存即评审硬伤。\n请以局部 patch 方式将冲突表述统一改写为锁定值表述(如锁定塔式起重机而原句写施工电梯,则改为塔式起重机),保持句子其余内容与数据不变;若原句整体围绕锁外方案铺陈无法局部改写,整句删除。只修改相关句子。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。',"support-conflict":"【支护体系一致性定向修复】\n该章节正文放坡喷锚类与灌注桩排桩类两套支护体系并存。\n请以局部 patch 方式统一为一种支护体系(以图纸/地质条件为准),删除另一种体系的表述,并补充基坑开挖深度数值支撑危大分级判定。只修改相关句子。","dangerous-list-inconsistent":"【危大清单一致性定向修复】\n该章节正文存在多处危大工程辨识清单且项名/数量不一致。\n请以局部 patch 方式将两处清单合并统一:项名、数量与分级表述唯一且一致,删除重复清单。只修改相关列表。","six-hundred-percent":"【六个百分百逐项补写】\n该章节正文的扬尘治理措施未逐项覆盖“六个百分百”全部六项。\n请以局部 patch 方式逐条补齐缺失项(工地周边100%围挡、物料堆放100%覆盖、出入车辆100%冲洗、施工现场地面100%硬化、拆迁工地100%湿法作业、渣土车辆100%密闭运输),每项一句落实措施。不新增小节。若本项目无拆迁工程,对“拆迁工地100%湿法作业”必须显式说明不适用原因(如“本项目无拆迁工程,不涉及拆迁工地湿法作业”),不得省略该项。","local-award":"【属地创优目标补写】\n该章节正文未提及省市级优质工程/文明标准化工地等创优目标(安徽省属地适配项)。\n请以局部 patch 方式在质量目标或创优规划位置补写与项目实际规模相符的创优目标表述;奖项名称必须以评分项要求提取结果(招标文件原文)为准逐字落位,禁止自行编造或替换为其他奖项名称。只修改目标表述相关句子。","green-quant":"【四节一环保量化指标补写】\n该章节绿色施工内容无任何量化指标(非传统水源利用率/漏损率/土方平衡率/废弃物回收率等)。\n请以局部 patch 方式补充量化指标与模板周转次数:数值参考行业通用水平与附录八基准(如可回收废弃物回收率≥80%、模板周转≥8次),不得编造极端值;每个指标配一句落实措施。只修改绿色施工相关句子。","work-injury":"【工伤保险表述补写】\n该章节正文有劳务/农民工管理内容但未提及工伤保险缴纳(政策合规关键词漏项)。\n请以局部 patch 方式在劳务管理/农民工工资保障位置补充“按规定为作业人员办理工伤保险”表述。只修改劳务管理相关句子。","param-conflict":"【参数口径统一定向修复】\n该章节正文同一参数概念出现多口径数值(详见缺陷描述中的数值原文),自相矛盾即评审硬伤。\n请以局部 patch 方式统一口径:以绑定资料(图纸/工程量清单/规范)为准选定唯一数值,删除其余矛盾表述;资料未明确的参数改为定性表述(如“按规范要求取值”),禁止编造。只修改相关数值所在句子。","system-zero-coverage":"【专业工程系统零覆盖补写】\n该章节大纲涉及某专业工程系统(详见缺陷描述中的系统名),但正文对该系统零覆盖,零覆盖即评标失分。\n请以局部 patch 方式在该章节合适位置补写该系统施工方案正文:含施工概况(工程量与作业条件)、施工流程(不少于 4 个环节的工序顺序表达,形式由模型自然选择:顺序词叙述、编号步骤、有序/无序列表或箭头链均可)、施工方法(至少 4 个带单位工艺参数,参数必须来自绑定资料,不得编造)。不得删除已有内容。","dangerous-list-missing":"【危大工程辨识清单补全】\n正文已出现危大工程适用前提(基坑深度/脚手架高度/起重设备等),但辨识清单遗漏适用项或全文未编制辨识清单,遗漏即合规硬伤。\n请以局部 patch 方式按建办质〔2018〕31号补全辨识:将遗漏项写入危大工程辨识清单并标注分级,超过一定规模的专项施工方案注明专家论证要求;清单项名与全文其他清单保持唯一一致。只修改清单相关段落。","repeated-word":"【叠词重复表述定向修复】\n该章节正文存在同一双字词紧邻重复(如“执行执行”“进行进行”)。\n请以局部 patch 方式删除紧邻重复字词,保持语句完整通顺;其余内容与事实数据不得改动。","commercial-data":"【商务条款数据定向清理】\n该章节正文出现商务条款数据(暂列金额/暂估价/综合单价/税率等),施组正文禁止出现商务数据。\n请以局部 patch 方式删除含商务数据的句子:句中的商务数字(金额/单价/税率)一律删除,不得改写为其他商务表述;如删除后语义不完整,改写为定性表述(如“按合同约定执行”)。只修改相关句子。","qualification-mixed":"【投标人资格内容串章删除】\n该章节正文包含资格审查内容小节(营业执照/资质证书/安全生产许可证/财务状况等),属资格文件/商务文件内容,不属于施工组织设计正文。\n请以局部 patch 方式整体删除该小节:replacement 输出为空字符串(删除语义),锚点或 originalText 定位该小节标题行起至下一同级/上级标题行前的全部内容(含标题行);删除后正文不得残留资格核验、资质证照年检、财务状况证明等表述。只删除该小节,不得改动其他内容。","boq-placement":"【清单项落位定向补写】\n该章节对应专业工程的工程量清单项在正文零落位或落位率不足,零落位即评审失分。\n请以局部 patch 方式在“主要施工内容”小节按专业工程分组补写未落位清单项(缺陷描述中已列明细,最多 30 项,其余同类项按已列名称分组归并):每条写“施工概况:”工程名称+工程量+作业条件;“施工流程:”不少于 4 个环节的工序顺序表达(形式由模型自然选择:顺序词叙述、编号步骤、有序/无序列表或箭头链均可);“施工方法:”至少 4 个带单位工艺参数。清单项名称必须逐字引用缺陷描述中的原文(不得改写为近似词),参数必须来自缺陷描述或绑定资料,禁止编造。不新增小节标题。","precise-param":"【关键参数落位定向补写】\n该章节正文缺少资料中的关键工程参数(工期/面积/强度等级/材料规格/规范编号,缺陷描述中已列缺失参数)。\n请以局部 patch 方式将缺失的关键参数自然补入相关句子:参数值必须与资料一致,不得编造;补写后保持原句结构不变。只修改相关句子。","stage-phrasing":"【阶段口径统一定向修复】\n该章节正文存在多种互异的施工阶段划分口径(详见缺陷描述中的划分句原文),口径互异即自相矛盾。\n请以局部 patch 方式统一口径:以总进度计划/施工部署章节的阶段划分为唯一口径,其余划分句逐字对齐或删除;划分句保留必要的阶段名称与工序对应关系,不得丢失事实。只修改相关句子。","emergency-depth":"【应急预案小节补强】\n该章节应急预案小节未达到可落地深度(详见缺陷描述:缺字数或缺三要素之一)。\n请以局部 patch 方式补写缺失要素:应急组织体系(领导小组/抢险队与职责)、应急处置程序与演练安排(含响应分级与处置流程)、应急物资保障(清单与配置数量);总字数不少于 300 字,内容必须绑定本项目风险特征。只补写该小节缺失要素,不得删除已有内容。"}[a6(a)]||"【交付阻断缺陷定向修复】\n该章节正文存在交付阻断级缺陷,详见缺陷描述。\n请以局部 patch 方式修复:结合缺陷描述定位相关文本,删除错误内容或按专业规范改写,保持其余内容与事实数据不变。只修改相关句子。";return`${b}
|
|
115
|
-
${(0,z.TP)('本修复指令仅指导局部修改:指令文字本身(含"不得出现/不再出现/禁止出现"等约束表述)禁止写入正文,正文只输出修复后的正式内容')}`},a8=a=>{if(a.chapterId){let b=az.findIndex(b=>b.id===a.chapterId);if(b>=0)return b}if(a.sectionTitle){let b=a.sectionTitle.replace(/[\s,,]/gu,""),c=az.findIndex(a=>(a.sections||[]).some(a=>a.replace(/[\s,,]/gu,"")===b)||a.title.replace(/[\s,,]/gu,"")===b||b.length>=6&&a4(a).includes(b.slice(0,12)));if(c>=0)return c}let b=a.message,c=/“([^”]+)”/u.exec(b)?.[1]?.replace(/\s+/gu,"")||"";switch(a6(b)){case"source-phrase":return az.findIndex(a=>v.kt.test(a.content||""));case"internal-term":{let a=/“([^”]{2,})/u.exec(b)?.[1]?.replace(/\s+/gu,"")||"";if(a){let b=az.findIndex(b=>a4(b).includes(a.slice(0,12)));if(b>=0)return b}return az.findIndex(a=>(a.content||"").includes("工作包"))}case"overview-recap":{let a=/“([^”]{4,})/u.exec(b)?.[1]?.replace(/\s+/gu,"")||"";if(a){let b=az.findIndex(b=>a4(b).includes(a.slice(0,16)));if(b>=0)return b}return az.findIndex(a=>!/工程概况|项目概况|基本信息/u.test(a.title)&&/本项目为|本工程为|该项目为|该工程为/u.test(a.content||""))}case"fact-verification":{let a=(b.split("数字")[1]||"").trim();if(!a)return -1;let c=a.split(/[、,,\s]+/u).filter(Boolean),d=[...new Set(c.map(a=>{let b=/^\d[\d,,]*(?:\.\d+)?/u.exec(a);return b?b[0]:""}).filter(a=>a.length>=2))];if(d.length>0){let a=az.findIndex(a=>d.some(b=>a4(a).includes(b)));if(a>=0)return a}return az.findIndex(a=>c.some(b=>b&&a4(a).includes(b.replace(/\s+/gu,""))))}case"major-content-structure":return az.findIndex(a=>/项目主要施工内容|主要施工内容/u.test(`${a.title} ${(a.sections||[]).join(" ")}`)||/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目)?主要施工\s*内容/gmu.test(a.content||""));case"requirement-unresponded":{let a=(/核心词:([^))]*)/u.exec(b)?.[1]||"").split(/[、/,,/\s]+/u).filter(a=>a.length>=2),c=az.findIndex(b=>a.some(a=>a4(b).includes(a)));if(c>=0)return c;let d=az.findIndex(a=>/质量目标|创优|质量保证|绿色施工|文明施工/u.test(a.title));return d>=0?d:0}case"self-undermining":return c?az.findIndex(a=>a4(a).includes(c.slice(0,12))):-1;case"fabricated-date":return c?az.findIndex(a=>a4(a).includes(c)):-1;case"field-value-mismatch":case"area-arithmetic":{let a=(b.match(/[\d,]+(?:\.\d+)?/gu)||[]).map(a=>a.replace(/[,,]/gu,"")).filter(a=>a.length>=3);return az.findIndex(b=>a.some(a=>a4(b).includes(a)))}case"data-consistency":{let a=(b.match(/[\d,]+(?:\.\d+)?/gu)||[]).map(a=>a.replace(/[,,]/gu,"")).filter(a=>a.length>=3);return az.findIndex(b=>a.some(a=>a4(b).includes(a)))}case"semantic-choice":return c?az.findIndex(a=>a4(a).includes(c.slice(0,12))):-1;case"labor-contradiction":return az.findIndex(a=>/高峰/u.test(a.content||""));case"support-conflict":return az.findIndex(a=>/放坡|喷锚|土钉|灌注桩|排桩|基坑支护/u.test(a.content||""));case"dangerous-list-inconsistent":return az.findIndex(a=>/危大/u.test(`${a.title} ${a.content||""}`));case"six-hundred-percent":return az.findIndex(a=>/扬尘|环保|文明施工|绿色施工/u.test(`${a.title} ${a.content||""}`));case"local-award":{let a=az.findIndex(a=>/质量|创优|目标/u.test(a.title));return a>=0?a:0}case"green-quant":{let a=az.findIndex(a=>/绿色|环保|节能|四节/u.test(`${a.title} ${a.content||""}`));return a>=0?a:0}case"work-injury":{let a=az.findIndex(a=>/农民工工资|劳务管理|劳务实名|工资保障/u.test(a.content||""));if(a>=0)return a;return az.findIndex(a=>/劳务|农民工|工资/u.test(`${a.title} ${a.content||""}`))}case"param-conflict":{let a=(b.match(/[\d]+(?:\.\d+)?\s*(?:mm|cm|m|米|MPa|kN|kV|kW|℃|°C|元|万元|人|天|日|个|层|樘|处|套|台|t|吨)/gu)||[]).map(a=>a.replace(/\s+/gu,""));return az.findIndex(b=>a.some(a=>a4(b).includes(a)))}case"system-zero-coverage":{let a=(b.split(":")[1]||"").split(/[、,,]/u).map(a=>a.trim()).filter(Boolean);return az.findIndex(b=>a.some(a=>a&&b.title.includes(a)))}case"dangerous-list-missing":return az.findIndex(a=>/危大|基坑|脚手架|起重|吊篮|拆除/u.test(`${a.title} ${a.content||""}`));case"repeated-word":{let a=[...b.matchAll(/“([^”]{2,})”/gu)].map(a=>a[1]);return az.findIndex(b=>a.some(a=>a4(b).includes(a)))}case"commercial-data":{let a=(b.split(":")[1]||"").split(/[、,,]/u).map(a=>a.trim()).filter(Boolean);return az.findIndex(b=>a.some(a=>a&&(b.content||"").includes(a)))}case"qualification-mixed":{let a=[...b.matchAll(/“([^”]{2,40})”/gu)].map(a=>a[1]);return az.findIndex(b=>a.some(a=>(b.content||"").includes(a)))}case"boq-placement":return az.findIndex(a=>/项目主要施工内容|主要施工内容/u.test(`${a.title} ${(a.sections||[]).join(" ")}`)||/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目)?主要施工\s*内容/gmu.test(a.content||""));case"precise-param":{let a=(b.split("缺失如")[1]||"").split(/[、,,))]/u).map(a=>a.trim()).filter(a=>a.length>=3),c=az.findIndex(b=>a.some(a=>a4(b).includes(a)));if(c>=0)return c;let d=az.findIndex(a=>/工程概况|项目概况|基本信息/u.test(a.title));return d>=0?d:0}case"stage-phrasing":{let a=[...b.matchAll(/“([^”]{3,})”/gu)].map(a=>a[1]),c=az.findIndex(b=>a.some(a=>a4(b).includes(a)));if(c>=0)return c;let d=az.findIndex(a=>/进度|部署|工期/u.test(a.title));return d>=0?d:0}case"emergency-depth":return az.findIndex(a=>/应急|安全/u.test(`${a.title} ${a.content||""}`));default:{let a=b.replace(/[\s,,]/gu,""),c=-1,d=0;return az.forEach((b,e)=>{let f=b.title.replace(/[\s,,]/gu,"");f.length>=3&&f.length>d&&a.startsWith(f)&&(c=e,d=f.length)}),c}}},a9=()=>dQ(eA((0,v.bR)((0,v.kT)((0,v.K7)(ey(dD(eD({template:h,requirement:X,projectRoot:A,projectId:B,facts:ad,structuredFacts:ak,factsModel:am,chapters:az,sources:ap,missingItems:F,validation:ao,validationIssues:ar,executionStages:ay,assets:aw,promptDocumentRules:y}),ak),m)))),h)),ba=new Set,bb=Date.now();if(a3.length>0){let a=0,b=await (async()=>{let a=az.find(a=>/工程概况|项目概况|基本信息/u.test(a.title))?.content;if(!a)return;let b=(0,b2.t1)(aA);if(0===b.sentences.length)return;let c=await (0,R.Mv)(b.sentences,[a]);return{overviewBody:a,similarity:c}})(),c=c$({factsModel:am,finalChapterDrafts:az,tenderRequirements:P,factTokenScopeClassifier:S,reviewDataConsistencyCached:aK,decisionLock:a1,effectiveChapters:g,recapTools:b}),d="0"!==process.env.DOCUMENT_REPAIR_PRECHECK,e="0"!==process.env.DOCUMENT_REPAIR_FAILFAST,f=[],i=new Map;for(let a of a3){let b=a8(a);if(b<0){(0,bu.fx)(k,(0,bu.X5)({type:"llm_review",roleId:"agent-blocker-fix-unlocated",status:"failed",message:`交付阻断缺陷未定位到章节(未进入修复循环):${a.message}`,details:["章节定位失败:缺陷消息不含可匹配的章节标题,且正文各章标题均无命中","处理:该缺陷已记录并保留在最终校验结果中"]},{subtitle:"交付阻断修复"})),(0,bu.fx)(aU,(0,bu.X5)({type:"llm_review",roleId:"agent-blocker-fix-unlocated",status:"failed",message:`交付阻断缺陷未定位到章节(未进入修复循环):${a.message}`,details:["章节定位失败"]},{subtitle:"交付阻断修复"})),U(az,k);continue}let c=i.get(b);void 0===c?(i.set(b,f.length),f.push({chapterIndex:b,issues:[a]})):f[c].issues.push(a)}let j=Math.max(1,Math.min(6,Number(process.env.DOCUMENT_BLOCKER_FIX_CONCURRENCY||3)));for(let b=0;b<f.length;b+=j){let i=f.slice(b,b+j);await Promise.all(i.map(async({chapterIndex:b,issues:f})=>{let i=az[b],j=g.find(a=>a.id===i.id||a.title===i.title);for(let g of f){let f,l=a6(g.message),m=c.find(a=>a.match.test(g.message));if(d&&m&&0===(aM&&"data-consistency"===l?(()=>{let a=[...new Set([...g.message.matchAll(/[\d,]+(?:\.\d+)?/gu)].map(a=>a[0].replace(/[,,]/gu,"")).filter(a=>a.length>=2))],b=aA.replace(/\s+/gu,"");return a.length>=2&&a.every(a=>b.includes(a))?[g.message]:[]})():(await m.detect(aA)).filter(a=>a6(a)===l)).length){let a=/“([^”]+)”/u.exec(g.message)?.[1];a&&ba.add(`${l}\u0000${(0,by.AO)(a)}`);let b=(0,bu.X5)({type:"llm_review",roleId:`agent-blocker-fix-${i.id}-${l||"unclassified"}`,status:"success",message:`交付阻断缺陷修复前预检通过:${i.title}(同类缺陷已消除,跳过 LLM 修复轮次)`,details:[g.message]},{subtitle:"交付阻断修复"});(0,bu.fx)(k,b),(0,bu.fx)(aU,b),U(az,k);continue}if(["labor-contradiction","data-consistency","param-conflict","area-arithmetic","field-value-mismatch"].includes(l)){let c=(0,b2.fE)(az[b].content);if(c.fixedCount>0){az[b]={...az[b],content:c.markdown},a+=c.fixedCount,aA=a9();let d=m?(await m.detect(aA)).filter(a=>a6(a)===l):[],e=(0,bu.X5)({type:"llm_review",roleId:`agent-blocker-fix-${i.id}-${l}`,status:0===d.length?"success":"failed",message:0===d.length?`交付阻断缺陷确定性修复完成:${i.title}(${c.fixedCount} 处定点替换,跳过 LLM 轮次)`:`交付阻断缺陷确定性修复后仍残留:${i.title}(定点替换 ${c.fixedCount} 处,复检仍有 ${d.length} 处同类缺陷)`,details:[g.message,...c.details.slice(0,4)]},{subtitle:"交付阻断修复"});(0,bu.fx)(k,e),(0,bu.fx)(aU,e),U(az,k);continue}}let n=new Set(["requirement-unresponded","six-hundred-percent","system-zero-coverage","boq-placement","green-quant","work-injury","local-award","emergency-depth","dangerous-list-missing","precise-param"]),o=new Set(["major-content-structure","major-content-dirty","major-content-flow","major-content-method","major-content-dup"]),p=(a,b)=>{let c=a.split(/\r?\n/u).map(a=>a.trim()),d=-1,e=3;if(c.forEach((a,c)=>{let f=/^(#{2,4})\s/u.exec(a);f&&b.test(a)&&(d=c,e=f[1].length)}),d<0)return;let f=RegExp(`^#{1,${e}}\\s`),g=c.length;for(let a=d+1;a<c.length;a+=1)if(f.test(c[a])){g=a;break}for(let a=g-1;a>d;a-=1){let b=[...c[a].matchAll(/[^。;;]+[。;;]/gu)].pop();if(b){let a=b[0].trim();if(a.length>=12&&a.length<=80)return a}}},r=a=>{let b=a.split(/\r?\n/u).map(a=>a.trim());for(let a=b.length-1;a>=0;a-=1){let c=b[a];if(!c||/^#{1,6}\s/u.test(c)||/^\s*\|/u.test(c)||/^\s*[-*]\s/u.test(c))continue;let d=[...c.matchAll(/[^。;;]+[。;;]/gu)].pop();if(d){let a=d[0].trim();if(a.length>=12&&a.length<=80)return a}}},s=(a,b)=>{let c=a.split(/\r?\n/u).map(a=>a.trim()),d=c.findIndex(a=>/^#{2,4}\s/u.test(a)&&b.test(a));if(d<0)return;let e=c[d],f=(/^(#{2,4})\s/u.exec(e)||[])[1]||"###",g=RegExp(`^#{1,${f.length}}\\s`);for(let a=d+1;a<c.length;a+=1)if(g.test(c[a]))return{text:e,endText:c[a]};return{text:e}},t=(a,c)=>{let d=az[b].content,e=d.replace(/\s+/gu,""),f=[],h=a=>{let b=a.replace(/\s+/gu,"");!(b.length<6)&&!(b.length>80)&&e.includes(b)&&(f.some(a=>("string"==typeof a?a:a.text).replace(/\s+/gu,"")===b)||f.push(a))};for(let b of a)for(let a of b.matchAll(/[“【]([^”】]{6,80})[”】]/gu))h(a[1]);if(f.length>0)return f.slice(0,4);if(n.has(c)){let a="boq-placement"===c&&p(d,/^#{2,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目)?主要施工\s*内容/u)||r(d);return a?[{text:a,append:!0}]:[]}if(o.has(c)){let a=s(d,/^#{2,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目)?主要施工\s*内容/u);if(a){let b=d.split(/\r?\n/u),c=b.findIndex(b=>b.trim()===a.text),e=a.endText?b.findIndex((b,d)=>d>c&&b.trim()===a.endText):b.length;if(b.slice(c,e>=0?e:b.length).join("\n").length<=7e3)return[a]}}if("duplicate-subsection"===c)for(let a of g.message.matchAll(/“([^”]{2,60})”/gu)){let b=a[1].trim(),c=d.split(/\r?\n/u).map(a=>a.trim()),e=[];if(c.forEach((a,c)=>{/^#{3,4}\s/u.test(a)&&(a.includes(b)||b.includes(a.replace(/^#{3,4}\s+/u,"")))&&e.push(c)}),e.length<2)continue;let f=(/^(#{3,4})\s/u.exec(c[e[0]])||[])[1]||"####",g=RegExp(`^#{1,${f.length}}\\s`),h=e[0],i=e[1];if(c.slice(h+1,i).some(a=>g.test(a)))continue;let j=c.findIndex((a,b)=>b>i&&g.test(a));if(c.slice(h,j>=0?j:c.length).join("\n").length<=7e3)return[{text:c[h],endText:j>=0?c[j]:void 0}]}return[]},u=(0,bu.X5)({type:"llm_review",roleId:`agent-blocker-fix-${i.id}-${l||"unclassified"}`,status:"running",message:`正在修复交付阻断缺陷:${i.title}(${l||"未分类"})`,details:[g.message]},{subtitle:"交付阻断修复"});(0,bu.fx)(k,u),(0,bu.fx)(aU,u),U(az,k);let v=[g.message],w="";for(f=0;f<2&&v.length>0;f+=1){let c=0===f?a7(g.message):["【修复未生效升级重试】",`上一轮修复后复检仍存在 ${v.length} 处同类缺陷(复检证据:${v.slice(0,2).join(";")}),说明上一轮修复方式与缺陷特征不匹配或 patch 未落位。`,"本轮必须更换修复方式:先精确定位问题句,再整体替换该句(不得只改个别词),替换后的文本必须完全符合下列要求:",a7(g.message)].join("\n"),d=t(0===f?[g.message]:[g.message,...v.slice(0,2)],l),k=d.some(a=>"object"==typeof a&&!a.append),n=await V(()=>(0,bv.l8)({template:h,chapter:{id:i.id,title:i.title,content:az[b].content,evidence:i.evidence,missingFacts:i.missingFacts,sections:i.sections},issues:[g.message,g.suggestion||""],promptTexts:c,requirement:X,forbidDrawingImages:!1,diagnostics:q,signal:W,anchorTexts:d.length>0?d:void 0,maxTokens:k?8192:void 0}));if(n.content&&n.content!==az[b].content){if(az[b]={...az[b],content:j?dP(n.content,j):n.content},a+=n.appliedCount,aA=a9(),m)if(aM&&"data-consistency"===l){let a=[...new Set([...g.message.matchAll(/[\d,]+(?:\.\d+)?/gu)].map(a=>a[0].replace(/[,,]/gu,"")).filter(a=>a.length>=2))],b=aA.replace(/\s+/gu,"");v=a.length>=2&&a.every(a=>b.includes(a))?[g.message]:[]}else v=(await m.detect(aA)).filter(a=>a6(a)===l);else n.appliedCount>0&&(v=[]);if(0===v.length)break}else if(0===f){if(e&&n.producedCount>0&&0===n.appliedCount){w=`patch 已产出 ${n.producedCount} 条但均未应用(锚点失配或结构校验拒绝;fail-fast 跳过升级轮)`;break}continue}else{w=n.producedCount>0?`patch 已产出 ${n.producedCount} 条但均未应用(锚点失配或结构校验拒绝)`:"定位失败或输出无效(未产出 patch)";break}}if(v.length>0&&m?.delete){let c=await m.delete(az[b].content,g.message);c.removed>0&&(az[b]={...az[b],content:c.content},a+=c.removed,aA=a9(),v=(await m.detect(aA)).filter(a=>a6(a)===l))}let x=0===v.length;if(x){let a=/“([^”]+)”/u.exec(g.message)?.[1];a&&ba.add(`${l}\u0000${(0,by.AO)(a)}`)}x||w||(w="patch 已应用但未消除缺陷(修复方式不匹配)");let y=(0,bu.X5)({type:"llm_review",roleId:`agent-blocker-fix-${i.id}-${l||"unclassified"}`,status:x?"success":"failed",message:x?`交付阻断缺陷修复完成:${i.title}(${f} 轮 LLM 修复后复检通过)`:`交付阻断缺陷修复未生效:${i.title}(${f} 轮 LLM 修复${m?.delete?"+确定性删除":""}后复检仍有 ${v.length} 处;失败原因:${w})`,details:[g.message,...x?[]:[`复检残留:${v.slice(0,3).join(";")}`]]},{subtitle:"交付阻断修复"});(0,bu.fx)(k,y),(0,bu.fx)(aU,y),U(az,k)}}))}a>0&&(aA=a9(),await aX())}q.metrics.push({name:"phase:blocker-repair",startedAt:bb,endedAt:Date.now(),durationMs:Date.now()-bb});let bc=await (0,x.KI)(az,am,M),bd=(await (0,x.Yb)(aA,am,M)).fixedCount>0;if(bc.fixedCount>0||bd){aA=dQ(eA((0,v.bR)((0,v.kT)((0,v.K7)(ey(dD(eD({template:h,requirement:X,projectRoot:A,projectId:B,facts:ad,structuredFacts:ak,factsModel:am,chapters:az,sources:ap,missingItems:F,validation:ao,validationIssues:ar,executionStages:ay,assets:aw,promptDocumentRules:y}),ak),m)))),h));let a=await (0,x.Yb)(aA,am,M);a.fixedCount>0&&(aA=a.markdown);let b=(0,b2.fE)(aA);b.fixedCount>0&&(aA=b.markdown),await aX();let c=bc.fixedCount+a.fixedCount+b.fixedCount,d=[...new Set([...bc.details,...a.details,...b.details])];(0,bu.fx)(k,(0,bu.X5)({type:"validation",roleId:"deterministic-consistency-fix",status:"success",message:`跨章一致性数值定点修复:${c} 处(${d.slice(0,4).join("、")})`,details:d.slice(4)},{subtitle:"跨章一致性修复"}))}let be=(0,b2.fE)(aA);be.fixedCount>0&&(aA=be.markdown,await aX());let bf=(0,v.K7)(aA);bf!==aA&&(aA=bf,await aX());let bg=await ex({template:h,chapters:az,effectiveChapters:g,requirement:X,projectName:m?.projectName||"",tenderContext:function(a){let b=[],c=a.factsModel?.canonical,d=a=>a?.value;if(c){let a=a=>Array.isArray(a)?a.map(a=>a?.value).filter(Boolean):a?.value?[a.value]:[],e=[d(c.projectIdentity?.projectName)?`项目名称:${d(c.projectIdentity.projectName)}`:"",d(c.projectIdentity?.owner)?`招标人:${d(c.projectIdentity.owner)}`:"",d(c.projectIdentity?.location)?`建设地点:${d(c.projectIdentity.location)}`:"",...a(c.projectScope?.scale).map(a=>`建设规模:${a}`),...a(c.schedule?.duration).map(a=>`计划工期:${a}`),...a(c.quality?.target).map(a=>`质量目标:${a}`)].filter(Boolean);e.length&&b.push(`工程概况事实:
|
|
114
|
+
合计/小计/总计/累计行空单元格填“—”;表名占用表头第一格时必须移出表格。`,e=await V(()=>(0,bv.l8)({template:h,chapter:{id:b.id,title:b.title,content:p,evidence:b.evidence,missingFacts:b.missingFacts,sections:b.sections},issues:a.map(a=>a.message),promptTexts:d,requirement:X,forbidDrawingImages:!1,diagnostics:q,signal:W}));e.content&&e.content!==p&&(p=e.content)}}(p=function(a,b){let c=eB(a,b);if(!c)return{content:a,removed:0};let d=eC(c.split(/\r?\n/u));return d.removed>0?{content:a.replace(c,d.lines.join("\n")),removed:d.removed}:{content:a,removed:0}}(p,i).content)!==b.content&&(aA[c]={...b,content:j?dP(p,j):p},a+=1);let r=(0,x.NS)(p).some(a=>"error"===a.level&&/空单元格|占位符单元格|列数不一致/u.test(a.message)&&a.message.includes(i)),s=(0,bu.X5)({type:"llm_review",roleId:`agent-table-fix-${b.id}-${d}`,status:r?"failed":"success",message:r?`表格数据修复未生效:${b.title}`:`表格数据修复完成:${b.title}`,details:[e]},{subtitle:"表格数据修复"});(0,bu.fx)(k,s),(0,bu.fx)(aV,s),U(aA,k)}}))}a>0&&(aB=dQ(eA((0,v.bR)((0,v.kT)((0,v.K7)(ey(dD(eD({template:h,requirement:X,projectRoot:A,projectId:B,facts:ad,structuredFacts:ak,factsModel:am,chapters:aA,sources:aq,missingItems:F,validation:ap,validationIssues:at,executionStages:az,assets:ax,promptDocumentRules:y}),ak),m)))),h)),await aY())}q.metrics.push({name:"phase:final-gate",startedAt:aZ,endedAt:Date.now(),durationMs:Date.now()-aZ});let a0=/封面|页眉|页脚|附图|图片引用|CAD图|示意图|插图/u,a1=aM?await aM:await aL(aB);if(a1.length>0){let a=new Set,b=a1.map(a=>ca(a)).filter(b=>{let c=cb(b.message);return!(!c||a.has(c))&&(a.add(c),!0)});at=[...at,...b]}let a2=b7({facts:[...ae,...ag,...ah],evidence:i});a2.length>0&&(at=[...at,...cd(aB,a2).map(a=>ce(a))]);let a3=/属地创优目标缺失|四节一环保量化指标缺失|工伤保险表述缺失/u,a4=(()=>{let a=at.filter(a=>"error"===a.level&&!a0.test(a.message)&&!/表格|标题重复|目录/u.test(a.message)),b=a.filter(a=>!a3.test(a.message));return[...a.filter(a=>a3.test(a.message)),...b]})(),a5=a=>(a.content||"").replace(/[\s,,]/gu,""),a6=[{code:"source-phrase",match:/资料来源罗列话术/u},{code:"internal-term",match:/后台内部术语|后台内部话术/u},{code:"overview-recap",match:/概况段跨章复述/u},{code:"fact-verification",match:/生成后事实反查失败/u},{code:"major-content-dirty",match:/主要施工内容存在脏事实或标题污染/u},{code:"major-content-flow",match:/主要施工内容存在.*流程污染/u},{code:"major-content-method",match:/主要施工内容存在.*施工方法过弱/u},{code:"major-content-dup",match:/主要施工内容存在.*重复专业工程小节/u},{code:"duplicate-subsection",match:/同名小节重复/u},{code:"cross-chapter-section",match:/跨章同名小节/u},{code:"major-content-structure",match:/主要施工内容/u},{code:"requirement-unresponded",match:/评分项要求未响应/u},{code:"self-undermining",match:/自伤表述候选/u},{code:"fabricated-date",match:/正文编造开工日期/u},{code:"field-value-mismatch",match:/字段-数值错配/u},{code:"area-arithmetic",match:/面积算术矛盾/u},{code:"labor-contradiction",match:/劳动力数据矛盾/u},{code:"data-consistency",match:/数据一致性矛盾/u},{code:"semantic-choice",match:/语义矛盾/u},{code:"support-conflict",match:/基坑支护方案前后不一致/u},{code:"dangerous-list-inconsistent",match:/危大工程辨识清单不一致/u},{code:"six-hundred-percent",match:/扬尘治理六个百分百/u},{code:"local-award",match:/本地创优目标缺失/u},{code:"green-quant",match:/四节一环保量化指标缺失/u},{code:"work-injury",match:/工伤保险表述缺失/u},{code:"param-conflict",match:/同一参数概念出现多口径数值冲突/u},{code:"system-zero-coverage",match:/专业工程系统在正文零覆盖/u},{code:"dangerous-list-missing",match:/危大工程辨识清单遗漏|未编制危大工程辨识清单/u},{code:"repeated-word",match:/正文存在叠词重复表述/u},{code:"commercial-data",match:/正文出现商务条款数据/u},{code:"qualification-mixed",match:/投标人资格内容小节/u},{code:"boq-placement",match:/清单项落位不足/u},{code:"precise-param",match:/可靠精确参数使用不足/u},{code:"stage-phrasing",match:/施工阶段划分口径不统一/u},{code:"emergency-depth",match:/应急预案小节深度不足/u}],a7=a=>a6.find(b=>b.match.test(a))?.code||"",a8=a=>{let b={"source-phrase":"【资料来源罗列话术定向修复】\n该章节正文包含“根据/依据招标文件、工程量清单、施工图纸…”等资料来源罗列句,正式交付文档不得出现。\n请以局部 patch 方式删除罗列表述:直接陈述项目事实、施工内容与控制措施;句中携带的实质数据(工期、规模、金额、编号等)必须保留,改为直接陈述方式重写,不得丢失事实。只修改相关句子,不得改动其他内容。","internal-term":"【后台内部术语定向修复】\n该章节正文包含后台内部术语或内部话术(生成系统概念,缺陷描述中已列命中句子),正式交付文档禁止出现。\n请以局部 patch 方式将每一处该表述按上下文语义改写为面向评标人的正式表述(如“按工作包逐项说明”→“按专业工程逐项说明”,“根据已确认资料”→“根据现场实测与图纸要求”),保持段落结构与事实数据不变,不得新增或删除小节。","overview-recap":"【概况段跨章复述定向修复】\n该章节正文包含以“本项目为”开头整段复述项目概况的内容(与概况章正文重复),正式交付文档不得跨章复述概况。\n请以局部 patch 方式删除这些复述句:整段概况陈述必须删除;句中如含本章必需的事实数据,改写为局部引用(一句话内点到即止)。只修改复述句,不得改动其他内容。","fact-verification":"【总量口径数字定向修复】\n该章节正文出现资料事实主表中未找到的总量口径数字。\n请以局部 patch 方式逐项核对:主表已确认的口径必须一字不改引用;无法在主表中反查到的数字一律删除或改为定性表述(如“按计划配置”“满足规范要求”),禁止编造具体数值。只修改相关数字所在句子。","major-content-dirty":"【主要施工内容污染清理】\n该章节“主要施工内容”小节混入了项目概况复述句(本项目为…/总建筑面积…/保留现状…等)、嵌入的正文标题或伪标题。\n请以局部 patch 方式逐段清理:删除概况复述句与“未尽事宜”类说明;本小节只保留各专业工程的“施工概况:”“施工流程:”“施工方法:”正式正文;概况数据确需引用时只写与专业工程直接相关的具体数字,不复述完整概况段。只修改污染段落,不得删除已有事实数据。","major-content-flow":"【专业工程流程污染清理】\n该章节“主要施工内容”小节的“施工流程”混入了项目概况、总建筑面积、招标范围、未尽事宜等说明性事实。\n请以局部 patch 方式重写被污染的“施工流程:”段:只保留纯工序链(每个专业工程至少 4 个环节,工序顺序表达形式由模型自然选择:顺序词叙述、编号步骤、有序/无序列表或箭头链均可),将混入的概况说明删除或移至“施工概况”段。","major-content-method":"【专业工程施工方法强化】\n该章节部分专业工程的“施工方法”只有工程名称或范围罗列,缺少实质工艺。\n请以局部 patch 方式强化对应“施工方法:”段:写入资料已确认的工程量、材料规格、检测、调试、验收或记录要求,至少 4 个带单位工艺参数;资料未明确的参数不得编造。","major-content-dup":"【专业工程重复小节合并】\n该章节“主要施工内容”存在同名或近似专业工程小节重复铺陈。\n请以局部 patch 方式合并:同一专业工程只保留一个小节,将重复小节的独有内容并入保留小节后删除冗余小节(含其标题),保留小节仍须含“施工概况:”“施工流程:”“施工方法:”三标签。","duplicate-subsection":"【同名小节重复合并】\n该章节存在同名 H4 小节重复出现(缺陷描述已列重复小节名与次数),目录重复堆叠属评标硬扣分点。\n请以局部 patch 方式修复:同一主题只保留一个小节——将重复小节中的独有内容合并进保留小节(含正文与表格),删除冗余小节的标题与重复内容;若两小节主题确实不同,则将后者标题重命名为可区分的具体主题(禁止只加“一/二”序号敷衍)。合并后全文不得出现两个同名标题。","cross-chapter-section":"【跨章同名小节改写归并】\n该章节存在与其他章节同名的小节(缺陷描述已给出小节名与归属章),同一主题小节全文只保留一处,跨章串章重复即目录污染。\n请以局部 patch 方式修复本章的同名小节:内容与本章主题相关的,改写标题为与本章语境可区分的具体主题(禁止只加“一/二”序号敷衍)并归并内容;内容与本章无关的,整节删除(replacement 输出空字符串,锚点定位该小节标题行起至下一同级/上级标题行前的全部内容)。只处理该同名小节,不得改动其他内容。","major-content-structure":"【主要施工内容结构定向修复】\n该章节的主要施工内容小节结构不达标。\n请以局部 patch 方式修复:①将“项目主要施工内容”写成三级标题(### 项目主要施工内容),内部专业工程写成四级标题(#### 专业工程名称);②同一专业工程只保留一个小节,重复小节的独有内容合并后删除冗余小节;③每个专业工程小节必须含“施工概况:”“施工流程:”“施工方法:”三个标签,施工流程至少有 1 处 4 个环节以上的工序顺序表达(形式由模型自然选择:顺序词叙述、编号步骤、有序/无序列表或箭头链均可),施工方法至少 4 个带单位工艺参数。不得删除已有的事实数据。","requirement-unresponded":"【评分项要求定向补写】\n招标文件明确要求该评分项必须显性响应,当前正文零命中,零响应即评标失分。\n请以局部 patch 方式在该章节合适位置补写一段响应文本:逐字写明该要求原文(含核心词),并配套本项目落实措施与保证体系(组织、技术、检查、验收闭环);不新增小节、不改动其他内容。","self-undermining":"【自伤表述定向改写】\n该章节正文包含暴露投标短板的表述,正式投标文件不得主动示弱。\n请以局部 patch 方式将该句改写为正向落实表述(如“按施工图绿色建筑专篇编制专项方案,逐项落实评分项并跟踪验收”);若该表述属现场条件类合理风险描述(地质/管线尚不明确),保留但必须补充勘查计划与应对措施。只修改相关句子。","fabricated-date":"【编造开工日期定向修复】\n该章节正文出现招标资料未提供、且违反“以开工令时间为准”条款的具体日历日期。\n请以局部 patch 方式删除该具体日期,统一改写为“以开工令时间为准”;如为进度计划节点,必须标注为计划推算节点并保持与总工期一致。只修改相关句子。","field-value-mismatch":"【字段数值错配定向修复】\n该章节正文将总占地面积误作建筑面积(或其他相近槽位混淆)。\n请以局部 patch 方式按绑定资料口径修正该数值并保持字段标签正确:总占地面积与建筑面积必须分开表述,不得互换数值。只修改相关句子。","area-arithmetic":"【面积算术一致性定向修复】\n该章节正文同一语句内地上+地下面积之和不等于单体建筑面积。\n请以局部 patch 方式按绑定资料口径统一三者数值,使地上+地下=总/单体面积,删除错误数值表述。只修改相关句子。","labor-contradiction":"【劳动力数据定向修复】\n该章节正文“高峰期 X 人”与分阶段投入明细表峰值矛盾(缺陷描述中的数值对即矛盾数字)。\n请以局部 patch 方式以分阶段明细表为准统一劳动力峰值数据:正文峰值表述与表格数据必须一致,删除矛盾数字或调整表格。只修改相关句子。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。","data-consistency":"【数据一致性矛盾定向修复】\n该章节正文存在数据矛盾(缺陷描述中的原文 A 与原文 B 为矛盾数值对,必须统一)。\n请以局部 patch 方式统一数据:以绑定资料(图纸/工程量清单/招标文件)为准选定唯一数值,将矛盾数值对中的错误表述删除或修正为一致值;资料未明确的改为定性表述(如“按规范要求取值”),禁止编造。只修改相关数值所在句子。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。","semantic-choice":'【语义矛盾定向修复】\n该章节正文出现与项目关键决策锁不一致的"实体-选择"表述(缺陷描述已给出锁定值、冲突取值与冲突原句),同一决策两套方案并存即评审硬伤。\n请以局部 patch 方式将冲突表述统一改写为锁定值表述(如锁定塔式起重机而原句写施工电梯,则改为塔式起重机),保持句子其余内容与数据不变;若原句整体围绕锁外方案铺陈无法局部改写,整句删除。只修改相关句子。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。',"support-conflict":"【支护体系一致性定向修复】\n该章节正文放坡喷锚类与灌注桩排桩类两套支护体系并存。\n请以局部 patch 方式统一为一种支护体系(以图纸/地质条件为准),删除另一种体系的表述,并补充基坑开挖深度数值支撑危大分级判定。只修改相关句子。","dangerous-list-inconsistent":"【危大清单一致性定向修复】\n该章节正文存在多处危大工程辨识清单且项名/数量不一致。\n请以局部 patch 方式将两处清单合并统一:项名、数量与分级表述唯一且一致,删除重复清单。只修改相关列表。","six-hundred-percent":"【六个百分百逐项补写】\n该章节正文的扬尘治理措施未逐项覆盖“六个百分百”全部六项。\n请以局部 patch 方式逐条补齐缺失项(工地周边100%围挡、物料堆放100%覆盖、出入车辆100%冲洗、施工现场地面100%硬化、拆迁工地100%湿法作业、渣土车辆100%密闭运输),每项一句落实措施。不新增小节。若本项目无拆迁工程,对“拆迁工地100%湿法作业”必须显式说明不适用原因(如“本项目无拆迁工程,不涉及拆迁工地湿法作业”),不得省略该项。","local-award":"【属地创优目标补写】\n该章节正文未提及省市级优质工程/文明标准化工地等创优目标(安徽省属地适配项)。\n请以局部 patch 方式在质量目标或创优规划位置补写与项目实际规模相符的创优目标表述;奖项名称必须以评分项要求提取结果(招标文件原文)为准逐字落位,禁止自行编造或替换为其他奖项名称。只修改目标表述相关句子。","green-quant":"【四节一环保量化指标补写】\n该章节绿色施工内容无任何量化指标(非传统水源利用率/漏损率/土方平衡率/废弃物回收率等)。\n请以局部 patch 方式补充量化指标与模板周转次数:数值参考行业通用水平与附录八基准(如可回收废弃物回收率≥80%、模板周转≥8次),不得编造极端值;每个指标配一句落实措施。只修改绿色施工相关句子。","work-injury":"【工伤保险表述补写】\n该章节正文有劳务/农民工管理内容但未提及工伤保险缴纳(政策合规关键词漏项)。\n请以局部 patch 方式在劳务管理/农民工工资保障位置补充“按规定为作业人员办理工伤保险”表述。只修改劳务管理相关句子。","param-conflict":"【参数口径统一定向修复】\n该章节正文同一参数概念出现多口径数值(详见缺陷描述中的数值原文),自相矛盾即评审硬伤。\n请以局部 patch 方式统一口径:以绑定资料(图纸/工程量清单/规范)为准选定唯一数值,删除其余矛盾表述;资料未明确的参数改为定性表述(如“按规范要求取值”),禁止编造。只修改相关数值所在句子。","system-zero-coverage":"【专业工程系统零覆盖补写】\n该章节大纲涉及某专业工程系统(详见缺陷描述中的系统名),但正文对该系统零覆盖,零覆盖即评标失分。\n请以局部 patch 方式在该章节合适位置补写该系统施工方案正文:含施工概况(工程量与作业条件)、施工流程(不少于 4 个环节的工序顺序表达,形式由模型自然选择:顺序词叙述、编号步骤、有序/无序列表或箭头链均可)、施工方法(至少 4 个带单位工艺参数,参数必须来自绑定资料,不得编造)。不得删除已有内容。","dangerous-list-missing":"【危大工程辨识清单补全】\n正文已出现危大工程适用前提(基坑深度/脚手架高度/起重设备等),但辨识清单遗漏适用项或全文未编制辨识清单,遗漏即合规硬伤。\n请以局部 patch 方式按建办质〔2018〕31号补全辨识:将遗漏项写入危大工程辨识清单并标注分级,超过一定规模的专项施工方案注明专家论证要求;清单项名与全文其他清单保持唯一一致。只修改清单相关段落。","repeated-word":"【叠词重复表述定向修复】\n该章节正文存在同一双字词紧邻重复(如“执行执行”“进行进行”)。\n请以局部 patch 方式删除紧邻重复字词,保持语句完整通顺;其余内容与事实数据不得改动。","commercial-data":"【商务条款数据定向清理】\n该章节正文出现商务条款数据(暂列金额/暂估价/综合单价/税率等),施组正文禁止出现商务数据。\n请以局部 patch 方式删除含商务数据的句子:句中的商务数字(金额/单价/税率)一律删除,不得改写为其他商务表述;如删除后语义不完整,改写为定性表述(如“按合同约定执行”)。只修改相关句子。","qualification-mixed":"【投标人资格内容串章删除】\n该章节正文包含资格审查内容小节(营业执照/资质证书/安全生产许可证/财务状况等),属资格文件/商务文件内容,不属于施工组织设计正文。\n请以局部 patch 方式整体删除该小节:replacement 输出为空字符串(删除语义),锚点或 originalText 定位该小节标题行起至下一同级/上级标题行前的全部内容(含标题行);删除后正文不得残留资格核验、资质证照年检、财务状况证明等表述。只删除该小节,不得改动其他内容。","boq-placement":"【清单项落位定向补写】\n该章节对应专业工程的工程量清单项在正文零落位或落位率不足,零落位即评审失分。\n请以局部 patch 方式在“主要施工内容”小节按专业工程分组补写未落位清单项(缺陷描述中已列明细,最多 30 项,其余同类项按已列名称分组归并):每条写“施工概况:”工程名称+工程量+作业条件;“施工流程:”不少于 4 个环节的工序顺序表达(形式由模型自然选择:顺序词叙述、编号步骤、有序/无序列表或箭头链均可);“施工方法:”至少 4 个带单位工艺参数。清单项名称必须逐字引用缺陷描述中的原文(不得改写为近似词),参数必须来自缺陷描述或绑定资料,禁止编造。不新增小节标题。","precise-param":"【关键参数落位定向补写】\n该章节正文缺少资料中的关键工程参数(工期/面积/强度等级/材料规格/规范编号,缺陷描述中已列缺失参数)。\n请以局部 patch 方式将缺失的关键参数自然补入相关句子:参数值必须与资料一致,不得编造;补写后保持原句结构不变。只修改相关句子。","stage-phrasing":"【阶段口径统一定向修复】\n该章节正文存在多种互异的施工阶段划分口径(详见缺陷描述中的划分句原文),口径互异即自相矛盾。\n请以局部 patch 方式统一口径:以总进度计划/施工部署章节的阶段划分为唯一口径,其余划分句逐字对齐或删除;划分句保留必要的阶段名称与工序对应关系,不得丢失事实。只修改相关句子。","emergency-depth":"【应急预案小节补强】\n该章节应急预案小节未达到可落地深度(详见缺陷描述:缺字数或缺三要素之一)。\n请以局部 patch 方式补写缺失要素:应急组织体系(领导小组/抢险队与职责)、应急处置程序与演练安排(含响应分级与处置流程)、应急物资保障(清单与配置数量);总字数不少于 300 字,内容必须绑定本项目风险特征。只补写该小节缺失要素,不得删除已有内容。"}[a7(a)]||"【交付阻断缺陷定向修复】\n该章节正文存在交付阻断级缺陷,详见缺陷描述。\n请以局部 patch 方式修复:结合缺陷描述定位相关文本,删除错误内容或按专业规范改写,保持其余内容与事实数据不变。只修改相关句子。";return`${b}
|
|
115
|
+
${(0,z.TP)('本修复指令仅指导局部修改:指令文字本身(含"不得出现/不再出现/禁止出现"等约束表述)禁止写入正文,正文只输出修复后的正式内容')}`},a9=a=>{if(a.chapterId){let b=aA.findIndex(b=>b.id===a.chapterId);if(b>=0)return b}if(a.sectionTitle){let b=a.sectionTitle.replace(/[\s,,]/gu,""),c=aA.findIndex(a=>(a.sections||[]).some(a=>a.replace(/[\s,,]/gu,"")===b)||a.title.replace(/[\s,,]/gu,"")===b||b.length>=6&&a5(a).includes(b.slice(0,12)));if(c>=0)return c}let b=a.message,c=/“([^”]+)”/u.exec(b)?.[1]?.replace(/\s+/gu,"")||"";switch(a7(b)){case"source-phrase":return aA.findIndex(a=>v.kt.test(a.content||""));case"internal-term":{let a=/“([^”]{2,})/u.exec(b)?.[1]?.replace(/\s+/gu,"")||"";if(a){let b=aA.findIndex(b=>a5(b).includes(a.slice(0,12)));if(b>=0)return b}return aA.findIndex(a=>(a.content||"").includes("工作包"))}case"overview-recap":{let a=/“([^”]{4,})/u.exec(b)?.[1]?.replace(/\s+/gu,"")||"";if(a){let b=aA.findIndex(b=>a5(b).includes(a.slice(0,16)));if(b>=0)return b}return aA.findIndex(a=>!/工程概况|项目概况|基本信息/u.test(a.title)&&/本项目为|本工程为|该项目为|该工程为/u.test(a.content||""))}case"fact-verification":{let a=(b.split("数字")[1]||"").trim();if(!a)return -1;let c=a.split(/[、,,\s]+/u).filter(Boolean),d=[...new Set(c.map(a=>{let b=/^\d[\d,,]*(?:\.\d+)?/u.exec(a);return b?b[0]:""}).filter(a=>a.length>=2))];if(d.length>0){let a=aA.findIndex(a=>d.some(b=>a5(a).includes(b)));if(a>=0)return a}return aA.findIndex(a=>c.some(b=>b&&a5(a).includes(b.replace(/\s+/gu,""))))}case"major-content-structure":return aA.findIndex(a=>/项目主要施工内容|主要施工内容/u.test(`${a.title} ${(a.sections||[]).join(" ")}`)||/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目)?主要施工\s*内容/gmu.test(a.content||""));case"requirement-unresponded":{let a=(/核心词:([^))]*)/u.exec(b)?.[1]||"").split(/[、/,,/\s]+/u).filter(a=>a.length>=2),c=aA.findIndex(b=>a.some(a=>a5(b).includes(a)));if(c>=0)return c;let d=aA.findIndex(a=>/质量目标|创优|质量保证|绿色施工|文明施工/u.test(a.title));return d>=0?d:0}case"self-undermining":return c?aA.findIndex(a=>a5(a).includes(c.slice(0,12))):-1;case"fabricated-date":return c?aA.findIndex(a=>a5(a).includes(c)):-1;case"field-value-mismatch":case"area-arithmetic":{let a=(b.match(/[\d,]+(?:\.\d+)?/gu)||[]).map(a=>a.replace(/[,,]/gu,"")).filter(a=>a.length>=3);return aA.findIndex(b=>a.some(a=>a5(b).includes(a)))}case"data-consistency":{let a=(b.match(/[\d,]+(?:\.\d+)?/gu)||[]).map(a=>a.replace(/[,,]/gu,"")).filter(a=>a.length>=3);return aA.findIndex(b=>a.some(a=>a5(b).includes(a)))}case"semantic-choice":return c?aA.findIndex(a=>a5(a).includes(c.slice(0,12))):-1;case"labor-contradiction":return aA.findIndex(a=>/高峰/u.test(a.content||""));case"support-conflict":return aA.findIndex(a=>/放坡|喷锚|土钉|灌注桩|排桩|基坑支护/u.test(a.content||""));case"dangerous-list-inconsistent":return aA.findIndex(a=>/危大/u.test(`${a.title} ${a.content||""}`));case"six-hundred-percent":return aA.findIndex(a=>/扬尘|环保|文明施工|绿色施工/u.test(`${a.title} ${a.content||""}`));case"local-award":{let a=aA.findIndex(a=>/质量|创优|目标/u.test(a.title));return a>=0?a:0}case"green-quant":{let a=aA.findIndex(a=>/绿色|环保|节能|四节/u.test(`${a.title} ${a.content||""}`));return a>=0?a:0}case"work-injury":{let a=aA.findIndex(a=>/农民工工资|劳务管理|劳务实名|工资保障/u.test(a.content||""));if(a>=0)return a;return aA.findIndex(a=>/劳务|农民工|工资/u.test(`${a.title} ${a.content||""}`))}case"param-conflict":{let a=(b.match(/[\d]+(?:\.\d+)?\s*(?:mm|cm|m|米|MPa|kN|kV|kW|℃|°C|元|万元|人|天|日|个|层|樘|处|套|台|t|吨)/gu)||[]).map(a=>a.replace(/\s+/gu,""));return aA.findIndex(b=>a.some(a=>a5(b).includes(a)))}case"system-zero-coverage":{let a=(b.split(":")[1]||"").split(/[、,,]/u).map(a=>a.trim()).filter(Boolean);return aA.findIndex(b=>a.some(a=>a&&b.title.includes(a)))}case"dangerous-list-missing":return aA.findIndex(a=>/危大|基坑|脚手架|起重|吊篮|拆除/u.test(`${a.title} ${a.content||""}`));case"repeated-word":{let a=[...b.matchAll(/“([^”]{2,})”/gu)].map(a=>a[1]);return aA.findIndex(b=>a.some(a=>a5(b).includes(a)))}case"commercial-data":{let a=(b.split(":")[1]||"").split(/[、,,]/u).map(a=>a.trim()).filter(Boolean);return aA.findIndex(b=>a.some(a=>a&&(b.content||"").includes(a)))}case"qualification-mixed":{let a=[...b.matchAll(/“([^”]{2,40})”/gu)].map(a=>a[1]);return aA.findIndex(b=>a.some(a=>(b.content||"").includes(a)))}case"boq-placement":return aA.findIndex(a=>/项目主要施工内容|主要施工内容/u.test(`${a.title} ${(a.sections||[]).join(" ")}`)||/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目)?主要施工\s*内容/gmu.test(a.content||""));case"precise-param":{let a=(b.split("缺失如")[1]||"").split(/[、,,))]/u).map(a=>a.trim()).filter(a=>a.length>=3),c=aA.findIndex(b=>a.some(a=>a5(b).includes(a)));if(c>=0)return c;let d=aA.findIndex(a=>/工程概况|项目概况|基本信息/u.test(a.title));return d>=0?d:0}case"stage-phrasing":{let a=[...b.matchAll(/“([^”]{3,})”/gu)].map(a=>a[1]),c=aA.findIndex(b=>a.some(a=>a5(b).includes(a)));if(c>=0)return c;let d=aA.findIndex(a=>/进度|部署|工期/u.test(a.title));return d>=0?d:0}case"emergency-depth":return aA.findIndex(a=>/应急|安全/u.test(`${a.title} ${a.content||""}`));default:{let a=b.replace(/[\s,,]/gu,""),c=-1,d=0;return aA.forEach((b,e)=>{let f=b.title.replace(/[\s,,]/gu,"");f.length>=3&&f.length>d&&a.startsWith(f)&&(c=e,d=f.length)}),c}}},ba=()=>dQ(eA((0,v.bR)((0,v.kT)((0,v.K7)(ey(dD(eD({template:h,requirement:X,projectRoot:A,projectId:B,facts:ad,structuredFacts:ak,factsModel:am,chapters:aA,sources:aq,missingItems:F,validation:ap,validationIssues:at,executionStages:az,assets:ax,promptDocumentRules:y}),ak),m)))),h)),bb=new Set,bc=Date.now();if(a4.length>0){let a=0,b=await (async()=>{let a=aA.find(a=>/工程概况|项目概况|基本信息/u.test(a.title))?.content;if(!a)return;let b=(0,b2.t1)(aB);if(0===b.sentences.length)return;let c=await (0,R.Mv)(b.sentences,[a]);return{overviewBody:a,similarity:c}})(),c=c$({factsModel:am,finalChapterDrafts:aA,tenderRequirements:P,factTokenScopeClassifier:S,reviewDataConsistencyCached:aL,decisionLock:a2,effectiveChapters:g,recapTools:b}),d="0"!==process.env.DOCUMENT_REPAIR_PRECHECK,e="0"!==process.env.DOCUMENT_REPAIR_FAILFAST,f=[],i=new Map;for(let a of a4){let b=a9(a);if(b<0){(0,bu.fx)(k,(0,bu.X5)({type:"llm_review",roleId:"agent-blocker-fix-unlocated",status:"failed",message:`交付阻断缺陷未定位到章节(未进入修复循环):${a.message}`,details:["章节定位失败:缺陷消息不含可匹配的章节标题,且正文各章标题均无命中","处理:该缺陷已记录并保留在最终校验结果中"]},{subtitle:"交付阻断修复"})),(0,bu.fx)(aV,(0,bu.X5)({type:"llm_review",roleId:"agent-blocker-fix-unlocated",status:"failed",message:`交付阻断缺陷未定位到章节(未进入修复循环):${a.message}`,details:["章节定位失败"]},{subtitle:"交付阻断修复"})),U(aA,k);continue}let c=i.get(b);void 0===c?(i.set(b,f.length),f.push({chapterIndex:b,issues:[a]})):f[c].issues.push(a)}let j=Math.max(1,Math.min(6,Number(process.env.DOCUMENT_BLOCKER_FIX_CONCURRENCY||3)));for(let b=0;b<f.length;b+=j){let i=f.slice(b,b+j);await Promise.all(i.map(async({chapterIndex:b,issues:f})=>{let i=aA[b],j=g.find(a=>a.id===i.id||a.title===i.title);for(let g of f){let f,l=a7(g.message),m=c.find(a=>a.match.test(g.message));if(d&&m&&0===(aN&&"data-consistency"===l?(()=>{let a=[...new Set([...g.message.matchAll(/[\d,]+(?:\.\d+)?/gu)].map(a=>a[0].replace(/[,,]/gu,"")).filter(a=>a.length>=2))],b=aB.replace(/\s+/gu,"");return a.length>=2&&a.every(a=>b.includes(a))?[g.message]:[]})():(await m.detect(aB)).filter(a=>a7(a)===l)).length){let a=/“([^”]+)”/u.exec(g.message)?.[1];a&&bb.add(`${l}\u0000${(0,by.AO)(a)}`);let b=(0,bu.X5)({type:"llm_review",roleId:`agent-blocker-fix-${i.id}-${l||"unclassified"}`,status:"success",message:`交付阻断缺陷修复前预检通过:${i.title}(同类缺陷已消除,跳过 LLM 修复轮次)`,details:[g.message]},{subtitle:"交付阻断修复"});(0,bu.fx)(k,b),(0,bu.fx)(aV,b),U(aA,k);continue}if(["labor-contradiction","data-consistency","param-conflict","area-arithmetic","field-value-mismatch"].includes(l)){let c=(0,b2.fE)(aA[b].content,{scheduleAuthority:an});if(c.fixedCount>0){aA[b]={...aA[b],content:c.markdown},a+=c.fixedCount,aB=ba();let d=m?(await m.detect(aB)).filter(a=>a7(a)===l):[],e=(0,bu.X5)({type:"llm_review",roleId:`agent-blocker-fix-${i.id}-${l}`,status:0===d.length?"success":"failed",message:0===d.length?`交付阻断缺陷确定性修复完成:${i.title}(${c.fixedCount} 处定点替换,跳过 LLM 轮次)`:`交付阻断缺陷确定性修复后仍残留:${i.title}(定点替换 ${c.fixedCount} 处,复检仍有 ${d.length} 处同类缺陷)`,details:[g.message,...c.details.slice(0,4)]},{subtitle:"交付阻断修复"});(0,bu.fx)(k,e),(0,bu.fx)(aV,e),U(aA,k);continue}}let n=new Set(["requirement-unresponded","six-hundred-percent","system-zero-coverage","boq-placement","green-quant","work-injury","local-award","emergency-depth","dangerous-list-missing","precise-param"]),o=new Set(["major-content-structure","major-content-dirty","major-content-flow","major-content-method","major-content-dup"]),p=(a,b)=>{let c=a.split(/\r?\n/u).map(a=>a.trim()),d=-1,e=3;if(c.forEach((a,c)=>{let f=/^(#{2,4})\s/u.exec(a);f&&b.test(a)&&(d=c,e=f[1].length)}),d<0)return;let f=RegExp(`^#{1,${e}}\\s`),g=c.length;for(let a=d+1;a<c.length;a+=1)if(f.test(c[a])){g=a;break}for(let a=g-1;a>d;a-=1){let b=[...c[a].matchAll(/[^。;;]+[。;;]/gu)].pop();if(b){let a=b[0].trim();if(a.length>=12&&a.length<=80)return a}}},r=a=>{let b=a.split(/\r?\n/u).map(a=>a.trim());for(let a=b.length-1;a>=0;a-=1){let c=b[a];if(!c||/^#{1,6}\s/u.test(c)||/^\s*\|/u.test(c)||/^\s*[-*]\s/u.test(c))continue;let d=[...c.matchAll(/[^。;;]+[。;;]/gu)].pop();if(d){let a=d[0].trim();if(a.length>=12&&a.length<=80)return a}}},s=(a,b)=>{let c=a.split(/\r?\n/u).map(a=>a.trim()),d=c.findIndex(a=>/^#{2,4}\s/u.test(a)&&b.test(a));if(d<0)return;let e=c[d],f=(/^(#{2,4})\s/u.exec(e)||[])[1]||"###",g=RegExp(`^#{1,${f.length}}\\s`);for(let a=d+1;a<c.length;a+=1)if(g.test(c[a]))return{text:e,endText:c[a]};return{text:e}},t=(a,c)=>{let d=aA[b].content,e=d.replace(/\s+/gu,""),f=[],h=a=>{let b=a.replace(/\s+/gu,"");!(b.length<6)&&!(b.length>80)&&e.includes(b)&&(f.some(a=>("string"==typeof a?a:a.text).replace(/\s+/gu,"")===b)||f.push(a))};for(let b of a)for(let a of b.matchAll(/[“【]([^”】]{6,80})[”】]/gu))h(a[1]);if(f.length>0)return f.slice(0,4);if(n.has(c)){let a="boq-placement"===c&&p(d,/^#{2,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目)?主要施工\s*内容/u)||r(d);return a?[{text:a,append:!0}]:[]}if(o.has(c)){let a=s(d,/^#{2,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目)?主要施工\s*内容/u);if(a){let b=d.split(/\r?\n/u),c=b.findIndex(b=>b.trim()===a.text),e=a.endText?b.findIndex((b,d)=>d>c&&b.trim()===a.endText):b.length;if(b.slice(c,e>=0?e:b.length).join("\n").length<=7e3)return[a]}}if("duplicate-subsection"===c)for(let a of g.message.matchAll(/“([^”]{2,60})”/gu)){let b=a[1].trim(),c=d.split(/\r?\n/u).map(a=>a.trim()),e=[];if(c.forEach((a,c)=>{/^#{3,4}\s/u.test(a)&&(a.includes(b)||b.includes(a.replace(/^#{3,4}\s+/u,"")))&&e.push(c)}),e.length<2)continue;let f=(/^(#{3,4})\s/u.exec(c[e[0]])||[])[1]||"####",g=RegExp(`^#{1,${f.length}}\\s`),h=e[0],i=e[1];if(c.slice(h+1,i).some(a=>g.test(a)))continue;let j=c.findIndex((a,b)=>b>i&&g.test(a));if(c.slice(h,j>=0?j:c.length).join("\n").length<=7e3)return[{text:c[h],endText:j>=0?c[j]:void 0}]}return[]},u=(0,bu.X5)({type:"llm_review",roleId:`agent-blocker-fix-${i.id}-${l||"unclassified"}`,status:"running",message:`正在修复交付阻断缺陷:${i.title}(${l||"未分类"})`,details:[g.message]},{subtitle:"交付阻断修复"});(0,bu.fx)(k,u),(0,bu.fx)(aV,u),U(aA,k);let v=[g.message],w="";for(f=0;f<2&&v.length>0;f+=1){let c=0===f?a8(g.message):["【修复未生效升级重试】",`上一轮修复后复检仍存在 ${v.length} 处同类缺陷(复检证据:${v.slice(0,2).join(";")}),说明上一轮修复方式与缺陷特征不匹配或 patch 未落位。`,"本轮必须更换修复方式:先精确定位问题句,再整体替换该句(不得只改个别词),替换后的文本必须完全符合下列要求:",a8(g.message)].join("\n"),d=t(0===f?[g.message]:[g.message,...v.slice(0,2)],l),k=d.some(a=>"object"==typeof a&&!a.append),n=await V(()=>(0,bv.l8)({template:h,chapter:{id:i.id,title:i.title,content:aA[b].content,evidence:i.evidence,missingFacts:i.missingFacts,sections:i.sections},issues:[g.message,g.suggestion||""],promptTexts:c,requirement:X,forbidDrawingImages:!1,diagnostics:q,signal:W,anchorTexts:d.length>0?d:void 0,maxTokens:k?8192:void 0}));if(n.content&&n.content!==aA[b].content){if(aA[b]={...aA[b],content:j?dP(n.content,j):n.content},a+=n.appliedCount,aB=ba(),m)if(aN&&"data-consistency"===l){let a=[...new Set([...g.message.matchAll(/[\d,]+(?:\.\d+)?/gu)].map(a=>a[0].replace(/[,,]/gu,"")).filter(a=>a.length>=2))],b=aB.replace(/\s+/gu,"");v=a.length>=2&&a.every(a=>b.includes(a))?[g.message]:[]}else v=(await m.detect(aB)).filter(a=>a7(a)===l);else n.appliedCount>0&&(v=[]);if(0===v.length)break}else if(0===f){if(e&&n.producedCount>0&&0===n.appliedCount){w=`patch 已产出 ${n.producedCount} 条但均未应用(锚点失配或结构校验拒绝;fail-fast 跳过升级轮)`;break}continue}else{w=n.producedCount>0?`patch 已产出 ${n.producedCount} 条但均未应用(锚点失配或结构校验拒绝)`:"定位失败或输出无效(未产出 patch)";break}}if(v.length>0&&m?.delete){let c=await m.delete(aA[b].content,g.message);c.removed>0&&(aA[b]={...aA[b],content:c.content},a+=c.removed,aB=ba(),v=(await m.detect(aB)).filter(a=>a7(a)===l))}let x=0===v.length;if(x){let a=/“([^”]+)”/u.exec(g.message)?.[1];a&&bb.add(`${l}\u0000${(0,by.AO)(a)}`)}x||w||(w="patch 已应用但未消除缺陷(修复方式不匹配)");let y=(0,bu.X5)({type:"llm_review",roleId:`agent-blocker-fix-${i.id}-${l||"unclassified"}`,status:x?"success":"failed",message:x?`交付阻断缺陷修复完成:${i.title}(${f} 轮 LLM 修复后复检通过)`:`交付阻断缺陷修复未生效:${i.title}(${f} 轮 LLM 修复${m?.delete?"+确定性删除":""}后复检仍有 ${v.length} 处;失败原因:${w})`,details:[g.message,...x?[]:[`复检残留:${v.slice(0,3).join(";")}`]]},{subtitle:"交付阻断修复"});(0,bu.fx)(k,y),(0,bu.fx)(aV,y),U(aA,k)}}))}a>0&&(aB=ba(),await aY())}q.metrics.push({name:"phase:blocker-repair",startedAt:bc,endedAt:Date.now(),durationMs:Date.now()-bc});let bd=await (0,x.KI)(aA,am,M),be=(await (0,x.Yb)(aB,am,M)).fixedCount>0;if(bd.fixedCount>0||be){aB=dQ(eA((0,v.bR)((0,v.kT)((0,v.K7)(ey(dD(eD({template:h,requirement:X,projectRoot:A,projectId:B,facts:ad,structuredFacts:ak,factsModel:am,chapters:aA,sources:aq,missingItems:F,validation:ap,validationIssues:at,executionStages:az,assets:ax,promptDocumentRules:y}),ak),m)))),h));let a=await (0,x.Yb)(aB,am,M);a.fixedCount>0&&(aB=a.markdown);let b=(0,b2.fE)(aB,{scheduleAuthority:an});b.fixedCount>0&&(aB=b.markdown),await aY();let c=bd.fixedCount+a.fixedCount+b.fixedCount,d=[...new Set([...bd.details,...a.details,...b.details])];(0,bu.fx)(k,(0,bu.X5)({type:"validation",roleId:"deterministic-consistency-fix",status:"success",message:`跨章一致性数值定点修复:${c} 处(${d.slice(0,4).join("、")})`,details:d.slice(4)},{subtitle:"跨章一致性修复"}))}let bf=(0,b2.fE)(aB,{scheduleAuthority:an});bf.fixedCount>0&&(aB=bf.markdown,await aY());let bg=(0,v.K7)(aB);bg!==aB&&(aB=bg,await aY());let bh=await ex({template:h,chapters:aA,effectiveChapters:g,requirement:X,projectName:m?.projectName||"",tenderContext:function(a){let b=[],c=a.factsModel?.canonical,d=a=>a?.value;if(c){let a=a=>Array.isArray(a)?a.map(a=>a?.value).filter(Boolean):a?.value?[a.value]:[],e=[d(c.projectIdentity?.projectName)?`项目名称:${d(c.projectIdentity.projectName)}`:"",d(c.projectIdentity?.owner)?`招标人:${d(c.projectIdentity.owner)}`:"",d(c.projectIdentity?.location)?`建设地点:${d(c.projectIdentity.location)}`:"",...a(c.projectScope?.scale).map(a=>`建设规模:${a}`),...a(c.schedule?.duration).map(a=>`计划工期:${a}`),...a(c.quality?.target).map(a=>`质量目标:${a}`)].filter(Boolean);e.length&&b.push(`工程概况事实:
|
|
116
116
|
${e.join("\n")}`)}let e=(a.evaluationCriteriaItems||[]).filter(Boolean);e.length&&b.push(`评标办法技术评审条目:
|
|
117
117
|
${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(`招标文件评分项要求:
|
|
118
118
|
${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(`工程量清单特征摘要:
|
|
119
|
-
${g.map(a=>`- ${a}`).join("\n")}`),b.join("\n\n")}({factsModel:am,evaluationCriteriaItems:O,tenderRequirements:P}),resolvedBlockerSignatures:ba,diagnostics:q,signal:W,heartbeat:V,onStage:a=>{let b=(0,bu.X5)({type:"llm_review",roleId:"agent-qingtian-review",status:a.status,message:a.message,details:a.details},{subtitle:"全维度评审"});(0,bu.fx)(k,b),(0,bu.fx)(aU,b),U(az,k)}});aW=bg.reviewed?bg.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}}):[],bg.fixedCount>0?(aA=a9(),await aX()):aW.length>0&&await aX();let bh=await (async()=>{let a=az.find(a=>/工程概况|项目概况|基本信息/u.test(a.title))?.content;if(!a)return;let b=(0,b2.t1)(aA);if(0===b.sentences.length)return;let c=await (0,R.Mv)(b.sentences,[a]);return{overviewBody:a,similarity:c}})(),bi=Date.now(),bj=[...await (0,b2.sn)(aA),...await (0,b2.cJ)(aA,am),...bh?(0,b2.l4)(aA,{semanticSimilarity:bh.similarity}):[],...await (0,b3.WT)(aA),...(0,b2.cf)(aA,am),...(0,b2.a8)(aA,am),...(0,b2.u2)(aA),...(0,b2.rA)(aA),...(await aK(aA)).map(a=>ca(a)),...cd(aA,a1).map(a=>ce(a)),...cQ(az,g||[]),...await (0,b2.r8)(aA),...(0,b2.vH)(aA),...await (0,b2.mC)(aA),...(0,b2.Xc)(aA)].filter(a=>"error"===a.level),bk=bj.filter(a=>"data-consistency"===a6(a.message)).map(a=>a.message);if(bj.length>0){let a=0,b="0"!==process.env.DOCUMENT_PREDELIVERY_DELETE_FALLBACK,c=c$({factsModel:am,finalChapterDrafts:az,tenderRequirements:P,factTokenScopeClassifier:S,reviewDataConsistencyCached:aK,decisionLock:a1,effectiveChapters:g,recapTools:bh},b?{}:{deleteCodes:cZ}),d="0"!==process.env.DOCUMENT_REPAIR_PRECHECK,e="0"!==process.env.DOCUMENT_REPAIR_FAILFAST,f=[],i=new Map;for(let a of bj){let b=a8(a);if(b<0)continue;let c=i.get(b);void 0===c?(i.set(b,f.length),f.push({chapterIndex:b,issues:[a]})):f[c].issues.push(a)}let j=Math.max(1,Math.min(6,Number(process.env.DOCUMENT_PREDELIVERY_FIX_CONCURRENCY||3)));for(let b=0;b<f.length;b+=j){let i=f.slice(b,b+j);await Promise.all(i.map(async({chapterIndex:b,issues:f})=>{let i=az[b],j=g.find(a=>a.id===i.id||a.title===i.title);for(let g of f){let f,l=a6(g.message),m=c.find(a=>a.codes.includes(l));if(d&&m&&0===(aM&&"data-consistency"===l?(()=>{let a=[...new Set([...g.message.matchAll(/[\d,]+(?:\.\d+)?/gu)].map(a=>a[0].replace(/[,,]/gu,"")).filter(a=>a.length>=2))],b=aA.replace(/\s+/gu,"");return a.length>=2&&a.every(a=>b.includes(a))?[g.message]:[]})():(await m.detect(aA)).filter(a=>a===g.message)).length){let a=(0,bu.X5)({type:"llm_review",roleId:`agent-predelivery-fix-${i.id}-${l||"unclassified"}`,status:"success",message:`交付前定向修复预检通过:${i.title}(缺陷已消除,跳过 LLM 修复轮次)`,details:[g.message]},{subtitle:"交付前修复"});(0,bu.fx)(k,a),(0,bu.fx)(aU,a),U(az,k);continue}if("labor-contradiction"===l){let c=(0,b2.fE)(az[b].content);if(c.fixedCount>0){az[b]={...az[b],content:c.markdown},a+=c.fixedCount,aA=a9();let d=m?(await m.detect(aA)).filter(a=>a===g.message):[],e=(0,bu.X5)({type:"llm_review",roleId:`agent-predelivery-fix-${i.id}-${l}`,status:0===d.length?"success":"failed",message:0===d.length?`交付前定向修复完成:${i.title}(确定性定点替换 ${c.fixedCount} 处,跳过 LLM 轮次)`:`交付前确定性修复后仍残留:${i.title}(定点替换 ${c.fixedCount} 处,复检仍有 ${d.length} 处)`,details:[g.message,...c.details.slice(0,4)]},{subtitle:"交付前修复"});(0,bu.fx)(k,e),(0,bu.fx)(aU,e),U(az,k);continue}}let n=[...g.message.matchAll(/“([^”]{6,80})”/gu)].map(a=>a[1]),o=(0,bu.X5)({type:"llm_review",roleId:`agent-predelivery-fix-${i.id}-${l||"unclassified"}`,status:"running",message:`交付前定向修复:${i.title}(${l||"未分类"})`,details:[g.message]},{subtitle:"交付前修复"});(0,bu.fx)(k,o),(0,bu.fx)(aU,o),U(az,k);let p=[g.message],r="";for(f=0;f<2&&p.length>0;f+=1){let c=0===f?a7(g.message):["【修复未生效升级重试】",`上一轮修复后复检仍存在 ${p.length} 处同类缺陷(复检证据:${p.slice(0,2).join(";")}),说明上一轮修复方式与缺陷特征不匹配或 patch 未落位。`,"本轮必须更换修复方式:先精确定位问题句,再整体替换该句(不得只改个别词),替换后的文本必须完全符合下列要求:",a7(g.message)].join("\n"),d=await V(()=>(0,bv.l8)({template:h,chapter:{id:i.id,title:i.title,content:az[b].content,evidence:i.evidence,missingFacts:i.missingFacts,sections:i.sections},issues:[g.message,g.suggestion||""],promptTexts:c,requirement:X,forbidDrawingImages:!1,diagnostics:q,signal:W,anchorTexts:n.length>0?n.slice(0,4):void 0}));if(d.content&&d.content!==az[b].content){if(az[b]={...az[b],content:j?dP(d.content,j):d.content},a+=d.appliedCount,aA=a9(),m)if(aM&&"data-consistency"===l){let a=[...new Set([...g.message.matchAll(/[\d,]+(?:\.\d+)?/gu)].map(a=>a[0].replace(/[,,]/gu,"")).filter(a=>a.length>=2))],b=aA.replace(/\s+/gu,"");p=a.length>=2&&a.every(a=>b.includes(a))?[g.message]:[]}else p=(await m.detect(aA)).filter(a=>a===g.message);else d.appliedCount>0&&(p=[]);if(0===p.length)break}else if(0===f){if(e&&d.producedCount>0&&0===d.appliedCount){r=`patch 已产出 ${d.producedCount} 条但均未应用(锚点失配或结构校验拒绝;fail-fast 跳过升级轮)`;break}continue}else{r=d.producedCount>0?`patch 已产出 ${d.producedCount} 条但均未应用(锚点失配或结构校验拒绝)`:"定位失败或输出无效(未产出 patch)";break}}if(p.length>0&&m?.delete){let c=await m.delete(az[b].content,g.message);c.removed>0&&(az[b]={...az[b],content:c.content},a+=c.removed,aA=a9(),p=(await m.detect(aA)).filter(a=>a===g.message))}let s=0===p.length;s||r||(r="patch 已应用但未消除缺陷(修复方式不匹配)");let t=(0,bu.X5)({type:"llm_review",roleId:`agent-predelivery-fix-${i.id}-${l||"unclassified"}`,status:s?"success":"failed",message:s?`交付前定向修复完成:${i.title}(${f} 轮 LLM 修复后复检通过)`:`交付前定向修复未生效:${i.title}(${f} 轮 LLM 修复${m?.delete?"+确定性删除":""}后复检仍有 ${p.length} 处;失败原因:${r})`,details:[g.message,...s?[]:[`复检残留:${p.slice(0,3).join(";")}`]]},{subtitle:"交付前修复"});(0,bu.fx)(k,t),(0,bu.fx)(aU,t),U(az,k)}}))}if(bh){let b=(0,b2.U$)(aA,bh.similarity);b!==aA&&(aA=b,a+=1)}let l=await (0,b3.NR)(aA);l!==aA&&(aA=l,a+=1);let m=(0,b2.fE)(aA);if(m.fixedCount>0&&(aA=m.markdown,a+=m.fixedCount),aM&&bk.length>0){let a=await cc(aA,bk,{signal:W,diagnostics:q});if(a.length>0){let b=(0,bu.X5)({type:"llm_review",roleId:"agent-predelivery-data-consistency-batch-recheck",status:"failed",message:`交付前数据一致性轮末统一重审:${bk.length-a.length}/${bk.length} 处矛盾已消除,${a.length} 处仍残留`,details:a.slice(0,5)},{subtitle:"交付前修复"});(0,bu.fx)(k,b),(0,bu.fx)(aU,b),U(az,k)}}a>0&&await aX()}q.metrics.push({name:"phase:pre-delivery",startedAt:bi,endedAt:Date.now(),durationMs:Date.now()-bi});let bl=(0,b2.qj)(aA);bl!==aA&&(aA=bl,await aX());let bm=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=eC(b.slice(e,a+1));f.removed>0&&(d+=1),c.push(...f.lines),e=a+1}return{markdown:c.join("\n"),removed:d}}(aA);bm.markdown!==aA&&(aA=bm.markdown,await aX());let bn=[{key:"export-gate",label:"导出门禁",passed:(aG={exportGate:aT,qualityReport:aR,repairStrategies:aS}).exportGate.passed,message:aG.exportGate.passed?"导出门禁通过":`仍有 ${aG.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:aG.qualityReport.passed,message:`${aG.qualityReport.deliveryProbability}% / ${aG.qualityReport.target}%`},{key:"completeness",label:"资料完整性",passed:aG.qualityReport.scores.completeness>=85,message:`${aG.qualityReport.scores.completeness}/100`},{key:"specificity",label:"方案针对性",passed:aG.qualityReport.scores.specificity>=85,message:`${aG.qualityReport.scores.specificity}/100`},{key:"compliance",label:"合规性",passed:aG.qualityReport.scores.compliance>=80,message:`${aG.qualityReport.scores.compliance}/100`},{key:"repair-strategies",label:"修复策略",passed:0===aG.repairStrategies.filter(a=>"high"===a.priority).length,message:aG.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}],bo=(0,x.Ff)(ar);q.quality.blockingCount+=bo.blocking,q.quality.importantCount+=bo.important,q.quality.minorCount+=bo.minor;let bp=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:q}),bq=aT.blockingIssues.length;bp.qualityIssues.blockingCount=bq;let br=await el(az,aA,{templating:aR.templating}),bs=aR.templating?await V(()=>em({templating:aR.templating,markdown:aA,diagnostics:q,signal:W})):{issues:[],reviewed:!1},bt=[...ay,...aU].map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:bq>0?"failed":"success",message:`阻断 ${bq},问题 ${ar.length}`}:"export_ready"===a.type?{...a,status:aT.passed?"success":"failed",message:aT.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:aT.passed&&"failed"===a.status&&/^agent-(?:reviewer|repairer)-/u.test(a.roleId)?{...a,status:"skipped",message:`${a.message||"章节中间审查失败"};最终门禁已通过,历史中间态已归档`}:a);bt.push((0,bu.X5)({type:"validation",roleId:"agent-final-gate",status:aT.passed?"success":"failed",message:aT.passed?"Agent 最终门禁通过":`Agent 最终门禁阻断 ${bq} 个问题`,details:aT.blockingIssues.slice(0,12).map(a=>a.message)},{subtitle:"Agent 最终门禁"}));let bw=aR.deliveryProbability<70;bt.push((0,bu.X5)({type:"validation",roleId:"document-delivery-score",status:aR.passed?"success":aT.passed?"skipped":"failed",message:aT.passed&&!aR.passed?`${aR.summary}${bw?";置信度低于 70%,建议完成续修后再交付归档":"(导出门禁已通过,作为后续优化建议归档)"}`:aR.summary,details:bw&&aT.passed?[...aR.actions,"续修建议:交付置信度低于 70% 门槛,建议按交付复核清单补齐短板维度后重新生成或续修。"]:aR.actions},{subtitle:"交付评分"})),bt.push((0,bu.X5)({type:"validation",roleId:"document-professional-score",status:"专业"===br.grade||"良好"===br.grade?"success":"skipped",message:br.summary,details:[...br.dimensions.map(a=>`${a.label}:${a.score} 分(${a.detail})`),...br.topIssues.map(a=>`待修复:${a}`)]},{subtitle:"专业度评分"})),aR.templating&&"light"!==aR.templating.level&&bt.push((0,bu.X5)({type:"validation",roleId:"document-templating-report",status:"skipped",message:`模板化检测:${"heavy"===aR.templating.level?"重度":"中度"}模板化(套话句占比 ${(100*aR.templating.fillerRatio).toFixed(1)}%,重难点归因+量化双达标占比 ${(100*aR.templating.difficultyCountermeasureRatio).toFixed(0)}%,模糊应答词 ${aR.templating.vagueHitCount} 处)`,details:bs.issues},{subtitle:"模板化检测"})),N&&bt.push((0,bu.X5)({type:"reference",roleId:"document-writing-task-brief",status:"success",message:`写作任务书:${N.documentType},${N.chapters.length} 章任务卡,全局写作焦点 ${N.globalWritingFocus.length} 条`,details:[...N.globalWritingFocus,...N.chapters.slice(0,10).map(a=>`${a.chapterTitle}:覆盖 ${a.mustCover.length} 项`)],subtitle:"写作任务书"})),bt.push((0,bu.X5)({type:"reference",roleId:"knowledge-coverage",status:aO.score>=85?"success":"failed",message:`资料确认覆盖率:${aO.score}%(证据 ${aO.evidenceCount} 条,文件 ${aO.confirmedFiles} 份)`,details:[aO.remediation]},{subtitle:"资料覆盖"})),bt.push((0,bu.X5)({type:"validation",roleId:"document-review-checklist",status:bn.every(a=>a.passed)?"success":aT.passed?"skipped":"failed",message:`交付复核清单:通过 ${bn.filter(a=>a.passed).length}/${bn.length}${aT.passed&&!bn.every(a=>a.passed)?"(导出门禁已通过,其余项作为优化建议归档)":""}`,details:bn.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let bx=[...q.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(","),bz=function(a,b=5){return d3(a,b).map(([a,b])=>`${a} ${b.calls}次/${(b.inputChars/1e4).toFixed(1)}万字`).join(",")}(q.llm.callBreakdown),bA=q.factSanitize?`,事实净化 截断${q.factSanitize.truncated}/丢弃${q.factSanitize.dropped}/编号补全${q.factSanitize.repaired}`:"";bt.push((0,bu.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${q.llm.calls} 次,失败 ${q.llm.failures} 次,瞬态重试 ${q.llm.retries} 次,schema 校验失败 ${q.llm.schemaFailures} 次,峰值并行 ${q.llm.maxActive},检索 ${q.evidence.searchQueries} 次/${Math.round(q.evidence.searchMs/1e3)} 秒,证据上下文 ${q.evidence.contextChars} 字,噪声过滤 ${q.evidence.filteredNoise} 条,预算裁剪 ${q.evidence.budgetDropped} 条,质量问题 阻断${q.quality.blockingCount}/重要${q.quality.importantCount}/轻微${q.quality.minorCount}${bA}${bx?`,Top耗时:${bx}`:""}${bz?`,调用输入Top5:${bz}`:""}`,details:[...q.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 d3(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}`})}(q.llm.callBreakdown)]},{subtitle:"后台诊断"}));let bB=az.map(a=>({...a,evidence:(0,s.QR)(a.evidence||[],{preservePinned:!0})}));return az=bB,{templateId:h.id,templateName:h.name,title:h.outputTitle,requirement:X||"",projectRoot:A,projectId:B,exportSettings:h.exportSettings,generationSettings:h.generationSettings,facts:ad,structuredFacts:ak,factsModel:am,chapters:bB,sources:ap,missingItems:[...new Set(F)],validation:ao,validationIssues:ar,exportGate:aT,executionStages:bt,assets:aw,partialChapters:az.map(a=>({id:a.id,title:a.title,chars:(0,w.V7)(a.content),status:dk(a,o.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:bB,promptRules:y,agentWorkflow:K,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:q,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:h,chapters:g,requirement:X}),knowledgeCoverage:aO,factTraces:aP,chapterCoverage:aQ,retrievalCoverage:G,qualityReport:aR,repairStrategies:aS,reviewChecklist:bn,professionalScore:br,templatingReviewIssues:bs.issues,writingTaskBrief:N,workflowVersion:c0.x,telemetry:bp,qualityBenchmark:await cY(aA)},generatedAt:Date.now(),markdown:aA}}var eI=c(70963),eJ=c(25284),eK=c(30355);function eL(a){return a.replace(/\s+/gu,"").toLowerCase()}var eM=c(14070);let eN={type:"object",required:["laborPeak"],properties:{laborPeak:{type:"object",required:!0,properties:{count:{type:"number",required:!0},phase:{type:"string"}}},laborByPhase:{type:"array",maxItems:8,items:{type:"object",properties:{phase:{type:"string"},count:{type:"number"}}}},machines:{type:"array",maxItems:16,items:{type:"object",properties:{name:{type:"string"},spec:{type:"string"},count:{type:"number"}}}},materialBatches:{type:"array",maxItems:10,items:{type:"object",properties:{name:{type:"string"},batchDesc:{type:"string"}}}},inspectionBatches:{type:"array",maxItems:8,items:{type:"object",properties:{scope:{type:"string"},planDesc:{type:"string"}}}},scheduleNodes:{type:"array",maxItems:16,items:{type:"object",properties:{node:{type:"string"},offset:{type:"string"}}}}}};async function eO(a){if("0"===process.env.DOCUMENT_PLAN_DATA_MASTER||!a.basicFacts.trim()&&0===a.chapterTitles.length)return;let b={},c=await (0,U.bb)((0,v.y4)("你是施工组织设计计划数据规划器。"),`基于项目基本事实与章节目录,推导全项目统一的计划编制类数据(这些数据资料中没有,必须由你基于工程量、总工期、工序流水与定额工效推导,且全文唯一口径):
|
|
119
|
+
${g.map(a=>`- ${a}`).join("\n")}`),b.join("\n\n")}({factsModel:am,evaluationCriteriaItems:O,tenderRequirements:P}),resolvedBlockerSignatures:bb,diagnostics:q,signal:W,heartbeat:V,onStage:a=>{let b=(0,bu.X5)({type:"llm_review",roleId:"agent-qingtian-review",status:a.status,message:a.message,details:a.details},{subtitle:"全维度评审"});(0,bu.fx)(k,b),(0,bu.fx)(aV,b),U(aA,k)}});aX=bh.reviewed?bh.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}}):[],bh.fixedCount>0?(aB=ba(),await aY()):aX.length>0&&await aY();let bi=await (async()=>{let a=aA.find(a=>/工程概况|项目概况|基本信息/u.test(a.title))?.content;if(!a)return;let b=(0,b2.t1)(aB);if(0===b.sentences.length)return;let c=await (0,R.Mv)(b.sentences,[a]);return{overviewBody:a,similarity:c}})(),bj=Date.now(),bk=[...await (0,b2.sn)(aB),...await (0,b2.cJ)(aB,am),...bi?(0,b2.l4)(aB,{semanticSimilarity:bi.similarity}):[],...await (0,b3.WT)(aB),...(0,b2.cf)(aB,am),...(0,b2.a8)(aB,am),...(0,b2.u2)(aB),...(0,b2.rA)(aB),...(await aL(aB)).map(a=>ca(a)),...cd(aB,a2).map(a=>ce(a)),...cQ(aA,g||[]),...await (0,b2.r8)(aB),...(0,b2.vH)(aB),...await (0,b2.mC)(aB),...(0,b2.Xc)(aB)].filter(a=>"error"===a.level),bl=bk.filter(a=>"data-consistency"===a7(a.message)).map(a=>a.message);if(bk.length>0){let a=0,b="0"!==process.env.DOCUMENT_PREDELIVERY_DELETE_FALLBACK,c=c$({factsModel:am,finalChapterDrafts:aA,tenderRequirements:P,factTokenScopeClassifier:S,reviewDataConsistencyCached:aL,decisionLock:a2,effectiveChapters:g,recapTools:bi},b?{}:{deleteCodes:cZ}),d="0"!==process.env.DOCUMENT_REPAIR_PRECHECK,e="0"!==process.env.DOCUMENT_REPAIR_FAILFAST,f=[],i=new Map;for(let a of bk){let b=a9(a);if(b<0)continue;let c=i.get(b);void 0===c?(i.set(b,f.length),f.push({chapterIndex:b,issues:[a]})):f[c].issues.push(a)}let j=Math.max(1,Math.min(6,Number(process.env.DOCUMENT_PREDELIVERY_FIX_CONCURRENCY||3)));for(let b=0;b<f.length;b+=j){let i=f.slice(b,b+j);await Promise.all(i.map(async({chapterIndex:b,issues:f})=>{let i=aA[b],j=g.find(a=>a.id===i.id||a.title===i.title);for(let g of f){let f,l=a7(g.message),m=c.find(a=>a.codes.includes(l));if(d&&m&&0===(aN&&"data-consistency"===l?(()=>{let a=[...new Set([...g.message.matchAll(/[\d,]+(?:\.\d+)?/gu)].map(a=>a[0].replace(/[,,]/gu,"")).filter(a=>a.length>=2))],b=aB.replace(/\s+/gu,"");return a.length>=2&&a.every(a=>b.includes(a))?[g.message]:[]})():(await m.detect(aB)).filter(a=>a===g.message)).length){let a=(0,bu.X5)({type:"llm_review",roleId:`agent-predelivery-fix-${i.id}-${l||"unclassified"}`,status:"success",message:`交付前定向修复预检通过:${i.title}(缺陷已消除,跳过 LLM 修复轮次)`,details:[g.message]},{subtitle:"交付前修复"});(0,bu.fx)(k,a),(0,bu.fx)(aV,a),U(aA,k);continue}if("labor-contradiction"===l){let c=(0,b2.fE)(aA[b].content,{scheduleAuthority:an});if(c.fixedCount>0){aA[b]={...aA[b],content:c.markdown},a+=c.fixedCount,aB=ba();let d=m?(await m.detect(aB)).filter(a=>a===g.message):[],e=(0,bu.X5)({type:"llm_review",roleId:`agent-predelivery-fix-${i.id}-${l}`,status:0===d.length?"success":"failed",message:0===d.length?`交付前定向修复完成:${i.title}(确定性定点替换 ${c.fixedCount} 处,跳过 LLM 轮次)`:`交付前确定性修复后仍残留:${i.title}(定点替换 ${c.fixedCount} 处,复检仍有 ${d.length} 处)`,details:[g.message,...c.details.slice(0,4)]},{subtitle:"交付前修复"});(0,bu.fx)(k,e),(0,bu.fx)(aV,e),U(aA,k);continue}}let n=[...g.message.matchAll(/“([^”]{6,80})”/gu)].map(a=>a[1]),o=(0,bu.X5)({type:"llm_review",roleId:`agent-predelivery-fix-${i.id}-${l||"unclassified"}`,status:"running",message:`交付前定向修复:${i.title}(${l||"未分类"})`,details:[g.message]},{subtitle:"交付前修复"});(0,bu.fx)(k,o),(0,bu.fx)(aV,o),U(aA,k);let p=[g.message],r="";for(f=0;f<2&&p.length>0;f+=1){let c=0===f?a8(g.message):["【修复未生效升级重试】",`上一轮修复后复检仍存在 ${p.length} 处同类缺陷(复检证据:${p.slice(0,2).join(";")}),说明上一轮修复方式与缺陷特征不匹配或 patch 未落位。`,"本轮必须更换修复方式:先精确定位问题句,再整体替换该句(不得只改个别词),替换后的文本必须完全符合下列要求:",a8(g.message)].join("\n"),d=await V(()=>(0,bv.l8)({template:h,chapter:{id:i.id,title:i.title,content:aA[b].content,evidence:i.evidence,missingFacts:i.missingFacts,sections:i.sections},issues:[g.message,g.suggestion||""],promptTexts:c,requirement:X,forbidDrawingImages:!1,diagnostics:q,signal:W,anchorTexts:n.length>0?n.slice(0,4):void 0}));if(d.content&&d.content!==aA[b].content){if(aA[b]={...aA[b],content:j?dP(d.content,j):d.content},a+=d.appliedCount,aB=ba(),m)if(aN&&"data-consistency"===l){let a=[...new Set([...g.message.matchAll(/[\d,]+(?:\.\d+)?/gu)].map(a=>a[0].replace(/[,,]/gu,"")).filter(a=>a.length>=2))],b=aB.replace(/\s+/gu,"");p=a.length>=2&&a.every(a=>b.includes(a))?[g.message]:[]}else p=(await m.detect(aB)).filter(a=>a===g.message);else d.appliedCount>0&&(p=[]);if(0===p.length)break}else if(0===f){if(e&&d.producedCount>0&&0===d.appliedCount){r=`patch 已产出 ${d.producedCount} 条但均未应用(锚点失配或结构校验拒绝;fail-fast 跳过升级轮)`;break}continue}else{r=d.producedCount>0?`patch 已产出 ${d.producedCount} 条但均未应用(锚点失配或结构校验拒绝)`:"定位失败或输出无效(未产出 patch)";break}}if(p.length>0&&m?.delete){let c=await m.delete(aA[b].content,g.message);c.removed>0&&(aA[b]={...aA[b],content:c.content},a+=c.removed,aB=ba(),p=(await m.detect(aB)).filter(a=>a===g.message))}let s=0===p.length;s||r||(r="patch 已应用但未消除缺陷(修复方式不匹配)");let t=(0,bu.X5)({type:"llm_review",roleId:`agent-predelivery-fix-${i.id}-${l||"unclassified"}`,status:s?"success":"failed",message:s?`交付前定向修复完成:${i.title}(${f} 轮 LLM 修复后复检通过)`:`交付前定向修复未生效:${i.title}(${f} 轮 LLM 修复${m?.delete?"+确定性删除":""}后复检仍有 ${p.length} 处;失败原因:${r})`,details:[g.message,...s?[]:[`复检残留:${p.slice(0,3).join(";")}`]]},{subtitle:"交付前修复"});(0,bu.fx)(k,t),(0,bu.fx)(aV,t),U(aA,k)}}))}if(bi){let b=(0,b2.U$)(aB,bi.similarity);b!==aB&&(aB=b,a+=1)}let l=await (0,b3.NR)(aB);l!==aB&&(aB=l,a+=1);let m=(0,b2.fE)(aB);if(m.fixedCount>0&&(aB=m.markdown,a+=m.fixedCount),aN&&bl.length>0){let a=await cc(aB,bl,{signal:W,diagnostics:q});if(a.length>0){let b=(0,bu.X5)({type:"llm_review",roleId:"agent-predelivery-data-consistency-batch-recheck",status:"failed",message:`交付前数据一致性轮末统一重审:${bl.length-a.length}/${bl.length} 处矛盾已消除,${a.length} 处仍残留`,details:a.slice(0,5)},{subtitle:"交付前修复"});(0,bu.fx)(k,b),(0,bu.fx)(aV,b),U(aA,k)}}a>0&&await aY()}q.metrics.push({name:"phase:pre-delivery",startedAt:bj,endedAt:Date.now(),durationMs:Date.now()-bj});let bm=(0,b2.qj)(aB);bm!==aB&&(aB=bm,await aY());let bn=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=eC(b.slice(e,a+1));f.removed>0&&(d+=1),c.push(...f.lines),e=a+1}return{markdown:c.join("\n"),removed:d}}(aB);bn.markdown!==aB&&(aB=bn.markdown,await aY());let bo=[{key:"export-gate",label:"导出门禁",passed:(aH={exportGate:aU,qualityReport:aS,repairStrategies:aT}).exportGate.passed,message:aH.exportGate.passed?"导出门禁通过":`仍有 ${aH.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:aH.qualityReport.passed,message:`${aH.qualityReport.deliveryProbability}% / ${aH.qualityReport.target}%`},{key:"completeness",label:"资料完整性",passed:aH.qualityReport.scores.completeness>=85,message:`${aH.qualityReport.scores.completeness}/100`},{key:"specificity",label:"方案针对性",passed:aH.qualityReport.scores.specificity>=85,message:`${aH.qualityReport.scores.specificity}/100`},{key:"compliance",label:"合规性",passed:aH.qualityReport.scores.compliance>=80,message:`${aH.qualityReport.scores.compliance}/100`},{key:"repair-strategies",label:"修复策略",passed:0===aH.repairStrategies.filter(a=>"high"===a.priority).length,message:aH.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}],bp=(0,x.Ff)(at);q.quality.blockingCount+=bp.blocking,q.quality.importantCount+=bp.important,q.quality.minorCount+=bp.minor;let bq=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:q}),br=aU.blockingIssues.length;bq.qualityIssues.blockingCount=br;let bs=await el(aA,aB,{templating:aS.templating}),bt=aS.templating?await V(()=>em({templating:aS.templating,markdown:aB,diagnostics:q,signal:W})):{issues:[],reviewed:!1},bw=[...az,...aV].map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:br>0?"failed":"success",message:`阻断 ${br},问题 ${at.length}`}:"export_ready"===a.type?{...a,status:aU.passed?"success":"failed",message:aU.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:aU.passed&&"failed"===a.status&&/^agent-(?:reviewer|repairer)-/u.test(a.roleId)?{...a,status:"skipped",message:`${a.message||"章节中间审查失败"};最终门禁已通过,历史中间态已归档`}:a);bw.push((0,bu.X5)({type:"validation",roleId:"agent-final-gate",status:aU.passed?"success":"failed",message:aU.passed?"Agent 最终门禁通过":`Agent 最终门禁阻断 ${br} 个问题`,details:aU.blockingIssues.slice(0,12).map(a=>a.message)},{subtitle:"Agent 最终门禁"}));let bx=aS.deliveryProbability<70;bw.push((0,bu.X5)({type:"validation",roleId:"document-delivery-score",status:aS.passed?"success":aU.passed?"skipped":"failed",message:aU.passed&&!aS.passed?`${aS.summary}${bx?";置信度低于 70%,建议完成续修后再交付归档":"(导出门禁已通过,作为后续优化建议归档)"}`:aS.summary,details:bx&&aU.passed?[...aS.actions,"续修建议:交付置信度低于 70% 门槛,建议按交付复核清单补齐短板维度后重新生成或续修。"]:aS.actions},{subtitle:"交付评分"})),bw.push((0,bu.X5)({type:"validation",roleId:"document-professional-score",status:"专业"===bs.grade||"良好"===bs.grade?"success":"skipped",message:bs.summary,details:[...bs.dimensions.map(a=>`${a.label}:${a.score} 分(${a.detail})`),...bs.topIssues.map(a=>`待修复:${a}`)]},{subtitle:"专业度评分"})),aS.templating&&"light"!==aS.templating.level&&bw.push((0,bu.X5)({type:"validation",roleId:"document-templating-report",status:"skipped",message:`模板化检测:${"heavy"===aS.templating.level?"重度":"中度"}模板化(套话句占比 ${(100*aS.templating.fillerRatio).toFixed(1)}%,重难点归因+量化双达标占比 ${(100*aS.templating.difficultyCountermeasureRatio).toFixed(0)}%,模糊应答词 ${aS.templating.vagueHitCount} 处)`,details:bt.issues},{subtitle:"模板化检测"})),N&&bw.push((0,bu.X5)({type:"reference",roleId:"document-writing-task-brief",status:"success",message:`写作任务书:${N.documentType},${N.chapters.length} 章任务卡,全局写作焦点 ${N.globalWritingFocus.length} 条`,details:[...N.globalWritingFocus,...N.chapters.slice(0,10).map(a=>`${a.chapterTitle}:覆盖 ${a.mustCover.length} 项`)],subtitle:"写作任务书"})),bw.push((0,bu.X5)({type:"reference",roleId:"knowledge-coverage",status:aP.score>=85?"success":"failed",message:`资料确认覆盖率:${aP.score}%(证据 ${aP.evidenceCount} 条,文件 ${aP.confirmedFiles} 份)`,details:[aP.remediation]},{subtitle:"资料覆盖"})),bw.push((0,bu.X5)({type:"validation",roleId:"document-review-checklist",status:bo.every(a=>a.passed)?"success":aU.passed?"skipped":"failed",message:`交付复核清单:通过 ${bo.filter(a=>a.passed).length}/${bo.length}${aU.passed&&!bo.every(a=>a.passed)?"(导出门禁已通过,其余项作为优化建议归档)":""}`,details:bo.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let bz=[...q.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(","),bA=function(a,b=5){return d3(a,b).map(([a,b])=>`${a} ${b.calls}次/${(b.inputChars/1e4).toFixed(1)}万字`).join(",")}(q.llm.callBreakdown),bB=q.factSanitize?`,事实净化 截断${q.factSanitize.truncated}/丢弃${q.factSanitize.dropped}/编号补全${q.factSanitize.repaired}`:"";bw.push((0,bu.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${q.llm.calls} 次,失败 ${q.llm.failures} 次,瞬态重试 ${q.llm.retries} 次,schema 校验失败 ${q.llm.schemaFailures} 次,峰值并行 ${q.llm.maxActive},检索 ${q.evidence.searchQueries} 次/${Math.round(q.evidence.searchMs/1e3)} 秒,证据上下文 ${q.evidence.contextChars} 字,噪声过滤 ${q.evidence.filteredNoise} 条,预算裁剪 ${q.evidence.budgetDropped} 条,质量问题 阻断${q.quality.blockingCount}/重要${q.quality.importantCount}/轻微${q.quality.minorCount}${bB}${bz?`,Top耗时:${bz}`:""}${bA?`,调用输入Top5:${bA}`:""}`,details:[...q.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 d3(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}`})}(q.llm.callBreakdown)]},{subtitle:"后台诊断"}));let bC=aA.map(a=>({...a,evidence:(0,s.QR)(a.evidence||[],{preservePinned:!0})}));return aA=bC,{templateId:h.id,templateName:h.name,title:h.outputTitle,requirement:X||"",projectRoot:A,projectId:B,exportSettings:h.exportSettings,generationSettings:h.generationSettings,facts:ad,structuredFacts:ak,factsModel:am,chapters:bC,sources:aq,missingItems:[...new Set(F)],validation:ap,validationIssues:at,exportGate:aU,executionStages:bw,assets:ax,partialChapters:aA.map(a=>({id:a.id,title:a.title,chars:(0,w.V7)(a.content),status:dk(a,o.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:bC,promptRules:y,agentWorkflow:K,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:q,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:h,chapters:g,requirement:X}),knowledgeCoverage:aP,factTraces:aQ,chapterCoverage:aR,retrievalCoverage:G,qualityReport:aS,repairStrategies:aT,reviewChecklist:bo,professionalScore:bs,templatingReviewIssues:bt.issues,writingTaskBrief:N,workflowVersion:c0.x,telemetry:bq,qualityBenchmark:await cY(aB)},generatedAt:Date.now(),markdown:aB}}var eI=c(70963),eJ=c(25284),eK=c(30355);function eL(a){return a.replace(/\s+/gu,"").toLowerCase()}var eM=c(14070);let eN={type:"object",required:["laborPeak"],properties:{laborPeak:{type:"object",required:!0,properties:{count:{type:"number",required:!0},phase:{type:"string"}}},laborByPhase:{type:"array",maxItems:8,items:{type:"object",properties:{phase:{type:"string"},count:{type:"number"}}}},machines:{type:"array",maxItems:16,items:{type:"object",properties:{name:{type:"string"},spec:{type:"string"},count:{type:"number"}}}},materialBatches:{type:"array",maxItems:10,items:{type:"object",properties:{name:{type:"string"},batchDesc:{type:"string"}}}},inspectionBatches:{type:"array",maxItems:8,items:{type:"object",properties:{scope:{type:"string"},planDesc:{type:"string"}}}},scheduleNodes:{type:"array",maxItems:16,items:{type:"object",properties:{node:{type:"string"},offset:{type:"string"}}}}}};async function eO(a){if("0"===process.env.DOCUMENT_PLAN_DATA_MASTER||!a.basicFacts.trim()&&0===a.chapterTitles.length)return;let b={},c=await (0,U.bb)((0,v.y4)("你是施工组织设计计划数据规划器。"),`基于项目基本事实与章节目录,推导全项目统一的计划编制类数据(这些数据资料中没有,必须由你基于工程量、总工期、工序流水与定额工效推导,且全文唯一口径):
|
|
120
120
|
- 劳动力峰值:高峰期总人数(人),并标注所处阶段;
|
|
121
121
|
- 分阶段劳动力:按施工阶段给出各阶段人数(各阶段人数不同是正常配置);
|
|
122
122
|
- 主要机械:名称、规格、台数(塔吊/汽车吊/挖掘机/混凝土泵等,按工程量与工期配足);
|
|
@@ -132,7 +132,7 @@ ${g.map(a=>`- ${a}`).join("\n")}`),b.join("\n\n")}({factsModel:am,evaluationCrit
|
|
|
132
132
|
${a.basicFacts.trim()||"(无)"}
|
|
133
133
|
章节目录:
|
|
134
134
|
${a.chapterTitles.map(a=>`- ${a}`).join("\n")}`,{maxTokens:6e3,temperature:0,signal:a.signal,diagnostics:a.diagnostics,schema:eN,taskKind:"structuredGeneration",prefixKey:"plan-data-master",outFailure:b});if(!c?.laborPeak||!Number.isFinite(eP(c.laborPeak.count))||0>=eP(c.laborPeak.count)){a.lastFailure=b.value||(c?`主表缺劳动力峰值口径(laborPeak=${JSON.stringify(c.laborPeak).slice(0,80)})`:"LLM 调用未返回有效 JSON");return}return{laborPeak:{count:Math.floor(eP(c.laborPeak.count)),phase:String(c.laborPeak.phase||"主体施工阶段")},laborByPhase:(c.laborByPhase||[]).filter(a=>a&&Number.isFinite(eP(a.count))&&eP(a.count)>0).map(a=>({phase:String(a.phase).trim(),count:Math.floor(eP(a.count))})),machines:(c.machines||[]).filter(a=>a&&a.name&&Number.isFinite(eP(a.count))&&eP(a.count)>0).map(a=>({name:String(a.name).trim(),spec:String(a.spec||"").trim(),count:Math.floor(eP(a.count))})),materialBatches:(c.materialBatches||[]).filter(a=>a&&a.name).map(a=>({name:String(a.name).trim(),batchDesc:String(a.batchDesc||"").trim()})),inspectionBatches:(c.inspectionBatches||[]).filter(a=>a&&a.scope).map(a=>({scope:String(a.scope).trim(),planDesc:String(a.planDesc||"").trim()})),scheduleNodes:(c.scheduleNodes||[]).filter(a=>a&&a.node).map(a=>({node:String(a.node).trim(),offset:String(a.offset||"").trim()}))}}function eP(a){if("number"==typeof a)return a;if("string"==typeof a){let b=a.trim();if(""!==b)return Number(b)}return NaN}async function eQ(a){let{chapterDraftsFinal:b,progressStages:c,emitProgress:d}=a,e=a.globalConsistencyIssues,f=b.map(a=>a.content).join("\n\n"),g=(0,b2.t1)(f),h=await (0,R.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,b2.lR)(a.content),d=(0,b2.Vc)(c.markdown),e=(0,b2.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,b2.ub)(a),...(0,b2.cl)(a),...(0,b2.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,bu.fx)(c,(0,bu.X5)({type:"llm_review",roleId:"post-table-dedup",status:"success",message:`补表后确定性去重:${g}`},{subtitle:"表格执行率核验"})),d(b)}return e}async function eR(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,bs.Xi)(b,c),m=!1;if(l.length>0)for(let a=0;a<2&&l.length>0;a+=1){(0,bu.fx)(i,(0,bu.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 字段不得编造。`,n=await k(()=>(0,bv.X6)(h,`table-execution-repair:${c.id}`,()=>(0,bv.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))}))),o=h?.llm.lastError;return n.content&&n.content!==c.content||(n=await k(()=>(0,bv.X6)(h,`table-execution-repair-retry:${c.id}`,()=>(0,bv.l8)({template:d,chapter:l,issues:[`${m}
|
|
135
|
-
上一轮补表 patch 未能落位(${o||"patch 未应用"})。改为逐表追加:每张缺失表单独输出一个 patch,originalText 锚定该表应归属小节(${b.plans.map(a=>a.moduleTitle).filter(Boolean).join("、")})最后一个完整句子,replacement 为该句后追加引导叙述与完整 markdown 表格(表名、表头、分隔线、至少一行数据);不得重写其他正文,不得输出空表或“见下表”。`],promptTexts:e,requirement:f,forbidDrawingImages:!0,repairType:"table_numeric",diagnostics:h,signal:g,maxTokens:Math.min(12e3,Math.max(6e3,1200*b.plans.length))})))),n},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,bu.fx)(i,(0,bu.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,bs.Xi)(b,c),(0,bu.fx)(i,(0,bu.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,bu.fx)(i,(0,bu.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 eS(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}=a,o=[],p=!1;try{let q=a.globalReviewSamplingRate??1,r=q>=1||b.length<=2?b:b.filter((a,b)=>b%Math.max(2,Math.round(1/q))==0),s=r.length,t=()=>n(()=>bQ({template:c,chapters:r,chapterReviews:[],promptTexts:d,requirement:f,projectContext:h,diagnostics:i,signal:g})),u=async()=>{let a=b.map(a=>a.content).join("\n\n"),c=(0,b2.t1)(a),d=await (0,R.Mv)(c.sentences,c.overviewBody?[c.overviewBody]:[]);return[...(await (0,x.qm)(a,j,k)).filter(a=>/跨章一致性冲突/u.test(a.message)),...(await (0,x.hr)(a,j)).filter(a=>"error"===a.level),...(0,b2.rA)(a),...(0,b2.Et)(a),...(0,b2.H)(a),...(0,b2.N$)(a),...(0,b2.Fr)(a),...(0,b2.bq)(a),...(0,b2.vH)(a),...(0,b2.cT)(a),...(0,b2.ub)(a),...(0,b2.cl)(a),...(0,b2.zP)(a),...await (0,b2.r8)(a),...await (0,b2.sn)(a),...(0,b2.l4)(a,{semanticSimilarity:d}),...await (0,b2.LF)(b)].map(a=>`${a.message};${a.suggestion||""}`)},v=await t(),w=v.issues;o=[...new Set([...w,...await u()])];let y=0;for(let a of b){let b=(0,b2.fE)(a.content);b.fixedCount>0&&(a.content=b.markdown,y+=b.fixedCount)}y>0&&(o=[...new Set([...w,...await u()])]);let z=!1,A=Math.max(1,Math.min(2,Number(process.env.DOCUMENT_GLOBAL_REVIEW_ROUNDS||1)||1));for(let a=0;a<A&&o.length>0;a+=1){(0,bu.fx)(l,(0,bu.X5)({type:"llm_review",roleId:"global-consistency-repair",status:"running",message:`跨章一致性冲突第 ${a+1} 轮定向修复(${o.length} 个冲突)`},{subtitle:"跨章一致性修复"})),m(b);let d=0,h=b.flatMap(a=>{let b=a.content.replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡"),c=o.filter(c=>{if(c.includes(a.title)||(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,bv.X6)(i,`global-consistency-repair:${a.id}`,()=>(0,bv.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)?"请删除本冲突描述的重复内容(保留首次出现的完整版本),不得改动其余正文。":"请严格按冲突描述中给出的资料口径修正本章对应表述,不得引入新的数值;与资料口径一致的既有表述(含分层/子项数值)不得改动。";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){z&&(w=(await t()).issues);break}m(b);let j=await u();a===A-1||0===j.length?(w=(await t()).issues,z=!1):z=!0,o=[...new Set([...w,...j])],(0,bu.fx)(l,(0,bu.X5)({type:"llm_review",roleId:"global-consistency-review",status:o.length>0?"failed":"success",message:o.length>0?`跨章一致性复检:仍有 ${o.length} 个冲突`:"跨章一致性复检通过"},{subtitle:"全局一致性审查"})),m(b)}let B=await (0,x.KI)(b,j,k),C=0;for(let a of b){let b=(0,b2.fE)(a.content);b.fixedCount>0&&(a.content=b.markdown,C+=b.fixedCount)}let D=b.map(a=>a.content).join("\n\n"),E=(0,b2.t1)(D),F=await (0,R.Mv)(E.sentences,E.overviewBody?[E.overviewBody]:[]),G=0,H=0,I=0;for(let a of b){let b=a.content.split(/\r?\n/u).length,c=(0,b2.lR)(a.content),d=(0,b2.Vc)(c.markdown),e=(0,b2.U$)(d.markdown,F),f=b-e.split(/\r?\n/u).length;f>0&&(G+=c.removedCount,H+=d.removedCount,I+=f-c.removedCount-d.removedCount,a.content=e)}let J=await (0,b2.yR)(b);if(p=!0,B.fixedCount>0||C>0||G>0||H>0||I>0||J>0){o=[...new Set([...w,...await u()])];let a=[B.fixedCount>0?`数值 ${B.fixedCount} 处`:"",C>0?`跨章数值 ${C} 处`:"",G>0?`重复表格 ${G} 行`:"",H>0?`重复段落 ${H} 行`:"",I>0?`概况复述句 ${I} 行`:"",J>0?`跨章语义重复段 ${J} 段`:""].filter(Boolean).join("、");(0,bu.fx)(l,(0,bu.X5)({type:"llm_review",roleId:"global-consistency-deterministic-fix",status:"success",message:`跨章一致性定点修复:${a}${B.details.slice(0,4).length>0?`(${B.details.slice(0,4).join("、")})`:""}`,details:B.details.slice(4)},{subtitle:"跨章一致性修复"})),m(b)}(0,bu.fx)(l,(0,bu.X5)({type:"llm_review",roleId:"global-consistency-repair",status:o.length>0?"failed":"success",message:o.length>0?`跨章一致性修复完成:仍残留 ${o.length} 个冲突(已记录,由交付门禁兜底)`:"跨章一致性修复完成:冲突已全部消除"},{subtitle:"跨章一致性修复"})),m(b);let K=s<b.length?{...v.stage,message:`${v.stage.message||"全局一致性审查完成"}(抽检 ${s}/${b.length} 章)`}:v.stage;(0,bu.fx)(l,K),m(b)}catch(a){if(g?.aborted)throw a;console.error("[gen] global consistency review failed:",a)}return{issues:o,dedupRan:p}}async function eT(a){let b=(0,d.QJ)(a.templateId);if(!b)throw Error("Document template not found");let c=b.chapters.find(b=>b.id===a.chapterId);if(!c)throw Error("Document chapter not found");let f=e.resolve(a.projectRoot||(0,g.aY)());if(!f)throw Error("No knowledge base project found");let h=(0,g.Qh)(),i=(0,bx.Hh)(f,b,{requirement:a.requirement}),j=(0,bx.W9)(f,b,{requirement:a.requirement}),{kindByPath:k,processingByPath:l}=(0,bx.Hz)(j),m=new Set(i),n=Z(f,i),o=new Map([...k.entries()].map(([a,b])=>[a,(0,bx._W)(b)])),p=new Map([...l.entries()].map(([a,b])=>[a,b])),q=d4(await h.getProject(f),[...m],a.maxEvidencePerChapter),r=[],v=[...m].filter(Boolean).sort(),w=d0(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(q,12),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15},generationMode:!0});r.push(...b.results.filter(a=>(0,bv.Tz)(f,a.filePath,m)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:o.get(a.filePath),processingType:p.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let y=d_(c,aa(r.filter(a=>(0,bv.Tz)(f,a.filePath,m)),n),{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))}(q,c),maxChars:16e3,preservePinned:!0});ac(y,n,`regenerate:${c.id}`);let z=a.currentMarkdown||"",A=new Set(a.existingFacts??[]),B=c.requiredFacts.filter(a=>!A.has(a)&&!y.some(b=>(0,u.Lk)(b,a)));if(0===y.length)throw Error(`${(0,t.GQ)(c.title)} 缺少可支撑正文的项目资料证据`);let C=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",z?`> 当前文档上下文摘要:${z.replace(/\s+/gu," ")}`:"",`本章依据已锁定项目资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`,"","### 资料依据",...y.map(s.OF)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:C,evidence:y,missingFacts:B}}async function eU(a){(0,z.Te)(a.signal);let b=(0,d.QJ)(a.templateId);if(!b)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 o=(0,f.computeProjectId)(c),p=b,q=(0,g.Qh)(),A=[],G=[],V=(b,c=ab)=>{let d=b?[...b].sort((a,b)=>{let c=G.indexOf(a.id),d=G.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)},W=Math.max(15e3,Math.min(6e4,Number(process.env.DOCUMENT_GENERATION_HEARTBEAT_MS??3e4))),Y=async(b,c=ab)=>{let d=setInterval(()=>{a.signal?.aborted||V(A,c)},W);try{return await b()}finally{clearInterval(d)}},$=(0,d.N6)(p)||"none",_=(0,i.Mu)($)?.name||$,ab=[(0,bu.X5)({type:"role_binding",roleId:$,status:"running",message:`生成任务已创建,正在读取模板与角色配置:${p.name}`,details:[`当前项目:${o}`,`资料目录:${(0,g.NW)(c)}`,"正在读取项目资料包和提示词配置"],progress:{current:1,total:4,label:"初始化配置"}},{subtitle:_,roleName:_,order:0})];V();let ad=(0,d.bj)(p),ae=ad.bindings;(0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在分析模板规范、用户要求与项目资料包",details:["解析 OUTLINE 与模板章节","读取项目资料包","自动识别资料类型并构建项目理解"],progress:{current:1,total:3,label:"准备分析"}},{subtitle:"生成准备",order:ab.length})),V();let af=(0,dh.Qu)({template:p,requirement:a.requirement,projectRoot:c,facts:[]}).materialScope.selectedFiles;if(0===af.length)throw Error("模板未绑定可用项目资料包,请先在模板中绑定需要参与生成的项目文件夹。");let ag=(0,bx.W9)(c,p,{requirement:a.requirement}),ah=(0,bx._n)(p,ag),{kindByPath:ai,processingByPath:al}=(0,bx.Hz)(ag),am=(0,bv.fC)([...ad.writerPrompts,...ad.chapterPrompts]),an=(0,t.cs)([{text:a.requirement,source:"用户需求",strict:!0},{text:am,source:"提示词角色",strict:!0}]),ao=an.length>=2;ao&&(p={...b,chapters:an});let ap=await Y(()=>Promise.resolve((0,k.P)(c,{requirement:a.requirement,boundFilePaths:af})));(0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在生成自动文档规格并评估生成准备度",details:[`项目资料:${af.length} 份`,`资料类型:${Object.values(ag.groups).filter(a=>a.length>0).length} 类`,"生成事实字段与章节约束"],progress:{current:2,total:3,label:"规格评估"}},{subtitle:"生成准备",order:ab.length})),V();let aq=await Y(()=>Promise.resolve((0,j.x)(p,a.requirement||""))),ar=aq.spec,at=function(a,b=""){let c=`${a?.id||""} ${a?.name||""} ${a?.category||""} ${a?.description||""} ${a?.outputTitle||""} ${b}`;return/施工组织设计|施工方案|危大工程|人、材、机|安全文明施工/u.test(c)?m:l}(p,a.requirement||""),au=(0,r.$)({template:p,spec:ar,summary:ap,resolvedRoles:[]});if(!au.ready)throw Error(`生成准备度不足:${au.blockingIssues.join(";")}`);let av=['【全文写作硬约束(每一章生成时必须遵守,违反即评审失分)】\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. 禁止商务投标函内容:投标/评标纪律承诺、廉洁承诺、廉洁自律、行贿、串标、围标、弄虚作假、干扰评标等商务投标函条款与承诺一律不得写入施工组织设计正文(招标文件中的此类条款属商务文件应响应内容,不是技术标内容);本节只写技术方案与管理措施,不得以承诺句形式响应此类条款。',ah.prompt,(0,k.F)(ap,{publicSafe:!0}),(0,j.N)(ar,aq.sourceHash,{publicSafe:!0}),(0,r.R)(au,{publicSafe:!0})].filter(Boolean).join("\n\n"),aF=[ah.prompt,(0,k.F)(ap),(0,j.N)(ar,aq.sourceHash),(0,r.R)(au)].filter(Boolean).join("\n\n"),aG=(0,bv.fC)([...ad.writerPrompts,...ad.formattingPrompts]),aH=(0,bv.fC)([...ad.writerPrompts,...ad.chapterPrompts,...ad.formattingPrompts]),aJ=(0,bv.fC)(ad.prompts),aK=(0,h.I)().load().webAccess||{enabled:!1,allowProjectFacts:!1,maxQueriesPerChapter:2,maxResultsPerQuery:3,trustedDomains:[]},aL=(0,bf.c_)({promptTexts:[av,aJ].filter(Boolean).join("\n\n"),requirement:a.requirement,template:p,rolePrompts:ad.prompts}),aM=[(0,bf.el)(aL),!aK.enabled?"":"公开资料补充使用规则:\n1. 公开资料只可用于补充通用规范、政策、工艺和措施。\n2. 不得使用公开资料新增或修改项目名称、建设地点、建设规模、工期、质量标准、工程量、材料规格、图纸参数、商务数据。\n3. 本地项目资料与公开资料冲突时,必须以本地项目资料为准。\n4. 不得在正文中出现任何检索过程、外部页面、工具调用或系统内部过程性表述。\n5. 不得把公开资料中的其他项目案例参数写入本项目正文。"].filter(Boolean).join("\n\n"),aR=[av,aM,`生成前规划章节结构:
|
|
135
|
+
上一轮补表 patch 未能落位(${o||"patch 未应用"})。改为逐表追加:每张缺失表单独输出一个 patch,originalText 锚定该表应归属小节(${b.plans.map(a=>a.moduleTitle).filter(Boolean).join("、")})最后一个完整句子,replacement 为该句后追加引导叙述与完整 markdown 表格(表名、表头、分隔线、至少一行数据);不得重写其他正文,不得输出空表或“见下表”。`],promptTexts:e,requirement:f,forbidDrawingImages:!0,repairType:"table_numeric",diagnostics:h,signal:g,maxTokens:Math.min(12e3,Math.max(6e3,1200*b.plans.length))})))),n},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,bu.fx)(i,(0,bu.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,bs.Xi)(b,c),(0,bu.fx)(i,(0,bu.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,bu.fx)(i,(0,bu.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 eS(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}=a,o=[],p=!1;try{let q=a.globalReviewSamplingRate??1,r=q>=1||b.length<=2?b:b.filter((a,b)=>b%Math.max(2,Math.round(1/q))==0),s=r.length,t=()=>n(()=>bQ({template:c,chapters:r,chapterReviews:[],promptTexts:d,requirement:f,projectContext:h,diagnostics:i,signal:g})),u=async()=>{let a=b.map(a=>a.content).join("\n\n"),c=(0,b2.t1)(a),d=await (0,R.Mv)(c.sentences,c.overviewBody?[c.overviewBody]:[]);return[...(await (0,x.qm)(a,j,k)).filter(a=>/跨章一致性冲突/u.test(a.message)),...(await (0,x.hr)(a,j)).filter(a=>"error"===a.level),...(0,b2.rA)(a),...(0,b2.Et)(a),...(0,b2.H)(a),...(0,b2.N$)(a),...(0,b2.Fr)(a),...(0,b2.bq)(a),...(0,b2.vH)(a),...(0,b2.cT)(a),...(0,b2.ub)(a),...(0,b2.cl)(a),...(0,b2.zP)(a),...await (0,b2.r8)(a),...await (0,b2.sn)(a),...(0,b2.l4)(a,{semanticSimilarity:d}),...await (0,b2.LF)(b)].map(a=>`${a.message};${a.suggestion||""}`)},v=await t(),w=v.issues;o=[...new Set([...w,...await u()])];let y=0;for(let a of b){let b=(0,b2.fE)(a.content);b.fixedCount>0&&(a.content=b.markdown,y+=b.fixedCount)}y>0&&(o=[...new Set([...w,...await u()])]);let z=!1,A=Math.max(1,Math.min(2,Number(process.env.DOCUMENT_GLOBAL_REVIEW_ROUNDS||1)||1));for(let a=0;a<A&&o.length>0;a+=1){(0,bu.fx)(l,(0,bu.X5)({type:"llm_review",roleId:"global-consistency-repair",status:"running",message:`跨章一致性冲突第 ${a+1} 轮定向修复(${o.length} 个冲突)`},{subtitle:"跨章一致性修复"})),m(b);let d=0,h=b.flatMap(a=>{let b=a.content.replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡"),c=o.filter(c=>{if(c.includes(a.title)||(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,bv.X6)(i,`global-consistency-repair:${a.id}`,()=>(0,bv.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)?"请删除本冲突描述的重复内容(保留首次出现的完整版本),不得改动其余正文。":"请严格按冲突描述中给出的资料口径修正本章对应表述,不得引入新的数值;与资料口径一致的既有表述(含分层/子项数值)不得改动。";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){z&&(w=(await t()).issues);break}m(b);let j=await u();a===A-1||0===j.length?(w=(await t()).issues,z=!1):z=!0,o=[...new Set([...w,...j])],(0,bu.fx)(l,(0,bu.X5)({type:"llm_review",roleId:"global-consistency-review",status:o.length>0?"failed":"success",message:o.length>0?`跨章一致性复检:仍有 ${o.length} 个冲突`:"跨章一致性复检通过"},{subtitle:"全局一致性审查"})),m(b)}let B=await (0,x.KI)(b,j,k),C=(0,b2.GG)(j),D=0;for(let a of b){let b=(0,b2.fE)(a.content,{scheduleAuthority:C});b.fixedCount>0&&(a.content=b.markdown,D+=b.fixedCount)}let E=b.map(a=>a.content).join("\n\n"),F=(0,b2.t1)(E),G=await (0,R.Mv)(F.sentences,F.overviewBody?[F.overviewBody]:[]),H=0,I=0,J=0;for(let a of b){let b=a.content.split(/\r?\n/u).length,c=(0,b2.lR)(a.content),d=(0,b2.Vc)(c.markdown),e=(0,b2.U$)(d.markdown,G),f=b-e.split(/\r?\n/u).length;f>0&&(H+=c.removedCount,I+=d.removedCount,J+=f-c.removedCount-d.removedCount,a.content=e)}let K=await (0,b2.yR)(b);if(p=!0,B.fixedCount>0||D>0||H>0||I>0||J>0||K>0){o=[...new Set([...w,...await u()])];let a=[B.fixedCount>0?`数值 ${B.fixedCount} 处`:"",D>0?`跨章数值 ${D} 处`:"",H>0?`重复表格 ${H} 行`:"",I>0?`重复段落 ${I} 行`:"",J>0?`概况复述句 ${J} 行`:"",K>0?`跨章语义重复段 ${K} 段`:""].filter(Boolean).join("、");(0,bu.fx)(l,(0,bu.X5)({type:"llm_review",roleId:"global-consistency-deterministic-fix",status:"success",message:`跨章一致性定点修复:${a}${B.details.slice(0,4).length>0?`(${B.details.slice(0,4).join("、")})`:""}`,details:B.details.slice(4)},{subtitle:"跨章一致性修复"})),m(b)}(0,bu.fx)(l,(0,bu.X5)({type:"llm_review",roleId:"global-consistency-repair",status:o.length>0?"failed":"success",message:o.length>0?`跨章一致性修复完成:仍残留 ${o.length} 个冲突(已记录,由交付门禁兜底)`:"跨章一致性修复完成:冲突已全部消除"},{subtitle:"跨章一致性修复"})),m(b);let L=s<b.length?{...v.stage,message:`${v.stage.message||"全局一致性审查完成"}(抽检 ${s}/${b.length} 章)`}:v.stage;(0,bu.fx)(l,L),m(b)}catch(a){if(g?.aborted)throw a;console.error("[gen] global consistency review failed:",a)}return{issues:o,dedupRan:p}}async function eT(a){let b=(0,d.QJ)(a.templateId);if(!b)throw Error("Document template not found");let c=b.chapters.find(b=>b.id===a.chapterId);if(!c)throw Error("Document chapter not found");let f=e.resolve(a.projectRoot||(0,g.aY)());if(!f)throw Error("No knowledge base project found");let h=(0,g.Qh)(),i=(0,bx.Hh)(f,b,{requirement:a.requirement}),j=(0,bx.W9)(f,b,{requirement:a.requirement}),{kindByPath:k,processingByPath:l}=(0,bx.Hz)(j),m=new Set(i),n=Z(f,i),o=new Map([...k.entries()].map(([a,b])=>[a,(0,bx._W)(b)])),p=new Map([...l.entries()].map(([a,b])=>[a,b])),q=d4(await h.getProject(f),[...m],a.maxEvidencePerChapter),r=[],v=[...m].filter(Boolean).sort(),w=d0(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(q,12),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15},generationMode:!0});r.push(...b.results.filter(a=>(0,bv.Tz)(f,a.filePath,m)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:o.get(a.filePath),processingType:p.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let y=d_(c,aa(r.filter(a=>(0,bv.Tz)(f,a.filePath,m)),n),{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))}(q,c),maxChars:16e3,preservePinned:!0});ac(y,n,`regenerate:${c.id}`);let z=a.currentMarkdown||"",A=new Set(a.existingFacts??[]),B=c.requiredFacts.filter(a=>!A.has(a)&&!y.some(b=>(0,u.Lk)(b,a)));if(0===y.length)throw Error(`${(0,t.GQ)(c.title)} 缺少可支撑正文的项目资料证据`);let C=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",z?`> 当前文档上下文摘要:${z.replace(/\s+/gu," ")}`:"",`本章依据已锁定项目资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`,"","### 资料依据",...y.map(s.OF)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:C,evidence:y,missingFacts:B}}async function eU(a){(0,z.Te)(a.signal);let b=(0,d.QJ)(a.templateId);if(!b)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 o=(0,f.computeProjectId)(c),p=b,q=(0,g.Qh)(),A=[],G=[],V=(b,c=ab)=>{let d=b?[...b].sort((a,b)=>{let c=G.indexOf(a.id),d=G.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)},W=Math.max(15e3,Math.min(6e4,Number(process.env.DOCUMENT_GENERATION_HEARTBEAT_MS??3e4))),Y=async(b,c=ab)=>{let d=setInterval(()=>{a.signal?.aborted||V(A,c)},W);try{return await b()}finally{clearInterval(d)}},$=(0,d.N6)(p)||"none",_=(0,i.Mu)($)?.name||$,ab=[(0,bu.X5)({type:"role_binding",roleId:$,status:"running",message:`生成任务已创建,正在读取模板与角色配置:${p.name}`,details:[`当前项目:${o}`,`资料目录:${(0,g.NW)(c)}`,"正在读取项目资料包和提示词配置"],progress:{current:1,total:4,label:"初始化配置"}},{subtitle:_,roleName:_,order:0})];V();let ad=(0,d.bj)(p),ae=ad.bindings;(0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在分析模板规范、用户要求与项目资料包",details:["解析 OUTLINE 与模板章节","读取项目资料包","自动识别资料类型并构建项目理解"],progress:{current:1,total:3,label:"准备分析"}},{subtitle:"生成准备",order:ab.length})),V();let af=(0,dh.Qu)({template:p,requirement:a.requirement,projectRoot:c,facts:[]}).materialScope.selectedFiles;if(0===af.length)throw Error("模板未绑定可用项目资料包,请先在模板中绑定需要参与生成的项目文件夹。");let ag=(0,bx.W9)(c,p,{requirement:a.requirement}),ah=(0,bx._n)(p,ag),{kindByPath:ai,processingByPath:al}=(0,bx.Hz)(ag),am=(0,bv.fC)([...ad.writerPrompts,...ad.chapterPrompts]),an=(0,t.cs)([{text:a.requirement,source:"用户需求",strict:!0},{text:am,source:"提示词角色",strict:!0}]),ao=an.length>=2;ao&&(p={...b,chapters:an});let ap=await Y(()=>Promise.resolve((0,k.P)(c,{requirement:a.requirement,boundFilePaths:af})));(0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在生成自动文档规格并评估生成准备度",details:[`项目资料:${af.length} 份`,`资料类型:${Object.values(ag.groups).filter(a=>a.length>0).length} 类`,"生成事实字段与章节约束"],progress:{current:2,total:3,label:"规格评估"}},{subtitle:"生成准备",order:ab.length})),V();let aq=await Y(()=>Promise.resolve((0,j.x)(p,a.requirement||""))),ar=aq.spec,at=function(a,b=""){let c=`${a?.id||""} ${a?.name||""} ${a?.category||""} ${a?.description||""} ${a?.outputTitle||""} ${b}`;return/施工组织设计|施工方案|危大工程|人、材、机|安全文明施工/u.test(c)?m:l}(p,a.requirement||""),au=(0,r.$)({template:p,spec:ar,summary:ap,resolvedRoles:[]});if(!au.ready)throw Error(`生成准备度不足:${au.blockingIssues.join(";")}`);let av=['【全文写作硬约束(每一章生成时必须遵守,违反即评审失分)】\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. 禁止商务投标函内容:投标/评标纪律承诺、廉洁承诺、廉洁自律、行贿、串标、围标、弄虚作假、干扰评标等商务投标函条款与承诺一律不得写入施工组织设计正文(招标文件中的此类条款属商务文件应响应内容,不是技术标内容);本节只写技术方案与管理措施,不得以承诺句形式响应此类条款。',ah.prompt,(0,k.F)(ap,{publicSafe:!0}),(0,j.N)(ar,aq.sourceHash,{publicSafe:!0}),(0,r.R)(au,{publicSafe:!0})].filter(Boolean).join("\n\n"),aF=[ah.prompt,(0,k.F)(ap),(0,j.N)(ar,aq.sourceHash),(0,r.R)(au)].filter(Boolean).join("\n\n"),aG=(0,bv.fC)([...ad.writerPrompts,...ad.formattingPrompts]),aH=(0,bv.fC)([...ad.writerPrompts,...ad.chapterPrompts,...ad.formattingPrompts]),aJ=(0,bv.fC)(ad.prompts),aK=(0,h.I)().load().webAccess||{enabled:!1,allowProjectFacts:!1,maxQueriesPerChapter:2,maxResultsPerQuery:3,trustedDomains:[]},aL=(0,bf.c_)({promptTexts:[av,aJ].filter(Boolean).join("\n\n"),requirement:a.requirement,template:p,rolePrompts:ad.prompts}),aM=[(0,bf.el)(aL),!aK.enabled?"":"公开资料补充使用规则:\n1. 公开资料只可用于补充通用规范、政策、工艺和措施。\n2. 不得使用公开资料新增或修改项目名称、建设地点、建设规模、工期、质量标准、工程量、材料规格、图纸参数、商务数据。\n3. 本地项目资料与公开资料冲突时,必须以本地项目资料为准。\n4. 不得在正文中出现任何检索过程、外部页面、工具调用或系统内部过程性表述。\n5. 不得把公开资料中的其他项目案例参数写入本项目正文。"].filter(Boolean).join("\n\n"),aR=[av,aM,`生成前规划章节结构:
|
|
136
136
|
${(0,v.CK)(p)}`,aG||aH].filter(Boolean).join("\n\n"),aS=[aF,aM,(0,bv.fC)([...ad.extractionPrompts,...ad.referencePrompts])].filter(Boolean).join("\n\n"),aU=[av,aM,(0,bv.fC)([...ad.writerPrompts,...ad.chapterPrompts,...ad.formattingPrompts])].filter(Boolean).join("\n\n"),aV=[av,aM,(0,bv.fC)(ad.formattingPrompts)].filter(Boolean).join("\n\n");(0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"document-preparation",status:"success",message:`模板规范与项目资料理解完成,识别 ${af.length} 份项目资料`,details:[`提示词绑定:${ae.length} 个`,`项目资料包:${ag.materialRoots.join("、")||"当前知识库"}`,ao?`识别 OUTLINE 章节:${an.length} 个`:"未识别显式 OUTLINE,使用模板章节"],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备",order:ab.length})),V();let aW=new Set(af),a_=new Map([...ai.entries()].map(([a,b])=>[a,(0,bx._W)(b)])),a5=new Map([...al.entries()].map(([a,b])=>[a,b]));(0,bu.fx)(ab,(0,bu.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:"running",message:"正在读取项目资料包索引",details:["使用上传阶段已完成的解析、切片和索引结果","不在生成流程中重新解析或入库","准备按资料类型召回章节证据"],progress:{current:1,total:3,label:"读取索引"}},{subtitle:"知识库检索",order:ab.length})),V();let a6=await Y(()=>q.getProject(c)),a7=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=[...d2("部分绑定文件未完成索引,已自动跳过",f),...d2("部分绑定文件没有可用切片,已自动跳过",g),...d2("部分绑定文件索引失败,已自动跳过",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}}(a6,[...aW]);if(a7.blockingIssues.length>0)throw Error(`生成前知识索引不可用:${a7.blockingIssues.join(";")}`);let a8=new Set(a7.usablePaths),a9=Z(o,[...a8]),ba=d4(a6,[...a8],a.maxEvidencePerChapter),bb=a7.pendingJobs>0||0===a7.usableChunkCount,bh=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(a7.usableChunkCount,20*af.length),loadedChunks:Math.min(a7.usableChunkCount,20*af.length),vectorReady:a7.vectorStatus?"ready"===a7.vectorStatus.status:void 0});(0,bu.fx)(ab,(0,bu.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:bb?"failed":"success",message:`已读取知识索引:项目资料 ${a7.scopedRecords.length} 份,可用切片 ${a7.usableChunkCount} 条`,details:[`项目资料:${aW.size} 份`,`可用证据文件:${a8.size} 份`,`向量状态:${a7.vectorStatus?.status||"unknown"}`,...a7.warnings,"后续将按招标正文/清单/图纸/补疑等资料类型召回"],progress:{current:3,total:3,label:"索引已就绪"}},{subtitle:"知识库检索",order:ab.length})),V(),(0,z.Te)(a.signal);let bi=[],bj=[],bl={enabled:aK.enabled,queries:[],evidenceCount:0,filteredCount:0,chapters:[]},bm=[],bn=[],bo=[],bp=[],bz=[],bA=-1,bB=new Map,bC=new Map,bD=a=>{let b=`${a}::full`;if(!bC.has(b))try{bC.set(b,a6.getFileDetail?.(a))}catch{bC.set(b,void 0)}return bC.get(b)},bE=async(a,b,d,e)=>{let f=dX(e),g="0"!==process.env.DOCUMENT_GENERATION_RERANKER,h=(0,z.c6)({query:a,scopedFilePaths:b,limit:d,weights:f,generationMode:!0,reranker:g}),i=bB.get(h);if(i)return i;let j=await q.search(c,a,{scope:"project",filters:{filePaths:b},limit:d,weights:f,generationMode:!0,disableReranker:!g}).catch(()=>null),k=j?.results||[];return bB.set(h,k),k},bH={stage:(0,bu.X5)({type:"file_understanding",roleId:"project-understanding",status:"success",message:`已完成项目资料理解:${ag.files.length} 份资料,${Object.values(ag.groups).filter(a=>a.length>0).length} 类资料类型`,details:ah.prompt.split("\n").slice(0,16)},{subtitle:"项目资料理解",order:ab.length})};(0,bu.fx)(ab,bH.stage),V();let bI=aa(await dn({manager:q,project:a6,projectRoot:c,scopedFilePaths:[...aW].filter(Boolean).sort(),fileRoleByPath:a_,fileProcessingByPath:a5,signal:a.signal}),a9);ac(bI,a9,"project-basic-evidence"),bI.length>0&&(bi.push(...bI),(0,bu.fx)(ab,(0,bu.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:ab.length})),V());let{safe:bJ,excluded:bK}=await (0,S.a0)(bi),bN=await (0,S.M8)();bK.length>0&&((0,bu.fx)(ab,(0,bu.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:ab.length})),V());let bO=bI.filter(a=>!bK.includes(a)),bP=new Set(bK.map(S.hM)),bQ=as({evidence:bJ,template:p,spec:ar,profile:at,scope:a9}),bR=bQ.localFacts,bS=bQ.projectBasicFacts,bT=[...bR,...bS,...bQ.preciseFacts],bU=(0,eJ.hp)({projectRoot:c,template:p,requirement:a.requirement}),bV=[...bU?.facts||[],...bT],bW=await aD(bV,bQ.structuredTables,bm,ar,at),bX=(0,dh.Qu)({template:p,requirement:a.requirement,projectRoot:c,facts:bV,projectGraph:bU?.projectGraph,projectGraphSource:bU?"project-intelligence":void 0});for(let a of(0,dh.SU)(bX))(0,bu.fx)(ab,a);bU&&(0,bu.fx)(ab,(0,bu.X5)({type:"file_understanding",roleId:"project-intelligence-cache",status:"success",message:`已复用入库后项目理解资产与绑定 scope 快照:${bU.files.length} 份绑定资料`,details:[`项目级缓存时间:${new Date(bU.cache.createdAt).toLocaleString()}`,`scope 快照:${bU.scopeSnapshot.scopeHash.slice(0,12)}`,`复用预计算事实:${bU.facts.length} 条`,`复用预计算项目图谱:${bU.projectGraph.works.length}工程/${bU.projectGraph.methods.length}工法/${bU.projectGraph.resources.length}资源`,`复用施工组织设计专项图谱:${bU.constructionOrganizationGraph.workPackages.length} 个工作包/${bU.constructionOrganizationGraph.controlMatrix.length} 条控制矩阵`,`图谱来源:${bU.cache.projectGraphMessage}`,`章节意图证据覆盖:${Object.keys(bU.evidenceByChapterId||{}).length}/${p.chapters.length} 章`,`排除正文不适用资料:${bU.files.filter(a=>!a.usableForBody).length} 份`]},{subtitle:"项目理解缓存 / Scope 快照"})),V();let bZ=bX.baseProjectGraph;if(!bU){(0,bu.fx)(ab,(0,bu.X5)({type:"file_understanding",roleId:"project-graph",status:"running",message:`正在临时构建完整项目图谱:${bi.length} 条证据 → LLM 结构化提取`,details:["缓存缺失或版本过期,建议重新构建项目理解缓存;本次生成将临时构建完整项目图谱。","提取:工程内容、施工方法、材料设备、技术标准、重点难点"],progress:{current:2,total:3,label:"项目图谱"}},{subtitle:"项目资料图谱分析",order:ab.length})),V();let b=await Y(()=>(0,eI.i)({evidence:bJ,signal:a.signal,projectRoot:c,requirement:a.requirement,templateId:p.id}),ab);if(!b.graph)throw Error(`完整项目图谱构建失败:${b.stage.message||b.stage.status}`);bZ=b.graph,(0,bu.fx)(ab,b.stage),V()}bZ&&(ah=(0,bx._n)(p,ag,bZ));let b$=function(a){var b;let c=(0,z.c6)({version:"canonical-facts-v7",rulesHash:(0,c3.TG)(a.projectRoot),requirement:a.requirement||"",templateId:a.templateId||"",requiredKeys:a.requiredKeys||[],facts:a.facts.map(a=>({key:a.key,fieldId:a.fieldId,fieldName:a.fieldName,value:a.value,sourceFile:a.sourceFile,roleId:a.roleId,confidence:a.confidence})).sort((a,b)=>`${a.sourceFile}${a.key}${a.value}`.localeCompare(`${b.sourceFile}${b.key}${b.value}`)),graphHash:a.projectGraph?(0,z.c6)(a.projectGraph):"",markdownHash:a.markdown?(0,z.c6)(a.markdown.slice(0,2e4)):""}),d=function(a,b){let c=da(a);if(c)try{let a=JSON.parse(T.readFileSync(e.join(c,`canonical-facts-${b}.json`),"utf8"));return a&&a.byKey&&Array.isArray(a.scopeConflicts)?a:void 0}catch{return}}(a.projectRoot,c);if(d)return d;let f=a.facts||[],g=dd(f,(0,c3.bC)(a.projectRoot));for(let a of g.map(a=>({caseType:"scope_conflict_arbitration",recordedAt:Date.now(),kind:a.kind,scope:a.scope,values:a.values.map(a=>({value:a.value,unit:a.unit,sourceFile:a.sourceFile,priority:a.priority})),winner:a.resolution,confidence:a.confidence,manualReviewRequired:!a.resolution})))c2("arbitration-cases.jsonl",a);let h=dg(f,g),i=c8({facts:h,markdown:a.markdown}),j={};for(let[a,b]of i.entries())j[a]=function(a){let b=a.source.includes("generated_markdown")?"generated_markdown":a.source.includes("evidence")?"evidence":"structured_fact";return{key:a.fieldKey,label:a.label,value:a.value,normalizedValue:ak(a.value),sourceType:b,sourceFile:a.source,confidence:a.confidence,priority:c9(b),locked:c9(b)>=80,selectedReason:a.selectedReason}}(b);if(j.project_scale){let a=j.project_scale;if(/占地|用地/u.test(a.value)&&/建筑面积/u.test(a.value)){let b=a.value.search(/(?:单体)?总?建筑面积/u);if(b>0){let c=aj(a.value.slice(b)).trim();j.project_scale={...a,value:c,normalizedValue:ak(c),selectedReason:`${a.selectedReason};混合口径已净化,scale 只取建筑面积段`}}}}let k=[];for(let a of[{key:"project_name",label:"项目名称",pattern:/项目名称|工程名称|招标项目名称|project_name/u,bucket:"projectIdentity",valueType:"text"},{key:"project_code",label:"项目编号",pattern:/项目编号|招标项目编号|project_code/u,bucket:"projectIdentity",valueType:"identifier"},{key:"owner",label:"招标人",pattern:/招标人|建设单位|发包人|owner/u,bucket:"projectIdentity",valueType:"organization"},{key:"project_location",label:"建设地点",pattern:/建设地点|实施地点|project_location/u,bucket:"projectIdentity",valueType:"location"},{key:"project_scale",label:"建设规模",pattern:/建设规模|工程规模|project_scale/u,bucket:"projectScope",valueType:"scale"},{key:"construction_scope",label:"施工范围",pattern:/施工范围|招标范围|工程范围/u,bucket:"projectScope",valueType:"text"},{key:"duration",label:"计划工期",pattern:/计划工期|合同工期|总工期|schedule_requirement|duration/u,bucket:"schedule",valueType:"duration"},{key:"quality_target",label:"质量目标",pattern:/质量标准|质量目标|quality_standard/u,bucket:"quality",valueType:"standard"}]){let b=function(a,b,c,d,e){let f=c4.find(a=>a.key===b);return a.filter(a=>d.test(`${a.fieldId||""}${a.key||""}${a.fieldName||""}`)).map(a=>(function(a,b,c){let d=(0,z.lG)(a.value),e=function(a){let b=`${a.sourceFile||""} ${a.sourceRef?.sectionTitle||""} ${a.roleId||""}`;return/补疑|答疑|澄清|补充|更正|修改/u.test(b)?"addendum":/合同/u.test(b)?"contract":/招标|公告|前附表|需求书/u.test(b)?"tender":/清单|工程量|BOQ|报价/u.test(b)?"boq":/图纸|设计|CAD|DWG/u.test(b)?"drawing":/规范|标准/u.test(b)?"standard":"structured_fact"}(a);return{key:b,label:c,value:d,normalizedValue:ak(d),sourceType:e,sourceFile:a.sourceFile,sourceRef:a.sourceRef?.sectionTitle,confidence:Math.round(100*(a.confidence||.5)),priority:c9(e),locked:c9(e)>=80,selectedReason:"按资料来源优先级和字段置信度决策"}})(a,b,c)).filter(a=>a.value&&!/资料未明确|系统暂未确认/u.test(a.value)).filter(a=>{let d=e??f?.valueType;return!d||"text"===d||!c6(a.value,{key:b,label:c,aliases:[],valueType:d}).rejected}).sort((a,b)=>b.priority-a.priority||b.confidence-a.confidence||a.value.length-b.value.length)}(h,a.key,a.label,a.pattern,a.valueType);!j[a.key]&&b.length>0&&(j[a.key]=b[0]);let c=function(a,b,c){let d=[...new Map(c.map(a=>[a.normalizedValue,a])).values()];if(d.length<=1)return;let e=Math.max(...d.map(a=>a.priority)),f=d.filter(a=>a.priority===e);return{key:a,label:b,values:d.map(a=>({value:a.value,sourceFile:a.sourceFile,priority:a.priority,confidence:a.confidence})),decision:1===f.length?"highest_priority_selected":"manual_review_required"}}(a.key,a.label,b);c&&k.push(c)}let l=(b=a.projectGraph)?[...(b.resources||[]).map(a=>({key:`resource_${a.type}_${a.name}`,label:"equipment"===a.type?"机械设备":"labor"===a.type?"劳动力":"材料资源",value:[a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" "),normalizedValue:ak([a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:c9("projectGraph"),locked:!1,selectedReason:"来自项目图谱资源节点"})).filter(a=>a.value),...(b.risks||[]).map(a=>({key:`risk_${a.risk}`,label:"风险源",value:[a.risk,a.level,a.mitigation].filter(Boolean).join(" "),normalizedValue:ak([a.risk,a.level,a.mitigation].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:c9("projectGraph"),locked:!1,selectedReason:"来自项目图谱风险节点"})).filter(a=>a.value)]:[],m=l.filter(a=>/resource_/u.test(a.key)),n=l.filter(a=>/risk_/u.test(a.key));for(let a of l)j[a.key]||(j[a.key]=a);let o=(a.requiredKeys||[]).filter(a=>!j[a]).map(a=>({key:a,label:c4.find(b=>b.key===a)?.label||a,reason:"未从用户输入、招标资料、清单、图纸或项目图谱中确认该事实"})),p={projectIdentity:{projectName:j.project_name,projectCode:j.project_code,owner:j.owner,location:j.project_location},projectScope:{scale:j.project_scale,constructionScope:j.construction_scope},schedule:{duration:j.duration||j.schedule_requirement},quality:{target:j.quality_target||j.quality_standard},safety:{risks:n},resources:{resources:m},environment:{},constraints:{},byKey:j,conflicts:k,gaps:o,scopeConflicts:g},q=da(a.projectRoot);return q&&T.writeFileSync(e.join(q,`canonical-facts-${c}.json`),JSON.stringify(p,null,2)),p}({facts:bV,projectGraph:bZ,requiredKeys:c4.map(a=>a.key),projectRoot:c,requirement:a.requirement,templateId:p.id});bW.canonical=b$;let b_=(0,t.effectiveTemplateChapters)(p,ar,{preserveExplicitOutline:ao}),b0=(0,P.dK)({template:p,chapters:b_,requirement:a.requirement}).chapters,b1=bi.filter(a=>/评审|评分标准|评分办法|详细评审/u.test(`${a.sectionTitle||""}${a.content}`)).map(a=>a.content),b2=(0,Q.tL)(b1);b1.length>0&&0===b2.length&&(0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"bid-structure-audit",status:"skipped",message:"评审章节证据存在但未提取到评分条目标题:评分标准编号条目提取为空,承接审计将静默通过",details:["请检查招标文件评标办法章节编号格式;评分项要求(创优目标/绿色等级/禁编日期)由评分项要求提取通道覆盖"]},{subtitle:"评标结构校验",order:ab.length}));let b3=await (0,R.Mv)(b2.map(a=>a.title),b0.map(Q.Yx)),b4=(0,Q.KX)({template:p,chapters:b0,requirement:a.requirement,evaluationItems:b2,semanticSimilarity:b3}),b5=(async()=>{try{var b;let d,f=[];for(let a of[...aW].sort()){if(!/招标|补疑|答疑|评标/u.test(a))continue;let b=bD(a);if(b?.chunks?.length)for(let c of b.chunks)f.push({chapterId:"tender-requirements",filePath:b.file?.relativePath||a,score:1,content:c.content||"",roleId:a_.get(a),processingType:a5.get(a),sectionTitle:c.sectionTitle,source:"pinned-evidence"})}let g=f.length>0?await aX(f):(0,s.QR)([...bi.filter(a=>/招标|评标|投标须知|专用合同|合同条款|技术标准|技术要求/u.test(`${a.filePath||""}${a.sectionTitle||""}`)),...bi.filter(a=>!/招标|评标|投标须知|专用合同|合同条款|技术标准|技术要求/u.test(`${a.filePath||""}${a.sectionTitle||""}`))],{preservePinned:!0});if(f.length>0){let a=f.reduce((a,b)=>a+(b.content?.length||0),0),b=g.reduce((a,b)=>a+(b.content?.length||0),0);(0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"tender-requirement-preselect",status:"success",message:`评分项要求有用数据预筛:${f.length} → ${g.length} 条切片(${Math.round(b/Math.max(1,a)*100)}% 字符量)`,details:["投标程序/清单/目录/格式类切片已从主提取输入剔除(义务词形+语义命中双通道保留)","全量切片仍作必提条款窄通道召回池,兜底不失效"]},{subtitle:"评分项要求提取\xb7预筛",order:ab.length})),V()}let h="0"!==process.env.DOCUMENT_EXTRACTION_CACHE?(b={collectionEvidence:f,preselectEvidence:g},(0,z.c6)({version:"tender-requirements-extraction-v2",collection:a2(b.collectionEvidence),preselectInput:a2(b.preselectEvidence)})):void 0,i=h?function(a,b){try{let c=e.join(a1(a),`tender-requirements-${b}.json`),d=JSON.parse(T.readFileSync(c,"utf8"));if(!a0(d)||aZ(d))return;return d}catch{return}}(c,h):void 0;if(i)d=i,(0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"tender-requirements-cache",status:"success",message:"复用上次提取结果(招标文件与预筛输入哈希命中,跳过主提取/窄通道 LLM)",details:be(d)},{subtitle:"评分项要求提取\xb7缓存复用",order:ab.length})),V();else{d=await Y(()=>aI(g,{signal:a.signal})),!a0(d)&&g.length>0&&(d=await Y(()=>aI(g,{signal:a.signal})));let b=await aY(f),i=aP(d);if(b.length>0&&i.length>0){let c=await Y(()=>aI(b,{signal:a.signal}));a0(c)&&(d=a$(d,c),(0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"tender-mandatory-extraction",status:"success",message:"必提条款窄通道补提完成(主提取漏提字段已补齐)",details:be(c)},{subtitle:"评分项要求提取\xb7必提补提",order:ab.length})),V())}if(aQ(d).length>0&&f.length>0){let b=await Y(()=>aT(d,f,{signal:a.signal}));d=b.model;let c=b.noEvidenceGaps,e=b.stillGaps;0===b.stillGaps.length&&((0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"tender-field-gap-extraction",status:"success",message:"评分项要求字段定向补提完成(字段级聚焦提取,全部评分项要求字段已提取)",details:be(d)},{subtitle:"评分项要求提取\xb7字段补提",order:ab.length})),V());let g=a=>aN.includes(a);if(e.length>0){let a=e.filter(g),b=e.filter(a=>!g(a)),c=[a.length>0?`必提字段 ${a.map(a=>aO(a)).join("、")}`:"",b.length>0?`常规字段 ${b.map(a=>aO(a)).join("、")}`:""].filter(Boolean);(0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"tender-field-gap-missing",status:"skipped",message:`字段定向补提后仍缺失:${c.join(";")}(条款窗口证据存在但 LLM 提取失败)`,details:["请检查 LLM 可用性与输出质量;正文将无法显性响应上述评分项要求"]},{subtitle:"评分项要求提取\xb7字段缺口",order:ab.length})),V()}if(c.length>0){let a=c.filter(g),b=c.filter(a=>!g(a)),d=[a.length>0?`必提字段 ${a.map(a=>aO(a)).join("、")}`:"",b.length>0?`常规字段 ${b.map(a=>aO(a)).join("、")}`:""].filter(Boolean);(0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"tender-field-gap-no-evidence",status:"skipped",message:`${d.join(";")}:招标资料中未找到对应条款(判定为无此要求,非漏提)`,details:["若项目实际存在该要求,请检查招标文件相关章节切片完整性"]},{subtitle:"评分项要求提取\xb7字段缺口",order:ab.length})),V()}}h&&function(a,b,c){if(!(!c||!a0(c)||aZ(c)))try{T.writeFileSync(e.join(a1(a),`tender-requirements-${b}.json`),JSON.stringify(c,null,2))}catch{}}(c,h,d)}return a0(d)?((0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"success",message:"招标文件评分项要求结构化提取完成",details:be(d)},{subtitle:"评分项要求提取",order:ab.length})),V()):g.length>0&&((0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"skipped",message:"评分项要求提取未获得有效结果(模型不可用或资料中无要求),零响应检测自动跳过",details:[]},{subtitle:"评分项要求提取",order:ab.length})),V()),d}catch(a){return(0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"skipped",message:"评分项要求提取链异常,已降级为空模型(零响应检测自动跳过)",details:[`异常信息:${a instanceof Error?a.message:String(a)}`,"请检查 LLM 可用性与本地语义模型状态"]},{subtitle:"评分项要求提取",order:ab.length})),V(),aE(!1)}})(),b6=(0,bs.w9)({chapters:b4.enrichedChapters,projectGraph:bZ,canonicalFacts:b$});p={...p,chapters:b6};let b8=(0,eK.NP)({template:p,context:bX,title:p.name});b8.catch(()=>void 0);let b9=new Map;if(bZ){let a=new Set;for(let b of[...bZ.works,...bZ.methods,...bZ.resources,...bZ.schedule,...bZ.standards,...bZ.risks,...bZ.requirements,...bZ.siteConditions])(b.sourceFiles||[]).forEach(b=>a.add(b));for(let b of b6){let c=[b.title,b.purpose,...b.sections||[],...b.requiredFacts||[],...b.queries||[]].join(" "),d=a=>a&&((0,eM.C1)(a,c,.18)||(0,eM.C1)(a,b.title,.12)),e=/概况|总体|部署|施工|进度|工期|质量|安全|资源|人材机|材料|机械|劳动力|风险|危大|绿色|环保/u.test(c),f=bZ.works.filter(a=>a.name&&(d(a.name)||e)),g=bZ.methods.filter(a=>a.name&&(d(a.name)||(a.applicableWorks||[]).some(d)||e)),h=bZ.resources.filter(a=>a.name&&(d(a.name)||/资源|人材机|材料|机械|劳动力/u.test(c)&&/material|equipment|labor/u.test(a.type))),i=bZ.gaps.filter(a=>!(0,eJ.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)),b9.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})}bU||((0,bu.fx)(ab,(0,bu.X5)({type:"file_understanding",roleId:"project-graph-match",status:"success",message:`图谱→章节映射完成:${bZ.works.length}工程 ${bZ.methods.length}工法 ${bZ.resources.length}资源 → ${b6.length}章`,details:b6.map(a=>{let b=b9.get(a.id);return`${(0,t.GQ)(a.title)}:匹配文件${b?.graphFiles.size||0}个,BOQ项${b?.graphBoqItems.length||0}个`})},{subtitle:"图谱章节映射"})),V())}let ca=b6,cb=(0,eJ.TD)(bU?.constructionOrganizationGraph)||bU?.constructionOrganizationContext,cc=[ah.prompt,cb].filter(Boolean).join("\n\n"),cd=[cc,O({template:{...p,chapters:ca},chapters:ca,factsModel:bW,requirement:a.requirement,scopeConflicts:b$.scopeConflicts})].filter(Boolean).join("\n\n"),ce={...p,chapters:ca},cf=(0,bf.My)([aR,a.requirement||""].filter(Boolean).join("\n\n"),ca),cg=(0,w.tF)({requirement:a.requirement,promptTexts:aR,template:ce,chapters:ca,spec:ar}),ch=0,ci=0,cj=[],ck=await (0,z.l$)(ca.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b,chapterIndex:c})=>{if(b.sections?.length){ch+=1;let a=cf.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,t.GQ)(a.chapterTitle)===(0,t.GQ)(b.title)).flatMap(a=>a.requiredSections.sort((a,b)=>(a.order||0)-(b.order||0)).map(a=>a.title));for(let c of[...a,...b.sections]){let a=(0,bf.EN)(String(c).trim());a&&a!==String(c).trim()&&cj.push(`${(0,t.GQ)(b.title)}:${c} → ${a}`)}let d=(0,bf.k2)([...a,...b.sections],b.title);return{...b,sections:d.length?d:(0,bf.k2)(b.sections,b.title)}}ci+=1;let d=(0,s.QR)(bJ.filter(a=>a.chapterId===b.id||(0,u.Lk)(a,b.title)),{preservePinned:!0}),e=ah.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",f=dR(ad,b),g=await (0,bf.SP)({template:ce,chapter:b,chapterIndex:c,evidence:d,promptTexts:f.promptTexts,projectContext:cd,requirement:a.requirement,roleContext:e,targetWords:cg.chapterTargets.get(b.id)||1200,structuralRules:cf,signal:a.signal}),h=cf.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,t.GQ)(a.chapterTitle)===(0,t.GQ)(b.title)).flatMap(a=>a.requiredSections.map(a=>`强制小节:${a.title}`));if((0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"section-planning",promptId:f.primaryPromptId,status:g.length?"success":"failed",message:`${(0,t.GQ)(b.title)} 小节规划${g.length?`生成 ${g.length} 个小节`:"未生成可用小节"}`,details:[...f.promptDetails,...h,...g.length?g.map(a=>`规划小节:${a}`):["规划结果为空或被污染过滤"]]},{subtitle:"小节规划"})),!g.length)throw Error(`${(0,t.GQ)(b.title)} 小节规划未生成可用小节`);return{...b,sections:g}},{kind:"llmRepair",targetWords:cg.targetChars||4e3}),cl=await b5,cm=(0,P.dK)({template:p,chapters:ck,requirement:a.requirement}),cn="0"!==process.env.DOCUMENT_REQUIREMENT_CALIBRATION,co=cm.chapters;if(cn&&a0(cl)){let b=await Y(()=>bg({chapters:cm.chapters,requirementSummary:be(cl),templateName:p.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,t.GQ)(b.title)===(0,t.GQ)(a.chapterTitle)||(0,bf.nz)(b.title)===(0,bf.nz)(a.chapterTitle));if(b<0)continue;let e=d[b],f=a.sections.filter(a=>!(e.sections||[]).some(b=>(0,bf.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,bf.kw)(b,a)))})?{chapters:d,applied:c}:{chapters:a,applied:[]}}(cm.chapters,b);a.applied.length>0?(co=a.chapters,(0,bu.fx)(ab,(0,bu.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,t.GQ)(a.chapterTitle)}:${a.sections.join("、")}`)},{subtitle:"大纲要求校准",order:ab.length}))):(0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"skipped",message:"大纲要求校准未通过结构守恒校验,回退原规划",details:["校准新增小节未通过章名匹配/标题清洗校验,全部丢弃"]},{subtitle:"大纲要求校准",order:ab.length})),V()}else(0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"skipped",message:"大纲要求校准未产出有效增量(章节结构已覆盖评分项要求或校准调用失败),回退原规划",details:[]},{subtitle:"大纲要求校准",order:ab.length})),V()}let cp=await (0,S.mI)(co),cq=co.reduce((a,b,c)=>a+Math.max(0,(b.sections||[]).length-(cp[c]?.sections||[]).length),0);{let a=cm.report;a.unattached.length>0?(0,bu.fx)(ab,(0,bu.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,bu.fx)(ab,(0,bu.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 cr=await (0,R.Mv)(b2.map(a=>a.title),cp.map(Q.Yx)),cs=(0,Q.KX)({template:p,chapters:cp,requirement:a.requirement,evaluationItems:b2,semanticSimilarity:cr});ca=(0,bs.w9)({chapters:cs.enrichedChapters,projectGraph:bZ,canonicalFacts:b$}),ca=(0,Q.ji)(ca);let ct=await (0,S.mI)(ca),cu=ca.reduce((a,b,c)=>a+Math.max(0,(b.sections||[]).length-(ct[c]?.sections||[]).length),0);ca=ct;let cv=cq+cu;cv>0&&((0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"outline-topic-filter",status:"success",message:`大纲小节主题过滤:剔除 ${cv} 个评标纪律/商务报价类离题小节`,details:["被剔除小节不进入写作、目录与预算计划",...cu>0?[`评标结构校验补挂回路二次剔除:${cu} 个条款碎片/纪律小节`]:[]]},{subtitle:"大纲主题约束",order:ab.length})),V()),(cs.issues.length>0||b4.issues.length>0)&&(0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"bid-structure-audit",status:cs.issues.some(a=>"blocker"===a.severity)?"failed":"success",message:`评标结构符合性校验:${cs.diagnostics.length} 个结构组,${cs.diagnostics.filter(a=>"satisfied"===a.status).length} 个已满足,${cs.diagnostics.filter(a=>"missing"===a.status&&"required"===a.level).length} 个必查缺失(已自动补挂),${cs.diagnostics.filter(a=>"fragmented"===a.status).length} 个分散`,details:[...cs.diagnostics.map(a=>`${"satisfied"===a.status?"满足":"fragmented"===a.status?"分散":"补挂"}:${a.groupTitle}${"missing"===a.status?`(补挂小节:${a.missingSections.join("、")})`:""}`),...cs.issues.map(a=>`提示:${a.message}`).slice(0,8)]},{subtitle:"评标结构校验"})),p={...p,chapters:ca};let cw=await (0,R.Mv)(a4(cl).map(({item:a})=>a3(a)),ca.map(a=>bc(a.title))),cx=await bd(cl,ca,cw);cx.length>0&&((0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"tender-requirement-routing",status:"success",message:`评分项要求章节级路由:${cx.length} 条要求已路由到责任章节(生成时显性响应)`,details:cx.map(a=>`${a.kind}“${a.item.text}” → ${a.chapterTitle}(相似度 ${a.score.toFixed(2)})`)},{subtitle:"要求响应路由",order:ab.length})),V());let cy=await bk(),cz=await bq(),cA=function(a){let b=(0,P.yt)({template:{id:"runtime",name:a.templateName||"",outputTitle:"",description:"",category:"",chapters:a.chapters},chapters:a.chapters,requirement:a.requirement}),c=/施工组织设计|施工组织|施组|技术标/u.test(`${a.templateName||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`)||b.length>0,d=Object.values(a.factsModel?.canonical?.byKey||{}).map(a=>`${a.label}=${a.value}`),e=d.filter(a=>/建设规模|建筑面积|占地|用地面积|装配|层数|高度/u.test(a)).slice(0,8),f=(a.tenderRequirements?.frontScheduleClauses||[]).map(a=>a.text).filter(Boolean).slice(0,12),g=["正文必须落到本项目资料已确认的事实,不得使用模板化空话或跨小节复制段落","措施类内容写成“责任岗位+执行动作+量化标准+检查频次+整改时限+复查销项”闭环句式:同一自然段内三要素(责任岗位+检查频次+整改闭环)须同时出现,全文每 1500 字至少 1 段闭环句式","正文每 1000 字至少落位 6 处带单位量化工艺参数(mm/MPa/养护天数/间距/压实度等),施工流程与施工方法须有明确的工序顺序表达(形式由模型自然选择、不做统一要求:顺序词叙述、编号步骤、有序/无序列表或箭头链均可),每个分部分项方案至少 1 处 3 环节以上工序顺序表达",'专业工程类小节按"施工概况/施工流程/施工方法"三段式展开,小节标题用专业工程正式名称(如"拆除工程"),禁止使用"工作包"等后台概念命名','质量目标与创优目标必须使用招标文件原文的奖项名称逐字落位,禁止替换、降级或省略为其他奖项名称(如把招标文件指定奖项写成其他奖项);招标文件"确保/达到"类等级要求不得弱化为"争创/争取"',...f.length?[`投标人须知前附表响应条款(正文必须逐条落位或遵守,零响应即评标失分):${f.map((a,b)=>`${b+1}.${a}`).join(";")}`]:[]],h=a.chapters.map(b=>{var c;let d=(c=b.title,br.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:ca,factsModel:bW,projectGraph:bZ||void 0,requirement:a.requirement,templateName:p.name,tenderRequirements:cl}),cB=[...(0,cW.$v)({templateName:p.name,chapterTitles:ca.map(a=>a.title),requirement:a.requirement,targetWords:cg.targetChars||0}),...(0,cW.Al)({templateName:p.name,chapterTitles:ca.map(a=>a.title),requirement:a.requirement})];cB.length>0&&(0,bu.fx)(ab,(0,bu.X5)({type:"validation",roleId:"reference-benchmark",status:"success",message:"已读取模板参考库同类工程画像,作为质量软性参考注入文档蓝图",details:cB},{subtitle:"参考画像注入",order:ab.length}));let cC=O({template:p,chapters:ca,factsModel:bW,requirement:a.requirement,referenceLines:cB,scopeConflicts:b$.scopeConflicts}),cD=function(a){if(!a||!a0(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,S.dn)(a.text))),a.dateFabricationProhibited&&b.push("禁止编造开工日期:招标文件以开工令时间为准,正文不得自行设定具体日历开工日期,一律表述为“以开工令时间为准”。"),c("禁止性/约束性要求(正文不得违反)",a.prohibitionNotes),0===b.length)?"":`【招标文件评分项要求(系统从绑定资料提取,必须逐条响应,零响应即评标失分)】
|
|
137
137
|
${b.map((a,b)=>`${b+1}. ${a}`).join("\n")}
|
|
138
138
|
${(0,z.TP)("以上为系统提取的评分项要求内容:实质要求(奖项名称、数字参数、等级指标等)必须显性响应进正文;本段提示词文字本身(编号、括号说明等元话语)禁止复述进正文")}`}(cl);cd=[cc,cC,cD].filter(Boolean).join("\n\n");let cE=function(a){let b=M(a.factsModel),c=b.selected,d=b.dropped.length>0?[`⚠️ 因 LLM 上下文预算限制,${b.dropped.length} 个低优先级事实未纳入蓝图;完整事实主表可在生成后的事实覆盖报告查看。`]:[],e=C(a),f={};for(let b of L)f[b]=new Set(a.factsModel[b]);let g=a.chapters.map((b,d)=>{let e=c.filter(a=>!!f.preciseFacts.has(a)||D(b.title).some(b=>(K[b]||[]).some(b=>f[b]?.has(a))));return{chapterIndex:d,title:b.title,facts:e,traceLines:e.map((a,b)=>N(a,b)),taskCard:I(b),executionPlan:H(b,a.factsModel)}});return{globalLines:["【全局文档蓝图与一致性约束】",`文档类型画像:${e.type};评分重点:${e.focus.join("、")}`,`文档目标:${a.template.outputTitle||a.template.name}`,a.requirement?`用户目标:${a.requirement}`:"",(0,y.FI)({templateName:a.template.name,outputTitle:a.template.outputTitle,requirement:a.requirement,chapters:a.chapters}),(0,z.TP)("证据引用约束:工期、质量目标、招标范围、金额、工程量、验收要求等项目专属事实必须来自可信基础事实主表或绑定材料,系统暂未确认的数字和参数不得编造;标准规范编号、法律法规名称属于公共专业知识,可依据现行有效版本直接引用,不要求材料提供,但不得虚构编号或引用已废止版本。"),(0,z.TP)("跨章一致性要求:所有章节必须共用同一套工期、质量、范围、资源和验收口径;不得在不同章节写出相互矛盾的项目基础信息。"),(0,z.TP)('总述数据使用约束:可信基础事实主表中的工程地点、建设规模(总建筑面积)、计划工期、改造范围等总述数据,只在项目概况/工程概况类章节集中交代;其他章节不得以"本项目为……"开头复述完整概况段,确需数据支撑时只引用所需的具体数字。'),...a.scopeConflicts?.length?[`【源级口径冲突裁决(最高优先级约束)】资料文件中存在同口径数值冲突,必须按下述裁决执行:
|