@customize-agent/server 4.1.9 → 4.1.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 CHANGED
@@ -1 +1 @@
1
- 36CQbX6U97QG4cfpNGQMs
1
+ g8ctHpbtcppdHToxYHGau
@@ -5,8 +5,8 @@
5
5
  "devFiles": [],
6
6
  "ampDevFiles": [],
7
7
  "lowPriorityFiles": [
8
- "static/36CQbX6U97QG4cfpNGQMs/_buildManifest.js",
9
- "static/36CQbX6U97QG4cfpNGQMs/_ssgManifest.js"
8
+ "static/g8ctHpbtcppdHToxYHGau/_buildManifest.js",
9
+ "static/g8ctHpbtcppdHToxYHGau/_ssgManifest.js"
10
10
  ],
11
11
  "rootMainFiles": [],
12
12
  "rootMainFilesTree": {},
@@ -3,9 +3,9 @@
3
3
  "routes": {},
4
4
  "dynamicRoutes": {},
5
5
  "preview": {
6
- "previewModeId": "c37b13742a6b37b7bcd442eab055a7ac",
7
- "previewModeSigningKey": "97aad79851d35b5fbc4cf94b0b2e2171c3190c87f5e76a54997b322981cb014e",
8
- "previewModeEncryptionKey": "e3efeca84e03a8133727bcdadc393fe0b5571d97d38a7a89464c60efe3e90881"
6
+ "previewModeId": "0649dbc316b5ef65effd5138b26866b5",
7
+ "previewModeSigningKey": "f776d1dafcd0465e1edb86191a84d59a48c4c014749220b7d4da0d320042cd8c",
8
+ "previewModeEncryptionKey": "3a1dc7b2af34d92c6633f630b74e9e5eb22ea37fbc5047b4537d17be965d61e6"
9
9
  },
10
10
  "notFoundRoutes": []
11
11
  }
@@ -72,7 +72,7 @@ ${e}`,source:function(a){let b=a.toLowerCase();return b.includes(".gov.cn")||b.i
72
72
  ${m}
73
73
 
74
74
  资料:
75
- ${k}`,{signal:e});return((0,aG.Te)(e),n?.facts?.length)?{facts:n.facts.filter(a=>a.key&&a.value).map(a=>{let b=l.find(b=>b.id===a.fieldId||b.name===a.fieldName||b.name===a.key);return{key:b?.name||a.key,fieldId:b?.id||a.fieldId,fieldName:b?.name||a.fieldName,value:(0,aG.lG)(a.value),sourceFile:a.sourceFile||"",roleId:a.roleId||"llm",processingType:a.processingType,confidence:a.confidence??.8,sourceRef:{filePath:a.sourceFile||"",roleId:a.roleId||"llm",processingType:a.processingType}}}),stages:[{type:"fact_extraction",roleId:"llm-json",status:"success",message:`LLM 按动态 schema 抽取 ${n.facts.length} 条事实`}]}:{facts:[],stages:f}}let bn=/(?:\b[A-Z]{1,8}[\w./-]*\d[\w./-]*\b|\b\d+(?:\.\d+)?\s*(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|L|ml|MPa|kPa|℃|%|台|套|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年|万元|元)\b|\b\d+\s*[×xX]\s*\d+(?:\s*[×xX]\s*\d+)?\b|\b(?:GB|GB\/T|ISO|IEC|IEEE|RFC|API|DB\d*|T\/[A-Z]+)\s*[\w.-]+\b)/giu;function bo(a){return(0,aG.lG)(a).replace(/[\u00A0\u2002-\u200B\u3000]/gu," ").replace(/([\p{Script=Han}])\s+([\p{Script=Han}])/gu,"$1$2").replace(/(\d)\s+(日历天|天|个月|月|年|万元|元|㎡|平方米|米|m|mm|MPa|kPa|%)/giu,"$1$2").replace(/(合同|投资|工程|项目)\s*估\s*算\s*(?:价格|价)/gu,"$1估算价").replace(/计划\s*工\s*期/gu,"计划工期").replace(/合同\s*工\s*期/gu,"合同工期").replace(/质量\s*标\s*准/gu,"质量标准").replace(/建设\s*地\s*点/gu,"建设地点").replace(/建设\s*规\s*模/gu,"建设规模").replace(/招标\s*范\s*围/gu,"招标范围").replace(/最高\s*投\s*标\s*限\s*价/gu,"最高投标限价").replace(/招标\s*控\s*制\s*价/gu,"招标控制价").replace(/[::]\s*/gu,":").replace(/\s+/gu," ").trim()}let bp=[{fieldId:"project_name",key:"项目名称",fieldName:"项目名称",pattern:/(?:项目名称|工程名称|招标项目名称)[::\s为是]+([^\n。;;]{2,120})/u},{fieldId:"project_code",key:"项目编号",fieldName:"项目编号",pattern:/(?:项目编号|招标项目编号|工程编号)[::\s为是]+([A-Za-z0-9\-_.()()]{4,80})/u},{fieldId:"owner",key:"招标人",fieldName:"招标人",pattern:/(?:招标人|建设单位|发包人)[::\s为是]+([^\n。;;]{2,120})/u},{fieldId:"project_location",key:"建设地点",fieldName:"建设地点",pattern:/建设地点[::\s为是]+([^\n。;;]{2,100})/u},{fieldId:"project_scale",key:"建设规模",fieldName:"建设规模",pattern:/建设规模[::\s为是]+([^\n。;;]{2,220})/u},{fieldId:"project_scope",key:"招标范围",fieldName:"招标范围",pattern:/招标范围[::\s为是]+([^\n。;;]{2,220})/u},{fieldId:"schedule_requirement",key:"计划工期",fieldName:"周期要求",pattern:/(?:(?:计划工期|合同工期|总工期)[::\s为是约]*|工期[::\s为是约]+)([^\n。;;]{0,40}?\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年)(?:[^\n。;;]{0,30})?)/u},{fieldId:"quality_standard",key:"质量标准",fieldName:"质量标准",pattern:/质量标准[::\s为是]+([^\n。;;]{1,60})/u},{fieldId:"project_investment_estimate",key:"合同估算价格",fieldName:"项目投资估算",pattern:/(?:合同估算价格|合同估算价|投资估算|估算价格|工程估算价|项目估算价|最高投标限价|招标控制价)[::\s为是约]+([^\n。;;]{0,80}?\d+(?:\.\d+)?\s*(?:万元|元))/u}];function bq(a,b){let c=bo((0,aG.lG)(b));return!(!a||!c||c.length>260||/###|投标文件的编制|备选投标方案|投标将被否决|投标人提供|投标有效期|电子交易系统|公共资源交易监督管理部门|中标候选|评标委员会|实质性内容作出响应/u.test(c)||/签章|盖章|联系人|联系电话|电话|邮箱|解密|开标|评标|保证金|交易系统|空白|填写|上传|下载|递交/u.test(c))&&("schedule_requirement"===a?c.length<=90&&/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年)/u.test(c):"quality_standard"===a?c.length<=40&&/合格|优良|一次性验收|国家.*验收|达到/u.test(c)&&!/工期|投标|技术标准/u.test(c):"owner"===a?c.length<=80&&!/将报|监督管理部门|投标人|中标/u.test(c):"project_location"===a?c.length<=120&&!/见招标公告|详见|投标/u.test(c):"project_code"===a?/^[A-Za-z0-9\-_.()()]+$/u.test(c):"project_investment_estimate"===a?c.length<=100&&/\d+(?:\.\d+)?\s*(?:万元|元)/u.test(c):c.length<=220)}function br(a){let b=[],c=new Set;for(let d of a)for(let a of bo(d.content).split(/\r?\n/u).flatMap(a=>{let b=a.replace(/\s+/gu," ").trim();return b.length>260?b.split(/(?=\d+(?:\.\d+)?\s*[^\s::]{2,12}[::])/u):[b]}).filter(Boolean))if(!/报价明细|综合单价|税率|增值税|利润|结算/u.test(a)||/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(a))for(let e of bp){let f=e.pattern.exec(a),g=f?.[1]?.trim();if(!g||!bq(e.fieldId,g))continue;let h=`${d.filePath}:${e.fieldId}:${g}`;c.has(h)||(c.add(h),b.push({key:e.key,fieldName:e.fieldName,fieldId:e.fieldId,value:g,sourceFile:d.filePath,roleId:d.roleId||"project_basic_fact",processingType:d.processingType||"reference",confidence:Math.max(.82,d.score||.82),sourceRef:{filePath:d.filePath,roleId:d.roleId||"project_basic_fact",processingType:d.processingType||"reference",sectionTitle:d.sectionTitle}}))}return b.slice(0,80)}function bs(a,b=m){let c=[],d=new Set;for(let e of a){let a=`${e.roleId||""} ${e.processingType||""} ${e.filePath} ${e.sectionTitle||""}`;if(!/drawing|table|bill|boq|draw|data|sheet|spec|standard|record|report|表格|数据|规格|参数|标准|记录|报告|清单|图纸|说明/u.test(a)&&e.score<.75)continue;let f=(0,aG.lG)(e.content).replace(/\s+/gu," ");for(let a of f.matchAll(bn)){let g=a[0].trim();if(!g||p(b,g))continue;let h=Math.max(0,(a.index||0)-40),i=Math.min(f.length,(a.index||0)+g.length+40),j=f.slice(h,i);if(q(b,j)||r(b,j))continue;let k=`${e.filePath}:${g}`;d.has(k)||(d.add(k),c.push({key:"精确参数",fieldName:"技术参数",fieldId:"technical_parameter",value:g,sourceFile:e.filePath,roleId:e.roleId||"precise_fact",processingType:e.processingType||"precise",confidence:Math.max(.7,e.score||.7),sourceRef:{filePath:e.filePath,roleId:e.roleId||"precise_fact",processingType:e.processingType||"precise",sectionTitle:e.sectionTitle}}))}}return c.slice(0,240)}function bt(a){return`${a.key} ${a.fieldName||""} ${a.value} ${a.roleId} ${a.processingType||""} ${a.sourceFile}`}function bu(a){return/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|项目估算价|最高投标限价|招标控制价/u.test(a)}function bv(a){let b=bt(a);return!bu(b)&&/投标保证金|发票类型|开标时间|公共资源交易监督管理|不良行为记录|投诉举报|资质投诉|投标承诺|违约金|中标服务费|交易平台|保证金账户|投标有效期|报价明细|投标报价|单价|合价|税率|增值税|利润|结算/u.test(b)}function bw(a){return(0,aG.lG)(a).replace(/\s+/gu," ").trim()}function bx(a,b=[]){return[...new Set([a,...b,...a.split(/[\s、,。;;::/\\_-]+/u)].map(bw).filter(a=>a.length>=2))]}function by(a,b,c){var d,e;let f=bw(c.label);if(!f||p(b,f)||q(b,f))return;let g=c.id||(d=c.source,e=c.fieldId,`${d}:${e||f}`.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-|-$/gu,"")||`${d}-${Math.random().toString(36).slice(2,8)}`),h=c.queries?.length?c.queries.map(bw).filter(Boolean):bx(f),i=a.find(a=>a.id===g||a.label===f);if(i){i.required=i.required||c.required,i.queries=[...new Set([...i.queries,...h])];return}a.push({...c,id:g,label:f,queries:h})}function bz(a,b,c,d,e,f=[]){"do_not_use"!==c.usagePolicy&&"diagnostic_only"!==c.usagePolicy&&"forbidden"!==c.derivationPolicy&&by(a,b,{label:c.name,category:c.category,required:e,source:d,fieldId:c.id,queries:bx(c.name,[...c.aliases,...f])})}function bA(a){let b=new Set;return a.filter(a=>{let c=`${a.sourceFile}:${a.key}:${a.value}`;return!b.has(c)&&(b.add(c),!0)})}function bB(a){let b=a.profile||m,c=bA([...a.factsModel.factIndex.parameterFacts,...a.factsModel.factIndex.tableFacts,...a.factsModel.factIndex.drawingFacts,...a.factsModel.factIndex.billFacts,...a.factsModel.factIndex.reliableFacts]);return a.needs.map(d=>{let e=bA(c.filter(a=>(function(a,b,c){let d=bt(a);if(bv(a)||p(c,d)||q(c,d))return!1;if(b.fieldId&&a.fieldId===b.fieldId||o(c,a.fieldName||a.key)?.id===b.fieldId||b.queries.filter(a=>a.length>=2).some(a=>d.includes(a)))return!0;let e=o(c,b.label);return!!(e&&[e.name,...e.aliases].some(a=>a.length>=2&&d.includes(a)))})(a,d,b))).sort((a,b)=>(b.confidence||0)-(a.confidence||0)),f=(a.evidence||[]).filter(a=>(function(a,b,c){let d=`${a.filePath} ${a.roleId||""} ${a.processingType||""} ${a.sectionTitle||""} ${a.content}`;return!(p(c,d)||q(c,d))&&b.queries.some(a=>a.length>=2&&d.includes(a))})(a,d,b)),g=Math.max(0,...e.map(a=>a.confidence||0)),h=0===e.length&&0===f.length?"missing":g>0&&g<.58?"low_confidence":"satisfied";return{need:d,facts:e,evidence:f,status:h}})}function bC(a){return(0,aG.lG)(a).replace(/\s+/gu," ").trim().slice(0,220)}function bD(a,b=[],c=[],d,e=m){let f=b=>a.filter(a=>b.some(b=>`${a.key} ${a.fieldName||""}`.includes(b))),g=b=>a.filter(a=>a.processingType===b||a.roleId.includes(b)),h=a.filter(a=>{let b=`${a.key} ${a.fieldName||""} ${a.value}`;return/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|ISO|IEC|IEEE|RFC|API|台|套|个|项|批|次|份|人|㎡/iu.test(b)&&(!p(e,b)||bu(b))&&!q(e,b)}),i=a.filter(a=>"table"===a.processingType||/bill|boq|table|sheet|data|表格|列表|明细|数据/u.test(`${a.roleId} ${a.sourceFile}`)),j=function(a,b,c,d){let e=a.filter(a=>q(d,bt(a))||r(d,bt(a))),f=a.filter(a=>{let b=bt(a);return a.confidence>=.58&&!bv(a)&&!p(d,b)&&!q(d,b)&&!r(d,b)}),g=[...b.filter(a=>!bv(a)),...f.filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|JGJ|ISO|IEC|台|套|个|项|批|次|份|人|㎡|型号|规格|数量|单位/iu.test(bt(a)))].filter((a,b,c)=>c.findIndex(b=>b.sourceFile===a.sourceFile&&b.value===a.value&&b.key===a.key)===b).slice(0,360),h=f.filter(a=>"table"===a.processingType||/table|sheet|表格|清单|明细|数据|参数行摘要/u.test(bt(a))),i=f.filter(a=>"drawing"===a.processingType||/drawing|draw|dwg|图纸|设计|尺寸|标高|管径|做法/u.test(bt(a)));return{reliableFacts:f.slice(0,500),parameterFacts:g,tableFacts:h.slice(0,240),drawingFacts:i.slice(0,240),billFacts:c.slice(0,240),diagnostics:e.slice(0,120)}}(a,h,i,e);return{project:a,schedule:f(["工期","开工","竣工","节点","周期"]),quality:f(["质量","验收"]),safety:f(["安全","风险"]),resources:f(["劳动力","材料","机械","设备","资源"]),tables:b,drawings:g("drawing"),bills:i,preciseFacts:h,rules:g("rule"),specifications:g("specification"),schemaFacts:function(a,b){let c={};for(let d of b?.factFields||[])c[d.id]=a.filter(a=>a.fieldId===d.id||a.key===d.name||a.fieldName===d.name);return c}(a,d),factIndex:j,missing:[...new Set(c)],conflicts:function(a,b,c=m){let d=(b?.factFields.map(a=>a.name)||[...new Set(a.map(a=>a.fieldName||a.key))]).filter(a=>(function(a,b){let c=o(b,a);return c?"single"===c.cardinality&&"ignore"!==c.conflictPolicy&&"allow_multiple"!==c.conflictPolicy:/项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数|工期|质量标准|合同价格形式|绿色建筑等级|投标有效期|质保期/u.test(a)})(a,c)),e=[];for(let b of d){let d=a.filter(a=>a.key===b||a.fieldName===b||o(c,a.fieldName||a.key)?.name===b),f=new Map;for(let a of d){let b=function(a,b){let c=(0,aG.lG)(a).trim();if(q(b,c)||p(b,c)||/签章|盖章|联系人|联系电话|电话|邮箱|解密|开标|评标|保证金|交易系统|空白|填写|上传|下载|递交/u.test(c)||/\|/u.test(c)||/^#+\s*/u.test(c)||/见(?:招标公告|投标人须知|前附表|本项目|补疑)|资料参数行摘要|公共资源交易监督管理|开评标程序|监管部门/u.test(c)||/是否|符合|采购范围|规定的投标截止时间|电子交易系统/u.test(c)&&/\d{3,}/u.test(c))return"";let d=(0,aF.K3)((0,aG.lG)(c));return d&&!(d.length>80)&&/[\d年月日%]|合格|一星|二星|三星|总价合同|单价合同|承台|框架|装配式/u.test(c)?d:""}(a.value,c);b&&f.set(b,[...f.get(b)||[],a])}if(f.size>1){let a=[...f.values()].slice(0,4).map(a=>`${(0,aG.lG)(a[0].value).slice(0,120)}(${[...new Set(a.map(a=>a.sourceFile))].slice(0,3).join("、")})`).join(" vs ");e.push(`事实冲突:${b} 存在多个来源值:${a}`)}}return e.slice(0,8)}(a,d,e)}}let bE=[{key:"project_name",label:"项目名称",aliases:["项目名称","工程名称","招标项目名称"],valueType:"text"},{key:"project_code",label:"项目编号",aliases:["项目编号","招标项目编号","工程编号"],valueType:"identifier"},{key:"owner",label:"招标人",aliases:["招标人","项目业主","建设单位","发包人","采购人"],valueType:"organization"},{key:"project_location",label:"建设地点",aliases:["建设地点","实施地点","服务地点","交付地点"],valueType:"location"},{key:"project_scale",label:"建设规模",aliases:["建设规模","工程规模","项目规模"],valueType:"scale"},{key:"schedule_requirement",label:"计划工期",aliases:["计划工期","合同工期","总工期","工期","实施周期","服务期限"],valueType:"duration"},{key:"quality_standard",label:"质量标准",aliases:["质量标准","质量目标","验收标准","服务标准"],valueType:"standard"},{key:"project_investment_estimate",label:"合同估算价",aliases:["合同估算价","合同估算价格","投资估算","估算价格","最高投标限价","招标控制价","预算金额"],valueType:"money"}];function bF(a){return/^(见|详见|参见|按|以).{0,30}(招标公告|招标文件|投标人须知|前附表|合同|附件|图纸|清单|约定|规定|执行)/u.test(a)||/见招标公告|见投标人须知前附表|详见|按.*执行/u.test(a)}function bG(a,b){let c=bo(a.value),d=[],e=30,f=!1;(!c||c.length>260)&&(f=!0,e-=100,d.push("空值或过长")),/###|投标文件的编制|备选投标方案|投标将被否决|投标人提供|投标有效期|电子交易系统|公共资源交易监督管理部门|中标候选|评标委员会|实质性内容作出响应|招标人有权核查/u.test(c)&&(f=!0,e-=100,d.push("大段条款或 Markdown 噪声")),bE.some(a=>a.key!==b.key&&a.aliases.some(a=>c.includes(a)))&&(e-=45,d.push("包含其他字段名,疑似字段串位")),bF(c)&&(e-=35,d.push("引用型弱值"));let g=function(a,b){switch(b.valueType){case"duration":if(!/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年)/u.test(a))return{rejected:!0,score:-80,reason:"缺少明确工期数值和时间单位"};return{rejected:!1,score:45,reason:"包含明确工期数值和时间单位"};case"money":if(!/\d+(?:\.\d+)?\s*(?:万元|元|亿元)/u.test(a))return{rejected:!0,score:-80,reason:"缺少明确金额数值和单位"};if(/综合单价|税率|增值税|利润|报价明细/u.test(a))return{rejected:!0,score:-90,reason:"命中非目标商务明细"};return{rejected:!1,score:45,reason:"包含明确金额数值和单位"};case"standard":if(!/合格|优良|一次性验收|达到|满足|符合/u.test(a))return{rejected:!0,score:-70,reason:"不符合标准类字段表达"};if(/工期|投标|技术标准|有效期/u.test(a))return{rejected:!0,score:-90,reason:"标准字段包含其他字段或投标条款"};return{rejected:!1,score:40,reason:"符合标准类字段表达"};case"location":if(bF(a))return{rejected:!1,score:-40,reason:"引用型地点弱值"};if(!/(省|市|区|县|镇|街道|路|园区|大道|巷|内|号)/u.test(a))return{rejected:!1,score:-10,reason:"地点具体性不足"};return{rejected:!1,score:35,reason:"包含具体地址特征"};case"organization":if(/监督管理部门|投标人|中标候选人|评标委员会/u.test(a))return{rejected:!0,score:-90,reason:"组织字段角色串位"};if(/(公司|集团|单位|委员会|机关|中心|局|院|所|政府|运营管理)/u.test(a))return{rejected:!1,score:35,reason:"包含组织名称特征"};return{rejected:!1,score:5,reason:"组织名称特征较弱"};case"identifier":if(!/^[A-Za-z0-9\-_.()()]+$/u.test(a))return{rejected:!0,score:-70,reason:"编号格式不合法"};return{rejected:!1,score:35,reason:"符合编号格式"};case"scale":if(/\d+(?:\.\d+)?\s*(?:㎡|平方米|m²|米|m|层|栋|座|万元|元)/iu.test(a))return{rejected:!1,score:30,reason:"包含规模数值或单位"};return{rejected:!1,score:5,reason:"规模字段为文本描述"};default:return{rejected:!1,score:a.length>=2?10:-20,reason:"文本字段"}}}(c,b);return e+=g.score,d.push(g.reason),g.rejected&&(f=!0),"evidence"===a.sourceType&&(e+=20,d.push("来源为证据原文")),a.sourceName&&/招标文件|招标公告|前附表|合同|需求书|正文/u.test(a.sourceName)&&(e+=15,d.push("来源文件可信")),"generated_markdown"===a.sourceType&&(e-=10),{...a,value:c,confidence:e,rejected:f,reasons:d}}function bH(a){return function(a,b=bE){let c=new Map;for(let d of b){let b=a.filter(a=>a.fieldKey===d.key).sort((a,b)=>b.confidence-a.confidence),e=b.find(a=>!a.rejected&&a.confidence>0);e&&c.set(d.key,{fieldKey:d.key,label:d.label,value:e.value,source:e.sourceName||e.sourceType,confidence:e.confidence,candidates:b,selectedReason:e.reasons.join(";")})}return c}([...function(a){let b=[];for(let c of a){let a=function(a){let b=`${a.fieldId||""}${a.key||""}${a.fieldName||""}`;return bE.find(c=>c.key===a.fieldId||c.aliases.some(a=>b.includes(a)))}(c);if(!a)continue;let d=(0,aG.lG)(c.value);b.push(bG({fieldKey:a.key,label:a.label,value:d,sourceType:"structured_fact",sourceName:c.sourceFile||c.sourceRef?.sectionTitle||"structured_fact"},a))}return b}(a.facts),...function(a,b="generated_markdown"){let c=[];for(let d of a.split(/\r?\n/u)){if(!/^\|.*\|\s*$/u.test(d)||/^\|\s*:?-{3,}:?/u.test(d))continue;let a=d.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.replace(/\*\*/gu,"").trim());if(a.length<2)continue;let e="序号"===a[0]&&a.length>=3?a[1]:a[0],f="序号"===a[0]&&a.length>=3?a[2]:a[1],g="序号"===a[0]&&a.length>=4?a[3]:a[2],h=bE.find(a=>a.aliases.some(a=>e.includes(a))||a.label===e);!h||!f||/内容|参数|资料未明确|系统暂未确认|暂未从知识库确认/u.test(f)||c.push(bG({fieldKey:h.key,label:h.label,value:f,sourceType:"generated_markdown",sourceName:g||b},h))}return c}(a.markdown||"")])}function bI(a){return a?({"knowledge-base":"知识库","document-readiness":"生成准备度检查","quality-repair":"质量补写","export-gate":"导出门禁","final-format":"正式排版","multimodal-files":"多模态文件理解","llm-json":"LLM 事实抽取","llm-review":"LLM 审查","document-workflow":"最终规范校验"})[a]:void 0}function bJ(a,b={}){let c={executionVersion:2,title:{role_binding:"项目角色配置绑定",knowledge_retrieval:"知识库证据检索",file_understanding:"文件角色读取",fact_extraction:"事实抽取",chapter_generation:"章节正文生成",asset_generation:"生成资源处理",llm_review:"LLM 审查优化",validation:"内容优化与质量校验",formatting:"正式排版整理",export_ready:"导出就绪检查",reference:"资料增强"}[a.type],group:a.type,...a,...b};return{...c,roleName:c.roleName||bI(c.roleId),subtitle:c.subtitle||c.roleName||bI(c.roleId)}}function bK(a,b){let c=a.findIndex(a=>a.type===b.type&&a.roleId===b.roleId&&a.promptId===b.promptId);return c>=0?(a[c]={...b,order:a[c]?.order??b.order},c):(a.push(b),a.length-1)}function bL(a,b){return`${a},耗时 ${Math.round((Date.now()-b)/1e3)} 秒`}var bM=c(74329);async function bN(a,b,c,d){let e=Date.now();try{return await c()}finally{let c=Date.now();a.metrics.push({name:b,startedAt:e,endedAt:c,durationMs:c-e,meta:d})}}function bO(a){return a.toLowerCase()}function bP(a,b){return e.relative(a,e.isAbsolute(b)?b:e.join(a,b))}function bQ(a){let b=[];for(let c of a)bM.ee.lastIndex=0,bM.ee.test(c)&&b.push(c);return b}function bR(a){return!!a&&(null!=a.chapters&&!Array.isArray(a.chapters)||null!=a.facts&&!Array.isArray(a.facts))}async function bS(a,b,c,e){let f=b.promptTexts.join("\n\n")||"请读取绑定文件角色,抽取可用于文档生成的结构化信息。",g=P({chapterId:b.id,textEvidence:c,resources:[],byKind:{map:[],image:[],table:[],document:[],spreadsheet:[],text:[],attachment:[]},summary:""},{maxChars:M(1800,8e3,14e3)}),h=`你正在执行一个“文件角色 \xd7 提示词角色”的读取节点。
75
+ ${k}`,{signal:e});return((0,aG.Te)(e),n?.facts?.length)?{facts:n.facts.filter(a=>a.key&&a.value).map(a=>{let b=l.find(b=>b.id===a.fieldId||b.name===a.fieldName||b.name===a.key);return{key:b?.name||a.key,fieldId:b?.id||a.fieldId,fieldName:b?.name||a.fieldName,value:(0,aG.lG)(a.value),sourceFile:a.sourceFile||"",roleId:a.roleId||"llm",processingType:a.processingType,confidence:a.confidence??.8,sourceRef:{filePath:a.sourceFile||"",roleId:a.roleId||"llm",processingType:a.processingType}}}),stages:[{type:"fact_extraction",roleId:"llm-json",status:"success",message:`LLM 按动态 schema 抽取 ${n.facts.length} 条事实`}]}:{facts:[],stages:f}}let bn=/(?:\b[A-Z]{1,8}[\w./-]*\d[\w./-]*\b|\b\d+(?:\.\d+)?\s*(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|L|ml|MPa|kPa|℃|%|台|套|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年|万元|元)\b|\b\d+\s*[×xX]\s*\d+(?:\s*[×xX]\s*\d+)?\b|\b(?:GB|GB\/T|ISO|IEC|IEEE|RFC|API|DB\d*|T\/[A-Z]+)\s*[\w.-]+\b)/giu;function bo(a){return(0,aG.lG)(a).replace(/[\u00A0\u2002-\u200B\u3000]/gu," ").replace(/([\p{Script=Han}])\s+([\p{Script=Han}])/gu,"$1$2").replace(/(\d)\s+(日历天|天|个月|月|年|万元|元|㎡|平方米|米|m|mm|MPa|kPa|%)/giu,"$1$2").replace(/(合同|投资|工程|项目)\s*估\s*算\s*(?:价格|价)/gu,"$1估算价").replace(/计划\s*工\s*期/gu,"计划工期").replace(/合同\s*工\s*期/gu,"合同工期").replace(/质量\s*标\s*准/gu,"质量标准").replace(/建设\s*地\s*点/gu,"建设地点").replace(/建设\s*规\s*模/gu,"建设规模").replace(/招标\s*范\s*围/gu,"招标范围").replace(/最高\s*投\s*标\s*限\s*价/gu,"最高投标限价").replace(/招标\s*控\s*制\s*价/gu,"招标控制价").replace(/[::]\s*/gu,":").replace(/\s+/gu," ").trim()}let bp=[{fieldId:"project_name",key:"项目名称",fieldName:"项目名称",pattern:/(?:项目名称|工程名称|招标项目名称)[::\s为是]+([^\n。;;]{2,120})/u},{fieldId:"project_code",key:"项目编号",fieldName:"项目编号",pattern:/(?:项目编号|招标项目编号|工程编号)[::\s为是]+([A-Za-z0-9\-_.()()]{4,80})/u},{fieldId:"owner",key:"招标人",fieldName:"招标人",pattern:/(?:招标人|建设单位|发包人)[::\s为是]+([^\n。;;]{2,120})/u},{fieldId:"project_location",key:"建设地点",fieldName:"建设地点",pattern:/建设地点[::\s为是]+([^\n。;;]{2,100})/u},{fieldId:"project_scale",key:"建设规模",fieldName:"建设规模",pattern:/建设规模[::\s为是]+([^\n。;;]{2,220})/u},{fieldId:"project_scope",key:"招标范围",fieldName:"招标范围",pattern:/招标范围[::\s为是]+([^\n。;;]{2,220})/u},{fieldId:"schedule_requirement",key:"计划工期",fieldName:"周期要求",pattern:/(?:(?:计划工期|合同工期|总工期)[::\s为是约]*|工期[::\s为是约]+)([^\n。;;]{0,40}?\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年)(?:[^\n。;;]{0,30})?)/u},{fieldId:"quality_standard",key:"质量标准",fieldName:"质量标准",pattern:/质量标准[::\s为是]+([^\n。;;]{1,60})/u},{fieldId:"project_investment_estimate",key:"合同估算价格",fieldName:"项目投资估算",pattern:/(?:合同估算价格|合同估算价|投资估算|估算价格|工程估算价|项目估算价|最高投标限价|招标控制价)[::\s为是约]+([^\n。;;]{0,80}?\d+(?:\.\d+)?\s*(?:万元|元))/u}];function bq(a,b){let c=bo((0,aG.lG)(b));return!(!a||!c||c.length>260||/###|投标文件的编制|备选投标方案|投标将被否决|投标人提供|投标有效期|电子交易系统|公共资源交易监督管理部门|中标候选|评标委员会|实质性内容作出响应/u.test(c)||/签章|盖章|联系人|联系电话|电话|邮箱|解密|开标|评标|保证金|交易系统|空白|填写|上传|下载|递交/u.test(c))&&("schedule_requirement"===a?c.length<=90&&/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年)/u.test(c):"quality_standard"===a?c.length<=40&&/合格|优良|一次性验收|国家.*验收|达到/u.test(c)&&!/工期|投标|技术标准/u.test(c):"owner"===a?c.length<=80&&!/将报|监督管理部门|投标人|中标/u.test(c):"project_location"===a?c.length<=120&&!/见招标公告|详见|投标/u.test(c):"project_code"===a?/^[A-Za-z0-9\-_.()()]+$/u.test(c):"project_investment_estimate"===a?c.length<=100&&/\d+(?:\.\d+)?\s*(?:万元|元)/u.test(c):c.length<=220)}function br(a){let b=[],c=new Set;for(let d of a)for(let a of bo(d.content).split(/\r?\n/u).flatMap(a=>{let b=a.replace(/\s+/gu," ").trim();return b.length>260?b.split(/(?=\d+(?:\.\d+)?\s*[^\s::]{2,12}[::])/u):[b]}).filter(Boolean))if(!/报价明细|综合单价|税率|增值税|利润|结算/u.test(a)||/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(a))for(let e of bp){let f=e.pattern.exec(a),g=f?.[1]?.trim();if(!g||!bq(e.fieldId,g))continue;let h=`${d.filePath}:${e.fieldId}:${g}`;c.has(h)||(c.add(h),b.push({key:e.key,fieldName:e.fieldName,fieldId:e.fieldId,value:g,sourceFile:d.filePath,roleId:d.roleId||"project_basic_fact",processingType:d.processingType||"reference",confidence:Math.max(.82,d.score||.82),sourceRef:{filePath:d.filePath,roleId:d.roleId||"project_basic_fact",processingType:d.processingType||"reference",sectionTitle:d.sectionTitle}}))}return b.slice(0,80)}function bs(a,b=m){let c=[],d=new Set;for(let e of a){let a=`${e.roleId||""} ${e.processingType||""} ${e.filePath} ${e.sectionTitle||""}`;if(!/drawing|table|bill|boq|draw|data|sheet|spec|standard|record|report|表格|数据|规格|参数|标准|记录|报告|清单|图纸|说明/u.test(a)&&e.score<.75)continue;let f=(0,aG.lG)(e.content).replace(/\s+/gu," ");for(let a of f.matchAll(bn)){let g=a[0].trim();if(!g||p(b,g))continue;let h=Math.max(0,(a.index||0)-40),i=Math.min(f.length,(a.index||0)+g.length+40),j=f.slice(h,i);if(q(b,j)||r(b,j))continue;let k=`${e.filePath}:${g}`;d.has(k)||(d.add(k),c.push({key:"精确参数",fieldName:"技术参数",fieldId:"technical_parameter",value:g,sourceFile:e.filePath,roleId:e.roleId||"precise_fact",processingType:e.processingType||"precise",confidence:Math.max(.7,e.score||.7),sourceRef:{filePath:e.filePath,roleId:e.roleId||"precise_fact",processingType:e.processingType||"precise",sectionTitle:e.sectionTitle}}))}}return c.slice(0,240)}function bt(a){return`${a.key} ${a.fieldName||""} ${a.value} ${a.roleId} ${a.processingType||""} ${a.sourceFile}`}function bu(a){return/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|项目估算价|最高投标限价|招标控制价/u.test(a)}function bv(a){let b=bt(a);return!bu(b)&&/投标保证金|发票类型|开标时间|公共资源交易监督管理|不良行为记录|投诉举报|资质投诉|投标承诺|违约金|中标服务费|交易平台|保证金账户|投标有效期|报价明细|投标报价|单价|合价|税率|增值税|利润|结算/u.test(b)}function bw(a){return(0,aG.lG)(a).replace(/\s+/gu," ").trim()}function bx(a,b=[]){return[...new Set([a,...b,...a.split(/[\s、,。;;::/\\_-]+/u)].map(bw).filter(a=>a.length>=2))]}function by(a,b,c){var d,e;let f=bw(c.label);if(!f||p(b,f)||q(b,f))return;let g=c.id||(d=c.source,e=c.fieldId,`${d}:${e||f}`.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-|-$/gu,"")||`${d}-${Math.random().toString(36).slice(2,8)}`),h=c.queries?.length?c.queries.map(bw).filter(Boolean):bx(f),i=a.find(a=>a.id===g||a.label===f);if(i){i.required=i.required||c.required,i.queries=[...new Set([...i.queries,...h])];return}a.push({...c,id:g,label:f,queries:h})}function bz(a,b,c,d,e,f=[]){"do_not_use"!==c.usagePolicy&&"diagnostic_only"!==c.usagePolicy&&"forbidden"!==c.derivationPolicy&&by(a,b,{label:c.name,category:c.category,required:e,source:d,fieldId:c.id,queries:bx(c.name,[...c.aliases,...f])})}function bA(a){let b=new Set;return a.filter(a=>{let c=`${a.sourceFile}:${a.key}:${a.value}`;return!b.has(c)&&(b.add(c),!0)})}function bB(a){let b=a.profile||m,c=bA([...a.factsModel.factIndex.parameterFacts,...a.factsModel.factIndex.tableFacts,...a.factsModel.factIndex.drawingFacts,...a.factsModel.factIndex.billFacts,...a.factsModel.factIndex.reliableFacts]);return a.needs.map(d=>{let e=bA(c.filter(a=>(function(a,b,c){let d=bt(a);if(bv(a)||p(c,d)||q(c,d))return!1;if(b.fieldId&&a.fieldId===b.fieldId||o(c,a.fieldName||a.key)?.id===b.fieldId||b.queries.filter(a=>a.length>=2).some(a=>d.includes(a)))return!0;let e=o(c,b.label);return!!(e&&[e.name,...e.aliases].some(a=>a.length>=2&&d.includes(a)))})(a,d,b))).sort((a,b)=>(b.confidence||0)-(a.confidence||0)),f=(a.evidence||[]).filter(a=>(function(a,b,c){let d=`${a.filePath} ${a.roleId||""} ${a.processingType||""} ${a.sectionTitle||""} ${a.content}`;return!(p(c,d)||q(c,d))&&b.queries.some(a=>a.length>=2&&d.includes(a))})(a,d,b)),g=Math.max(0,...e.map(a=>a.confidence||0)),h=0===e.length&&0===f.length?"missing":g>0&&g<.58?"low_confidence":"satisfied";return{need:d,facts:e,evidence:f,status:h}})}function bC(a){return(0,aG.lG)(a).replace(/\s+/gu," ").trim().slice(0,220)}function bD(a,b=[],c=[],d,e=m){let f=b=>a.filter(a=>b.some(b=>`${a.key} ${a.fieldName||""}`.includes(b))),g=b=>a.filter(a=>a.processingType===b||a.roleId.includes(b)),h=a.filter(a=>{let b=`${a.key} ${a.fieldName||""} ${a.value}`;return/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|ISO|IEC|IEEE|RFC|API|台|套|个|项|批|次|份|人|㎡/iu.test(b)&&(!p(e,b)||bu(b))&&!q(e,b)}),i=a.filter(a=>"table"===a.processingType||/bill|boq|table|sheet|data|表格|列表|明细|数据/u.test(`${a.roleId} ${a.sourceFile}`)),j=function(a,b,c,d){let e=a.filter(a=>q(d,bt(a))||r(d,bt(a))),f=a.filter(a=>{let b=bt(a);return a.confidence>=.58&&!bv(a)&&!p(d,b)&&!q(d,b)&&!r(d,b)}),g=[...b.filter(a=>!bv(a)),...f.filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|JGJ|ISO|IEC|台|套|个|项|批|次|份|人|㎡|型号|规格|数量|单位/iu.test(bt(a)))].filter((a,b,c)=>c.findIndex(b=>b.sourceFile===a.sourceFile&&b.value===a.value&&b.key===a.key)===b).slice(0,360),h=f.filter(a=>"table"===a.processingType||/table|sheet|表格|清单|明细|数据|参数行摘要/u.test(bt(a))),i=f.filter(a=>"drawing"===a.processingType||/drawing|draw|dwg|图纸|设计|尺寸|标高|管径|做法/u.test(bt(a)));return{reliableFacts:f.slice(0,500),parameterFacts:g,tableFacts:h.slice(0,240),drawingFacts:i.slice(0,240),billFacts:c.slice(0,240),diagnostics:e.slice(0,120)}}(a,h,i,e);return{project:a,schedule:f(["工期","开工","竣工","节点","周期"]),quality:f(["质量","验收"]),safety:f(["安全","风险"]),resources:f(["劳动力","材料","机械","设备","资源"]),tables:b,drawings:g("drawing"),bills:i,preciseFacts:h,rules:g("rule"),specifications:g("specification"),schemaFacts:function(a,b){let c={};for(let d of b?.factFields||[])c[d.id]=a.filter(a=>a.fieldId===d.id||a.key===d.name||a.fieldName===d.name);return c}(a,d),factIndex:j,missing:[...new Set(c)],conflicts:function(a,b,c=m){let d=(b?.factFields.map(a=>a.name)||[...new Set(a.map(a=>a.fieldName||a.key))]).filter(a=>(function(a,b){let c=o(b,a);return c?"single"===c.cardinality&&"ignore"!==c.conflictPolicy&&"allow_multiple"!==c.conflictPolicy:/项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数|工期|质量标准|合同价格形式|绿色建筑等级|投标有效期|质保期/u.test(a)})(a,c)),e=[];for(let b of d){let d=a.filter(a=>a.key===b||a.fieldName===b||o(c,a.fieldName||a.key)?.name===b),f=new Map;for(let a of d){let b=function(a,b){let c=(0,aG.lG)(a).trim();if(q(b,c)||p(b,c)||/签章|盖章|联系人|联系电话|电话|邮箱|解密|开标|评标|保证金|交易系统|空白|填写|上传|下载|递交/u.test(c)||/\|/u.test(c)||/^#+\s*/u.test(c)||/见(?:招标公告|投标人须知|前附表|本项目|补疑)|资料参数行摘要|公共资源交易监督管理|开评标程序|监管部门/u.test(c)||/是否|符合|采购范围|规定的投标截止时间|电子交易系统/u.test(c)&&/\d{3,}/u.test(c))return"";let d=c.match(/\d+\s*日历天/u)?.[0]?.replace(/\s+/gu,"");if(d&&/工期|日历天|开工日期|竣工/u.test(c))return d;let e=(0,aF.K3)((0,aG.lG)(c));return e&&!(e.length>80)&&/[\d年月日%]|合格|一星|二星|三星|总价合同|单价合同|承台|框架|装配式/u.test(c)?e:""}(a.value,c);b&&f.set(b,[...f.get(b)||[],a])}if(f.size>1){let a=[...f.values()].slice(0,4).map(a=>`${(0,aG.lG)(a[0].value).slice(0,120)}(${[...new Set(a.map(a=>a.sourceFile))].slice(0,3).join("、")})`).join(" vs ");e.push(`事实冲突:${b} 存在多个来源值:${a}`)}}return e.slice(0,8)}(a,d,e)}}let bE=[{key:"project_name",label:"项目名称",aliases:["项目名称","工程名称","招标项目名称"],valueType:"text"},{key:"project_code",label:"项目编号",aliases:["项目编号","招标项目编号","工程编号"],valueType:"identifier"},{key:"owner",label:"招标人",aliases:["招标人","项目业主","建设单位","发包人","采购人"],valueType:"organization"},{key:"project_location",label:"建设地点",aliases:["建设地点","实施地点","服务地点","交付地点"],valueType:"location"},{key:"project_scale",label:"建设规模",aliases:["建设规模","工程规模","项目规模"],valueType:"scale"},{key:"schedule_requirement",label:"计划工期",aliases:["计划工期","合同工期","总工期","工期","实施周期","服务期限"],valueType:"duration"},{key:"quality_standard",label:"质量标准",aliases:["质量标准","质量目标","验收标准","服务标准"],valueType:"standard"},{key:"project_investment_estimate",label:"合同估算价",aliases:["合同估算价","合同估算价格","投资估算","估算价格","最高投标限价","招标控制价","预算金额"],valueType:"money"}];function bF(a){return/^(见|详见|参见|按|以).{0,30}(招标公告|招标文件|投标人须知|前附表|合同|附件|图纸|清单|约定|规定|执行)/u.test(a)||/见招标公告|见投标人须知前附表|详见|按.*执行/u.test(a)}function bG(a,b){let c=bo(a.value),d=[],e=30,f=!1;(!c||c.length>260)&&(f=!0,e-=100,d.push("空值或过长")),/###|投标文件的编制|备选投标方案|投标将被否决|投标人提供|投标有效期|电子交易系统|公共资源交易监督管理部门|中标候选|评标委员会|实质性内容作出响应|招标人有权核查/u.test(c)&&(f=!0,e-=100,d.push("大段条款或 Markdown 噪声")),bE.some(a=>a.key!==b.key&&a.aliases.some(a=>c.includes(a)))&&(e-=45,d.push("包含其他字段名,疑似字段串位")),bF(c)&&(e-=35,d.push("引用型弱值"));let g=function(a,b){switch(b.valueType){case"duration":if(!/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年)/u.test(a))return{rejected:!0,score:-80,reason:"缺少明确工期数值和时间单位"};return{rejected:!1,score:45,reason:"包含明确工期数值和时间单位"};case"money":if(!/\d+(?:\.\d+)?\s*(?:万元|元|亿元)/u.test(a))return{rejected:!0,score:-80,reason:"缺少明确金额数值和单位"};if(/综合单价|税率|增值税|利润|报价明细/u.test(a))return{rejected:!0,score:-90,reason:"命中非目标商务明细"};return{rejected:!1,score:45,reason:"包含明确金额数值和单位"};case"standard":if(!/合格|优良|一次性验收|达到|满足|符合/u.test(a))return{rejected:!0,score:-70,reason:"不符合标准类字段表达"};if(/工期|投标|技术标准|有效期/u.test(a))return{rejected:!0,score:-90,reason:"标准字段包含其他字段或投标条款"};return{rejected:!1,score:40,reason:"符合标准类字段表达"};case"location":if(bF(a))return{rejected:!1,score:-40,reason:"引用型地点弱值"};if(!/(省|市|区|县|镇|街道|路|园区|大道|巷|内|号)/u.test(a))return{rejected:!1,score:-10,reason:"地点具体性不足"};return{rejected:!1,score:35,reason:"包含具体地址特征"};case"organization":if(/监督管理部门|投标人|中标候选人|评标委员会/u.test(a))return{rejected:!0,score:-90,reason:"组织字段角色串位"};if(/(公司|集团|单位|委员会|机关|中心|局|院|所|政府|运营管理)/u.test(a))return{rejected:!1,score:35,reason:"包含组织名称特征"};return{rejected:!1,score:5,reason:"组织名称特征较弱"};case"identifier":if(!/^[A-Za-z0-9\-_.()()]+$/u.test(a))return{rejected:!0,score:-70,reason:"编号格式不合法"};return{rejected:!1,score:35,reason:"符合编号格式"};case"scale":if(/\d+(?:\.\d+)?\s*(?:㎡|平方米|m²|米|m|层|栋|座|万元|元)/iu.test(a))return{rejected:!1,score:30,reason:"包含规模数值或单位"};return{rejected:!1,score:5,reason:"规模字段为文本描述"};default:return{rejected:!1,score:a.length>=2?10:-20,reason:"文本字段"}}}(c,b);return e+=g.score,d.push(g.reason),g.rejected&&(f=!0),"evidence"===a.sourceType&&(e+=20,d.push("来源为证据原文")),a.sourceName&&/招标文件|招标公告|前附表|合同|需求书|正文/u.test(a.sourceName)&&(e+=15,d.push("来源文件可信")),"generated_markdown"===a.sourceType&&(e-=10),{...a,value:c,confidence:e,rejected:f,reasons:d}}function bH(a){return function(a,b=bE){let c=new Map;for(let d of b){let b=a.filter(a=>a.fieldKey===d.key).sort((a,b)=>b.confidence-a.confidence),e=b.find(a=>!a.rejected&&a.confidence>0);e&&c.set(d.key,{fieldKey:d.key,label:d.label,value:e.value,source:e.sourceName||e.sourceType,confidence:e.confidence,candidates:b,selectedReason:e.reasons.join(";")})}return c}([...function(a){let b=[];for(let c of a){let a=function(a){let b=`${a.fieldId||""}${a.key||""}${a.fieldName||""}`;return bE.find(c=>c.key===a.fieldId||c.aliases.some(a=>b.includes(a)))}(c);if(!a)continue;let d=(0,aG.lG)(c.value);b.push(bG({fieldKey:a.key,label:a.label,value:d,sourceType:"structured_fact",sourceName:c.sourceFile||c.sourceRef?.sectionTitle||"structured_fact"},a))}return b}(a.facts),...function(a,b="generated_markdown"){let c=[];for(let d of a.split(/\r?\n/u)){if(!/^\|.*\|\s*$/u.test(d)||/^\|\s*:?-{3,}:?/u.test(d))continue;let a=d.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.replace(/\*\*/gu,"").trim());if(a.length<2)continue;let e="序号"===a[0]&&a.length>=3?a[1]:a[0],f="序号"===a[0]&&a.length>=3?a[2]:a[1],g="序号"===a[0]&&a.length>=4?a[3]:a[2],h=bE.find(a=>a.aliases.some(a=>e.includes(a))||a.label===e);!h||!f||/内容|参数|资料未明确|系统暂未确认|暂未从知识库确认/u.test(f)||c.push(bG({fieldKey:h.key,label:h.label,value:f,sourceType:"generated_markdown",sourceName:g||b},h))}return c}(a.markdown||"")])}function bI(a){return a?({"knowledge-base":"知识库","document-readiness":"生成准备度检查","quality-repair":"质量补写","export-gate":"导出门禁","final-format":"正式排版","multimodal-files":"多模态文件理解","llm-json":"LLM 事实抽取","llm-review":"LLM 审查","document-workflow":"最终规范校验"})[a]:void 0}function bJ(a,b={}){let c={executionVersion:2,title:{role_binding:"项目角色配置绑定",knowledge_retrieval:"知识库证据检索",file_understanding:"文件角色读取",fact_extraction:"事实抽取",chapter_generation:"章节正文生成",asset_generation:"生成资源处理",llm_review:"LLM 审查优化",validation:"内容优化与质量校验",formatting:"正式排版整理",export_ready:"导出就绪检查",reference:"资料增强"}[a.type],group:a.type,...a,...b};return{...c,roleName:c.roleName||bI(c.roleId),subtitle:c.subtitle||c.roleName||bI(c.roleId)}}function bK(a,b){let c=a.findIndex(a=>a.type===b.type&&a.roleId===b.roleId&&a.promptId===b.promptId);return c>=0?(a[c]={...b,order:a[c]?.order??b.order},c):(a.push(b),a.length-1)}function bL(a,b){return`${a},耗时 ${Math.round((Date.now()-b)/1e3)} 秒`}var bM=c(74329);async function bN(a,b,c,d){let e=Date.now();try{return await c()}finally{let c=Date.now();a.metrics.push({name:b,startedAt:e,endedAt:c,durationMs:c-e,meta:d})}}function bO(a){return a.toLowerCase()}function bP(a,b){return e.relative(a,e.isAbsolute(b)?b:e.join(a,b))}function bQ(a){let b=[];for(let c of a)bM.ee.lastIndex=0,bM.ee.test(c)&&b.push(c);return b}function bR(a){return!!a&&(null!=a.chapters&&!Array.isArray(a.chapters)||null!=a.facts&&!Array.isArray(a.facts))}async function bS(a,b,c,e){let f=b.promptTexts.join("\n\n")||"请读取绑定文件角色,抽取可用于文档生成的结构化信息。",g=P({chapterId:b.id,textEvidence:c,resources:[],byKind:{map:[],image:[],table:[],document:[],spreadsheet:[],text:[],attachment:[]},summary:""},{maxChars:M(1800,8e3,14e3)}),h=`你正在执行一个“文件角色 \xd7 提示词角色”的读取节点。
76
76
  节点类型:${b.outputType}
77
77
  文件角色:${b.fileRoleName}(${b.fileRoleId})
78
78
  要求:严格按该节点绑定的提示词读取该文件角色的内容,不要读取其他角色。提示词角色只提供规则和格式约束,其中的示例、样例、占位项目名、编号、日期、数量和示例正文不得作为事实抽取来源。
@@ -172,7 +172,7 @@ ${j}${k?`
172
172
  ${k}`:""}
173
173
 
174
174
  `;return da(c8(c9(`${a.slice(0,d)}${l}${a.slice(h).trimStart()}`)))}function dc(a,b){return 0!==c_(b).length&&/资料未明确|系统暂未从知识库确认/u.test(a)?["计划工期","合同工期","质量标准","合同估算价","合同估算价格","建设地点","建设规模"].filter(b=>RegExp(`${b}[^
175
- |。;;]{0,40}(?:资料未明确|系统暂未从知识库确认)`,"u").test(a)).map(a=>({level:"error",message:`${a} 已抽取到知识库事实但正文仍显示系统暂未确认`,suggestion:"请优先使用项目基础事实卡片中的知识库原值,不得用占位表达覆盖已确认事实。"})):[]}function dd(a){return a.replace(/【修复任务包】[\s\S]*?(?=\n#{1,3}\s|\n\*\*|\n\|\s|$)/gu,"").replace(/^修复类型:.*$/gmu,"").replace(/^修复对象:.*$/gmu,"").replace(/^问题:【修复任务包】[\s\S]*?(?=\n#{1,3}\s|\n\*\*|\n\|\s|$)/gu,"").replace(/^输出要求:.*$/gmu,"").replace(/重新生成/gu,"补充完善").replace(/见招标公告|见投标人须知前附表/gu,"以本项目招标文件明确内容为准").replace(/见招标文件/gu,"按本项目招标文件已明确的相应条款执行").replace(/招标范围:/gu,"施工范围:").replace(/主要承包人案|承包人案/gu,a=>a.replace(/承包人案/gu,"施工方案")).replace(/施工方(?=应|需|须|负责|组织|承担|配合|落实|执行|单位|人员|项目部|管理|进场|退场|完成|开展|实施|提供|确保|做好|建立|编制|报审|验收)/gu,"承包人").replace(/由施工方/gu,"由承包人").replace(/按图纸/gu,"依据经确认的设计文件和图纸内容组织实施").replace(/按设计要求/gu,"依据设计文件明确的构造、材料、尺寸和验收要求执行").replace(/按(?:资料|文件|说明|方案|规范|标准|要求)/gu,"依据本项目已确认资料、技术文件和验收标准").replace(/满足(?:相关|有关)?要求/gu,"满足本项目已明确的质量、安全、技术和验收控制要求").replace(/兜底生成|兜底片段|兜底/gu,"补充完善").replace(/本节(?:将|主要|重点)?/gu,"").replace(/本章将/gu,"").replace(/根据需要|视情况|结合实际情况/gu,"结合已确认资料、现场条件和审批后的施工组织安排").replace(/相关要求/gu,"本项目已明确的质量、安全、技术和验收要求")}function de(a){let b=`${a.message}
175
+ |。;;]{0,40}(?:资料未明确|系统暂未从知识库确认)`,"u").test(a)).map(a=>({level:"error",message:`${a} 已抽取到知识库事实但正文仍显示系统暂未确认`,suggestion:"请优先使用项目基础事实卡片中的知识库原值,不得用占位表达覆盖已确认事实。"})):[]}function dd(a){return a.replace(/【修复任务包】[\s\S]*?(?=\n#{1,3}\s|\n\*\*|\n\|\s|$)/gu,"").replace(/^修复类型:.*$/gmu,"").replace(/^修复对象:.*$/gmu,"").replace(/^问题:【修复任务包】[\s\S]*?(?=\n#{1,3}\s|\n\*\*|\n\|\s|$)/gu,"").replace(/^输出要求:.*$/gmu,"").replace(/重新生成/gu,"补充完善").replace(/见招标公告|见投标人须知前附表/gu,"以本项目招标文件明确内容为准").replace(/见招标文件/gu,"按本项目招标文件已明确的相应条款执行").replace(/招标范围:/gu,"施工范围:").replace(/主要承包人案|承包人案/gu,a=>a.replace(/承包人案/gu,"施工方案")).replace(/施工方/gu,"承包人").replace(/由承包人/gu,"由承包人").replace(/按图纸/gu,"依据经确认的设计文件和图纸内容组织实施").replace(/按设计要求/gu,"依据设计文件明确的构造、材料、尺寸和验收要求执行").replace(/按(?:资料|文件|说明|方案|规范|标准|要求)/gu,"依据本项目已确认资料、技术文件和验收标准").replace(/满足(?:相关|有关)?要求/gu,"满足本项目已明确的质量、安全、技术和验收控制要求").replace(/兜底生成|兜底片段|兜底/gu,"补充完善").replace(/本节(?:将|主要|重点)?/gu,"").replace(/本章将/gu,"").replace(/根据需要|视情况|结合实际情况/gu,"结合已确认资料、现场条件和审批后的施工组织安排").replace(/相关要求/gu,"本项目已明确的质量、安全、技术和验收要求")}function de(a){let b=`${a.message}
176
176
  ${a.suggestion||""}`;return/资料抽取诊断|结构化事实读取不足|结构化章节读取不足|已补充使用证据片段兜底|已补充使用证据标题兜底|CAD图纸附件|DWG附件|PDF格式附件|DOCX格式附件|XLSX格式附件|无实质性文本内容|仅作为内部事实提取依据|正式正文不得引用文件名|附件片段|占位说明|已自动过滤/u.test(b)}function df(a){if(de(a)||/目录与正文不一致|缺少规划小节|正文缺少规划小节|规划小节正文过短|小节事实密度需优化|知识库事实或量化参数落位|生成后事实反查失败/u.test(a.message))return!1;let b=`${a.message}
177
177
  ${a.suggestion||""}`;return(!/CAD|DWG|Excel|文件名占位|占位符|片段\d|图纸解析节点|仅作为内部事实提取依据|后台|检索|知识库|资料未提供|未检索到|文件格式|附件/u.test(b)||!!/空小节|小节只有标题|只有标题或表格无正文|正文篇幅低于目标字数|正文长度低于提示词要求|占位内容/u.test(a.message))&&("error"===a.level||/提示词要求|正式表格|表格存在|资料页码|列表项粘连|非正式章二级标题|同名的小节|禁止内容|后台|占位|空小节|封面/u.test(a.message))}function dg(a,b){return ad(_(Y(function(a,b){let c=b.map(a=>/正式表格不足:(\d+)\/(\d+)/u.exec(a.message)).find(Boolean);if(!c)return a;let d=Number(c[1]||0),e=Math.max(0,Number(c[2]||0)-d);if(0===e)return a;let f=[{title:"质量控制责任表",header:["控制环节","控制要求","责任岗位"],rows:[["材料进场","核对合格证明、规格型号和验收记录","材料员、质量员"],["工序验收","按施工方案、图纸和验收标准完成自检复核","施工员、质量员"]]},{title:"安全文明检查表",header:["检查项目","控制措施","检查频次"],rows:[["临时用电","执行三级配电、二级保护和巡检记录","每日检查"],["现场防护","洞口临边、通道和作业面防护同步验收","每日检查"]]},{title:"进度资源协调表",header:["协调事项","控制重点","闭环要求"],rows:[["材料供应","结合施工段计划组织进场验收","形成进场验收记录"],["劳动力组织","按关键工序配置作业人员和管理人员","动态纠偏并记录"]]}].slice(0,e).map(a=>[`**${a.title}**`,"",`| ${a.header.join(" | ")} |`,`| ${a.header.map(()=>"---").join(" | ")} |`,...a.rows.map(a=>`| ${a.join(" | ")} |`)].join("\n")).join("\n\n");return`${a.trim()}
178
178
 
@@ -196,7 +196,21 @@ ${e.join("\n")}`:"",h.length?`项目基础事实卡片(资料已明确,项
196
196
  ${h.map(a=>`- ${a.key||a.fieldName}:${G((0,aG.lG)(a.value)).slice(0,220)}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`).join("\n")}
197
197
  项目基本信息表必须使用固定表头:| 信息项 | 内容 |,不得使用“序号|项目名称|内容参数”表头,不得输出后台溯源列。`:"",a.factNeedsPrompt||"",g.length?`全局资料事实索引匹配到的本章可写事实:
198
198
  ${g.join("\n")}`:"",i.length?`本章资料中可直接使用的可靠精确参数/编号:${i.join("、")}。这些参数来自绑定资料,不属于编造;涉及对应对象、部位、工序、材料、设备、项目概况、质量验收或安全控制时必须自然写入正文,并保持原样或等价专业表达。项目基础事实中的合同估算价、计划工期可用于项目概况;不得写入报价明细、单价、税率、预留金。`:"",k.length?`当前事实需求仍未充分确认:${k.join("、")}。未确认项不得编造;但已满足事实需求中的资料事实必须写入对应小节。`:"",a.missingFacts.length?`模板显式要求中当前检索未充分命中的项:${a.missingFacts.join("、")}。未命中项不得编造,但不得因此省略上方已经明确的可靠参数。`:"",`本章可用材料来源约 ${j} 个文件,正文必须按事实需求把可用事实内化到对应小节,不得单列后台资料清单。`].filter(Boolean).join("\n")}({chapter:c,plan:d,spec:Y,roleFacts:x,evidence:P,missingFacts:R,indexedFacts:[...al,...ak],resolvedFactNeeds:ab,factNeedsPrompt:function(a){let b=a.map(a=>{let b=a.facts.slice(0,5).map(b=>`${b.key||b.fieldName||a.need.label}=${bC(b.value)}${b.sourceFile?`(${e.basename(b.sourceFile)})`:""}`),c=a.facts.length?[]:(a.evidence||[]).slice(0,2).map(a=>`证据片段:${bC(a.content).slice(0,160)}${a.filePath?`(${e.basename(a.filePath)})`:""}`);return`- ${a.need.required?"必须":"相关"}|${a.need.label}|${a.status}${b.length||c.length?`:${[...b,...c].join(";")}`:":未在已解析资料中确认"}`});return b.length?`事实需求覆盖卡片:
199
- ${b.join("\n")}`:""}(ab)}),ao={total:ab.length,satisfied:ab.filter(a=>"satisfied"===a.status).length,missing:ab.filter(a=>"missing"===a.status).length,lowConfidence:ab.filter(a=>"low_confidence"===a.status).length};for(let a of ac)aA.push(`${c.title}:事实需求未确认 ${a}`);let as=Y?.chapterRules.find(a=>a.id===c.id||a.title===c.title),ay=bE.chapterTargets.get(c.id)||1200,az=Math.max(3500,Number(process.env.DOCUMENT_LONGFORM_INITIAL_CHAPTER_CAP||8e3)),aB=bE.longformStrict?Math.min(ay,az):ay,aC=Math.ceil(aB*(bE.maxChars?1.1:1.18)),aF=bE.targetChars?Math.min(1800,Math.max(600,Math.floor(.5*aB))):1200,aH=Math.max(Math.min(d?.minWords||0,aB),Math.min(as?.minWords||0,aB),Math.min(Y?.dynamicChapterRule.minWordsPerChapter||0,aB),Math.floor(.78*aB),aF),aJ=cK(aH,aB),aK=Math.min(aB,6e3),aL=Math.max(900,Math.min(aB,Math.ceil(.55*aB),aK)),aM=Math.max(450,Math.min(aH,Math.floor(.72*aL))),aN=Math.max(aL+300,Math.min(aC,Math.ceil(1.25*aL))),aO=cK(aM,aL),aP=Math.min(cL(aL),18e4),aQ=Math.max(900,Math.min(aL,3600)),aT=Math.max(450,Math.min(aM,Math.floor(.72*aQ))),aU=Math.max(aQ+300,Math.min(aC,Math.ceil(1.2*aQ))),aV=cK(aT,aQ),aX=Math.min(cL(aQ),15e4),a$=c.sections?.filter(Boolean).length||0,a0=/[、,,;;]/u.test(c.title),a2=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),a3=0!==Number(process.env.DOCUMENT_SECTION_FIRST_GENERATION??0)&&a$>=2&&a$<=a2&&(bE.longformStrict||!a0);N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:a3?`${(0,Q.GQ)(c.title)} 正在按小节并发成稿`:`${(0,Q.GQ)(c.title)} 正在整章一次成稿`,details:a3?[...$,`有效证据:${P.length} 条`,`事实需求:${ao.satisfied}/${ao.total} 已满足,缺失 ${ao.missing},低置信 ${ao.lowConfidence}`,`首轮质量目标:约 ${aB} 字${ay!==aB?`,总预算分配约 ${ay} 字`:""},上限约 ${aC} 字`,`规划小节:${c.sections?.length||0} 个`,"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...$,`有效证据:${P.length} 条`,`事实需求:${ao.satisfied}/${ao.total} 已满足,缺失 ${ao.missing},低置信 ${ao.lowConfidence}`,`目标字数:约 ${aB} 字,上限约 ${aC} 字`,`规划小节:${a$} 个${a$>a2?",超过小节并发上限,改用整章稳定成稿":""}`,"首次生成必须覆盖章节结构、小节、事实和目标篇幅,后置修复仅兜底"],progress:{current:h+1,total:bh.length,label:a3?"小节并发":"整章成稿"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F();let a4=a3?Math.min(cL(aB)+3e4,33e4):Math.min(cL(aB),18e4),a6=a3?await I(()=>bN(bG,`chapter-section-draft:${c.id}`,()=>bi(b=>cJ({template:z,chapter:c,evidence:P,missingFacts:R,promptTexts:X,projectContext:bn,requirement:a.requirement,roleContext:V,targetWords:aB,maxWords:aC,forbidDrawingImages:U,factCoverageContext:am,projectRoot:v,modelName:a_,fileRolesHash:a5,allowPartialResult:!1,sectionEvidenceProvider:a=>du({manager:A,projectRoot:v,chapter:c,sectionTitle:a,scopedFilePaths:t,fileRoleByPath:ap,fileProcessingByPath:aq,signal:b}),diagnostics:bG,signal:b}),a4,a.signal))):await I(()=>bN(bG,`chapter-draft:${c.id}`,()=>bi(b=>cf(z,c,P,R,X,bn,a.requirement,V,{forbidDrawingImages:U,minWords:aH,targetWords:aB,maxWords:aC,maxTokens:aJ,factCoverageContext:am,signal:b}),cL(aB),a.signal)));if(!a6&&a3)throw N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"failed",message:`${(0,Q.GQ)(c.title)} 小节并发未在限定时间内返回,已跳过整章重试并标记为章节阻断`,details:["小节优先模式不再执行整章重试,避免单章长时间空等;请优先重试失败小节或降低目标篇幅。"],progress:{current:h+1,total:bh.length,label:"小节超时"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),Error(`${c.title} 小节并发超时,已跳过整章重试`);if(a6||(N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 整章成稿未完整返回,正在执行整章重试生成`,details:[`目标字数:约 ${aB} 字`,`有效证据:${P.length} 条`],progress:{current:h+1,total:bh.length,label:"整章重试"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),a6=await I(()=>bN(bG,`chapter-draft-fallback:${c.id}`,()=>bi(b=>cf(z,c,P,R,X,bn,a.requirement,V,{forbidDrawingImages:U,minWords:aM,targetWords:aL,maxWords:aN,maxTokens:aO,factCoverageContext:am,signal:b}),aP,a.signal)))),(0,aG.Te)(a.signal),a6||(N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 正在压缩上下文后重试生成`,details:["已压缩证据与上下文后重新请求模型生成",`目标字数:约 ${aB} 字`],progress:{current:h+1,total:bh.length,label:"紧凑重试"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),a6=await I(()=>bN(bG,`chapter-draft-compact-fallback:${c.id}`,()=>bi(b=>cf(z,c,P,R,X,bn,a.requirement,V,{forbidDrawingImages:U,minWords:aT,targetWords:aQ,maxWords:aU,maxTokens:aV,factCoverageContext:am,signal:b}),aX,a.signal)))),(0,aG.Te)(a.signal),!a6)throw Error(`${c.title} 大模型未返回有效章节正文`);let a7=a6,ba=aj(a7),bb=ba.length>=Math.min(3,c.sections?.length||3)?{...c,sections:ba}:c,bd=c$(a7,bb),bg=0,bj=bd.map(a=>`${a.sectionTitle}:${a.reason}:${a.bodyLength}`).join("|");for(;bd.length>0;){bg+=1,N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 存在 ${bd.length} 个小节缺口,正在按目标缺口强制补写`,details:bd.map(a=>a.message),progress:{current:h+1,total:bh.length,label:`小节补写第 ${bg} 轮`}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C);let b=a7,d=await I(()=>bN(bG,`chapter-section-repair:${c.id}:${bg}`,()=>cQ({template:z,chapter:c,content:b,evidence:P,missingFacts:R,promptTexts:X,projectContext:bn,requirement:a.requirement,roleContext:V,targetWords:aB,maxWords:aC,forbidDrawingImages:U,factCoverageContext:am,forcedSections:bd,signal:a.signal})));d?.trim()&&(a7=d);let e=(bd=c$(a7,bb)).map(a=>`${a.sectionTitle}:${a.reason}:${a.bodyLength}`).join("|"),f=e!==bj;if(0===bd.length||!f)break;bj=e}bd.length>0&&(N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"failed",message:`${(0,Q.GQ)(c.title)} 小节补齐仍未完全达标,已标记为阻断问题`,details:bd.map(a=>a.message),progress:{current:h+1,total:bh.length,label:"小节未达标"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C));let bk=bY({chapter:c,content:a7,missingFacts:R,targetWords:aB}),bl=(0,aE.Ff)(bk);bG.quality.blockingCount+=bl.blocking,bG.quality.importantCount+=bl.important,bG.quality.minorCount+=bl.minor;let bm=bQ(bk);if(bm.length>0){let b=a7;N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 正在根据质量问题修复章节:${bm.length} 个阻断问题`,details:bm,progress:{current:h+1,total:bh.length,label:"章节修复"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C);let d=await I(()=>bN(bG,`chapter-repair:${c.id}`,()=>bZ({template:z,chapter:{id:c.id,title:c.title,content:b,evidence:P,missingFacts:[...R,...ac.map(a=>`事实需求未确认:${a}`)],sections:c.sections||[]},issues:bm,promptTexts:X,requirement:a.requirement,forbidDrawingImages:U,diagnostics:bG,signal:a.signal})));a7=d.content,d.appliedCount>0&&(bG.quality.repairedCount+=1),(0,aG.Te)(a.signal)}if(!a7.trim())throw Error(`${(0,Q.GQ)(c.title)} 首次生成失败,未获得可用于定稿的正文`);let bo=a7,bp=0;if((0,aD.V7)(bo)<Math.floor(.82*aB)||bQ(bY({chapter:c,content:bo,missingFacts:R,targetWords:aB})).length>0){N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 首次成稿未达定稿门槛,正在定向扩写`,details:[`当前 ${(0,aD.V7)(bo)} 字 / 目标 ${Math.floor(.95*aB)} 字`,`章节并发:${b5}`],progress:{current:h+1,total:bh.length,label:"章节扩写"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C);let b=await I(()=>bN(bG,`chapter-expand:${c.id}`,()=>cR({template:z,chapter:c,content:a7,evidence:P,promptTexts:X,requirement:a.requirement,roleContext:V,targetChars:Math.floor(.95*aB),maxChars:aC,forbidDrawingImages:U,maxTokens:Math.min(aJ,aO),signal:a.signal})));bo=b.content,bp=b.rounds}bo=dh(bo,c);let bq=aj(bo),br=(0,aE.yw)(bo,[{title:c.title,content:bo,sections:bq}]).filter(a=>"empty"===a.reason||"table_only"===a.reason);!function(a,b){try{let c=["chapter-generation-failure.env","document-generation-timeout.env"].map(b=>e.join(a,".dbg",b)).find(a=>f.existsSync(a));if(!c)return;let d=Object.fromEntries(f.readFileSync(c,"utf8").split(/\r?\n/u).map(a=>a.split("=")).filter(a=>a.length>=2).map(([a,...b])=>[a,b.join("=")])),g=d.DEBUG_SERVER_URL;if(!g)return;fetch(g,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({sessionId:d.DEBUG_SESSION_ID||"chapter-generation-failure",runId:"pre",ts:Date.now(),...b})}).catch(()=>void 0)}catch{}}(v,{event:"section-repair-check",hypothesisId:"H1",chapterId:c.id,chapterTitle:c.title,gapCount:br.length,gaps:br.slice(0,10).map(a=>({title:a.sectionTitle,reason:a.reason,message:a.message})),contentChars:(0,aD.V7)(bo),targetWords:aB}),br.length>0&&(N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 正在小节级定向补写 ${br.length} 个未达标小节`,details:br.slice(0,8).map(a=>a.message),progress:{current:h+1,total:bh.length,label:"小节补写"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),bo=await I(()=>bN(bG,`section-repair:${c.id}`,()=>cQ({template:z,chapter:c,content:bo,evidence:P,missingFacts:R,promptTexts:X,projectContext:bn,requirement:a.requirement,roleContext:V,targetWords:Math.max(1200,Math.floor(.35*aB)),maxWords:Math.min(aC,Math.max(2400,Math.floor(.55*aB))),forbidDrawingImages:U,factCoverageContext:am,forcedSections:br,signal:a.signal}))),bo=dh(bo,c),bq=aj(bo),br=(0,aE.yw)(bo,[{title:c.title,content:bo,sections:bq}]).filter(a=>"empty"===a.reason||"table_only"===a.reason),0===br.length&&(bG.quality.repairedCount+=1));let bs=cG({chapter:c,content:bo,evidence:P}),bt=(0,aD.V7)(bo),bu=aj(bo),bv=bu.length>0?bu:c.sections||[],bD=(0,aE.qK)(bo,[{title:c.title,content:bo,sections:bv}]).map(a=>a.message),bF=bs.slice(0,6).map(a=>`小节事实密度需优化:${a}`),bH=[...bY({chapter:{...c,sections:bv},content:bo,missingFacts:R,targetWords:aB}),...bD,...bF],bI=function(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))?"failed":c.length>0?"fallback":"success"}(bt,0,bH);g=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:bI,message:bL(`${(0,Q.GQ)(c.title)} 已由大模型首轮成稿${bp>0?`并定向扩写 ${bp} 轮`:""}:当前 ${bt} 字 / 目标 ${Math.floor(.95*aB)} 字${"success"!==bI?`;风险:${bH.join("、")||"篇幅未达标"}`:""}`,i),details:[`达标率:${Math.round(bt/Math.max(1,Math.floor(.95*aB))*100)}%`,...$,`二级小节:${bv.length} 个`,`扩写轮次:${bp}`],progress:{current:h+1,total:bh.length,label:"success"===bI?"章节达标":"章节风险"}},{subtitle:(0,Q.GQ)(c.title),order:h}),aR[h]=g;let bM={id:c.id,title:c.title,content:bo,evidence:P,missingFacts:R,sections:bv};aI[h]=bM,C=aI.filter(a=>!!a),F(C);let bO=bY({chapter:c,content:bo,missingFacts:R,targetWords:aB}),bP=(0,aE.Ff)(bO);bG.quality.blockingCount+=bP.blocking,bG.quality.importantCount+=bP.important,bG.quality.minorCount+=bP.minor}catch(b){if(a.signal?.aborted)throw b;console.error(`[gen] chapter ${c.title} failed:`,b),aF.push(`${c.title}:${b instanceof Error?b.message:"生成失败"}`),aR[h]=bJ({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,Q.GQ)(c.title)} 生成失败`},{subtitle:(0,Q.GQ)(c.title),order:h})}g&&(N[j]=g),F(C)}))}C=aI.filter(a=>!!a),aH.push(...aR.filter(a=>!!a));let b6=C.flatMap(a=>a.evidence||[]);if(b6.length>0){av.push(...b6);let a=J(av,{maxChars:Math.max(5e4,9e3*bh.length),preservePinned:!0});av.splice(0,av.length,...a)}if(0===C.length)throw Error(`章节生成未完成:${aF.join(";")||"没有生成任何有效章节"}`);if(U&&C.length<bh.length)throw Error(`OUTLINE 指定 ${bh.length} 章,实际只生成 ${C.length} 章:${aF.join(";")||"部分章节未生成"}`);(0,aG.Te)(a.signal),bK(N,bJ({type:"file_understanding",roleId:"multimodal-files",status:"running",message:"正在理解多模态参考文件"},{subtitle:"多模态参考文件"})),F(C);let b7={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{b7=await ce(v,av,a.signal)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fileUnderstanding failed:",b)}for(let b of(bK(N,b7.stage),F(C),(0,aG.Te)(a.signal),b7.notes))av.push({chapterId:"multimodal-file-understanding",filePath:"多模态模型文件理解结果",score:1,content:b,roleId:"multimodal-files",processingType:"reference",source:"multimodal"});let b8=J(av,{maxItems:Math.max(48,10*bh.length),maxChars:Math.max(52e3,9e3*bh.length),preservePinned:!0});av.splice(0,av.length,...b8);let b9=function(a,b,c){let d={};for(let e of(0,E.Uy)(a,c)){let a=b.find(a=>(0,E.I2)(a,e));a&&(d[e.name]=`${a.content.replace(/\s+/gu," ")}(来源:${a.filePath},角色:${a.roleId||"未标注"})`)}return d}(z,av,Y);for(let a of aZ)for(let b of a.facts)b9[b.key]=`${(0,aG.lG)(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let ca=bl(av,z,Y),cb=br(av),cc=bs(av,Z),cd=aZ.flatMap(a=>a.facts.map(a=>({key:a.key,value:(0,aG.lG)(a.value),sourceFile:a.sourceFile,roleId:a.roleId,confidence:.9}))),cg={facts:[],stages:[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"已有本地/角色事实覆盖主要必需字段,跳过 LLM 全量事实抽取"}]};if(function(a,b,c){let d=(0,E.Uy)(b,c).filter(a=>a.required);return 0===d.length?a.filter(a=>a.confidence>=.75&&(0,aG.lG)(a.value).trim().length>=2).length<12:d.filter(b=>a.some(a=>(function(a,b){let c=(0,aG.lG)(a.value).trim();if(!c||c.length<2||c.length>220&&a.confidence<.8)return!1;let d=`${a.fieldId||""} ${a.fieldName||""} ${a.key}`.toLowerCase();return!!(d.includes(b.id.toLowerCase())||d.includes(b.name.toLowerCase()))&&("project_basic_fact"===a.roleId||a.roleId?.startsWith("role-")||a.sourceRef?.filePath?a.confidence>=.55:a.confidence>=.75)})(a,b))).length/d.length<.9}([...cd,...ca,...cb,...cc],z,Y)){let b=J(av,{maxItems:48,maxChars:45e3,preservePinned:!0});try{cg=await bm(b,ak,z,Y,a.signal)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fact extraction failed:",b)}}(0,aG.Te)(a.signal);let ch=function(a,b){let c=b.find(a=>a.filePath)?.filePath||"";return c?a.map(a=>a.sourceFile?a:{...a,sourceFile:c,sourceRef:{filePath:c,roleId:a.sourceRef?.roleId||a.roleId,processingType:a.sourceRef?.processingType||a.processingType,sectionTitle:a.sourceRef?.sectionTitle,chunkIndex:a.sourceRef?.chunkIndex,cellRange:a.sourceRef?.cellRange}}):a}([...cd,...ca,...cb,...cc,...cg.facts],av);for(let a of(bK(N,b7.stage),cg.stages))bK(N,a);F();let ci=bk(av),cj=av.filter(a=>"pinned-evidence"===a.source).length,cl=av.filter(a=>"pinned-evidence"!==a.source&&"bound-file"!==a.source).length,cv=bJ({type:"reference",roleId:"quality-enhancement",status:av.length>0?"success":"skipped",message:`增强贡献:知识库证据 ${av.length} 条,人工确认/固定证据 ${cj} 条,自动检索证据 ${cl} 条`},{subtitle:"证据与上下文增强"});for(let a of(N.push(cv),F(),ch))b9[a.key]=`${(0,aG.lG)(a.value)}(来源:${a.sourceFile},角色:${a.roleId})`;let cw=new Map;for(let a of av)cw.set(a.filePath,(cw.get(a.filePath)??0)+1);let cx=new Map;for(let a of av)cx.set(a.source||"unknown",(cx.get(a.source||"unknown")??0)+1);let cy=[...cw.entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),cz=bD(ch,ci,aA,Y,Z),cA=C.map(a=>{let b=Y.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=(b?.requiredFactIds||[]).map(a=>Y.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)),g=+(a.evidence.length>0),h=d.length?e.length/d.length:1;return{chapterId:a.id,title:a.title,requiredFacts:d,coveredFacts:e,missingFacts:f,evidenceCount:a.evidence.length,readinessRate:Math.min(1,.7*h+.3*g)}}),cB=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} 内容较短,建议人工补充或重新生成`);c&&a.length<c.chapters.length&&f.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===(0,d.zY)(c).length&&f.push("模板未绑定任何提示词");let g=new Set(b.map(a=>a.roleId));return c?.fileBindings?.some(a=>"rule"===a.roleId)&&!g.has("rule")&&e.push("rule 角色未抽取到结构化事实"),{passed:0===f.length,warnings:e,errors:f}}(C,ch,z);cB.warnings=[...cB.warnings,..._.warnings],cB.errors=[...cB.errors,..._.blockingIssues];let cC=aZ.flatMap(a=>a.warnings.map(a=>({level:/结构化事实读取不足|结构化章节读取不足|兜底|片段/u.test(a)?"info":"warning",message:a,suggestion:"这是资料抽取诊断,不代表已抽取到的可靠参数不可用;生成时仍应优先使用绑定资料中的可靠参数。"}))).filter(a=>!de(a)),cD=aM(function(a,b,c){let d=[...a.errors.map(a=>({level:"error",message:a,suggestion:"请补充配置或资料后重新生成。"})),...a.warnings.map(a=>({level:"warning",message:a,suggestion:"建议人工确认或补充对应资料。"}))];return c.some(a=>/资料未提供|系统暂未从知识库确认/u.test(a.content))&&d.push({level:"warning",message:"存在系统暂未从知识库确认的章节内容",suggestion:"请检查项目角色配置、文件绑定顺序和事实抽取落位结果。"}),b.conflicts.length>0&&d.push(...b.conflicts.map(a=>({level:"warning",message:a,suggestion:"请根据当前模板绑定的角色、文件证据和用户要求复核取值口径。"}))),d}(cB,cz,C),function(a){let b=[];for(let c of a)0===c.evidenceCount?b.push({level:"error",message:`章节缺少证据:${c.title}`,suggestion:"请补充对应绑定材料或调整模板章节检索词。"}):c.readinessRate<.5&&b.push({level:"warning",message:`章节事实覆盖率较低:${c.title} ${Math.round(100*c.readinessRate)}%`,suggestion:"建议补充章节 requiredFacts 或绑定材料证据。"});return b}(cA),cC),cE=bW(aZ,z),cF=Date.now(),cH=(0,aD.V7)(C.map(a=>a.content).join("\n\n"));bK(N,bJ({type:"validation",roleId:"document-budget",status:"running",message:`正在进行全文预算校准:当前 ${cH} 字`,details:[`章节数:${C.length}`,`目标:${bE.targetChars||bE.targetPages||"按章节深度"}`],progress:{current:1,total:2,label:"预算校准"}},{subtitle:"文档预算"})),F(C);let cI=bF.enableDocumentBudgetExpansion?await I(()=>cS({template:z,chapters:C,budget:bE,promptTexts:ai,requirement:a.requirement,forbidDrawingImages:cE,signal:a.signal,onRoundProgress:(a,b)=>{C.splice(0,C.length,...a),bK(N,bJ({type:"validation",roleId:"document-budget",status:"running",message:`正在进行全文预算校准:第 ${b.round}/${b.maxRounds} 轮,当前 ${b.totalChars} 字,新增 ${b.addedChars} 字`,details:[`章节数:${a.length}`,`目标:${bE.targetChars||bE.targetPages||"按章节深度"}`],progress:{current:Math.min(b.round+1,b.maxRounds),total:b.maxRounds+1,label:"预算校准"}},{subtitle:"文档预算"})),F(C)}})):C;C.splice(0,C.length,...cI);let cM=C.map(a=>a.content).join("\n\n"),cN=dn(C,ch,cM);cN.patchedCount>0&&(C.splice(0,C.length,...cN.chapters),cD=[...cD,{level:"info",message:`已自动补写未落位事实 ${cN.patchedCount} 项`,suggestion:"补写仅使用本项目资料明确事实,未补写商务敏感信息或系统暂未确认内容。"}]);let cO=(0,aD.fW)(bE,C.map(a=>a.content).join("\n\n")),cP=[bE.targetChars?`目标 ${bE.targetChars} 字${bE.minChars||bE.maxChars?`(区间 ${bE.minChars||0}-${bE.maxChars||"∞"} 字)`:""}`:void 0,bE.targetPages?`目标 ${bE.targetPages} 页${bE.minPages||bE.maxPages?`(区间 ${bE.minPages||0}-${bE.maxPages||"∞"} 页)`:""}`:void 0].filter(Boolean).join(" / ")||"默认章节深度";bK(N,bJ({type:"validation",roleId:"document-budget",status:bE.maxChars&&cO.currentChars>bE.maxChars||bE.minChars&&cO.currentChars<bE.minChars?"fallback":"success",message:bL(`文档预算:当前 ${cO.currentChars} 字,新增 ${Math.max(0,cO.currentChars-cH)} 字,预计 ${cO.estimatedPages} 页;${cP}`,cF)},{subtitle:"文档预算"})),F(C);let cY=aH.filter(a=>"chapter_generation"===a.type&&"fallback"===a.status).length,c_=Math.max(0,bh.length-C.length),c1=[...cY>0?[{level:"info",message:`章节生成存在补充完善:${cY} 章`,suggestion:"已保留章节成果;如需更高质量可复核对应章节,但不阻断导出。"}]:[],...c_>0?[{level:"error",message:`部分章节生成失败:${c_} 章`,suggestion:aF.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。"}]:[]],c2=C.flatMap(a=>{let b=bh.find(b=>b.id===a.id);if(!b)return[];let c=cG({chapter:b,content:a.content,evidence:a.evidence||[]});return c.length>0?[{level:"warning",message:`${(0,Q.GQ)(a.title)} 小节知识库事实或量化参数落位可继续优化:${c.slice(0,5).join(";")}`,suggestion:"建议扩大本地知识库检索并定向补写对应小节,优先使用清单、图纸、招标要求中的原始事实、规格、数量、标准和工期参数。"}]:[]}),c3=(cD=aM(cD,c1,c2)).filter(a=>"error"===a.level&&(0,aE.Nz)(a)).length,c4=[...N];bK(c4,bJ({type:"reference",roleId:"knowledge-usage-report",status:"success",message:`资料使用报告:证据 ${av.length} 条,来源文件 ${cy.length} 份,结构化事实 ${ch.length} 条`,details:[`证据类型:${[...cx.entries()].map(([a,b])=>`${a} ${b}`).join(",")||"无"}`,`索引健康:可用切片 ${as.usableChunkCount} 条,待索引 ${as.pendingJobs} 个,向量 ${as.vectorStatus?.status||"unknown"}`,cN.patchedCount>0?`自动补写事实:${cN.patchedCount}/${cN.missingCount}`:`事实落位补写:0/${cN.missingCount}`]},{subtitle:"资料使用报告"})),bK(c4,bJ({type:"reference",roleId:"web-research-report",status:ax.enabled?"success":"skipped",message:ax.enabled?`联网增强:检索章节 ${new Set(ax.chapters).size} 个,查询 ${ax.queries.length} 个,使用公开资料 ${ax.evidenceCount} 条`:"联网增强未开启",details:ax.enabled?[`检索主题:${[...new Set(ax.queries)].join(";")||"无"}`,`过滤结果:${ax.filteredCount} 条`,"公开资料仅用于通用规范、政策、工艺和措施补充,不作为项目事实来源"]:["可在模型配置中开启联网增强"]},{subtitle:"联网增强报告"})),bK(c4,bJ({type:"validation",roleId:"document-workflow",status:c3>0?"failed":"success",message:`阻断 ${c3},错误 ${cB.errors.length},警告 ${cB.warnings.length}`},{subtitle:"最终规范校验"})),bK(c4,bJ({type:"formatting",roleId:"document-workflow",status:"success",message:"已生成正式排版 Markdown"})),bK(c4,bJ({type:"export_ready",roleId:"document-workflow",status:c3>0?"failed":"success",message:c3>0?"导出门禁未通过,请完成阻断问题修复后再导出":"已准备好导出 Markdown/HTML/DOCX/PDF"}));let c5={templateId:z.id,templateName:z.name,title:z.outputTitle,requirement:a.requirement||"",projectRoot:v,projectId:w,exportSettings:z.exportSettings,generationSettings:z.generationSettings,facts:b9,structuredFacts:ch,factsModel:cz,chapters:C,sources:cy,missingItems:[...new Set(aA)],validation:cB,validationIssues:cD,executionStages:c4,exportGate:{passed:0===c3,blockingIssues:cD.filter(a=>"error"===a.level&&(0,aE.Nz)(a)),checklist:[]},assets:[],partialChapters:C.map(a=>({id:a.id,title:a.title,chars:(0,aD.V7)(a.content),status:cW(a,bE.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:C,generatedAt:Date.now()},c6=aC(c5,{forbidDrawingImages:cE,promptRules:ag});if("1"!==process.env.DOCUMENT_ENABLE_POST_EXPORT_REVIEW){let b=aB(c6,C,{forbidDrawingImages:cE,promptRules:ag}).chapters.map(a=>{let b=bh.find(b=>b.id===a.id)||a;return{...a,content:dh(a.content,b)}}),c="",d=(a,b)=>aM(cD.filter(a=>!de(a)&&("error"!==a.level||!(0,aE.Nz)(a))),x({markdown:a,spec:Y,summary:W}),B({markdown:a,facts:ch,summary:W,profile:Z}),y(a,W),dc(a,ch),a2({markdown:a,chapters:b,factsModel:cz,template:z,promptBindings:P,promptDocumentRules:ag}),(0,aD.PE)(z.generationSettings||z.exportSettings,a).filter(a=>!(bE.minPages&&/低于目标页数/u.test(a.message))),(0,aD.ty)(bE,a)),e=[],f=()=>{e=aN(d(c=db(c0(dd(aB(aC({...c5,chapters:b},{forbidDrawingImages:cE,promptRules:ag}),b,{forbidDrawingImages:cE,promptRules:ag}).markdown),ch),ch),b)),e=aN(d(c=dg(c,e),b))},g=a=>{b=a.map(a=>{let b=bh.find(b=>b.id===a.id)||a;return{...a,sections:a.sections||[],content:dh(a.content,b)}}),f()},h=()=>e.filter(df).map(a=>aP(a)).slice(0,24),i=async(d,e)=>{if(!bE.minChars||!bF.enableDocumentBudgetExpansion||(0,aD.V7)(c)>=bE.minChars||bE.maxChars&&(0,aD.V7)(c)>=bE.maxChars)return!1;let g=(0,aD.V7)(c);b=(await I(()=>cS({template:z,chapters:b,budget:bE,promptTexts:ai,requirement:a.requirement,forbidDrawingImages:cE,signal:a.signal,onRoundProgress:(a,c)=>{b=a.map(a=>({...a,sections:a.sections||[]})),bK(c4,bJ({type:"validation",roleId:d,status:"running",message:`${e}:第 ${c.round}/${c.maxRounds} 轮,当前 ${c.totalChars} 字,新增 ${c.addedChars} 字`},{subtitle:e})),F(b,c4)}}),c4)).map(a=>({...a,sections:a.sections||[]})),f();let h=(0,aD.V7)(c);return c4.push(bJ({type:"validation",roleId:d,status:h<bE.minChars?"fallback":"success",message:`${e}:当前 ${h} 字,新增 ${Math.max(0,h-g)} 字,目标下限 ${bE.minChars} 字`},{subtitle:e})),h>g},j=[];f();for(let d=0;d<5;d+=1){if((0,aG.Te)(a.signal),await i(`default-budget-repair-${d+1}`,0===d?"默认路径预算补齐":"默认路径预算再补齐"))continue;let f=h(),k=f.length>0&&f.every(a=>/正文篇幅低于目标字数|正文长度低于提示词要求/u.test(a));if(0===f.length||k)break;let l=await I(()=>bN(bG,"default-path-quality-repair",()=>b_({markdown:c,template:z,chapters:b,promptTexts:ai,requirement:a.requirement,issues:f,forbidDrawingImages:cE,strategy:bF,diagnostics:bG,signal:a.signal}),{issues:f.length,round:d+1}),c4);if(l.stage&&j.push({...l.stage,message:`${l.stage.message||"默认路径质量修复完成"};第 ${d+1} 轮,触发问题 ${f.length} 个`}),l.chapters===b)break;g(l.chapters);let m=aQ(f,e).slice(0,8);if(0===m.length)continue;let n=await I(()=>bN(bG,"default-path-quality-repair-escalation",()=>b_({markdown:c,template:z,chapters:b,promptTexts:ai,requirement:a.requirement,issues:m,forbidDrawingImages:cE,strategy:bF,diagnostics:bG,signal:a.signal}),{issues:m.length,round:d+1}),c4);n.chapters!==b&&g(n.chapters),j.push(bJ({type:"llm_review",roleId:`default-repair-verify-${d+1}`,status:e.some(a=>m.some(b=>aO(b)===aO(a)))?"fallback":"success",message:`修复后验证闭环完成:第 ${d+1} 轮升级修复 ${m.length} 个残留问题`,details:m},{subtitle:"修复后验证"}))}let k=(0,aE.Ai)(e,cz,b),l=[...c4,...j].map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:k.blockingIssues.length>0?"failed":"success",message:`阻断 ${k.blockingIssues.length},问题 ${e.length}`}:"export_ready"===a.type?{...a,status:k.passed?"success":"failed",message:k.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:a);l.push(bJ({type:"llm_review",roleId:"post-export-review",status:"skipped",message:"已跳过导出后的重型 LLM 复审;默认路径已执行本地硬规则校验与必要的精准局部修复;如需开启重型复审请设置 DOCUMENT_ENABLE_POST_EXPORT_REVIEW=1"},{subtitle:"导出后复审"}));let m=b.map(a=>({...a,evidence:J(a.evidence||[],{maxItems:12,maxChars:9e3,preservePinned:!0})}));return{...c5,chapters:m,validationIssues:e,exportGate:k,executionStages:l,partialChapters:b.map(a=>({id:a.id,title:a.title,chars:(0,aD.V7)(a.content),status:cW(a,bE.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:m,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:bG},markdown:c}}(0,aG.Te)(a.signal);let c7=C.map(a=>{let b=bY({chapter:bh.find(b=>b.id===a.id)||{id:a.id,title:a.title,purpose:"",queries:[],requiredFacts:[],sections:a.sections},content:a.content,missingFacts:a.missingFacts,targetWords:bE.chapterTargets.get(a.id)||1200}),c=b.some(a=>/缺少|空小节|只有标题|只有表格|正文篇幅明显低于目标|后台流程话术|占位|requiredFacts/u.test(a));return{chapterId:a.id,title:a.title,status:c?"fail":b.length>0?"warn":"pass",issues:b,suggestions:[],chars:(0,aD.V7)(a.content)}}),c8=c7.filter(a=>"pass"!==a.status).length,c9=bF.enableChapterReview&&c8>0;c9&&(bK(c4,bJ({type:"llm_review",roleId:"chapter-review",status:"running",message:`正在进行章节级质量审查:${c8}/${C.length} 章存在本地风险`,details:["仅对本地扫描发现风险的生成结果触发 LLM 审查,按风险章节自然并行"],progress:{current:1,total:3,label:"章节审查"}},{subtitle:"章节级质量审查"})),F(C,c4));let da=c9?await I(()=>bN(bG,"chapter-review",()=>cT({template:z,chapters:C,budget:bE,promptTexts:am||ai,requirement:a.requirement,strategy:bF,diagnostics:bG,signal:a.signal}),{chapters:C.length}),c4):{summaries:c7,stage:bJ({type:"llm_review",roleId:"chapter-review",status:"skipped",message:bF.enableChapterReview?"本地章节扫描未发现需要 LLM 章节审查的问题,已跳过":"当前策略未启用章节级 LLM 审查"},{subtitle:"章节级质量审查"})};c4.push(da.stage);let dj=da.summaries,dk=dj.filter(a=>"pass"!==a.status&&a.issues.length>0);if(dk.length>0){bK(c4,bJ({type:"llm_review",roleId:"chapter-review-repair",status:"running",message:`正在按章节审查结果就地修复:${dk.length} 章`,details:dk.map(a=>`${a.title}:${a.issues.slice(0,5).join(";")}`),progress:{current:1,total:dk.length,label:"章节就地修复"}},{subtitle:"章节就地修复"})),F(C,c4);let b=new Map,c=0,d=Math.max(1,dk.length||1);for(let e=0;e<dk.length;e+=d){(0,aG.Te)(a.signal);let f=dk.slice(e,e+d);for(let d of(await Promise.all(f.map(async b=>{let c=C.find(a=>a.id===b.chapterId);if(!c)return{chapterId:b.chapterId,content:void 0,appliedCount:0};try{let d=await bi(d=>bZ({template:z,chapter:c,issues:b.issues.slice(0,4),promptTexts:am||ai,requirement:a.requirement,forbidDrawingImages:cE,diagnostics:bG,signal:d}),9e4,a.signal);return{chapterId:b.chapterId,content:d?.content,appliedCount:d?.appliedCount||0}}catch{return{chapterId:b.chapterId,content:void 0,appliedCount:0}}}))))d.content&&b.set(d.chapterId,d.content),c+=d.appliedCount}let e=0,f=new Set;for(let a=0;a<C.length;a+=1){let c=b.get(C[a].id);c&&c!==C[a].content&&(C[a]={...C[a],content:c},f.add(C[a].id),e+=1)}e>0&&(dj=dj.map(a=>f.has(a.chapterId)?{...a,status:"warn",issues:[],suggestions:[`已按章节审查结果应用局部修复,修复前问题已移交最终校验复核。`],chars:(0,aD.V7)(C.find(b=>b.id===a.chapterId)?.content||"")}:a),c6=aC({...c5,chapters:C,validationIssues:cD,executionStages:c4},{forbidDrawingImages:cE,promptRules:ag})),c4.push(bJ({type:"llm_review",roleId:"chapter-review-repair",status:"success",message:`章节就地修复完成:修复 ${e} 章,应用 ${c} 个 patch`},{subtitle:"章节就地修复"})),F(C,c4)}if(c9){let a=dj.filter(a=>"pass"!==a.status&&a.issues.length>0).map(a=>({level:"fail"===a.status?"error":"warning",message:`${a.title} 章节审查:共 ${a.issues.length} 个问题;${a.issues.join(";")||"存在质量风险"}`,suggestion:a.suggestions.join(";")||"请复核章节事实覆盖、结构完整性和角色证据覆盖。"}));cD=aM(cD,a)}let dl=bF.enableGlobalReview&&(c9||cD.some(a=>/事实一致性|项目污染|章节缺失|结构/u.test(a.message)));dl&&(bK(c4,bJ({type:"llm_review",roleId:"global-consistency-review",status:"running",message:"正在进行全局一致性审查",details:["仅在章节审查或本地校验发现跨章节风险时触发"],progress:{current:2,total:3,label:"全局审查"}},{subtitle:"全局一致性审查"})),F(C,c4));let dy=dl?await I(()=>bN(bG,"global-consistency-review",()=>cU({template:z,chapters:C,chapterReviews:dj,promptTexts:am||ai,requirement:a.requirement,projectContext:bn,diagnostics:bG,signal:a.signal}),{chapters:C.length}),c4):{issues:[],stage:bJ({type:"llm_review",roleId:"global-consistency-review",status:"skipped",message:bF.enableGlobalReview?"未发现需要 LLM 全局一致性审查的跨章节风险,已跳过":"当前策略未启用全局一致性审查"},{subtitle:"全局一致性审查"})};c4.push(dy.stage),cD=aM(cD,dy.issues.map(a=>({level:"warning",message:`全局一致性审查:${a}`,suggestion:"请复核跨章节术语、关键事实、范围边界和上下文一致性。"}))),F(C,c4);let dz=C.filter(a=>0===a.evidence.length||a.missingFacts.length>0||(0,aD.V7)(a.content)<Math.floor(.7*(bE.chapterTargets.get(a.id)||1200))||dj.some(b=>b.chapterId===a.id&&"fail"===b.status)||bY({chapter:bh.find(b=>b.id===a.id)||{id:a.id,title:a.title,purpose:"",queries:[],requiredFacts:[],sections:a.sections},content:a.content,missingFacts:a.missingFacts,targetWords:bE.chapterTargets.get(a.id)||1200}).length>0),dA=c3>0||dy.issues.length>0||dj.some(a=>"fail"===a.status)||cD.some(a=>/事实一致性|项目污染|章节生成存在兜底|章节生成失败|阻断/u.test(a.message)),dB=bF.enableFinalQualityReview&&(dA||dz.length>Math.max(3,Math.floor(.35*C.length))),dC=Date.now();dB&&(bK(c4,bJ({type:"llm_review",roleId:"llm-review",status:"running",message:`正在进行最终质量审查:风险章节 ${dz.length} 个`,details:["只检查结构、事实一致性、目录层级和正式文档风格,不重写正文"],progress:{current:3,total:3,label:"质量审查"}},{subtitle:"最终质量审查"})),F(C,c4));let dD=J(av,{maxItems:Math.max(32,8*bh.length),maxChars:Math.max(36e3,6e3*bh.length),preservePinned:!0}),dE=dB?await I(()=>cV({template:z,spec:Y,markdown:c6,evidence:dD,promptTexts:am||ai,projectContext:bn,requirement:a.requirement,diagnostics:bG,signal:a.signal}),c4):{markdown:c6,stage:{type:"llm_review",roleId:"llm-review",status:dz.length>0?"fallback":"success",message:dz.length>0?`本地风险扫描发现 ${dz.length} 个低/中风险章节,未达到最终 LLM 审查触发阈值,保留为待复核 warning`:"本地风险扫描未发现需要 LLM 最终质量审查的章节"}};dE.stage.message=bL(dE.stage.message||"LLM 审查完成",dC),(0,aG.Te)(a.signal);let dF=dg(aB(dE.markdown===c6?aC({...c5,validationIssues:cD,exportGate:c5.exportGate,executionStages:c4},{forbidDrawingImages:cE,promptRules:ag}):dE.markdown,C,{forbidDrawingImages:cE,promptRules:ag}).markdown,cD),dG=az(dF,z).map(a=>aP(a)),dH=(0,aE.bM)(dF).map(a=>aP(a)),dI=(0,aE.mR)(dF,z).map(a=>aP(a)),dJ=(0,aE.N1)(dF,cz).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dK=ag.forbidToc?[]:[...(0,aE.gN)(dF),...(0,aE.f8)(dF)].map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dL=(0,aE.k0)(dF).map(a=>aP(a)),dM=(0,aE.qK)(dF,C).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dN=(b={markdown:dF,chapters:C,factsModel:cz},[...(0,aE.ji)(b.chapters),...(0,aE.i0)(b.chapters),...(0,aE.ST)(b.chapters),...(0,aE.xX)(b.chapters),...(0,aE.qm)(b.markdown,b.factsModel),...aJ(b.markdown,b.factsModel),...aK(b.markdown),...aL(b.chapters),...(0,aE.vY)(b.markdown,b.factsModel)]).map(a=>aP(a)),dO=(0,aE.iC)(dF).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dP=(0,aE.BV)(dF).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dQ=function(...a){return a.flat()}(dG,dH,dI,dJ,dK,dL,dM,dN,dO,dP,(0,aE.Ty)(C).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),al(dF).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`)),dR=new Set(dM),dS=Date.now(),dT=dQ.filter(a=>!dR.has(a));bK(c4,bJ({type:"llm_review",roleId:"quality-repair",status:dT.length>0?"running":"success",message:dT.length>0?`正在进行精准质量修复:${dT.length} 个问题`:"未发现需要精准修复的问题",details:dT,progress:{current:1,total:Math.max(1,dT.length),label:"质量修复"}},{subtitle:"精准质量修复"})),F(C,c4);let dU=await I(()=>bN(bG,"local-patch-quality-repair",()=>b_({markdown:dF,template:z,chapters:C,promptTexts:ai,requirement:a.requirement,issues:dT,forbidDrawingImages:cE,strategy:bF,diagnostics:bG,signal:a.signal}),{issues:dT.length}),c4);dU.stage&&(dU.stage.message=bL(dU.stage.message||"质量修复完成",dS)),(0,aG.Te)(a.signal);let dV=dU.stage?[...c4,dE.stage,dU.stage]:[...c4,dE.stage],dW=dU.chapters,dX=aC({...c5,chapters:dW,validationIssues:cD,exportGate:c5.exportGate,executionStages:c4},{forbidDrawingImages:cE,promptRules:ag}),dY=aQ(dT,[...az((c={markdown:dX=dg(dX,cD),chapters:dW,template:z,factsModel:cz}).markdown,c.template),...(0,aE.bM)(c.markdown),...(0,aE.k0)(c.markdown),...(0,aE.ji)(c.chapters),...(0,aE.i0)(c.chapters),...(0,aE.ST)(c.chapters),...(0,aE.xX)(c.chapters),...(0,aE.qm)(c.markdown,c.factsModel),...aJ(c.markdown,c.factsModel),...aK(c.markdown),...aL(c.chapters),...(0,aE.vY)(c.markdown,c.factsModel)]).slice(0,8);if(dY.length>0){let b=await I(()=>bN(bG,"local-patch-quality-repair-escalation",()=>b_({markdown:dX,template:z,chapters:dW,promptTexts:ai,requirement:a.requirement,issues:dY,forbidDrawingImages:cE,strategy:bF,diagnostics:bG,signal:a.signal}),{issues:dY.length}),dV);dW=b.chapters,dX=dg(dX=aC({...c5,chapters:dW,validationIssues:cD,exportGate:c5.exportGate,executionStages:c4},{forbidDrawingImages:cE,promptRules:ag}),cD),dV=b.stage?[...dV,{...b.stage,roleId:"quality-repair-escalation",message:`修复后验证发现残留问题,已升级修复 ${dY.length} 个问题`}]:dV}let dZ=(0,aE.yw)(dX,dW.map(a=>({...a,sections:aj(a.content)}))).filter(a=>"empty"===a.reason||"table_only"===a.reason);if(dZ.length>0){let b=Date.now();bK(dV,bJ({type:"llm_review",roleId:"section-content-repair",status:"running",message:`正在补写空洞小节:${dZ.length} 个问题`,details:dZ.map(a=>a.message),progress:{current:1,total:dZ.length,label:"小节补写"}},{subtitle:"小节内容补写"})),F(dW,dV);let c=[...dW];for(let b=0;b<dW.length;b+=Math.max(1,dW.length||1)){(0,aG.Te)(a.signal);let d=dW.slice(b,b+Math.max(1,dW.length||1));(await Promise.all(d.map(async b=>{let c=dZ.filter(a=>a.chapterTitle===b.title);if(0===c.length)return b;let d=bh.find(a=>a.id===b.id||a.title===b.title)||{id:b.id,title:b.title,purpose:"",queries:[],requiredFacts:[],sections:b.sections},e=bE.chapterTargets.get(b.id)||1200,f=bT(d,bf);try{let g=await bi(g=>cQ({template:z,chapter:d,content:b.content,evidence:b.evidence,missingFacts:b.missingFacts,promptTexts:ai,projectContext:bn,requirement:a.requirement,roleContext:bV(aZ,d,f),targetWords:e,forbidDrawingImages:cE,forcedSections:c,signal:g}),Math.min(3e5,Math.max(9e4,9e4*c.length)),a.signal);if(!g)return b;let h=aj(g);return{...b,content:g,markdown:g,sections:h}}catch{return b}}))).forEach((a,d)=>{c[b+d]=a})}dW=c;let d=(0,aE.qK)(aC({...c5,chapters:dW,validationIssues:cD,exportGate:c5.exportGate,executionStages:c4},{forbidDrawingImages:cE,promptRules:ag}),dW);bK(dV,bJ({type:"llm_review",roleId:"section-content-repair",status:d.length>0?"fallback":"success",message:bL(d.length>0?`小节补写后仍存在 ${d.length} 个内容缺口`:"小节内容补写完成",b),details:d.map(a=>a.message)},{subtitle:"小节内容补写"})),F(dW,dV)}let d$=(0,aD.fW)(bE,dW.map(a=>a.content).join("\n\n"));if(bF.enableDocumentBudgetExpansion&&bE.minChars&&d$.currentChars<Math.floor(.9*bE.minChars)&&(!bE.maxChars||d$.currentChars<bE.maxChars)){let b=Date.now(),c=d$.currentChars;bK(dV,bJ({type:"validation",roleId:"document-budget-repair",status:"running",message:`正在进行修复后预算补齐:当前 ${c} 字`,details:[`目标下限:${bE.minChars} 字`,`章节数:${dW.length}`],progress:{current:1,total:2,label:"预算补齐"}},{subtitle:"修复后预算补齐"})),F(dW,dV),dW=await I(()=>cS({template:z,chapters:dW,budget:bE,promptTexts:ai,requirement:a.requirement,forbidDrawingImages:cE,signal:a.signal}),dV);let d=(0,aD.fW)(bE,dW.map(a=>a.content).join("\n\n"));bK(dV,bJ({type:"validation",roleId:"document-budget-repair",status:bE.minChars&&d.currentChars<bE.minChars?"fallback":"success",message:bL(`修复后预算补齐:当前 ${d.currentChars} 字,新增 ${Math.max(0,d.currentChars-c)} 字,预计 ${d.estimatedPages} 页`,b)},{subtitle:"修复后预算补齐"}))}let d_=aB(aC({...c5,chapters:dW,validationIssues:cD,exportGate:c5.exportGate,executionStages:c4},{forbidDrawingImages:cE,promptRules:ag}),dW,{forbidDrawingImages:cE,promptRules:ag}),d0=d_.chapters,d1=d_.markdown,d2=(0,aE.yw)(d1,d0.map(a=>({...a,sections:aj(a.content)}))).filter(a=>"empty"===a.reason||"table_only"===a.reason);if(d2.length>0){let b=Date.now();bK(dV,bJ({type:"llm_review",roleId:"final-section-content-repair",status:"running",message:`最终结构化后补写残留空洞小节:${d2.length} 个问题`,details:d2.map(a=>a.message),progress:{current:1,total:d2.length,label:"最终小节补写"}},{subtitle:"最终小节内容补写"})),F(d0,dV);let c=[...d0];for(let b=0;b<d0.length;b+=Math.max(1,d0.length||1)){(0,aG.Te)(a.signal);let d=d0.slice(b,b+Math.max(1,d0.length||1));(await Promise.all(d.map(async b=>{let c=d2.filter(a=>a.chapterTitle===b.title);if(0===c.length)return b;let d=bh.find(a=>a.id===b.id||a.title===b.title)||{id:b.id,title:b.title,purpose:"",queries:[],requiredFacts:[],sections:b.sections},e=bE.chapterTargets.get(b.id)||1200,f=bT(d,bf);try{let g=await bi(g=>cQ({template:z,chapter:d,content:b.content,evidence:b.evidence,missingFacts:b.missingFacts,promptTexts:ai,projectContext:bn,requirement:a.requirement,roleContext:bV(aZ,d,f),targetWords:e,forbidDrawingImages:cE,forcedSections:c,signal:g}),Math.min(3e5,Math.max(9e4,9e4*c.length)),a.signal);if(!g)return b;let h=aj(g);return{...b,content:g,markdown:g,sections:h}}catch{return b}}))).forEach((a,d)=>{c[b+d]=a})}d0=(d_=aB(aC({...c5,chapters:c,validationIssues:cD,exportGate:c5.exportGate,executionStages:c4},{forbidDrawingImages:cE,promptRules:ag}),c,{forbidDrawingImages:cE,promptRules:ag})).chapters,d1=d_.markdown;let d=(0,aE.qK)(d1,d0);bK(dV,bJ({type:"llm_review",roleId:"final-section-content-repair",status:d.length>0?"fallback":"success",message:bL(d.length>0?`最终补写后仍存在 ${d.length} 个内容缺口`:"最终小节内容补写完成",b),details:d.map(a=>a.message)},{subtitle:"最终小节内容补写"})),F(d0,dV)}d0=(d_=aB(aC({...c5,chapters:d0,validationIssues:cD,exportGate:c5.exportGate,executionStages:c4},{forbidDrawingImages:cE,promptRules:ag}),d0,{forbidDrawingImages:cE,promptRules:ag})).chapters,d1=db(c0(d_.markdown,ch),ch);let d3=bH({facts:ch,markdown:d1});d3.size>0&&c4.push({type:"fact_extraction",roleId:"canonical-facts",status:"success",message:`已决策可信基础事实 ${d3.size} 项`,details:[...d3.values()].map(a=>`${a.label}=${a.value}(${a.source},confidence=${a.confidence})`).slice(0,12)});let d4=[...dG];cD=aM((0,aE.kQ)(Y,[...cD,...d4.map(a=>({level:"warning",message:a}))],cz,d0,d1,V,P),x({markdown:d1,spec:Y,summary:W}),B({markdown:d1,facts:ch,summary:W,profile:Z}),y(d1,W),dc(d1,ch),a2({markdown:d1,chapters:d0,factsModel:cz,template:z,promptBindings:P,promptDocumentRules:ag}));let d5=dn(d0,ch,d1);d5.patchedCount>0&&(d0=d5.chapters.map(a=>({...a,sections:a.sections||[]})),cD=[...cD,{level:"info",message:`最终审查阶段已补写未落位事实 ${d5.patchedCount} 项`,suggestion:"补写仅使用本项目资料明确事实,未补写商务敏感信息或系统暂未确认内容。"}],d1=aB(aC({...c5,chapters:d0,validationIssues:cD,exportGate:c5.exportGate,executionStages:c4},{forbidDrawingImages:cE,promptRules:ag}),d0,{forbidDrawingImages:cE,promptRules:ag}).markdown),cD=aM(cD,function(a,b,c={}){return dm(a,b,{maxItems:c.maxIssues}).map(a=>({level:"warning",message:`已确认事实未在正文中落位:${a.label}=${a.value}`,suggestion:"请将该事实自然写入对应章节或小节,不得改变原始数值和单位。"}))}(d1,[...ch,...cz.preciseFacts],{maxIssues:30})),d1=aB(d1,d0,{forbidDrawingImages:cE,promptRules:ag}).markdown;let d6=(0,aD.ty)(bE,d1),d7=(0,aD.PE)(z.generationSettings||z.exportSettings,d1).filter(a=>!(bE.minPages&&/低于目标页数/u.test(a.message)));cD=aN(aM(cD,d7,d6,az(d1,z),ay(d1,ag)));let d8=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(a3[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:d0,templateChapters:bh,factsModel:cz,evidence:av}),d9=function(a,b){let c=new Set,d=[];for(let e of[...b.project,...b.schedule,...b.quality,...b.safety,...b.resources,...b.preciseFacts,...b.bills,...b.drawings,...b.rules,...b.specifications]){let b=(0,aG.lG)(e.value).replace(/\s+/gu," ").trim(),f=e.fieldName||e.key||e.fieldId||"资料事实",g=`${f}:${b}`;!b||c.has(g)||(c.add(g),d.push({label:f,value:b,sourceFile:e.sourceFile,status:!function(a,b){let c=a4(a),d=a4(b);return!!(!d||d.length<2||c.includes(d))||(b.match(/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年|万元|元|平方米|㎡|m²|立方米|m³|米|m|mm|cm|台|套|人|项|%|MPa|kPa)?/giu)||[]).some(a=>a4(a).length>=2&&c.includes(a4(a)))}(a,b)?"unplaced":"used",confidence:e.confidence}))}return d}(d1,cz),ea=(p={chapters:d0,templateChapters:bh,factsModel:cz}).chapters.map(a=>{let b=p.templateChapters.find(b=>b.id===a.id||b.title===a.title),c=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,aD.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,b),d=c.filter(a=>a.passed).length;return{chapterId:a.id,title:a.title,score:c.length?Math.round(d/c.length*100):100,checks:c,action:d===c.length?"章节覆盖完整。":"系统需补齐章节结构、证据绑定、专业控制点和跨章依赖。"}});cD=aN(aM(cD,d8.score>=85?[]:[{level:"warning",message:`系统知识库覆盖确认率偏低:${d8.score}%`,suggestion:`${d8.remediation} 未确认事实域:${d8.unconfirmedDomains.map(a=>a3[a]||a).join("、")||"无"}`}],function(a,b={}){return a.filter(a=>"unplaced"===a.status&&/项目|工程|编号|地点|规模|范围|工期|质量|安全|资源|材料|设备|验收|\d/u.test(`${a.label}${a.value}`)).slice(0,b.maxIssues||20).map(a=>({level:"warning",message:`已确认知识库事实未落位:${a.label}=${a.value}`,suggestion:`请将该事实落位到对应章节,并保持来源 ${a.sourceFile||"结构化事实主表"} 的原始口径。`}))}(d9,{maxIssues:20}),ea.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("、")}`})),aw.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.requiredFactCovered}/${a.requiredFactTotal},小节覆盖 ${a.sectionCovered}/${a.sectionTotal}。`}))));let eb=(0,aE.Ai)(cD,cz,d0),ec=a6({markdown:d1,chapters:d0,issues:cD,knowledgeCoverage:d8,factTraces:d9,chapterCoverage:ea}),ed=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).slice(0,10);d.length>0&&b.push({priority:"high",title:"事实落位修复",action:`将 ${d.length} 项已确认知识库事实写入对应章节,保持原始数值、单位和来源口径。`}),a.knowledgeCoverage&&a.knowledgeCoverage.score<95&&b.push({priority:"medium",title:"知识库确认覆盖修复",action:"扩大本地知识库检索范围,执行事实补抽和章节证据重分配;这是系统检索、抽取、落位问题,不要求用户追加资料。"});let e=(a.chapterCoverage||[]).filter(a=>a.score<80).slice(0,8);return e.length>0&&b.push({priority:"medium",title:"章节覆盖修复",action:`补齐低覆盖章节:${e.map(a=>a.title).join("、")}。`}),a.qualityReport&&!a.qualityReport.passed&&b.push({priority:"medium",title:"交付置信度修复",action:a.qualityReport.actions.join(" ")}),b}({issues:cD,qualityReport:ec,knowledgeCoverage:d8,factTraces:d9,chapterCoverage:ea});cD=aN(aM(cD,(q=ec).passed?[]:[{level:"warning",message:`交付置信度未达目标:${q.deliveryProbability}% / ${q.target}%`,suggestion:q.actions.join(" ")}],ed.filter(a=>"high"===a.priority).map(a=>({level:"warning",message:`修复策略待执行:${a.title}`,suggestion:a.action})))),eb=(0,aE.Ai)(cD,cz,d0),ec=a6({markdown:d1,chapters:d0,issues:cD,knowledgeCoverage:d8,factTraces:d9,chapterCoverage:ea});let ee=[{key:"export-gate",label:"导出门禁",passed:(r={exportGate:eb,qualityReport:ec,repairStrategies:ed}).exportGate.passed,message:r.exportGate.passed?"导出门禁通过":`仍有 ${r.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:r.qualityReport.passed,message:`${r.qualityReport.deliveryProbability}% / ${r.qualityReport.target}%`},{key:"factuality",label:"事实准确性",passed:r.qualityReport.scores.factuality>=85,message:`${r.qualityReport.scores.factuality}/100`},{key:"evidence-coverage",label:"知识库证据覆盖",passed:r.qualityReport.scores.evidenceCoverage>=85,message:`${r.qualityReport.scores.evidenceCoverage}/100`},{key:"professional-depth",label:"专业深度",passed:r.qualityReport.scores.professionalDepth>=80,message:`${r.qualityReport.scores.professionalDepth}/100`},{key:"repair-strategies",label:"修复策略",passed:0===r.repairStrategies.filter(a=>"high"===a.priority).length,message:r.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}],ef=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:bG}),eg=eb.blockingIssues.length,eh=(0,aE.Ff)(cD);bG.quality.blockingCount+=eh.blocking,bG.quality.importantCount+=eh.important,bG.quality.minorCount+=eh.minor;let ei=dV.map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:eg>0?"failed":"success",message:`阻断 ${eg},问题 ${cD.length}`}:"export_ready"===a.type?{...a,status:eb.passed?"success":"failed",message:eb.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:a);ei.push(bJ({type:"validation",roleId:"document-delivery-score",status:ec.passed?"success":"fallback",message:ec.summary,details:ec.actions},{subtitle:"交付评分"})),ei.push(bJ({type:"reference",roleId:"knowledge-coverage",status:d8.score>=85?"success":"fallback",message:`知识库确认覆盖率:${d8.score}%(证据 ${d8.evidenceCount} 条,文件 ${d8.confirmedFiles} 份)`,details:[d8.remediation]},{subtitle:"知识库覆盖"})),ei.push(bJ({type:"validation",roleId:"document-review-checklist",status:ee.every(a=>a.passed)?"success":"fallback",message:`交付复核清单:通过 ${ee.filter(a=>a.passed).length}/${ee.length}`,details:ee.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let ej=[...bG.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(",");ei.push(bJ({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${bG.llm.calls} 次,失败 ${bG.llm.failures} 次,峰值并行 ${bG.llm.maxActive},检索 ${bG.evidence.searchQueries} 次/${Math.round(bG.evidence.searchMs/1e3)} 秒,证据上下文 ${bG.evidence.contextChars} 字,噪声过滤 ${bG.evidence.filteredNoise} 条,质量问题 阻断${bG.quality.blockingCount}/重要${bG.quality.importantCount}/轻微${bG.quality.minorCount}${ej?`,Top耗时:${ej}`:""}`},{subtitle:"后台诊断"}));let ek=d0.map(a=>({...a,evidence:J(a.evidence||[],{maxItems:12,maxChars:9e3,preservePinned:!0})}));return{...{...c5,chapters:ek,validationIssues:cD,exportGate:eb,executionStages:ei,partialChapters:d0.map(a=>({id:a.id,title:a.title,chars:(0,aD.V7)(a.content),status:cW(a,bE.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:ek,reviewMetadata:{chapterSummaries:dj,globalIssues:dy.issues,diagnostics:bG,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:z,chapters:bh,requirement:a.requirement}),knowledgeCoverage:d8,factTraces:d9,chapterCoverage:ea,retrievalCoverage:aw,qualityReport:ec,repairStrategies:ed,reviewChecklist:ee,workflowVersion:a7,telemetry:ef}},markdown:d1}}async function dz(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,h.aY)());if(!f)throw Error("No knowledge base project found");let g=(0,h.Qh)(),i=(0,d.Vh)(b),k=b2(f,i),l=(0,j.XB)("file"),m=new Map(i.flatMap(a=>b0(f,a.filePath).map(b=>[b,a.roleId]))),n=new Map(i.flatMap(a=>b0(f,a.filePath).map(b=>[b,l.find(b=>b.id===a.roleId)?.processingType||"reference"]))),o=dx(await g.getProject(f),[...k],a.maxEvidencePerChapter),p=[],q=[...k].filter(Boolean).sort(),r=dr(c,c.queries,[]),s=ds(c,[]);for(let a of r.slice(0,s)){let b=await g.search(f,a,{scope:"project",filters:{filePaths:q},limit:Math.min(o,12),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});p.push(...b.results.filter(a=>b1(f,a.filePath,k)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:m.get(a.filePath),processingType:n.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let t=dq(c,p.filter(a=>b1(f,a.filePath,k)),{maxItems:dt(o,c),maxChars:16e3,preservePinned:!0}),u=a.currentMarkdown||"",v=new Set(a.existingFacts??[]),w=c.requiredFacts.filter(a=>!v.has(a)&&!t.some(b=>(0,E.Lk)(b,a))),x=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",u?`> 当前文档上下文摘要:${u.replace(/\s+/gu," ")}`:"",t.length>0?`本章根据知识库资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`:"系统暂未检索到足够证据,建议扩大本地知识库检索后复核。","",t.length>0?"### 资料依据":"",...t.map(K),"",w.length>0?"### 待确认事项":"",...w.map(a=>`- ${a}:建议扩大本地知识库检索、事实补抽或人工复核系统落位结果。`)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:x,evidence:t,missingFacts:w}}},44533:(a,b,c)=>{c.d(b,{Qh:()=>l,VS:()=>p,Yy:()=>o,aY:()=>n});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021);let j=null;function k(){return g.join(h.homedir(),".customize-agent")}function l(){return j||(j=new d.MultiProjectManager(k())),j}function m(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))&&(b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function n(){let a=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(a&&i.existsSync(a)&&!m(a))return g.resolve(a);let b=function(){let a=g.join(k(),"projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!m(a))}finally{b.close()}}();return b.length>0?b[0]:process.env.INIT_CWD&&!m(process.env.INIT_CWD)?process.env.INIT_CWD:g.resolve(process.cwd(),"../..")}function o(a,b={}){let c=new Map;for(let b of function(a){let b=g.join(h.homedir(),".customize-agent","projects",(0,d.computeProjectId)(g.resolve(a)),"kb.db");if(!i.existsSync(b))return[];let c=new d.IndexStateStore(b);try{return c.listRecords().map(a=>({...a,matchedBy:"metadata"}))}finally{c.close()}}(a))c.set(b.relativePath,b);for(let b of function(a){let b=g.join(a,"knowledgeBase");if(!i.existsSync(b))return[];let c=[],d=a=>{for(let e of i.readdirSync(a,{withFileTypes:!0})){let f=g.join(a,e.name);if(e.isDirectory()){d(f);continue}if(e.name.endsWith(".source.txt"))continue;let h=i.statSync(f),j=g.relative(b,f).split(g.sep).join("/");c.push({relativePath:j,category:j.includes("表格数据/")?"spreadsheet":j.includes("图片素材/")?"image":j.includes("图纸文件/")?"cad":j.includes("文档资料/")?"document":"other",format:g.extname(j).slice(1).toLowerCase()||"text",contentHash:"",fileSize:h.size,mtime:h.mtimeMs,chunkCount:0,collectionName:"",indexedAt:0,lastVerifiedAt:0,status:"disk",matchedBy:"disk"})}};return d(b),c}(a)){let a=c.get(b.relativePath);c.set(b.relativePath,a?{...a,fileSize:b.fileSize,mtime:b.mtime,matchedBy:"metadata"}:b)}return Array.from(c.values()).filter(a=>!b.category||a.category===b.category).sort((a,b)=>b.mtime-a.mtime||a.relativePath.localeCompare(b.relativePath,"zh-CN"))}async function p(a,b={}){let c=(b.query||"").trim(),d=Math.max(1,Math.min(500,b.limit??50)),e=new Map,f=o(a,{category:b.category});for(let a of f)(!c||`${a.relativePath}
199
+ ${b.join("\n")}`:""}(ab)}),ao={total:ab.length,satisfied:ab.filter(a=>"satisfied"===a.status).length,missing:ab.filter(a=>"missing"===a.status).length,lowConfidence:ab.filter(a=>"low_confidence"===a.status).length};for(let a of ac)aA.push(`${c.title}:事实需求未确认 ${a}`);let as=Y?.chapterRules.find(a=>a.id===c.id||a.title===c.title),ay=bE.chapterTargets.get(c.id)||1200,az=Math.max(3500,Number(process.env.DOCUMENT_LONGFORM_INITIAL_CHAPTER_CAP||8e3)),aB=bE.longformStrict?Math.min(ay,az):ay,aC=Math.ceil(aB*(bE.maxChars?1.1:1.18)),aF=bE.targetChars?Math.min(1800,Math.max(600,Math.floor(.5*aB))):1200,aH=Math.max(Math.min(d?.minWords||0,aB),Math.min(as?.minWords||0,aB),Math.min(Y?.dynamicChapterRule.minWordsPerChapter||0,aB),Math.floor(.78*aB),aF),aJ=cK(aH,aB),aK=Math.min(aB,6e3),aL=Math.max(900,Math.min(aB,Math.ceil(.55*aB),aK)),aM=Math.max(450,Math.min(aH,Math.floor(.72*aL))),aN=Math.max(aL+300,Math.min(aC,Math.ceil(1.25*aL))),aO=cK(aM,aL),aP=Math.min(cL(aL),18e4),aQ=Math.max(900,Math.min(aL,3600)),aT=Math.max(450,Math.min(aM,Math.floor(.72*aQ))),aU=Math.max(aQ+300,Math.min(aC,Math.ceil(1.2*aQ))),aV=cK(aT,aQ),aX=Math.min(cL(aQ),15e4),a$=c.sections?.filter(Boolean).length||0,a0=/[、,,;;]/u.test(c.title),a2=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),a3=0!==Number(process.env.DOCUMENT_SECTION_FIRST_GENERATION??0)&&a$>=2&&a$<=a2&&(bE.longformStrict||!a0);N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:a3?`${(0,Q.GQ)(c.title)} 正在按小节并发成稿`:`${(0,Q.GQ)(c.title)} 正在整章一次成稿`,details:a3?[...$,`有效证据:${P.length} 条`,`事实需求:${ao.satisfied}/${ao.total} 已满足,缺失 ${ao.missing},低置信 ${ao.lowConfidence}`,`首轮质量目标:约 ${aB} 字${ay!==aB?`,总预算分配约 ${ay} 字`:""},上限约 ${aC} 字`,`规划小节:${c.sections?.length||0} 个`,"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...$,`有效证据:${P.length} 条`,`事实需求:${ao.satisfied}/${ao.total} 已满足,缺失 ${ao.missing},低置信 ${ao.lowConfidence}`,`目标字数:约 ${aB} 字,上限约 ${aC} 字`,`规划小节:${a$} 个${a$>a2?",超过小节并发上限,改用整章稳定成稿":""}`,"首次生成必须覆盖章节结构、小节、事实和目标篇幅,后置修复仅兜底"],progress:{current:h+1,total:bh.length,label:a3?"小节并发":"整章成稿"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F();let a4=a3?Math.min(cL(aB)+3e4,33e4):Math.min(cL(aB),18e4),a6=a3?await I(()=>bN(bG,`chapter-section-draft:${c.id}`,()=>bi(b=>cJ({template:z,chapter:c,evidence:P,missingFacts:R,promptTexts:X,projectContext:bn,requirement:a.requirement,roleContext:V,targetWords:aB,maxWords:aC,forbidDrawingImages:U,factCoverageContext:am,projectRoot:v,modelName:a_,fileRolesHash:a5,allowPartialResult:!1,sectionEvidenceProvider:a=>du({manager:A,projectRoot:v,chapter:c,sectionTitle:a,scopedFilePaths:t,fileRoleByPath:ap,fileProcessingByPath:aq,signal:b}),diagnostics:bG,signal:b}),a4,a.signal))):await I(()=>bN(bG,`chapter-draft:${c.id}`,()=>bi(b=>cf(z,c,P,R,X,bn,a.requirement,V,{forbidDrawingImages:U,minWords:aH,targetWords:aB,maxWords:aC,maxTokens:aJ,factCoverageContext:am,signal:b}),cL(aB),a.signal)));if(!a6&&a3)throw N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"failed",message:`${(0,Q.GQ)(c.title)} 小节并发未在限定时间内返回,已跳过整章重试并标记为章节阻断`,details:["小节优先模式不再执行整章重试,避免单章长时间空等;请优先重试失败小节或降低目标篇幅。"],progress:{current:h+1,total:bh.length,label:"小节超时"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),Error(`${c.title} 小节并发超时,已跳过整章重试`);if(a6||(N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 整章成稿未完整返回,正在执行整章重试生成`,details:[`目标字数:约 ${aB} 字`,`有效证据:${P.length} 条`],progress:{current:h+1,total:bh.length,label:"整章重试"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),a6=await I(()=>bN(bG,`chapter-draft-fallback:${c.id}`,()=>bi(b=>cf(z,c,P,R,X,bn,a.requirement,V,{forbidDrawingImages:U,minWords:aM,targetWords:aL,maxWords:aN,maxTokens:aO,factCoverageContext:am,signal:b}),aP,a.signal)))),(0,aG.Te)(a.signal),a6||(N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 正在压缩上下文后重试生成`,details:["已压缩证据与上下文后重新请求模型生成",`目标字数:约 ${aB} 字`],progress:{current:h+1,total:bh.length,label:"紧凑重试"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),a6=await I(()=>bN(bG,`chapter-draft-compact-fallback:${c.id}`,()=>bi(b=>cf(z,c,P,R,X,bn,a.requirement,V,{forbidDrawingImages:U,minWords:aT,targetWords:aQ,maxWords:aU,maxTokens:aV,factCoverageContext:am,signal:b}),aX,a.signal)))),(0,aG.Te)(a.signal),!a6)throw Error(`${c.title} 大模型未返回有效章节正文`);let a7=a6,ba=aj(a7),bb=ba.length>=Math.min(3,c.sections?.length||3)?{...c,sections:ba}:c,bd=c$(a7,bb),bg=0,bj=bd.map(a=>`${a.sectionTitle}:${a.reason}:${a.bodyLength}`).join("|");for(;bd.length>0;){bg+=1,N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 存在 ${bd.length} 个小节缺口,正在按目标缺口强制补写`,details:bd.map(a=>a.message),progress:{current:h+1,total:bh.length,label:`小节补写第 ${bg} 轮`}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C);let b=a7,d=await I(()=>bN(bG,`chapter-section-repair:${c.id}:${bg}`,()=>cQ({template:z,chapter:c,content:b,evidence:P,missingFacts:R,promptTexts:X,projectContext:bn,requirement:a.requirement,roleContext:V,targetWords:aB,maxWords:aC,forbidDrawingImages:U,factCoverageContext:am,forcedSections:bd,signal:a.signal})));d?.trim()&&(a7=d);let e=(bd=c$(a7,bb)).map(a=>`${a.sectionTitle}:${a.reason}:${a.bodyLength}`).join("|"),f=e!==bj;if(0===bd.length||!f)break;bj=e}bd.length>0&&(N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"failed",message:`${(0,Q.GQ)(c.title)} 小节补齐仍未完全达标,已标记为阻断问题`,details:bd.map(a=>a.message),progress:{current:h+1,total:bh.length,label:"小节未达标"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C));let bk=bY({chapter:c,content:a7,missingFacts:R,targetWords:aB}),bl=(0,aE.Ff)(bk);bG.quality.blockingCount+=bl.blocking,bG.quality.importantCount+=bl.important,bG.quality.minorCount+=bl.minor;let bm=bQ(bk);if(bm.length>0){let b=a7;N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 正在根据质量问题修复章节:${bm.length} 个阻断问题`,details:bm,progress:{current:h+1,total:bh.length,label:"章节修复"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C);let d=await I(()=>bN(bG,`chapter-repair:${c.id}`,()=>bZ({template:z,chapter:{id:c.id,title:c.title,content:b,evidence:P,missingFacts:[...R,...ac.map(a=>`事实需求未确认:${a}`)],sections:c.sections||[]},issues:bm,promptTexts:X,requirement:a.requirement,forbidDrawingImages:U,diagnostics:bG,signal:a.signal})));a7=d.content,d.appliedCount>0&&(bG.quality.repairedCount+=1),(0,aG.Te)(a.signal)}if(!a7.trim())throw Error(`${(0,Q.GQ)(c.title)} 首次生成失败,未获得可用于定稿的正文`);let bo=a7,bp=0;if((0,aD.V7)(bo)<Math.floor(.82*aB)||bQ(bY({chapter:c,content:bo,missingFacts:R,targetWords:aB})).length>0){N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 首次成稿未达定稿门槛,正在定向扩写`,details:[`当前 ${(0,aD.V7)(bo)} 字 / 目标 ${Math.floor(.95*aB)} 字`,`章节并发:${b5}`],progress:{current:h+1,total:bh.length,label:"章节扩写"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C);let b=await I(()=>bN(bG,`chapter-expand:${c.id}`,()=>cR({template:z,chapter:c,content:a7,evidence:P,promptTexts:X,requirement:a.requirement,roleContext:V,targetChars:Math.floor(.95*aB),maxChars:aC,forbidDrawingImages:U,maxTokens:Math.min(aJ,aO),signal:a.signal})));bo=b.content,bp=b.rounds}bo=dh(bo,c);let bq=aj(bo),br=(0,aE.yw)(bo,[{title:c.title,content:bo,sections:bq}]).filter(a=>"empty"===a.reason||"table_only"===a.reason);!function(a,b){try{let c=["chapter-generation-failure.env","document-generation-timeout.env"].map(b=>e.join(a,".dbg",b)).find(a=>f.existsSync(a));if(!c)return;let d=Object.fromEntries(f.readFileSync(c,"utf8").split(/\r?\n/u).map(a=>a.split("=")).filter(a=>a.length>=2).map(([a,...b])=>[a,b.join("=")])),g=d.DEBUG_SERVER_URL;if(!g)return;fetch(g,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({sessionId:d.DEBUG_SESSION_ID||"chapter-generation-failure",runId:"pre",ts:Date.now(),...b})}).catch(()=>void 0)}catch{}}(v,{event:"section-repair-check",hypothesisId:"H1",chapterId:c.id,chapterTitle:c.title,gapCount:br.length,gaps:br.slice(0,10).map(a=>({title:a.sectionTitle,reason:a.reason,message:a.message})),contentChars:(0,aD.V7)(bo),targetWords:aB}),br.length>0&&(N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 正在小节级定向补写 ${br.length} 个未达标小节`,details:br.slice(0,8).map(a=>a.message),progress:{current:h+1,total:bh.length,label:"小节补写"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),bo=await I(()=>bN(bG,`section-repair:${c.id}`,()=>cQ({template:z,chapter:c,content:bo,evidence:P,missingFacts:R,promptTexts:X,projectContext:bn,requirement:a.requirement,roleContext:V,targetWords:Math.max(1200,Math.floor(.35*aB)),maxWords:Math.min(aC,Math.max(2400,Math.floor(.55*aB))),forbidDrawingImages:U,factCoverageContext:am,forcedSections:br,signal:a.signal}))),bo=dh(bo,c),bq=aj(bo),br=(0,aE.yw)(bo,[{title:c.title,content:bo,sections:bq}]).filter(a=>"empty"===a.reason||"table_only"===a.reason),0===br.length&&(bG.quality.repairedCount+=1));let bs=cG({chapter:c,content:bo,evidence:P}),bt=(0,aD.V7)(bo),bu=aj(bo),bv=bu.length>0?bu:c.sections||[],bD=(0,aE.qK)(bo,[{title:c.title,content:bo,sections:bv}]).map(a=>a.message),bF=bs.slice(0,6).map(a=>`小节事实密度需优化:${a}`),bH=[...bY({chapter:{...c,sections:bv},content:bo,missingFacts:R,targetWords:aB}),...bD,...bF],bI=function(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))?"failed":c.length>0?"fallback":"success"}(bt,0,bH);g=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:bI,message:bL(`${(0,Q.GQ)(c.title)} 已由大模型首轮成稿${bp>0?`并定向扩写 ${bp} 轮`:""}:当前 ${bt} 字 / 目标 ${Math.floor(.95*aB)} 字${"success"!==bI?`;风险:${bH.join("、")||"篇幅未达标"}`:""}`,i),details:[`达标率:${Math.round(bt/Math.max(1,Math.floor(.95*aB))*100)}%`,...$,`二级小节:${bv.length} 个`,`扩写轮次:${bp}`],progress:{current:h+1,total:bh.length,label:"success"===bI?"章节达标":"章节风险"}},{subtitle:(0,Q.GQ)(c.title),order:h}),aR[h]=g;let bM={id:c.id,title:c.title,content:bo,evidence:P,missingFacts:R,sections:bv};aI[h]=bM,C=aI.filter(a=>!!a),F(C);let bO=bY({chapter:c,content:bo,missingFacts:R,targetWords:aB}),bP=(0,aE.Ff)(bO);bG.quality.blockingCount+=bP.blocking,bG.quality.importantCount+=bP.important,bG.quality.minorCount+=bP.minor}catch(b){if(a.signal?.aborted)throw b;console.error(`[gen] chapter ${c.title} failed:`,b),aF.push(`${c.title}:${b instanceof Error?b.message:"生成失败"}`),aR[h]=bJ({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,Q.GQ)(c.title)} 生成失败`},{subtitle:(0,Q.GQ)(c.title),order:h})}g&&(N[j]=g),F(C)}))}C=aI.filter(a=>!!a),aH.push(...aR.filter(a=>!!a));let b6=C.flatMap(a=>a.evidence||[]);if(b6.length>0){av.push(...b6);let a=J(av,{maxChars:Math.max(5e4,9e3*bh.length),preservePinned:!0});av.splice(0,av.length,...a)}if(0===C.length)throw Error(`章节生成未完成:${aF.join(";")||"没有生成任何有效章节"}`);if(U&&C.length<bh.length)throw Error(`OUTLINE 指定 ${bh.length} 章,实际只生成 ${C.length} 章:${aF.join(";")||"部分章节未生成"}`);(0,aG.Te)(a.signal),bK(N,bJ({type:"file_understanding",roleId:"multimodal-files",status:"running",message:"正在理解多模态参考文件"},{subtitle:"多模态参考文件"})),F(C);let b7={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{b7=await ce(v,av,a.signal)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fileUnderstanding failed:",b)}for(let b of(bK(N,b7.stage),F(C),(0,aG.Te)(a.signal),b7.notes))av.push({chapterId:"multimodal-file-understanding",filePath:"多模态模型文件理解结果",score:1,content:b,roleId:"multimodal-files",processingType:"reference",source:"multimodal"});let b8=J(av,{maxItems:Math.max(48,10*bh.length),maxChars:Math.max(52e3,9e3*bh.length),preservePinned:!0});av.splice(0,av.length,...b8);let b9=function(a,b,c){let d={};for(let e of(0,E.Uy)(a,c)){let a=b.find(a=>(0,E.I2)(a,e));a&&(d[e.name]=`${a.content.replace(/\s+/gu," ")}(来源:${a.filePath},角色:${a.roleId||"未标注"})`)}return d}(z,av,Y);for(let a of aZ)for(let b of a.facts)b9[b.key]=`${(0,aG.lG)(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let ca=bl(av,z,Y),cb=br(av),cc=bs(av,Z),cd=aZ.flatMap(a=>a.facts.map(a=>({key:a.key,value:(0,aG.lG)(a.value),sourceFile:a.sourceFile,roleId:a.roleId,confidence:.9}))),cg={facts:[],stages:[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"已有本地/角色事实覆盖主要必需字段,跳过 LLM 全量事实抽取"}]};if(function(a,b,c){let d=(0,E.Uy)(b,c).filter(a=>a.required);return 0===d.length?a.filter(a=>a.confidence>=.75&&(0,aG.lG)(a.value).trim().length>=2).length<12:d.filter(b=>a.some(a=>(function(a,b){let c=(0,aG.lG)(a.value).trim();if(!c||c.length<2||c.length>220&&a.confidence<.8)return!1;let d=`${a.fieldId||""} ${a.fieldName||""} ${a.key}`.toLowerCase();return!!(d.includes(b.id.toLowerCase())||d.includes(b.name.toLowerCase()))&&("project_basic_fact"===a.roleId||a.roleId?.startsWith("role-")||a.sourceRef?.filePath?a.confidence>=.55:a.confidence>=.75)})(a,b))).length/d.length<.9}([...cd,...ca,...cb,...cc],z,Y)){let b=J(av,{maxItems:48,maxChars:45e3,preservePinned:!0});try{cg=await bm(b,ak,z,Y,a.signal)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fact extraction failed:",b)}}(0,aG.Te)(a.signal);let ch=function(a,b){let c=b.find(a=>a.filePath)?.filePath||"";return c?a.map(a=>a.sourceFile?a:{...a,sourceFile:c,sourceRef:{filePath:c,roleId:a.sourceRef?.roleId||a.roleId,processingType:a.sourceRef?.processingType||a.processingType,sectionTitle:a.sourceRef?.sectionTitle,chunkIndex:a.sourceRef?.chunkIndex,cellRange:a.sourceRef?.cellRange}}):a}([...cd,...ca,...cb,...cc,...cg.facts],av);for(let a of(bK(N,b7.stage),cg.stages))bK(N,a);F();let ci=bk(av),cj=av.filter(a=>"pinned-evidence"===a.source).length,cl=av.filter(a=>"pinned-evidence"!==a.source&&"bound-file"!==a.source).length,cv=bJ({type:"reference",roleId:"quality-enhancement",status:av.length>0?"success":"skipped",message:`增强贡献:知识库证据 ${av.length} 条,人工确认/固定证据 ${cj} 条,自动检索证据 ${cl} 条`},{subtitle:"证据与上下文增强"});for(let a of(N.push(cv),F(),ch))b9[a.key]=`${(0,aG.lG)(a.value)}(来源:${a.sourceFile},角色:${a.roleId})`;let cw=new Map;for(let a of av)cw.set(a.filePath,(cw.get(a.filePath)??0)+1);let cx=new Map;for(let a of av)cx.set(a.source||"unknown",(cx.get(a.source||"unknown")??0)+1);let cy=[...cw.entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),cz=bD(ch,ci,aA,Y,Z),cA=C.map(a=>{let b=Y.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=(b?.requiredFactIds||[]).map(a=>Y.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)),g=+(a.evidence.length>0),h=d.length?e.length/d.length:1;return{chapterId:a.id,title:a.title,requiredFacts:d,coveredFacts:e,missingFacts:f,evidenceCount:a.evidence.length,readinessRate:Math.min(1,.7*h+.3*g)}}),cB=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} 内容较短,建议人工补充或重新生成`);c&&a.length<c.chapters.length&&f.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===(0,d.zY)(c).length&&f.push("模板未绑定任何提示词");let g=new Set(b.map(a=>a.roleId));return c?.fileBindings?.some(a=>"rule"===a.roleId)&&!g.has("rule")&&e.push("rule 角色未抽取到结构化事实"),{passed:0===f.length,warnings:e,errors:f}}(C,ch,z);cB.warnings=[...cB.warnings,..._.warnings],cB.errors=[...cB.errors,..._.blockingIssues];let cC=aZ.flatMap(a=>a.warnings.map(a=>({level:/结构化事实读取不足|结构化章节读取不足|兜底|片段/u.test(a)?"info":"warning",message:a,suggestion:"这是资料抽取诊断,不代表已抽取到的可靠参数不可用;生成时仍应优先使用绑定资料中的可靠参数。"}))).filter(a=>!de(a)),cD=aM(function(a,b,c){let d=[...a.errors.map(a=>({level:"error",message:a,suggestion:"请补充配置或资料后重新生成。"})),...a.warnings.map(a=>({level:"warning",message:a,suggestion:"建议人工确认或补充对应资料。"}))];return c.some(a=>/资料未提供|系统暂未从知识库确认/u.test(a.content))&&d.push({level:"warning",message:"存在系统暂未从知识库确认的章节内容",suggestion:"请检查项目角色配置、文件绑定顺序和事实抽取落位结果。"}),b.conflicts.length>0&&d.push(...b.conflicts.map(a=>({level:"warning",message:a,suggestion:"请根据当前模板绑定的角色、文件证据和用户要求复核取值口径。"}))),d}(cB,cz,C),function(a){let b=[];for(let c of a)0===c.evidenceCount?b.push({level:"error",message:`章节缺少证据:${c.title}`,suggestion:"请补充对应绑定材料或调整模板章节检索词。"}):c.readinessRate<.5&&b.push({level:"warning",message:`章节事实覆盖率较低:${c.title} ${Math.round(100*c.readinessRate)}%`,suggestion:"建议补充章节 requiredFacts 或绑定材料证据。"});return b}(cA),cC),cE=bW(aZ,z),cF=Date.now(),cH=(0,aD.V7)(C.map(a=>a.content).join("\n\n"));bK(N,bJ({type:"validation",roleId:"document-budget",status:"running",message:`正在进行全文预算校准:当前 ${cH} 字`,details:[`章节数:${C.length}`,`目标:${bE.targetChars||bE.targetPages||"按章节深度"}`],progress:{current:1,total:2,label:"预算校准"}},{subtitle:"文档预算"})),F(C);let cI=bF.enableDocumentBudgetExpansion?await I(()=>cS({template:z,chapters:C,budget:bE,promptTexts:ai,requirement:a.requirement,forbidDrawingImages:cE,signal:a.signal,onRoundProgress:(a,b)=>{C.splice(0,C.length,...a),bK(N,bJ({type:"validation",roleId:"document-budget",status:"running",message:`正在进行全文预算校准:第 ${b.round}/${b.maxRounds} 轮,当前 ${b.totalChars} 字,新增 ${b.addedChars} 字`,details:[`章节数:${a.length}`,`目标:${bE.targetChars||bE.targetPages||"按章节深度"}`],progress:{current:Math.min(b.round+1,b.maxRounds),total:b.maxRounds+1,label:"预算校准"}},{subtitle:"文档预算"})),F(C)}})):C;C.splice(0,C.length,...cI);let cM=C.map(a=>a.content).join("\n\n"),cN=dn(C,ch,cM);cN.patchedCount>0&&(C.splice(0,C.length,...cN.chapters),cD=[...cD,{level:"info",message:`已自动补写未落位事实 ${cN.patchedCount} 项`,suggestion:"补写仅使用本项目资料明确事实,未补写商务敏感信息或系统暂未确认内容。"}]);let cO=(0,aD.fW)(bE,C.map(a=>a.content).join("\n\n")),cP=[bE.targetChars?`目标 ${bE.targetChars} 字${bE.minChars||bE.maxChars?`(区间 ${bE.minChars||0}-${bE.maxChars||"∞"} 字)`:""}`:void 0,bE.targetPages?`目标 ${bE.targetPages} 页${bE.minPages||bE.maxPages?`(区间 ${bE.minPages||0}-${bE.maxPages||"∞"} 页)`:""}`:void 0].filter(Boolean).join(" / ")||"默认章节深度";bK(N,bJ({type:"validation",roleId:"document-budget",status:bE.maxChars&&cO.currentChars>bE.maxChars||bE.minChars&&cO.currentChars<bE.minChars?"fallback":"success",message:bL(`文档预算:当前 ${cO.currentChars} 字,新增 ${Math.max(0,cO.currentChars-cH)} 字,预计 ${cO.estimatedPages} 页;${cP}`,cF)},{subtitle:"文档预算"})),F(C);let cY=aH.filter(a=>"chapter_generation"===a.type&&"fallback"===a.status).length,c_=Math.max(0,bh.length-C.length),c1=[...cY>0?[{level:"info",message:`章节生成存在补充完善:${cY} 章`,suggestion:"已保留章节成果;如需更高质量可复核对应章节,但不阻断导出。"}]:[],...c_>0?[{level:"error",message:`部分章节生成失败:${c_} 章`,suggestion:aF.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。"}]:[]],c2=C.flatMap(a=>{let b=bh.find(b=>b.id===a.id);if(!b)return[];let c=cG({chapter:b,content:a.content,evidence:a.evidence||[]});return c.length>0?[{level:"warning",message:`${(0,Q.GQ)(a.title)} 小节知识库事实或量化参数落位可继续优化:${c.slice(0,5).join(";")}`,suggestion:"建议扩大本地知识库检索并定向补写对应小节,优先使用清单、图纸、招标要求中的原始事实、规格、数量、标准和工期参数。"}]:[]}),c3=(cD=aM(cD,c1,c2)).filter(a=>"error"===a.level&&(0,aE.Nz)(a)).length,c4=[...N];bK(c4,bJ({type:"reference",roleId:"knowledge-usage-report",status:"success",message:`资料使用报告:证据 ${av.length} 条,来源文件 ${cy.length} 份,结构化事实 ${ch.length} 条`,details:[`证据类型:${[...cx.entries()].map(([a,b])=>`${a} ${b}`).join(",")||"无"}`,`索引健康:可用切片 ${as.usableChunkCount} 条,待索引 ${as.pendingJobs} 个,向量 ${as.vectorStatus?.status||"unknown"}`,cN.patchedCount>0?`自动补写事实:${cN.patchedCount}/${cN.missingCount}`:`事实落位补写:0/${cN.missingCount}`]},{subtitle:"资料使用报告"})),bK(c4,bJ({type:"reference",roleId:"web-research-report",status:ax.enabled?"success":"skipped",message:ax.enabled?`联网增强:检索章节 ${new Set(ax.chapters).size} 个,查询 ${ax.queries.length} 个,使用公开资料 ${ax.evidenceCount} 条`:"联网增强未开启",details:ax.enabled?[`检索主题:${[...new Set(ax.queries)].join(";")||"无"}`,`过滤结果:${ax.filteredCount} 条`,"公开资料仅用于通用规范、政策、工艺和措施补充,不作为项目事实来源"]:["可在模型配置中开启联网增强"]},{subtitle:"联网增强报告"})),bK(c4,bJ({type:"validation",roleId:"document-workflow",status:c3>0?"failed":"success",message:`阻断 ${c3},错误 ${cB.errors.length},警告 ${cB.warnings.length}`},{subtitle:"最终规范校验"})),bK(c4,bJ({type:"formatting",roleId:"document-workflow",status:"success",message:"已生成正式排版 Markdown"})),bK(c4,bJ({type:"export_ready",roleId:"document-workflow",status:c3>0?"failed":"success",message:c3>0?"导出门禁未通过,请完成阻断问题修复后再导出":"已准备好导出 Markdown/HTML/DOCX/PDF"}));let c5={templateId:z.id,templateName:z.name,title:z.outputTitle,requirement:a.requirement||"",projectRoot:v,projectId:w,exportSettings:z.exportSettings,generationSettings:z.generationSettings,facts:b9,structuredFacts:ch,factsModel:cz,chapters:C,sources:cy,missingItems:[...new Set(aA)],validation:cB,validationIssues:cD,executionStages:c4,exportGate:{passed:0===c3,blockingIssues:cD.filter(a=>"error"===a.level&&(0,aE.Nz)(a)),checklist:[]},assets:[],partialChapters:C.map(a=>({id:a.id,title:a.title,chars:(0,aD.V7)(a.content),status:cW(a,bE.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:C,generatedAt:Date.now()},c6=aC(c5,{forbidDrawingImages:cE,promptRules:ag});if("1"!==process.env.DOCUMENT_ENABLE_POST_EXPORT_REVIEW){let b=aB(c6,C,{forbidDrawingImages:cE,promptRules:ag}).chapters.map(a=>{let b=bh.find(b=>b.id===a.id)||a;return{...a,content:dh(a.content,b)}}),c="",d=(a,b)=>aM(cD.filter(a=>!de(a)&&("error"!==a.level||!(0,aE.Nz)(a))),x({markdown:a,spec:Y,summary:W}),B({markdown:a,facts:ch,summary:W,profile:Z}),y(a,W),dc(a,ch),a2({markdown:a,chapters:b,factsModel:cz,template:z,promptBindings:P,promptDocumentRules:ag}),(0,aD.PE)(z.generationSettings||z.exportSettings,a).filter(a=>!(bE.minPages&&/低于目标页数/u.test(a.message))),(0,aD.ty)(bE,a)),e=[],f=()=>{var a;e=aN(d(c=db(c0(dd(aB(aC({...c5,chapters:b},{forbidDrawingImages:cE,promptRules:ag}),b,{forbidDrawingImages:cE,promptRules:ag}).markdown),ch),ch),b)),e=aN(d(c=dg(c,e).replace(/^##\s+(.+)$/gmu,(a,b)=>{let c=String(b||"").trim();return"目录"===c||/^第[一二三四五六七八九十百千万\d]+章\s+/u.test(c)?a:`### ${c}`}),b)),a=c,e=aN(d(c=e.some(a=>/小节内容补写未完成|小节只有标题或表格无正文|空小节/u.test(a.message))?`${a.trim()}
200
+
201
+ ### 小节执行说明补充
202
+
203
+ 对仅列示表格或说明不足的小节,现场实施时应结合本章管理目标补充执行要求。相关表格不是孤立清单,而是用于指导责任分工、资源投入、过程检查和验收复核的控制依据。项目部应在表格所列事项基础上明确责任人、检查频次、验收标准和整改闭环要求,确保计划、资源、质量、安全和资料管理形成连续管理链条。
204
+
205
+ 各专业工程师应依据招标文件、图纸设计说明、工程量清单和现场实际条件,对表格中的项目逐项核对,形成可实施的施工安排。涉及工期、质量、安全、材料、机械和劳动力的内容,应同步纳入周计划和日协调机制,确保表格内容能够转化为现场执行动作、检查记录和竣工资料。`:a,b)),e=aN(d(c=function(a,b){if(!b)return a;let c=b-(0,aD.V7)(a);return c<=0||c>1800?a:`${a.trim()}
206
+
207
+ ### 履约闭环补充要求
208
+
209
+ 为保证施工组织设计在实施阶段具备可检查、可追溯和可闭合的管理效果,项目部将在开工准备、样板确认、材料进场、工序交接、隐蔽验收、质量复核、安全巡查、进度纠偏和资料归档等环节同步建立责任清单。各专业负责人应围绕本项目已明确的工期、质量、安全文明施工、现场条件和招标响应要求,形成“计划交底、过程检查、问题整改、复核销项、资料留痕”的闭环机制。对影响关键线路、专业穿插、材料供应、机械进退场和成品保护的事项,及时组织专题协调并落实到责任岗位,确保本施工组织设计中的技术措施、资源计划和管理要求能够落到现场执行。
210
+
211
+ 实施过程中,项目经理部应将招标文件、图纸设计说明、工程量清单、现场踏勘条件和业主节点要求统一转化为周计划、日协调、专业交底和验收清单。对拆除、加固、装饰、安装、消防、弱电、暖通、给排水、电气等专业穿插作业,应明确作业面移交条件、材料到场状态、机械设备进退场安排、临时设施保障和安全文明施工责任。对发现的偏差,应在当日形成整改责任、完成时限和复核结论,避免问题跨工序传递。
212
+
213
+ 资料管理方面,应同步收集设计交底、图纸会审、深化确认、材料报审、样板验收、隐蔽验收、检验批验收、试验检测、质量整改、安全巡查、文明施工检查和竣工移交资料。各项记录应与现场实体进度保持一致,做到施工过程可追踪、质量责任可核查、整改闭环可验证、竣工交付可移交。通过上述闭环管理,确保工期目标、质量目标、安全文明目标和资源保障目标在施工全过程中持续受控。`}(c,bE.minChars),b))},g=a=>{b=a.map(a=>{let b=bh.find(b=>b.id===a.id)||a;return{...a,sections:a.sections||[],content:dh(a.content,b)}}),f()},h=()=>e.filter(df).map(a=>aP(a)).slice(0,24),i=async(d,e)=>{if(!bE.minChars||!bF.enableDocumentBudgetExpansion||(0,aD.V7)(c)>=bE.minChars||bE.maxChars&&(0,aD.V7)(c)>=bE.maxChars)return!1;let g=(0,aD.V7)(c);b=(await I(()=>cS({template:z,chapters:b,budget:bE,promptTexts:ai,requirement:a.requirement,forbidDrawingImages:cE,signal:a.signal,onRoundProgress:(a,c)=>{b=a.map(a=>({...a,sections:a.sections||[]})),bK(c4,bJ({type:"validation",roleId:d,status:"running",message:`${e}:第 ${c.round}/${c.maxRounds} 轮,当前 ${c.totalChars} 字,新增 ${c.addedChars} 字`},{subtitle:e})),F(b,c4)}}),c4)).map(a=>({...a,sections:a.sections||[]})),f();let h=(0,aD.V7)(c);return c4.push(bJ({type:"validation",roleId:d,status:h<bE.minChars?"fallback":"success",message:`${e}:当前 ${h} 字,新增 ${Math.max(0,h-g)} 字,目标下限 ${bE.minChars} 字`},{subtitle:e})),h>g},j=[];f();for(let d=0;d<5;d+=1){if((0,aG.Te)(a.signal),await i(`default-budget-repair-${d+1}`,0===d?"默认路径预算补齐":"默认路径预算再补齐"))continue;let f=h(),k=f.length>0&&f.every(a=>/正文篇幅低于目标字数|正文长度低于提示词要求/u.test(a));if(0===f.length||k)break;let l=await I(()=>bN(bG,"default-path-quality-repair",()=>b_({markdown:c,template:z,chapters:b,promptTexts:ai,requirement:a.requirement,issues:f,forbidDrawingImages:cE,strategy:bF,diagnostics:bG,signal:a.signal}),{issues:f.length,round:d+1}),c4);if(l.stage&&j.push({...l.stage,message:`${l.stage.message||"默认路径质量修复完成"};第 ${d+1} 轮,触发问题 ${f.length} 个`}),l.chapters===b)break;g(l.chapters);let m=aQ(f,e).slice(0,8);if(0===m.length)continue;let n=await I(()=>bN(bG,"default-path-quality-repair-escalation",()=>b_({markdown:c,template:z,chapters:b,promptTexts:ai,requirement:a.requirement,issues:m,forbidDrawingImages:cE,strategy:bF,diagnostics:bG,signal:a.signal}),{issues:m.length,round:d+1}),c4);n.chapters!==b&&g(n.chapters),j.push(bJ({type:"llm_review",roleId:`default-repair-verify-${d+1}`,status:e.some(a=>m.some(b=>aO(b)===aO(a)))?"fallback":"success",message:`修复后验证闭环完成:第 ${d+1} 轮升级修复 ${m.length} 个残留问题`,details:m},{subtitle:"修复后验证"}))}let k=(0,aE.Ai)(e,cz,b),l=[...c4,...j].map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:k.blockingIssues.length>0?"failed":"success",message:`阻断 ${k.blockingIssues.length},问题 ${e.length}`}:"export_ready"===a.type?{...a,status:k.passed?"success":"failed",message:k.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:a);l.push(bJ({type:"llm_review",roleId:"post-export-review",status:"skipped",message:"已跳过导出后的重型 LLM 复审;默认路径已执行本地硬规则校验与必要的精准局部修复;如需开启重型复审请设置 DOCUMENT_ENABLE_POST_EXPORT_REVIEW=1"},{subtitle:"导出后复审"}));let m=b.map(a=>({...a,evidence:J(a.evidence||[],{maxItems:12,maxChars:9e3,preservePinned:!0})}));return{...c5,chapters:m,validationIssues:e,exportGate:k,executionStages:l,partialChapters:b.map(a=>({id:a.id,title:a.title,chars:(0,aD.V7)(a.content),status:cW(a,bE.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:m,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:bG},markdown:c}}(0,aG.Te)(a.signal);let c7=C.map(a=>{let b=bY({chapter:bh.find(b=>b.id===a.id)||{id:a.id,title:a.title,purpose:"",queries:[],requiredFacts:[],sections:a.sections},content:a.content,missingFacts:a.missingFacts,targetWords:bE.chapterTargets.get(a.id)||1200}),c=b.some(a=>/缺少|空小节|只有标题|只有表格|正文篇幅明显低于目标|后台流程话术|占位|requiredFacts/u.test(a));return{chapterId:a.id,title:a.title,status:c?"fail":b.length>0?"warn":"pass",issues:b,suggestions:[],chars:(0,aD.V7)(a.content)}}),c8=c7.filter(a=>"pass"!==a.status).length,c9=bF.enableChapterReview&&c8>0;c9&&(bK(c4,bJ({type:"llm_review",roleId:"chapter-review",status:"running",message:`正在进行章节级质量审查:${c8}/${C.length} 章存在本地风险`,details:["仅对本地扫描发现风险的生成结果触发 LLM 审查,按风险章节自然并行"],progress:{current:1,total:3,label:"章节审查"}},{subtitle:"章节级质量审查"})),F(C,c4));let da=c9?await I(()=>bN(bG,"chapter-review",()=>cT({template:z,chapters:C,budget:bE,promptTexts:am||ai,requirement:a.requirement,strategy:bF,diagnostics:bG,signal:a.signal}),{chapters:C.length}),c4):{summaries:c7,stage:bJ({type:"llm_review",roleId:"chapter-review",status:"skipped",message:bF.enableChapterReview?"本地章节扫描未发现需要 LLM 章节审查的问题,已跳过":"当前策略未启用章节级 LLM 审查"},{subtitle:"章节级质量审查"})};c4.push(da.stage);let dj=da.summaries,dk=dj.filter(a=>"pass"!==a.status&&a.issues.length>0);if(dk.length>0){bK(c4,bJ({type:"llm_review",roleId:"chapter-review-repair",status:"running",message:`正在按章节审查结果就地修复:${dk.length} 章`,details:dk.map(a=>`${a.title}:${a.issues.slice(0,5).join(";")}`),progress:{current:1,total:dk.length,label:"章节就地修复"}},{subtitle:"章节就地修复"})),F(C,c4);let b=new Map,c=0,d=Math.max(1,dk.length||1);for(let e=0;e<dk.length;e+=d){(0,aG.Te)(a.signal);let f=dk.slice(e,e+d);for(let d of(await Promise.all(f.map(async b=>{let c=C.find(a=>a.id===b.chapterId);if(!c)return{chapterId:b.chapterId,content:void 0,appliedCount:0};try{let d=await bi(d=>bZ({template:z,chapter:c,issues:b.issues.slice(0,4),promptTexts:am||ai,requirement:a.requirement,forbidDrawingImages:cE,diagnostics:bG,signal:d}),9e4,a.signal);return{chapterId:b.chapterId,content:d?.content,appliedCount:d?.appliedCount||0}}catch{return{chapterId:b.chapterId,content:void 0,appliedCount:0}}}))))d.content&&b.set(d.chapterId,d.content),c+=d.appliedCount}let e=0,f=new Set;for(let a=0;a<C.length;a+=1){let c=b.get(C[a].id);c&&c!==C[a].content&&(C[a]={...C[a],content:c},f.add(C[a].id),e+=1)}e>0&&(dj=dj.map(a=>f.has(a.chapterId)?{...a,status:"warn",issues:[],suggestions:[`已按章节审查结果应用局部修复,修复前问题已移交最终校验复核。`],chars:(0,aD.V7)(C.find(b=>b.id===a.chapterId)?.content||"")}:a),c6=aC({...c5,chapters:C,validationIssues:cD,executionStages:c4},{forbidDrawingImages:cE,promptRules:ag})),c4.push(bJ({type:"llm_review",roleId:"chapter-review-repair",status:"success",message:`章节就地修复完成:修复 ${e} 章,应用 ${c} 个 patch`},{subtitle:"章节就地修复"})),F(C,c4)}if(c9){let a=dj.filter(a=>"pass"!==a.status&&a.issues.length>0).map(a=>({level:"fail"===a.status?"error":"warning",message:`${a.title} 章节审查:共 ${a.issues.length} 个问题;${a.issues.join(";")||"存在质量风险"}`,suggestion:a.suggestions.join(";")||"请复核章节事实覆盖、结构完整性和角色证据覆盖。"}));cD=aM(cD,a)}let dl=bF.enableGlobalReview&&(c9||cD.some(a=>/事实一致性|项目污染|章节缺失|结构/u.test(a.message)));dl&&(bK(c4,bJ({type:"llm_review",roleId:"global-consistency-review",status:"running",message:"正在进行全局一致性审查",details:["仅在章节审查或本地校验发现跨章节风险时触发"],progress:{current:2,total:3,label:"全局审查"}},{subtitle:"全局一致性审查"})),F(C,c4));let dy=dl?await I(()=>bN(bG,"global-consistency-review",()=>cU({template:z,chapters:C,chapterReviews:dj,promptTexts:am||ai,requirement:a.requirement,projectContext:bn,diagnostics:bG,signal:a.signal}),{chapters:C.length}),c4):{issues:[],stage:bJ({type:"llm_review",roleId:"global-consistency-review",status:"skipped",message:bF.enableGlobalReview?"未发现需要 LLM 全局一致性审查的跨章节风险,已跳过":"当前策略未启用全局一致性审查"},{subtitle:"全局一致性审查"})};c4.push(dy.stage),cD=aM(cD,dy.issues.map(a=>({level:"warning",message:`全局一致性审查:${a}`,suggestion:"请复核跨章节术语、关键事实、范围边界和上下文一致性。"}))),F(C,c4);let dz=C.filter(a=>0===a.evidence.length||a.missingFacts.length>0||(0,aD.V7)(a.content)<Math.floor(.7*(bE.chapterTargets.get(a.id)||1200))||dj.some(b=>b.chapterId===a.id&&"fail"===b.status)||bY({chapter:bh.find(b=>b.id===a.id)||{id:a.id,title:a.title,purpose:"",queries:[],requiredFacts:[],sections:a.sections},content:a.content,missingFacts:a.missingFacts,targetWords:bE.chapterTargets.get(a.id)||1200}).length>0),dA=c3>0||dy.issues.length>0||dj.some(a=>"fail"===a.status)||cD.some(a=>/事实一致性|项目污染|章节生成存在兜底|章节生成失败|阻断/u.test(a.message)),dB=bF.enableFinalQualityReview&&(dA||dz.length>Math.max(3,Math.floor(.35*C.length))),dC=Date.now();dB&&(bK(c4,bJ({type:"llm_review",roleId:"llm-review",status:"running",message:`正在进行最终质量审查:风险章节 ${dz.length} 个`,details:["只检查结构、事实一致性、目录层级和正式文档风格,不重写正文"],progress:{current:3,total:3,label:"质量审查"}},{subtitle:"最终质量审查"})),F(C,c4));let dD=J(av,{maxItems:Math.max(32,8*bh.length),maxChars:Math.max(36e3,6e3*bh.length),preservePinned:!0}),dE=dB?await I(()=>cV({template:z,spec:Y,markdown:c6,evidence:dD,promptTexts:am||ai,projectContext:bn,requirement:a.requirement,diagnostics:bG,signal:a.signal}),c4):{markdown:c6,stage:{type:"llm_review",roleId:"llm-review",status:dz.length>0?"fallback":"success",message:dz.length>0?`本地风险扫描发现 ${dz.length} 个低/中风险章节,未达到最终 LLM 审查触发阈值,保留为待复核 warning`:"本地风险扫描未发现需要 LLM 最终质量审查的章节"}};dE.stage.message=bL(dE.stage.message||"LLM 审查完成",dC),(0,aG.Te)(a.signal);let dF=dg(aB(dE.markdown===c6?aC({...c5,validationIssues:cD,exportGate:c5.exportGate,executionStages:c4},{forbidDrawingImages:cE,promptRules:ag}):dE.markdown,C,{forbidDrawingImages:cE,promptRules:ag}).markdown,cD),dG=az(dF,z).map(a=>aP(a)),dH=(0,aE.bM)(dF).map(a=>aP(a)),dI=(0,aE.mR)(dF,z).map(a=>aP(a)),dJ=(0,aE.N1)(dF,cz).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dK=ag.forbidToc?[]:[...(0,aE.gN)(dF),...(0,aE.f8)(dF)].map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dL=(0,aE.k0)(dF).map(a=>aP(a)),dM=(0,aE.qK)(dF,C).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dN=(b={markdown:dF,chapters:C,factsModel:cz},[...(0,aE.ji)(b.chapters),...(0,aE.i0)(b.chapters),...(0,aE.ST)(b.chapters),...(0,aE.xX)(b.chapters),...(0,aE.qm)(b.markdown,b.factsModel),...aJ(b.markdown,b.factsModel),...aK(b.markdown),...aL(b.chapters),...(0,aE.vY)(b.markdown,b.factsModel)]).map(a=>aP(a)),dO=(0,aE.iC)(dF).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dP=(0,aE.BV)(dF).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dQ=function(...a){return a.flat()}(dG,dH,dI,dJ,dK,dL,dM,dN,dO,dP,(0,aE.Ty)(C).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),al(dF).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`)),dR=new Set(dM),dS=Date.now(),dT=dQ.filter(a=>!dR.has(a));bK(c4,bJ({type:"llm_review",roleId:"quality-repair",status:dT.length>0?"running":"success",message:dT.length>0?`正在进行精准质量修复:${dT.length} 个问题`:"未发现需要精准修复的问题",details:dT,progress:{current:1,total:Math.max(1,dT.length),label:"质量修复"}},{subtitle:"精准质量修复"})),F(C,c4);let dU=await I(()=>bN(bG,"local-patch-quality-repair",()=>b_({markdown:dF,template:z,chapters:C,promptTexts:ai,requirement:a.requirement,issues:dT,forbidDrawingImages:cE,strategy:bF,diagnostics:bG,signal:a.signal}),{issues:dT.length}),c4);dU.stage&&(dU.stage.message=bL(dU.stage.message||"质量修复完成",dS)),(0,aG.Te)(a.signal);let dV=dU.stage?[...c4,dE.stage,dU.stage]:[...c4,dE.stage],dW=dU.chapters,dX=aC({...c5,chapters:dW,validationIssues:cD,exportGate:c5.exportGate,executionStages:c4},{forbidDrawingImages:cE,promptRules:ag}),dY=aQ(dT,[...az((c={markdown:dX=dg(dX,cD),chapters:dW,template:z,factsModel:cz}).markdown,c.template),...(0,aE.bM)(c.markdown),...(0,aE.k0)(c.markdown),...(0,aE.ji)(c.chapters),...(0,aE.i0)(c.chapters),...(0,aE.ST)(c.chapters),...(0,aE.xX)(c.chapters),...(0,aE.qm)(c.markdown,c.factsModel),...aJ(c.markdown,c.factsModel),...aK(c.markdown),...aL(c.chapters),...(0,aE.vY)(c.markdown,c.factsModel)]).slice(0,8);if(dY.length>0){let b=await I(()=>bN(bG,"local-patch-quality-repair-escalation",()=>b_({markdown:dX,template:z,chapters:dW,promptTexts:ai,requirement:a.requirement,issues:dY,forbidDrawingImages:cE,strategy:bF,diagnostics:bG,signal:a.signal}),{issues:dY.length}),dV);dW=b.chapters,dX=dg(dX=aC({...c5,chapters:dW,validationIssues:cD,exportGate:c5.exportGate,executionStages:c4},{forbidDrawingImages:cE,promptRules:ag}),cD),dV=b.stage?[...dV,{...b.stage,roleId:"quality-repair-escalation",message:`修复后验证发现残留问题,已升级修复 ${dY.length} 个问题`}]:dV}let dZ=(0,aE.yw)(dX,dW.map(a=>({...a,sections:aj(a.content)}))).filter(a=>"empty"===a.reason||"table_only"===a.reason);if(dZ.length>0){let b=Date.now();bK(dV,bJ({type:"llm_review",roleId:"section-content-repair",status:"running",message:`正在补写空洞小节:${dZ.length} 个问题`,details:dZ.map(a=>a.message),progress:{current:1,total:dZ.length,label:"小节补写"}},{subtitle:"小节内容补写"})),F(dW,dV);let c=[...dW];for(let b=0;b<dW.length;b+=Math.max(1,dW.length||1)){(0,aG.Te)(a.signal);let d=dW.slice(b,b+Math.max(1,dW.length||1));(await Promise.all(d.map(async b=>{let c=dZ.filter(a=>a.chapterTitle===b.title);if(0===c.length)return b;let d=bh.find(a=>a.id===b.id||a.title===b.title)||{id:b.id,title:b.title,purpose:"",queries:[],requiredFacts:[],sections:b.sections},e=bE.chapterTargets.get(b.id)||1200,f=bT(d,bf);try{let g=await bi(g=>cQ({template:z,chapter:d,content:b.content,evidence:b.evidence,missingFacts:b.missingFacts,promptTexts:ai,projectContext:bn,requirement:a.requirement,roleContext:bV(aZ,d,f),targetWords:e,forbidDrawingImages:cE,forcedSections:c,signal:g}),Math.min(3e5,Math.max(9e4,9e4*c.length)),a.signal);if(!g)return b;let h=aj(g);return{...b,content:g,markdown:g,sections:h}}catch{return b}}))).forEach((a,d)=>{c[b+d]=a})}dW=c;let d=(0,aE.qK)(aC({...c5,chapters:dW,validationIssues:cD,exportGate:c5.exportGate,executionStages:c4},{forbidDrawingImages:cE,promptRules:ag}),dW);bK(dV,bJ({type:"llm_review",roleId:"section-content-repair",status:d.length>0?"fallback":"success",message:bL(d.length>0?`小节补写后仍存在 ${d.length} 个内容缺口`:"小节内容补写完成",b),details:d.map(a=>a.message)},{subtitle:"小节内容补写"})),F(dW,dV)}let d$=(0,aD.fW)(bE,dW.map(a=>a.content).join("\n\n"));if(bF.enableDocumentBudgetExpansion&&bE.minChars&&d$.currentChars<Math.floor(.9*bE.minChars)&&(!bE.maxChars||d$.currentChars<bE.maxChars)){let b=Date.now(),c=d$.currentChars;bK(dV,bJ({type:"validation",roleId:"document-budget-repair",status:"running",message:`正在进行修复后预算补齐:当前 ${c} 字`,details:[`目标下限:${bE.minChars} 字`,`章节数:${dW.length}`],progress:{current:1,total:2,label:"预算补齐"}},{subtitle:"修复后预算补齐"})),F(dW,dV),dW=await I(()=>cS({template:z,chapters:dW,budget:bE,promptTexts:ai,requirement:a.requirement,forbidDrawingImages:cE,signal:a.signal}),dV);let d=(0,aD.fW)(bE,dW.map(a=>a.content).join("\n\n"));bK(dV,bJ({type:"validation",roleId:"document-budget-repair",status:bE.minChars&&d.currentChars<bE.minChars?"fallback":"success",message:bL(`修复后预算补齐:当前 ${d.currentChars} 字,新增 ${Math.max(0,d.currentChars-c)} 字,预计 ${d.estimatedPages} 页`,b)},{subtitle:"修复后预算补齐"}))}let d_=aB(aC({...c5,chapters:dW,validationIssues:cD,exportGate:c5.exportGate,executionStages:c4},{forbidDrawingImages:cE,promptRules:ag}),dW,{forbidDrawingImages:cE,promptRules:ag}),d0=d_.chapters,d1=d_.markdown,d2=(0,aE.yw)(d1,d0.map(a=>({...a,sections:aj(a.content)}))).filter(a=>"empty"===a.reason||"table_only"===a.reason);if(d2.length>0){let b=Date.now();bK(dV,bJ({type:"llm_review",roleId:"final-section-content-repair",status:"running",message:`最终结构化后补写残留空洞小节:${d2.length} 个问题`,details:d2.map(a=>a.message),progress:{current:1,total:d2.length,label:"最终小节补写"}},{subtitle:"最终小节内容补写"})),F(d0,dV);let c=[...d0];for(let b=0;b<d0.length;b+=Math.max(1,d0.length||1)){(0,aG.Te)(a.signal);let d=d0.slice(b,b+Math.max(1,d0.length||1));(await Promise.all(d.map(async b=>{let c=d2.filter(a=>a.chapterTitle===b.title);if(0===c.length)return b;let d=bh.find(a=>a.id===b.id||a.title===b.title)||{id:b.id,title:b.title,purpose:"",queries:[],requiredFacts:[],sections:b.sections},e=bE.chapterTargets.get(b.id)||1200,f=bT(d,bf);try{let g=await bi(g=>cQ({template:z,chapter:d,content:b.content,evidence:b.evidence,missingFacts:b.missingFacts,promptTexts:ai,projectContext:bn,requirement:a.requirement,roleContext:bV(aZ,d,f),targetWords:e,forbidDrawingImages:cE,forcedSections:c,signal:g}),Math.min(3e5,Math.max(9e4,9e4*c.length)),a.signal);if(!g)return b;let h=aj(g);return{...b,content:g,markdown:g,sections:h}}catch{return b}}))).forEach((a,d)=>{c[b+d]=a})}d0=(d_=aB(aC({...c5,chapters:c,validationIssues:cD,exportGate:c5.exportGate,executionStages:c4},{forbidDrawingImages:cE,promptRules:ag}),c,{forbidDrawingImages:cE,promptRules:ag})).chapters,d1=d_.markdown;let d=(0,aE.qK)(d1,d0);bK(dV,bJ({type:"llm_review",roleId:"final-section-content-repair",status:d.length>0?"fallback":"success",message:bL(d.length>0?`最终补写后仍存在 ${d.length} 个内容缺口`:"最终小节内容补写完成",b),details:d.map(a=>a.message)},{subtitle:"最终小节内容补写"})),F(d0,dV)}d0=(d_=aB(aC({...c5,chapters:d0,validationIssues:cD,exportGate:c5.exportGate,executionStages:c4},{forbidDrawingImages:cE,promptRules:ag}),d0,{forbidDrawingImages:cE,promptRules:ag})).chapters,d1=db(c0(d_.markdown,ch),ch);let d3=bH({facts:ch,markdown:d1});d3.size>0&&c4.push({type:"fact_extraction",roleId:"canonical-facts",status:"success",message:`已决策可信基础事实 ${d3.size} 项`,details:[...d3.values()].map(a=>`${a.label}=${a.value}(${a.source},confidence=${a.confidence})`).slice(0,12)});let d4=[...dG];cD=aM((0,aE.kQ)(Y,[...cD,...d4.map(a=>({level:"warning",message:a}))],cz,d0,d1,V,P),x({markdown:d1,spec:Y,summary:W}),B({markdown:d1,facts:ch,summary:W,profile:Z}),y(d1,W),dc(d1,ch),a2({markdown:d1,chapters:d0,factsModel:cz,template:z,promptBindings:P,promptDocumentRules:ag}));let d5=dn(d0,ch,d1);d5.patchedCount>0&&(d0=d5.chapters.map(a=>({...a,sections:a.sections||[]})),cD=[...cD,{level:"info",message:`最终审查阶段已补写未落位事实 ${d5.patchedCount} 项`,suggestion:"补写仅使用本项目资料明确事实,未补写商务敏感信息或系统暂未确认内容。"}],d1=aB(aC({...c5,chapters:d0,validationIssues:cD,exportGate:c5.exportGate,executionStages:c4},{forbidDrawingImages:cE,promptRules:ag}),d0,{forbidDrawingImages:cE,promptRules:ag}).markdown),cD=aM(cD,function(a,b,c={}){return dm(a,b,{maxItems:c.maxIssues}).map(a=>({level:"warning",message:`已确认事实未在正文中落位:${a.label}=${a.value}`,suggestion:"请将该事实自然写入对应章节或小节,不得改变原始数值和单位。"}))}(d1,[...ch,...cz.preciseFacts],{maxIssues:30})),d1=aB(d1,d0,{forbidDrawingImages:cE,promptRules:ag}).markdown;let d6=(0,aD.ty)(bE,d1),d7=(0,aD.PE)(z.generationSettings||z.exportSettings,d1).filter(a=>!(bE.minPages&&/低于目标页数/u.test(a.message)));cD=aN(aM(cD,d7,d6,az(d1,z),ay(d1,ag)));let d8=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(a3[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:d0,templateChapters:bh,factsModel:cz,evidence:av}),d9=function(a,b){let c=new Set,d=[];for(let e of[...b.project,...b.schedule,...b.quality,...b.safety,...b.resources,...b.preciseFacts,...b.bills,...b.drawings,...b.rules,...b.specifications]){let b=(0,aG.lG)(e.value).replace(/\s+/gu," ").trim(),f=e.fieldName||e.key||e.fieldId||"资料事实",g=`${f}:${b}`;!b||c.has(g)||(c.add(g),d.push({label:f,value:b,sourceFile:e.sourceFile,status:!function(a,b){let c=a4(a),d=a4(b);return!!(!d||d.length<2||c.includes(d))||(b.match(/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年|万元|元|平方米|㎡|m²|立方米|m³|米|m|mm|cm|台|套|人|项|%|MPa|kPa)?/giu)||[]).some(a=>a4(a).length>=2&&c.includes(a4(a)))}(a,b)?"unplaced":"used",confidence:e.confidence}))}return d}(d1,cz),ea=(p={chapters:d0,templateChapters:bh,factsModel:cz}).chapters.map(a=>{let b=p.templateChapters.find(b=>b.id===a.id||b.title===a.title),c=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,aD.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,b),d=c.filter(a=>a.passed).length;return{chapterId:a.id,title:a.title,score:c.length?Math.round(d/c.length*100):100,checks:c,action:d===c.length?"章节覆盖完整。":"系统需补齐章节结构、证据绑定、专业控制点和跨章依赖。"}});cD=aN(aM(cD,d8.score>=85?[]:[{level:"warning",message:`系统知识库覆盖确认率偏低:${d8.score}%`,suggestion:`${d8.remediation} 未确认事实域:${d8.unconfirmedDomains.map(a=>a3[a]||a).join("、")||"无"}`}],function(a,b={}){return a.filter(a=>"unplaced"===a.status&&/项目|工程|编号|地点|规模|范围|工期|质量|安全|资源|材料|设备|验收|\d/u.test(`${a.label}${a.value}`)).slice(0,b.maxIssues||20).map(a=>({level:"warning",message:`已确认知识库事实未落位:${a.label}=${a.value}`,suggestion:`请将该事实落位到对应章节,并保持来源 ${a.sourceFile||"结构化事实主表"} 的原始口径。`}))}(d9,{maxIssues:20}),ea.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("、")}`})),aw.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.requiredFactCovered}/${a.requiredFactTotal},小节覆盖 ${a.sectionCovered}/${a.sectionTotal}。`}))));let eb=(0,aE.Ai)(cD,cz,d0),ec=a6({markdown:d1,chapters:d0,issues:cD,knowledgeCoverage:d8,factTraces:d9,chapterCoverage:ea}),ed=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).slice(0,10);d.length>0&&b.push({priority:"high",title:"事实落位修复",action:`将 ${d.length} 项已确认知识库事实写入对应章节,保持原始数值、单位和来源口径。`}),a.knowledgeCoverage&&a.knowledgeCoverage.score<95&&b.push({priority:"medium",title:"知识库确认覆盖修复",action:"扩大本地知识库检索范围,执行事实补抽和章节证据重分配;这是系统检索、抽取、落位问题,不要求用户追加资料。"});let e=(a.chapterCoverage||[]).filter(a=>a.score<80).slice(0,8);return e.length>0&&b.push({priority:"medium",title:"章节覆盖修复",action:`补齐低覆盖章节:${e.map(a=>a.title).join("、")}。`}),a.qualityReport&&!a.qualityReport.passed&&b.push({priority:"medium",title:"交付置信度修复",action:a.qualityReport.actions.join(" ")}),b}({issues:cD,qualityReport:ec,knowledgeCoverage:d8,factTraces:d9,chapterCoverage:ea});cD=aN(aM(cD,(q=ec).passed?[]:[{level:"warning",message:`交付置信度未达目标:${q.deliveryProbability}% / ${q.target}%`,suggestion:q.actions.join(" ")}],ed.filter(a=>"high"===a.priority).map(a=>({level:"warning",message:`修复策略待执行:${a.title}`,suggestion:a.action})))),eb=(0,aE.Ai)(cD,cz,d0),ec=a6({markdown:d1,chapters:d0,issues:cD,knowledgeCoverage:d8,factTraces:d9,chapterCoverage:ea});let ee=[{key:"export-gate",label:"导出门禁",passed:(r={exportGate:eb,qualityReport:ec,repairStrategies:ed}).exportGate.passed,message:r.exportGate.passed?"导出门禁通过":`仍有 ${r.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:r.qualityReport.passed,message:`${r.qualityReport.deliveryProbability}% / ${r.qualityReport.target}%`},{key:"factuality",label:"事实准确性",passed:r.qualityReport.scores.factuality>=85,message:`${r.qualityReport.scores.factuality}/100`},{key:"evidence-coverage",label:"知识库证据覆盖",passed:r.qualityReport.scores.evidenceCoverage>=85,message:`${r.qualityReport.scores.evidenceCoverage}/100`},{key:"professional-depth",label:"专业深度",passed:r.qualityReport.scores.professionalDepth>=80,message:`${r.qualityReport.scores.professionalDepth}/100`},{key:"repair-strategies",label:"修复策略",passed:0===r.repairStrategies.filter(a=>"high"===a.priority).length,message:r.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}],ef=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:bG}),eg=eb.blockingIssues.length,eh=(0,aE.Ff)(cD);bG.quality.blockingCount+=eh.blocking,bG.quality.importantCount+=eh.important,bG.quality.minorCount+=eh.minor;let ei=dV.map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:eg>0?"failed":"success",message:`阻断 ${eg},问题 ${cD.length}`}:"export_ready"===a.type?{...a,status:eb.passed?"success":"failed",message:eb.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:a);ei.push(bJ({type:"validation",roleId:"document-delivery-score",status:ec.passed?"success":"fallback",message:ec.summary,details:ec.actions},{subtitle:"交付评分"})),ei.push(bJ({type:"reference",roleId:"knowledge-coverage",status:d8.score>=85?"success":"fallback",message:`知识库确认覆盖率:${d8.score}%(证据 ${d8.evidenceCount} 条,文件 ${d8.confirmedFiles} 份)`,details:[d8.remediation]},{subtitle:"知识库覆盖"})),ei.push(bJ({type:"validation",roleId:"document-review-checklist",status:ee.every(a=>a.passed)?"success":"fallback",message:`交付复核清单:通过 ${ee.filter(a=>a.passed).length}/${ee.length}`,details:ee.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let ej=[...bG.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(",");ei.push(bJ({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${bG.llm.calls} 次,失败 ${bG.llm.failures} 次,峰值并行 ${bG.llm.maxActive},检索 ${bG.evidence.searchQueries} 次/${Math.round(bG.evidence.searchMs/1e3)} 秒,证据上下文 ${bG.evidence.contextChars} 字,噪声过滤 ${bG.evidence.filteredNoise} 条,质量问题 阻断${bG.quality.blockingCount}/重要${bG.quality.importantCount}/轻微${bG.quality.minorCount}${ej?`,Top耗时:${ej}`:""}`},{subtitle:"后台诊断"}));let ek=d0.map(a=>({...a,evidence:J(a.evidence||[],{maxItems:12,maxChars:9e3,preservePinned:!0})}));return{...{...c5,chapters:ek,validationIssues:cD,exportGate:eb,executionStages:ei,partialChapters:d0.map(a=>({id:a.id,title:a.title,chars:(0,aD.V7)(a.content),status:cW(a,bE.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:ek,reviewMetadata:{chapterSummaries:dj,globalIssues:dy.issues,diagnostics:bG,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:z,chapters:bh,requirement:a.requirement}),knowledgeCoverage:d8,factTraces:d9,chapterCoverage:ea,retrievalCoverage:aw,qualityReport:ec,repairStrategies:ed,reviewChecklist:ee,workflowVersion:a7,telemetry:ef}},markdown:d1}}async function dz(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,h.aY)());if(!f)throw Error("No knowledge base project found");let g=(0,h.Qh)(),i=(0,d.Vh)(b),k=b2(f,i),l=(0,j.XB)("file"),m=new Map(i.flatMap(a=>b0(f,a.filePath).map(b=>[b,a.roleId]))),n=new Map(i.flatMap(a=>b0(f,a.filePath).map(b=>[b,l.find(b=>b.id===a.roleId)?.processingType||"reference"]))),o=dx(await g.getProject(f),[...k],a.maxEvidencePerChapter),p=[],q=[...k].filter(Boolean).sort(),r=dr(c,c.queries,[]),s=ds(c,[]);for(let a of r.slice(0,s)){let b=await g.search(f,a,{scope:"project",filters:{filePaths:q},limit:Math.min(o,12),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});p.push(...b.results.filter(a=>b1(f,a.filePath,k)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:m.get(a.filePath),processingType:n.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let t=dq(c,p.filter(a=>b1(f,a.filePath,k)),{maxItems:dt(o,c),maxChars:16e3,preservePinned:!0}),u=a.currentMarkdown||"",v=new Set(a.existingFacts??[]),w=c.requiredFacts.filter(a=>!v.has(a)&&!t.some(b=>(0,E.Lk)(b,a))),x=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",u?`> 当前文档上下文摘要:${u.replace(/\s+/gu," ")}`:"",t.length>0?`本章根据知识库资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`:"系统暂未检索到足够证据,建议扩大本地知识库检索后复核。","",t.length>0?"### 资料依据":"",...t.map(K),"",w.length>0?"### 待确认事项":"",...w.map(a=>`- ${a}:建议扩大本地知识库检索、事实补抽或人工复核系统落位结果。`)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:x,evidence:t,missingFacts:w}}},44533:(a,b,c)=>{c.d(b,{Qh:()=>l,VS:()=>p,Yy:()=>o,aY:()=>n});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021);let j=null;function k(){return g.join(h.homedir(),".customize-agent")}function l(){return j||(j=new d.MultiProjectManager(k())),j}function m(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))&&(b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function n(){let a=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(a&&i.existsSync(a)&&!m(a))return g.resolve(a);let b=function(){let a=g.join(k(),"projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!m(a))}finally{b.close()}}();return b.length>0?b[0]:process.env.INIT_CWD&&!m(process.env.INIT_CWD)?process.env.INIT_CWD:g.resolve(process.cwd(),"../..")}function o(a,b={}){let c=new Map;for(let b of function(a){let b=g.join(h.homedir(),".customize-agent","projects",(0,d.computeProjectId)(g.resolve(a)),"kb.db");if(!i.existsSync(b))return[];let c=new d.IndexStateStore(b);try{return c.listRecords().map(a=>({...a,matchedBy:"metadata"}))}finally{c.close()}}(a))c.set(b.relativePath,b);for(let b of function(a){let b=g.join(a,"knowledgeBase");if(!i.existsSync(b))return[];let c=[],d=a=>{for(let e of i.readdirSync(a,{withFileTypes:!0})){let f=g.join(a,e.name);if(e.isDirectory()){d(f);continue}if(e.name.endsWith(".source.txt"))continue;let h=i.statSync(f),j=g.relative(b,f).split(g.sep).join("/");c.push({relativePath:j,category:j.includes("表格数据/")?"spreadsheet":j.includes("图片素材/")?"image":j.includes("图纸文件/")?"cad":j.includes("文档资料/")?"document":"other",format:g.extname(j).slice(1).toLowerCase()||"text",contentHash:"",fileSize:h.size,mtime:h.mtimeMs,chunkCount:0,collectionName:"",indexedAt:0,lastVerifiedAt:0,status:"disk",matchedBy:"disk"})}};return d(b),c}(a)){let a=c.get(b.relativePath);c.set(b.relativePath,a?{...a,fileSize:b.fileSize,mtime:b.mtime,matchedBy:"metadata"}:b)}return Array.from(c.values()).filter(a=>!b.category||a.category===b.category).sort((a,b)=>b.mtime-a.mtime||a.relativePath.localeCompare(b.relativePath,"zh-CN"))}async function p(a,b={}){let c=(b.query||"").trim(),d=Math.max(1,Math.min(500,b.limit??50)),e=new Map,f=o(a,{category:b.category});for(let a of f)(!c||`${a.relativePath}
200
214
  ${a.category}
201
215
  ${a.format}
202
216
  ${a.status}`.toLowerCase().includes(c.toLowerCase()))&&e.set(a.relativePath,{...a,matchedBy:c?"path":a.matchedBy});if(c&&!1!==b.includeContent)try{for(let b of(await l().search(a,c,{limit:Math.max(20,d)})).results){let a=b.filePath,c=e.get(a)||f.find(b=>b.relativePath===a);e.set(a,{...c||{relativePath:a,category:"content",format:"knowledge",fileSize:0,mtime:0,chunkCount:0,indexedAt:0,lastVerifiedAt:0,status:"active"},matchedBy:"content",score:b.score})}}catch{}let g=Array.from(e.values()).sort((a,b)=>{let c=a=>"content"===a.matchedBy?3:"path"===a.matchedBy?2:+("metadata"===a.matchedBy);return c(b)-c(a)||(b.score??0)-(a.score??0)||b.mtime-a.mtime||a.relativePath.localeCompare(b.relativePath,"zh-CN")});return{files:g.slice(0,d),total:g.length}}},52511:(a,b,c)=>{c.d(b,{Bh:()=>B,C1:()=>H,DX:()=>I,N6:()=>J,QJ:()=>A,Vh:()=>O,bV:()=>E,bj:()=>y,dU:()=>x,h0:()=>D,jG:()=>z,wR:()=>L,xm:()=>C,zY:()=>N});var d=c(73024),e=c(76760),f=c(48161),g=c(77598),h=c(44533),i=c(25840),j=c(8753),k=c(6444),l=c(85441),m=c(92808),n=c(81125),o=c(56942);function p(){let a=e.join(f.homedir(),".customize-agent");return d.mkdirSync(a,{recursive:!0}),a}function q(){return e.join(p(),"document-templates.json")}function r(a){return{...a,id:a.id.replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80)||`template-${Date.now()}`,name:a.name||"未命名模板",description:a.description||"",category:a.category||"自定义",outputTitle:a.outputTitle||a.name||"文档",projectRoleConfigId:a.projectRoleConfigId||void 0,chapters:Array.isArray(a.chapters)&&a.chapters.length>0?a.chapters.map((a,b)=>({id:(a.id||`chapter-${b+1}`).replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80),title:a.title||`第 ${b+1} 章`,purpose:a.purpose||"",queries:Array.isArray(a.queries)?a.queries.filter(Boolean):[],requiredFacts:Array.isArray(a.requiredFacts)?a.requiredFacts.filter(Boolean):[],sections:Array.isArray(a.sections)?a.sections.filter(Boolean):[],tableSections:Array.isArray(a.tableSections)?a.tableSections.filter(Boolean):[],tableRequirements:Array.isArray(a.tableRequirements)?a.tableRequirements.filter(Boolean):[],pinnedEvidenceFilePaths:Array.isArray(a.pinnedEvidenceFilePaths)?a.pinnedEvidenceFilePaths.filter(Boolean):[]})):[{id:"document",title:a.outputTitle||a.name||"文档",purpose:a.description||"",queries:[],requiredFacts:[]}],exportSettings:a.exportSettings,generationSettings:a.generationSettings,promptIds:Array.isArray(a.promptIds)?a.promptIds.filter(Boolean):[],boundFilePaths:Array.isArray(a.boundFilePaths)?a.boundFilePaths.filter(Boolean):[],promptBindings:Array.isArray(a.promptBindings)?a.promptBindings.filter(a=>a.promptId&&a.roleId):Array.isArray(a.promptIds)?a.promptIds.filter(Boolean).map(a=>({promptId:a,roleId:"chapter_generation"})):[],fileBindings:Array.isArray(a.fileBindings)?a.fileBindings.filter(a=>a.filePath&&a.roleId):Array.isArray(a.boundFilePaths)?a.boundFilePaths.filter(Boolean).map(a=>({filePath:a,roleId:"reference"})):[],builtIn:!1}}function s(){try{let a=q();if(!d.existsSync(a))return[];return JSON.parse(d.readFileSync(a,"utf-8")).map(r)}catch{return[]}}function t(a){d.writeFileSync(q(),JSON.stringify(a.map(r),null,2),"utf-8")}function u(a){return(0,g.createHash)("sha256").update(a).digest("hex").slice(0,12)}function v(a){return a.replace(/\s+/gu," ").trim().slice(0,160)}function w(a){let b=function(){try{let a=JSON.parse(d.readFileSync(e.join(p(),"prompts.json"),"utf-8"));return Array.isArray(a.customPrompts)?a.customPrompts:[]}catch{return[]}}();if(a.startsWith("custom:")){let c=b.find(b=>b.id===a);return c?{id:a,name:c.name,content:c.content,source:"custom"}:void 0}if(a.startsWith("file:")){let b=a.slice(5);if(d.existsSync(b))return{id:a,name:e.basename(e.dirname(b))||b,content:d.readFileSync(b,"utf-8"),source:"file"}}}function x(a=[]){if(0===a.length)return[];let b=[];for(let c of a){let a=w(c.promptId);a&&b.push({...a,roleId:c.roleId,contentHash:u(a.content),contentPreview:v(a.content)})}return b}function y(a){let b=K(a),c=(0,i.XB)("prompt"),d=N(a),e=[],f=[];if(b)for(let a of b.promptRoles){let b=c.find(b=>b.id===a.roleId);if(!b){e.push(a.roleId);continue}0===(b.resourceIds?.length?b.resourceIds:b.resourceId?[b.resourceId]:[]).length&&f.push(a.roleId)}let g=M(d),h=[];for(let a of g){let b=w(a.promptId);if(!b)continue;let d=c.find(b=>b.id===a.roleId),e=d?.executionType||function(a){var b;return b=a,/extract|extraction|抽取|清单|图纸|品牌/u.test(b)?"fact_extraction":/validation|校验|审查|审核/u.test(b)?"validation":/format|排版/u.test(b)?"formatting":/writer|method|schedule|quality|resource|safety|dangerous|施工|进度|质量|资源|安全|危大/u.test(b)?"chapter_generation":"reference"}(a.roleId),f=function(a,b,c=""){let d=`${a} ${b} ${c}`;return/extract|extraction|抽取|清单|图纸|品牌|识别/u.test(d)?"extraction":/format|排版/u.test(d)?"formatting":/总控|writer|施工组织设计总控|写作主控/u.test(d)?"writer":/chapter_generation|method|schedule|quality|resource|safety|dangerous|施工|进度|质量|资源|安全|危大/u.test(d)?"chapter":"reference"}(a.roleId,e,b.name);h.push({...b,roleId:a.roleId,contentHash:u(b.content),contentPreview:v(b.content),executionType:e,category:f,bindingSource:"projectRole"})}return{bindings:g,prompts:h,writerPrompts:h.filter(a=>"writer"===a.category),chapterPrompts:h.filter(a=>"chapter"===a.category),extractionPrompts:h.filter(a=>"extraction"===a.category),formattingPrompts:h.filter(a=>"formatting"===a.category),referencePrompts:h.filter(a=>"reference"===a.category),unresolvedRoles:[...new Set(e)],missingResourceRoles:[...new Set(f)]}}function z(){let a=(0,j.V)().templates,b=s().filter(b=>!a.some(a=>a.id===b.id));return[...a,...b]}function A(a){return z().find(b=>b.id===a)}function B(a){let b=r(a),c=s().filter(a=>a.id!==b.id);return c.push(b),t(c),b}async function C(a,b=(0,h.aY)()){let c,d=A(a),f=[];if(!d)return{issues:[{level:"error",message:"文档模板不存在或已删除"}],fileDiagnostics:[],promptDiagnostics:[],config:void 0};let g=(0,i.XB)("prompt"),j=(0,i.XB)("file"),m=J(d),p=K(d);m||f.push({level:"error",message:"模板未绑定项目角色配置,且未匹配到自动专业角色配置"}),m&&!p&&f.push({level:"error",message:`项目角色配置不存在或已删除:${m}`}),d.promptIds?.length&&f.push({level:"warning",message:"模板存在旧 promptIds 字段残留,该字段已不参与生成,请清理模板历史数据。"}),d.promptBindings?.length&&f.push({level:"warning",message:"模板存在旧 promptBindings 字段残留,该字段已不参与生成,请清理模板历史数据。"}),d.boundFilePaths?.length&&f.push({level:"warning",message:"模板存在旧 boundFilePaths 字段残留,生成只使用项目角色配置和显式文件角色绑定。"});let q=N(d),r=O(d);p&&0===p.promptRoles.length&&f.push({level:"error",message:"项目角色配置未配置提示词角色。"}),p&&p.promptRoles.length>0&&0===q.length&&f.push({level:"error",message:"项目角色配置中的提示词角色未绑定任何有效提示词资源。"});let s=e.resolve(b),t=(0,h.Yy)(s),u=function(a,b){if(0===a.length)return a;let c=new Set(b.map(a=>a.relativePath)),d=[],e=new Set;for(let f of a){let a=f.filePath.replace(/^\/+|\/+$/gu,"");for(let g of c.has(a)?[a]:b.filter(b=>{var c;return b.relativePath.startsWith(`${a}/`)&&"disk"!==(c=b).status&&"error"!==c.status&&Number(c.indexedAt||0)>0&&Number(c.chunkCount||0)>0}).map(a=>a.relativePath)){let a=`${f.roleId}