@customize-agent/server 4.18.10 → 4.18.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/5284.js +5 -4
- package/.next/server/chunks/6183.js +15 -15
- package/.next/server/chunks/6482.js +5 -5
- 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 +18 -18
- package/package.json +1 -1
- /package/.next/static/{vnqtnrxmp_-TRG6xA3g9e → W18xDGAGk5Y6mximnIZLt}/_buildManifest.js +0 -0
- /package/.next/static/{vnqtnrxmp_-TRG6xA3g9e → W18xDGAGk5Y6mximnIZLt}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";exports.id=6183,exports.ids=[6183,9227],exports.modules={26183:(a,b,c)=>{c.d(b,{h0x:()=>d.h0,bVF:()=>d.bV,OXS:()=>
|
|
1
|
+
"use strict";exports.id=6183,exports.ids=[6183,9227],exports.modules={26183:(a,b,c)=>{c.d(b,{h0x:()=>d.h0,bVF:()=>d.bV,OXS:()=>eu,QJx:()=>d.QJ,jGg:()=>d.jG,R1O:()=>et,Bhi:()=>d.Bh,xmB:()=>d.xm,J5_:()=>d.J5});var d=c(23500),e=c(76760),f=c(19898),g=c(44533),h=c(29281),i=c(25840),j=c(6444),k=c(85441),l=c(73859),m=c(56942),n=c(70933),o=c(70208),p=c(91977),q=c(61373),r=c(78217),s=c(23760),t=c(40693),u=c(22157),v=c(51144);function w(a){let b=a.fieldName||a.key||"资料事实",c=(0,u.lG)(a.value).replace(/\s+/gu," ").trim();return`${b}:${c}${a.sourceFile?`(来源:${e.basename(a.sourceFile)})`:""}`}function x(a){let b=`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`;return/专项施工|危大|专项方案/u.test(b)?{type:"专项施工方案",focus:["专项对象边界","工艺参数","风险控制","验收要求","应急措施"]}:/投标|技术标|响应|招标/u.test(b)?{type:"投标技术方案",focus:["招标响应","技术优势","工期质量安全承诺","资源保障","履约可实施性"]}:/监理|旁站|巡视|平行检验/u.test(b)?{type:"监理规划/细则",focus:["监理目标","旁站巡视","平行检验","验收程序","资料签认"]}:/可研|可行性|项目建议书|投资估算/u.test(b)?{type:"可研/项目建议类文档",focus:["建设必要性","方案比选","投资估算","风险分析","实施效益"]}:/运维|维护|保养|巡检/u.test(b)?{type:"运维维护方案",focus:["巡检频次","维护流程","故障响应","备品备件","记录闭环"]}:{type:"施工组织设计/施工技术方案",focus:["工程概况","施工部署","进度质量安全","资源配置","施工工艺和验收闭环"]}}function y(a){let b=["project"];return/概况|工程|项目|部署|总体|施工|方案|资源/u.test(a)&&b.push("scope"),/进度|工期|部署|资源/u.test(a)&&b.push("schedule"),/质量|验收|材料/u.test(a)&&b.push("quality"),/安全|文明|风险|危大/u.test(a)&&b.push("safety"),/资源|材料|设备|劳动力|进度/u.test(a)&&b.push("resources"),/施工|工艺|技术|方案|清单|工程量/u.test(a)&&b.push("quantities"),[...new Set(b)]}function z(a){let b={project:"项目基础事实",scope:"招标范围/施工边界",schedule:"工期与节点",quality:"质量目标与验收",safety:"安全文明要求",resources:"资源投入依据",quantities:"清单/图纸/工程量事实"};return a.map((a,c)=>`${c+1}. ${a.title}:${y(a.title).map(a=>b[a]||a).join("、")}`)}function A(a,b){let c=y(a.title),d=c.filter(a=>"project"===a||"scope"===a?b.project.length>0||b.drawings.length>0:"schedule"===a?b.schedule.length>0:"quality"===a?b.quality.length>0||b.specifications.length>0:"safety"===a?b.safety.length>0||b.rules.length>0:"resources"===a?b.resources.length>0||b.bills.length>0:"quantities"===a&&(b.bills.length>0||b.drawings.length>0)),e=c.filter(a=>!d.includes(a)),f=c.length?d.length/c.length:1,g=f>=.75?"strong":f>=.4?"medium":"weak";return{level:g,mode:"strong"===g?"project-specific":"medium"===g?"standard-based":"restricted-general",supported:d,missing:e}}function B(a){return/概况|工程|项目/u.test(a)?["工程基础信息必须与资料一致","突出招标范围、建设地点、规模、工期、质量目标","说明施工组织编制边界"]:/部署|总体|组织/u.test(a)?["明确施工组织逻辑、专业接口和施工段划分","说明资源、进度、质量、安全之间的统筹关系","形成可执行的管理闭环"]:/进度|工期/u.test(a)?["围绕总工期和关键线路组织","说明资源保障、穿插施工、纠偏机制","不得编造系统暂未从知识库确认的日期节点"]:/质量/u.test(a)?["覆盖材料进场验收、复验、过程检查、隐蔽验收和资料归档","把资料中的质量标准落入控制点","明确整改复验闭环"]:/安全|文明|风险|危大/u.test(a)?["识别作业风险和现场管理边界","覆盖人员、设备、临电、消防、文明施工措施","明确检查整改和应急响应"]:/资源|材料|设备|劳动力/u.test(a)?["依据工程范围和进度组织资源配置","说明材料设备进场、验收、保管和调配","资源安排必须支撑工期和质量目标"]:/施工|工艺|技术|方案/u.test(a)?["明确施工准备、工艺流程、关键参数和验收要求","关联图纸、清单、说明资料中的对象和边界","突出重点难点和过程控制"]:["结合资料事实说明对象范围、实施方法、控制要点和验收闭环","避免泛化表述,必须体现本项目特征"]}function C(a,b){let c=A(a,b);return`章节实施方案:${a.title}
|
|
2
2
|
- 写作模式:${c.mode};资料支撑度:${c.level}
|
|
3
3
|
- 已支撑事实域:${c.supported.join("、")||"暂无"}
|
|
4
4
|
- 系统暂未确认事实域:${c.missing.join("、")||"无"}
|
|
@@ -64,25 +64,25 @@ ${g}`:"",h?`【章节/格式提示词】
|
|
|
64
64
|
${h}`:""].filter(Boolean).join("\n\n"),promptDetails:f}}function dn(a){return(0,Q.de)(a).replace(/[\s,,.。::;;||()()《》<>【】"“”'‘’]/gu,"").split("[").join("").split("]").join("").toLowerCase()}function dp(a){return/工程造价|造价|报价|投标报价|报价明细|综合单价|单价|合价|金额|税率|增值税|利润|预留金|暂列金额|最高投标限价|招标控制价|合同估算价|合同估算价格|投资估算|估算价/u.test(a)}function dq(a){let b=cX((0,u.lG)(a));return!b||/资料未明确|系统暂未从知识库确认|未确认|待确认|无|暂无/u.test(b)||/###|第\s*\d+\s*页|共\s*\d+\s*页|新版交易系统|操作帮助|登录页面|见招标公告|未尽事宜|详见图纸|招标文件补疑|政府相关文件|规范等其它资料/u.test(b)||/^\d+(?:\.\d+)?\s*(?:mm|cm|m|㎡|m²|m3|m³|%|元|万元)?$/iu.test(b)||dp(b)||b.length>160?"":b}function dr(a,b,c={}){let d=b.filter(a=>{let b=`${a.key||""}${a.fieldName||""}${a.fieldId||""}`,c=(0,u.lG)(a.value);return!(dp(`${b}${c}`)||!dq(c)||/第\s*\d+\s*页|新版交易系统|操作帮助|见招标公告|未尽事宜|详见图纸|招标文件补疑|政府相关文件|规范等其它资料/u.test(`${b}${c}${a.sourceFile||""}`))&&(/项目名称|工程名称|项目编号|招标项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|计划工期|合同工期|质量标准|质量目标/u.test(b)||/危大|安全|资源|材料|机械|设备/u.test(b)&&!/^\d+(?:\.\d+)?\s*(?:mm|cm|m|㎡|m²|m3|m³|%|元|万元)?$/iu.test(c)||/面积|占地|建筑面积|长度|宽度|高度|厚度|深度|强度|等级|坡度|管径|直径|规格|跨度|天数|工期|周长|体积|重量/u.test(b)&&/^\d+(?:\.\d+)?\s*(?:㎡|m²|m2|m³|m3|m|mm|cm|km|MPa|kPa|kN|天|日历天|日|级|%|台|套|座|个|t|kg)/iu.test(c))}),e=new Set,f=[];for(let b of d){let d=dq(b.value);if(!d)continue;let g=b.fieldName||b.key||b.fieldId||"资料事实",h=`${g}:${d}`;if(!e.has(h)&&(e.add(h),!function(a,b){let c=dn(a),d=dn(b);if(!d||d.length<2||c.includes(d))return!0;let e=b.match(/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年|万元|元|平方米|㎡|m²|立方米|m³|米|m|mm|cm|台|套|人|项|%|MPa|kPa)?/giu)||[];return e.length>0&&e.some(a=>dn(a).length>=2&&c.includes(dn(a)))}(a,d)&&(f.push({fact:b,label:g,value:d}),c.maxItems&&f.length>=c.maxItems)))break}return f}function ds(a,b,c={}){return dr(a,b,{maxItems:c.maxIssues}).map(a=>({level:"warning",message:`已确认事实未在正文中落位:${a.label}=${a.value}`,suggestion:"请将该事实自然写入对应章节或小节,不得改变原始数值和单位。"}))}function dt(a){return/概况|项目|工程|地点|规模|工期|质量|估算/u.test(a)?{keyword:.65,vector:.25,rewrite:.8,hybridBonus:.2}:/人|材|机|资源|材料|设备|机械|劳动力/u.test(a)?{keyword:.55,vector:.35,rewrite:.75,hybridBonus:.18}:/危大|安全|文明|风险/u.test(a)?{keyword:.5,vector:.4,rewrite:.8,hybridBonus:.2}:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}}function du(a,b){let c=`${a.title} ${(a.sections||[]).join(" ")} ${a.requiredFacts.join(" ")}`;return"reference"===b?.55:"table"===b?/清单|工程量|数量|材料|设备|资源|费用|造价|范围|统计|表/u.test(c)?1.45:.95:"rule"===b?/要求|规则|招标|评审|响应|质量|安全|验收|标准|工期|进度|风险|约束/u.test(c)?1.35:.95:"drawing"===b?/图纸|设计|布置|位置|平面|剖面|立面|空间|施工方法|做法/u.test(c)?1.35:.85:"specification"===b&&/技术|规范|标准|参数|做法|质量|验收|施工方法/u.test(c)?1.3:1}function dv(a,b){let c=`${b.sectionTitle||""}
|
|
65
65
|
${b.filePath}
|
|
66
66
|
${b.content}`;return Math.min(1.8,.16*[...new Set([a.title,...a.sections||[],...a.requiredFacts].flatMap(a=>a.split(/[\s、,,。;;::()()《》【】-]+/u)).map(a=>a.trim()).filter(a=>a.length>=2).slice(0,36))].filter(a=>c.includes(a)).length)}function dw(a){return`${a.sectionTitle||""}${a.content}`.slice(0,600)}function dx(a,b,c,d){let e=b.map(b=>{let d=(0,n.A1)(b,a.requiredFacts)*du(a,b.processingType)+dv(a,b),e=c.semantic?c.semantic.similarity(c.semantic.queryText,dw(b)):0;return{...b,score:.5*d+10*e}});return(0,n.QR)(e,c,d)}function dy(a,b,c){let d=(a.sections||[]).slice(0,10).join(" "),e=a.requiredFacts.slice(0,10).join(" "),f=a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4);return[...new Set([...f.length>=2?[`${a.title} ${d} ${e}`.trim(),...f.map(b=>`${b} ${(a.sections||[]).slice(0,6).join(" ")}`.trim()),`${f.slice(0,3).join(" ")} ${e}`.trim()]:[`${a.title} ${d} ${e}`.trim()],...b,...c].filter(Boolean))]}async function dz(a){if((0,u.Te)(a.signal),0===a.scopedFilePaths.length)return[];let b=`${a.chapter.title} ${a.sectionTitle}`.trim(),c=await a.manager.search(a.projectRoot,b,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:20,weights:dt(b),generationMode:!0});return(0,n.QR)(c.results.filter(b=>a.scopedFilePaths.includes(b.filePath)).map(b=>({chapterId:a.chapter.id,filePath:b.filePath,score:b.score+1.2,content:b.content,roleId:a.fileRoleByPath.get(b.filePath),processingType:a.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"section-evidence"})),{preservePinned:!0})}function dA(a,b,c=12){if(0===b.length)return[];let d=b.slice(0,c).map(a=>e.basename(a)),f=b.length>c?` 等 ${b.length} 个文件`:"";return[`${a}:${d.join("、")}${f}`]}function dB(a,b=5){return a?Object.entries(a).sort((a,b)=>b[1].inputChars-a[1].inputChars).slice(0,b):[]}function dC(a,b,c){if(Number.isFinite(c)&&c>0)return Math.ceil(c);let d=new Set(b.filter(Boolean)),e=a.listFiles?.().filter(a=>0===d.size||d.has(a.relativePath)).reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0)??0;return e>0?e:Math.max(1,d.size)}let dD=[{pattern:/本小节围绕.+展开,结合绑定项目资料/u,label:"模板化开篇套话"},{pattern:/明确适用范围、控制目标、责任岗位与过程要求/u,label:"泛化目标罗列"},{pattern:/实施前应完成资料核对、技术交底和作业条件确认/u,label:"泛化前置条件"},{pattern:/交底覆盖率按\s*100%?\s*控制/u,label:"空泛交底承诺"},{pattern:/关键问题在\s*24\s*小时内形成整改责任/u,label:"空泛整改时限"},{pattern:/按施工准备→过程实施→检查验收→问题整改→资料归档的闭环组织/u,label:"通用闭环套话"},{pattern:/按作业条件确认→技术交底→过程实施→自检互检→整改复查/u,label:"通用流程套话"},{pattern:/依据本项目已确认资料中的项目边界/u,label:"资料依据套话"},{pattern:/执行日巡查、周复核和节点验收制度/u,label:"泛化巡查制度"},{pattern:/一般问题\s*7\s*日内闭环/u,label:"泛化整改时限"},{pattern:/由项目经理、技术负责人和专职安全员联合复核/u,label:"岗位名单堆砌"},{pattern:/确保与总体施工部署、工期计划和验收要求保持一致/u,label:"原则性呼应"},{pattern:/结合现场实际情况(?:,|,)?合理(?:组织|安排|布置|配置)/u,label:"结合实际套话"},{pattern:/严格(?:执行|落实|按照)国家(?:现行)?(?:有关)?(?:规范|标准|规程)/u,label:"规范泛引用"},{pattern:/做到(?:文明施工|安全生产|质量第一|安全第一)/u,label:"口号式承诺"},{pattern:/(?:确保|保证)工程(?:质量|安全|进度|文明施工)/u,label:"目标口号"},{pattern:/建立(?:健全)?(?:完善)?(?:的)?(?:管理)?体系(?:和|,)?(?:落实|确保|保证)/u,label:"体系空话"}],dE=RegExp(dD.map(a=>`(?:${a.pattern.source})`).join("|"),"u"),dF=["本小节围绕以下内容展开并结合绑定项目资料","明确适用范围控制目标责任岗位与过程要求","实施前应完成资料核对技术交底和作业条件确认","交底覆盖率按100%控制","关键问题在24小时内形成整改责任","按施工准备过程实施检查验收问题整改资料归档的闭环组织","依据本项目已确认资料中的项目边界","执行日巡查周复核和节点验收制度","一般问题7日内闭环","由项目经理技术负责人和专职安全员联合复核","确保与总体施工部署工期计划和验收要求保持一致","结合现场实际情况合理组织安排","严格执行国家现行有关规范标准","做到文明施工安全生产质量第一","确保工程质量和安全进度","建立健全管理体系并落实相关制度"],dG=["每道工序完成后由质检员实测实量并记录数据","混凝土浇筑完成后每天洒水养护不少于两次","每周组织不少于一次的现场安全专项检查"];async function dH(a){return(0,b_.A)({prototypes:[...dF],negativePrototypes:[...dG],lexicalHints:dE,embedDocuments:a})}let dI=[/主要分部分项工程施工方案/u,/主要施工方法/u,/主要施工内容/u,/施工方案/u],dJ=/(?:建筑面积|面积|总建筑面积)[约]?\s*\d+(?:\.\d+)?\s*(?:㎡|m²)|计划工期\s*\d+|日历天|地上\s*\d+\s*层|框架结构|质量标准[::]?\s*合格/giu;function dK(a){let b=a.split("\n"),c=[],d="",e=[];for(let a of b){let b=/^#{3,4}\s+(.+)$/u.exec(a.trim());b?((d||e.length>0)&&c.push({heading:d,body:e.join("\n")}),d=b[1].trim(),e=[]):e.push(a)}return(d||e.length>0)&&c.push({heading:d,body:e.join("\n")}),c}function dL(a){let b=[],c=new Map;for(let b of a)for(let a of dK(b.content)){let d=a.heading||b.title;for(let e of a.body.replace(/^#{1,6}\s+.*$/gmu,"").replace(/^\s*\|.*\|\s*$/gmu,"").replace(/^\s*[-|]\s*$/gmu,"").replace(/^\s*\[.*?\]\(.*?\)\s*$/gmu,"").split(/\n{1,}/u).map(a=>a.trim()).filter(a=>a.length>=60&&a.length<=400&&!/^\s*[-*]\s+/u.test(a))){let a=e.replace(/[,。,.;;::、()()【】[\]《》“”"'`\s]/gu,"");if(a.length<60)continue;let f=c.get(a)||[];f.some(a=>a.chapter===b.title&&a.section===d)||f.push({chapter:b.title,section:d}),c.set(a,f)}}let d=new Set;for(let[a,e]of c){let c=e.filter((a,b,c)=>c.findIndex(b=>b.chapter===a.chapter&&b.section===a.section)===b);if(c.length<2)continue;let f=c.map(a=>`${a.chapter}::${a.section}`).sort().join("|");if(d.has(f))continue;d.add(f);let g=e[0],h=g?`(如:${g.section} 中「${a.slice(0,30)}…」)`:"";if(b.push({level:c.length>=3?"error":"warning",severity:c.length>=3?"blocker":"warning",message:`发现相同段落出现在 ${c.length} 个不同小节:${c.map(a=>a.section).slice(0,6).join("、")}${h}`,suggestion:"每个小节必须针对其标题写专属内容,不得复制粘贴相同段落;重复小节应合并或删除后重写。"}),b.length>=8)break}return b}async function dM(a,b){let c=[],d=await dH(b);for(let b of a){let a=dK(b.content),e=[];for(let b of a){let a=b.body.split(/[。;;]/u).map(a=>a.trim()).filter(a=>a.length>=12);if(0===a.length)continue;let c=await d(a);a.forEach((a,b)=>{if(c[b])for(let{pattern:b,label:c}of dD)b.test(a)&&!e.includes(c)&&e.push(c)})}e.length>=3?c.push({level:"error",severity:"blocker",message:`${b.title} 存在大量模板化空话(${e.slice(0,6).join("、")})`,suggestion:'删除"本小节围绕…展开""按100%控制"式套话,按"责任岗位+执行动作+量化标准+检查频次+整改时限"重写。'}):e.length>0&&c.push({level:"warning",severity:"warning",message:`${b.title} 存在模板化空话:${e.join("、")}`,suggestion:"替换为具体量化做法;同一小节不得重复出现套话段落。"})}return c}async function dN(a,b){let c=[],d=await dH(b);for(let b of a){let a=0,e=new Set;for(let f of dK(b.content)){let g=f.body.split(/[。;;]/u).map(a=>a.trim()).filter(a=>a.length>=12);if(0===g.length)continue;let h=await d(g);for(let d=0;d<g.length;d+=1)!h[d]||e.has(g[d])||a>=12||(e.add(g[d]),a+=1,c.push({chapterId:b.id,chapterTitle:b.title,section:f.heading||b.title,sentence:g[d]}))}if(c.length>=60)break}return c.slice(0,60)}function dO(a){let b=[];for(let c of a)for(let a of dK(c.content)){if(!dI.some(b=>b.test(a.heading)||b.test(c.title)))continue;let d=new Set(a.body.match(bd.aX)||[]),e=new Set(a.body.match(dJ)||[]),f=new Set(a.body.match(bd.LT)||[]),g=a.body.length;if(g<400)continue;let h=d.size/(g/1e3),i=/拆除|清理|清底|清运|弃置|运输|搬运/u.test(a.heading);if(0===d.size){if(f.size>=6){b.push({level:"warning",severity:"warning",message:`${c.title} / ${a.heading} 以设备配置参数为主:设备型号/容量参数 ${f.size} 项,工艺参数待补充`,suggestion:"设备清单型小节保留型号规格参数即可;如补充安装工艺(试验压力、坡度、间距、偏差),应同步写入工艺参数与验收节点。"});continue}if(i){b.push({level:"warning",severity:"warning",message:`${c.title} / ${a.heading} 以工程量与保护措施为主,建议补充拆除深度偏差、保护挑网宽度、警戒距离等参数`,suggestion:"拆除类作业补充拆除厚度偏差(mm)、防护挑网/安全网宽度(m)、警戒区距离(m)等安全与技术参数即可,不强制 mm/MPa 级工艺参数。"});continue}b.push({level:"error",severity:"blocker",message:`${c.title} / ${a.heading} 无工艺参数:全文只有概况性数字,缺乏 mm/MPa/间距/偏差/试验压力等工艺级参数`,suggestion:"必须写入工艺参数(如桩位偏差≤50mm、搭接宽度≥100mm、闭水试验48h),参数来自绑定资料或行业规范值。"})}else h<(i?.3:1.5)&&b.push({level:"warning",severity:"warning",message:`${c.title} / ${a.heading} 工艺参数密度偏低:每千字 ${d.size} 个工艺参数(概况数字 ${e.size} 个)`,suggestion:"增加工艺级参数落位;概况数字(面积、工期、层数)不能替代工艺参数。"})}return b}function dP(a){let b=[];for(let c of a){let a=c.content.split("\n");for(let d=0;d<a.length;d+=1){let e=a[d].trim();if(!/^#{3}\s+[^\n]*(?:主要分部分项工程施工方案|主要施工方法)/u.test(e))continue;let f=a.length;for(let b=d+1;b<a.length;b+=1)if(/^#{2,3}\s+/u.test(a[b].trim())){f=b;break}let g=a.slice(d+1,f).join("\n").split(/^####\s+/gmu).slice(1).map(a=>a.trim()).filter(Boolean);if(0===g.length)continue;let h=g.filter(a=>!(0,u.Jb)(a));h.length>0&&b.push({level:"error",severity:"blocker",message:`${c.title} / ${e.replace(/^#{3}\s+(?:\d+(?:\.\d+)*\s+)?/u,"")} 有 ${h.length}/${g.length} 个分部分项内容要素不全(作业对象与工程量/工序顺序/施工方法至少缺一)`,suggestion:"每个分项方案需覆盖作业对象与工程量、工序安排、施工方法三方面要素,可分段用“施工概况/工艺流程/施工方法”标签组织,也可自然成文;工序顺序表达形式不限(顺序词叙述、编号步骤、列表或箭头链均可)。"})}}return b}async function dQ(a,b="",c){return[...dL(a),...await dM(a,c),...dO(a),...dP(a),...function(a,b=""){let c=[],d=(b||a.map(a=>a.content).join("\n\n")).split("\n"),e=0,f=0;for(;f<d.length;){let a=d[f].trim();if(!/^\|.+\|$/u.test(a)){f+=1;continue}let b=[];for(;f<d.length&&/^\|.+\|$/u.test(d[f].trim());)b.push(d[f].trim()),f+=1;if(b.length<3)continue;e+=1;let g=b[0].split("|").length-2,h=b.filter((a,b)=>0!==b&&a.replace(/\|/gu,"").replace(/[\s\-:]/gu,"").length>0),i=h.reduce((a,b)=>a+b.split("|").slice(1,-1).map(a=>a.trim()).filter(a=>""===a||"-"===a||"—"===a||"/"===a).length,0),j=h.length*Math.max(1,g);if(i>0&&i/Math.max(1,j)>=.4&&c.push({level:"warning",severity:"warning",message:`第 ${e} 个表格存在 ${i} 个空单元格(${h.length} 行),表格信息不完整`,suggestion:"表格每一列都必须填写,缺失字段应从资料补齐;无法确认的字段应删除该行而非留空。"}),c.length>=5)break}return c}(a,b)]}function dR(a){return Math.max(0,Math.min(100,Math.round(a)))}async function dS(a){let b=await dM(a),c=a.reduce((a,b)=>a+(b.content.match(/本小节围绕|交底覆盖率按100%|24小时内形成整改责任|按施工准备→过程实施→检查验收→问题整改→资料归档的闭环组织|按作业条件确认→技术交底→过程实施|依据本项目已确认资料中的项目边界/gu)||[]).length,0),d=await (0,ce.Bt)(a.map(a=>a.content).join("\n")),e=400*Math.max(0,d.ratio-.1);return{score:dR(100-15*c-25*b.filter(a=>"error"===a.level).length-e),detail:`模板化空话命中 ${c} 处,套话句占比 ${(100*d.ratio).toFixed(1)}%(docx 达标线 ≤10%),废话段问题 ${b.length} 项`}}async function dT(a,b="",c={}){let d=function(a){let b=a.map(a=>`${a.title} ${(a.sections||[]).join(" ")} ${a.content}`).join("\n"),c=[{label:"工程概况",pattern:/工程概况|项目概况|基本概况/u},{label:"主要施工内容",pattern:/主要施工内容/u},{label:"重难点分析",pattern:/重点.{0,4}难点/u},{label:"施工部署",pattern:/施工部署|总体部署|流水/u},{label:"进度计划",pattern:/进度计划|工期保障|工期计划/u},{label:"质量保证",pattern:/质量保证|质量管理|质量控制/u},{label:"安全文明",pattern:/安全.{0,8}(?:管理|措施|文明)|文明施工/u},{label:"资源配置",pattern:/劳动力|机械设备|材料.{0,4}计划|资源配置/u},{label:"绿色环保",pattern:/绿色施工|扬尘|噪声|环保/u},{label:"应急管理",pattern:/应急/u}],d=c.filter(a=>a.pattern.test(b)),e=dR(d.length/c.length*100),f=c.filter(a=>!a.pattern.test(b)).map(a=>a.label);return{score:e,detail:`覆盖 ${d.length}/${c.length} 个核心结构组${f.length?`;缺失:${f.join("、")}`:""}`}}(a),e=function(a){let b=a.map(a=>a.content).join("\n"),c=new Set(b.match(bd.s2)||[]),d=new Set(b.match(/工程量|材料|设备|范围|流程|验收|检测|复试|调试|隐蔽|检验批|资料|记录|系统|部位|接口|规格|标准/gu)||[]),e=Math.max(1,b.length),f=c.size/(e/1e3);return{score:dR(Math.min(100,22*f+d.size/18*15)),detail:`量化参数 ${c.size} 项(每千字 ${f.toFixed(1)}),专业事实词 ${d.size}/18 类`}}(a),f=function(a){let b=a.map(a=>a.content).join("\n"),c=new Set(b.match(bd.aX)||[]),d=Math.max(1,b.length),e=c.size/(d/1e3);return{score:dR(Math.min(100,20*e+40)),detail:`工艺参数 ${c.size} 项(每千字 ${e.toFixed(1)})`}}(a),g=function(a,b=""){let c=(b||a.map(a=>a.content).join("\n\n")).split("\n"),d=0,e=0,f=0;for(;f<c.length;){let a=c[f].trim();if(!/^\|.+\|$/u.test(a)){f+=1;continue}let b=[];for(;f<c.length&&/^\|.+\|$/u.test(c[f].trim());)b.push(c[f].trim()),f+=1;b.length<3||(d+=1,0===b.slice(1).filter(a=>a.replace(/\|/gu,"").replace(/[\s\-:]/gu,"").length>0).reduce((a,b)=>a+b.split("|").slice(1,-1).map(a=>a.trim()).filter(a=>""===a||"-"===a||"—"===a||"/"===a).length,0)&&(e+=1))}return{score:0===d?40:dR(e/d*100),detail:`表格 ${d} 个,其中字段完整 ${e} 个`}}(a,b),h=await dS(a),i=function(a){let b=dL(a);return{score:dR(100-20*b.length-20*b.filter(a=>"error"===a.level).length),detail:`重复段落问题 ${b.length} 项`}}(a),j=function(a,b=""){let c=b||a.map(a=>a.content).join("\n\n"),d=[{label:"质量标准",pattern:/质量标准|质量要求|合格率/u},{label:"计划工期",pattern:/计划工期|工期要求|日历天/u},{label:"保修",pattern:/缺陷责任期|保修|质保/u},{label:"安全目标",pattern:/安全.{0,8}目标|文明.{0,8}目标/u},{label:"项目经理",pattern:/项目经理|项目负责人/u}],e=d.filter(a=>a.pattern.test(c)),f=d.filter(a=>!a.pattern.test(c));return{score:dR(e.length/d.length*100),detail:`招标硬性要求响应 ${e.length}/${d.length} 项${f.length?`(未响应:${f.map(a=>a.label).join("、")})`:""}`}}(a,b),k=[{key:"structure",label:"结构完整度",score:d.score,detail:d.detail,weight:.18},{key:"factLanding",label:"事实落位率",score:e.score,detail:e.detail,weight:.18},{key:"processParameter",label:"工艺参数密度",score:f.score,detail:f.detail,weight:.16},{key:"table",label:"表格完整度",score:g.score,detail:g.detail,weight:.12},{key:"filler",label:"废话控制",score:h.score,detail:h.detail,weight:.14},{key:"duplication",label:"重复控制",score:i.score,detail:i.detail,weight:.12},{key:"reviewResponse",label:"评标响应度",score:j.score,detail:j.detail,weight:.1}],l=dR(k.reduce((a,b)=>a+b.score*b.weight,0)),m=c.templating?.level==="heavy"?Math.min(l,54):c.templating?.level==="medium"?Math.min(l,69):l,n=m>=85?"专业":m>=70?"良好":m>=55?"合格":"待提升",o=[...dL(a),...await dM(a),...dO(a),...dP(a)].slice(0,5).map(a=>a.message),p=k.filter(a=>a.score<70).map(a=>`${a.label}(${a.score}分)`);return{total:m,grade:n,dimensions:k,summary:`施工组织设计专业度评分 ${m} 分(${n})${c.templating&&"light"!==c.templating.level?`;模板化等级:${"heavy"===c.templating.level?"重度":"中度"}(降档已生效)`:""}${p.length?`;待提升:${p.join("、")}`:""}`,topIssues:o}}async function dU(a){var b;if(!("heavy"===(b=a.templating).level||b.vagueHitCount>0||b.difficultyHeavyTemplated))return{issues:[],reviewed:!1};let c=(0,ce.T4)(a.markdown),d=[`确定性检测信号:模板化等级=${a.templating.level},套话句占比=${(100*a.templating.fillerRatio).toFixed(1)}%,模糊应答词命中=${a.templating.vagueHitCount}(${a.templating.vaguePhrases.join("、")||"无"}),重难点归因+量化双达标占比=${(100*a.templating.difficultyCountermeasureRatio).toFixed(0)}%,跨项目残留=${a.templating.crossProjectResidue.join("、")||"无"}${c.found.length?`,四新技术命中=${c.found.join("、")}`:""}`,`待复核正文(节选):
|
|
67
|
-
${function(a,b=6e3){return[a.match(/#{2,3}\s*[^\n]*(?:重难点|重点难点|工程难点|难点分析)[^\n]*\n[\s\S]{0,3500}/u)?.[0]||"",a.replace(/#{1,6}\s+[^\n]*\n/gu,"").replace(/\s+/gu," ").slice(0,b)].filter(Boolean).join("\n\n").slice(0,b+4e3)}(a.markdown)}`,'返回 JSON:{"issues":["问题1","问题2"]}'];try{let b=await (0,P.bb)((0,q.y4)('你是招标技术标评审专家。对施工组织设计做语义级复核,只报告确定性规则覆盖不到的语义问题。\n复核维度(按《施工组织设计全维度校验提示词》判定标尺):\n1. 重难点三级判定:识别精准性(是否点明本项目真实难点而非泛泛而谈)→ 归因合理性(是否说明难点成因/风险来源)→ 对策匹配度(对策是否针对该难点的成因,而非通用措施堆砌);\n2. 术语等效性:同一对象是否前后术语一致(如"砼"与"混凝土"混用需统一),是否出现词面不同但概念等效的双重标准表述;\n3. 四新技术升级价值:若正文声称采用四新技术,其价值表述是否停留在"提升效率"式套话,缺少可对标官方推广目录或替代落后工艺的实质说明。\n每条问题必须包含:问题所在内容简述+判定依据(对应上面哪条维度)+一句话改进建议。\n只报告真实存在的问题,正文无问题时返回空数组;不得编造问题。只返回 JSON。'),d.join("\n\n"),{maxTokens:1200,temperature:.1,signal:a.signal,diagnostics:a.diagnostics,taskKind:"structuredGeneration"});return{issues:Array.isArray(b?.issues)?b.issues.filter(a=>"string"==typeof a&&a.length>0).slice(0,6):[],reviewed:!0}}catch{return{issues:[],reviewed:!1}}}let dV={合规红线:"【合规红线定向修复】",内容质量:"【内容质量定向修复】",数据逻辑:"【数据逻辑一致性定向修复】",内容完整:"【内容完整性定向补写】",本地适配:"【属地适配定向修复】",模板化:"【模板化定向改写】",围串标残留:"【跨项目残留定向清理】"},dW={合规红线:"该章节正文存在触发废标或硬扣分的合规红线问题。请以局部 patch 方式修复:对照住建部37号令与招标文件实质性条款,将违规/缺失表述改为合规表述(如补写危大分级与审批流程、专家论证安排、实质响应内容),引用现行有效规范编号;不得删除其他合规内容。",内容质量:"该章节正文存在影响得分档位的内容质量问题。请以局部 patch 方式修复:将套话句改写为绑定本项目对象、动作、量化指标与验收闭环的具体表述(每句至少含一个本项目事实或工程对象);术语与清单特征对齐;措施按「具体动作+量化指标+验收标准」格式落地;评分项核心内容前移至小节开头。不得改动事实数据。",数据逻辑:"该章节正文存在前后矛盾或不可量化的数据逻辑问题。请以局部 patch 方式修复:以绑定资料(图纸/工程量清单/规范)为准统一唯一口径,删除矛盾数值;无法反查的数字改为定性表述,禁止编造;控制指标全部改写为可量化、可核查的表述。",内容完整:"该章节正文缺少评分点对应内容或关键要素不完整。请以局部 patch 方式补写缺失内容:内容必须绑定本项目事实与清单特征,按「具体动作+量化指标+验收标准」格式撰写,符合正文已有风格;不新增小节标题、不改动其他内容。",本地适配:"该章节正文缺少属地适配项。请以局部 patch 方式补写:属地创优目标(奖项名称以招标文件要求原文为准)、项目所在地气候专项措施、智慧工地对接项目所在地监管平台、危大属地管控要求等按缺陷描述逐项补齐,与项目实际规模相符,不得编造已获奖项或虚构平台名称。",模板化:"该章节正文被判定为模板化内容(通用表述占比超标/工艺与清单不匹配/通用句式残留)。请以局部 patch 方式改写:将通用表述替换为绑定本项目专属参数(部位、深度、高度、工程量、清单分项)的具体表述;删除“一般来说、通常情况下、按照规范施工”类通用句式;工艺名称逐字对齐清单项目特征。保持段落结构不变。",围串标残留:"该章节正文存在跨项目内容残留(其他项目名称/其他标段参数/其他城市地名/旧模板遗留)。请以局部 patch 方式清理:删除残留内容并改写为绑定本项目的对应表述;如残留内容无本项目对应物,直接删除相关句子。"},dX=[{field:"劳动力高峰人数",pattern:/(?:劳动力|用工)(?:高峰期|高峰|峰值)?[^。;\n\d]{0,18}(\d+(?:\.\d+)?)\s*人/gu},{field:"劳动力高峰人数",pattern:/(?:高峰期|高峰|峰值)[^。;\n\d]{0,14}(\d+(?:\.\d+)?)\s*人/gu},{field:"装配率",pattern:/(?:装配率|预制率)[^。;\n\d%]{0,12}(\d+(?:\.\d+)?)\s*%/gu},{field:"装配率",pattern:/(\d+(?:\.\d+)?)\s*%[^。;\n]{0,6}(?:装配率|预制率)/gu},{field:"支护形式",pattern:/(放坡|喷锚|土钉墙|灌注桩|排桩|地下连续墙|SMW工法桩|钢板桩|复合土钉墙)/gu,contextRequired:/支护|围护|基坑/u},{field:"总工期",pattern:/(?:总工期|计划工期|工期)[^。;\n\d]{0,10}(\d+)\s*(?:个)?(?:日历天|天)/gu},{field:"总建筑面积",pattern:/(?:总建筑面积|单体建筑面积|建筑面积)[^。;\n\d]{0,10}(\d+(?:\.\d+)?)\s*(?:㎡|平方米|m2|m²)/gu},{field:"质量标准",pattern:/质量(?:目标|标准)[^。;\n]{0,14}(合格|优良|省优|国优|市优|[\u4e00-\u9fa5]{2,6}(?:杯|奖))/gu,normalize:a=>a.replace(/^(?:确保|争创|争取|力争|获得|达到|争获|创建|力创|评为|荣获)/u,"")}],dY={否决级:0,高风险:1,中风险:2,低风险:3},
|
|
67
|
+
${function(a,b=6e3){return[a.match(/#{2,3}\s*[^\n]*(?:重难点|重点难点|工程难点|难点分析)[^\n]*\n[\s\S]{0,3500}/u)?.[0]||"",a.replace(/#{1,6}\s+[^\n]*\n/gu,"").replace(/\s+/gu," ").slice(0,b)].filter(Boolean).join("\n\n").slice(0,b+4e3)}(a.markdown)}`,'返回 JSON:{"issues":["问题1","问题2"]}'];try{let b=await (0,P.bb)((0,q.y4)('你是招标技术标评审专家。对施工组织设计做语义级复核,只报告确定性规则覆盖不到的语义问题。\n复核维度(按《施工组织设计全维度校验提示词》判定标尺):\n1. 重难点三级判定:识别精准性(是否点明本项目真实难点而非泛泛而谈)→ 归因合理性(是否说明难点成因/风险来源)→ 对策匹配度(对策是否针对该难点的成因,而非通用措施堆砌);\n2. 术语等效性:同一对象是否前后术语一致(如"砼"与"混凝土"混用需统一),是否出现词面不同但概念等效的双重标准表述;\n3. 四新技术升级价值:若正文声称采用四新技术,其价值表述是否停留在"提升效率"式套话,缺少可对标官方推广目录或替代落后工艺的实质说明。\n每条问题必须包含:问题所在内容简述+判定依据(对应上面哪条维度)+一句话改进建议。\n只报告真实存在的问题,正文无问题时返回空数组;不得编造问题。只返回 JSON。'),d.join("\n\n"),{maxTokens:1200,temperature:.1,signal:a.signal,diagnostics:a.diagnostics,taskKind:"structuredGeneration"});return{issues:Array.isArray(b?.issues)?b.issues.filter(a=>"string"==typeof a&&a.length>0).slice(0,6):[],reviewed:!0}}catch{return{issues:[],reviewed:!1}}}let dV={合规红线:"【合规红线定向修复】",内容质量:"【内容质量定向修复】",数据逻辑:"【数据逻辑一致性定向修复】",内容完整:"【内容完整性定向补写】",本地适配:"【属地适配定向修复】",模板化:"【模板化定向改写】",围串标残留:"【跨项目残留定向清理】"},dW={合规红线:"该章节正文存在触发废标或硬扣分的合规红线问题。请以局部 patch 方式修复:对照住建部37号令与招标文件实质性条款,将违规/缺失表述改为合规表述(如补写危大分级与审批流程、专家论证安排、实质响应内容),引用现行有效规范编号;不得删除其他合规内容。",内容质量:"该章节正文存在影响得分档位的内容质量问题。请以局部 patch 方式修复:将套话句改写为绑定本项目对象、动作、量化指标与验收闭环的具体表述(每句至少含一个本项目事实或工程对象);术语与清单特征对齐;措施按「具体动作+量化指标+验收标准」格式落地;评分项核心内容前移至小节开头。不得改动事实数据。",数据逻辑:"该章节正文存在前后矛盾或不可量化的数据逻辑问题。请以局部 patch 方式修复:以绑定资料(图纸/工程量清单/规范)为准统一唯一口径,删除矛盾数值;无法反查的数字改为定性表述,禁止编造;控制指标全部改写为可量化、可核查的表述。",内容完整:"该章节正文缺少评分点对应内容或关键要素不完整。请以局部 patch 方式补写缺失内容:内容必须绑定本项目事实与清单特征,按「具体动作+量化指标+验收标准」格式撰写,符合正文已有风格;不新增小节标题、不改动其他内容。",本地适配:"该章节正文缺少属地适配项。请以局部 patch 方式补写:属地创优目标(奖项名称以招标文件要求原文为准)、项目所在地气候专项措施、智慧工地对接项目所在地监管平台、危大属地管控要求等按缺陷描述逐项补齐,与项目实际规模相符,不得编造已获奖项或虚构平台名称。",模板化:"该章节正文被判定为模板化内容(通用表述占比超标/工艺与清单不匹配/通用句式残留)。请以局部 patch 方式改写:将通用表述替换为绑定本项目专属参数(部位、深度、高度、工程量、清单分项)的具体表述;删除“一般来说、通常情况下、按照规范施工”类通用句式;工艺名称逐字对齐清单项目特征。保持段落结构不变。",围串标残留:"该章节正文存在跨项目内容残留(其他项目名称/其他标段参数/其他城市地名/旧模板遗留)。请以局部 patch 方式清理:删除残留内容并改写为绑定本项目的对应表述;如残留内容无本项目对应物,直接删除相关句子。"},dX=[{field:"劳动力高峰人数",pattern:/(?:劳动力|用工)(?:高峰期|高峰|峰值)?[^。;\n\d]{0,18}(\d+(?:\.\d+)?)\s*人/gu},{field:"劳动力高峰人数",pattern:/(?:高峰期|高峰|峰值)[^。;\n\d]{0,14}(\d+(?:\.\d+)?)\s*人/gu},{field:"装配率",pattern:/(?:装配率|预制率)[^。;\n\d%]{0,12}(\d+(?:\.\d+)?)\s*%/gu},{field:"装配率",pattern:/(\d+(?:\.\d+)?)\s*%[^。;\n]{0,6}(?:装配率|预制率)/gu},{field:"支护形式",pattern:/(放坡|喷锚|土钉墙|灌注桩|排桩|地下连续墙|SMW工法桩|钢板桩|复合土钉墙)/gu,contextRequired:/支护|围护|基坑/u},{field:"总工期",pattern:/(?:总工期|计划工期|工期)[^。;\n\d]{0,10}(\d+)\s*(?:个)?(?:日历天|天)/gu},{field:"总建筑面积",pattern:/(?:总建筑面积|单体建筑面积|建筑面积)[^。;\n\d]{0,10}(\d+(?:\.\d+)?)\s*(?:㎡|平方米|m2|m²)/gu},{field:"质量标准",pattern:/质量(?:目标|标准)[^。;\n]{0,14}(合格|优良|省优|国优|市优|[\u4e00-\u9fa5]{2,6}(?:杯|奖))/gu,normalize:a=>a.replace(/^(?:确保|争创|争取|力争|获得|达到|争获|创建|力创|评为|荣获)/u,"")}],dY=(()=>{let a=Number(process.env.DOCUMENT_QINGTIAN_REVIEW_ROUNDS??3);return 0===a?3:Number.isFinite(a)&&a>0?Math.floor(a):3})(),dZ={否决级:0,高风险:1,中风险:2,低风险:3},d$={type:"object",required:["issues"],properties:{issues:{type:"array",required:!0,maxItems:12,items:{type:"object",required:!0,properties:{dimension:{type:"string",required:!0},location:{type:"string",required:!0},quote:{type:"string",required:!0,minLength:4},riskLevel:{type:"string",required:!0},basis:{type:"string",required:!0},description:{type:"string",required:!0}}}},templatingLevel:{type:"string"}}};function d_(a,b){let c=[],d=[],e=0;for(let f of a){let a=(0,r.V7)(f.content);d.length>0&&e+a>b&&(c.push(d),d=[],e=0),d.push(f),e+=a}return d.length>0&&c.push(d),c}function d0(a,b=9e3,c=7){let d=[];for(let c of a)d.push(...function(a,b){let c=a.content||"";if((0,r.V7)(c)<=b)return[a];let d=c.split(/\n(?=#{2,4}\s+\S)/u).filter(a=>a.trim().length>0),e=[];for(let a of d){if((0,r.V7)(a)<=b){e.push(a);continue}let c=a.split(/\n\n+/u).filter(a=>a.trim().length>0),d="";for(let a of c)d&&(0,r.V7)(d)+(0,r.V7)(a)>b?(e.push(d),d=a):d=d?`${d}
|
|
68
68
|
|
|
69
69
|
${a}`:a;d&&e.push(d)}let f=[],g="";for(let a of e)g&&(0,r.V7)(g)+(0,r.V7)(a)>b?(f.push(g),g=a):g=g?`${g}
|
|
70
70
|
|
|
71
|
-
${a}`:a;return(g&&f.push(g),f.length<=1)?[a]:f.map((b,c)=>({...a,title:`${a.title}(分段 ${c+1}/${f.length})`,content:b}))}(c,b));let e=
|
|
71
|
+
${a}`:a;return(g&&f.push(g),f.length<=1)?[a]:f.map((b,c)=>({...a,title:`${a.title}(分段 ${c+1}/${f.length})`,content:b}))}(c,b));let e=d_(d,b);if(e.length>c){let a=d.reduce((a,b)=>a+(0,r.V7)(b.content),0),f=Math.max(b,Math.ceil(a/Math.max(1,c)));for(;e.length>c&&f<a;)e=d_(d,f=Math.min(a,Math.ceil(1.3*f)+1))}return e}function d1(a){return"否决级"===a||"高风险"===a||"低风险"===a?a:"中风险"}function d2(a){let b=new Set;return a.filter(a=>{let c=`${a.dimension}|${(a.quote||"").replace(/\s+/gu,"").slice(0,24)}`;return!b.has(c)&&(b.add(c),!0)})}async function d3(a,b,c,d){let e=a.map(a=>`### ${a.title}
|
|
72
72
|
${a.content}`).join("\n\n"),f=await (0,P.bb)((0,q.y4)("你是对标合肥青天大模型的施工组织设计全维度专职校验专员,精通青天大模型全维度评审逻辑、扣分规则与模板化降档机制。\n仅对标书做客观合规校验与问题定位,不润色、不创作、不补充方案内容;所有判定均要有明确依据与原文佐证,不得主观臆断;只输出结构化问题清单 JSON。\n\n【对标依据(唯一校验标准,不得自行增减规则)】\n1. 国家规范:《危险性较大的分部分项工程安全管理规定》(住建部令第37号)及安徽省实施细则\n2. 本地规则:安徽省建筑施工扬尘治理六个百分百标准、安徽省危大工程管控细则、智慧工地监管要求\n3. 评审逻辑:青天大模型九大评审维度(形式格式、内容完整、合规红线、内容质量、数据逻辑、原创围串标、本地适配、语义匹配、模板化判定)\n4. 模板化判定规则:空话套话密集、无项目专属参数、工艺不匹配清单、跨项目内容残留、多模板拼接断裂,均判定为模板化内容,按严重程度触发扣分、整体降档;判定阈值:重度(通用表述占比≥40%)、中度(20%-40%)、轻度(<20%)\n5. 项目专属:招标文件实质性要求、评标办法评分细则、工程量清单项目特征、施工图纸核心参数\n\n【本评审轮维度范围(Markdown 正文层可判定维度)】\n一、内容完整性:评分点全覆盖——招标评分办法列出的打分点(如工期保证措施、质量通病防治)必须在正文找到对应章节或段落,不得遗漏;工程概况、施工部署、总平面布置、进度计划、主要施工方法、资源配置、质量保证、安全生产、文明环保、危大专项、应急预案、重难点、季节性施工等要素完整。\n二、合规红线(硬红线,可触发否决):\n 1. 实质性条款全响应:★号废标条款、实质性要求均有具体响应内容,不只用“满足、符合”\n 2. 危大工程识别准确:对照住建部37号令目录,无漏判、错判;超危大工程明确标注等级\n 3. 危大管理流程合规:一般危大明确“施工单位技术负责人+总监理工程师”审批;超危大明确专家论证安排\n 4. 强制性条文合规:所有施工工艺、安全措施符合国家规范强条,无违规表述\n 5. 规范依据有效:引用的规范、图集、标准均为现行有效版本,编号与名称准确\n 6. 工期质量目标合规:工期、质量、安全目标完全响应招标文件,无偏离\n三、内容质量(语义匹配,决定得分档位):\n 1. 核心章节无空话套话:施工方法、危大工程、质量安全等核心章节无无实质动作的套话表述\n 2. 专业术语全程统一:全文术语与招标文件、工程量清单原文一致,无近义词替换、自行简化\n 3. 工艺匹配项目实际:施工工艺对应清单项目特征,贴合本项目场景,非通用模板堆砌\n 4. 措施具象可落地:所有管理措施均为「具体动作+量化指标+验收标准」格式,可执行可核查\n 5. 重难点针对性强(三级判定):识别精准性(是否命中本项目专属重难点,有无遗漏或误判);归因合理性(对成因、风险来源做具体归因,非仅复述现象);对策匹配度(针对[具体原因]→采取[具体工艺/技术手段]→达到[量化控制目标]的闭环,模板化对策如“加强监测、严格按规范施工”判定为无效对策)\n 6. 得分点前置:每个评分项核心内容放在章节开头显眼位置,不藏于段落深处\n四、数据与逻辑(交叉校验,隐形扣分):\n 1. 核心数据全文一致:工期、工程量、人员数量、设备型号、质量目标等核心数据前后统一,无矛盾\n 2. 工艺参数合规:施工工艺参数、安全质量指标符合国家规范与地方标准,与清单项目特征完全匹配\n 3. 资源配置合理:人员、设备数量匹配项目规模与工期,无明显夸大或不足\n 4. 进度逻辑自洽:工序先后顺序符合施工常理,关键线路清晰,节点工期匹配总工期\n 5. 指标全部可量化:质量、安全、进度控制指标可量化、可核查,主要分项工程有对应量化工艺指标\n五、原创与围串标(雷达检测,一票否决):无同错同漏(无模板化错别字、错误数据);跨项目内容零残留(无其他项目名称、其他标段参数、其他城市地名、旧模板遗留内容);内容拼接逻辑一致(无语义跳跃、多模板碎片拼接痕迹)。\n六、属地适配(安徽省专属加分项):\n 1. 扬尘治理六个百分百:完整覆盖六项要求(工地周边100%围挡、物料堆放100%覆盖、出入车辆100%冲洗、施工现场地面100%硬化、拆迁工地100%湿法作业、渣土车辆100%密闭运输)\n 2. 属地创优目标:明确招标文件要求的省市级奖项(奖项名称以招标文件原文为准)及配套管控措施\n 3. 季节性施工适配:结合项目所在地(安徽省)梅雨、高温、冬季气候特点制定专项措施,非通用模板\n 4. 智慧工地属地对接:人员实名制、塔机监控、扬尘监测等系统对接项目所在地监管平台\n 5. 危大属地管控要求:深基坑第三方监测、沟槽验收挂牌、起重机械平台联网等要求落地\n七、模板化套用专项(核心降档判定):\n 1. 项目专属信息绑定率:核心得分章节中绑定本项目专属参数(部位、深度、高度、工程量、清单分项)的句子占比≥80%\n 2. 通用模板句式零残留:无“一般来说、通常情况下、常规施工、按照规范施工”等通用模板固定句式\n 3. 工艺清单匹配度:核心施工工艺对应本项目清单分项,无大量清单外的通用工艺堆砌\n 4. 套话密度达标:核心章节空话套话占比≤10%,无大面积集中套话(量化判定)\n\n【风险等级判定标准】\n- 否决级:直接触发废标、投标无效的问题\n- 高风险:单一项扣分≥3分,或触发整体降档、重度模板化\n- 中风险:单一项扣分1-2分,中度模板化\n- 低风险:不直接扣分,影响整体观感的优化项\n\n【输出铁律】\n1. 每条问题必须附带章节位置与原文片段(直接引用正文原句),不得只给结论不给依据\n2. 每条问题必须标注所属维度、风险等级、对标依据\n3. 模板化判定必须有量化数据支撑,不得主观定性\n4. 只输出问题清单 JSON,不输出修改建议、不补充方案内容\n5. 本块内未发现问题的维度不得强行编造问题;不确定的不报\n6. 招标对标材料中已明确的数字事实与硬性要求(工程规模、工期、质量目标、创优要求、绿色等级、智慧工地等级、装配率、危大工程参数等),必须逐项核对正文表述是否一致:不一致、矛盾、缺失响应的必须报出;正文出现的合规数值(高温停工阈值、危大判定线、专家论证程序等)必须与国家规范与对标材料核对,错误必报"),function(a){let b=a.tenderContext?`【招标对标材料(核对基准,不得偏离)】
|
|
73
73
|
${a.tenderContext}`:a.requirement?`招标文件要求摘要:${a.requirement}`:"",c=a.knownConflictLines?`【确定性跨章数据一致性预扫描(系统预检出的全文疑似矛盾清单,补足分块评审盲区)】
|
|
74
74
|
${a.knownConflictLines}
|
|
75
|
-
以上为确定性扫描的疑似矛盾:逐项核对正文,确认为真实矛盾(同一口径多值/体系并存)必须按数据逻辑维度报出并给出正确定位;确认口径合法(不同对象/组合表述/非关键字段)的不报。`:"";return[`评审对象:${a.projectName} 施工组织设计正文(全文分块评审)`,b,c,"","请按系统提示词中的校验标准逐维度评审以下正文块,输出本块全部检出问题:",'JSON 结构:{"issues":[{"dimension":"维度名(合规红线/内容质量/数据逻辑/内容完整/本地适配/模板化/围串标残留)","location":"问题所在章节标题","quote":"问题原文片段(正文原句,20-80字)","riskLevel":"否决级/高风险/中风险/低风险","basis":"对标依据(规范或维度条款)","description":"问题描述(含量化依据)"}],"templatingLevel":"重度/中度/轻度/无"}',"",`本块为第 ${a.blockIndex}/${a.blockTotal} 块,包含章节:${a.chapterTitles.join("、")}`,"<正文块>",a.blockContent,"</正文块>"].filter(Boolean).join("\n")}({...b,chapterTitles:a.map(a=>a.title),blockContent:e}),{maxTokens:1800,temperature:.1,signal:d,diagnostics:c,schema:
|
|
75
|
+
以上为确定性扫描的疑似矛盾:逐项核对正文,确认为真实矛盾(同一口径多值/体系并存)必须按数据逻辑维度报出并给出正确定位;确认口径合法(不同对象/组合表述/非关键字段)的不报。`:"";return[`评审对象:${a.projectName} 施工组织设计正文(全文分块评审)`,b,c,"","请按系统提示词中的校验标准逐维度评审以下正文块,输出本块全部检出问题:",'JSON 结构:{"issues":[{"dimension":"维度名(合规红线/内容质量/数据逻辑/内容完整/本地适配/模板化/围串标残留)","location":"问题所在章节标题","quote":"问题原文片段(正文原句,20-80字)","riskLevel":"否决级/高风险/中风险/低风险","basis":"对标依据(规范或维度条款)","description":"问题描述(含量化依据)"}],"templatingLevel":"重度/中度/轻度/无"}',"",`本块为第 ${a.blockIndex}/${a.blockTotal} 块,包含章节:${a.chapterTitles.join("、")}`,"<正文块>",a.blockContent,"</正文块>"].filter(Boolean).join("\n")}({...b,chapterTitles:a.map(a=>a.title),blockContent:e}),{maxTokens:1800,temperature:.1,signal:d,diagnostics:c,schema:d$,taskKind:"structuredGeneration",disableThinkingBoost:!0,prefixKey:"full-dimension-review"});if(f)return{issues:(f.issues||[]).map(a=>({...a,location:function(a,b){let c=(a||"").trim();return c?b.some(a=>a===c||a.includes(c)||c.includes(a))?c:`待核(原定位:${c.slice(0,40)})`:c}(a.location,b.headings),riskLevel:d1(a.riskLevel)})),templatingLevel:f.templatingLevel}}async function d4(a){var b;let{template:c,chapters:d,effectiveChapters:e,requirement:f,projectName:g,tenderContext:h,diagnostics:i,signal:j,heartbeat:k,onStage:l}=a,m=a=>k?k(a):a(),n={reviewed:!1,reviewCalls:0,repairCalls:0,reReviewCalls:0,issuesFound:0,fixedCount:0,remainingIssues:[],templatingLevels:[],repairedChapters:[]},o=d0(d);if(0===o.length)return n;let p=0===(b=function(a){let b=new Map;for(let c of a){let a=c.content||"";if(a)for(let d of dX)for(let e of a.matchAll(d.pattern)){let f=(e[1]||"").replace(/\s+/gu,"");if(!f)continue;let g=a.slice(Math.max(0,(e.index||0)-12),(e.index||0)+26).replace(/\s+/gu," ").trim();if(d.contextRequired&&!d.contextRequired.test(g))continue;let h=d.normalize?d.normalize(f):f;if(!h)continue;let i=b.get(d.field)||[];i.push({value:h,chapter:c.title,snippet:g}),b.set(d.field,i)}}let c=[];for(let[a,d]of b){let b=new Set(d.map(a=>a.value)),e=new Set(d.map(a=>a.chapter));b.size>=2&&e.size>=2&&c.push({field:a,occurrences:d})}return c}(d)).length?"":b.map(a=>{let b=[...new Set(a.occurrences.map(a=>a.value))].join(" ↔ "),c=a.occurrences.slice(0,4).map(a=>`${a.chapter}:“${a.snippet}”`).join(";");return`- ${a.field}:${b}(${c})`}).join("\n"),q=function(a){let b=[];for(let c of a)for(let a of(b.push(c.title),(c.content||"").split("\n"))){let c=/^#{2,4}\s+(.+)$/u.exec(a.trim());c&&b.push(c[1].trim())}return b}(d),r=process.env.DOCUMENT_QINGTIAN_PATCH_GUARD||"observe",s="0"===r?void 0:{observeOnly:"enforce"!==r,diagnostics:i},t=[];for(let a=0;a<o.length;a+=1){let b=o[a];l?.({status:"running",message:`全维度评审:第 ${a+1}/${o.length} 块(${b.map(a=>a.title).join("、")})`,details:[]});let c=await m(()=>d3(b,{projectName:g||"本项目",requirement:f,tenderContext:h,knownConflictLines:p,headings:q,blockIndex:a+1,blockTotal:o.length},i,j));if(n.reviewCalls+=1,!c){i&&!/qingtian-review/u.test(i.llm.lastError||"")&&(i.llm.lastError=`qingtian-review: 第 ${a+1}/${o.length} 块评审无响应,跳过(${i.llm.lastError||"无响应"})`),l?.({status:"failed",message:`全维度评审:第 ${a+1}/${o.length} 块无响应,跳过`,details:[]});continue}c.templatingLevel&&"无"!==c.templatingLevel&&n.templatingLevels.push(c.templatingLevel),t.push(...c.issues||[])}let u=d2(t).sort((a,b)=>dZ[a.riskLevel]-dZ[b.riskLevel]);if(n.issuesFound=u.length,0===u.length)return l?.({status:"success",message:`全维度评审完成:${o.length} 块评审未检出问题`,details:[]}),n.reviewed=!0,n;let v=u.filter(a=>"否决级"!==a.riskLevel&&"高风险"!==a.riskLevel),w=u.filter(a=>"否决级"===a.riskLevel||"高风险"===a.riskLevel),x=Number.MAX_SAFE_INTEGER;for(let a=0;a<dY&&w.length>0;a+=1){let b=[];for(let a of w){let c=function(a,b){if(a.location){let c=b.findIndex(b=>b.title===a.location||b.title.includes(a.location)||a.location.includes(b.title));if(c>=0)return c}let c=(a.quote||"").replace(/\s+/gu,"").slice(0,20);return c.length>=8?b.findIndex(a=>(a.content||"").replace(/[\s,,]/gu,"").includes(c)):-1}(a,d);if(c<0)continue;let e=b.find(a=>a.chapterIndex===c);e?e.issues.length<12&&e.issues.push(a):b.push({chapterIndex:c,issues:[a]})}if(0===b.length)break;let h=0;for(let g of b){let b=d[g.chapterIndex],k=e.find(a=>a.id===b.id||a.title===b.title);l?.({status:"running",message:`全维度评审修复(第 ${a+1} 轮):${b.title}(${g.issues.length} 处)`,details:g.issues.map(a=>`[${a.riskLevel}]${a.description.slice(0,48)}`)});let o=await m(()=>(0,aY.l8)({template:c,chapter:{id:b.id,title:b.title,content:b.content,evidence:b.evidence,missingFacts:b.missingFacts,sections:b.sections},issues:g.issues.map(a=>`[${a.riskLevel}][${a.dimension}] ${a.description}(原文:${a.quote})`),promptTexts:function(a){let b=a[0],c=dV[b?.dimension||""]||"【全维度评审定向修复】";return[c,dW[b?.dimension||""]||"该章节正文存在全维度评审检出的质量问题。请以局部 patch 方式结合缺陷描述逐项修复:精确定位问题句,删除错误内容或按专业规范改写,保持其余内容与事实数据不变。","只修复下列问题,其余内容保持原样:",a.map((a,b)=>`问题 ${b+1}:
|
|
76
76
|
- 位置:${a.location}
|
|
77
77
|
- 原文片段:${a.quote}
|
|
78
78
|
- 风险等级:${a.riskLevel}
|
|
79
79
|
- 对标依据:${a.basis}
|
|
80
|
-
- 问题描述:${a.description}`).join("\n\n")].join("\n")}(
|
|
80
|
+
- 问题描述:${a.description}`).join("\n\n")].join("\n")}(g.issues),requirement:f,forbidDrawingImages:!1,diagnostics:i,signal:j,patchGuard:s}));n.repairCalls+=1;let p=!!(o.content&&o.content!==b.content);p&&(d[g.chapterIndex]={...b,content:k?dk(o.content,k):o.content},n.fixedCount+=o.appliedCount,n.repairedChapters.push(b.title),h+=1),l?.({status:p?"success":"failed",message:p?`全维度评审修复完成:${b.title}(${o.appliedCount} 处 patch)`:`全维度评审修复未生效:${b.title}`,details:g.issues.map(a=>`[${a.riskLevel}]${a.description.slice(0,48)}`)})}if(0===h)break;let k=new Set(b.map(a=>d[a.chapterIndex].id)),o=d0(d.filter(a=>k.has(a.id)),9e3,2),r=[];for(let b=0;b<o.length;b+=1){let c=o[b];l?.({status:"running",message:`全维度评审复评(第 ${a+1} 轮):第 ${b+1}/${o.length} 块(${c.map(a=>a.title).join("、")})`,details:[]});let d=await m(()=>d3(c,{projectName:g||"本项目",requirement:f,knownConflictLines:p,headings:q,blockIndex:b+1,blockTotal:o.length},i,j));if(n.reReviewCalls+=1,!d){l?.({status:"failed",message:`全维度评审复评:第 ${b+1}/${o.length} 块无响应,跳过`,details:[]});continue}r.push(...(d.issues||[]).filter(a=>"否决级"===d1(a.riskLevel)||"高风险"===d1(a.riskLevel)))}if(w=d2(r),a>=1&&w.length>=x)break;x=w.length}let y=[];return y.push(...w),y.push(...v),n.remainingIssues=d2(y),n.reviewed=!0,l?.({status:"success",message:`全维度评审完成:${o.length} 块评审检出 ${n.issuesFound} 处问题,修复 ${n.fixedCount} 处 patch,剩余 ${n.remainingIssues.length} 处`,details:n.remainingIssues.slice(0,6).map(a=>`[${a.riskLevel}][${a.dimension}]${a.description.slice(0,40)}`)}),n}function d5(a,b){let c=new Set([b?.projectName,...b?.fingerprint?.projectNames||[]].filter(Boolean));return(b?.contaminationCandidates||[]).reduce((a,b)=>!b||b.length<6||c.has(b)?a:a.replace(RegExp(b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"gu"),"本项目工程"),a)}let d6=[{words:["编制依据","国家法律法规","地方法规"],sentence:"本施工组织设计的编制依据包括国家法律法规、地方法规及现行工程建设标准、规范"},{words:["工程量清单","项目特征","工程量","图纸设计说明"],sentence:"项目特征与工程量以招标工程量清单及图纸设计说明为准"},{words:["劳动力计划","主要施工材料","主要施工机械"],sentence:"劳动力计划、主要施工材料、主要施工机械按施工进度动态配置,详见本方案各保障章节"}];function d7(a,b){let c=(0,s.t4)(b).filter(b=>!a.includes(b));if(0===c.length)return a;let d=d6.filter(a=>a.words.some(a=>c.includes(a))).map(a=>a.sentence);if(0===d.length)return a;let e=`
|
|
81
81
|
|
|
82
82
|
**编制依据补充说明**:${d.join(";")}。
|
|
83
83
|
`,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,"")}
|
|
84
|
-
${e}`}function
|
|
85
|
-
|。;;]{0,40}(?:资料未明确|系统暂未从知识库确认|项目资料暂未明确)`,"u").test(f)).map(a=>({level:"error",message:`${a} 已抽取到项目资料事实但正文仍显示暂未明确`,suggestion:"请优先使用项目基础事实卡片中的资料原值,不得用占位表达覆盖已确认事实。"})),await cc({markdown:f,chapters:e,factsModel:d,template:g,promptBindings:h,promptDocumentRules:i,scopeConflicts:o,evaluationCriteriaItems:p,effectiveChapters:t,tenderRequirements:v,requirementsSimilarity:w,factTokenScopeClassifier:x,professionalDepthClassifier:y}),ds(f,[...m,...d.preciseFacts],{maxIssues:30}).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议后续优化事实自然落位;导出阶段不因未落位的引用型或可优化事实阻断。"})),(0,r.PE)(g.generationSettings||g.exportSettings,f).filter(a=>!(n.minPages&&/低于目标页数/u.test(a.message))),(0,r.ty)(n,f),(0,q.UG)(f,g),(0,cQ.IA)(f),await (0,by.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,u.Xl)(d.content,a.title)||(0,u.Xl)(d.content,a.title,{fuzzy:!0}),e=(0,r.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,cR.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,u.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 dQ(e,f)).map(a=>"error"===a.level?{...a,severity:"blocker"}:a)).map(a=>"error"===a.level?{...a,severity:a.severity||"blocker"}:a)}let ea=/章节级证据覆盖较弱|章节事实覆盖不足|小节事实或量化参数落位可继续优化/u;async function eb(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(cd[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,bF.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,r.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=ct(h,l.score>=85?[]:[{level:"warning",message:`系统知识库覆盖确认率偏低:${l.score}%`,suggestion:`${l.remediation} 未确认事实域:${l.unconfirmedDomains.map(a=>cd[a]||a).join("、")||"无"}`}],(0,bF.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=>ea.test(a.message)&&"warning"===a.level?{...a,level:"info"}:a);let p=(0,cq.Ah)((0,cp.aF)(g))?.profile.fiveElementCompleteBlocks,q=await co({markdown:g,chapters:c,issues:o,knowledgeCoverage:l,factTraces:m,template:k,referenceCompleteBlocks:p}),t=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,bF.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=ct(o,q.passed?[]:[{level:"info",message:`交付置信度未达目标:${q.deliveryProbability}% / ${q.target}%`,suggestion:q.actions.join(" ")}],t.filter(a=>"high"===a.priority).map(a=>({level:"info",message:`修复策略待执行:${a.title}`,suggestion:a.action})));let u=(0,s.Ai)(o,e,c);return{knowledgeCoverage:l,factTraces:m,chapterCoverage:n,qualityReport:q,repairStrategies:t,validationIssues:o,finalExportGate:u}}async function ec(a){var b,c;let{chapterDraftsByOrder:e,chapterGenerationStagesByOrder:f,chapterGenerationStages:g,effectiveChapters:h,template:i,allEvidence:j,projectMaterialScope:k,progressStages:l,documentSpec:m,projectMaterialSummary:o,domainProfile:p,documentBudget:t,input:v,generationDiagnostics:w,promptTexts:x,promptBindings:y,promptDocumentRules:z,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:R,factTokenScopeClassifier:S,professionalDepthClassifier:T,planDataMaster:U,emitProgress:V,withProgressHeartbeat:W}=a,{signal:X,requirement:Y}=v,Z=e.filter(a=>!!a);if(g.push(...f.filter(a=>!!a)),0===Z.length)throw Error(`章节生成未完成:${H.join(";")||"没有生成任何有效章节"}`);if(E&&Z.length<h.length)throw Error(`OUTLINE 指定 ${h.length} 章,实际只生成 ${Z.length} 章:${H.join(";")||"部分章节未生成"}`);let $=(0,br.Su)(Z.flatMap(a=>a.evidence||[]),k);(0,br.U2)($,k,"finalize:chapter-evidence"),$.length>0&&(j.push(...$),j.splice(0,j.length,...(0,n.QR)(j,{preservePinned:!0})));let _=(0,br.Su)(j,k);j.splice(0,j.length,..._),(0,br.U2)(j,k,"finalize:all-evidence"),(0,u.Te)(X);let aa=(0,n.QR)(j,{preservePinned:!0});j.splice(0,j.length,...(0,br.Su)(aa,k)),(0,br.U2)(j,k,"finalize:post-file-understanding");let ab=(0,Q.B2)(i,j,m),{localFacts:ac,projectBasicFacts:ad,preciseFacts:ae,structuredTables:af}=(0,Q.d6)({evidence:j,template:i,spec:m,profile:p,scope:k,diagnostics:w}),ag=[...ac,...ad,...ae],ah={facts:[],stages:[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"已有本地/资料事实覆盖主要必需字段,跳过 LLM 全量事实抽取"}]};if((0,Q.N2)(ag,i,m)){let a=(0,n.QR)(j,{preservePinned:!0});try{ah=await (0,Q.OQ)(a,D,i,m,X,w)}catch(a){if(X?.aborted)throw a;console.error("[gen] fact extraction failed:",a)}}for(let a of ah.stages)(0,aX.fx)(l,a);let ai=cF(j),aj=(0,br.am)((b=[...ac,...ad,...ae,...ah.facts,...ai],b.filter(a=>!!a.sourceFile)),k),ak=cO(aj,M??cL(aj));for(let a of ak)ab[a.key]=`${(0,u.lG)(a.value)}(来源:${a.sourceFile},角色:${a.roleId})`;let al=await (0,Q.d7)(ak,af,F,m,p);al.canonical=cP({facts:ak,projectRoot:A,requirement:Y||"",templateId:i.id});let am=(0,bx.GG)(al),an=(0,bx.hI)(al);(0,bx.Pt)(al);let ao=(0,bx.P3)(al),ap=Z.map(a=>{let b=m.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=(b?.requiredFactIds||[]).map(a=>m.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}}),aq=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}}(Z,ak,i);aq.warnings=[...aq.warnings,...C.warnings],aq.errors=[...aq.errors,...C.blockingIssues];let ar=[...j.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})),as=new Map;for(let a of j)as.set(a.source||"unknown",(as.get(a.source||"unknown")??0)+1);let at=ct((0,a_.w9)(aq,al,Z),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}(ap),(L||[]).filter(a=>!/^跨章一致性冲突|^工序规格冲突/u.test(a)).slice(0,10).map(a=>{let b=/^数据一致性矛盾/u.test(a);return{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`${b?"数据一致性复核":"跨章一致性复核"}:${a}`,suggestion:b?"全文数据必须一致:以绑定资料(图纸/清单/招标文件)为准选定唯一值,统一矛盾数值对。":"跨章数值口径不一致属低级错误,必须定向修复统一口径后重新校验。"}})),au=Z.map(a=>a.content).join("\n\n");at=ct(at,ds(au,aj,{maxIssues:20}).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议 Agent Writer 在章节生成阶段优先落位可信基础事实;导出阶段不因未落位的低置信或泛化事实阻断。"})));let av=Math.max(0,h.length-Z.length);at=ct(at,[...av>0?[{level:"error",severity:"blocker",message:`部分章节生成失败:${av} 章`,suggestion:H.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。"}]:[]]);let aw=await Promise.all(Z.map(async a=>{let b=h.find(b=>b.id===a.id);if(!b)return[];let c=await be({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=ct(at,aw.flat());let ax=[],ay=[...l];for(let a of g)(0,aX.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,aX.fx)(az,(0,aX.X5)({type:"reference",roleId:"knowledge-usage-report",status:"success",message:`资料使用报告:证据 ${j.length} 条,来源文件 ${ar.length} 份,结构化事实 ${aj.length} 条`,details:[`证据类型:${[...as.entries()].map(([a,b])=>`${a} ${b}`).join(",")||"无"}`,`索引健康:可用切片 ${J.usableChunkCount} 条,待索引 ${J.pendingJobs} 个,向量 ${J.vectorStatus?.status||"unknown"}`]},{subtitle:"资料使用报告"})),(0,aX.fx)(az,(0,aX.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,q.rs)((0,q.V3)({templateId:i.id,templateName:i.name,title:i.outputTitle,requirement:Y||"",projectRoot:A,projectId:B,exportSettings:i.exportSettings,generationSettings:i.generationSettings,facts:ab,structuredFacts:aj,factsModel:al,chapters:Z,sources:ar,missingItems:[...new Set(F)],validation:aq,validationIssues:at,executionStages:az,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:ax,partialChapters:Z.map(a=>({id:a.id,title:a.title,chars:(0,r.V7)(a.content),status:cS(a,t.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:Z,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:z}),Z,{forbidDrawingImages:!1,promptRules:z}).chapters.map(a=>{let b=h.find(b=>b.id===a.id)||a;return{...a,sections:a.sections||[],content:dk(a.content,b)}}),aB=(0,q.rs)((0,q.V3)({templateId:i.id,templateName:i.name,title:i.outputTitle,requirement:Y||"",projectRoot:A,projectId:B,exportSettings:i.exportSettings,generationSettings:i.generationSettings,facts:ab,structuredFacts:aj,factsModel:al,chapters:aA,sources:ar,missingItems:[...new Set(F)],validation:aq,validationIssues:at,executionStages:az,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:ax,partialChapters:[],checkpointChapters:aA,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:z}),aA,{forbidDrawingImages:!1,promptRules:z}).markdown;aB=(0,bx._D)(dl(d6((0,q.bR)((0,q.kT)((0,q.K7)(d4(c8(aB,aj),o)))),i))).markdown;let aC=()=>{var a;return(0,bx._D)(dl(d6((0,q.bR)((0,q.kT)((0,q.K7)(d4(c8((a={template:i,requirement:Y,projectRoot:A,projectId:B,facts:ab,structuredFacts:aj,factsModel:al,chapters:aA,sources:ar,missingItems:F,validation:aq,validationIssues:at,executionStages:az,assets:ax,promptDocumentRules:z},dl((0,q.rs)((0,q.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)),aj),o)))),i))).markdown},aD=cG({facts:aj,markdown:aB});aD.size>0&&az.push({type:"fact_extraction",roleId:"canonical-facts",status:"success",message:`已决策可信基础事实 ${aD.size} 项`,details:[...aD.values()].map(a=>`${a.label}=${a.value}(${a.source},confidence=${a.confidence})`).slice(0,12)});let aE=at;at=await d9({documentSpec:m,validationIssues:at,factsModel:al,finalChapterDrafts:aA,finalMarkdown:aB,template:i,promptBindings:y,promptDocumentRules:z,projectMaterialSummary:o,domainProfile:p,structuredFacts:aj,documentBudget:t,scopeConflicts:M,evaluationCriteriaItems:O,effectiveChapters:h,tenderRequirements:P,requirementsSimilarity:R,factTokenScopeClassifier:S,professionalDepthClassifier:T});let aG=await eb({finalChapterDrafts:aA,effectiveChapters:h,factsModel:al,allEvidence:j,finalMarkdown:aB,validationIssues:at,retrievalCoverageReports:G,includeRetrievalCoverage:!0,template:i}),{knowledgeCoverage:aI,factTraces:aJ,chapterCoverage:aK,qualityReport:aL,repairStrategies:aM,finalExportGate:aN}=aG;at=aG.validationIssues;let aO=[],aP=[],aQ=async()=>{let a=aE.filter(a=>!/已确认事实未在正文中落位/u.test(a.message)&&!(/概况段跨章复述/u.test(a.message)&&!/本项目为|本工程为|该项目为|该工程为/u.test(aB))&&!(/后台内部术语|后台内部话术/u.test(a.message)&&!/工作包|事实卡|事实主表|后台数据库|落位|峰值口径|控制口径|数据口径/u.test(aB)));at=[...at=await d9({documentSpec:m,validationIssues:a,factsModel:al,finalChapterDrafts:aA,finalMarkdown:aB,template:i,promptBindings:y,promptDocumentRules:z,projectMaterialSummary:o,domainProfile:p,structuredFacts:aj,documentBudget:t,scopeConflicts:M,evaluationCriteriaItems:O,effectiveChapters:h,tenderRequirements:P,requirementsSimilarity:R,factTokenScopeClassifier:S,professionalDepthClassifier:T}),...aP],aG=await eb({finalChapterDrafts:aA,effectiveChapters:h,factsModel:al,allEvidence:j,finalMarkdown:aB,validationIssues:at,retrievalCoverageReports:G,includeRetrievalCoverage:!1,template:i}),({knowledgeCoverage:aI,factTraces:aJ,chapterCoverage:aK,qualityReport:aL,repairStrategies:aM,finalExportGate:aN}=aG),at=aG.validationIssues},aR=dr(aB,[...aj,...al.preciseFacts],{maxItems:60});if(aR.length>0){let a=[[/项目名称|工程名称|项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|施工范围/u,/概况|基本信息|概述|总述|简介/u],[/计划工期|合同工期|天数/u,/工期|进度|施工部署|总体部署|流水/u],[/质量标准|质量目标/u,/质量/u],[/危大|安全/u,/安全/u],[/资源|材料|机械|设备|机具/u,/资源|投入|物资|机械|设备|机具|周转/u],[/面积|占地|建筑面积|长度|宽度|高度|厚度|深度|强度|等级|坡度|管径|直径|规格|跨度|周长|体积|重量/u,/概况|施工方法|主要施工|方案/u]],b=new Map,c=[],d=[];for(let e of aR){let f=a.find(([a])=>a.test(e.label)),g=f?aA.find(a=>f[1].test(a.title)):void 0;if(!g){c.push(`${e.label}=${e.value}`);continue}let h=b.get(g.id)||[];if(h.length>=12){d.push(`${e.label}=${e.value}`);continue}h.push({label:e.label,value:e.value}),b.set(g.id,h)}let e=0;for(let[a,f]of b){let b=aA.findIndex(b=>b.id===a);if(b<0)continue;let g=aA[b],j=h.find(a=>a.id===g.id||a.title===g.title),k=(0,aX.X5)({type:"llm_review",roleId:`agent-fact-landing-${a}`,status:"running",message:`正在落位 ${f.length} 条重要事实:${g.title}`,details:[...f.map(a=>`${a.label}=${a.value}`),...c.map(a=>`跳过:${a}(无匹配章节)`),...d.map(a=>`超限跳过:${a}`)]},{subtitle:"事实落位修复"});(0,aX.fx)(l,k),(0,aX.fx)(aO,k),V(aA,l);let m=["【事实落位定向修复】\n下列资料事实是项目硬数据,当前正文未出现。请逐条定位到本章最合适的位置(项目概况引导段、项目基本信息表对应行或对应小节),以局部 patch 方式自然写入,保持原始数值、单位与表述口径,不得改写、换算或编造。\n不得新增、删除或合并小节;表格内补充必须保持表头结构不变;只修改与落位事实直接相关的局部文本。",f.map(a=>`- ${a.label}=${a.value}`).join("\n")].join("\n"),n=await W(()=>(0,aY.l8)({template:i,chapter:{id:g.id,title:g.title,content:g.content,evidence:g.evidence,missingFacts:g.missingFacts,sections:g.sections},issues:f.map(a=>`已确认事实未在正文中落位:${a.label}=${a.value}`),promptTexts:m,requirement:Y,forbidDrawingImages:!1,diagnostics:w,signal:X}));n.content&&n.content!==g.content&&(aA[b]={...g,content:j?dk(n.content,j):n.content},e+=n.appliedCount);let o=(0,aX.X5)({type:"llm_review",roleId:`agent-fact-landing-${a}`,status:n.appliedCount>0?"success":"failed",message:n.appliedCount>0?`重要事实落位完成:${g.title}(${n.appliedCount} 处 patch)`:`重要事实落位未生效:${g.title}`,details:f.map(a=>`${a.label}=${a.value}`)},{subtitle:"事实落位修复"});(0,aX.fx)(l,o),(0,aX.fx)(aO,o),V(aA,l)}e>0&&(aB=aC(),await aQ())}let aS=(0,s.NS)(aB).filter(a=>"error"===a.level&&/空单元格|占位符单元格|列数不一致|分隔线位置不规范/u.test(a.message));if(aS.length>0){let a=0,b=[],c=new Map;for(let a=0;a<aS.length;a+=1){let d=aS[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,rowAnchor:f},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:g,rowAnchor:j}of b){let b=aA[c],k=h.find(a=>a.id===b.id||a.title===b.title),m=(0,aX.X5)({type:"llm_review",roleId:`agent-table-fix-${b.id}-${d}`,status:"running",message:`正在修复表格数据缺失:${b.title}`,details:[e]},{subtitle:"表格数据修复"});(0,aX.fx)(l,m),(0,aX.fx)(aO,m),V(aA,l);let n=d7(b.content,g)||d7(aB,g)||"",o=`【表格数据完整性定向修复】
|
|
84
|
+
${e}`}function d8(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 d9(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}}async function ea(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:n,scopeConflicts:o,evaluationCriteriaItems:p,effectiveChapters:t,tenderRequirements:v,requirementsSimilarity:w,factTokenScopeClassifier:x,professionalDepthClassifier:y}=a;return ct((0,s.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||bs(d))&&/\d|GB|JGJ|C\d|HRB|DN|mm|MPa|kPa|工期|质量|安全|项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数/u.test(d)&&!bu(c,e.name)&&b.push({level:"info",message:`正文可能未显式覆盖“${e.name}”`,suggestion:"建议检查对应章节是否已自然表达该事实。"})}let e=a.summary.facts.projectName;!e||"当前知识库项目"===e||bs(e)||bu(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.p4,c=[],d=new Map;for(let c of a.facts){let a=c.fieldName||c.key;a&&function(a,b){let c=(0,l.oC)(b,a);return c?"single"===c.cardinality&&"allow_multiple"!==c.conflictPolicy&&"ignore"!==c.conflictPolicy:/项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数|工期|质量标准|合同价格形式|绿色建筑等级|投标有效期|质保期/u.test(a)}(a,b)&&bw(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=bw(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=bv(a.markdown),d=[e,...a.summary.fingerprint.projectNames].flatMap(a=>[a,a.replace(/^\d+(?:\.\d+)?[^\u4e00-\u9fa5]*/u,""),a.replace(/\([^)]*\)|([^)]*)/gu,"")]).map(a=>bv(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===cW(m).length||!/资料未明确|系统暂未从知识库确认|项目资料暂未明确/u.test(f)?[]:["计划工期","合同工期","质量标准","合同估算价","合同估算价格","建设地点","建设规模"].filter(a=>RegExp(`${a}[^
|
|
85
|
+
|。;;]{0,40}(?:资料未明确|系统暂未从知识库确认|项目资料暂未明确)`,"u").test(f)).map(a=>({level:"error",message:`${a} 已抽取到项目资料事实但正文仍显示暂未明确`,suggestion:"请优先使用项目基础事实卡片中的资料原值,不得用占位表达覆盖已确认事实。"})),await cc({markdown:f,chapters:e,factsModel:d,template:g,promptBindings:h,promptDocumentRules:i,scopeConflicts:o,evaluationCriteriaItems:p,effectiveChapters:t,tenderRequirements:v,requirementsSimilarity:w,factTokenScopeClassifier:x,professionalDepthClassifier:y}),ds(f,[...m,...d.preciseFacts],{maxIssues:30}).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议后续优化事实自然落位;导出阶段不因未落位的引用型或可优化事实阻断。"})),(0,r.PE)(g.generationSettings||g.exportSettings,f).filter(a=>!(n.minPages&&/低于目标页数/u.test(a.message))),(0,r.ty)(n,f),(0,q.UG)(f,g),(0,cQ.IA)(f),await (0,by.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,u.Xl)(d.content,a.title)||(0,u.Xl)(d.content,a.title,{fuzzy:!0}),e=(0,r.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,cR.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,u.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 dQ(e,f)).map(a=>"error"===a.level?{...a,severity:"blocker"}:a)).map(a=>"error"===a.level?{...a,severity:a.severity||"blocker"}:a)}let eb=/章节级证据覆盖较弱|章节事实覆盖不足|小节事实或量化参数落位可继续优化/u;async function ec(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(cd[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,bF.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,r.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=ct(h,l.score>=85?[]:[{level:"warning",message:`系统知识库覆盖确认率偏低:${l.score}%`,suggestion:`${l.remediation} 未确认事实域:${l.unconfirmedDomains.map(a=>cd[a]||a).join("、")||"无"}`}],(0,bF.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=>eb.test(a.message)&&"warning"===a.level?{...a,level:"info"}:a);let p=(0,cq.Ah)((0,cp.aF)(g))?.profile.fiveElementCompleteBlocks,q=await co({markdown:g,chapters:c,issues:o,knowledgeCoverage:l,factTraces:m,template:k,referenceCompleteBlocks:p}),t=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,bF.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=ct(o,q.passed?[]:[{level:"info",message:`交付置信度未达目标:${q.deliveryProbability}% / ${q.target}%`,suggestion:q.actions.join(" ")}],t.filter(a=>"high"===a.priority).map(a=>({level:"info",message:`修复策略待执行:${a.title}`,suggestion:a.action})));let u=(0,s.Ai)(o,e,c);return{knowledgeCoverage:l,factTraces:m,chapterCoverage:n,qualityReport:q,repairStrategies:t,validationIssues:o,finalExportGate:u}}async function ed(a){var b,c;let{chapterDraftsByOrder:e,chapterGenerationStagesByOrder:f,chapterGenerationStages:g,effectiveChapters:h,template:i,allEvidence:j,projectMaterialScope:k,progressStages:l,documentSpec:m,projectMaterialSummary:o,domainProfile:p,documentBudget:t,input:v,generationDiagnostics:w,promptTexts:x,promptBindings:y,promptDocumentRules:z,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:R,factTokenScopeClassifier:S,professionalDepthClassifier:T,planDataMaster:U,emitProgress:V,withProgressHeartbeat:W}=a,{signal:X,requirement:Y}=v,Z=e.filter(a=>!!a);if(g.push(...f.filter(a=>!!a)),0===Z.length)throw Error(`章节生成未完成:${H.join(";")||"没有生成任何有效章节"}`);if(E&&Z.length<h.length)throw Error(`OUTLINE 指定 ${h.length} 章,实际只生成 ${Z.length} 章:${H.join(";")||"部分章节未生成"}`);let $=(0,br.Su)(Z.flatMap(a=>a.evidence||[]),k);(0,br.U2)($,k,"finalize:chapter-evidence"),$.length>0&&(j.push(...$),j.splice(0,j.length,...(0,n.QR)(j,{preservePinned:!0})));let _=(0,br.Su)(j,k);j.splice(0,j.length,..._),(0,br.U2)(j,k,"finalize:all-evidence"),(0,u.Te)(X);let aa=(0,n.QR)(j,{preservePinned:!0});j.splice(0,j.length,...(0,br.Su)(aa,k)),(0,br.U2)(j,k,"finalize:post-file-understanding");let ab=(0,Q.B2)(i,j,m),{localFacts:ac,projectBasicFacts:ad,preciseFacts:ae,structuredTables:af}=(0,Q.d6)({evidence:j,template:i,spec:m,profile:p,scope:k,diagnostics:w}),ag=[...ac,...ad,...ae],ah={facts:[],stages:[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"已有本地/资料事实覆盖主要必需字段,跳过 LLM 全量事实抽取"}]};if((0,Q.N2)(ag,i,m)){let a=(0,n.QR)(j,{preservePinned:!0});try{ah=await (0,Q.OQ)(a,D,i,m,X,w)}catch(a){if(X?.aborted)throw a;console.error("[gen] fact extraction failed:",a)}}for(let a of ah.stages)(0,aX.fx)(l,a);let ai=cF(j),aj=(0,br.am)((b=[...ac,...ad,...ae,...ah.facts,...ai],b.filter(a=>!!a.sourceFile)),k),ak=cO(aj,M??cL(aj));for(let a of ak)ab[a.key]=`${(0,u.lG)(a.value)}(来源:${a.sourceFile},角色:${a.roleId})`;let al=await (0,Q.d7)(ak,af,F,m,p);al.canonical=cP({facts:ak,projectRoot:A,requirement:Y||"",templateId:i.id});let am=(0,bx.GG)(al),an=(0,bx.hI)(al);(0,bx.Pt)(al);let ao=(0,bx.P3)(al),ap=Z.map(a=>{let b=m.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=(b?.requiredFactIds||[]).map(a=>m.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}}),aq=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}}(Z,ak,i);aq.warnings=[...aq.warnings,...C.warnings],aq.errors=[...aq.errors,...C.blockingIssues];let ar=[...j.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})),as=new Map;for(let a of j)as.set(a.source||"unknown",(as.get(a.source||"unknown")??0)+1);let at=ct((0,a_.w9)(aq,al,Z),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}(ap),(L||[]).filter(a=>!/^跨章一致性冲突|^工序规格冲突/u.test(a)).slice(0,10).map(a=>{let b=/^数据一致性矛盾/u.test(a);return{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`${b?"数据一致性复核":"跨章一致性复核"}:${a}`,suggestion:b?"全文数据必须一致:以绑定资料(图纸/清单/招标文件)为准选定唯一值,统一矛盾数值对。":"跨章数值口径不一致属低级错误,必须定向修复统一口径后重新校验。"}})),au=Z.map(a=>a.content).join("\n\n");at=ct(at,ds(au,aj,{maxIssues:20}).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议 Agent Writer 在章节生成阶段优先落位可信基础事实;导出阶段不因未落位的低置信或泛化事实阻断。"})));let av=Math.max(0,h.length-Z.length);at=ct(at,[...av>0?[{level:"error",severity:"blocker",message:`部分章节生成失败:${av} 章`,suggestion:H.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。"}]:[]]);let aw=await Promise.all(Z.map(async a=>{let b=h.find(b=>b.id===a.id);if(!b)return[];let c=await be({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=ct(at,aw.flat());let ax=[],ay=[...l];for(let a of g)(0,aX.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,aX.fx)(az,(0,aX.X5)({type:"reference",roleId:"knowledge-usage-report",status:"success",message:`资料使用报告:证据 ${j.length} 条,来源文件 ${ar.length} 份,结构化事实 ${aj.length} 条`,details:[`证据类型:${[...as.entries()].map(([a,b])=>`${a} ${b}`).join(",")||"无"}`,`索引健康:可用切片 ${J.usableChunkCount} 条,待索引 ${J.pendingJobs} 个,向量 ${J.vectorStatus?.status||"unknown"}`]},{subtitle:"资料使用报告"})),(0,aX.fx)(az,(0,aX.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,q.rs)((0,q.V3)({templateId:i.id,templateName:i.name,title:i.outputTitle,requirement:Y||"",projectRoot:A,projectId:B,exportSettings:i.exportSettings,generationSettings:i.generationSettings,facts:ab,structuredFacts:aj,factsModel:al,chapters:Z,sources:ar,missingItems:[...new Set(F)],validation:aq,validationIssues:at,executionStages:az,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:ax,partialChapters:Z.map(a=>({id:a.id,title:a.title,chars:(0,r.V7)(a.content),status:cS(a,t.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:Z,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:z}),Z,{forbidDrawingImages:!1,promptRules:z}).chapters.map(a=>{let b=h.find(b=>b.id===a.id)||a;return{...a,sections:a.sections||[],content:dk(a.content,b)}}),aB=(0,q.rs)((0,q.V3)({templateId:i.id,templateName:i.name,title:i.outputTitle,requirement:Y||"",projectRoot:A,projectId:B,exportSettings:i.exportSettings,generationSettings:i.generationSettings,facts:ab,structuredFacts:aj,factsModel:al,chapters:aA,sources:ar,missingItems:[...new Set(F)],validation:aq,validationIssues:at,executionStages:az,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:ax,partialChapters:[],checkpointChapters:aA,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:z}),aA,{forbidDrawingImages:!1,promptRules:z}).markdown;aB=(0,bx._D)(dl(d7((0,q.bR)((0,q.kT)((0,q.K7)(d5(c8(aB,aj),o)))),i))).markdown;let aC=()=>{var a;return(0,bx._D)(dl(d7((0,q.bR)((0,q.kT)((0,q.K7)(d5(c8((a={template:i,requirement:Y,projectRoot:A,projectId:B,facts:ab,structuredFacts:aj,factsModel:al,chapters:aA,sources:ar,missingItems:F,validation:aq,validationIssues:at,executionStages:az,assets:ax,promptDocumentRules:z},dl((0,q.rs)((0,q.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)),aj),o)))),i))).markdown},aD=cG({facts:aj,markdown:aB});aD.size>0&&az.push({type:"fact_extraction",roleId:"canonical-facts",status:"success",message:`已决策可信基础事实 ${aD.size} 项`,details:[...aD.values()].map(a=>`${a.label}=${a.value}(${a.source},confidence=${a.confidence})`).slice(0,12)});let aE=at;at=await ea({documentSpec:m,validationIssues:at,factsModel:al,finalChapterDrafts:aA,finalMarkdown:aB,template:i,promptBindings:y,promptDocumentRules:z,projectMaterialSummary:o,domainProfile:p,structuredFacts:aj,documentBudget:t,scopeConflicts:M,evaluationCriteriaItems:O,effectiveChapters:h,tenderRequirements:P,requirementsSimilarity:R,factTokenScopeClassifier:S,professionalDepthClassifier:T});let aG=await ec({finalChapterDrafts:aA,effectiveChapters:h,factsModel:al,allEvidence:j,finalMarkdown:aB,validationIssues:at,retrievalCoverageReports:G,includeRetrievalCoverage:!0,template:i}),{knowledgeCoverage:aI,factTraces:aJ,chapterCoverage:aK,qualityReport:aL,repairStrategies:aM,finalExportGate:aN}=aG;at=aG.validationIssues;let aO=[],aP=[],aQ=async()=>{let a=aE.filter(a=>!/已确认事实未在正文中落位/u.test(a.message)&&!(/概况段跨章复述/u.test(a.message)&&!/本项目为|本工程为|该项目为|该工程为/u.test(aB))&&!(/后台内部术语|后台内部话术/u.test(a.message)&&!/工作包|事实卡|事实主表|后台数据库|落位|峰值口径|控制口径|数据口径/u.test(aB)));at=[...at=await ea({documentSpec:m,validationIssues:a,factsModel:al,finalChapterDrafts:aA,finalMarkdown:aB,template:i,promptBindings:y,promptDocumentRules:z,projectMaterialSummary:o,domainProfile:p,structuredFacts:aj,documentBudget:t,scopeConflicts:M,evaluationCriteriaItems:O,effectiveChapters:h,tenderRequirements:P,requirementsSimilarity:R,factTokenScopeClassifier:S,professionalDepthClassifier:T}),...aP],aG=await ec({finalChapterDrafts:aA,effectiveChapters:h,factsModel:al,allEvidence:j,finalMarkdown:aB,validationIssues:at,retrievalCoverageReports:G,includeRetrievalCoverage:!1,template:i}),({knowledgeCoverage:aI,factTraces:aJ,chapterCoverage:aK,qualityReport:aL,repairStrategies:aM,finalExportGate:aN}=aG),at=aG.validationIssues},aR=dr(aB,[...aj,...al.preciseFacts],{maxItems:60});if(aR.length>0){let a=[[/项目名称|工程名称|项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|施工范围/u,/概况|基本信息|概述|总述|简介/u],[/计划工期|合同工期|天数/u,/工期|进度|施工部署|总体部署|流水/u],[/质量标准|质量目标/u,/质量/u],[/危大|安全/u,/安全/u],[/资源|材料|机械|设备|机具/u,/资源|投入|物资|机械|设备|机具|周转/u],[/面积|占地|建筑面积|长度|宽度|高度|厚度|深度|强度|等级|坡度|管径|直径|规格|跨度|周长|体积|重量/u,/概况|施工方法|主要施工|方案/u]],b=new Map,c=[],d=[];for(let e of aR){let f=a.find(([a])=>a.test(e.label)),g=f?aA.find(a=>f[1].test(a.title)):void 0;if(!g){c.push(`${e.label}=${e.value}`);continue}let h=b.get(g.id)||[];if(h.length>=12){d.push(`${e.label}=${e.value}`);continue}h.push({label:e.label,value:e.value}),b.set(g.id,h)}let e=0;for(let[a,f]of b){let b=aA.findIndex(b=>b.id===a);if(b<0)continue;let g=aA[b],j=h.find(a=>a.id===g.id||a.title===g.title),k=(0,aX.X5)({type:"llm_review",roleId:`agent-fact-landing-${a}`,status:"running",message:`正在落位 ${f.length} 条重要事实:${g.title}`,details:[...f.map(a=>`${a.label}=${a.value}`),...c.map(a=>`跳过:${a}(无匹配章节)`),...d.map(a=>`超限跳过:${a}`)]},{subtitle:"事实落位修复"});(0,aX.fx)(l,k),(0,aX.fx)(aO,k),V(aA,l);let m=["【事实落位定向修复】\n下列资料事实是项目硬数据,当前正文未出现。请逐条定位到本章最合适的位置(项目概况引导段、项目基本信息表对应行或对应小节),以局部 patch 方式自然写入,保持原始数值、单位与表述口径,不得改写、换算或编造。\n不得新增、删除或合并小节;表格内补充必须保持表头结构不变;只修改与落位事实直接相关的局部文本。",f.map(a=>`- ${a.label}=${a.value}`).join("\n")].join("\n"),n=await W(()=>(0,aY.l8)({template:i,chapter:{id:g.id,title:g.title,content:g.content,evidence:g.evidence,missingFacts:g.missingFacts,sections:g.sections},issues:f.map(a=>`已确认事实未在正文中落位:${a.label}=${a.value}`),promptTexts:m,requirement:Y,forbidDrawingImages:!1,diagnostics:w,signal:X}));n.content&&n.content!==g.content&&(aA[b]={...g,content:j?dk(n.content,j):n.content},e+=n.appliedCount);let o=(0,aX.X5)({type:"llm_review",roleId:`agent-fact-landing-${a}`,status:n.appliedCount>0?"success":"failed",message:n.appliedCount>0?`重要事实落位完成:${g.title}(${n.appliedCount} 处 patch)`:`重要事实落位未生效:${g.title}`,details:f.map(a=>`${a.label}=${a.value}`)},{subtitle:"事实落位修复"});(0,aX.fx)(l,o),(0,aX.fx)(aO,o),V(aA,l)}e>0&&(aB=aC(),await aQ())}let aS=(0,s.NS)(aB).filter(a=>"error"===a.level&&/空单元格|占位符单元格|列数不一致|分隔线位置不规范/u.test(a.message));if(aS.length>0){let a=0,b=[],c=new Map;for(let a=0;a<aS.length;a+=1){let d=aS[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,rowAnchor:f},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:g,rowAnchor:j}of b){let b=aA[c],k=h.find(a=>a.id===b.id||a.title===b.title),m=(0,aX.X5)({type:"llm_review",roleId:`agent-table-fix-${b.id}-${d}`,status:"running",message:`正在修复表格数据缺失:${b.title}`,details:[e]},{subtitle:"表格数据修复"});(0,aX.fx)(l,m),(0,aX.fx)(aO,m),V(aA,l);let n=d8(b.content,g)||d8(aB,g)||"",o=`【表格数据完整性定向修复】
|
|
86
86
|
下列表格存在数据缺失缺陷:正式交付文档的表格不得出现空单元格,也不得用“—/若干/约/待定”等占位或模糊表达代替具体数据。
|
|
87
87
|
缺陷表格原文(只允许修改这一张表,逐格修复;不得改动其他表格与小节):
|
|
88
88
|
${n.slice(0,2e3)}
|
|
@@ -90,11 +90,11 @@ ${n.slice(0,2e3)}
|
|
|
90
90
|
若表格首行就是分隔线(缺表头行),必须依据表格数据内容补写一行业务表头(每列一个业务字段名),再紧跟分隔线;表头不得使用泛化字段名。
|
|
91
91
|
合计/小计/总计/累计行的空单元格一律填“—”(不适用语义);其余单元格一律不得为空、不得用占位符。
|
|
92
92
|
若表头第一列是表名(如“竣工清理与移交计划表”),把表名移到表格上方正文叙述中,表头从业务列名开始,并同步校正数据行列对齐。
|
|
93
|
-
保持表头结构与列数不变,不得新增、删除或合并小节;只修改缺陷表格相关局部文本。`,p=(await W(()=>(0,aY.l8)({template:i,chapter:{id:b.id,title:b.title,content:b.content,evidence:b.evidence,missingFacts:b.missingFacts,sections:b.sections},issues:[e,f],promptTexts:o,requirement:Y,forbidDrawingImages:!1,diagnostics:w,signal:X}))).content||b.content;(p=function(a,b){let c=
|
|
93
|
+
保持表头结构与列数不变,不得新增、删除或合并小节;只修改缺陷表格相关局部文本。`,p=(await W(()=>(0,aY.l8)({template:i,chapter:{id:b.id,title:b.title,content:b.content,evidence:b.evidence,missingFacts:b.missingFacts,sections:b.sections},issues:[e,f],promptTexts:o,requirement:Y,forbidDrawingImages:!1,diagnostics:w,signal:X}))).content||b.content;(p=function(a,b){let c=d8(a,b);if(!c)return{content:a,removed:0};let d=d9(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,g).content)!==b.content&&(aA[c]={...b,content:k?dk(p,k):p},a+=1);let q=(0,s.NS)(p).some(a=>"error"===a.level&&/空单元格|占位符单元格|列数不一致/u.test(a.message)&&a.message.includes(g)&&(!j||a.message.includes(j))),r=(0,aX.X5)({type:"llm_review",roleId:`agent-table-fix-${b.id}-${d}`,status:q?"failed":"success",message:q?`表格数据修复未生效:${b.title}`:`表格数据修复完成:${b.title}`,details:[e]},{subtitle:"表格数据修复"});(0,aX.fx)(l,r),(0,aX.fx)(aO,r),V(aA,l)}}))}a>0&&(aB=aC(),await aQ())}let aT=bC({facts:[...ac,...ad,...ae],evidence:j});aT.length>0&&(at=[...at,...(function(a,b){if(0===b.length)return[];let c=[],d=new Set;for(let e of a.split(/\r?\n/u)){let a=e.trim();if(!(!a||/^#{1,6}\s/u.test(a)||/^\|/u.test(a)))for(let e of a.split(/(?<=[。;;])/u)){let a=e.trim();if(!(a.length<6)&&!(a.length>200))for(let e of b){let b=function(a){return bz.find(b=>b.id===a)}(e.id);if(!b||!b.relevance.test(a))continue;let f=new Set(e.values);for(let g of b.options){if(f.has(g.value)||!g.aliases.test(a)||function(a,b){let c=bB(a).find(a=>b.test(a));return!!c&&bA.test(c)}(a,g.aliases))continue;let b=`${e.id} ${g.value} ${a}`;d.has(b)||(d.add(b),c.push({categoryId:e.id,label:e.label,lockedValues:e.values,offValue:g.value,sentence:a}))}}}}return c})(aB,aT).map(a=>({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`语义矛盾(${a.label}):项目关键决策已锁定为「${a.lockedValues.join("、")}」,正文出现「${a.offValue}」冲突表述:“${a.sentence.slice(0,60)}”`,suggestion:"与已锁定决策冲突的表述必须统一为锁定值(或整句删除);禁止保留两套并存的技术路线/机械选型/供应方式。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。"}))]);let aU=await (0,s.KI)(aA,al,M),aV=await (0,bx.yR)(aA),aW=await aF({chapters:aA,model:P,similarity:R,signal:X});(aU.fixedCount>0||aV>0||aW.fixedCount>0)&&(aB=aC()),aW.fixedCount>0&&(0,aX.fx)(l,(0,aX.X5)({type:"validation",roleId:"scoring-requirement-fix",status:"success",message:`评分项响应确定性补写 :${aW.fixedCount} 条(${aW.details.slice(0,3).join("、")})`,details:aW.details.slice(3)},{subtitle:"交付前确 定性清洗"}));let aZ=(0,bx.qG)(aA),a$=0,a0=0,a1=0,a2=0,a3=0;for(let a of aA){let b=(0,bx.gD)(a=>{let b=(0,bx.br)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}},a.content,2);b.fixedCount>0&&(a.content=b.markdown,a$+=b.fixedCount),a.content=(0,bx.Vw)(a.content);let c=(0,bx.gD)(a=>{let b=(0,bx.JF)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}},a.content,2);c.fixedCount>0&&(a.content=c.markdown,a0+=c.fixedCount);let d=(0,bx.gD)(a=>{let b=(0,bx.BR)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}},a.content,2);d.fixedCount>0&&(a.content=d.markdown,a1+=d.fixedCount);let e=(0,bx.gD)(a=>{let b=(0,bx.ir)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}},a.content,2);e.fixedCount>0&&(a.content=e.markdown,a2+=e.fixedCount);let f=(0,bx.gD)(a=>{let b=aH(a);return{markdown:b.markdown,fixedCount:b.fixedCount}},a.content,2);f.fixedCount>0&&(a.content=f.markdown,a3+=f.fixedCount)}(aZ.removedCount>0||a$>0||a0>0||a1>0||a2>0||a3>0)&&(aB=aC(),(0,aX.fx)(l,(0,aX.X5)({type:"validation",roleId:"deterministic-surface-fix",status:"success",message:`交付前确定性清洗:跨章表格去重 ${aZ.removedCount} 行、断行残片合并 ${a$} 处、装饰层厚度修复 ${a0} 处、劳动力峰值统一 ${a1} 处、自伤句式改写 ${a2} 处、空响应句改写 ${a3} 处、叠词收敛`},{subtitle:"交付前确定性清洗"})));let a4=await (0,s.Yb)(aB,al,M);a4.fixedCount>0&&(aB=a4.markdown);let a5=(0,bx.fE)(aB,{scheduleAuthority:am,assemblyRateAuthority:an,...(0,bx.Ep)(U),supportAuthority:ao});if(a5.fixedCount>0&&(aB=a5.markdown),aU.fixedCount>0||a4.fixedCount>0||a5.fixedCount>0){await aQ();let a=aU.fixedCount+a4.fixedCount+a5.fixedCount,b=[...new Set([...aU.details,...a4.details,...a5.details])];(0,aX.fx)(l,(0,aX.X5)({type:"validation",roleId:"deterministic-consistency-fix",status:"success",message:`交付前确定性清洗:${a} 处(${b.slice(0,4).join("、")})`,details:b.slice(4)},{subtitle:"交付前确定性清洗"}))}let a6=(0,q.K7)(aB);a6!==aB&&(aB=a6,await aQ());let a7=await d4({template:i,chapters:aA,effectiveChapters:h,requirement:Y,projectName:o?.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(`工程概况事实:
|
|
94
94
|
${e.join("\n")}`)}let e=(a.evaluationCriteriaItems||[]).filter(Boolean);e.length&&b.push(`评标办法技术评审条目:
|
|
95
95
|
${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(`招标文件评分项要求:
|
|
96
96
|
${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(`工程量清单特征摘要:
|
|
97
|
-
${g.map(a=>`- ${a}`).join("\n")}`),b.join("\n\n")}({factsModel:al,evaluationCriteriaItems:O,tenderRequirements:P}),diagnostics:w,signal:X,heartbeat:W,onStage:a=>{let b=(0,aX.X5)({type:"llm_review",roleId:"agent-qingtian-review",status:a.status,message:a.message,details:a.details},{subtitle:"全维度评审"});(0,aX.fx)(l,b),(0,aX.fx)(aO,b),V(aA,l)}});aP=a7.reviewed?a7.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}}):[],a7.fixedCount>0?(aB=aC(),await aQ()):aP.length>0&&await aQ();let a8=(0,bx.qj)(aB);a8!==aB&&(aB=a8,await aQ());let a9=function(a){let b=a.split(/\r?\n/u),c=[],d=0,e=0;for(;e<b.length;){if(!/^\s*\|/u.test(b[e])){c.push(b[e]),e+=1;continue}let a=e;for(;a+1<b.length&&/^\s*\|/u.test(b[a+1]);)a+=1;let f=d8(b.slice(e,a+1));f.removed>0&&(d+=1),c.push(...f.lines),e=a+1}return{markdown:c.join("\n"),removed:d}}(aB);a9.markdown!==aB&&(aB=a9.markdown,await aQ());let ba=(0,bx.br)((0,bx.Vw)(aB));ba={markdown:(0,bx.lR)(ba.markdown).markdown,fixedCount:ba.fixedCount};let bb=(0,bx.JF)(ba.markdown);bb.fixedCount>0&&(ba.markdown=bb.markdown);let bc=(0,bx.BR)(ba.markdown);bc.fixedCount>0&&(ba.markdown=bc.markdown);let bd=(0,bx.ir)(ba.markdown);bd.fixedCount>0&&(ba.markdown=bd.markdown);let bf=aH(ba.markdown);bf.fixedCount>0&&(ba.markdown=bf.markdown),ba.markdown!==aB&&(aB=ba.markdown,await aQ());let bg=(0,bx._D)(aB);bg.fixedCount>0&&(aB=bg.markdown,await aQ());let bh=[{key:"export-gate",label:"导出门禁",passed:(c={exportGate:aN,qualityReport:aL,repairStrategies:aM}).exportGate.passed,message:c.exportGate.passed?"导出门禁通过":`仍有 ${c.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:c.qualityReport.passed,message:`${c.qualityReport.deliveryProbability}% / ${c.qualityReport.target}%`},{key:"completeness",label:"资料完整性",passed:c.qualityReport.scores.completeness>=85,message:`${c.qualityReport.scores.completeness}/100`},{key:"specificity",label:"方案针对性",passed:c.qualityReport.scores.specificity>=85,message:`${c.qualityReport.scores.specificity}/100`},{key:"compliance",label:"合规性",passed:c.qualityReport.scores.compliance>=80,message:`${c.qualityReport.scores.compliance}/100`},{key:"repair-strategies",label:"修复策略",passed:0===c.repairStrategies.filter(a=>"high"===a.priority).length,message:c.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}],bi=(0,s.Ff)(at);w.quality.blockingCount+=bi.blocking,w.quality.importantCount+=bi.important,w.quality.minorCount+=bi.minor;let bj=function(a){let b=[...a.diagnostics.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>({name:a.name,durationMs:a.durationMs}));return{llmCalls:a.diagnostics.llm.calls,llmFailures:a.diagnostics.llm.failures,maxParallelLlm:a.diagnostics.llm.maxActive,searchQueries:a.diagnostics.evidence.searchQueries,evidenceContextChars:a.diagnostics.evidence.contextChars,qualityIssues:{...a.diagnostics.quality},slowMetrics:b,elapsedMs:a.startedAt&&a.endedAt?a.endedAt-a.startedAt:void 0}}({diagnostics:w}),bk=aN.blockingIssues.length;bj.qualityIssues.blockingCount=bk;let bl=await dT(aA,aB,{templating:aL.templating}),bm=aL.templating?await W(()=>dU({templating:aL.templating,markdown:aB,diagnostics:w,signal:X})):{issues:[],reviewed:!1},bn=[...az,...aO].map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:bk>0?"failed":"success",message:`阻断 ${bk},问题 ${at.length}`}:"export_ready"===a.type?{...a,status:aN.passed?"success":"failed",message:aN.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:aN.passed&&"failed"===a.status&&/^agent-(?:reviewer|repairer)-/u.test(a.roleId)?{...a,status:"skipped",message:`${a.message||"章节中间审查失败"};最终门禁已通过,历史中间态已归档`}:a);bn.push((0,aX.X5)({type:"validation",roleId:"agent-final-gate",status:aN.passed?"success":"failed",message:aN.passed?"Agent 最终门禁通过":`Agent 最终门禁阻断 ${bk} 个问题`,details:aN.blockingIssues.map(a=>a.message)},{subtitle:"Agent 最终门禁"}));let bo=aL.deliveryProbability<70;bn.push((0,aX.X5)({type:"validation",roleId:"document-delivery-score",status:aL.passed?"success":aN.passed?"skipped":"failed",message:aN.passed&&!aL.passed?`${aL.summary}${bo?";置信度低于 70%,建议完成续修后再交付归档":"(导出门禁已通过,作为后续优化建议归档)"}`:aL.summary,details:bo&&aN.passed?[...aL.actions,"续修建议:交付置信度低于 70% 门槛,建议按交付复核清单补齐短板维度后重新生成或续修。"]:aL.actions},{subtitle:"交付评分"})),bn.push((0,aX.X5)({type:"validation",roleId:"document-professional-score",status:"专业"===bl.grade||"良好"===bl.grade?"success":"skipped",message:bl.summary,details:[...bl.dimensions.map(a=>`${a.label}:${a.score} 分(${a.detail})`),...bl.topIssues.map(a=>`待修复:${a}`)]},{subtitle:"专业度评分"})),aL.templating&&"light"!==aL.templating.level&&bn.push((0,aX.X5)({type:"validation",roleId:"document-templating-report",status:"skipped",message:`模板化检测:${"heavy"===aL.templating.level?"重度":"中度"}模板化(套话句占比 ${(100*aL.templating.fillerRatio).toFixed(1)}%,重难点归因+量化双达标占比 ${(100*aL.templating.difficultyCountermeasureRatio).toFixed(0)}%,模糊应答词 ${aL.templating.vagueHitCount} 处)`,details:bm.issues},{subtitle:"模板化检测"})),N&&bn.push((0,aX.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:"写作任务书"})),bn.push((0,aX.X5)({type:"reference",roleId:"knowledge-coverage",status:aI.score>=85?"success":"failed",message:`资料确认覆盖率:${aI.score}%(证据 ${aI.evidenceCount} 条,文件 ${aI.confirmedFiles} 份)`,details:[aI.remediation]},{subtitle:"资料覆盖"})),bn.push((0,aX.X5)({type:"validation",roleId:"document-review-checklist",status:bh.every(a=>a.passed)?"success":aN.passed?"skipped":"failed",message:`交付复核清单:通过 ${bh.filter(a=>a.passed).length}/${bh.length}${aN.passed&&!bh.every(a=>a.passed)?"(导出门禁已通过,其余项作为优化建议归档)":""}`,details:bh.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let bp=[...w.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(","),bq=function(a,b=5){return dB(a,b).map(([a,b])=>`${a} ${b.calls}次/${(b.inputChars/1e4).toFixed(1)}万字`).join(",")}(w.llm.callBreakdown),bs=w.factSanitize?`,事实净化 截断${w.factSanitize.truncated}/丢弃${w.factSanitize.dropped}/编号补全${w.factSanitize.repaired}`:"";bn.push((0,aX.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${w.llm.calls} 次,失败 ${w.llm.failures} 次,瞬态重试 ${w.llm.retries} 次,schema 校验失败 ${w.llm.schemaFailures} 次,峰值并行 ${w.llm.maxActive},检索 ${w.evidence.searchQueries} 次/${Math.round(w.evidence.searchMs/1e3)} 秒,证据上下文 ${w.evidence.contextChars} 字,噪声过滤 ${w.evidence.filteredNoise} 条,预算裁剪 ${w.evidence.budgetDropped} 条,质量问题 阻断${w.quality.blockingCount}/重要${w.quality.importantCount}/轻微${w.quality.minorCount}${bs}${bp?`,Top耗时:${bp}`:""}${bq?`,调用输入Top5:${bq}`:""}`,details:[...w.metrics.filter(a=>a.name.startsWith("phase:")).sort((a,b)=>a.startedAt-b.startedAt).map(a=>`${a.name}:${(a.durationMs/1e3).toFixed(1)} 秒`),...function(a,b=5){return dB(a,b).map(([a,b])=>{let c=b.cacheHitTokens+b.cacheMissTokens,d=c>0?`,缓存命中 ${Math.round(b.cacheHitTokens/c*100)}%(${b.cacheHitTokens}/${c} token)`:"";return`${a}:${b.calls} 次,输入 ${(b.inputChars/1e4).toFixed(1)} 万字(L3 ${(b.l3Chars/1e4).toFixed(1)} 万字)${d}`})}(w.llm.callBreakdown)]},{subtitle:"后台诊断"}));let bt=aA.map(a=>({...a,evidence:(0,n.QR)(a.evidence||[],{preservePinned:!0})}));return aA=bt,{templateId:i.id,templateName:i.name,title:i.outputTitle,requirement:Y||"",projectRoot:A,projectId:B,exportSettings:i.exportSettings,generationSettings:i.generationSettings,facts:ab,structuredFacts:aj,factsModel:al,chapters:bt,sources:ar,missingItems:[...new Set(F)],validation:aq,validationIssues:at,exportGate:aN,executionStages:bn,assets:ax,partialChapters:aA.map(a=>({id:a.id,title:a.title,chars:(0,r.V7)(a.content),status:cS(a,t.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:bt,promptRules:z,agentWorkflow:K,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:w,profile:function(a){let b=`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`,c=[{pattern:/专项施工|危大|专项方案/u,type:"专项施工方案",dimensions:["专项对象边界","工艺参数","风险控制","验收要求","应急措施"]},{pattern:/投标|技术标|响应|招标/u,type:"投标技术方案",dimensions:["招标响应","技术优势","工期质量安全承诺","资源保障","履约可实施性"]},{pattern:/监理|旁站|巡视|平行检验/u,type:"监理规划/细则",dimensions:["监理目标","旁站巡视","平行检验","验收程序","资料签认"]},{pattern:/可研|可行性|项目建议书|投资估算/u,type:"可研/项目建议类文档",dimensions:["建设必要性","方案比选","投资估算","风险分析","实施效益"]},{pattern:/运维|维护|保养|巡检/u,type:"运维维护方案",dimensions:["巡检频次","维护流程","故障响应","备品备件","记录闭环"]}].find(a=>a.pattern.test(b));return{type:c?.type||"施工组织设计/施工技术方案",dimensions:c?.dimensions||["工程概况","施工部署","进度质量安全","资源配置","施工工艺和验收闭环"],requiredEvidencePolicy:"本地知识库为完整事实源;系统暂未确认的事实必须通过扩大检索、事实补抽或落位修复解决,不得归因为用户资料缺失。"}}({template:i,chapters:h,requirement:Y}),knowledgeCoverage:aI,factTraces:aJ,chapterCoverage:aK,retrievalCoverage:G,qualityReport:aL,repairStrategies:aM,reviewChecklist:bh,professionalScore:bl,templatingReviewIssues:bm.issues,writingTaskBrief:N,workflowVersion:cu.x,telemetry:bj,qualityBenchmark:await cs(aB)},generatedAt:Date.now(),markdown:aB}}var ed=c(70963),ee=c(25284),ef=c(30355);function eg(a){return a.replace(/\s+/gu,"").toLowerCase()}var eh=c(14070);let ei={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 ej(a){if("0"===process.env.DOCUMENT_PLAN_DATA_MASTER||!a.basicFacts.trim()&&0===a.chapterTitles.length)return;let b={},c=await (0,P.bb)((0,q.y4)("你是施工组织设计计划数据规划器。"),`基于项目基本事实与章节目录,推导全项目统一的计划编制类数据(这些数据资料中没有,必须由你基于工程量、总工期、工序流水与定额工效推导,且全文唯一口径):
|
|
97
|
+
${g.map(a=>`- ${a}`).join("\n")}`),b.join("\n\n")}({factsModel:al,evaluationCriteriaItems:O,tenderRequirements:P}),diagnostics:w,signal:X,heartbeat:W,onStage:a=>{let b=(0,aX.X5)({type:"llm_review",roleId:"agent-qingtian-review",status:a.status,message:a.message,details:a.details},{subtitle:"全维度评审"});(0,aX.fx)(l,b),(0,aX.fx)(aO,b),V(aA,l)}});aP=a7.reviewed?a7.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}}):[],a7.fixedCount>0?(aB=aC(),await aQ()):aP.length>0&&await aQ();let a8=(0,bx.qj)(aB);a8!==aB&&(aB=a8,await aQ());let a9=function(a){let b=a.split(/\r?\n/u),c=[],d=0,e=0;for(;e<b.length;){if(!/^\s*\|/u.test(b[e])){c.push(b[e]),e+=1;continue}let a=e;for(;a+1<b.length&&/^\s*\|/u.test(b[a+1]);)a+=1;let f=d9(b.slice(e,a+1));f.removed>0&&(d+=1),c.push(...f.lines),e=a+1}return{markdown:c.join("\n"),removed:d}}(aB);a9.markdown!==aB&&(aB=a9.markdown,await aQ());let ba=(0,bx.g4)([a=>{let b=(0,bx.br)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}},a=>{let b=(0,bx.Vw)(a);return{markdown:b,fixedCount:+(b!==a)}},a=>{let b=(0,bx.lR)(a);return{markdown:b.markdown,fixedCount:b.removedCount}},a=>{let b=(0,bx.JF)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}},a=>{let b=(0,bx.BR)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}},a=>{let b=(0,bx.ir)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}},a=>{let b=aH(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}],aB,3);ba.markdown!==aB&&(aB=ba.markdown,await aQ());let bb=(0,bx._D)(aB);bb.fixedCount>0&&(aB=bb.markdown,await aQ());let bc=[{key:"export-gate",label:"导出门禁",passed:(c={exportGate:aN,qualityReport:aL,repairStrategies:aM}).exportGate.passed,message:c.exportGate.passed?"导出门禁通过":`仍有 ${c.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:c.qualityReport.passed,message:`${c.qualityReport.deliveryProbability}% / ${c.qualityReport.target}%`},{key:"completeness",label:"资料完整性",passed:c.qualityReport.scores.completeness>=85,message:`${c.qualityReport.scores.completeness}/100`},{key:"specificity",label:"方案针对性",passed:c.qualityReport.scores.specificity>=85,message:`${c.qualityReport.scores.specificity}/100`},{key:"compliance",label:"合规性",passed:c.qualityReport.scores.compliance>=80,message:`${c.qualityReport.scores.compliance}/100`},{key:"repair-strategies",label:"修复策略",passed:0===c.repairStrategies.filter(a=>"high"===a.priority).length,message:c.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}],bd=(0,s.Ff)(at);w.quality.blockingCount+=bd.blocking,w.quality.importantCount+=bd.important,w.quality.minorCount+=bd.minor;let bf=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:w}),bg=aN.blockingIssues.length;bf.qualityIssues.blockingCount=bg;let bh=await dT(aA,aB,{templating:aL.templating}),bi=aL.templating?await W(()=>dU({templating:aL.templating,markdown:aB,diagnostics:w,signal:X})):{issues:[],reviewed:!1},bj=[...az,...aO].map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:bg>0?"failed":"success",message:`阻断 ${bg},问题 ${at.length}`}:"export_ready"===a.type?{...a,status:aN.passed?"success":"failed",message:aN.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:aN.passed&&"failed"===a.status&&/^agent-(?:reviewer|repairer)-/u.test(a.roleId)?{...a,status:"skipped",message:`${a.message||"章节中间审查失败"};最终门禁已通过,历史中间态已归档`}:a);bj.push((0,aX.X5)({type:"validation",roleId:"agent-final-gate",status:aN.passed?"success":"failed",message:aN.passed?"Agent 最终门禁通过":`Agent 最终门禁阻断 ${bg} 个问题`,details:aN.blockingIssues.map(a=>a.message)},{subtitle:"Agent 最终门禁"}));let bk=aL.deliveryProbability<70;bj.push((0,aX.X5)({type:"validation",roleId:"document-delivery-score",status:aL.passed?"success":aN.passed?"skipped":"failed",message:aN.passed&&!aL.passed?`${aL.summary}${bk?";置信度低于 70%,建议完成续修后再交付归档":"(导出门禁已通过,作为后续优化建议归档)"}`:aL.summary,details:bk&&aN.passed?[...aL.actions,"续修建议:交付置信度低于 70% 门槛,建议按交付复核清单补齐短板维度后重新生成或续修。"]:aL.actions},{subtitle:"交付评分"})),bj.push((0,aX.X5)({type:"validation",roleId:"document-professional-score",status:"专业"===bh.grade||"良好"===bh.grade?"success":"skipped",message:bh.summary,details:[...bh.dimensions.map(a=>`${a.label}:${a.score} 分(${a.detail})`),...bh.topIssues.map(a=>`待修复:${a}`)]},{subtitle:"专业度评分"})),aL.templating&&"light"!==aL.templating.level&&bj.push((0,aX.X5)({type:"validation",roleId:"document-templating-report",status:"skipped",message:`模板化检测:${"heavy"===aL.templating.level?"重度":"中度"}模板化(套话句占比 ${(100*aL.templating.fillerRatio).toFixed(1)}%,重难点归因+量化双达标占比 ${(100*aL.templating.difficultyCountermeasureRatio).toFixed(0)}%,模糊应答词 ${aL.templating.vagueHitCount} 处)`,details:bi.issues},{subtitle:"模板化检测"})),N&&bj.push((0,aX.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:"写作任务书"})),bj.push((0,aX.X5)({type:"reference",roleId:"knowledge-coverage",status:aI.score>=85?"success":"failed",message:`资料确认覆盖率:${aI.score}%(证据 ${aI.evidenceCount} 条,文件 ${aI.confirmedFiles} 份)`,details:[aI.remediation]},{subtitle:"资料覆盖"})),bj.push((0,aX.X5)({type:"validation",roleId:"document-review-checklist",status:bc.every(a=>a.passed)?"success":aN.passed?"skipped":"failed",message:`交付复核清单:通过 ${bc.filter(a=>a.passed).length}/${bc.length}${aN.passed&&!bc.every(a=>a.passed)?"(导出门禁已通过,其余项作为优化建议归档)":""}`,details:bc.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let bl=[...w.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(","),bm=function(a,b=5){return dB(a,b).map(([a,b])=>`${a} ${b.calls}次/${(b.inputChars/1e4).toFixed(1)}万字`).join(",")}(w.llm.callBreakdown),bn=w.factSanitize?`,事实净化 截断${w.factSanitize.truncated}/丢弃${w.factSanitize.dropped}/编号补全${w.factSanitize.repaired}`:"";bj.push((0,aX.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${w.llm.calls} 次,失败 ${w.llm.failures} 次,瞬态重试 ${w.llm.retries} 次,schema 校验失败 ${w.llm.schemaFailures} 次,峰值并行 ${w.llm.maxActive},检索 ${w.evidence.searchQueries} 次/${Math.round(w.evidence.searchMs/1e3)} 秒,证据上下文 ${w.evidence.contextChars} 字,噪声过滤 ${w.evidence.filteredNoise} 条,预算裁剪 ${w.evidence.budgetDropped} 条,质量问题 阻断${w.quality.blockingCount}/重要${w.quality.importantCount}/轻微${w.quality.minorCount}${bn}${bl?`,Top耗时:${bl}`:""}${bm?`,调用输入Top5:${bm}`:""}`,details:[...w.metrics.filter(a=>a.name.startsWith("phase:")).sort((a,b)=>a.startedAt-b.startedAt).map(a=>`${a.name}:${(a.durationMs/1e3).toFixed(1)} 秒`),...function(a,b=5){return dB(a,b).map(([a,b])=>{let c=b.cacheHitTokens+b.cacheMissTokens,d=c>0?`,缓存命中 ${Math.round(b.cacheHitTokens/c*100)}%(${b.cacheHitTokens}/${c} token)`:"";return`${a}:${b.calls} 次,输入 ${(b.inputChars/1e4).toFixed(1)} 万字(L3 ${(b.l3Chars/1e4).toFixed(1)} 万字)${d}`})}(w.llm.callBreakdown)]},{subtitle:"后台诊断"}));let bo=aA.map(a=>({...a,evidence:(0,n.QR)(a.evidence||[],{preservePinned:!0})}));return aA=bo,{templateId:i.id,templateName:i.name,title:i.outputTitle,requirement:Y||"",projectRoot:A,projectId:B,exportSettings:i.exportSettings,generationSettings:i.generationSettings,facts:ab,structuredFacts:aj,factsModel:al,chapters:bo,sources:ar,missingItems:[...new Set(F)],validation:aq,validationIssues:at,exportGate:aN,executionStages:bj,assets:ax,partialChapters:aA.map(a=>({id:a.id,title:a.title,chars:(0,r.V7)(a.content),status:cS(a,t.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:bo,promptRules:z,agentWorkflow:K,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:w,profile:function(a){let b=`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`,c=[{pattern:/专项施工|危大|专项方案/u,type:"专项施工方案",dimensions:["专项对象边界","工艺参数","风险控制","验收要求","应急措施"]},{pattern:/投标|技术标|响应|招标/u,type:"投标技术方案",dimensions:["招标响应","技术优势","工期质量安全承诺","资源保障","履约可实施性"]},{pattern:/监理|旁站|巡视|平行检验/u,type:"监理规划/细则",dimensions:["监理目标","旁站巡视","平行检验","验收程序","资料签认"]},{pattern:/可研|可行性|项目建议书|投资估算/u,type:"可研/项目建议类文档",dimensions:["建设必要性","方案比选","投资估算","风险分析","实施效益"]},{pattern:/运维|维护|保养|巡检/u,type:"运维维护方案",dimensions:["巡检频次","维护流程","故障响应","备品备件","记录闭环"]}].find(a=>a.pattern.test(b));return{type:c?.type||"施工组织设计/施工技术方案",dimensions:c?.dimensions||["工程概况","施工部署","进度质量安全","资源配置","施工工艺和验收闭环"],requiredEvidencePolicy:"本地知识库为完整事实源;系统暂未确认的事实必须通过扩大检索、事实补抽或落位修复解决,不得归因为用户资料缺失。"}}({template:i,chapters:h,requirement:Y}),knowledgeCoverage:aI,factTraces:aJ,chapterCoverage:aK,retrievalCoverage:G,qualityReport:aL,repairStrategies:aM,reviewChecklist:bc,professionalScore:bh,templatingReviewIssues:bi.issues,writingTaskBrief:N,workflowVersion:cu.x,telemetry:bf,qualityBenchmark:await cs(aB)},generatedAt:Date.now(),markdown:aB}}var ee=c(70963),ef=c(25284),eg=c(30355);function eh(a){return a.replace(/\s+/gu,"").toLowerCase()}var ei=c(14070);let ej={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 ek(a){if("0"===process.env.DOCUMENT_PLAN_DATA_MASTER||!a.basicFacts.trim()&&0===a.chapterTitles.length)return;let b={},c=await (0,P.bb)((0,q.y4)("你是施工组织设计计划数据规划器。"),`基于项目基本事实与章节目录,推导全项目统一的计划编制类数据(这些数据资料中没有,必须由你基于工程量、总工期、工序流水与定额工效推导,且全文唯一口径):
|
|
98
98
|
- 劳动力峰值:高峰期总人数(人),并标注所处阶段;
|
|
99
99
|
- 分阶段劳动力:按施工阶段给出各阶段人数(各阶段人数不同是正常配置);
|
|
100
100
|
- 主要机械:名称、规格、台数(塔吊/汽车吊/挖掘机/混凝土泵等,按工程量与工期配足);
|
|
@@ -109,13 +109,13 @@ ${g.map(a=>`- ${a}`).join("\n")}`),b.join("\n\n")}({factsModel:al,evaluationCrit
|
|
|
109
109
|
项目基本事实:
|
|
110
110
|
${a.basicFacts.trim()||"(无)"}
|
|
111
111
|
章节目录:
|
|
112
|
-
${a.chapterTitles.map(a=>`- ${a}`).join("\n")}`,{maxTokens:6e3,temperature:0,signal:a.signal,diagnostics:a.diagnostics,schema:
|
|
112
|
+
${a.chapterTitles.map(a=>`- ${a}`).join("\n")}`,{maxTokens:6e3,temperature:0,signal:a.signal,diagnostics:a.diagnostics,schema:ej,taskKind:"structuredGeneration",prefixKey:"plan-data-master",outFailure:b});if(!c?.laborPeak||!Number.isFinite(el(c.laborPeak.count))||0>=el(c.laborPeak.count)){a.lastFailure=b.value||(c?`主表缺劳动力峰值口径(laborPeak=${JSON.stringify(c.laborPeak).slice(0,80)})`:"LLM 调用未返回有效 JSON");return}return{laborPeak:{count:Math.floor(el(c.laborPeak.count)),phase:String(c.laborPeak.phase||"主体施工阶段")},laborByPhase:(c.laborByPhase||[]).filter(a=>a&&Number.isFinite(el(a.count))&&el(a.count)>0).map(a=>({phase:String(a.phase).trim(),count:Math.floor(el(a.count))})),machines:(c.machines||[]).filter(a=>a&&a.name&&Number.isFinite(el(a.count))&&el(a.count)>0).map(a=>({name:String(a.name).trim(),spec:String(a.spec||"").trim(),count:Math.floor(el(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 el(a){if("number"==typeof a)return a;if("string"==typeof a){let b=a.trim();if(""!==b)return Number(b)}return NaN}var em=c(48017);let en=/两可|按图纸|资料[^。;;\n]{0,14}(?:未明确|两可|冲突)|支护[^。;;\n]{0,10}并存/u;async function eo(a){let{chapterDraftsFinal:b,progressStages:c,emitProgress:d}=a,e=a.globalConsistencyIssues,f=b.map(a=>a.content).join("\n\n"),g=(0,bx.t1)(f),h=await (0,M.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,bx.lR)(a.content),d=(0,bx.Vc)(c.markdown),e=(0,bx.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,bx.ub)(a),...(0,bx.cl)(a),...(0,bx.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,aX.fx)(c,(0,aX.X5)({type:"llm_review",roleId:"post-table-dedup",status:"success",message:`补表后确定性去重:${g}`},{subtitle:"表格执行率核验"})),d(b)}let l=await (0,bx.yR)(b);if(l>0){let a=(await (0,bx.LF)(b)).map(a=>`${a.message};${a.suggestion||""}`);e=[...new Set([...e.filter(a=>!/跨章语义重复/u.test(a)),...a])],(0,aX.fx)(c,(0,aX.X5)({type:"llm_review",roleId:"post-table-semantic-dedup",status:"success",message:`补表后语义重复 strip:删除雷同段 ${l} 段`},{subtitle:"表格执行率核验"})),d(b)}return e}async function ep(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,aV.Xi)(b,c),m=!1;if(l.length>0)for(let a=0;a<1&&l.length>0;a+=1){(0,aX.fx)(i,(0,aX.X5)({type:"llm_review",roleId:"table-execution-repair",status:"running",message:`表格执行率修复第 ${a+1} 轮(${l.length} 个章节缺表)`},{subtitle:"表格执行率修复"})),j(c);let n=0,o=[],p=l.flatMap(a=>{let b=c.find(b=>b.title===a.chapterTitle||a.chapterTitle.includes(b.title)||b.title.includes(a.chapterTitle));return b?[{gap:a,draft:b}]:[]}),q=async a=>{let{gap:b,draft:c}=a,i=[...new Set(b.plans.map(a=>a.moduleTitle).filter(Boolean))],j=i.length>0?c.evidence.filter(a=>{let b=a.sectionTitle;return!b||i.some(a=>b===a||b.includes(a)||a.includes(b))}):c.evidence,l={id:c.id,title:c.title,content:c.content,evidence:j.length?j:c.evidence,missingFacts:c.missingFacts||[],sections:c.sections},m=`计划表格缺失(计划 ${b.planned} 张,实际仅 ${b.actual} 张):${b.plans.map(a=>`${a.title}(表头:${a.fields.map(a=>a.name).join("、")})`).join(";")}。必须按表头字段补齐这些 markdown 表格并紧跟相关小节输出,不得删除已有正文;每个表格前须有 1~2 句引导叙述说明表格作用与关键结论,表格不能替代小节正文;deriveFromProject 字段基于项目工程量、总工期与工序流水按定额工效推导具体数值,projectFactOnly 字段不得编造。`;return await k(()=>(0,aY.X6)(h,`table-execution-repair:${c.id}`,()=>(0,aY.l8)({template:d,chapter:l,issues:[m],promptTexts:e,requirement:f,forbidDrawingImages:!0,diagnostics:h,signal:g,maxTokens:Math.min(12e3,Math.max(6e3,1200*b.plans.length))})))},r=await Promise.allSettled(p.map(a=>q(a))),s=new Set;if(r.forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;o.push(`${p[b].gap.chapterTitle}:修复异常(${a.reason instanceof Error?a.reason.message:"未知错误"})`);return}let c=a.value,{gap:d,draft:e}=p[b];c.content&&c.content!==e.content&&!s.has(e.id)?(e.content=c.content,s.add(e.id),n+=1):s.has(e.id)||o.push(`${d.chapterTitle}:缺 ${d.plans.map(a=>a.title).join("、")}(${h?.llm.lastError||"补表 patch 未应用"})`)}),0===n){(0,aX.fx)(i,(0,aX.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,aV.Xi)(b,c),(0,aX.fx)(i,(0,aX.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,aX.fx)(i,(0,aX.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 eq(a){let{chapterDraftsFinal:b,template:c,repairPromptTexts:d,requirement:e,signal:f,generationDiagnostics:g,progressStages:h,emitProgress:i,withProgressHeartbeat:j}=a,k=!1;for(let a=0;a<2;a+=1){let l=b.map(a=>a.content).join("\n\n"),m=await (0,ce.Bt)(l),n=await (0,ce.gE)(l),o=m.ratio>=.1||m.vagueSemanticSentences>0,p=n.countermeasures>0&&n.ratio<.5;if(!o&&!p)break;let q=o?await dN(b):[],r=(p?n.entries.filter(a=>!a.attributed||!a.quantified).slice(0,20):[]).flatMap(a=>{let c=a.text.replace(/\s+/gu,""),d=b.find(a=>a.content.replace(/\s+/gu,"").includes(c));return d?[{chapter:d,text:a.text,missingAttribution:!a.attributed,missingTarget:!a.quantified}]:[]}),s=b.flatMap(a=>{let b=q.filter(b=>(b.chapterId||b.chapterTitle)===(a.id||a.title)).map(a=>a.sentence),c=r.filter(b=>b.chapter.id===a.id).map(a=>({text:a.text,missingAttribution:a.missingAttribution,missingTarget:a.missingTarget}));return b.length>0||c.length>0?[{chapter:a,sentences:b,difficulty:c}]:[]});if(0===s.length)break;(0,aX.fx)(h,(0,aX.X5)({type:"llm_review",roleId:"templating-repair",status:"running",message:`模板化修复第 ${a+1} 轮:套话句占比 ${(100*m.ratio).toFixed(1)}%,重难点双达标 ${(100*n.ratio).toFixed(0)}%(${s.length} 章)`},{subtitle:"模板化修复"})),i(b);let t=0,u=async a=>{let b=[];a.sentences.length>0&&b.push(`第 1~${a.sentences.length} 条目标原文是本章已检出的空话套话句:逐条删除,或改写为“责任岗位 + 执行动作 + 量化标准 + 检查频次 + 整改时限”的具体措施表述;改写必须使用本章证据摘要中的项目事实与量化数据,不得凭空编造数值;属必须保留的合规承诺句可保留但须具体化到可核查。`);let h=a.sentences.length+1;for(let c of a.difficulty){let a=[c.missingAttribution?"归因句(该难点的成因/风险来源)":"",c.missingTarget?"量化控制目标(数值+单位,来自本章证据摘要或行业规范,不得编造)":""].filter(Boolean).join("与");b.push(`第 ${h} 条目标原文是重难点分析条目,缺少${c.missingAttribution&&c.missingTarget?"成因归因与量化控制目标":a}:保留条目原有事实与数值,在其内补充${a}。`),h+=1}return b.push("清单之外的内容一律不得改动;不得删除任何小节标题、表格与数值参数。"),j(()=>(0,aY.X6)(g,`templating-repair:${a.chapter.id}`,()=>(0,aY.l8)({template:c,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[b.join("\n")],promptTexts:d,requirement:e,forbidDrawingImages:!0,diagnostics:g,signal:f,anchorTexts:[...a.sentences,...a.difficulty.map(a=>a.text)],maxTokens:6e3})))};if((await Promise.allSettled(s.map(a=>u(a)))).forEach((a,b)=>{if("rejected"===a.status){if(f?.aborted)throw a.reason;console.error("[gen] templating repair failed:",a.reason);return}let c=a.value,{chapter:d}=s[b];c.content&&c.content!==d.content&&(d.content=c.content,t+=1)}),i(b),0===t){(0,aX.fx)(h,(0,aX.X5)({type:"llm_review",roleId:"templating-repair",status:"failed",message:`模板化修复第 ${a+1} 轮:修复 patch 未落地(${s.length} 章锚点失配或 LLM 未产出)`,details:[`套话句占比 ${(100*m.ratio).toFixed(1)}% 未收敛,重难点双达标 ${(100*n.ratio).toFixed(0)}%`]},{subtitle:"模板化修复"}));break}k=!0}if(k){let a=b.map(a=>a.content).join("\n\n"),c=await (0,ce.Bt)(a),d=await (0,ce.gE)(a),e=c.ratio<.1&&(!d.heavyTemplated||0===d.countermeasures);(0,aX.fx)(h,(0,aX.X5)({type:"llm_review",roleId:"templating-repair",status:e?"success":"failed",message:`模板化修复完成:套话句占比 ${(100*c.ratio).toFixed(1)}%(达标线 ≤10%),重难点归因+量化双达标 ${(100*d.ratio).toFixed(0)}%(达标线 ≥50%)`,details:e?[]:["未完全收敛:残留套话/缺要素条目由评分侧展示,不阻断交付"]},{subtitle:"模板化修复"})),i(b)}return{templatingFixApplied:k}}async function er(a){let{chapterDraftsFinal:b,projectContext:c,template:d,repairPromptTexts:e,requirement:f,signal:g,generationDiagnostics:h,progressStages:i,emitProgress:j,withProgressHeartbeat:k}=a,l=/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目主要施工\s*内容|主要施工\s*内容|主要分部分项工程施工方案|主要分部分项施工方案|主要施工方法)\s*$/u,m=!1,n=0,o=0,p=(0,cR.sh)(c,b.flatMap(a=>a.evidence||[]));if(p.length>0&&!b.some(a=>a.content.split("\n").some(a=>l.test(a.trim())))){let a=b.find(a=>/整体理解|工程概况|项目理解|招标范围|编制边界|现场踏勘|施工界面/u.test(a.title))||b[0];if(a){let c=b.indexOf(a);Array.isArray(a.sections)||(a.sections=[]);let d=a.sections.findIndex(a=>/项目主要施工内容|主要施工内容/u.test(a)),e=d>=0?d+1:(a.sections.push("项目主要施工内容"),a.sections.length),f=`### ${c+1}.${e} 项目主要施工内容`;a.content=`${a.content.replace(/\s+$/u,"")}
|
|
113
113
|
|
|
114
114
|
${f}
|
|
115
115
|
`,m=!0}}for(let a of b){if(0===p.length)continue;let b=a.content;for(let c of a.content.split("\n").map(a=>a.trim()).filter(a=>l.test(a))){let a=c.replace(/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u,""),d=(0,cR.eB)(b,a,p);d!==b&&(b=d,n+=1);let e=(0,cR.qj)(b,a,p);e!==b&&(b=e,n+=1)}a.content=b}for(let a=0;a<2;a+=1){let c=b.flatMap(a=>{if(0===p.length)return[];let b=a.content.split("\n").map(a=>a.trim()).filter(a=>l.test(a)).flatMap(b=>{let c=b.replace(/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u,""),d=(0,cR.ab)(a.content,c,p);return d.length>0?[{headingLine:b,sectionTitle:c,missing:d}]:[]});return b.length>0?[{chapter:a,entries:b}]:[]});if(0===c.length)break;(0,aX.fx)(i,(0,aX.X5)({type:"llm_review",roleId:"workpackage-skeleton-repair",status:"running",message:`工作包骨架补写第 ${a+1} 轮(${c.length} 章)`},{subtitle:"工作包骨架收口"})),j(b);let n=async a=>{let b=a.entries.map((a,b)=>{let c=a.missing.map((a,b)=>`#### ${b+1} ${a}`).join("\n");return`第 ${b+1} 处:「${a.headingLine}」小节内部缺少以下工作包小节(内部结构已由系统从资料锁定):
|
|
116
116
|
${c}
|
|
117
|
-
请在该小节内部按上述标题逐一补齐(标题一字不差,不得增删改、合并或调序),每个工作包小节按三要素展开正式正文:作业对象与工程量(什么部位、什么规模)、工序顺序(先后顺序清晰)、施工方法(工艺做法、工艺参数、验收检测)。已有内容一律不得改动,不得删除任何已有小节与段落,不得输出 Markdown 表格。`});return k(()=>(0,aY.X6)(h,`workpackage-skeleton-repair:${a.chapter.id}`,()=>(0,aY.l8)({template:d,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[b.join("\n"),"清单之外的内容一律不得改动;不得删除任何小节标题、表格与数值参数。"],promptTexts:e,requirement:f,forbidDrawingImages:!0,diagnostics:h,signal:g,anchorTexts:a.entries.map(a=>({text:a.headingLine,append:!0})),maxTokens:6e3})))},q=await Promise.allSettled(c.map(a=>n(a))),r=0;if(q.forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;console.error("[gen] workpackage skeleton repair failed:",a.reason);return}let d=a.value,{chapter:e}=c[b];d.content&&d.content!==e.content&&(e.content=d.content,r+=1,o+=1)}),j(b),0===r)break;m=!0}return(m||n>0)&&((0,aX.fx)(i,(0,aX.X5)({type:"llm_review",roleId:"workpackage-skeleton-repair",status:"success",message:`工作包骨架收口完成:表格剥离 ${n} 处、骨架补写 ${o} 章`},{subtitle:"工作包骨架收口"})),j(b)),{skeletonFixApplied:m}}async function er(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,planDataMaster:o}=a,p=[],q=!1;try{let r=a.globalReviewSamplingRate??1,t=r>=1||b.length<=2?b:b.filter((a,b)=>b%Math.max(2,Math.round(1/r))==0),u=t.length,v=async()=>{let a=b.map(a=>a.content).join("\n\n"),[e,j]=await Promise.all([n(()=>bi({template:c,chapters:t,chapterReviews:[],promptTexts:d,requirement:f,projectContext:h,diagnostics:i,signal:g})),bE(a,{diagnostics:i,signal:g})]);return{issues:[...new Set([...e.issues,...j.map(a=>{let b={level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`数据一致性矛盾(${a.kind}):${a.description}(原文 A:“${a.itemA.slice(0,60)}” ↔ 原文 B:“${a.itemB.slice(0,60)}”)`,suggestion:"全文数据必须一致:以绑定资料(图纸/清单/招标文件)为准选定唯一值,统一矛盾数值对,删除或修正其余矛盾表述。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。"};return`${b.message};${b.suggestion||""}`})])],stage:e.stage}},w=[],x=async()=>{let a=b.map(a=>a.content).join("\n\n"),c=(0,bx.t1)(a),d=await (0,M.Mv)(c.sentences,c.overviewBody?[c.overviewBody]:[]);return[...(await (0,s.qm)(a,j,k)).filter(a=>/跨章一致性冲突/u.test(a.message)),...(await (0,s.hr)(a,j)).filter(a=>"error"===a.level),...(0,bx.rA)(a),...(0,bx.Et)(a),...(0,bx.H)(a),...(0,bx.$$)(a,j.specAuthorityMap),...(0,bx.N$)(a),...(0,bx.Fr)(a),...(0,bx.bq)(a),...(0,bx.vH)(a),...(0,bx.cT)(a),...(0,bx.ub)(a),...(0,bx.cl)(a),...(0,bx.zP)(a),...await (0,bx.r8)(a,z),...await (0,bx.sn)(a),...(0,bx.l4)(a,{semanticSimilarity:d}),...await (0,bx.LF)(b)].map(a=>`${a.message};${a.suggestion||""}`)},y=await v(),z=(0,bx.P3)(j),A=(0,bx.z4)(j),B=y.issues;w=await x(),p=[...new Set([...B,...w])];let C=0;for(let a of b){let b=(0,bx.fE)(a.content,{...(0,bx.Ep)(o),supportAuthority:z});b.fixedCount>0&&(a.content=b.markdown,C+=b.fixedCount)}C>0&&(w=await x(),p=[...new Set([...B,...w])]);let D=!1;for(let a=0;a<1&&p.length>0;a+=1){(0,aX.fx)(l,(0,aX.X5)({type:"llm_review",roleId:"global-consistency-repair",status:"running",message:`跨章一致性冲突第 ${a+1} 轮定向修复(${p.length} 个冲突)`},{subtitle:"跨章一致性修复"})),m(b);let d=0,h=b.flatMap(a=>{let b=a.content.replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡"),c=p.filter(c=>{if(c.includes(a.title))return!0;if(/基坑深度数值未锁定/u.test(c))return/基坑|支护|开挖|土方|降水/u.test(a.title)||a.content.includes("基坑");if((c.match(/不一致的表述\s*([^;;。\n]+)/u)?.[1]||"").split(/[、,,]/u).some(a=>{let c=a.trim().replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡");return c.length>=3&&b.includes(c)}))return!0;let d=c.match(/正文([^配比厚度\s]{1,6}?)(?:配比|厚度)/u)?.[1];return!!(d&&a.content.includes(d)||[...c.matchAll(/“([^”]{6,80})”/gu)].some(a=>b.includes(a[1].replace(/\s+/gu,""))))||[...c.matchAll(/(\d[\d,,.]*)\s*(?:人|台|日|个|次|天|月|套|具|处|项|条)/gu)].some(a=>b.includes(a[0].replace(/\s+/gu,"")))});return c.length>0?[{chapter:a,related:c}]:[]});if((await Promise.allSettled(h.map(({chapter:a,related:b})=>n(()=>(0,aY.X6)(i,`global-consistency-repair:${a.id}`,()=>(0,aY.l8)({template:c,chapter:{id:a.id,title:a.title,content:a.content,evidence:a.evidence||[],missingFacts:a.missingFacts||[],sections:a.sections},issues:b.map(a=>{let b=/重复/u.test(a)?"请删除本冲突描述的重复内容(保留首次出现的完整版本),不得改动其余正文。":/基坑深度数值未锁定/u.test(a)?void 0!==A?`请在本章基坑支护/开挖小节写出确定性的基坑开挖深度表述:本工程基坑开挖深度为 ${A}m(权威口径来自图纸标注,严禁写其他深度数值或「按图纸确定」类回避表述),并同步保留既有危大工程分级标注。`:"请从本章证据摘要中的图纸标注/勘察资料锁定基坑开挖深度数值,以确定性表述写入基坑支护小节(严禁「按图纸确定」类回避表述),不得编造数值。":/规格错位/u.test(a)?"请按冲突描述中的工程量清单权威规格修正本章对应部位的规格表述:同一材料不同部位允许不同规格,同一部位只允许权威规格,禁止把多种规格全文归一为一种。":"请严格按冲突描述中给出的资料口径修正本章对应表述,不得引入新的数值;与资料口径一致的既有表述(含分层/子项数值)不得改动;同一材料多种规格按所属部位/分部分项分别使用,禁止全文统一为一种规格。";return`${a};${b}`}),promptTexts:e,requirement:f,forbidDrawingImages:!0,diagnostics:i,signal:g})))))).forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;console.error("[gen] global consistency repair failed:",a.reason);return}let c=a.value,{chapter:e}=h[b];c.content&&c.content!==e.content&&(e.content=c.content,d+=1)}),0===d){D&&(B=(await v()).issues);break}m(b);let j=await x();w=j,0===a||0===j.length?(B=(await v()).issues,D=!1):D=!0,p=[...new Set([...B,...j])],(0,aX.fx)(l,(0,aX.X5)({type:"llm_review",roleId:"global-consistency-review",status:p.length>0?"failed":"success",message:p.length>0?`跨章一致性复检:仍有 ${p.length} 个冲突`:"跨章一致性复检通过"},{subtitle:"全局一致性审查"})),m(b)}await ep({chapterDraftsFinal:b,template:c,repairPromptTexts:e,requirement:f,signal:g,generationDiagnostics:i,progressStages:l,emitProgress:m,withProgressHeartbeat:n}),await eq({chapterDraftsFinal:b,projectContext:h,template:c,repairPromptTexts:e,requirement:f,signal:g,generationDiagnostics:i,progressStages:l,emitProgress:m,withProgressHeartbeat:n});let E=await (0,s.KI)(b,j,k),F=(0,bx.GG)(j),G=(0,bx.hI)(j),H=(0,bx.Pt)(j),I=(0,bx.Ep)(o),J=(0,bx.dc)(b.map(a=>a.content).join("\n\n")),K=0;for(let a of b){let b=(0,bx.fE)(a.content,{scheduleAuthority:F,assemblyRateAuthority:G,...I,supportAuthority:z,laborPeakAuthority:J});b.fixedCount>0&&(a.content=b.markdown,K+=b.fixedCount)}let L=b.map(a=>a.content).join("\n\n"),N=(0,bx.t1)(L),O=await (0,M.Mv)(N.sentences,N.overviewBody?[N.overviewBody]:[]),P=0,Q=0,R=0,S=0,T=0,U=0,V=(0,bx.qG)(b);for(let a of(P+=V.removedCount,b)){let b=a.content.split(/\r?\n/u).length,c=(0,bx.lR)(a.content),d=(0,bx.Vc)(c.markdown),e=(0,bx.U$)(d.markdown,O),f=(0,bx.$h)(e),g=(0,bx.EN)(f.markdown,{areaSummary:H,scheduleDays:F}),h=(0,bx.K2)(g.markdown),i=h.markdown.split(/\r?\n/u).length,j=b-i,k=f.fixedCount-0+g.fixedCount+h.fixedCount;S+=f.fixedCount,T+=g.fixedCount,U+=h.fixedCount,(j>0||k>0)&&(P+=c.removedCount,Q+=d.removedCount,R+=j-c.removedCount-d.removedCount,a.content=h.markdown)}let W=await (0,bx.yR)(b),X=0,Y=0,Z=0,$=0,_=0,aa=0,ab=0;for(let a of b){let b=(0,bx.ir)(a.content);b.fixedCount>0&&(a.content=b.markdown,X+=b.fixedCount);let c=(0,bx.xp)(a.content);c.fixedCount>0&&(a.content=c.markdown,Y+=c.fixedCount);let d=await (0,bx.lv)(a.content);d.fixedCount>0&&(a.content=d.markdown,Z+=d.fixedCount);let e=(0,bx.Co)(a.content);e.fixedCount>0&&(a.content=e.markdown,$+=e.fixedCount);let f=(0,bx.zj)(a.content);f.fixedCount>0&&(a.content=f.markdown,_+=f.fixedCount);let g=(0,bx.SZ)(a.content);g.fixedCount>0&&(a.content=g.markdown,aa+=g.fixedCount);let h=(0,bx.GI)(a.content);h.fixedCount>0&&(a.content=h.markdown,ab+=h.fixedCount)}if(q=!0,E.fixedCount>0||K>0||P>0||Q>0||R>0||W>0||S>0||T>0||U>0||X>0||Y>0||Z>0||$>0||_>0||aa>0||ab>0){w=await x(),p=[...new Set([...B,...w])];let a=[E.fixedCount>0?`数值 ${E.fixedCount} 处`:"",K>0?`跨章数值 ${K} 处`:"",P>0?`重复表格 ${P} 行`:"",Q>0?`重复段落 ${Q} 行`:"",R>0?`概况复述句 ${R} 行`:"",W>0?`跨章语义重复段 ${W} 段`:"",X>0?`自伤表述改写 ${X} 处`:"",Y>0?`危大辨识补漏 ${Y} 项`:"",Z>0?`扬尘六个百分百补写 ${Z} 项`:"",$>0?`内部术语清洗 ${$} 处`:"",_>0?`无表头表格补齐 ${_} 处`:"",aa>0?`两可表述归一 ${aa} 处`:"",ab>0?`配置污染清洗 ${ab} 处`:""].filter(Boolean).join("、");(0,aX.fx)(l,(0,aX.X5)({type:"llm_review",roleId:"global-consistency-deterministic-fix",status:"success",message:`跨章一致性定点修复:${a}${E.details.slice(0,4).length>0?`(${E.details.slice(0,4).join("、")})`:""}`,details:E.details.slice(4)},{subtitle:"跨章一致性修复"})),m(b)}let ac=w.filter(a=>!em.test(a)),ad=[...B,...w.filter(a=>em.test(a))],ae=ac.length>0?"failed":"success",af=ac.length>0?`跨章一致性修复完成:仍残留 ${ac.length} 个可修复冲突(已记录,由交付门禁兑底)`:ad.length>0?`跨章一致性修复完成:确定性冲突已全部消除;另有 ${ad.length} 个审查提示/资料两可项(已记录,由交付门禁复核)`:"跨章一致性修复完成:冲突已全部消除";(0,aX.fx)(l,(0,aX.X5)({type:"llm_review",roleId:"global-consistency-repair",status:ae,message:af},{subtitle:"跨章一致性修复"})),m(b);let ag=u<b.length?{...y.stage,message:`${y.stage.message||"全局一致性审查完成"}(抽检 ${u}/${b.length} 章)`}:y.stage;(0,aX.fx)(l,ag),m(b)}catch(a){if(g?.aborted)throw a;console.error("[gen] global consistency review failed:",a)}return{issues:p,dedupRan:q}}async function es(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,a$.Hh)(f,b,{requirement:a.requirement}),j=(0,a$.W9)(f,b,{requirement:a.requirement}),{kindByPath:k,processingByPath:l}=(0,a$.Hz)(j),m=new Set(i),q=(0,br.Zq)(f,i),r=new Map([...k.entries()].map(([a,b])=>[a,(0,a$._W)(b)])),s=new Map([...l.entries()].map(([a,b])=>[a,b])),t=dC(await h.getProject(f),[...m],a.maxEvidencePerChapter),u=[],v=[...m].filter(Boolean).sort(),w=dy(c,c.queries,[]),x=function(a,b){let c=Number(process.env.DOCUMENT_MAX_QUERIES_PER_CHAPTER);return Math.max(2,Math.min(9,Math.floor(Number.isFinite(c)&&c>0?c:4)+ +((a.sections||[]).length>=6||a.requiredFacts.length>=8)+Math.min(2,b.length)))}(c,[]);for(let a of w.slice(0,x)){let b=await h.search(f,a,{scope:"project",filters:{filePaths:v},limit:Math.min(t,12),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15},generationMode:!0});u.push(...b.results.filter(a=>(0,aY.Tz)(f,a.filePath,m)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:r.get(a.filePath),processingType:s.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let y=dx(c,(0,br.Su)(u.filter(a=>(0,aY.Tz)(f,a.filePath,m)),q),{maxItems:function(a,b,c=!1){return Math.max(12,Math.min(c?58:26,a+10+4*((b.sections||[]).length>=6||b.requiredFacts.length>=8)+18*!!c))}(t,c),maxChars:16e3,preservePinned:!0});(0,br.U2)(y,q,`regenerate:${c.id}`);let z=a.currentMarkdown||"",A=new Set(a.existingFacts??[]),B=c.requiredFacts.filter(a=>!A.has(a)&&!y.some(b=>(0,p.Lk)(b,a)));if(0===y.length)throw Error(`${(0,o.GQ)(c.title)} 缺少可支撑正文的项目资料证据`);let C=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",z?`> 当前文档上下文摘要:${z.replace(/\s+/gu," ")}`:"",`本章依据已锁定项目资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`,"","### 资料依据",...y.map(n.OF)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:C,evidence:y,missingFacts:B}}async function et(a){(0,u.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 v=(0,f.computeProjectId)(c),B=b,S=(0,g.Qh)(),T=[],U=[],W=(b,c=ad)=>{let d=b?[...b].sort((a,b)=>{let c=U.indexOf(a.id),d=U.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)},X=Math.max(15e3,Math.min(6e4,Number(process.env.DOCUMENT_GENERATION_HEARTBEAT_MS??3e4))),Y=async(b,c=ad)=>{let d=setInterval(()=>{a.signal?.aborted||W(T,c)},X);try{return await b()}finally{clearInterval(d)}},Z=(0,d.N6)(B)||"none",ac=(0,i.Mu)(Z)?.name||Z,ad=[(0,aX.X5)({type:"role_binding",roleId:Z,status:"running",message:`生成任务已创建,正在读取模板与角色配置:${B.name}`,details:[`当前项目:${v}`,`资料目录:${(0,g.NW)(c)}`,"正在读取项目资料包和提示词配置"],progress:{current:1,total:4,label:"初始化配置"}},{subtitle:ac,roleName:ac,order:0})];W();let af=(0,d.bj)(B),ag=af.bindings;(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在分析模板规范、用户要求与项目资料包",details:["解析 OUTLINE 与模板章节","读取项目资料包","自动识别资料类型并构建项目理解"],progress:{current:1,total:3,label:"准备分析"}},{subtitle:"生成准备",order:ad.length})),W();let ah=(0,cQ.Qu)({template:B,requirement:a.requirement,projectRoot:c,facts:[]}).materialScope.selectedFiles;if(0===ah.length)throw Error("模板未绑定可用项目资料包,请先在模板中绑定需要参与生成的项目文件夹。");let am=(0,a$.W9)(c,B,{requirement:a.requirement}),as=(0,a$._n)(B,am),{kindByPath:at,processingByPath:au}=(0,a$.Hz)(am),av=(0,aY.fC)([...af.writerPrompts,...af.chapterPrompts]),aw=(0,o.cs)([{text:a.requirement,source:"用户需求",strict:!0},{text:av,source:"提示词角色",strict:!0}]),ax=aw.length>=2;ax&&(B={...b,chapters:aw});let ay=await Y(()=>Promise.resolve((0,k.P)(c,{requirement:a.requirement,boundFilePaths:ah})));(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在生成自动文档规格并评估生成准备度",details:[`项目资料:${ah.length} 份`,`资料类型:${Object.values(am.groups).filter(a=>a.length>0).length} 类`,"生成事实字段与章节约束"],progress:{current:2,total:3,label:"规格评估"}},{subtitle:"生成准备",order:ad.length})),W();let az=await Y(()=>Promise.resolve((0,j.x)(B,a.requirement||""))),aD=az.spec,aE=(0,l.$i)(B,a.requirement||""),aF=(0,m.$)({template:B,spec:aD,summary:ay,resolvedRoles:[]});if(!aF.ready)throw Error(`生成准备度不足:${aF.blockingIssues.join(";")}`);let aG=['【全文写作硬约束(每一章生成时必须遵守,违反即评审失分)】\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. 禁止商务投标函内容:投标/评标纪律承诺、廉洁承诺、廉洁自律、行贿、串标、围标、弄虚作假、干扰评标等商务投标函条款与承诺一律不得写入施工组织设计正文(招标文件中的此类条款属商务文件应响应内容,不是技术标内容);本节只写技术方案与管理措施,不得以承诺句形式响应此类条款。',as.prompt,(0,k.F)(ay,{publicSafe:!0}),(0,j.N)(aD,az.sourceHash,{publicSafe:!0}),(0,m.R)(aF,{publicSafe:!0})].filter(Boolean).join("\n\n"),aH=a.previousSignals?(0,el._2)(a.previousSignals):"",aK=[as.prompt,(0,k.F)(ay),(0,j.N)(aD,az.sourceHash),(0,m.R)(aF)].filter(Boolean).join("\n\n"),aL=(0,aY.fC)([...af.writerPrompts,...af.formattingPrompts]),aM=(0,aY.fC)([...af.writerPrompts,...af.chapterPrompts,...af.formattingPrompts]),aO=(0,aY.fC)(af.prompts),aP=(0,h.I)().load().webAccess||{enabled:!1,allowProjectFacts:!1,maxQueriesPerChapter:2,maxResultsPerQuery:3,trustedDomains:[]},aQ=(0,aI.c_)({promptTexts:[aG,aO].filter(Boolean).join("\n\n"),requirement:a.requirement,template:B,rolePrompts:af.prompts}),aR=[(0,aI.el)(aQ),!aP.enabled?"":"公开资料补充使用规则:\n1. 公开资料只可用于补充通用规范、政策、工艺和措施。\n2. 不得使用公开资料新增或修改项目名称、建设地点、建设规模、工期、质量标准、工程量、材料规格、图纸参数、商务数据。\n3. 本地项目资料与公开资料冲突时,必须以本地项目资料为准。\n4. 不得在正文中出现任何检索过程、外部页面、工具调用或系统内部过程性表述。\n5. 不得把公开资料中的其他项目案例参数写入本项目正文。"].filter(Boolean).join("\n\n"),aS=[aG,aR,`生成前规划章节结构:
|
|
118
|
-
${(0,q.CK)(B)}`,aL||aM].filter(Boolean).join("\n\n"),a0=[aK,aR,(0,aY.fC)([...af.extractionPrompts,...af.referencePrompts])].filter(Boolean).join("\n\n"),a1=[aG,aR,(0,aY.fC)([...af.writerPrompts,...af.chapterPrompts,...af.formattingPrompts])].filter(Boolean).join("\n\n"),a2=[aG,aR,(0,aY.fC)(af.formattingPrompts)].filter(Boolean).join("\n\n");(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"document-preparation",status:"success",message:`模板规范与项目资料理解完成,识别 ${ah.length} 份项目资料`,details:[`提示词绑定:${ag.length} 个`,`项目资料包:${am.materialRoots.join("、")||"当前知识库"}`,ax?`识别 OUTLINE 章节:${aw.length} 个`:"未识别显式 OUTLINE,使用模板章节"],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备",order:ad.length})),W(),a.previousSignals&&((0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"previous-version-inheritance",status:"success",message:`版本继承:提取上一版《${a.previousSignals.versionTitle}》结构 ${a.previousSignals.structureLines.length} 项、关键口径 ${a.previousSignals.factLines.length} 条、已知问题 ${a.previousSignals.issueLines.length} 项作为生成参照`,details:[...a.previousSignals.structureLines.slice(0,6).map(a=>`沿用参考:${a}`),"旧版数据仅作参照,与项目资料不一致处一律以资料为准"]},{subtitle:"版本继承",order:ad.length})),W());let a3=new Set(ah),a4=new Map([...at.entries()].map(([a,b])=>[a,(0,a$._W)(b)])),a5=new Map([...au.entries()].map(([a,b])=>[a,b]));(0,aX.fx)(ad,(0,aX.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:"running",message:"正在读取项目资料包索引",details:["使用上传阶段已完成的解析、切片和索引结果","不在生成流程中重新解析或入库","准备按资料类型召回章节证据"],progress:{current:1,total:3,label:"读取索引"}},{subtitle:"知识库检索",order:ad.length})),W();let a6=await Y(()=>S.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=[...dA("部分绑定文件未完成索引,已自动跳过",f),...dA("部分绑定文件没有可用切片,已自动跳过",g),...dA("部分绑定文件索引失败,已自动跳过",h)],o=c.size>0&&0===m?["所有绑定文件均无可用切片"]:[],p=[...n,...i>0?[`仍有 ${i} 个待索引任务,建议等待索引完成后生成`]:[],...j&&"ready"!==j.status?[`向量索引状态为 ${j.status},当前召回质量可能下降`]:[]];return{scopedRecords:d,usablePaths:l,missingFiles:f,emptyFiles:g,errorFiles:h,pendingJobs:i,vectorStatus:j,usableChunkCount:m,blockingIssues:o,warnings:p}}(a6,[...a3]);if(a7.blockingIssues.length>0)throw Error(`生成前知识索引不可用:${a7.blockingIssues.join(";")}`);let a8=new Set(a7.usablePaths),a9=(0,br.Zq)(v,[...a8]),ba=dC(a6,[...a8],a.maxEvidencePerChapter),bb=a7.pendingJobs>0||0===a7.usableChunkCount,bf=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*ah.length),loadedChunks:Math.min(a7.usableChunkCount,20*ah.length),vectorReady:a7.vectorStatus?"ready"===a7.vectorStatus.status:void 0});(0,aX.fx)(ad,(0,aX.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:bb?"failed":"success",message:`已读取知识索引:项目资料 ${a7.scopedRecords.length} 份,可用切片 ${a7.usableChunkCount} 条`,details:[`项目资料:${a3.size} 份`,`可用证据文件:${a8.size} 份`,`向量状态:${a7.vectorStatus?.status||"unknown"}`,...a7.warnings,"后续将按招标正文/清单/图纸/补疑等资料类型召回"],progress:{current:3,total:3,label:"索引已就绪"}},{subtitle:"知识库检索",order:ad.length})),W(),(0,u.Te)(a.signal);let bg=[],bh=[],bi={enabled:aP.enabled,queries:[],evidenceCount:0,filteredCount:0,chapters:[]},bj=[],bk=[],bl=[],bm=[],bn=[],bo=-1,bp=new Map,bs=new Map,bt=a=>{let b=`${a}::full`;if(!bs.has(b))try{bs.set(b,a6.getFileDetail?.(a))}catch{bs.set(b,void 0)}return bs.get(b)},bu=async(a,b,d,e)=>{let f=dt(e),g="0"!==process.env.DOCUMENT_GENERATION_RERANKER,h=(0,u.c6)({query:a,scopedFilePaths:b,limit:d,weights:f,generationMode:!0,reranker:g}),i=bp.get(h);if(i)return i;let j=await S.search(c,a,{scope:"project",filters:{filePaths:b},limit:d,weights:f,generationMode:!0,disableReranker:!g}).catch(()=>null),k=j?.results||[];return bp.set(h,k),k},bv={stage:(0,aX.X5)({type:"file_understanding",roleId:"project-understanding",status:"success",message:`已完成项目资料理解:${am.files.length} 份资料,${Object.values(am.groups).filter(a=>a.length>0).length} 类资料类型`,details:as.prompt.split("\n").slice(0,16)},{subtitle:"项目资料理解",order:ad.length})};(0,aX.fx)(ad,bv.stage),W();let bw=(0,br.Su)(await cV({manager:S,project:a6,projectRoot:c,scopedFilePaths:[...a3].filter(Boolean).sort(),fileRoleByPath:a4,fileProcessingByPath:a5,signal:a.signal}),a9);(0,br.U2)(bw,a9,"project-basic-evidence"),bw.length>0&&(bg.push(...bw),(0,aX.fx)(ad,(0,aX.X5)({type:"knowledge_retrieval",roleId:"project-basic-evidence",status:"success",message:`已锁定项目基础事实证据 ${bw.length} 条`,details:bw.slice(0,8).map(a=>`${e.basename(a.filePath)}|${a.sectionTitle||"正文片段"}|score=${a.score.toFixed(2)}`)},{subtitle:"基础事实召回",order:ad.length})),W());let{safe:bx,excluded:by}=await (0,N.a0)(bg),bz=await (0,N.M8)();by.length>0&&((0,aX.fx)(ad,(0,aX.X5)({type:"knowledge_retrieval",roleId:"evidence-content-safety",status:"success",message:`证据内容安全过滤:${by.length} 条投标程序/评标纪律类证据已从写作链断开(系统侧提取通道不受影响)`,details:by.slice(0,6).map(a=>`${e.basename(a.filePath)}|${a.sectionTitle||"正文片段"}`)},{subtitle:"证据内容安全",order:ad.length})),W());let bA=bw.filter(a=>!by.includes(a)),bB=new Set(by.map(N.hM)),bD=(0,Q.d6)({evidence:bx,template:B,spec:aD,profile:aE,scope:a9}),bE=bD.localFacts,bF=bD.projectBasicFacts,bG=[...bE,...bF,...bD.preciseFacts],bH=(0,ee.hp)({projectRoot:c,template:B,requirement:a.requirement}),bI=[...bH?.facts||[],...bG,...cF(bx)],bJ=await (0,Q.d7)(bI,bD.structuredTables,bj,aD,aE),bK=(0,cQ.Qu)({template:B,requirement:a.requirement,projectRoot:c,facts:bI,projectGraph:bH?.projectGraph,projectGraphSource:bH?"project-intelligence":void 0});for(let a of(0,cQ.SU)(bK))(0,aX.fx)(ad,a);bH&&(0,aX.fx)(ad,(0,aX.X5)({type:"file_understanding",roleId:"project-intelligence-cache",status:"success",message:`已复用入库后项目理解资产与绑定 scope 快照:${bH.files.length} 份绑定资料`,details:[`项目级缓存时间:${new Date(bH.cache.createdAt).toLocaleString()}`,`scope 快照:${bH.scopeSnapshot.scopeHash.slice(0,12)}`,`复用预计算事实:${bH.facts.length} 条`,`复用预计算项目图谱:${bH.projectGraph.works.length}工程/${bH.projectGraph.methods.length}工法/${bH.projectGraph.resources.length}资源`,`复用施工组织设计专项图谱:${bH.constructionOrganizationGraph.workPackages.length} 个工作包/${bH.constructionOrganizationGraph.controlMatrix.length} 条控制矩阵`,`图谱来源:${bH.cache.projectGraphMessage}`,`章节意图证据覆盖:${Object.keys(bH.evidenceByChapterId||{}).length}/${B.chapters.length} 章`,`排除正文不适用资料:${bH.files.filter(a=>!a.usableForBody).length} 份`]},{subtitle:"项目理解缓存 / Scope 快照"})),W();let bL=bK.baseProjectGraph;if(!bH){(0,aX.fx)(ad,(0,aX.X5)({type:"file_understanding",roleId:"project-graph",status:"running",message:`正在临时构建完整项目图谱:${bg.length} 条证据 → LLM 结构化提取`,details:["缓存缺失或版本过期,建议重新构建项目理解缓存;本次生成将临时构建完整项目图谱。","提取:工程内容、施工方法、材料设备、技术标准、重点难点"],progress:{current:2,total:3,label:"项目图谱"}},{subtitle:"项目资料图谱分析",order:ad.length})),W();let b=await Y(()=>(0,ed.i)({evidence:bx,signal:a.signal,projectRoot:c,requirement:a.requirement,templateId:B.id}),ad);if(!b.graph)throw Error(`完整项目图谱构建失败:${b.stage.message||b.stage.status}`);bL=b.graph,(0,aX.fx)(ad,b.stage),W()}bL&&(as=(0,a$._n)(B,am,bL));let bM=cP({facts:bI,projectGraph:bL,requiredKeys:cx.map(a=>a.key),projectRoot:c,requirement:a.requirement,templateId:B.id});bJ.canonical=bM;let bN=(0,o.effectiveTemplateChapters)(B,aD,{preserveExplicitOutline:ax}),bO=(0,K.dK)({template:B,chapters:bN,requirement:a.requirement}).chapters,bP=bg.filter(a=>/评审|评分标准|评分办法|详细评审/u.test(`${a.sectionTitle||""}${a.content}`)).map(a=>a.content),bQ=(0,L.tL)(bP);bP.length>0&&0===bQ.length&&(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"bid-structure-audit",status:"skipped",message:"评审章节证据存在但未提取到评分条目标题:评分标准编号条目提取为空,承接审计将静默通过",details:["请检查招标文件评标办法章节编号格式;评分项要求(创优目标/绿色等级/禁编日期)由评分项要求提取通道覆盖"]},{subtitle:"评标结构校验",order:ad.length}));let bR=await (0,M.Mv)(bQ.map(a=>a.title),bO.map(L.Yx)),bS=(0,L.KX)({template:B,chapters:bO,requirement:a.requirement,evaluationItems:bQ,semanticSimilarity:bR}),bT=(async()=>{try{var b;let d,f=[];for(let a of[...a3].sort()){if(!/招标|补疑|答疑|评标/u.test(a))continue;let b=bt(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:a4.get(a),processingType:a5.get(a),sectionTitle:c.sectionTitle,source:"pinned-evidence"})}let g=f.length>0?await ai(f):(0,n.QR)([...bg.filter(a=>/招标|评标|投标须知|专用合同|合同条款|技术标准|技术要求/u.test(`${a.filePath||""}${a.sectionTitle||""}`)),...bg.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,aX.fx)(ad,(0,aX.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:ad.length})),W()}let h="0"!==process.env.DOCUMENT_EXTRACTION_CACHE?(b={collectionEvidence:f,preselectEvidence:g},(0,u.c6)({version:"tender-requirements-extraction-v3",collection:ap(b.collectionEvidence),preselectInput:ap(b.preselectEvidence)})):void 0,i=h?function(a,b){try{let c=e.join(ao(a),`tender-requirements-${b}.json`),d=JSON.parse(O.readFileSync(c,"utf8"));if(!an(d)||ak(d))return;return d}catch{return}}(c,h):void 0;if(i)d=i,(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"tender-requirements-cache",status:"success",message:"复用上次提取结果(招标文件与预筛输入哈希命中,跳过主提取/窄通道 LLM)",details:aC(d)},{subtitle:"评分项要求提取\xb7缓存复用",order:ad.length})),W();else{d=await Y(()=>V(g,{signal:a.signal})),!an(d)&&g.length>0&&(d=await Y(()=>V(g,{signal:a.signal})));let b=await aj(f),i=aa(d);if(b.length>0&&i.length>0){let c=await Y(()=>V(b,{signal:a.signal}));an(c)&&(d=al(d,c),(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"tender-mandatory-extraction",status:"success",message:"必提条款窄通道补提完成(主提取漏提字段已补齐)",details:aC(c)},{subtitle:"评分项要求提取\xb7必提补提",order:ad.length})),W())}let j=[];if(ab(d).length>0&&f.length>0){let b=await Y(()=>ae(d,f,{signal:a.signal}));d=b.model,j=b.stillGaps;let c=b.noEvidenceGaps,e=b.stillGaps;0===b.stillGaps.length&&((0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"tender-field-gap-extraction",status:"success",message:"评分项要求字段定向补提完成(字段级聚焦提取,全部评分项要求字段已提取)",details:aC(d)},{subtitle:"评分项要求提取\xb7字段补提",order:ad.length})),W());let g=a=>$.includes(a);if(e.length>0){let a=e.filter(g),b=e.filter(a=>!g(a)),c=[a.length>0?`必提字段 ${a.map(a=>_(a)).join("、")}`:"",b.length>0?`常规字段 ${b.map(a=>_(a)).join("、")}`:""].filter(Boolean);(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"tender-field-gap-missing",status:"skipped",message:`字段定向补提后仍缺失:${c.join(";")}(条款窗口证据存在但 LLM 提取失败)`,details:["请检查 LLM 可用性与输出质量;正文将无法显性响应上述评分项要求"]},{subtitle:"评分项要求提取\xb7字段缺口",order:ad.length})),W()}if(c.length>0){let a=c.filter(g),b=c.filter(a=>!g(a)),d=[a.length>0?`必提字段 ${a.map(a=>_(a)).join("、")}`:"",b.length>0?`常规字段 ${b.map(a=>_(a)).join("、")}`:""].filter(Boolean);(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"tender-field-gap-no-evidence",status:"skipped",message:`${d.join(";")}:招标资料中未找到对应条款(判定为无此要求,非漏提)`,details:["若项目实际存在该要求,请检查招标文件相关章节切片完整性"]},{subtitle:"评分项要求提取\xb7字段缺口",order:ad.length})),W()}}h&&0===j.length&&function(a,b,c){if(!(!c||!an(c)||ak(c)))try{O.writeFileSync(e.join(ao(a),`tender-requirements-${b}.json`),JSON.stringify(c,null,2))}catch{}}(c,h,d)}return an(d)?((0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"success",message:"招标文件评分项要求结构化提取完成",details:aC(d)},{subtitle:"评分项要求提取",order:ad.length})),W()):g.length>0&&((0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"skipped",message:"评分项要求提取未获得有效结果(模型不可用或资料中无要求),零响应检测自动跳过",details:[]},{subtitle:"评分项要求提取",order:ad.length})),W()),d}catch(a){return(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"skipped",message:"评分项要求提取链异常,已降级为空模型(零响应检测自动跳过)",details:[`异常信息:${a instanceof Error?a.message:String(a)}`,"请检查 LLM 可用性与本地语义模型状态"]},{subtitle:"评分项要求提取",order:ad.length})),W(),R(!1)}})(),bU=(0,aV.w9)({chapters:bS.enrichedChapters,projectGraph:bL,canonicalFacts:bM});B={...B,chapters:bU};let bV=(0,ef.NP)({template:B,context:bK,title:B.name});bV.catch(()=>void 0);let bW=new Map;if(bL){let a=new Set;for(let b of[...bL.works,...bL.methods,...bL.resources,...bL.schedule,...bL.standards,...bL.risks,...bL.requirements,...bL.siteConditions])(b.sourceFiles||[]).forEach(b=>a.add(b));for(let b of bU){let c=[b.title,b.purpose,...b.sections||[],...b.requiredFacts||[],...b.queries||[]].join(" "),d=a=>a&&((0,eh.C1)(a,c,.18)||(0,eh.C1)(a,b.title,.12)),e=/概况|总体|部署|施工|进度|工期|质量|安全|资源|人材机|材料|机械|劳动力|风险|危大|绿色|环保/u.test(c),f=bL.works.filter(a=>a.name&&(d(a.name)||e)),g=bL.methods.filter(a=>a.name&&(d(a.name)||(a.applicableWorks||[]).some(d)||e)),h=bL.resources.filter(a=>a.name&&(d(a.name)||/资源|人材机|材料|机械|劳动力/u.test(c)&&/material|equipment|labor/u.test(a.type))),i=bL.gaps.filter(a=>!(0,ee.Ut)(a)&&(d(a)||e)),j=new Set;for(let a of f)(a.sourceFiles||[]).forEach(a=>j.add(a));for(let a of g)(a.sourceFiles||[]).forEach(a=>j.add(a));for(let a of h)(a.sourceFiles||[]).forEach(a=>j.add(a));0===j.size&&e&&[...a].forEach(a=>j.add(a)),bW.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})}bH||((0,aX.fx)(ad,(0,aX.X5)({type:"file_understanding",roleId:"project-graph-match",status:"success",message:`图谱→章节映射完成:${bL.works.length}工程 ${bL.methods.length}工法 ${bL.resources.length}资源 → ${bU.length}章`,details:bU.map(a=>{let b=bW.get(a.id);return`${(0,o.GQ)(a.title)}:匹配文件${b?.graphFiles.size||0}个,BOQ项${b?.graphBoqItems.length||0}个`})},{subtitle:"图谱章节映射"})),W())}let bX=bU,bY=(0,ee.TD)(bH?.constructionOrganizationGraph)||bH?.constructionOrganizationContext,bZ=a=>{let b=bW.get(a);return b&&(b.graphWorks.length||b.graphMethods.length||b.graphBoqItems.length)?[b.graphWorks.length?`专业工程:${b.graphWorks.slice(0,8).join("、")}`:"",b.graphMethods.length?`主要工法/工艺:${b.graphMethods.slice(0,8).join("、")}`:"",b.graphBoqItems.length?`关键资源:${b.graphBoqItems.slice(0,8).map(a=>a.name).join("、")}`:""].filter(Boolean).join(";"):""},b$=[as.prompt,bY].filter(Boolean).join("\n\n"),b_=[b$,aH,J({template:{...B,chapters:bX},chapters:bX,factsModel:bJ,requirement:a.requirement,scopeConflicts:bM.scopeConflicts})].filter(Boolean).join("\n\n"),b0={...B,chapters:bX},b1=(0,aI.My)([aS,a.requirement||""].filter(Boolean).join("\n\n"),bX),b2=(0,r.tF)({requirement:a.requirement,promptTexts:aS,template:b0,chapters:bX,spec:aD}),b3=0,b4=0,b5=[],b6=await (0,u.l$)(bX.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b,chapterIndex:c})=>{if(b.sections?.length){b3+=1;let a=b1.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,o.GQ)(a.chapterTitle)===(0,o.GQ)(b.title)).flatMap(a=>a.requiredSections.sort((a,b)=>(a.order||0)-(b.order||0)).map(a=>a.title));for(let c of[...a,...b.sections]){let a=(0,aI.EN)(String(c).trim());a&&a!==String(c).trim()&&b5.push(`${(0,o.GQ)(b.title)}:${c} → ${a}`)}let d=(0,aI.k2)([...a,...b.sections],b.title);return{...b,sections:d.length?d:(0,aI.k2)(b.sections,b.title)}}b4+=1;let d=(0,n.QR)(bx.filter(a=>a.chapterId===b.id||(0,p.Lk)(a,b.title)),{preservePinned:!0}),e=as.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",f=dm(af,b),g=await (0,aI.SP)({template:b0,chapter:b,chapterIndex:c,evidence:d,promptTexts:f.promptTexts,projectContext:b_,requirement:a.requirement,roleContext:e,targetWords:b2.chapterTargets.get(b.id)||1200,projectGraphSummary:bZ(b.id),structuralRules:b1,signal:a.signal}),h=b1.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,o.GQ)(a.chapterTitle)===(0,o.GQ)(b.title)).flatMap(a=>a.requiredSections.map(a=>`强制小节:${a.title}`));if((0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"section-planning",promptId:f.primaryPromptId,status:g.length?"success":"failed",message:`${(0,o.GQ)(b.title)} 小节规划${g.length?`生成 ${g.length} 个小节`:"未生成可用小节"}`,details:[...f.promptDetails,...h,...g.length?g.map(a=>`规划小节:${a}`):["规划结果为空或被污染过滤"]]},{subtitle:"小节规划"})),!g.length)throw Error(`${(0,o.GQ)(b.title)} 小节规划未生成可用小节`);return{...b,sections:g}},{kind:"llmRepair",targetWords:b2.targetChars||4e3}),b7=await bT,b8=(0,K.dK)({template:B,chapters:b6,requirement:a.requirement}),b9=b8.chapters;if("template-locked"!==process.env.DOCUMENT_SECTION_PLANNING_MODE){let b=0,c=await (0,u.l$)(b8.chapters.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b})=>{if(!(b.sections||[]).length)return{chapterId:b.id,additions:[]};let c=(0,n.QR)(bx.filter(a=>a.chapterId===b.id||(0,p.Lk)(a,b.title)),{preservePinned:!0}),d=as.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",e=dm(af,b),f=await (0,aI.wy)({template:b0,chapter:b,evidence:c,promptTexts:e.promptTexts,projectContext:b_,requirement:a.requirement,roleContext:d,projectGraphSummary:bZ(b.id),maxTotalSections:K.a0,signal:a.signal});return{chapterId:b.id,additions:f}},{kind:"llmRepair",targetWords:b2.targetChars||4e3}),d=[];b9=b8.chapters.map(a=>{let e=(c.find(b=>b.chapterId===a.id)?.additions||[]).filter(b=>!(a.sections||[]).some(a=>a.includes(b)||b.includes(a)));if(!e.length)return a;let f=e.slice(0,Math.max(0,K.a0-(a.sections||[]).length));return f.length?(b+=f.length,d.push({chapterTitle:a.title,sections:f}),{...a,sections:[...a.sections||[],...f]}):a}),(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"section-planning-additions",status:b>0?"success":"skipped",message:b>0?`专业小节补规划:为 ${d.length} 个章节新增 ${b} 个专业工作面小节`:"专业小节补规划:LLM 未产出有效增量,保留模板锁定结构",details:d.length?d.map(a=>`${(0,o.GQ)(a.chapterTitle)}:${a.sections.join("、")}`):["无新增(LLM 空响应/无支撑依据/与已有小节重复)"]},{subtitle:"专业小节补规划",order:ad.length})),W()}let ca="0"!==process.env.DOCUMENT_REQUIREMENT_CALIBRATION,cb=b9;if(ca&&an(b7)){let b=await Y(()=>aJ({chapters:b9,requirementSummary:aC(b7),templateName:B.name,signal:a.signal}));if(b.length>0){let a=function(a,b){if(!b.length)return{chapters:a,applied:[]};let c=[],d=a.map(a=>({...a,sections:[...a.sections||[]]}));for(let a of b){let b=d.findIndex(b=>(0,o.GQ)(b.title)===(0,o.GQ)(a.chapterTitle)||(0,aI.nz)(b.title)===(0,aI.nz)(a.chapterTitle));if(b<0)continue;let e=d[b],f=a.sections.filter(a=>!(e.sections||[]).some(b=>(0,aI.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,aI.kw)(b,a)))})?{chapters:d,applied:c}:{chapters:a,applied:[]}}(b9,b);a.applied.length>0?(cb=a.chapters,(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"success",message:`大纲要求校准:新增 ${a.applied.reduce((a,b)=>a+b.sections.length,0)} 个评分项承接小节(结构守恒校验通过)`,details:a.applied.map(a=>`${(0,o.GQ)(a.chapterTitle)}:${a.sections.join("、")}`)},{subtitle:"大纲要求校准",order:ad.length}))):(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"skipped",message:"大纲要求校准未通过结构守恒校验,回退原规划",details:["校准新增小节未通过章名匹配/标题清洗校验,全部丢弃"]},{subtitle:"大纲要求校准",order:ad.length})),W()}else(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"skipped",message:"大纲要求校准未产出有效增量(章节结构已覆盖评分项要求或校准调用失败),回退原规划",details:[]},{subtitle:"大纲要求校准",order:ad.length})),W()}let cc=await (0,N.mI)(cb),cd=cb.reduce((a,b,c)=>a+Math.max(0,(b.sections||[]).length-(cc[c]?.sections||[]).length),0);{let a=b8.report;a.unattached.length>0?(0,aX.fx)(ad,(0,aX.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,aX.fx)(ad,(0,aX.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 ce=await (0,M.Mv)(bQ.map(a=>a.title),cc.map(L.Yx)),cf=(0,L.KX)({template:B,chapters:cc,requirement:a.requirement,evaluationItems:bQ,semanticSimilarity:ce});bX=(0,aV.w9)({chapters:cf.enrichedChapters,projectGraph:bL,canonicalFacts:bM}),bX=(0,L.ji)(bX);let cg=await (0,N.mI)(bX),ch=bX.reduce((a,b,c)=>a+Math.max(0,(b.sections||[]).length-(cg[c]?.sections||[]).length),0);bX=cg;let ci=cd+ch;ci>0&&((0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"outline-topic-filter",status:"success",message:`大纲小节主题过滤:剔除 ${ci} 个评标纪律/商务报价类离题小节`,details:["被剔除小节不进入写作、目录与预算计划",...ch>0?[`评标结构校验补挂回路二次剔除:${ch} 个条款碎片/纪律小节`]:[]]},{subtitle:"大纲主题约束",order:ad.length})),W()),(cf.issues.length>0||bS.issues.length>0)&&(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"bid-structure-audit",status:cf.issues.some(a=>"blocker"===a.severity)?"failed":"success",message:`评标结构符合性校验:${cf.diagnostics.length} 个结构组,${cf.diagnostics.filter(a=>"satisfied"===a.status).length} 个已满足,${cf.diagnostics.filter(a=>"missing"===a.status&&"required"===a.level).length} 个必查缺失(已自动补挂),${cf.diagnostics.filter(a=>"fragmented"===a.status).length} 个分散`,details:[...cf.diagnostics.map(a=>`${"satisfied"===a.status?"满足":"fragmented"===a.status?"分散":"补挂"}:${a.groupTitle}${"missing"===a.status?`(补挂小节:${a.missingSections.join("、")})`:""}`),...cf.issues.map(a=>`提示:${a.message}`).slice(0,8)]},{subtitle:"评标结构校验"})),B={...B,chapters:bX};let cj=await (0,M.Mv)(ar(b7).map(({item:a})=>aq(a)),bX.map(a=>aA(a.title))),ck=await aB(b7,bX,cj);ck.length>0&&((0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"tender-requirement-routing",status:"success",message:`评分项要求章节级路由:${ck.length} 条要求已路由到责任章节(生成时显性响应)`,details:ck.map(a=>`${a.kind}“${a.item.text}” → ${a.chapterTitle}(相似度 ${a.score.toFixed(2)})`)},{subtitle:"要求响应路由",order:ad.length})),W());let cl=await aN(),cm=await aT(),cn=function(a){let b=(0,K.yt)({template:{id:"runtime",name:a.templateName||"",outputTitle:"",description:"",category:"",chapters:a.chapters},chapters:a.chapters,requirement:a.requirement}),c=/施工组织设计|施工组织|施组|技术标/u.test(`${a.templateName||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`)||b.length>0,d=Object.values(a.factsModel?.canonical?.byKey||{}).map(a=>`${a.label}=${a.value}`),e=d.filter(a=>/建设规模|建筑面积|占地|用地面积|装配|层数|高度/u.test(a)).slice(0,8),f=(a.tenderRequirements?.frontScheduleClauses||[]).map(a=>a.text).filter(Boolean).slice(0,12),g=["正文必须落到本项目资料已确认的事实,不得使用模板化空话或跨小节复制段落","措施类内容写成“责任岗位+执行动作+量化标准+检查频次+整改时限+复查销项”闭环句式:同一自然段内三要素(责任岗位+检查频次+整改闭环)须同时出现,全文每 1500 字至少 1 段闭环句式","正文每 1000 字至少落位 6 处带单位量化工艺参数(mm/MPa/养护天数/间距/压实度等),施工流程与施工方法须有明确的工序顺序表达(形式由模型自然选择、不做统一要求:顺序词叙述、编号步骤、有序/无序列表或箭头链均可),每个分部分项方案至少 1 处 3 环节以上工序顺序表达",'专业工程类小节必须覆盖作业对象与工程量、工序顺序、施工方法三方面要素(呈现形式不限,段落式叙述或带标签分点均可),小节标题用专业工程正式名称(如"拆除工程"),禁止使用"工作包"等后台概念命名','质量目标与创优目标必须使用招标文件原文的奖项名称逐字落位,禁止替换、降级或省略为其他奖项名称(如把招标文件指定奖项写成其他奖项);招标文件"确保/达到"类等级要求不得弱化为"争创/争取"','B5 属地创优目标(安徽省属地适配项):招标文件未明确具体奖项时,正文必须提出不低于招标文件要求的属地创优目标,如"争创合肥市级优质工程""争创市级安全文明标准化工地"等,并在质量与文明施工章节落位','B5 表格数据一致性(丰乐镇第三轮实测:合计行 5088 与阶段工日之和 5808 矛盾、班组人数 22/28/30 多值并存):表格类内容(劳动力投入、材料配置、机械设备等)合计行数值必须与上方明细行数据一致、可由各行相加推导;各阶段人数与全项目峰值人数必须显式区分口径并保持一致(如写明"阶段高峰人数按阶段分别统计,合计行仅列全项目峰值口径");同一班组人数在配置表与进退场表中必须同值,不得多值并存',...f.length?[`投标人须知前附表响应条款(正文必须逐条落位或遵守,零响应即评标失分):${f.map((a,b)=>`${b+1}.${a}`).join(";")}`]:[]],h=a.chapters.map(b=>{var c;let d=(c=b.title,aU.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:bX,factsModel:bJ,projectGraph:bL||void 0,requirement:a.requirement,templateName:B.name,tenderRequirements:b7}),co=J({template:B,chapters:bX,factsModel:bJ,requirement:a.requirement,scopeConflicts:bM.scopeConflicts}),cp=function(a){if(!a||!an(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,N.dn)(a.text))),a.dateFabricationProhibited&&b.push("禁止编造开工日期:招标文件以开工令时间为准,正文不得自行设定具体日历开工日期,一律表述为“以开工令时间为准”。"),c("禁止性/约束性要求(正文不得违反)",a.prohibitionNotes),0===b.length)?"":`【招标文件评分项要求(系统从绑定资料提取,必须逐条响应,零响应即评标失分)】
|
|
117
|
+
请在该小节内部按上述标题逐一补齐(标题一字不差,不得增删改、合并或调序),每个工作包小节按三要素展开正式正文:作业对象与工程量(什么部位、什么规模)、工序顺序(先后顺序清晰)、施工方法(工艺做法、工艺参数、验收检测)。已有内容一律不得改动,不得删除任何已有小节与段落,不得输出 Markdown 表格。`});return k(()=>(0,aY.X6)(h,`workpackage-skeleton-repair:${a.chapter.id}`,()=>(0,aY.l8)({template:d,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[b.join("\n"),"清单之外的内容一律不得改动;不得删除任何小节标题、表格与数值参数。"],promptTexts:e,requirement:f,forbidDrawingImages:!0,diagnostics:h,signal:g,anchorTexts:a.entries.map(a=>({text:a.headingLine,append:!0})),maxTokens:6e3})))},q=await Promise.allSettled(c.map(a=>n(a))),r=0;if(q.forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;console.error("[gen] workpackage skeleton repair failed:",a.reason);return}let d=a.value,{chapter:e}=c[b];d.content&&d.content!==e.content&&(e.content=d.content,r+=1,o+=1)}),j(b),0===r)break;m=!0}return(m||n>0)&&((0,aX.fx)(i,(0,aX.X5)({type:"llm_review",roleId:"workpackage-skeleton-repair",status:"success",message:`工作包骨架收口完成:表格剥离 ${n} 处、骨架补写 ${o} 章`},{subtitle:"工作包骨架收口"})),j(b)),{skeletonFixApplied: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,planDataMaster:o}=a,p=[],q=!1;try{let r=a.globalReviewSamplingRate??1,t=r>=1||b.length<=2?b:b.filter((a,b)=>b%Math.max(2,Math.round(1/r))==0),u=t.length,v=async()=>{let a=b.map(a=>a.content).join("\n\n"),[e,j]=await Promise.all([n(()=>bi({template:c,chapters:t,chapterReviews:[],promptTexts:d,requirement:f,projectContext:h,diagnostics:i,signal:g})),bE(a,{diagnostics:i,signal:g})]);return{issues:[...new Set([...e.issues,...j.map(a=>{let b={level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`数据一致性矛盾(${a.kind}):${a.description}(原文 A:“${a.itemA.slice(0,60)}” ↔ 原文 B:“${a.itemB.slice(0,60)}”)`,suggestion:"全文数据必须一致:以绑定资料(图纸/清单/招标文件)为准选定唯一值,统一矛盾数值对,删除或修正其余矛盾表述。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。"};return`${b.message};${b.suggestion||""}`})])],stage:e.stage}},w=[],x=async()=>{let a=b.map(a=>a.content).join("\n\n"),c=(0,bx.t1)(a),d=await (0,M.Mv)(c.sentences,c.overviewBody?[c.overviewBody]:[]);return[...(await (0,s.qm)(a,j,k)).filter(a=>/跨章一致性冲突/u.test(a.message)),...(await (0,s.hr)(a,j)).filter(a=>"error"===a.level),...(0,bx.rA)(a),...(0,bx.Et)(a),...(0,bx.H)(a),...(0,bx.$$)(a,j.specAuthorityMap),...(0,bx.N$)(a),...(0,bx.Fr)(a),...(0,bx.bq)(a),...(0,bx.vH)(a),...(0,bx.cT)(a),...(0,bx.ub)(a),...(0,bx.cl)(a),...(0,bx.zP)(a),...await (0,bx.r8)(a,z),...await (0,bx.sn)(a),...(0,bx.l4)(a,{semanticSimilarity:d}),...await (0,bx.LF)(b)].map(a=>`${a.message};${a.suggestion||""}`)},y=await v(),z=(0,bx.P3)(j),A=(0,bx.z4)(j),B=y.issues;w=await x(),p=[...new Set([...B,...w])];let C=0;for(let a of b){let b=(0,bx.fE)(a.content,{...(0,bx.Ep)(o),supportAuthority:z});b.fixedCount>0&&(a.content=b.markdown,C+=b.fixedCount)}C>0&&(w=await x(),p=[...new Set([...B,...w])]);let D=!1;for(let a=0;a<1&&p.length>0;a+=1){(0,aX.fx)(l,(0,aX.X5)({type:"llm_review",roleId:"global-consistency-repair",status:"running",message:`跨章一致性冲突第 ${a+1} 轮定向修复(${p.length} 个冲突)`},{subtitle:"跨章一致性修复"})),m(b);let d=0,h=b.flatMap(a=>{let b=a.content.replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡"),c=p.filter(c=>{if(c.includes(a.title))return!0;if(/基坑深度数值未锁定/u.test(c))return/基坑|支护|开挖|土方|降水/u.test(a.title)||a.content.includes("基坑");if((c.match(/不一致的表述\s*([^;;。\n]+)/u)?.[1]||"").split(/[、,,]/u).some(a=>{let c=a.trim().replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡");return c.length>=3&&b.includes(c)}))return!0;let d=c.match(/正文([^配比厚度\s]{1,6}?)(?:配比|厚度)/u)?.[1];return!!(d&&a.content.includes(d)||[...c.matchAll(/“([^”]{6,80})”/gu)].some(a=>b.includes(a[1].replace(/\s+/gu,""))))||[...c.matchAll(/(\d[\d,,.]*)\s*(?:人|台|日|个|次|天|月|套|具|处|项|条)/gu)].some(a=>b.includes(a[0].replace(/\s+/gu,"")))});return c.length>0?[{chapter:a,related:c}]:[]});if((await Promise.allSettled(h.map(({chapter:a,related:b})=>n(()=>(0,aY.X6)(i,`global-consistency-repair:${a.id}`,()=>(0,aY.l8)({template:c,chapter:{id:a.id,title:a.title,content:a.content,evidence:a.evidence||[],missingFacts:a.missingFacts||[],sections:a.sections},issues:b.map(a=>{let b=/重复/u.test(a)?"请删除本冲突描述的重复内容(保留首次出现的完整版本),不得改动其余正文。":/基坑深度数值未锁定/u.test(a)?void 0!==A?`请在本章基坑支护/开挖小节写出确定性的基坑开挖深度表述:本工程基坑开挖深度为 ${A}m(权威口径来自图纸标注,严禁写其他深度数值或「按图纸确定」类回避表述),并同步保留既有危大工程分级标注。`:"请从本章证据摘要中的图纸标注/勘察资料锁定基坑开挖深度数值,以确定性表述写入基坑支护小节(严禁「按图纸确定」类回避表述),不得编造数值。":/规格错位/u.test(a)?"请按冲突描述中的工程量清单权威规格修正本章对应部位的规格表述:同一材料不同部位允许不同规格,同一部位只允许权威规格,禁止把多种规格全文归一为一种。":"请严格按冲突描述中给出的资料口径修正本章对应表述,不得引入新的数值;与资料口径一致的既有表述(含分层/子项数值)不得改动;同一材料多种规格按所属部位/分部分项分别使用,禁止全文统一为一种规格。";return`${a};${b}`}),promptTexts:e,requirement:f,forbidDrawingImages:!0,diagnostics:i,signal:g})))))).forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;console.error("[gen] global consistency repair failed:",a.reason);return}let c=a.value,{chapter:e}=h[b];c.content&&c.content!==e.content&&(e.content=c.content,d+=1)}),0===d){D&&(B=(await v()).issues);break}m(b);let j=await x();w=j,0===a||0===j.length?(B=(await v()).issues,D=!1):D=!0,p=[...new Set([...B,...j])],(0,aX.fx)(l,(0,aX.X5)({type:"llm_review",roleId:"global-consistency-review",status:p.length>0?"failed":"success",message:p.length>0?`跨章一致性复检:仍有 ${p.length} 个冲突`:"跨章一致性复检通过"},{subtitle:"全局一致性审查"})),m(b)}await eq({chapterDraftsFinal:b,template:c,repairPromptTexts:e,requirement:f,signal:g,generationDiagnostics:i,progressStages:l,emitProgress:m,withProgressHeartbeat:n}),await er({chapterDraftsFinal:b,projectContext:h,template:c,repairPromptTexts:e,requirement:f,signal:g,generationDiagnostics:i,progressStages:l,emitProgress:m,withProgressHeartbeat:n});let E=await (0,s.KI)(b,j,k),F=(0,bx.GG)(j),G=(0,bx.hI)(j),H=(0,bx.Pt)(j),I=(0,bx.Ep)(o),J=(0,bx.dc)(b.map(a=>a.content).join("\n\n")),K=0;for(let a of b){let b=(0,bx.fE)(a.content,{scheduleAuthority:F,assemblyRateAuthority:G,...I,supportAuthority:z,laborPeakAuthority:J});b.fixedCount>0&&(a.content=b.markdown,K+=b.fixedCount)}let L=b.map(a=>a.content).join("\n\n"),N=(0,bx.t1)(L),O=await (0,M.Mv)(N.sentences,N.overviewBody?[N.overviewBody]:[]),P=0,Q=0,R=0,S=0,T=0,U=0,V=(0,bx.qG)(b);for(let a of(P+=V.removedCount,b)){let b=a.content.split(/\r?\n/u).length,c=(0,bx.lR)(a.content),d=(0,bx.Vc)(c.markdown),e=(0,bx.U$)(d.markdown,O),f=(0,bx.$h)(e),g=(0,bx.EN)(f.markdown,{areaSummary:H,scheduleDays:F}),h=(0,bx.K2)(g.markdown),i=h.markdown.split(/\r?\n/u).length,j=b-i,k=f.fixedCount-0+g.fixedCount+h.fixedCount;S+=f.fixedCount,T+=g.fixedCount,U+=h.fixedCount,(j>0||k>0)&&(P+=c.removedCount,Q+=d.removedCount,R+=j-c.removedCount-d.removedCount,a.content=h.markdown)}let W=await (0,bx.yR)(b),X=0,Y=0,Z=0,$=0,_=0,aa=0,ab=0;for(let a of b){let b=(0,bx.ir)(a.content);b.fixedCount>0&&(a.content=b.markdown,X+=b.fixedCount);let c=(0,bx.xp)(a.content);c.fixedCount>0&&(a.content=c.markdown,Y+=c.fixedCount);let d=await (0,bx.lv)(a.content);d.fixedCount>0&&(a.content=d.markdown,Z+=d.fixedCount);let e=(0,bx.Co)(a.content);e.fixedCount>0&&(a.content=e.markdown,$+=e.fixedCount);let f=(0,bx.zj)(a.content);f.fixedCount>0&&(a.content=f.markdown,_+=f.fixedCount);let g=(0,bx.SZ)(a.content);g.fixedCount>0&&(a.content=g.markdown,aa+=g.fixedCount);let h=(0,bx.GI)(a.content);h.fixedCount>0&&(a.content=h.markdown,ab+=h.fixedCount)}if(q=!0,E.fixedCount>0||K>0||P>0||Q>0||R>0||W>0||S>0||T>0||U>0||X>0||Y>0||Z>0||$>0||_>0||aa>0||ab>0){w=await x(),p=[...new Set([...B,...w])];let a=[E.fixedCount>0?`数值 ${E.fixedCount} 处`:"",K>0?`跨章数值 ${K} 处`:"",P>0?`重复表格 ${P} 行`:"",Q>0?`重复段落 ${Q} 行`:"",R>0?`概况复述句 ${R} 行`:"",W>0?`跨章语义重复段 ${W} 段`:"",X>0?`自伤表述改写 ${X} 处`:"",Y>0?`危大辨识补漏 ${Y} 项`:"",Z>0?`扬尘六个百分百补写 ${Z} 项`:"",$>0?`内部术语清洗 ${$} 处`:"",_>0?`无表头表格补齐 ${_} 处`:"",aa>0?`两可表述归一 ${aa} 处`:"",ab>0?`配置污染清洗 ${ab} 处`:""].filter(Boolean).join("、");(0,aX.fx)(l,(0,aX.X5)({type:"llm_review",roleId:"global-consistency-deterministic-fix",status:"success",message:`跨章一致性定点修复:${a}${E.details.slice(0,4).length>0?`(${E.details.slice(0,4).join("、")})`:""}`,details:E.details.slice(4)},{subtitle:"跨章一致性修复"})),m(b)}let ac=w.filter(a=>!en.test(a)),ad=[...B,...w.filter(a=>en.test(a))],ae=ac.length>0?"failed":"success",af=ac.length>0?`跨章一致性修复完成:仍残留 ${ac.length} 个可修复冲突(已记录,由交付门禁兑底)`:ad.length>0?`跨章一致性修复完成:确定性冲突已全部消除;另有 ${ad.length} 个审查提示/资料两可项(已记录,由交付门禁复核)`:"跨章一致性修复完成:冲突已全部消除";(0,aX.fx)(l,(0,aX.X5)({type:"llm_review",roleId:"global-consistency-repair",status:ae,message:af},{subtitle:"跨章一致性修复"})),m(b);let ag=u<b.length?{...y.stage,message:`${y.stage.message||"全局一致性审查完成"}(抽检 ${u}/${b.length} 章)`}:y.stage;(0,aX.fx)(l,ag),m(b)}catch(a){if(g?.aborted)throw a;console.error("[gen] global consistency review failed:",a)}return{issues:p,dedupRan:q}}async function 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,a$.Hh)(f,b,{requirement:a.requirement}),j=(0,a$.W9)(f,b,{requirement:a.requirement}),{kindByPath:k,processingByPath:l}=(0,a$.Hz)(j),m=new Set(i),q=(0,br.Zq)(f,i),r=new Map([...k.entries()].map(([a,b])=>[a,(0,a$._W)(b)])),s=new Map([...l.entries()].map(([a,b])=>[a,b])),t=dC(await h.getProject(f),[...m],a.maxEvidencePerChapter),u=[],v=[...m].filter(Boolean).sort(),w=dy(c,c.queries,[]),x=function(a,b){let c=Number(process.env.DOCUMENT_MAX_QUERIES_PER_CHAPTER);return Math.max(2,Math.min(9,Math.floor(Number.isFinite(c)&&c>0?c:4)+ +((a.sections||[]).length>=6||a.requiredFacts.length>=8)+Math.min(2,b.length)))}(c,[]);for(let a of w.slice(0,x)){let b=await h.search(f,a,{scope:"project",filters:{filePaths:v},limit:Math.min(t,12),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15},generationMode:!0});u.push(...b.results.filter(a=>(0,aY.Tz)(f,a.filePath,m)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:r.get(a.filePath),processingType:s.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let y=dx(c,(0,br.Su)(u.filter(a=>(0,aY.Tz)(f,a.filePath,m)),q),{maxItems:function(a,b,c=!1){return Math.max(12,Math.min(c?58:26,a+10+4*((b.sections||[]).length>=6||b.requiredFacts.length>=8)+18*!!c))}(t,c),maxChars:16e3,preservePinned:!0});(0,br.U2)(y,q,`regenerate:${c.id}`);let z=a.currentMarkdown||"",A=new Set(a.existingFacts??[]),B=c.requiredFacts.filter(a=>!A.has(a)&&!y.some(b=>(0,p.Lk)(b,a)));if(0===y.length)throw Error(`${(0,o.GQ)(c.title)} 缺少可支撑正文的项目资料证据`);let C=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",z?`> 当前文档上下文摘要:${z.replace(/\s+/gu," ")}`:"",`本章依据已锁定项目资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`,"","### 资料依据",...y.map(n.OF)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:C,evidence:y,missingFacts:B}}async function eu(a){(0,u.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 v=(0,f.computeProjectId)(c),B=b,S=(0,g.Qh)(),T=[],U=[],W=(b,c=ad)=>{let d=b?[...b].sort((a,b)=>{let c=U.indexOf(a.id),d=U.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)},X=Math.max(15e3,Math.min(6e4,Number(process.env.DOCUMENT_GENERATION_HEARTBEAT_MS??3e4))),Y=async(b,c=ad)=>{let d=setInterval(()=>{a.signal?.aborted||W(T,c)},X);try{return await b()}finally{clearInterval(d)}},Z=(0,d.N6)(B)||"none",ac=(0,i.Mu)(Z)?.name||Z,ad=[(0,aX.X5)({type:"role_binding",roleId:Z,status:"running",message:`生成任务已创建,正在读取模板与角色配置:${B.name}`,details:[`当前项目:${v}`,`资料目录:${(0,g.NW)(c)}`,"正在读取项目资料包和提示词配置"],progress:{current:1,total:4,label:"初始化配置"}},{subtitle:ac,roleName:ac,order:0})];W();let af=(0,d.bj)(B),ag=af.bindings;(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在分析模板规范、用户要求与项目资料包",details:["解析 OUTLINE 与模板章节","读取项目资料包","自动识别资料类型并构建项目理解"],progress:{current:1,total:3,label:"准备分析"}},{subtitle:"生成准备",order:ad.length})),W();let ah=(0,cQ.Qu)({template:B,requirement:a.requirement,projectRoot:c,facts:[]}).materialScope.selectedFiles;if(0===ah.length)throw Error("模板未绑定可用项目资料包,请先在模板中绑定需要参与生成的项目文件夹。");let am=(0,a$.W9)(c,B,{requirement:a.requirement}),as=(0,a$._n)(B,am),{kindByPath:at,processingByPath:au}=(0,a$.Hz)(am),av=(0,aY.fC)([...af.writerPrompts,...af.chapterPrompts]),aw=(0,o.cs)([{text:a.requirement,source:"用户需求",strict:!0},{text:av,source:"提示词角色",strict:!0}]),ax=aw.length>=2;ax&&(B={...b,chapters:aw});let ay=await Y(()=>Promise.resolve((0,k.P)(c,{requirement:a.requirement,boundFilePaths:ah})));(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在生成自动文档规格并评估生成准备度",details:[`项目资料:${ah.length} 份`,`资料类型:${Object.values(am.groups).filter(a=>a.length>0).length} 类`,"生成事实字段与章节约束"],progress:{current:2,total:3,label:"规格评估"}},{subtitle:"生成准备",order:ad.length})),W();let az=await Y(()=>Promise.resolve((0,j.x)(B,a.requirement||""))),aD=az.spec,aE=(0,l.$i)(B,a.requirement||""),aF=(0,m.$)({template:B,spec:aD,summary:ay,resolvedRoles:[]});if(!aF.ready)throw Error(`生成准备度不足:${aF.blockingIssues.join(";")}`);let aG=['【全文写作硬约束(每一章生成时必须遵守,违反即评审失分)】\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. 禁止商务投标函内容:投标/评标纪律承诺、廉洁承诺、廉洁自律、行贿、串标、围标、弄虚作假、干扰评标等商务投标函条款与承诺一律不得写入施工组织设计正文(招标文件中的此类条款属商务文件应响应内容,不是技术标内容);本节只写技术方案与管理措施,不得以承诺句形式响应此类条款。',as.prompt,(0,k.F)(ay,{publicSafe:!0}),(0,j.N)(aD,az.sourceHash,{publicSafe:!0}),(0,m.R)(aF,{publicSafe:!0})].filter(Boolean).join("\n\n"),aH=a.previousSignals?(0,em._2)(a.previousSignals):"",aK=[as.prompt,(0,k.F)(ay),(0,j.N)(aD,az.sourceHash),(0,m.R)(aF)].filter(Boolean).join("\n\n"),aL=(0,aY.fC)([...af.writerPrompts,...af.formattingPrompts]),aM=(0,aY.fC)([...af.writerPrompts,...af.chapterPrompts,...af.formattingPrompts]),aO=(0,aY.fC)(af.prompts),aP=(0,h.I)().load().webAccess||{enabled:!1,allowProjectFacts:!1,maxQueriesPerChapter:2,maxResultsPerQuery:3,trustedDomains:[]},aQ=(0,aI.c_)({promptTexts:[aG,aO].filter(Boolean).join("\n\n"),requirement:a.requirement,template:B,rolePrompts:af.prompts}),aR=[(0,aI.el)(aQ),!aP.enabled?"":"公开资料补充使用规则:\n1. 公开资料只可用于补充通用规范、政策、工艺和措施。\n2. 不得使用公开资料新增或修改项目名称、建设地点、建设规模、工期、质量标准、工程量、材料规格、图纸参数、商务数据。\n3. 本地项目资料与公开资料冲突时,必须以本地项目资料为准。\n4. 不得在正文中出现任何检索过程、外部页面、工具调用或系统内部过程性表述。\n5. 不得把公开资料中的其他项目案例参数写入本项目正文。"].filter(Boolean).join("\n\n"),aS=[aG,aR,`生成前规划章节结构:
|
|
118
|
+
${(0,q.CK)(B)}`,aL||aM].filter(Boolean).join("\n\n"),a0=[aK,aR,(0,aY.fC)([...af.extractionPrompts,...af.referencePrompts])].filter(Boolean).join("\n\n"),a1=[aG,aR,(0,aY.fC)([...af.writerPrompts,...af.chapterPrompts,...af.formattingPrompts])].filter(Boolean).join("\n\n"),a2=[aG,aR,(0,aY.fC)(af.formattingPrompts)].filter(Boolean).join("\n\n");(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"document-preparation",status:"success",message:`模板规范与项目资料理解完成,识别 ${ah.length} 份项目资料`,details:[`提示词绑定:${ag.length} 个`,`项目资料包:${am.materialRoots.join("、")||"当前知识库"}`,ax?`识别 OUTLINE 章节:${aw.length} 个`:"未识别显式 OUTLINE,使用模板章节"],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备",order:ad.length})),W(),a.previousSignals&&((0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"previous-version-inheritance",status:"success",message:`版本继承:提取上一版《${a.previousSignals.versionTitle}》结构 ${a.previousSignals.structureLines.length} 项、关键口径 ${a.previousSignals.factLines.length} 条、已知问题 ${a.previousSignals.issueLines.length} 项作为生成参照`,details:[...a.previousSignals.structureLines.slice(0,6).map(a=>`沿用参考:${a}`),"旧版数据仅作参照,与项目资料不一致处一律以资料为准"]},{subtitle:"版本继承",order:ad.length})),W());let a3=new Set(ah),a4=new Map([...at.entries()].map(([a,b])=>[a,(0,a$._W)(b)])),a5=new Map([...au.entries()].map(([a,b])=>[a,b]));(0,aX.fx)(ad,(0,aX.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:"running",message:"正在读取项目资料包索引",details:["使用上传阶段已完成的解析、切片和索引结果","不在生成流程中重新解析或入库","准备按资料类型召回章节证据"],progress:{current:1,total:3,label:"读取索引"}},{subtitle:"知识库检索",order:ad.length})),W();let a6=await Y(()=>S.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=[...dA("部分绑定文件未完成索引,已自动跳过",f),...dA("部分绑定文件没有可用切片,已自动跳过",g),...dA("部分绑定文件索引失败,已自动跳过",h)],o=c.size>0&&0===m?["所有绑定文件均无可用切片"]:[],p=[...n,...i>0?[`仍有 ${i} 个待索引任务,建议等待索引完成后生成`]:[],...j&&"ready"!==j.status?[`向量索引状态为 ${j.status},当前召回质量可能下降`]:[]];return{scopedRecords:d,usablePaths:l,missingFiles:f,emptyFiles:g,errorFiles:h,pendingJobs:i,vectorStatus:j,usableChunkCount:m,blockingIssues:o,warnings:p}}(a6,[...a3]);if(a7.blockingIssues.length>0)throw Error(`生成前知识索引不可用:${a7.blockingIssues.join(";")}`);let a8=new Set(a7.usablePaths),a9=(0,br.Zq)(v,[...a8]),ba=dC(a6,[...a8],a.maxEvidencePerChapter),bb=a7.pendingJobs>0||0===a7.usableChunkCount,bf=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*ah.length),loadedChunks:Math.min(a7.usableChunkCount,20*ah.length),vectorReady:a7.vectorStatus?"ready"===a7.vectorStatus.status:void 0});(0,aX.fx)(ad,(0,aX.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:bb?"failed":"success",message:`已读取知识索引:项目资料 ${a7.scopedRecords.length} 份,可用切片 ${a7.usableChunkCount} 条`,details:[`项目资料:${a3.size} 份`,`可用证据文件:${a8.size} 份`,`向量状态:${a7.vectorStatus?.status||"unknown"}`,...a7.warnings,"后续将按招标正文/清单/图纸/补疑等资料类型召回"],progress:{current:3,total:3,label:"索引已就绪"}},{subtitle:"知识库检索",order:ad.length})),W(),(0,u.Te)(a.signal);let bg=[],bh=[],bi={enabled:aP.enabled,queries:[],evidenceCount:0,filteredCount:0,chapters:[]},bj=[],bk=[],bl=[],bm=[],bn=[],bo=-1,bp=new Map,bs=new Map,bt=a=>{let b=`${a}::full`;if(!bs.has(b))try{bs.set(b,a6.getFileDetail?.(a))}catch{bs.set(b,void 0)}return bs.get(b)},bu=async(a,b,d,e)=>{let f=dt(e),g="0"!==process.env.DOCUMENT_GENERATION_RERANKER,h=(0,u.c6)({query:a,scopedFilePaths:b,limit:d,weights:f,generationMode:!0,reranker:g}),i=bp.get(h);if(i)return i;let j=await S.search(c,a,{scope:"project",filters:{filePaths:b},limit:d,weights:f,generationMode:!0,disableReranker:!g}).catch(()=>null),k=j?.results||[];return bp.set(h,k),k},bv={stage:(0,aX.X5)({type:"file_understanding",roleId:"project-understanding",status:"success",message:`已完成项目资料理解:${am.files.length} 份资料,${Object.values(am.groups).filter(a=>a.length>0).length} 类资料类型`,details:as.prompt.split("\n").slice(0,16)},{subtitle:"项目资料理解",order:ad.length})};(0,aX.fx)(ad,bv.stage),W();let bw=(0,br.Su)(await cV({manager:S,project:a6,projectRoot:c,scopedFilePaths:[...a3].filter(Boolean).sort(),fileRoleByPath:a4,fileProcessingByPath:a5,signal:a.signal}),a9);(0,br.U2)(bw,a9,"project-basic-evidence"),bw.length>0&&(bg.push(...bw),(0,aX.fx)(ad,(0,aX.X5)({type:"knowledge_retrieval",roleId:"project-basic-evidence",status:"success",message:`已锁定项目基础事实证据 ${bw.length} 条`,details:bw.slice(0,8).map(a=>`${e.basename(a.filePath)}|${a.sectionTitle||"正文片段"}|score=${a.score.toFixed(2)}`)},{subtitle:"基础事实召回",order:ad.length})),W());let{safe:bx,excluded:by}=await (0,N.a0)(bg),bz=await (0,N.M8)();by.length>0&&((0,aX.fx)(ad,(0,aX.X5)({type:"knowledge_retrieval",roleId:"evidence-content-safety",status:"success",message:`证据内容安全过滤:${by.length} 条投标程序/评标纪律类证据已从写作链断开(系统侧提取通道不受影响)`,details:by.slice(0,6).map(a=>`${e.basename(a.filePath)}|${a.sectionTitle||"正文片段"}`)},{subtitle:"证据内容安全",order:ad.length})),W());let bA=bw.filter(a=>!by.includes(a)),bB=new Set(by.map(N.hM)),bD=(0,Q.d6)({evidence:bx,template:B,spec:aD,profile:aE,scope:a9}),bE=bD.localFacts,bF=bD.projectBasicFacts,bG=[...bE,...bF,...bD.preciseFacts],bH=(0,ef.hp)({projectRoot:c,template:B,requirement:a.requirement}),bI=[...bH?.facts||[],...bG,...cF(bx)],bJ=await (0,Q.d7)(bI,bD.structuredTables,bj,aD,aE),bK=(0,cQ.Qu)({template:B,requirement:a.requirement,projectRoot:c,facts:bI,projectGraph:bH?.projectGraph,projectGraphSource:bH?"project-intelligence":void 0});for(let a of(0,cQ.SU)(bK))(0,aX.fx)(ad,a);bH&&(0,aX.fx)(ad,(0,aX.X5)({type:"file_understanding",roleId:"project-intelligence-cache",status:"success",message:`已复用入库后项目理解资产与绑定 scope 快照:${bH.files.length} 份绑定资料`,details:[`项目级缓存时间:${new Date(bH.cache.createdAt).toLocaleString()}`,`scope 快照:${bH.scopeSnapshot.scopeHash.slice(0,12)}`,`复用预计算事实:${bH.facts.length} 条`,`复用预计算项目图谱:${bH.projectGraph.works.length}工程/${bH.projectGraph.methods.length}工法/${bH.projectGraph.resources.length}资源`,`复用施工组织设计专项图谱:${bH.constructionOrganizationGraph.workPackages.length} 个工作包/${bH.constructionOrganizationGraph.controlMatrix.length} 条控制矩阵`,`图谱来源:${bH.cache.projectGraphMessage}`,`章节意图证据覆盖:${Object.keys(bH.evidenceByChapterId||{}).length}/${B.chapters.length} 章`,`排除正文不适用资料:${bH.files.filter(a=>!a.usableForBody).length} 份`]},{subtitle:"项目理解缓存 / Scope 快照"})),W();let bL=bK.baseProjectGraph;if(!bH){(0,aX.fx)(ad,(0,aX.X5)({type:"file_understanding",roleId:"project-graph",status:"running",message:`正在临时构建完整项目图谱:${bg.length} 条证据 → LLM 结构化提取`,details:["缓存缺失或版本过期,建议重新构建项目理解缓存;本次生成将临时构建完整项目图谱。","提取:工程内容、施工方法、材料设备、技术标准、重点难点"],progress:{current:2,total:3,label:"项目图谱"}},{subtitle:"项目资料图谱分析",order:ad.length})),W();let b=await Y(()=>(0,ee.i)({evidence:bx,signal:a.signal,projectRoot:c,requirement:a.requirement,templateId:B.id}),ad);if(!b.graph)throw Error(`完整项目图谱构建失败:${b.stage.message||b.stage.status}`);bL=b.graph,(0,aX.fx)(ad,b.stage),W()}bL&&(as=(0,a$._n)(B,am,bL));let bM=cP({facts:bI,projectGraph:bL,requiredKeys:cx.map(a=>a.key),projectRoot:c,requirement:a.requirement,templateId:B.id});bJ.canonical=bM;let bN=(0,o.effectiveTemplateChapters)(B,aD,{preserveExplicitOutline:ax}),bO=(0,K.dK)({template:B,chapters:bN,requirement:a.requirement}).chapters,bP=bg.filter(a=>/评审|评分标准|评分办法|详细评审/u.test(`${a.sectionTitle||""}${a.content}`)).map(a=>a.content),bQ=(0,L.tL)(bP);bP.length>0&&0===bQ.length&&(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"bid-structure-audit",status:"skipped",message:"评审章节证据存在但未提取到评分条目标题:评分标准编号条目提取为空,承接审计将静默通过",details:["请检查招标文件评标办法章节编号格式;评分项要求(创优目标/绿色等级/禁编日期)由评分项要求提取通道覆盖"]},{subtitle:"评标结构校验",order:ad.length}));let bR=await (0,M.Mv)(bQ.map(a=>a.title),bO.map(L.Yx)),bS=(0,L.KX)({template:B,chapters:bO,requirement:a.requirement,evaluationItems:bQ,semanticSimilarity:bR}),bT=(async()=>{try{var b;let d,f=[];for(let a of[...a3].sort()){if(!/招标|补疑|答疑|评标/u.test(a))continue;let b=bt(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:a4.get(a),processingType:a5.get(a),sectionTitle:c.sectionTitle,source:"pinned-evidence"})}let g=f.length>0?await ai(f):(0,n.QR)([...bg.filter(a=>/招标|评标|投标须知|专用合同|合同条款|技术标准|技术要求/u.test(`${a.filePath||""}${a.sectionTitle||""}`)),...bg.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,aX.fx)(ad,(0,aX.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:ad.length})),W()}let h="0"!==process.env.DOCUMENT_EXTRACTION_CACHE?(b={collectionEvidence:f,preselectEvidence:g},(0,u.c6)({version:"tender-requirements-extraction-v3",collection:ap(b.collectionEvidence),preselectInput:ap(b.preselectEvidence)})):void 0,i=h?function(a,b){try{let c=e.join(ao(a),`tender-requirements-${b}.json`),d=JSON.parse(O.readFileSync(c,"utf8"));if(!an(d)||ak(d))return;return d}catch{return}}(c,h):void 0;if(i)d=i,(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"tender-requirements-cache",status:"success",message:"复用上次提取结果(招标文件与预筛输入哈希命中,跳过主提取/窄通道 LLM)",details:aC(d)},{subtitle:"评分项要求提取\xb7缓存复用",order:ad.length})),W();else{d=await Y(()=>V(g,{signal:a.signal})),!an(d)&&g.length>0&&(d=await Y(()=>V(g,{signal:a.signal})));let b=await aj(f),i=aa(d);if(b.length>0&&i.length>0){let c=await Y(()=>V(b,{signal:a.signal}));an(c)&&(d=al(d,c),(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"tender-mandatory-extraction",status:"success",message:"必提条款窄通道补提完成(主提取漏提字段已补齐)",details:aC(c)},{subtitle:"评分项要求提取\xb7必提补提",order:ad.length})),W())}let j=[];if(ab(d).length>0&&f.length>0){let b=await Y(()=>ae(d,f,{signal:a.signal}));d=b.model,j=b.stillGaps;let c=b.noEvidenceGaps,e=b.stillGaps;0===b.stillGaps.length&&((0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"tender-field-gap-extraction",status:"success",message:"评分项要求字段定向补提完成(字段级聚焦提取,全部评分项要求字段已提取)",details:aC(d)},{subtitle:"评分项要求提取\xb7字段补提",order:ad.length})),W());let g=a=>$.includes(a);if(e.length>0){let a=e.filter(g),b=e.filter(a=>!g(a)),c=[a.length>0?`必提字段 ${a.map(a=>_(a)).join("、")}`:"",b.length>0?`常规字段 ${b.map(a=>_(a)).join("、")}`:""].filter(Boolean);(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"tender-field-gap-missing",status:"skipped",message:`字段定向补提后仍缺失:${c.join(";")}(条款窗口证据存在但 LLM 提取失败)`,details:["请检查 LLM 可用性与输出质量;正文将无法显性响应上述评分项要求"]},{subtitle:"评分项要求提取\xb7字段缺口",order:ad.length})),W()}if(c.length>0){let a=c.filter(g),b=c.filter(a=>!g(a)),d=[a.length>0?`必提字段 ${a.map(a=>_(a)).join("、")}`:"",b.length>0?`常规字段 ${b.map(a=>_(a)).join("、")}`:""].filter(Boolean);(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"tender-field-gap-no-evidence",status:"skipped",message:`${d.join(";")}:招标资料中未找到对应条款(判定为无此要求,非漏提)`,details:["若项目实际存在该要求,请检查招标文件相关章节切片完整性"]},{subtitle:"评分项要求提取\xb7字段缺口",order:ad.length})),W()}}h&&0===j.length&&function(a,b,c){if(!(!c||!an(c)||ak(c)))try{O.writeFileSync(e.join(ao(a),`tender-requirements-${b}.json`),JSON.stringify(c,null,2))}catch{}}(c,h,d)}return an(d)?((0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"success",message:"招标文件评分项要求结构化提取完成",details:aC(d)},{subtitle:"评分项要求提取",order:ad.length})),W()):g.length>0&&((0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"skipped",message:"评分项要求提取未获得有效结果(模型不可用或资料中无要求),零响应检测自动跳过",details:[]},{subtitle:"评分项要求提取",order:ad.length})),W()),d}catch(a){return(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"skipped",message:"评分项要求提取链异常,已降级为空模型(零响应检测自动跳过)",details:[`异常信息:${a instanceof Error?a.message:String(a)}`,"请检查 LLM 可用性与本地语义模型状态"]},{subtitle:"评分项要求提取",order:ad.length})),W(),R(!1)}})(),bU=(0,aV.w9)({chapters:bS.enrichedChapters,projectGraph:bL,canonicalFacts:bM});B={...B,chapters:bU};let bV=(0,eg.NP)({template:B,context:bK,title:B.name});bV.catch(()=>void 0);let bW=new Map;if(bL){let a=new Set;for(let b of[...bL.works,...bL.methods,...bL.resources,...bL.schedule,...bL.standards,...bL.risks,...bL.requirements,...bL.siteConditions])(b.sourceFiles||[]).forEach(b=>a.add(b));for(let b of bU){let c=[b.title,b.purpose,...b.sections||[],...b.requiredFacts||[],...b.queries||[]].join(" "),d=a=>a&&((0,ei.C1)(a,c,.18)||(0,ei.C1)(a,b.title,.12)),e=/概况|总体|部署|施工|进度|工期|质量|安全|资源|人材机|材料|机械|劳动力|风险|危大|绿色|环保/u.test(c),f=bL.works.filter(a=>a.name&&(d(a.name)||e)),g=bL.methods.filter(a=>a.name&&(d(a.name)||(a.applicableWorks||[]).some(d)||e)),h=bL.resources.filter(a=>a.name&&(d(a.name)||/资源|人材机|材料|机械|劳动力/u.test(c)&&/material|equipment|labor/u.test(a.type))),i=bL.gaps.filter(a=>!(0,ef.Ut)(a)&&(d(a)||e)),j=new Set;for(let a of f)(a.sourceFiles||[]).forEach(a=>j.add(a));for(let a of g)(a.sourceFiles||[]).forEach(a=>j.add(a));for(let a of h)(a.sourceFiles||[]).forEach(a=>j.add(a));0===j.size&&e&&[...a].forEach(a=>j.add(a)),bW.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})}bH||((0,aX.fx)(ad,(0,aX.X5)({type:"file_understanding",roleId:"project-graph-match",status:"success",message:`图谱→章节映射完成:${bL.works.length}工程 ${bL.methods.length}工法 ${bL.resources.length}资源 → ${bU.length}章`,details:bU.map(a=>{let b=bW.get(a.id);return`${(0,o.GQ)(a.title)}:匹配文件${b?.graphFiles.size||0}个,BOQ项${b?.graphBoqItems.length||0}个`})},{subtitle:"图谱章节映射"})),W())}let bX=bU,bY=(0,ef.TD)(bH?.constructionOrganizationGraph)||bH?.constructionOrganizationContext,bZ=a=>{let b=bW.get(a);return b&&(b.graphWorks.length||b.graphMethods.length||b.graphBoqItems.length)?[b.graphWorks.length?`专业工程:${b.graphWorks.slice(0,8).join("、")}`:"",b.graphMethods.length?`主要工法/工艺:${b.graphMethods.slice(0,8).join("、")}`:"",b.graphBoqItems.length?`关键资源:${b.graphBoqItems.slice(0,8).map(a=>a.name).join("、")}`:""].filter(Boolean).join(";"):""},b$=[as.prompt,bY].filter(Boolean).join("\n\n"),b_=[b$,aH,J({template:{...B,chapters:bX},chapters:bX,factsModel:bJ,requirement:a.requirement,scopeConflicts:bM.scopeConflicts})].filter(Boolean).join("\n\n"),b0={...B,chapters:bX},b1=(0,aI.My)([aS,a.requirement||""].filter(Boolean).join("\n\n"),bX),b2=(0,r.tF)({requirement:a.requirement,promptTexts:aS,template:b0,chapters:bX,spec:aD}),b3=0,b4=0,b5=[],b6=await (0,u.l$)(bX.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b,chapterIndex:c})=>{if(b.sections?.length){b3+=1;let a=b1.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,o.GQ)(a.chapterTitle)===(0,o.GQ)(b.title)).flatMap(a=>a.requiredSections.sort((a,b)=>(a.order||0)-(b.order||0)).map(a=>a.title));for(let c of[...a,...b.sections]){let a=(0,aI.EN)(String(c).trim());a&&a!==String(c).trim()&&b5.push(`${(0,o.GQ)(b.title)}:${c} → ${a}`)}let d=(0,aI.k2)([...a,...b.sections],b.title);return{...b,sections:d.length?d:(0,aI.k2)(b.sections,b.title)}}b4+=1;let d=(0,n.QR)(bx.filter(a=>a.chapterId===b.id||(0,p.Lk)(a,b.title)),{preservePinned:!0}),e=as.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",f=dm(af,b),g=await (0,aI.SP)({template:b0,chapter:b,chapterIndex:c,evidence:d,promptTexts:f.promptTexts,projectContext:b_,requirement:a.requirement,roleContext:e,targetWords:b2.chapterTargets.get(b.id)||1200,projectGraphSummary:bZ(b.id),structuralRules:b1,signal:a.signal}),h=b1.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,o.GQ)(a.chapterTitle)===(0,o.GQ)(b.title)).flatMap(a=>a.requiredSections.map(a=>`强制小节:${a.title}`));if((0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"section-planning",promptId:f.primaryPromptId,status:g.length?"success":"failed",message:`${(0,o.GQ)(b.title)} 小节规划${g.length?`生成 ${g.length} 个小节`:"未生成可用小节"}`,details:[...f.promptDetails,...h,...g.length?g.map(a=>`规划小节:${a}`):["规划结果为空或被污染过滤"]]},{subtitle:"小节规划"})),!g.length)throw Error(`${(0,o.GQ)(b.title)} 小节规划未生成可用小节`);return{...b,sections:g}},{kind:"llmRepair",targetWords:b2.targetChars||4e3}),b7=await bT,b8=(0,K.dK)({template:B,chapters:b6,requirement:a.requirement}),b9=b8.chapters;if("template-locked"!==process.env.DOCUMENT_SECTION_PLANNING_MODE){let b=0,c=await (0,u.l$)(b8.chapters.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b})=>{if(!(b.sections||[]).length)return{chapterId:b.id,additions:[]};let c=(0,n.QR)(bx.filter(a=>a.chapterId===b.id||(0,p.Lk)(a,b.title)),{preservePinned:!0}),d=as.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",e=dm(af,b),f=await (0,aI.wy)({template:b0,chapter:b,evidence:c,promptTexts:e.promptTexts,projectContext:b_,requirement:a.requirement,roleContext:d,projectGraphSummary:bZ(b.id),maxTotalSections:K.a0,signal:a.signal});return{chapterId:b.id,additions:f}},{kind:"llmRepair",targetWords:b2.targetChars||4e3}),d=[];b9=b8.chapters.map(a=>{let e=(c.find(b=>b.chapterId===a.id)?.additions||[]).filter(b=>!(a.sections||[]).some(a=>a.includes(b)||b.includes(a)));if(!e.length)return a;let f=e.slice(0,Math.max(0,K.a0-(a.sections||[]).length));return f.length?(b+=f.length,d.push({chapterTitle:a.title,sections:f}),{...a,sections:[...a.sections||[],...f]}):a}),(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"section-planning-additions",status:b>0?"success":"skipped",message:b>0?`专业小节补规划:为 ${d.length} 个章节新增 ${b} 个专业工作面小节`:"专业小节补规划:LLM 未产出有效增量,保留模板锁定结构",details:d.length?d.map(a=>`${(0,o.GQ)(a.chapterTitle)}:${a.sections.join("、")}`):["无新增(LLM 空响应/无支撑依据/与已有小节重复)"]},{subtitle:"专业小节补规划",order:ad.length})),W()}let ca="0"!==process.env.DOCUMENT_REQUIREMENT_CALIBRATION,cb=b9;if(ca&&an(b7)){let b=await Y(()=>aJ({chapters:b9,requirementSummary:aC(b7),templateName:B.name,signal:a.signal}));if(b.length>0){let a=function(a,b){if(!b.length)return{chapters:a,applied:[]};let c=[],d=a.map(a=>({...a,sections:[...a.sections||[]]}));for(let a of b){let b=d.findIndex(b=>(0,o.GQ)(b.title)===(0,o.GQ)(a.chapterTitle)||(0,aI.nz)(b.title)===(0,aI.nz)(a.chapterTitle));if(b<0)continue;let e=d[b],f=a.sections.filter(a=>!(e.sections||[]).some(b=>(0,aI.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,aI.kw)(b,a)))})?{chapters:d,applied:c}:{chapters:a,applied:[]}}(b9,b);a.applied.length>0?(cb=a.chapters,(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"success",message:`大纲要求校准:新增 ${a.applied.reduce((a,b)=>a+b.sections.length,0)} 个评分项承接小节(结构守恒校验通过)`,details:a.applied.map(a=>`${(0,o.GQ)(a.chapterTitle)}:${a.sections.join("、")}`)},{subtitle:"大纲要求校准",order:ad.length}))):(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"skipped",message:"大纲要求校准未通过结构守恒校验,回退原规划",details:["校准新增小节未通过章名匹配/标题清洗校验,全部丢弃"]},{subtitle:"大纲要求校准",order:ad.length})),W()}else(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"skipped",message:"大纲要求校准未产出有效增量(章节结构已覆盖评分项要求或校准调用失败),回退原规划",details:[]},{subtitle:"大纲要求校准",order:ad.length})),W()}let cc=await (0,N.mI)(cb),cd=cb.reduce((a,b,c)=>a+Math.max(0,(b.sections||[]).length-(cc[c]?.sections||[]).length),0);{let a=b8.report;a.unattached.length>0?(0,aX.fx)(ad,(0,aX.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,aX.fx)(ad,(0,aX.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 ce=await (0,M.Mv)(bQ.map(a=>a.title),cc.map(L.Yx)),cf=(0,L.KX)({template:B,chapters:cc,requirement:a.requirement,evaluationItems:bQ,semanticSimilarity:ce});bX=(0,aV.w9)({chapters:cf.enrichedChapters,projectGraph:bL,canonicalFacts:bM}),bX=(0,L.ji)(bX);let cg=await (0,N.mI)(bX),ch=bX.reduce((a,b,c)=>a+Math.max(0,(b.sections||[]).length-(cg[c]?.sections||[]).length),0);bX=cg;let ci=cd+ch;ci>0&&((0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"outline-topic-filter",status:"success",message:`大纲小节主题过滤:剔除 ${ci} 个评标纪律/商务报价类离题小节`,details:["被剔除小节不进入写作、目录与预算计划",...ch>0?[`评标结构校验补挂回路二次剔除:${ch} 个条款碎片/纪律小节`]:[]]},{subtitle:"大纲主题约束",order:ad.length})),W()),(cf.issues.length>0||bS.issues.length>0)&&(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"bid-structure-audit",status:cf.issues.some(a=>"blocker"===a.severity)?"failed":"success",message:`评标结构符合性校验:${cf.diagnostics.length} 个结构组,${cf.diagnostics.filter(a=>"satisfied"===a.status).length} 个已满足,${cf.diagnostics.filter(a=>"missing"===a.status&&"required"===a.level).length} 个必查缺失(已自动补挂),${cf.diagnostics.filter(a=>"fragmented"===a.status).length} 个分散`,details:[...cf.diagnostics.map(a=>`${"satisfied"===a.status?"满足":"fragmented"===a.status?"分散":"补挂"}:${a.groupTitle}${"missing"===a.status?`(补挂小节:${a.missingSections.join("、")})`:""}`),...cf.issues.map(a=>`提示:${a.message}`).slice(0,8)]},{subtitle:"评标结构校验"})),B={...B,chapters:bX};let cj=await (0,M.Mv)(ar(b7).map(({item:a})=>aq(a)),bX.map(a=>aA(a.title))),ck=await aB(b7,bX,cj);ck.length>0&&((0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"tender-requirement-routing",status:"success",message:`评分项要求章节级路由:${ck.length} 条要求已路由到责任章节(生成时显性响应)`,details:ck.map(a=>`${a.kind}“${a.item.text}” → ${a.chapterTitle}(相似度 ${a.score.toFixed(2)})`)},{subtitle:"要求响应路由",order:ad.length})),W());let cl=await aN(),cm=await aT(),cn=function(a){let b=(0,K.yt)({template:{id:"runtime",name:a.templateName||"",outputTitle:"",description:"",category:"",chapters:a.chapters},chapters:a.chapters,requirement:a.requirement}),c=/施工组织设计|施工组织|施组|技术标/u.test(`${a.templateName||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`)||b.length>0,d=Object.values(a.factsModel?.canonical?.byKey||{}).map(a=>`${a.label}=${a.value}`),e=d.filter(a=>/建设规模|建筑面积|占地|用地面积|装配|层数|高度/u.test(a)).slice(0,8),f=(a.tenderRequirements?.frontScheduleClauses||[]).map(a=>a.text).filter(Boolean).slice(0,12),g=["正文必须落到本项目资料已确认的事实,不得使用模板化空话或跨小节复制段落","措施类内容写成“责任岗位+执行动作+量化标准+检查频次+整改时限+复查销项”闭环句式:同一自然段内三要素(责任岗位+检查频次+整改闭环)须同时出现,全文每 1500 字至少 1 段闭环句式","正文每 1000 字至少落位 6 处带单位量化工艺参数(mm/MPa/养护天数/间距/压实度等),施工流程与施工方法须有明确的工序顺序表达(形式由模型自然选择、不做统一要求:顺序词叙述、编号步骤、有序/无序列表或箭头链均可),每个分部分项方案至少 1 处 3 环节以上工序顺序表达",'专业工程类小节必须覆盖作业对象与工程量、工序顺序、施工方法三方面要素(呈现形式不限,段落式叙述或带标签分点均可),小节标题用专业工程正式名称(如"拆除工程"),禁止使用"工作包"等后台概念命名','质量目标与创优目标必须使用招标文件原文的奖项名称逐字落位,禁止替换、降级或省略为其他奖项名称(如把招标文件指定奖项写成其他奖项);招标文件"确保/达到"类等级要求不得弱化为"争创/争取"','B5 属地创优目标(安徽省属地适配项):招标文件未明确具体奖项时,正文必须提出不低于招标文件要求的属地创优目标,如"争创合肥市级优质工程""争创市级安全文明标准化工地"等,并在质量与文明施工章节落位','B5 表格数据一致性(丰乐镇第三轮实测:合计行 5088 与阶段工日之和 5808 矛盾、班组人数 22/28/30 多值并存):表格类内容(劳动力投入、材料配置、机械设备等)合计行数值必须与上方明细行数据一致、可由各行相加推导;各阶段人数与全项目峰值人数必须显式区分口径并保持一致(如写明"阶段高峰人数按阶段分别统计,合计行仅列全项目峰值口径");同一班组人数在配置表与进退场表中必须同值,不得多值并存',...f.length?[`投标人须知前附表响应条款(正文必须逐条落位或遵守,零响应即评标失分):${f.map((a,b)=>`${b+1}.${a}`).join(";")}`]:[]],h=a.chapters.map(b=>{var c;let d=(c=b.title,aU.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:bX,factsModel:bJ,projectGraph:bL||void 0,requirement:a.requirement,templateName:B.name,tenderRequirements:b7}),co=J({template:B,chapters:bX,factsModel:bJ,requirement:a.requirement,scopeConflicts:bM.scopeConflicts}),cp=function(a){if(!a||!an(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,N.dn)(a.text))),a.dateFabricationProhibited&&b.push("禁止编造开工日期:招标文件以开工令时间为准,正文不得自行设定具体日历开工日期,一律表述为“以开工令时间为准”。"),c("禁止性/约束性要求(正文不得违反)",a.prohibitionNotes),0===b.length)?"":`【招标文件评分项要求(系统从绑定资料提取,必须逐条响应,零响应即评标失分)】
|
|
119
119
|
${b.map((a,b)=>`${b+1}. ${a}`).join("\n")}
|
|
120
120
|
${(0,u.TP)("以上为系统提取的评分项要求内容:实质要求(奖项名称、数字参数、等级指标等)必须显性响应进正文;本段提示词文字本身(编号、括号说明等元话语)禁止复述进正文")}`}(b7);b_=[b$,co,cp].filter(Boolean).join("\n\n");let cq=function(a){let b=H(a.factsModel),c=b.selected,d=b.dropped.length>0?[`⚠️ 因 LLM 上下文预算限制,${b.dropped.length} 个低优先级事实未纳入蓝图;完整事实主表可在生成后的事实覆盖报告查看。`]:[],e=x(a),f={};for(let b of G)f[b]=new Set(a.factsModel[b]);let g=a.chapters.map((b,d)=>{let e=c.filter(a=>!!f.preciseFacts.has(a)||y(b.title).some(b=>(F[b]||[]).some(b=>f[b]?.has(a))));return{chapterIndex:d,title:b.title,facts:e,traceLines:e.map((a,b)=>I(a,b)),taskCard:D(b),executionPlan:C(b,a.factsModel)}});return{globalLines:["【全局文档蓝图与一致性约束】",`文档类型画像:${e.type};评分重点:${e.focus.join("、")}`,`文档目标:${a.template.outputTitle||a.template.name}`,a.requirement?`用户目标:${a.requirement}`:"",(0,t.FI)({templateName:a.template.name,outputTitle:a.template.outputTitle,requirement:a.requirement,chapters:a.chapters}),(0,u.TP)("证据引用约束:工期、质量目标、招标范围、金额、工程量、验收要求等项目专属事实必须来自可信基础事实主表或绑定材料,系统暂未确认的数字和参数不得编造;标准规范编号、法律法规名称属于公共专业知识,可依据现行有效版本直接引用,不要求材料提供,但不得虚构编号或引用已废止版本。"),(0,u.TP)("跨章一致性要求:所有章节必须共用同一套工期、质量、范围、资源和验收口径;不得在不同章节写出相互矛盾的项目基础信息。"),(0,u.TP)('总述数据使用约束:可信基础事实主表中的工程地点、建设规模(总建筑面积)、计划工期、改造范围等总述数据,只在项目概况/工程概况类章节集中交代;其他章节不得以"本项目为……"开头复述完整概况段,确需数据支撑时只引用所需的具体数字。'),...a.scopeConflicts?.length?[`【源级口径冲突裁决(最高优先级约束)】资料文件中存在同口径数值冲突,必须按下述裁决执行:
|
|
121
121
|
${E(a.scopeConflicts).join("\n")}`]:[]].filter(Boolean),matrixLines:[`事实覆盖矩阵:
|
|
@@ -124,8 +124,8 @@ ${a.chapters.map((b,c)=>{let d=A(b,a.factsModel);return`${c+1}. ${b.title}:${d
|
|
|
124
124
|
${b.facts.map(a=>`- ${w(a)}`).join("\n")}`:"可信基础事实主表(本章相关):系统当前结构化事实确认不足,应扩大本地知识库检索、补抽事实并修复事实落位;正文只能使用已确认事实,不得编造参数。",b&&b.traceLines.length?`关键事实证据追踪清单(本章相关):
|
|
125
125
|
${b.traceLines.join("\n")}`:"",...a.structure.matrixLines,b?`章节专业任务卡:
|
|
126
126
|
${b.taskCard}`:"",b?`章节实施方案:
|
|
127
|
-
${b.executionPlan}`:"",a.requirementRules||"",...a.structure.droppedFactNote].filter(Boolean).join("\n")}({chapterTitle:(0,o.GQ)(a.title),structure:cq,requirementRules:cp})}).constructionOrgContext,b.scopedBlueprint].filter(Boolean).join("\n\n"):b_};bH||(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"document-blueprint",status:"success",message:"已生成全局事实主表与文档蓝图,后续章节和小节将共用同一套专业约束",details:co.split("\n").slice(0,12)},{subtitle:"全局蓝图"}));let ct=(0,r.tF)({requirement:a.requirement,promptTexts:aS,template:B,chapters:bX,spec:aD}),cu=await bV;bK.documentPlan=cu.plan,bK.nodes.push(cu.node),(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:cu.node.outputSummary||"Agent 文档规划完成",details:cu.plan.chapters.map(a=>`${a.title}:${a.sections.length} 条细目`)},{subtitle:"Agent Document Planner",order:ad.length})),U=bX.map(a=>a.id);let cv=ct.targetChars||[...ct.chapterTargets.values()].reduce((a,b)=>a+b,0),cw=(0,aY.JP)({template:B,targetWords:cv,requirement:a.requirement,materialFileCount:ah.length,evidenceCount:bg.length}),cy=(0,aZ.C)({template:B,chapters:bX,targetWords:cv,requirement:a.requirement,materialFileCount:ah.length,evidenceCount:bg.length,hasVeryLargeExplicitChapter:bX.some(a=>(a.sections||[]).filter(Boolean).length>=30),configuredChapterConcurrency:Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),strategy:cw}),cz=(0,aY.Zk)(cw);(bD.factSanitize.truncated>0||bD.factSanitize.dropped>0||bD.factSanitize.repaired>0)&&(cz.factSanitize={...bD.factSanitize});let cA=Date.now();(0,P.t5)(cv),(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${cw.mode} 生成策略:章节审查 ${cw.enableChapterReview?"启用":"跳过"}、全局审查 ${cw.enableGlobalReview?`${cw.globalReviewSamplingRate&&cw.globalReviewSamplingRate<1?`抽检 ${Math.round((cw.globalReviewSamplingRate??1)*100)}%`:"启用"}`:"跳过"}、最终质量审查 ${cw.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${cw.enableDocumentBudgetExpansion?"启用":"跳过"}`,details:cy.triggers},{subtitle:"后台自动策略"})),bM.scopeConflicts.length>0&&(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"scope-conflict-resolution",status:"success",message:`源级数据口径冲突已裁决(补疑/澄清修正文件权威最高):${bM.scopeConflicts.map(a=>a.resolution?`${a.scope} → ${a.resolution}`:`${a.scope} → 待人工复核`).join(";")}`,details:bM.scopeConflicts.flatMap(a=>a.values.map(a=>`来源「${a.sourceFile||"未知文件"}」取值 ${a.value}${a.unit}`))},{subtitle:"数据口径裁决"}));let cB=(0,aX.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${b4} 章由 LLM 基于${ax?"OUTLINE 章节":"模板章节"}、项目资料理解和证据规划小节,${b3} 章已由模板显式提供小节并跳过规划`,details:b5.length?[...b5]:void 0},{subtitle:"小节规划策略"}),cC=ax?`;识别到 OUTLINE 章节 ${aw.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",cD=[...af.prompts.map(a=>`${a.category}|${a.roleId}|${a.id}|${a.name}|${a.bindingSource}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`),...af.unresolvedRoles.map(a=>`unresolved|${a}|项目角色配置中的提示词角色不存在`),...af.missingResourceRoles.map(a=>`missingResource|${a}|提示词角色未显式绑定资源`)];(0,aX.fx)(ad,(0,aX.X5)({type:"role_binding",roleId:Z,status:"success",message:`已绑定项目资料 ${ah.length} 份、${af.prompts.length} 个有效提示词;写作 ${af.writerPrompts.length}、章节 ${af.chapterPrompts.length}、抽取 ${af.extractionPrompts.length};已自动抽取运行时规则 ${aQ.executionSummary.length} 条${cC}`,details:[...cD,...aQ.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:ac,roleName:ac})),(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${aQ.executionSummary.length} 条,版本 ${aQ.sourceHash}`,details:aQ.executionSummary.length?[...aQ.executionSummary,`必需表格:${aQ.requiredTables.join("、")||"无"}`,`必含关键词:${aQ.requiredKeywords?.join("、")||"无"}`,`禁含内容:${aQ.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})),(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"document-readiness",status:aF.ready?"success":"failed",message:"生成准备度:绑定资料已就绪",details:aF.diagnostics},{subtitle:"生成准备度检查"})),(0,aX.fx)(ad,cB),W();let cE=Math.round(([...ct.chapterTargets.values()].reduce((a,b)=>a+b,0)||ct.targetChars||0)/Math.max(1,bX.length)),cG=Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),cH=cy.chapterConcurrency,cI=cy.reviewConcurrency;(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节流水线调度:${bX.length} 章全部同批并行生成,审查修复 ${cI} 路流水线(章节生成完立即进入审查,与后续章节生成重叠)`,details:[`有效章节数:${bX.length}`,`平均章节目标:${cE} 字`,Number.isFinite(cG)&&cG>0?`章节并发来自 DOCUMENT_CHAPTER_CONCURRENCY=${Math.floor(cG)}`:`全部章节并行生成,在飞调用不设并发上限;每章单轮修复(失败即放弃)`]},{subtitle:"章节流水线策略"})),W();let cJ=new u.jf(cI),cK=[],cL=[...a8].filter(Boolean).sort(),cM=Date.now(),cO=cL.length>0?(await (0,u.l$)(cT,async a=>bu(a,cL,Math.min(ba,12),""),{kind:"search"})).flat():[];cz.evidence.searchQueries+=cT.length,cz.evidence.searchMs+=Date.now()-cM;let cR=Date.now(),cS={basicFacts:function(a){let b=Object.values(a.byKey||{}).filter(a=>!!(a&&a.label&&a.value)).sort((a,b)=>(b.priority||0)-(a.priority||0));return 0===b.length?"":b.slice(0,60).map(a=>`- ${a.label}:${a.value}`).join("\n")}(bM),chapterTitles:bX.map(a=>a.title),signal:a.signal,diagnostics:cz},cU=await ej(cS),cW=cU?function(a){let b=["【计划数据主表——全项目计划类数值唯一数据源,正文引用必须与此表完全一致,不得自行推导不同数值;主表未覆盖的计划数据可按主表口径推导,全文档统一】"];return b.push(`- 劳动力峰值:高峰期总人数 ${a.laborPeak.count} 人(${a.laborPeak.phase})`),a.laborByPhase.length&&b.push(`- 分阶段劳动力:${a.laborByPhase.map(a=>`${a.phase} ${a.count} 人`).join("、")}`),a.machines.length&&b.push(`- 主要机械:${a.machines.map(a=>`${a.name}${a.spec?`(${a.spec})`:""} ${a.count} 台`).join("、")}`),a.materialBatches.length&&b.push(`- 材料进场批次:${a.materialBatches.map(a=>`${a.name}——${a.batchDesc}`).join(";")}`),a.inspectionBatches.length&&b.push(`- 检验批划分:${a.inspectionBatches.map(a=>`${a.scope}:${a.planDesc}`).join(";")}`),a.scheduleNodes.length&&b.push(`- 进度节点:${a.scheduleNodes.map(a=>`${a.node}(${a.offset})`).join("、")}`),b.join("\n")}(cU):"",cX=function(a){if(0===a.length)return"";let b=["【项目关键决策锁定——以下技术决策已从项目资料中裁决锁定,全文各章必须严格一致;涉及已锁定类目时只能采用锁定值,不得另写其他方案/机械/体系(锁定类目之外的常规内容仍按证据与章节要求正常编写)】"];for(let c of a)b.push(`- ${c.label}:${c.values.join("、")}`);return b.join("\n")}(bC({facts:[...bD.localFacts,...bD.projectBasicFacts,...bD.preciseFacts],evidence:bx}));(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"plan-data-master",status:"success",message:cU?`计划数据主表已生成:劳动力峰值 ${cU.laborPeak.count} 人、机械 ${cU.machines.length} 类、检验批 ${cU.inspectionBatches.length} 类、进度节点 ${cU.scheduleNodes.length} 个,将作为全文计划类数值唯一口径注入各章写作`:"计划数据主表未生成(自动回退各章独立推导口径,数据一致性由事后审查兜底)",details:cU?[`耗时 ${Date.now()-cR}ms`,cU.laborByPhase.length?`分阶段劳动力:${cU.laborByPhase.map(a=>`${a.phase} ${a.count} 人`).join("、")}`:"分阶段劳动力:未推导",...cU.machines.slice(0,8).map(a=>`${a.name} ${a.count} 台`)]:[`耗时 ${Date.now()-cR}ms`,`失败原因:${cS.lastFailure||"未知"}`]},{subtitle:"计划数据口径"})),W(),cz.metrics.push({name:"phase:plan",startedAt:cA,endedAt:Date.now(),durationMs:Date.now()-cA});let cY=Date.now();for(let b=0;b<bX.length;b+=cH){let d=bX.slice(b,b+cH);for(let e of(await Promise.all(d.map(async(d,e)=>{let f,g=b+e;(0,u.Te)(a.signal);let h=Date.now(),i=ad.length;try{let b,e;ad.push((0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:af.writerPrompts[0]?.id,status:"running",message:`${(0,o.GQ)(d.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${g+1}/${bX.length}`,`二级小节:${d.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:g+1,total:bX.length,label:"章节生成"}},{subtitle:(0,o.GQ)(d.title),order:g})),W();let j=a.resumeChapters?.find(a=>a.id===d.id||a.title===d.title),k=j?.content?.trim(),l=j?.evidence?.length?[...j.evidence]:[],m=as.chapterPlans.find(a=>a.chapterId===d.id||a.chapterTitle===d.title),t=m?Object.values(m.evidenceQueries).flat().filter(Boolean):[],v=d.queries.length>0?d.queries:[B.name,B.outputTitle,d.title],w=bW.get(d.id);if(bL&&w&&w.graphFiles.size>0){let a=[...a8],b=b=>a.includes(b)?b:a.find(a=>a.endsWith(b)||a.includes(b));for(let a of[...w.graphFiles].map(a=>b(a)||a).filter(a=>(0,aY.Tz)(c,a,a8))){let b=bt(a);if(b?.chunks?.length)for(let c of b.chunks)l.push({chapterId:d.id,filePath:b.file?.relativePath||a,score:5+(w.graphWorks.length+w.graphMethods.length)*.5,content:c.content,roleId:a4.get(a),processingType:a5.get(a),sectionTitle:c.sectionTitle,source:"graph-evidence"})}}let x=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title),y=dy(d,[...v,...t],[]),z=Date.now();ad[i]=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:af.writerPrompts[0]?.id,status:"running",message:`${(0,o.GQ)(d.title)} 正在执行质量优先的章节检索${w?.graphFiles.size?`(图谱匹配 ${w.graphFiles.size} 个文件)`:""}`,details:y.map(a=>`检索:${a.slice(0,42)}`),progress:{current:g+1,total:bX.length,label:"证据检索"}},{subtitle:(0,o.GQ)(d.title),order:g}),W();let A=k?[]:[...a8].filter(Boolean).sort(),C=k?[]:bH?.evidenceByChapterId?.[d.id]||[];C.length>0&&l.push(...C);let D=[],E=(d.requiredFacts||[]).filter(a=>!!a&&!y.some(b=>b.includes(a)||a.includes(b))).map(a=>`${d.title} ${a}`),F=[...y,...E];if(A.length>0&&F.length>0){(0,u.Te)(a.signal);let b=await (0,u.l$)(F,async a=>bu(a,A,Math.min(ba,12),d.title),{kind:"search"});D.push(...b)}for(let a of(cz.evidence.searchQueries+=F.length,cz.evidence.searchMs+=Date.now()-z,ad[i]=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,o.GQ)(d.title)} KB 检索完成:${F.length} 组查询,准备深度召回与语义排序`,progress:{current:g+1,total:bX.length,label:"证据检索"}},{subtitle:(0,o.GQ)(d.title),order:g}),W(),D))l.push(...a.filter(a=>(0,aY.Tz)(c,a.filePath,a3)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:a4.get(a.filePath),processingType:a5.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));x&&A.length>0&&cO.length>0&&l.push(...cO.filter(a=>(0,aY.Tz)(c,a.filePath,a3)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:a4.get(a.filePath),processingType:a5.get(a.filePath),sectionTitle:a.sectionTitle,source:"basic-fact-cache"})));let G=k?[]:await (0,a$.$b)({manager:S,projectRoot:c,chapter:d,plan:m,profile:am,scopedFilePaths:A,limitPerQuery:Math.min(ba,10),signal:a.signal}).catch(()=>[]);l.push(...G);let H=new Set((d.pinnedEvidenceFilePaths||[]).filter(Boolean)),I=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)&&l.push(...bA.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"})));let J=bx.filter(a=>/招标|投标须知|评标办法|专用合同条款|投标人须知/u.test(`${a.filePath||""}${a.sectionTitle||""}`));for(let a of(/概况|工程|项目|总体|部署/u.test(d.title)&&J.length>0&&l.push(...J.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"}))),new Set([...H]))){if(!(0,aY.Tz)(c,a,a3))continue;let b=H.has(a),e=bt(a);e&&l.push(...e.chunks.map(a=>({chapterId:d.id,filePath:e.file.relativePath,score:1,content:a.content,roleId:a4.get(e.file.relativePath),processingType:a5.get(e.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let K=l.filter(a=>(0,aY.Tz)(c,a.filePath,a8));if(!k&&aP.enabled&&aP.allowProjectFacts){let b=await bq({config:aP,chapterId:d.id,chapterTitle:d.title,sectionTitles:d.sections||[],runtimeRules:aQ,localFacts:[...bJ.project,...bJ.schedule,...bJ.quality,...bJ.safety,...bJ.resources,...bJ.preciseFacts],signal:a.signal});bi.queries.push(...b.queries),bi.filteredCount+=b.filtered+b.evidence.length}let O=k?[]:(0,a$.SK)({project:a6,chapter:d,plan:m,profile:am,scopedFilePaths:A,highRisk:bf.highRisk});O.length>0&&K.push(...O),K=(0,br.Su)(K,a9),bB.size>0&&(K=K.filter(a=>!bB.has((0,N.hM)(a))));let R=(()=>{let a=Number(process.env.DOCUMENT_SEMANTIC_TOP_CANDIDATES);return Number.isFinite(a)&&a>0?Math.floor(a):3e3})(),U=function(a,b,c){if(c<=0||b.length<=c)return b;let d=b.map(b=>({item:b,lexical:(0,n.A1)(b,a.requiredFacts)*du(a,b.processingType)+dv(a,b)}));return d.sort((a,b)=>b.lexical-a.lexical),d.slice(0,c).map(a=>a.item)}(d,K,R),V=await (0,M.Mv)([(0,L.Yx)(d)],U.map(dw)),X=dx(d,K,{preservePinned:!0,semantic:{similarity:V,queryText:(0,L.Yx)(d)}},cz);X=cN(X,bM.scopeConflicts),(0,br.U2)(X,a9,`chapter:${d.id}:initial`);let Z=d.requiredFacts.filter(a=>!X.some(b=>(0,p.Lk)(b,a))),$=0,_=w?[w.graphWorks.length?`图谱识别本章工程内容:${w.graphWorks.join("、")}`:"",w.graphMethods.length?`图谱识别本章施工方法:${w.graphMethods.join("、")}`:"",w.graphBoqItems.length?`图谱识别本章BOQ清单项(${w.graphBoqItems.length}项):${w.graphBoqItems.map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",w.gaps.length?`图谱识别本章资料缺口:${w.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",aa=function(a){let b=[];for(let c of a){if(!c.resolution)continue;let a=c.values.filter(a=>`${a.value}${a.unit}`!==c.resolution);if(0===a.length)continue;let d=a.map(a=>`${a.value}${a.unit}`).join("、");"high"===c.confidence?b.push(`${c.scope}必须统一为 ${c.resolution}(补疑/答疑/澄清类修正文件权威最高;${d} 已被修正,正文禁止出现)`):"medium"===c.confidence?b.push(`${c.scope}应统一为 ${c.resolution}(按资料来源优先级裁决;${d} 为败选值,正文避免使用)`):b.push(`${c.scope}参考口径为 ${c.resolution}(锚定较弱,请人工复核;${d} 不参与自动改写)`)}return b}(bM.scopeConflicts),ab=ck.length>0?(()=>{let a=aA(d.title),b=ck.filter(b=>b.chapterTitle===a);return 0===b.length?"":["【本章必须显性响应的招标要求(逐条写入正文,零响应即评标失分)】",...b.map(a=>`- ${a.kind}:${a.item.text}`)].join("\n")})():"",ac=/扬尘|文明施工|环境保护|绿色施工|安全文明|环保/u.test(`${d.title}${d.purpose||""}`)?"【扬尘治理六个百分百——规范固定条目,必须逐项落实并写入正文,每项一句具体措施,六项不得缺项;若本项目无拆迁工程,对“拆迁工地100%湿法作业”必须显性写明“本项目无拆迁工程,不涉及拆迁工地湿法作业”,不得省略】\n- 施工工地周边100%围挡\n- 物料堆放100%覆盖\n- 出入车辆100%冲洗\n- 施工现场地面100%硬化\n- 拆迁工地100%湿法作业\n- 渣土车辆100%密闭运输":"",ae=(d.sections||[]).filter(a=>!/^(?:施工概况|施工流程|施工方法)$/u.test(a.trim())&&!/^附录/u.test(a.trim())),ag=ae.length>0?`【必须输出以下规划小节为三级标题(### 小节名),逐个小节展开正式正文:每小节正文不少于 100 字,不得只写标题、不得空小节、不得用表格替代正文;小节名与章标题相同或相近也必须输出,不得省略或合并】${ae.join("、")}`:"",ai=[_,ab,ag,ac,aa.length?`【数据口径强制约束】${aa.join(";")}`:"",m?.writingGoal,m?.mustCover?.length?`本章必须覆盖:${m.mustCover.join("、")}`:"",m?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${m.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),aj=dm(af,d);if(af.writerPrompts.length>0&&!aj.primaryWriter)throw Error(`${(0,o.GQ)(d.title)} 写作主控提示词未进入章节生成阶段`);let ak=[aj.promptTexts,aG].filter(Boolean).join("\n\n"),al=aj.promptDetails.length?aj.promptDetails:["未绑定章节写作提示词"],an=(0,Q.rC)({template:B,chapter:d,spec:aD,profile:aE,promptTexts:ak,requirement:a.requirement,plan:m?{requiredContents:m.mustCover,evidenceNeeds:Object.values(m.evidenceQueries).flat()}:void 0}),ao=(0,Q.ji)({needs:an,factsModel:bJ,evidence:K,profile:aE,excludedEvidenceKeys:bB}),ap=ao.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),aq=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>eg(`${a.sectionTitle||""}${a.content||""}`).includes(eg(b)))),c=(a.chapter.tablePlans||[]).flatMap(a=>a.fillability?.missingProjectFactFields||[]),d=a.evidence.length<3?["章节证据数量不足"]:[],e=b.length+c.length+d.length,f=e>=5?"high":e>=2?"medium":"low",g="high"===f?"evidence_first":c.length>0?"generate_with_review_notes":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:f,missingFacts:b,missingEvidence:d,tableFieldGaps:[...new Set(c)],suggestedStrategy:g,reason:0===e?"章节事实、证据和表格可填性满足常规生成条件。":`识别到 ${e} 项生成前缺口,按 ${g} 策略生成。`}}({chapter:d,evidence:X}),ar=new Set(X.map(a=>a.filePath)).size,at=!!w&&(w?.graphFiles.size||0)>=8&&ar>=6&&0===Z.length&&"low"===aq.riskLevel,au=function(a){let b=a.evidenceFileCount<=2;return a.scopedFileCount>80?b:"evidence_first"===a.suggestedStrategy||a.highRisk||a.missingFactsCount>0||a.requiredMissingNeedsCount>0||b||a.evidenceCount<8&&"low"!==a.riskLevel}({scopedFileCount:A.length,evidenceCount:X.length,evidenceFileCount:ar,suggestedStrategy:aq.suggestedStrategy,highRisk:bf.highRisk,missingFactsCount:Z.length,requiredMissingNeedsCount:ap.length,riskLevel:aq.riskLevel});if(!at&&au&&A.length>0){let b=new Set([...Z,...ap]).size;b>0&&(ad[i]=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,o.GQ)(d.title)} 正在深度召回缺失事实证据(${b} 项需求)`,progress:{current:g+1,total:bX.length,label:"深度召回"}},{subtitle:(0,o.GQ)(d.title),order:g}),W());let e=await aW({manager:S,projectRoot:c,chapter:d,scopedFilePaths:A,fileRoleByPath:a4,fileProcessingByPath:a5,requiredNeeds:[...new Set([...Z,...ap])],highRisk:bf.highRisk||ap.length>0,signal:a.signal}).catch(()=>[]);$=e.length,e.length>0&&(K=[...K,...(0,br.Su)(e,a9)],bB.size>0&&(K=K.filter(a=>!bB.has((0,N.hM)(a)))),X=dx(d,K,{preservePinned:!0},cz),X=cN(X,bM.scopeConflicts),(0,br.U2)(X,a9,`chapter:${d.id}:deep`),Z=d.requiredFacts.filter(a=>!X.some(b=>(0,p.Lk)(b,a)))),ap=(ao=(0,Q.ji)({needs:an,factsModel:bJ,evidence:K,profile:aE,excludedEvidenceKeys:bB})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),ad[i]=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,o.GQ)(d.title)} 深度召回完成:命中 ${$} 条${ap.length>0?`,仍缺 ${ap.length} 项(触发轻量补充)`:""}`,progress:{current:g+1,total:bX.length,label:"证据检索"}},{subtitle:(0,o.GQ)(d.title),order:g}),W()}if(ap.length>0&&A.length>0){let b=(0,br.Su)(await aW({manager:S,projectRoot:c,chapter:d,scopedFilePaths:A,fileRoleByPath:a4,fileProcessingByPath:a5,requiredNeeds:ap,highRisk:!0,signal:a.signal}).catch(()=>[]),a9);b.length>0&&(K=[...K,...b],bB.size>0&&(K=K.filter(a=>!bB.has((0,N.hM)(a)))),X=dx(d,K,{preservePinned:!0},cz),X=cN(X,bM.scopeConflicts),(0,br.U2)(X,a9,`chapter:${d.id}:supplemental`),Z=d.requiredFacts.filter(a=>!X.some(b=>(0,p.Lk)(b,a))),ap=(ao=(0,Q.ji)({needs:an,factsModel:bJ,evidence:K,profile:aE,excludedEvidenceKeys:bB})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}for(let a of((0,br.U2)(X,a9,`chapter:${d.id}:writer-input`),0===X.length&&bj.push(`${d.title}:缺少可支撑正文的项目资料证据`),Z))bj.push(`${d.title}:事实需求未满足 ${a}`);let av=(0,aX.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:bg.length>0?"success":"failed",message:`已检索/绑定 ${bg.length} 条证据`});bo<0?bo=(0,aX.fx)(ad,av):ad[bo]={...av,order:ad[bo]?.order??av.order},W(),(0,u.Te)(a.signal);let aw=new Map,ax=b=>{let e=(0,u.c6)({kind:"section",query:`${d.title} ${b}`.trim(),scopedFilePaths:A}),f=aw.get(e);if(f)return Promise.resolve(f);let g=(0,a_.Ym)(b,d,X),h=g.filter(a=>bd.AM.test(a.content)).length;return g.length>=4&&h>=1?(aw.set(e,g),Promise.resolve(g)):dz({manager:S,projectRoot:c,chapter:d,sectionTitle:b,scopedFilePaths:A,fileRoleByPath:a4,fileProcessingByPath:a5,signal:a.signal}).then(a=>(aw.set(e,a),a))},ay=b=>{if(0===b.length||0===A.length)return Promise.resolve([]);let e=b.join(" ");return dz({manager:S,projectRoot:c,chapter:d,sectionTitle:e,scopedFilePaths:A,fileRoleByPath:a4,fileProcessingByPath:a5,signal:a.signal}).catch(()=>[])},az=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,p.Lk)(a,b)||`${a.sectionTitle||""} ${a.content}`.includes(b))).length,d=a.chapter.requiredFacts.length,e=a.chapter.requiredFacts.filter(b=>a.evidence.some(a=>(0,p.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:d,evidence:X,risk:bf});bh.push(az);let aB=new Set(X.map(a=>a.filePath)),aC=X.reduce((a,b)=>a+b.content.length,0),aF=[...bf.highRisk?[`召回覆盖风险(${bf.riskReason||"切片未完全预加载"}):已加载 ${bf.loadedChunks}/${bf.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${C.length} 条`,`深召回证据:${$} 条`,`事实覆盖:${az.requiredFactCovered}/${az.requiredFactTotal}`,`小节覆盖:${az.sectionCovered}/${az.sectionTotal}`];ad[i]=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:af.writerPrompts[0]?.id,status:"running",message:`${(0,o.GQ)(d.title)} 已选取 ${X.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aB.size} 份`,`上下文字符:${aC}`,`检索查询:${y.length} 组`,...aF],progress:{current:g+1,total:bX.length,label:"正文生成"}},{subtitle:(0,o.GQ)(d.title),order:g}),W(),cz.evidence.contextChars+=aC;let aH=(0,Q.n9)(ao),aI=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)?bF:[],aJ=(0,a_.qX)((0,a_.hZ)({chapter:d,plan:void 0,spec:aD,roleFacts:I,evidence:X,missingFacts:Z,indexedFacts:[...aI,...aH],resolvedFactNeeds:ao,factNeedsPrompt:(0,Q.GK)(ao),specAuthorityMap:bJ.specAuthorityMap})),aK=(0,ef.up)({plan:cu.plan,chapter:d,context:bK,evidence:X});if(bK.chapterTasks=[...(bK.chapterTasks||[]).filter(a=>a.chapterId!==d.id),aK.task],bK.nodes.push(aK.node),(0,cQ.cN)(bK),(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:`agent-chapter-task-${d.id}`,status:aK.task.ready||k?"success":"failed",message:aK.task.ready?aK.node.outputSummary||`${(0,o.GQ)(d.title)} 章节任务规划完成`:k?`${(0,o.GQ)(d.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:aK.node.outputSummary||`${(0,o.GQ)(d.title)} 章节任务规划完成`,details:aK.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:ad.length})),W(T),!aK.task.ready&&!k)throw Error(`${(0,o.GQ)(d.title)} 章节任务未就绪:${aK.task.issues.map(a=>a.message).join(";")}`);let aL=[ak,(0,ef.bT)(aK.task)].filter(Boolean).join("\n\n"),aM={total:ao.length,satisfied:ao.filter(a=>"satisfied"===a.status).length,missing:ao.filter(a=>"missing"===a.status).length,lowConfidence:ao.filter(a=>"low_confidence"===a.status).length};for(let a of ap)bj.push(`${d.title}:事实需求未确认 ${a}`);let aN=ct.chapterTargets.get(d.id)||1200,aO=d.sections?.filter(Boolean).length||0,aR=/[、,,;;]/u.test(d.title),aS=function(a){let{budgetTarget:b,sectionCount:c,title:d,longformStrict:e}=a,f=/[、,,;;]/u.test(d),g=/工期|进度|质量|安全|危大|资源|人材机|保障|措施|重难点/u.test(d),h=/概况|结语|附录|说明/u.test(d),i=c>0?c*(f?720:g?900:780):g?5200:3600,j=e?h?2600:g?5200:3600:Math.min(1200,b),k=e?Math.min(Math.max(4200,b),c>=30?9800:f?8800:g?9200:7200):b,l=e?Math.max(j,b):Math.max(j,Math.min(b,i,k));return{budgetTarget:b,roundTarget:l,structureTarget:i,maxWords:Math.ceil(l*(a.longformStrict?1.12:1.18)),label:`章节预算约 ${b} 字,本轮生成约 ${l} 字,结构目标约 ${i} 字`}}({budgetTarget:aN,sectionCount:aO,title:d.title,longformStrict:ct.longformStrict}),aT=Math.ceil(aS.maxWords*(ct.maxChars?1.05:1)),aU=aS.roundTarget,aV=(0,a_.uV)(aU,aU),aZ=aO>0?ct.longformStrict?aU:Math.min(aU,Math.max(1800,aS.structureTarget)):aU,a0=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),a1=process.env.DOCUMENT_SECTION_FIRST_GENERATION,a2=void 0!==a1&&0===Number(a1),a7=void 0!==a1&&0!==Number(a1),bb=aO>=2&&aO<=a0&&!aR,bk=!a2&&aO>=2&&(aO>a0||aR||ct.longformStrict&&aO>=6),bl=!a2&&!bk&&aO>=2&&aO<=a0&&(a7||bb||ct.longformStrict),bp=0,bs=a=>{let b=Date.now();if(b-bp<3e3)return;bp=b;let c=a.filter(Boolean).join("\n\n");c.trim()&&W([...T,{id:d.id,title:d.title,content:`## ${d.title}
|
|
127
|
+
${b.executionPlan}`:"",a.requirementRules||"",...a.structure.droppedFactNote].filter(Boolean).join("\n")}({chapterTitle:(0,o.GQ)(a.title),structure:cq,requirementRules:cp})}).constructionOrgContext,b.scopedBlueprint].filter(Boolean).join("\n\n"):b_};bH||(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"document-blueprint",status:"success",message:"已生成全局事实主表与文档蓝图,后续章节和小节将共用同一套专业约束",details:co.split("\n").slice(0,12)},{subtitle:"全局蓝图"}));let ct=(0,r.tF)({requirement:a.requirement,promptTexts:aS,template:B,chapters:bX,spec:aD}),cu=await bV;bK.documentPlan=cu.plan,bK.nodes.push(cu.node),(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:cu.node.outputSummary||"Agent 文档规划完成",details:cu.plan.chapters.map(a=>`${a.title}:${a.sections.length} 条细目`)},{subtitle:"Agent Document Planner",order:ad.length})),U=bX.map(a=>a.id);let cv=ct.targetChars||[...ct.chapterTargets.values()].reduce((a,b)=>a+b,0),cw=(0,aY.JP)({template:B,targetWords:cv,requirement:a.requirement,materialFileCount:ah.length,evidenceCount:bg.length}),cy=(0,aZ.C)({template:B,chapters:bX,targetWords:cv,requirement:a.requirement,materialFileCount:ah.length,evidenceCount:bg.length,hasVeryLargeExplicitChapter:bX.some(a=>(a.sections||[]).filter(Boolean).length>=30),configuredChapterConcurrency:Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),strategy:cw}),cz=(0,aY.Zk)(cw);(bD.factSanitize.truncated>0||bD.factSanitize.dropped>0||bD.factSanitize.repaired>0)&&(cz.factSanitize={...bD.factSanitize});let cA=Date.now();(0,P.t5)(cv),(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${cw.mode} 生成策略:章节审查 ${cw.enableChapterReview?"启用":"跳过"}、全局审查 ${cw.enableGlobalReview?`${cw.globalReviewSamplingRate&&cw.globalReviewSamplingRate<1?`抽检 ${Math.round((cw.globalReviewSamplingRate??1)*100)}%`:"启用"}`:"跳过"}、最终质量审查 ${cw.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${cw.enableDocumentBudgetExpansion?"启用":"跳过"}`,details:cy.triggers},{subtitle:"后台自动策略"})),bM.scopeConflicts.length>0&&(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"scope-conflict-resolution",status:"success",message:`源级数据口径冲突已裁决(补疑/澄清修正文件权威最高):${bM.scopeConflicts.map(a=>a.resolution?`${a.scope} → ${a.resolution}`:`${a.scope} → 待人工复核`).join(";")}`,details:bM.scopeConflicts.flatMap(a=>a.values.map(a=>`来源「${a.sourceFile||"未知文件"}」取值 ${a.value}${a.unit}`))},{subtitle:"数据口径裁决"}));let cB=(0,aX.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${b4} 章由 LLM 基于${ax?"OUTLINE 章节":"模板章节"}、项目资料理解和证据规划小节,${b3} 章已由模板显式提供小节并跳过规划`,details:b5.length?[...b5]:void 0},{subtitle:"小节规划策略"}),cC=ax?`;识别到 OUTLINE 章节 ${aw.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",cD=[...af.prompts.map(a=>`${a.category}|${a.roleId}|${a.id}|${a.name}|${a.bindingSource}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`),...af.unresolvedRoles.map(a=>`unresolved|${a}|项目角色配置中的提示词角色不存在`),...af.missingResourceRoles.map(a=>`missingResource|${a}|提示词角色未显式绑定资源`)];(0,aX.fx)(ad,(0,aX.X5)({type:"role_binding",roleId:Z,status:"success",message:`已绑定项目资料 ${ah.length} 份、${af.prompts.length} 个有效提示词;写作 ${af.writerPrompts.length}、章节 ${af.chapterPrompts.length}、抽取 ${af.extractionPrompts.length};已自动抽取运行时规则 ${aQ.executionSummary.length} 条${cC}`,details:[...cD,...aQ.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:ac,roleName:ac})),(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${aQ.executionSummary.length} 条,版本 ${aQ.sourceHash}`,details:aQ.executionSummary.length?[...aQ.executionSummary,`必需表格:${aQ.requiredTables.join("、")||"无"}`,`必含关键词:${aQ.requiredKeywords?.join("、")||"无"}`,`禁含内容:${aQ.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})),(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"document-readiness",status:aF.ready?"success":"failed",message:"生成准备度:绑定资料已就绪",details:aF.diagnostics},{subtitle:"生成准备度检查"})),(0,aX.fx)(ad,cB),W();let cE=Math.round(([...ct.chapterTargets.values()].reduce((a,b)=>a+b,0)||ct.targetChars||0)/Math.max(1,bX.length)),cG=Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),cH=cy.chapterConcurrency,cI=cy.reviewConcurrency;(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节流水线调度:${bX.length} 章全部同批并行生成,审查修复 ${cI} 路流水线(章节生成完立即进入审查,与后续章节生成重叠)`,details:[`有效章节数:${bX.length}`,`平均章节目标:${cE} 字`,Number.isFinite(cG)&&cG>0?`章节并发来自 DOCUMENT_CHAPTER_CONCURRENCY=${Math.floor(cG)}`:`全部章节并行生成,在飞调用不设并发上限;每章单轮修复(失败即放弃)`]},{subtitle:"章节流水线策略"})),W();let cJ=new u.jf(cI),cK=[],cL=[...a8].filter(Boolean).sort(),cM=Date.now(),cO=cL.length>0?(await (0,u.l$)(cT,async a=>bu(a,cL,Math.min(ba,12),""),{kind:"search"})).flat():[];cz.evidence.searchQueries+=cT.length,cz.evidence.searchMs+=Date.now()-cM;let cR=Date.now(),cS={basicFacts:function(a){let b=Object.values(a.byKey||{}).filter(a=>!!(a&&a.label&&a.value)).sort((a,b)=>(b.priority||0)-(a.priority||0));return 0===b.length?"":b.slice(0,60).map(a=>`- ${a.label}:${a.value}`).join("\n")}(bM),chapterTitles:bX.map(a=>a.title),signal:a.signal,diagnostics:cz},cU=await ek(cS),cW=cU?function(a){let b=["【计划数据主表——全项目计划类数值唯一数据源,正文引用必须与此表完全一致,不得自行推导不同数值;主表未覆盖的计划数据可按主表口径推导,全文档统一】"];return b.push(`- 劳动力峰值:高峰期总人数 ${a.laborPeak.count} 人(${a.laborPeak.phase})`),a.laborByPhase.length&&b.push(`- 分阶段劳动力:${a.laborByPhase.map(a=>`${a.phase} ${a.count} 人`).join("、")}`),a.machines.length&&b.push(`- 主要机械:${a.machines.map(a=>`${a.name}${a.spec?`(${a.spec})`:""} ${a.count} 台`).join("、")}`),a.materialBatches.length&&b.push(`- 材料进场批次:${a.materialBatches.map(a=>`${a.name}——${a.batchDesc}`).join(";")}`),a.inspectionBatches.length&&b.push(`- 检验批划分:${a.inspectionBatches.map(a=>`${a.scope}:${a.planDesc}`).join(";")}`),a.scheduleNodes.length&&b.push(`- 进度节点:${a.scheduleNodes.map(a=>`${a.node}(${a.offset})`).join("、")}`),b.join("\n")}(cU):"",cX=function(a){if(0===a.length)return"";let b=["【项目关键决策锁定——以下技术决策已从项目资料中裁决锁定,全文各章必须严格一致;涉及已锁定类目时只能采用锁定值,不得另写其他方案/机械/体系(锁定类目之外的常规内容仍按证据与章节要求正常编写)】"];for(let c of a)b.push(`- ${c.label}:${c.values.join("、")}`);return b.join("\n")}(bC({facts:[...bD.localFacts,...bD.projectBasicFacts,...bD.preciseFacts],evidence:bx}));(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:"plan-data-master",status:"success",message:cU?`计划数据主表已生成:劳动力峰值 ${cU.laborPeak.count} 人、机械 ${cU.machines.length} 类、检验批 ${cU.inspectionBatches.length} 类、进度节点 ${cU.scheduleNodes.length} 个,将作为全文计划类数值唯一口径注入各章写作`:"计划数据主表未生成(自动回退各章独立推导口径,数据一致性由事后审查兜底)",details:cU?[`耗时 ${Date.now()-cR}ms`,cU.laborByPhase.length?`分阶段劳动力:${cU.laborByPhase.map(a=>`${a.phase} ${a.count} 人`).join("、")}`:"分阶段劳动力:未推导",...cU.machines.slice(0,8).map(a=>`${a.name} ${a.count} 台`)]:[`耗时 ${Date.now()-cR}ms`,`失败原因:${cS.lastFailure||"未知"}`]},{subtitle:"计划数据口径"})),W(),cz.metrics.push({name:"phase:plan",startedAt:cA,endedAt:Date.now(),durationMs:Date.now()-cA});let cY=Date.now();for(let b=0;b<bX.length;b+=cH){let d=bX.slice(b,b+cH);for(let e of(await Promise.all(d.map(async(d,e)=>{let f,g=b+e;(0,u.Te)(a.signal);let h=Date.now(),i=ad.length;try{let b,e;ad.push((0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:af.writerPrompts[0]?.id,status:"running",message:`${(0,o.GQ)(d.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${g+1}/${bX.length}`,`二级小节:${d.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:g+1,total:bX.length,label:"章节生成"}},{subtitle:(0,o.GQ)(d.title),order:g})),W();let j=a.resumeChapters?.find(a=>a.id===d.id||a.title===d.title),k=j?.content?.trim(),l=j?.evidence?.length?[...j.evidence]:[],m=as.chapterPlans.find(a=>a.chapterId===d.id||a.chapterTitle===d.title),t=m?Object.values(m.evidenceQueries).flat().filter(Boolean):[],v=d.queries.length>0?d.queries:[B.name,B.outputTitle,d.title],w=bW.get(d.id);if(bL&&w&&w.graphFiles.size>0){let a=[...a8],b=b=>a.includes(b)?b:a.find(a=>a.endsWith(b)||a.includes(b));for(let a of[...w.graphFiles].map(a=>b(a)||a).filter(a=>(0,aY.Tz)(c,a,a8))){let b=bt(a);if(b?.chunks?.length)for(let c of b.chunks)l.push({chapterId:d.id,filePath:b.file?.relativePath||a,score:5+(w.graphWorks.length+w.graphMethods.length)*.5,content:c.content,roleId:a4.get(a),processingType:a5.get(a),sectionTitle:c.sectionTitle,source:"graph-evidence"})}}let x=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title),y=dy(d,[...v,...t],[]),z=Date.now();ad[i]=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:af.writerPrompts[0]?.id,status:"running",message:`${(0,o.GQ)(d.title)} 正在执行质量优先的章节检索${w?.graphFiles.size?`(图谱匹配 ${w.graphFiles.size} 个文件)`:""}`,details:y.map(a=>`检索:${a.slice(0,42)}`),progress:{current:g+1,total:bX.length,label:"证据检索"}},{subtitle:(0,o.GQ)(d.title),order:g}),W();let A=k?[]:[...a8].filter(Boolean).sort(),C=k?[]:bH?.evidenceByChapterId?.[d.id]||[];C.length>0&&l.push(...C);let D=[],E=(d.requiredFacts||[]).filter(a=>!!a&&!y.some(b=>b.includes(a)||a.includes(b))).map(a=>`${d.title} ${a}`),F=[...y,...E];if(A.length>0&&F.length>0){(0,u.Te)(a.signal);let b=await (0,u.l$)(F,async a=>bu(a,A,Math.min(ba,12),d.title),{kind:"search"});D.push(...b)}for(let a of(cz.evidence.searchQueries+=F.length,cz.evidence.searchMs+=Date.now()-z,ad[i]=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,o.GQ)(d.title)} KB 检索完成:${F.length} 组查询,准备深度召回与语义排序`,progress:{current:g+1,total:bX.length,label:"证据检索"}},{subtitle:(0,o.GQ)(d.title),order:g}),W(),D))l.push(...a.filter(a=>(0,aY.Tz)(c,a.filePath,a3)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:a4.get(a.filePath),processingType:a5.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));x&&A.length>0&&cO.length>0&&l.push(...cO.filter(a=>(0,aY.Tz)(c,a.filePath,a3)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:a4.get(a.filePath),processingType:a5.get(a.filePath),sectionTitle:a.sectionTitle,source:"basic-fact-cache"})));let G=k?[]:await (0,a$.$b)({manager:S,projectRoot:c,chapter:d,plan:m,profile:am,scopedFilePaths:A,limitPerQuery:Math.min(ba,10),signal:a.signal}).catch(()=>[]);l.push(...G);let H=new Set((d.pinnedEvidenceFilePaths||[]).filter(Boolean)),I=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)&&l.push(...bA.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"})));let J=bx.filter(a=>/招标|投标须知|评标办法|专用合同条款|投标人须知/u.test(`${a.filePath||""}${a.sectionTitle||""}`));for(let a of(/概况|工程|项目|总体|部署/u.test(d.title)&&J.length>0&&l.push(...J.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"}))),new Set([...H]))){if(!(0,aY.Tz)(c,a,a3))continue;let b=H.has(a),e=bt(a);e&&l.push(...e.chunks.map(a=>({chapterId:d.id,filePath:e.file.relativePath,score:1,content:a.content,roleId:a4.get(e.file.relativePath),processingType:a5.get(e.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let K=l.filter(a=>(0,aY.Tz)(c,a.filePath,a8));if(!k&&aP.enabled&&aP.allowProjectFacts){let b=await bq({config:aP,chapterId:d.id,chapterTitle:d.title,sectionTitles:d.sections||[],runtimeRules:aQ,localFacts:[...bJ.project,...bJ.schedule,...bJ.quality,...bJ.safety,...bJ.resources,...bJ.preciseFacts],signal:a.signal});bi.queries.push(...b.queries),bi.filteredCount+=b.filtered+b.evidence.length}let O=k?[]:(0,a$.SK)({project:a6,chapter:d,plan:m,profile:am,scopedFilePaths:A,highRisk:bf.highRisk});O.length>0&&K.push(...O),K=(0,br.Su)(K,a9),bB.size>0&&(K=K.filter(a=>!bB.has((0,N.hM)(a))));let R=(()=>{let a=Number(process.env.DOCUMENT_SEMANTIC_TOP_CANDIDATES);return Number.isFinite(a)&&a>0?Math.floor(a):3e3})(),U=function(a,b,c){if(c<=0||b.length<=c)return b;let d=b.map(b=>({item:b,lexical:(0,n.A1)(b,a.requiredFacts)*du(a,b.processingType)+dv(a,b)}));return d.sort((a,b)=>b.lexical-a.lexical),d.slice(0,c).map(a=>a.item)}(d,K,R),V=await (0,M.Mv)([(0,L.Yx)(d)],U.map(dw)),X=dx(d,K,{preservePinned:!0,semantic:{similarity:V,queryText:(0,L.Yx)(d)}},cz);X=cN(X,bM.scopeConflicts),(0,br.U2)(X,a9,`chapter:${d.id}:initial`);let Z=d.requiredFacts.filter(a=>!X.some(b=>(0,p.Lk)(b,a))),$=0,_=w?[w.graphWorks.length?`图谱识别本章工程内容:${w.graphWorks.join("、")}`:"",w.graphMethods.length?`图谱识别本章施工方法:${w.graphMethods.join("、")}`:"",w.graphBoqItems.length?`图谱识别本章BOQ清单项(${w.graphBoqItems.length}项):${w.graphBoqItems.map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",w.gaps.length?`图谱识别本章资料缺口:${w.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",aa=function(a){let b=[];for(let c of a){if(!c.resolution)continue;let a=c.values.filter(a=>`${a.value}${a.unit}`!==c.resolution);if(0===a.length)continue;let d=a.map(a=>`${a.value}${a.unit}`).join("、");"high"===c.confidence?b.push(`${c.scope}必须统一为 ${c.resolution}(补疑/答疑/澄清类修正文件权威最高;${d} 已被修正,正文禁止出现)`):"medium"===c.confidence?b.push(`${c.scope}应统一为 ${c.resolution}(按资料来源优先级裁决;${d} 为败选值,正文避免使用)`):b.push(`${c.scope}参考口径为 ${c.resolution}(锚定较弱,请人工复核;${d} 不参与自动改写)`)}return b}(bM.scopeConflicts),ab=ck.length>0?(()=>{let a=aA(d.title),b=ck.filter(b=>b.chapterTitle===a);return 0===b.length?"":["【本章必须显性响应的招标要求(逐条写入正文,零响应即评标失分)】",...b.map(a=>`- ${a.kind}:${a.item.text}`)].join("\n")})():"",ac=/扬尘|文明施工|环境保护|绿色施工|安全文明|环保/u.test(`${d.title}${d.purpose||""}`)?"【扬尘治理六个百分百——规范固定条目,必须逐项落实并写入正文,每项一句具体措施,六项不得缺项;若本项目无拆迁工程,对“拆迁工地100%湿法作业”必须显性写明“本项目无拆迁工程,不涉及拆迁工地湿法作业”,不得省略】\n- 施工工地周边100%围挡\n- 物料堆放100%覆盖\n- 出入车辆100%冲洗\n- 施工现场地面100%硬化\n- 拆迁工地100%湿法作业\n- 渣土车辆100%密闭运输":"",ae=(d.sections||[]).filter(a=>!/^(?:施工概况|施工流程|施工方法)$/u.test(a.trim())&&!/^附录/u.test(a.trim())),ag=ae.length>0?`【必须输出以下规划小节为三级标题(### 小节名),逐个小节展开正式正文:每小节正文不少于 100 字,不得只写标题、不得空小节、不得用表格替代正文;小节名与章标题相同或相近也必须输出,不得省略或合并】${ae.join("、")}`:"",ai=[_,ab,ag,ac,aa.length?`【数据口径强制约束】${aa.join(";")}`:"",m?.writingGoal,m?.mustCover?.length?`本章必须覆盖:${m.mustCover.join("、")}`:"",m?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${m.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),aj=dm(af,d);if(af.writerPrompts.length>0&&!aj.primaryWriter)throw Error(`${(0,o.GQ)(d.title)} 写作主控提示词未进入章节生成阶段`);let ak=[aj.promptTexts,aG].filter(Boolean).join("\n\n"),al=aj.promptDetails.length?aj.promptDetails:["未绑定章节写作提示词"],an=(0,Q.rC)({template:B,chapter:d,spec:aD,profile:aE,promptTexts:ak,requirement:a.requirement,plan:m?{requiredContents:m.mustCover,evidenceNeeds:Object.values(m.evidenceQueries).flat()}:void 0}),ao=(0,Q.ji)({needs:an,factsModel:bJ,evidence:K,profile:aE,excludedEvidenceKeys:bB}),ap=ao.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),aq=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>eh(`${a.sectionTitle||""}${a.content||""}`).includes(eh(b)))),c=(a.chapter.tablePlans||[]).flatMap(a=>a.fillability?.missingProjectFactFields||[]),d=a.evidence.length<3?["章节证据数量不足"]:[],e=b.length+c.length+d.length,f=e>=5?"high":e>=2?"medium":"low",g="high"===f?"evidence_first":c.length>0?"generate_with_review_notes":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:f,missingFacts:b,missingEvidence:d,tableFieldGaps:[...new Set(c)],suggestedStrategy:g,reason:0===e?"章节事实、证据和表格可填性满足常规生成条件。":`识别到 ${e} 项生成前缺口,按 ${g} 策略生成。`}}({chapter:d,evidence:X}),ar=new Set(X.map(a=>a.filePath)).size,at=!!w&&(w?.graphFiles.size||0)>=8&&ar>=6&&0===Z.length&&"low"===aq.riskLevel,au=function(a){let b=a.evidenceFileCount<=2;return a.scopedFileCount>80?b:"evidence_first"===a.suggestedStrategy||a.highRisk||a.missingFactsCount>0||a.requiredMissingNeedsCount>0||b||a.evidenceCount<8&&"low"!==a.riskLevel}({scopedFileCount:A.length,evidenceCount:X.length,evidenceFileCount:ar,suggestedStrategy:aq.suggestedStrategy,highRisk:bf.highRisk,missingFactsCount:Z.length,requiredMissingNeedsCount:ap.length,riskLevel:aq.riskLevel});if(!at&&au&&A.length>0){let b=new Set([...Z,...ap]).size;b>0&&(ad[i]=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,o.GQ)(d.title)} 正在深度召回缺失事实证据(${b} 项需求)`,progress:{current:g+1,total:bX.length,label:"深度召回"}},{subtitle:(0,o.GQ)(d.title),order:g}),W());let e=await aW({manager:S,projectRoot:c,chapter:d,scopedFilePaths:A,fileRoleByPath:a4,fileProcessingByPath:a5,requiredNeeds:[...new Set([...Z,...ap])],highRisk:bf.highRisk||ap.length>0,signal:a.signal}).catch(()=>[]);$=e.length,e.length>0&&(K=[...K,...(0,br.Su)(e,a9)],bB.size>0&&(K=K.filter(a=>!bB.has((0,N.hM)(a)))),X=dx(d,K,{preservePinned:!0},cz),X=cN(X,bM.scopeConflicts),(0,br.U2)(X,a9,`chapter:${d.id}:deep`),Z=d.requiredFacts.filter(a=>!X.some(b=>(0,p.Lk)(b,a)))),ap=(ao=(0,Q.ji)({needs:an,factsModel:bJ,evidence:K,profile:aE,excludedEvidenceKeys:bB})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),ad[i]=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,o.GQ)(d.title)} 深度召回完成:命中 ${$} 条${ap.length>0?`,仍缺 ${ap.length} 项(触发轻量补充)`:""}`,progress:{current:g+1,total:bX.length,label:"证据检索"}},{subtitle:(0,o.GQ)(d.title),order:g}),W()}if(ap.length>0&&A.length>0){let b=(0,br.Su)(await aW({manager:S,projectRoot:c,chapter:d,scopedFilePaths:A,fileRoleByPath:a4,fileProcessingByPath:a5,requiredNeeds:ap,highRisk:!0,signal:a.signal}).catch(()=>[]),a9);b.length>0&&(K=[...K,...b],bB.size>0&&(K=K.filter(a=>!bB.has((0,N.hM)(a)))),X=dx(d,K,{preservePinned:!0},cz),X=cN(X,bM.scopeConflicts),(0,br.U2)(X,a9,`chapter:${d.id}:supplemental`),Z=d.requiredFacts.filter(a=>!X.some(b=>(0,p.Lk)(b,a))),ap=(ao=(0,Q.ji)({needs:an,factsModel:bJ,evidence:K,profile:aE,excludedEvidenceKeys:bB})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}for(let a of((0,br.U2)(X,a9,`chapter:${d.id}:writer-input`),0===X.length&&bj.push(`${d.title}:缺少可支撑正文的项目资料证据`),Z))bj.push(`${d.title}:事实需求未满足 ${a}`);let av=(0,aX.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:bg.length>0?"success":"failed",message:`已检索/绑定 ${bg.length} 条证据`});bo<0?bo=(0,aX.fx)(ad,av):ad[bo]={...av,order:ad[bo]?.order??av.order},W(),(0,u.Te)(a.signal);let aw=new Map,ax=b=>{let e=(0,u.c6)({kind:"section",query:`${d.title} ${b}`.trim(),scopedFilePaths:A}),f=aw.get(e);if(f)return Promise.resolve(f);let g=(0,a_.Ym)(b,d,X),h=g.filter(a=>bd.AM.test(a.content)).length;return g.length>=4&&h>=1?(aw.set(e,g),Promise.resolve(g)):dz({manager:S,projectRoot:c,chapter:d,sectionTitle:b,scopedFilePaths:A,fileRoleByPath:a4,fileProcessingByPath:a5,signal:a.signal}).then(a=>(aw.set(e,a),a))},ay=b=>{if(0===b.length||0===A.length)return Promise.resolve([]);let e=b.join(" ");return dz({manager:S,projectRoot:c,chapter:d,sectionTitle:e,scopedFilePaths:A,fileRoleByPath:a4,fileProcessingByPath:a5,signal:a.signal}).catch(()=>[])},az=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,p.Lk)(a,b)||`${a.sectionTitle||""} ${a.content}`.includes(b))).length,d=a.chapter.requiredFacts.length,e=a.chapter.requiredFacts.filter(b=>a.evidence.some(a=>(0,p.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:d,evidence:X,risk:bf});bh.push(az);let aB=new Set(X.map(a=>a.filePath)),aC=X.reduce((a,b)=>a+b.content.length,0),aF=[...bf.highRisk?[`召回覆盖风险(${bf.riskReason||"切片未完全预加载"}):已加载 ${bf.loadedChunks}/${bf.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${C.length} 条`,`深召回证据:${$} 条`,`事实覆盖:${az.requiredFactCovered}/${az.requiredFactTotal}`,`小节覆盖:${az.sectionCovered}/${az.sectionTotal}`];ad[i]=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:af.writerPrompts[0]?.id,status:"running",message:`${(0,o.GQ)(d.title)} 已选取 ${X.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aB.size} 份`,`上下文字符:${aC}`,`检索查询:${y.length} 组`,...aF],progress:{current:g+1,total:bX.length,label:"正文生成"}},{subtitle:(0,o.GQ)(d.title),order:g}),W(),cz.evidence.contextChars+=aC;let aH=(0,Q.n9)(ao),aI=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)?bF:[],aJ=(0,a_.qX)((0,a_.hZ)({chapter:d,plan:void 0,spec:aD,roleFacts:I,evidence:X,missingFacts:Z,indexedFacts:[...aI,...aH],resolvedFactNeeds:ao,factNeedsPrompt:(0,Q.GK)(ao),specAuthorityMap:bJ.specAuthorityMap})),aK=(0,eg.up)({plan:cu.plan,chapter:d,context:bK,evidence:X});if(bK.chapterTasks=[...(bK.chapterTasks||[]).filter(a=>a.chapterId!==d.id),aK.task],bK.nodes.push(aK.node),(0,cQ.cN)(bK),(0,aX.fx)(ad,(0,aX.X5)({type:"validation",roleId:`agent-chapter-task-${d.id}`,status:aK.task.ready||k?"success":"failed",message:aK.task.ready?aK.node.outputSummary||`${(0,o.GQ)(d.title)} 章节任务规划完成`:k?`${(0,o.GQ)(d.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:aK.node.outputSummary||`${(0,o.GQ)(d.title)} 章节任务规划完成`,details:aK.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:ad.length})),W(T),!aK.task.ready&&!k)throw Error(`${(0,o.GQ)(d.title)} 章节任务未就绪:${aK.task.issues.map(a=>a.message).join(";")}`);let aL=[ak,(0,eg.bT)(aK.task)].filter(Boolean).join("\n\n"),aM={total:ao.length,satisfied:ao.filter(a=>"satisfied"===a.status).length,missing:ao.filter(a=>"missing"===a.status).length,lowConfidence:ao.filter(a=>"low_confidence"===a.status).length};for(let a of ap)bj.push(`${d.title}:事实需求未确认 ${a}`);let aN=ct.chapterTargets.get(d.id)||1200,aO=d.sections?.filter(Boolean).length||0,aR=/[、,,;;]/u.test(d.title),aS=function(a){let{budgetTarget:b,sectionCount:c,title:d,longformStrict:e}=a,f=/[、,,;;]/u.test(d),g=/工期|进度|质量|安全|危大|资源|人材机|保障|措施|重难点/u.test(d),h=/概况|结语|附录|说明/u.test(d),i=c>0?c*(f?720:g?900:780):g?5200:3600,j=e?h?2600:g?5200:3600:Math.min(1200,b),k=e?Math.min(Math.max(4200,b),c>=30?9800:f?8800:g?9200:7200):b,l=e?Math.max(j,b):Math.max(j,Math.min(b,i,k));return{budgetTarget:b,roundTarget:l,structureTarget:i,maxWords:Math.ceil(l*(a.longformStrict?1.12:1.18)),label:`章节预算约 ${b} 字,本轮生成约 ${l} 字,结构目标约 ${i} 字`}}({budgetTarget:aN,sectionCount:aO,title:d.title,longformStrict:ct.longformStrict}),aT=Math.ceil(aS.maxWords*(ct.maxChars?1.05:1)),aU=aS.roundTarget,aV=(0,a_.uV)(aU,aU),aZ=aO>0?ct.longformStrict?aU:Math.min(aU,Math.max(1800,aS.structureTarget)):aU,a0=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),a1=process.env.DOCUMENT_SECTION_FIRST_GENERATION,a2=void 0!==a1&&0===Number(a1),a7=void 0!==a1&&0!==Number(a1),bb=aO>=2&&aO<=a0&&!aR,bk=!a2&&aO>=2&&(aO>a0||aR||ct.longformStrict&&aO>=6),bl=!a2&&!bk&&aO>=2&&aO<=a0&&(a7||bb||ct.longformStrict),bp=0,bs=a=>{let b=Date.now();if(b-bp<3e3)return;bp=b;let c=a.filter(Boolean).join("\n\n");c.trim()&&W([...T,{id:d.id,title:d.title,content:`## ${d.title}
|
|
128
128
|
|
|
129
|
-
${c}`,evidence:X,missingFacts:Z,sections:d.sections||[],tablePlans:d.tablePlans||[],inProgress:!0}])},bv=a=>{"complete"===a.phase&&a.partialSections&&bs(a.partialSections)};if(k)e=dk(k,d),e=await db(e,bz),f=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aj.primaryPromptId,status:"success",message:`${(0,o.GQ)(d.title)} 已复用已有章节正文:当前 ${(0,r.V7)(e)} 字,跳过 Writer,直接进入章节收口`,details:[`有效证据:${X.length} 条`,`事实需求:${aM.satisfied}/${aM.total} 已满足,缺失 ${aM.missing},低置信 ${aM.lowConfidence}`,"来源:resumeChapters/checkpointChapters"],progress:{current:g+1,total:bX.length,label:"复用章节"}},{subtitle:(0,o.GQ)(d.title),order:g}),ad[i]=f,W(T);else{let f;ad[i]=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aj.primaryPromptId,status:"running",message:bk?`${(0,o.GQ)(d.title)} 正在规划主题块并准备并发成稿`:bl?`${(0,o.GQ)(d.title)} 正在按小节并发成稿`:`${(0,o.GQ)(d.title)} 正在整章一次成稿`,details:bk||bl?[...al,`有效证据:${X.length} 条`,`事实需求:${aM.satisfied}/${aM.total} 已满足,缺失 ${aM.missing},低置信 ${aM.lowConfidence}`,aS.label,`生成上限约 ${aT} 字`,`模板细目:${d.sections?.length||0} 条`,bk?"细目较多,先由章级 Planner 聚类为主题块并语义合并,再按主题块全并发出稿,避免逐小节碎片化":"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...al,`有效证据:${X.length} 条`,`事实需求:${aM.satisfied}/${aM.total} 已满足,缺失 ${aM.missing},低置信 ${aM.lowConfidence}`,aS.label,`生成上限约 ${aT} 字`,`规划小节:${aO} 个`,"首次生成必须覆盖章节结构、小节和事实,篇幅目标仅作为规划参考"],progress:{current:g+1,total:bX.length,label:bk?"主题块并发":bl?"小节并发":"整章成稿"}},{subtitle:(0,o.GQ)(d.title),order:g}),W();let h=async(a,b,c)=>{let d=await Promise.all(b.map(({block:b})=>(0,a_.nl)({...a,targetWords:b.targetWords,maxWords:Math.ceil(1.1*b.targetWords)},{blocks:[b],coveredSections:[],fallbackSections:[],llmPlanned:!1}).then(a=>a?.markdown).catch(()=>void 0))),e=[...c];return b.forEach(({index:a},b)=>{let c=d[b];c&&(e[a]=c.replace(/^##\s+.+$/mu,"").trim())}),e};if(bk){let c=(0,o.GQ)(d.title),e=co.split("\n").filter(a=>a.includes(c)),j=e.length>0?e.join("\n"):co,k=await Y(()=>(0,aY.X6)(cz,`chapter-plan:${d.id}`,()=>bc({template:B,chapter:d,evidence:X,projectContext:b_,requirement:a.requirement,roleContext:ai,targetWords:aZ,graphContext:aK.task.graphContext,blueprintContext:j,signal:a.signal,diagnostics:cz})));if(k.blocks.length>0){b=
|
|
129
|
+
${c}`,evidence:X,missingFacts:Z,sections:d.sections||[],tablePlans:d.tablePlans||[],inProgress:!0}])},bv=a=>{"complete"===a.phase&&a.partialSections&&bs(a.partialSections)};if(k)e=dk(k,d),e=await db(e,bz),f=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aj.primaryPromptId,status:"success",message:`${(0,o.GQ)(d.title)} 已复用已有章节正文:当前 ${(0,r.V7)(e)} 字,跳过 Writer,直接进入章节收口`,details:[`有效证据:${X.length} 条`,`事实需求:${aM.satisfied}/${aM.total} 已满足,缺失 ${aM.missing},低置信 ${aM.lowConfidence}`,"来源:resumeChapters/checkpointChapters"],progress:{current:g+1,total:bX.length,label:"复用章节"}},{subtitle:(0,o.GQ)(d.title),order:g}),ad[i]=f,W(T);else{let f;ad[i]=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aj.primaryPromptId,status:"running",message:bk?`${(0,o.GQ)(d.title)} 正在规划主题块并准备并发成稿`:bl?`${(0,o.GQ)(d.title)} 正在按小节并发成稿`:`${(0,o.GQ)(d.title)} 正在整章一次成稿`,details:bk||bl?[...al,`有效证据:${X.length} 条`,`事实需求:${aM.satisfied}/${aM.total} 已满足,缺失 ${aM.missing},低置信 ${aM.lowConfidence}`,aS.label,`生成上限约 ${aT} 字`,`模板细目:${d.sections?.length||0} 条`,bk?"细目较多,先由章级 Planner 聚类为主题块并语义合并,再按主题块全并发出稿,避免逐小节碎片化":"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...al,`有效证据:${X.length} 条`,`事实需求:${aM.satisfied}/${aM.total} 已满足,缺失 ${aM.missing},低置信 ${aM.lowConfidence}`,aS.label,`生成上限约 ${aT} 字`,`规划小节:${aO} 个`,"首次生成必须覆盖章节结构、小节和事实,篇幅目标仅作为规划参考"],progress:{current:g+1,total:bX.length,label:bk?"主题块并发":bl?"小节并发":"整章成稿"}},{subtitle:(0,o.GQ)(d.title),order:g}),W();let h=async(a,b,c)=>{let d=await Promise.all(b.map(({block:b})=>(0,a_.nl)({...a,targetWords:b.targetWords,maxWords:Math.ceil(1.1*b.targetWords)},{blocks:[b],coveredSections:[],fallbackSections:[],llmPlanned:!1}).then(a=>a?.markdown).catch(()=>void 0))),e=[...c];return b.forEach(({index:a},b)=>{let c=d[b];c&&(e[a]=c.replace(/^##\s+.+$/mu,"").trim())}),e};if(bk){let c=(0,o.GQ)(d.title),e=co.split("\n").filter(a=>a.includes(c)),j=e.length>0?e.join("\n"):co,k=await Y(()=>(0,aY.X6)(cz,`chapter-plan:${d.id}`,()=>bc({template:B,chapter:d,evidence:X,projectContext:b_,requirement:a.requirement,roleContext:ai,targetWords:aZ,graphContext:aK.task.graphContext,blueprintContext:j,signal:a.signal,diagnostics:cz}))),l=function(a){if(!a.blocks.some(a=>1===a.subPoints.length&&a.targetWords>2400))return a;let b=a.blocks.flatMap(a=>{if(1!==a.subPoints.length||a.targetWords<=2400)return[a];let b=Math.max(1200,Math.floor(a.targetWords/2));return[{...a,title:`${a.title}(一)`,targetWords:b,halfFocus:"本部分为该主题的前半部分,聚焦总体构成与组织框架:逐项列明构成要素、总体规模指标与组织方式;只写本部分内容,不得涉及后半部分的具体展开。"},{...a,title:`${a.title}(二)`,targetWords:b,halfFocus:"本部分为该主题的后半部分,聚焦具体展开与实施要求:逐项展开实施内容、工艺要求与衔接安排;只写本部分内容,不得重复前半部分的总体框架。"}]});return{...a,blocks:b}}(k);if(l.blocks.length>0){b=l;let c=[ak,(0,eg.$8)(aK.task,l)].filter(Boolean).join("\n\n"),e=l.blocks.reduce((a,b)=>a+b.subPoints.length,0),j=l.blocks.reduce((a,b)=>a+b.subPoints.reduce((a,b)=>a+Math.max(0,b.sources.length-1),0),0),k=l.llmPlanned?l.llmFailure?`(部分主题块降级:${l.llmFailure.slice(0,80)})`:l.fallbackSections.length>0?`(${l.fallbackSections.length} 条细目由覆盖校验挂回主题块)`:"":`(LLM 规划未命中:${(l.llmFailure||"未返回有效结构").slice(0,80)},已按语义域确定性分组)`;ad[i]=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aj.primaryPromptId,status:"running",message:`${(0,o.GQ)(d.title)} 已规划 ${l.blocks.length} 个主题块,正在按主题块并发成稿${k}`,details:[...al,`有效证据:${X.length} 条`,`输入细目 ${aO} 条 → 主题块 ${l.blocks.length} 个(每块 2~4 个 H4 要点)`,`语义合并 ${j} 条细目,目录级 H4 合计 ${e} 个`,"单块 1200~2200 字,主题块间全并发,单节深度与整体耗时双优"],progress:{current:g+1,total:bX.length,label:"主题块并发"}},{subtitle:(0,o.GQ)(d.title),order:g});let m=ad.find(a=>a.roleId===`agent-chapter-task-${d.id}`);m&&(m.message=`${aK.task.sections.filter(a=>a.ready).length}/${aK.task.sections.length} 条细目任务就绪(已规划为 ${l.blocks.length} 个主题块)`),W(T);let n={template:B,chapter:d,evidence:X,missingFacts:Z,promptTexts:c,projectContext:cs(d),requirement:a.requirement,roleContext:ai,targetWords:aZ,maxWords:aT,forbidDrawingImages:!1,factCoverageContext:aJ,compactProjectContext:!0,scopedProjectContext:cr,planDataMasterText:cW,decisionLockText:cX,sectionEvidenceProvider:ax,onSectionProgress:bv,diagnostics:cz,signal:a.signal},p=await Y(()=>(0,aY.X6)(cz,`chapter-planned-block-draft:${d.id}`,()=>(0,a_.nl)(n,l)));if(p?.allSucceeded)f=p.markdown;else if(p){let a=await h(n,p.failedBlocks,p.sections),b=p.failedBlocks.filter(({index:b})=>!a[b]);b.length>0&&(a=await h(n,b,a)),a.every(a=>!!a)&&(f=`## ${d.title}
|
|
130
130
|
|
|
131
|
-
${a.join("\n\n")}`)}}}else f=bl?await Y(()=>(0,aY.X6)(cz,`chapter-section-draft:${d.id}`,()=>(0,a_.N1)({template:B,chapter:d,evidence:X,missingFacts:Z,promptTexts:aL,projectContext:cs(d),requirement:a.requirement,roleContext:ai,targetWords:aZ,maxWords:aT,forbidDrawingImages:!1,factCoverageContext:aJ,projectRoot:c,modelName:(0,P.$y)()?.model.name,materialContextHash:(0,u.c6)({materialFilePaths:ah,promptTexts:ak}),allowPartialResult:!1,compactProjectContext:!0,scopedProjectContext:cr,planDataMasterText:cW,decisionLockText:cX,sectionEvidenceProvider:ax,onSectionProgress:bv,diagnostics:cz,signal:a.signal}))):await Y(()=>(0,aY.X6)(cz,`chapter-draft:${d.id}`,()=>(0,a_.eu)(B,d,X,Z,aL,cs(d),a.requirement,ai,{forbidDrawingImages:!1,minWords:aU,targetWords:aU,maxWords:aT,maxTokens:aV,factCoverageContext:aJ,planDataMasterText:cW,decisionLockText:cX,signal:a.signal,diagnostics:cz,supplementEvidenceProvider:ay,evidenceFloorChars:cy.evidenceFloorChars,evidenceCeilingChars:cy.evidenceCeilingChars})));if(f||(cz.llm.lastError=cz.llm.lastError||"全部成稿路径未返回有效正文"),f&&cU){let a=function(a,b){let c=[],d=a;for(let a of[/高峰(?:期)?(?:总)?(?:人数|劳动力|用工|投入)(?:为|约|控制在|不超过|达)?\s*(\d+)\s*人/u,/劳动力(?:峰值|高峰)(?:为|约|控制在|不超过|达)?\s*(\d+)\s*人/u,/高峰(?:投入|用工)(?:为|约|控制在|不超过|达)?\s*(\d+)\s*人/u])d=d.replace(a,(a,d)=>{let e=Number(d);return e===b.laborPeak.count||e<=0?a:(c.push({anchor:"劳动力峰值",from:`${e}人`,to:`${b.laborPeak.count}人`}),a.replace(d,String(b.laborPeak.count)))});for(let a of b.machines){let b=a.name.trim();if(b.length<2)continue;let e=RegExp(`${b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}[^\\n。;;]{0,20}?(\\d+)\\s*台`,"gu");d=d.replace(e,(b,d)=>{let e=Number(d);return e===a.count||e<=0?b:(c.push({anchor:a.name,from:`${e}台`,to:`${a.count}台`}),b.replace(d,String(a.count)))})}return{markdown:d,fixed:c}}(f,cU);a.fixed.length>0&&(f=a.markdown,cz.llm.lastInfo=`计划数据主表对齐:${d.title} 回填 ${a.fixed.length} 处(${a.fixed.map(a=>`${a.anchor} ${a.from}→${a.to}`).join("、")})`)}if((0,u.Te)(a.signal),!f){let a=`${(0,o.GQ)(d.title)} 大模型未返回有效正文,已阻断生成`;throw ad[i]=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aj.primaryPromptId,status:"failed",message:a,details:[`LLM 最近错误:${cz.llm.lastError||"空响应或超时"}`,`证据条数:${X.length}`],progress:{current:g+1,total:bX.length,label:"章节阻断"}},{subtitle:(0,o.GQ)(d.title),order:g}),W(T),Error(a)}if(!f.trim())throw Error(`${(0,o.GQ)(d.title)} 首次生成失败,未获得可用于定稿的正文`);let j=b&&b.blocks.length>0?b.blocks.map(a=>a.title):(d.sections||[]).filter(Boolean),k=b&&b.blocks.length>0?b.blocks.flatMap(a=>a.subPoints.map(a=>a.title)):[],l=f;j.length>0&&(l=(0,u.Ww)(l,j,3)),k.length>0&&(l=(0,u.Ww)(l,k,4)),e=dk(l,d),e=await db(e,bz)}let bw=await be({chapter:d,content:e,evidence:X}),by=(0,r.V7)(e),bC=(0,q.r4)(e),bD=b&&b.blocks.length>0?b.blocks.map(a=>a.title):(d.sections||[]).filter(Boolean),bE=bD.length>0?bD:bC.length>0?bC:[],bG=(0,s.qK)(e,[{title:d.title,content:e,sections:bE}]).map(a=>a.message),bI=bw.slice(0,6).map(a=>`小节事实密度需优化:${a}`),bN=[...bG,...bI],bO=function(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))||c.some(a=>/空小节|缺少规划小节/u.test(a))?"failed":"success"}(by,0,bN);return f=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aj.primaryPromptId,status:bO,message:(0,aX.AQ)(`${(0,o.GQ)(d.title)} 已由大模型成稿:当前 ${by} 字;章节预算约 ${aS.budgetTarget} 字,本轮目标约 ${aS.roundTarget} 字${bN.length?`;待优化:${bN.slice(0,8).join("、")}`:""}`,h),details:[`本轮完成率:${Math.round(by/Math.max(1,aS.roundTarget)*100)}%`,`结构目标约 ${aS.structureTarget} 字`,...al,`二级小节:${bE.length} 个`],progress:{current:g+1,total:bX.length,label:bN.length?"章节已生成":"章节达标"}},{subtitle:(0,o.GQ)(d.title),order:g}),bn[g]=f,async()=>{let a={id:d.id,title:d.title,content:e,evidence:X,missingFacts:Z,sections:bE,tablePlans:d.tablePlans||[]};bm[g]=a,T=bm.filter(a=>!!a),W(T)}}catch(h){if(a.signal?.aborted)throw h;let b=cz.llm.lastError,c=`failures=${cz.llm.failures} retries=${cz.llm.retries} reasoningTokens=${cz.llm.reasoningTokens||0}`;console.error(`[gen] chapter ${d.title} failed:`,h,b?`| LLM lastError: ${b}`:"| LLM lastError: (none)","|",c);let e=`${d.title}:${h instanceof Error?h.message:"生成失败"}`;bk.push(e),f=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,o.GQ)(d.title)} 生成失败:${e}`,details:[`LLM 最近错误:${b||"无记录"}`,`LLM 调用失败 ${cz.llm.failures} 次、重试 ${cz.llm.retries} 次`]},{subtitle:(0,o.GQ)(d.title),order:g}),bn[g]=f}f&&(ad[i]=f),W(T)}))))e&&cK.push(cJ.run(e))}await Promise.all(cK),cz.metrics.push({name:"phase:draft",startedAt:cY,endedAt:Date.now(),durationMs:Date.now()-cY});let cZ=Date.now(),c$=bm.filter(a=>!!a);bl.push(...bn.filter(a=>!!a));let c_=[],c0=!1;if(cw.enableGlobalReview){let b=await er({globalReviewSamplingRate:cw.globalReviewSamplingRate,chapterDraftsFinal:c$,template:B,reviewPromptTexts:a1,repairPromptTexts:a2,requirement:a.requirement,signal:a.signal,projectContext:b_,generationDiagnostics:cz,preliminaryFactsModel:bJ,scopeConflicts:bM.scopeConflicts,progressStages:ad,emitProgress:W,withProgressHeartbeat:Y,planDataMaster:cU});c_=b.issues,c0=b.dedupRan}else await eq({chapterDraftsFinal:c$,template:B,repairPromptTexts:a2,projectContext:b_,requirement:a.requirement,signal:a.signal,generationDiagnostics:cz,progressStages:ad,emitProgress:W,withProgressHeartbeat:Y});let{tableFixApplied:c1}=await eo({effectiveChapters:bX,chapterDraftsFinal:c$,template:B,repairPromptTexts:a2,requirement:a.requirement,signal:a.signal,generationDiagnostics:cz,progressStages:ad,emitProgress:W,withProgressHeartbeat:Y});return(c1||!c0)&&(c_=await en({chapterDraftsFinal:c$,globalConsistencyIssues:c_,progressStages:ad,emitProgress:W})),!function(a){let{generationDiagnostics:b,progressStages:c,chapterDraftsFinal:d,emitProgress:e}=a,f=b.evidence,g=b.llm,h=(0,M.Bd)();b.semantic=h;let i=h.embedCacheHits+h.embedCacheMisses,j=i>0?Math.round(1e4*h.embedCacheHits/i)/100:null,k=(g.promptCacheHitTokens||0)+(g.promptCacheMissTokens||0),l=k>0?Math.round(1e4*(g.promptCacheHitTokens||0)/k)/100:null,m=g.layerChars,n=m?m.l0+m.l1+m.l2+m.l3:0,o=a=>n>0?Math.round(1e4*a/n)/100:0,p=m&&n>0?`上下文分层:L0 system 恒定 ${m.l0} 字(${o(m.l0)}%)、L1 任务级 ${m.l1} 字(${o(m.l1)}%)、L2 章级 ${m.l2} 字(${o(m.l2)}%)、L3 小节级 ${m.l3} 字(${o(m.l3)}%)`:"上下文分层:本次生成未采集 L0-L3 分层统计";(0,aX.fx)(c,(0,aX.X5)({type:"validation",roleId:"budget-trim-report",status:"success",message:`预算裁剪报告:证据 ${f.raw} 条 → 采用 ${f.used} 条(噪声过滤 ${f.filteredNoise} 条、预算兜底裁剪 ${f.budgetDropped} 条),证据上下文 ${f.contextChars} 字`,details:[`证据质量:平均噪声分 ${f.avgNoiseScore},平均事实密度 ${f.avgFactDensity}`,`证据分层(T0 关键事实/T1 高相关片段/T2 目录索引):T0 注入 ${f.t0Chars||0} 字、T1 注入 ${f.t1Chars||0} 字、T2 索引 ${f.t2Lines||0} 行、目录省略 ${f.omittedChars||0} 字——A2 块级增量压缩后 T1 应显著低于 T0+T2`,`检索:${f.searchQueries} 组查询,耗时 ${Math.round(f.searchMs/1e3)} 秒`,`LLM:${g.calls} 次调用,失败 ${g.failures} 次,重试 ${g.retries} 次,schema 校验失败 ${g.schemaFailures} 次`,`LLM 上下文输入:${g.inputChars||0} 字符(system+user)${g.unlayeredChars?`(其中未分层调用 ${g.unlayeredChars} 字符,占比 ${Math.round(g.unlayeredChars/(g.inputChars||1)*1e4)/100}%)`:""},输入 ${g.inputTokens||0} token / 输出 ${g.outputTokens||0} token`,p,null===l?"上下文缓存:提供商未返回 prefix cache 指标(prompt_cache_hit/miss_tokens),无法观测命中率":`上下文缓存:命中 ${g.promptCacheHitTokens} token / 未命中 ${g.promptCacheMissTokens} token(命中率 ${l}%)——未命中占比高说明固定前缀未收敛,system/user 分离(A5)后应显著上升`,`推理 token:${g.reasoningTokens?`${g.reasoningTokens} token(思考未完全关闭,disableThinking 未生效风险)`:"0(思考已关闭)"}`,null===j?"bge 嵌入缓存:本次生成无嵌入调用":`bge 嵌入缓存:命中 ${h.embedCacheHits} 条 / 未命中 ${h.embedCacheMisses} 条(命中率 ${j}%,全局 LRU 容量 ${process.env.DOCUMENT_EMBED_CACHE_SIZE||2e3})`,"防爆兜底类软限制(保留并逐项记录裁剪量):selectEvidenceByBudget 的 maxItems/maxChars、uniqueEvidence 噪声过滤、evidenceBundlePrompt 的 maxChars、块级证据 top-k 截断、块级 facts 截断","语义取舍类软限制(已迁移本地语义模型):evaluationTexts 词面过滤→条目对象化、criterionFeatures 二字滑窗→bge-small 余弦、章节证据字符硬截→语义排序取 top-k","LLM 输出侧:schema 校验(截断位置可诊断)、空响应重试提示词收敛、块成稿 maxTokens 按目标字数 1:1.2(不走 thinking \xd76 放大)"]},{subtitle:"预算裁剪审计"})),e(d)}({generationDiagnostics:cz,progressStages:ad,chapterDraftsFinal:c$,emitProgress:W}),cz.metrics.push({name:"phase:global-review",startedAt:cZ,endedAt:Date.now(),durationMs:Date.now()-cZ}),(0,aY.X6)(cz,"phase:finalize",()=>ec({chapterDrafts:c$,chapterDraftsByOrder:bm,chapterGenerationStagesByOrder:bn,chapterGenerationStages:bl,effectiveChapters:bX,template:B,allEvidence:bg,projectMaterialScope:a9,progressStages:ad,documentSpec:aD,projectMaterialProfile:am,projectMaterialSummary:ay,domainProfile:aE,documentBudget:ct,promptTexts:aS,reviewPromptTexts:a1,input:a,generationStrategy:cw,generationDiagnostics:cz,chapterScopedContext:cs,promptBindings:ag,promptDocumentRules:aQ,projectUnderstanding:as,projectContext:b_,projectRoot:c,projectId:v,readiness:aF,factExtractionPromptTexts:a0,planDataMaster:cU,hasExplicitOutline:ax,missingItems:bj,retrievalCoverageReports:bh,failedChapterMessages:bk,webResearchReport:bi,indexHealth:a7,promptPlan:af,globalConsistencyIssues:c_,scopeConflicts:bM.scopeConflicts,writingTaskBrief:cn,evaluationCriteriaItems:bQ.map(a=>a.title).filter(Boolean),tenderRequirements:b7,requirementsSimilarity:cj,factTokenScopeClassifier:cl,professionalDepthClassifier:cm,agentWorkflow:bK,emitProgress:W,withProgressHeartbeat:Y}))}},48017:(a,b,c)=>{c.d(b,{BB:()=>e,_2:()=>f,_D:()=>g});var d=c(71678);function e(a,b){return(a.templateId||"")===b.templateId&&(a.requirement||"").trim()===(b.requirement||"").trim()}function f(a){if(!a)return"";let b=["【上一版本继承参考(仅作参照,必须与项目资料一致方可沿用;不一致处一律以项目资料为准)】",`上一版本文档《${a.versionTitle}》的结构与关键口径如下:新版本应尽量保持结构延续性(评审机构按同结构对照评审),并避免重犯上一版已知问题。`];return a.structureLines.length>0&&(b.push(`一、上一版本章节与小节结构(共 ${a.structureLines.length} 项):`),b.push(...a.structureLines.slice(0,40).map(a=>` - ${a}`)),b.push(" 要求:项目资料支撑相同的章节/小节结构尽量沿用(含施工方法章的专业分项小节),不得因重新规划而丢失上一版已有的专业分项小节。")),a.factLines.length>0&&(b.push("二、上一版本关键数值口径(数值必须以本项目资料为准,上一版数值仅作一致性参照):"),b.push(...a.factLines.map(a=>` - ${a}`)),b.push(" 要求:全文同类数值只能有一个口径;上一版口径与项目资料一致时沿用,不一致时按资料修正。")),a.issueLines.length>0&&(b.push("三、上一版已知问题(新版必须避免重犯):"),b.push(...a.issueLines.slice(0,12).map(a=>` - ${a}`))),b.join("\n")}function g(a){let b=a.markdown||"";if(!b.trim())return null;let c={versionTitle:a.title||"上一版本",completedAt:a.completedAt||0,structureLines:function(a){let b=[];for(let c of a.matchAll(/^#{2,4}\s+(.+)$/gmu)){let a=(c[1]||"").replace(/[☑✓✔☐□☒○●◉◇◆]/gu,"").trim();if(!a||/^(?:目录|参考文献|附录)/u.test(a))continue;let e=a.replace(/^\d{1,3}(?:[..]\d{1,3})*[、..]?\s*/u,"");(0,d.xb)(e)||b.push(a)}return[...new Set(b)].slice(0,80)}(b),factLines:function(a){let b=[];for(let c of[/(?:劳动力|作业人员|施工人员|高峰期|高峰|峰值)[^。;\n\d]{0,18}?([\d,]+)\s*人/gu,/(?:总工期|计划工期|工期)[^。;\n\d]{0,12}?(\d{2,4})\s*(?:个)?(?:日历)?天/gu,/(?:总建筑面积|建筑面积)[^。;\n\d]{0,10}?([\d,]+(?:\.\d+)?)\s*(?:㎡|平方米|m2|m²)/gu])for(let d of a.matchAll(c)){let c=a.lastIndexOf("\n",d.index-1)+1,e=a.indexOf("\n",d.index),f=a.slice(c,e<0?void 0:e).trim().slice(0,60);f&&!b.includes(f)&&b.push(f)}return b.slice(0,12)}(b),issueLines:(a.warningIssues||[]).slice(0,12)};return 0===c.structureLines.length&&0===c.factLines.length&&0===c.issueLines.length?null:c}},79227:(a,b,c)=>{c.d(b,{C:()=>f,previewGenerationBudgetForTemplate:()=>g});var d=c(46482),e=c(95734);function f(a){let b=Math.max(1,a.chapters.length),c=a.targetWords>0?Math.round(a.targetWords/b):1200,d=a.strategy,f=[],g=a.materialFileCount<4&&a.evidenceCount<6,h=Math.max(1,Math.min(b,(Number.isFinite(a.configuredChapterConcurrency)&&a.configuredChapterConcurrency>0?Math.floor(a.configuredChapterConcurrency):void 0)??b)),i=(0,e.Qf)(a.targetWords),j="fast"===d.mode?1:Math.max(1,b),{floorChars:k,ceilingChars:l}=c>=6e3?{floorChars:14e3,ceilingChars:4e4}:c>=3e3?{floorChars:11e3,ceilingChars:28e3}:{floorChars:8e3,ceilingChars:18e3},m=d.repairRoundBudget?d.repairRoundBudget:Math.max(2,Math.min(4,2+ +(a.targetWords>=2e4)+ +!!g)),n=Math.min(m*b,Math.max(12,2*b));return"strict"===d.mode&&f.push("strict:风险领域关键词命中(专项/安全/质量/验收/合同/合规等)"),a.targetWords>=4e4&&f.push("strict:目标篇幅超长(≥4 万字)"),g&&f.push("strict:资料稀疏(资料包文件 <4 且可用证据 <6 条)"),"fast"===d.mode&&f.push("fast:小文档(≤6000 字且 ≤4 章)全局审查降级为 35% 抽检"),"longform"===d.mode&&f.push("longform:长文档(≥3 万字或 ≥8 章)"),"balanced"===d.mode&&f.push("balanced:常规篇幅文档,标准审查深度"),f.push(`全章节并行生成(${h}/${b} 章同批),审查流水线 ${j} 路,全局 LLM 并发不设上限,每章证据预算 ${Math.round(k/1e3)}k-${Math.round(l/1e3)}k 字符,修复轮次预算每章 ${m} 轮(文档级总池 ${n} 轮,收敛判定优先)`),{strategy:d,chapterConcurrency:h,reviewConcurrency:j,llmConcurrency:i,evidenceFloorChars:k,evidenceCeilingChars:l,repairRoundBudget:m,repairPoolBudget:n,triggers:f}}function g(a){let b=Math.max(1,a.chapters.length),c=Math.max(0,Math.round(a.targetWords??0)),e=(0,d.JP)({template:a.template,targetWords:c,requirement:a.requirement,materialFileCount:a.materialFileCount,evidenceCount:a.evidenceCount}),g=f({template:a.template,chapters:a.chapters,targetWords:c,requirement:a.requirement,materialFileCount:a.materialFileCount,evidenceCount:a.evidenceCount,hasVeryLargeExplicitChapter:a.hasVeryLargeExplicitChapter??!1,configuredChapterConcurrency:a.configuredChapterConcurrency??0,strategy:e});return{mode:e.mode,enableGlobalReview:e.enableGlobalReview,globalReviewSamplingRate:e.globalReviewSamplingRate??1,repairRoundBudget:g.repairRoundBudget,chapterConcurrency:g.chapterConcurrency,reviewConcurrency:g.reviewConcurrency,evidenceFloorChars:g.evidenceFloorChars,evidenceCeilingChars:g.evidenceCeilingChars,targetWords:c,chapterCount:b,triggers:g.triggers}}},87942:(a,b,c)=>{c.d(b,{x:()=>d});let d={version:"professional-document-workflow-v9",rules:["complete-local-knowledge-assumption","knowledge-coverage-recovery","fact-trace-placement","chapter-coverage-gate","structured-quality-report","post-repair-verification"]}}};
|
|
131
|
+
${a.join("\n\n")}`)}}}else f=bl?await Y(()=>(0,aY.X6)(cz,`chapter-section-draft:${d.id}`,()=>(0,a_.N1)({template:B,chapter:d,evidence:X,missingFacts:Z,promptTexts:aL,projectContext:cs(d),requirement:a.requirement,roleContext:ai,targetWords:aZ,maxWords:aT,forbidDrawingImages:!1,factCoverageContext:aJ,projectRoot:c,modelName:(0,P.$y)()?.model.name,materialContextHash:(0,u.c6)({materialFilePaths:ah,promptTexts:ak}),allowPartialResult:!1,compactProjectContext:!0,scopedProjectContext:cr,planDataMasterText:cW,decisionLockText:cX,sectionEvidenceProvider:ax,onSectionProgress:bv,diagnostics:cz,signal:a.signal}))):await Y(()=>(0,aY.X6)(cz,`chapter-draft:${d.id}`,()=>(0,a_.eu)(B,d,X,Z,aL,cs(d),a.requirement,ai,{forbidDrawingImages:!1,minWords:aU,targetWords:aU,maxWords:aT,maxTokens:aV,factCoverageContext:aJ,planDataMasterText:cW,decisionLockText:cX,signal:a.signal,diagnostics:cz,supplementEvidenceProvider:ay,evidenceFloorChars:cy.evidenceFloorChars,evidenceCeilingChars:cy.evidenceCeilingChars})));if(f||(cz.llm.lastError=cz.llm.lastError||"全部成稿路径未返回有效正文"),f&&cU){let a=function(a,b){let c=[],d=a;for(let a of[/高峰(?:期)?(?:总)?(?:人数|劳动力|用工|投入)(?:为|约|控制在|不超过|达)?\s*(\d+)\s*人/u,/劳动力(?:峰值|高峰)(?:为|约|控制在|不超过|达)?\s*(\d+)\s*人/u,/高峰(?:投入|用工)(?:为|约|控制在|不超过|达)?\s*(\d+)\s*人/u])d=d.replace(a,(a,d)=>{let e=Number(d);return e===b.laborPeak.count||e<=0?a:(c.push({anchor:"劳动力峰值",from:`${e}人`,to:`${b.laborPeak.count}人`}),a.replace(d,String(b.laborPeak.count)))});for(let a of b.machines){let b=a.name.trim();if(b.length<2)continue;let e=RegExp(`${b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}[^\\n。;;]{0,20}?(\\d+)\\s*台`,"gu");d=d.replace(e,(b,d)=>{let e=Number(d);return e===a.count||e<=0?b:(c.push({anchor:a.name,from:`${e}台`,to:`${a.count}台`}),b.replace(d,String(a.count)))})}return{markdown:d,fixed:c}}(f,cU);a.fixed.length>0&&(f=a.markdown,cz.llm.lastInfo=`计划数据主表对齐:${d.title} 回填 ${a.fixed.length} 处(${a.fixed.map(a=>`${a.anchor} ${a.from}→${a.to}`).join("、")})`)}if((0,u.Te)(a.signal),!f){let a=`${(0,o.GQ)(d.title)} 大模型未返回有效正文,已阻断生成`;throw ad[i]=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aj.primaryPromptId,status:"failed",message:a,details:[`LLM 最近错误:${cz.llm.lastError||"空响应或超时"}`,`证据条数:${X.length}`],progress:{current:g+1,total:bX.length,label:"章节阻断"}},{subtitle:(0,o.GQ)(d.title),order:g}),W(T),Error(a)}if(!f.trim())throw Error(`${(0,o.GQ)(d.title)} 首次生成失败,未获得可用于定稿的正文`);let j=b&&b.blocks.length>0?b.blocks.map(a=>a.title):(d.sections||[]).filter(Boolean),k=b&&b.blocks.length>0?b.blocks.flatMap(a=>a.subPoints.map(a=>a.title)):[],l=f;j.length>0&&(l=(0,u.Ww)(l,j,3)),k.length>0&&(l=(0,u.Ww)(l,k,4)),e=dk(l,d),e=await db(e,bz)}let bw=await be({chapter:d,content:e,evidence:X}),by=(0,r.V7)(e),bC=(0,q.r4)(e),bD=b&&b.blocks.length>0?b.blocks.map(a=>a.title):(d.sections||[]).filter(Boolean),bE=bD.length>0?bD:bC.length>0?bC:[],bG=(0,s.qK)(e,[{title:d.title,content:e,sections:bE}]).map(a=>a.message),bI=bw.slice(0,6).map(a=>`小节事实密度需优化:${a}`),bN=[...bG,...bI],bO=function(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))||c.some(a=>/空小节|缺少规划小节/u.test(a))?"failed":"success"}(by,0,bN);return f=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aj.primaryPromptId,status:bO,message:(0,aX.AQ)(`${(0,o.GQ)(d.title)} 已由大模型成稿:当前 ${by} 字;章节预算约 ${aS.budgetTarget} 字,本轮目标约 ${aS.roundTarget} 字${bN.length?`;待优化:${bN.slice(0,8).join("、")}`:""}`,h),details:[`本轮完成率:${Math.round(by/Math.max(1,aS.roundTarget)*100)}%`,`结构目标约 ${aS.structureTarget} 字`,...al,`二级小节:${bE.length} 个`],progress:{current:g+1,total:bX.length,label:bN.length?"章节已生成":"章节达标"}},{subtitle:(0,o.GQ)(d.title),order:g}),bn[g]=f,async()=>{let a={id:d.id,title:d.title,content:e,evidence:X,missingFacts:Z,sections:bE,tablePlans:d.tablePlans||[]};bm[g]=a,T=bm.filter(a=>!!a),W(T)}}catch(h){if(a.signal?.aborted)throw h;let b=cz.llm.lastError,c=`failures=${cz.llm.failures} retries=${cz.llm.retries} reasoningTokens=${cz.llm.reasoningTokens||0}`;console.error(`[gen] chapter ${d.title} failed:`,h,b?`| LLM lastError: ${b}`:"| LLM lastError: (none)","|",c);let e=`${d.title}:${h instanceof Error?h.message:"生成失败"}`;bk.push(e),f=(0,aX.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,o.GQ)(d.title)} 生成失败:${e}`,details:[`LLM 最近错误:${b||"无记录"}`,`LLM 调用失败 ${cz.llm.failures} 次、重试 ${cz.llm.retries} 次`]},{subtitle:(0,o.GQ)(d.title),order:g}),bn[g]=f}f&&(ad[i]=f),W(T)}))))e&&cK.push(cJ.run(e))}await Promise.all(cK),cz.metrics.push({name:"phase:draft",startedAt:cY,endedAt:Date.now(),durationMs:Date.now()-cY});let cZ=Date.now(),c$=bm.filter(a=>!!a);bl.push(...bn.filter(a=>!!a));let c_=[],c0=!1;if(cw.enableGlobalReview){let b=await es({globalReviewSamplingRate:cw.globalReviewSamplingRate,chapterDraftsFinal:c$,template:B,reviewPromptTexts:a1,repairPromptTexts:a2,requirement:a.requirement,signal:a.signal,projectContext:b_,generationDiagnostics:cz,preliminaryFactsModel:bJ,scopeConflicts:bM.scopeConflicts,progressStages:ad,emitProgress:W,withProgressHeartbeat:Y,planDataMaster:cU});c_=b.issues,c0=b.dedupRan}else await er({chapterDraftsFinal:c$,template:B,repairPromptTexts:a2,projectContext:b_,requirement:a.requirement,signal:a.signal,generationDiagnostics:cz,progressStages:ad,emitProgress:W,withProgressHeartbeat:Y});let{tableFixApplied:c1}=await ep({effectiveChapters:bX,chapterDraftsFinal:c$,template:B,repairPromptTexts:a2,requirement:a.requirement,signal:a.signal,generationDiagnostics:cz,progressStages:ad,emitProgress:W,withProgressHeartbeat:Y});return(c1||!c0)&&(c_=await eo({chapterDraftsFinal:c$,globalConsistencyIssues:c_,progressStages:ad,emitProgress:W})),!function(a){let{generationDiagnostics:b,progressStages:c,chapterDraftsFinal:d,emitProgress:e}=a,f=b.evidence,g=b.llm,h=(0,M.Bd)();b.semantic=h;let i=h.embedCacheHits+h.embedCacheMisses,j=i>0?Math.round(1e4*h.embedCacheHits/i)/100:null,k=(g.promptCacheHitTokens||0)+(g.promptCacheMissTokens||0),l=k>0?Math.round(1e4*(g.promptCacheHitTokens||0)/k)/100:null,m=g.layerChars,n=m?m.l0+m.l1+m.l2+m.l3:0,o=a=>n>0?Math.round(1e4*a/n)/100:0,p=m&&n>0?`上下文分层:L0 system 恒定 ${m.l0} 字(${o(m.l0)}%)、L1 任务级 ${m.l1} 字(${o(m.l1)}%)、L2 章级 ${m.l2} 字(${o(m.l2)}%)、L3 小节级 ${m.l3} 字(${o(m.l3)}%)`:"上下文分层:本次生成未采集 L0-L3 分层统计";(0,aX.fx)(c,(0,aX.X5)({type:"validation",roleId:"budget-trim-report",status:"success",message:`预算裁剪报告:证据 ${f.raw} 条 → 采用 ${f.used} 条(噪声过滤 ${f.filteredNoise} 条、预算兜底裁剪 ${f.budgetDropped} 条),证据上下文 ${f.contextChars} 字`,details:[`证据质量:平均噪声分 ${f.avgNoiseScore},平均事实密度 ${f.avgFactDensity}`,`证据分层(T0 关键事实/T1 高相关片段/T2 目录索引):T0 注入 ${f.t0Chars||0} 字、T1 注入 ${f.t1Chars||0} 字、T2 索引 ${f.t2Lines||0} 行、目录省略 ${f.omittedChars||0} 字——A2 块级增量压缩后 T1 应显著低于 T0+T2`,`检索:${f.searchQueries} 组查询,耗时 ${Math.round(f.searchMs/1e3)} 秒`,`LLM:${g.calls} 次调用,失败 ${g.failures} 次,重试 ${g.retries} 次,schema 校验失败 ${g.schemaFailures} 次`,`LLM 上下文输入:${g.inputChars||0} 字符(system+user)${g.unlayeredChars?`(其中未分层调用 ${g.unlayeredChars} 字符,占比 ${Math.round(g.unlayeredChars/(g.inputChars||1)*1e4)/100}%)`:""},输入 ${g.inputTokens||0} token / 输出 ${g.outputTokens||0} token`,p,null===l?"上下文缓存:提供商未返回 prefix cache 指标(prompt_cache_hit/miss_tokens),无法观测命中率":`上下文缓存:命中 ${g.promptCacheHitTokens} token / 未命中 ${g.promptCacheMissTokens} token(命中率 ${l}%)——未命中占比高说明固定前缀未收敛,system/user 分离(A5)后应显著上升`,`推理 token:${g.reasoningTokens?`${g.reasoningTokens} token(思考未完全关闭,disableThinking 未生效风险)`:"0(思考已关闭)"}`,null===j?"bge 嵌入缓存:本次生成无嵌入调用":`bge 嵌入缓存:命中 ${h.embedCacheHits} 条 / 未命中 ${h.embedCacheMisses} 条(命中率 ${j}%,全局 LRU 容量 ${process.env.DOCUMENT_EMBED_CACHE_SIZE||2e3})`,"防爆兜底类软限制(保留并逐项记录裁剪量):selectEvidenceByBudget 的 maxItems/maxChars、uniqueEvidence 噪声过滤、evidenceBundlePrompt 的 maxChars、块级证据 top-k 截断、块级 facts 截断","语义取舍类软限制(已迁移本地语义模型):evaluationTexts 词面过滤→条目对象化、criterionFeatures 二字滑窗→bge-small 余弦、章节证据字符硬截→语义排序取 top-k","LLM 输出侧:schema 校验(截断位置可诊断)、空响应重试提示词收敛、块成稿 maxTokens 按目标字数 1:1.2(不走 thinking \xd76 放大)"]},{subtitle:"预算裁剪审计"})),e(d)}({generationDiagnostics:cz,progressStages:ad,chapterDraftsFinal:c$,emitProgress:W}),cz.metrics.push({name:"phase:global-review",startedAt:cZ,endedAt:Date.now(),durationMs:Date.now()-cZ}),(0,aY.X6)(cz,"phase:finalize",()=>ed({chapterDrafts:c$,chapterDraftsByOrder:bm,chapterGenerationStagesByOrder:bn,chapterGenerationStages:bl,effectiveChapters:bX,template:B,allEvidence:bg,projectMaterialScope:a9,progressStages:ad,documentSpec:aD,projectMaterialProfile:am,projectMaterialSummary:ay,domainProfile:aE,documentBudget:ct,promptTexts:aS,reviewPromptTexts:a1,input:a,generationStrategy:cw,generationDiagnostics:cz,chapterScopedContext:cs,promptBindings:ag,promptDocumentRules:aQ,projectUnderstanding:as,projectContext:b_,projectRoot:c,projectId:v,readiness:aF,factExtractionPromptTexts:a0,planDataMaster:cU,hasExplicitOutline:ax,missingItems:bj,retrievalCoverageReports:bh,failedChapterMessages:bk,webResearchReport:bi,indexHealth:a7,promptPlan:af,globalConsistencyIssues:c_,scopeConflicts:bM.scopeConflicts,writingTaskBrief:cn,evaluationCriteriaItems:bQ.map(a=>a.title).filter(Boolean),tenderRequirements:b7,requirementsSimilarity:cj,factTokenScopeClassifier:cl,professionalDepthClassifier:cm,agentWorkflow:bK,emitProgress:W,withProgressHeartbeat:Y}))}},48017:(a,b,c)=>{c.d(b,{BB:()=>e,_2:()=>f,_D:()=>g});var d=c(71678);function e(a,b){return(a.templateId||"")===b.templateId&&(a.requirement||"").trim()===(b.requirement||"").trim()}function f(a){if(!a)return"";let b=["【上一版本继承参考(仅作参照,必须与项目资料一致方可沿用;不一致处一律以项目资料为准)】",`上一版本文档《${a.versionTitle}》的结构与关键口径如下:新版本应尽量保持结构延续性(评审机构按同结构对照评审),并避免重犯上一版已知问题。`];return a.structureLines.length>0&&(b.push(`一、上一版本章节与小节结构(共 ${a.structureLines.length} 项):`),b.push(...a.structureLines.slice(0,40).map(a=>` - ${a}`)),b.push(" 要求:项目资料支撑相同的章节/小节结构尽量沿用(含施工方法章的专业分项小节),不得因重新规划而丢失上一版已有的专业分项小节。")),a.factLines.length>0&&(b.push("二、上一版本关键数值口径(数值必须以本项目资料为准,上一版数值仅作一致性参照):"),b.push(...a.factLines.map(a=>` - ${a}`)),b.push(" 要求:全文同类数值只能有一个口径;上一版口径与项目资料一致时沿用,不一致时按资料修正。")),a.issueLines.length>0&&(b.push("三、上一版已知问题(新版必须避免重犯):"),b.push(...a.issueLines.slice(0,12).map(a=>` - ${a}`))),b.join("\n")}function g(a){let b=a.markdown||"";if(!b.trim())return null;let c={versionTitle:a.title||"上一版本",completedAt:a.completedAt||0,structureLines:function(a){let b=[];for(let c of a.matchAll(/^#{2,4}\s+(.+)$/gmu)){let a=(c[1]||"").replace(/[☑✓✔☐□☒○●◉◇◆]/gu,"").trim();if(!a||/^(?:目录|参考文献|附录)/u.test(a))continue;let e=a.replace(/^\d{1,3}(?:[..]\d{1,3})*[、..]?\s*/u,"");(0,d.xb)(e)||b.push(a)}return[...new Set(b)].slice(0,80)}(b),factLines:function(a){let b=[];for(let c of[/(?:劳动力|作业人员|施工人员|高峰期|高峰|峰值)[^。;\n\d]{0,18}?([\d,]+)\s*人/gu,/(?:总工期|计划工期|工期)[^。;\n\d]{0,12}?(\d{2,4})\s*(?:个)?(?:日历)?天/gu,/(?:总建筑面积|建筑面积)[^。;\n\d]{0,10}?([\d,]+(?:\.\d+)?)\s*(?:㎡|平方米|m2|m²)/gu])for(let d of a.matchAll(c)){let c=a.lastIndexOf("\n",d.index-1)+1,e=a.indexOf("\n",d.index),f=a.slice(c,e<0?void 0:e).trim().slice(0,60);f&&!b.includes(f)&&b.push(f)}return b.slice(0,12)}(b),issueLines:(a.warningIssues||[]).slice(0,12)};return 0===c.structureLines.length&&0===c.factLines.length&&0===c.issueLines.length?null:c}},79227:(a,b,c)=>{c.d(b,{C:()=>f,previewGenerationBudgetForTemplate:()=>g});var d=c(46482),e=c(95734);function f(a){let b=Math.max(1,a.chapters.length),c=a.targetWords>0?Math.round(a.targetWords/b):1200,d=a.strategy,f=[],g=a.materialFileCount<4&&a.evidenceCount<6,h=Math.max(1,Math.min(b,(Number.isFinite(a.configuredChapterConcurrency)&&a.configuredChapterConcurrency>0?Math.floor(a.configuredChapterConcurrency):void 0)??b)),i=(0,e.Qf)(a.targetWords),j="fast"===d.mode?1:Math.max(1,b),{floorChars:k,ceilingChars:l}=c>=6e3?{floorChars:14e3,ceilingChars:4e4}:c>=3e3?{floorChars:11e3,ceilingChars:28e3}:{floorChars:8e3,ceilingChars:18e3},m=d.repairRoundBudget?d.repairRoundBudget:Math.max(2,Math.min(4,2+ +(a.targetWords>=2e4)+ +!!g)),n=Math.min(m*b,Math.max(12,2*b));return"strict"===d.mode&&f.push("strict:风险领域关键词命中(专项/安全/质量/验收/合同/合规等)"),a.targetWords>=4e4&&f.push("strict:目标篇幅超长(≥4 万字)"),g&&f.push("strict:资料稀疏(资料包文件 <4 且可用证据 <6 条)"),"fast"===d.mode&&f.push("fast:小文档(≤6000 字且 ≤4 章)全局审查降级为 35% 抽检"),"longform"===d.mode&&f.push("longform:长文档(≥3 万字或 ≥8 章)"),"balanced"===d.mode&&f.push("balanced:常规篇幅文档,标准审查深度"),f.push(`全章节并行生成(${h}/${b} 章同批),审查流水线 ${j} 路,全局 LLM 并发不设上限,每章证据预算 ${Math.round(k/1e3)}k-${Math.round(l/1e3)}k 字符,修复轮次预算每章 ${m} 轮(文档级总池 ${n} 轮,收敛判定优先)`),{strategy:d,chapterConcurrency:h,reviewConcurrency:j,llmConcurrency:i,evidenceFloorChars:k,evidenceCeilingChars:l,repairRoundBudget:m,repairPoolBudget:n,triggers:f}}function g(a){let b=Math.max(1,a.chapters.length),c=Math.max(0,Math.round(a.targetWords??0)),e=(0,d.JP)({template:a.template,targetWords:c,requirement:a.requirement,materialFileCount:a.materialFileCount,evidenceCount:a.evidenceCount}),g=f({template:a.template,chapters:a.chapters,targetWords:c,requirement:a.requirement,materialFileCount:a.materialFileCount,evidenceCount:a.evidenceCount,hasVeryLargeExplicitChapter:a.hasVeryLargeExplicitChapter??!1,configuredChapterConcurrency:a.configuredChapterConcurrency??0,strategy:e});return{mode:e.mode,enableGlobalReview:e.enableGlobalReview,globalReviewSamplingRate:e.globalReviewSamplingRate??1,repairRoundBudget:g.repairRoundBudget,chapterConcurrency:g.chapterConcurrency,reviewConcurrency:g.reviewConcurrency,evidenceFloorChars:g.evidenceFloorChars,evidenceCeilingChars:g.evidenceCeilingChars,targetWords:c,chapterCount:b,triggers:g.triggers}}},87942:(a,b,c)=>{c.d(b,{x:()=>d});let d={version:"professional-document-workflow-v9",rules:["complete-local-knowledge-assumption","knowledge-coverage-recovery","fact-trace-placement","chapter-coverage-gate","structured-quality-report","post-repair-verification"]}}};
|