@customize-agent/server 4.1.21 → 4.1.23

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.
@@ -12,7 +12,7 @@ ${d}`;return{chunk:a,index:b,score:.8*h.filter(a=>e.includes(a)).length+ +!!/\d+
12
12
  说明:以下内容仅用于事实覆盖、检索命中和质量检查,不得新增、删除、重排用户或模板章节。
13
13
  建议关注事实:${a.factFields.map(a=>a.name).join("、")}
14
14
  章节内容建议:${a.chapterRules.map(a=>`${a.title}${a.generationHint?`:${a.generationHint.replace(/\s+/gu," ")}`:""}`).join(";")||"以当前模板章节为准"}
15
- 质量提醒:${a.gateRules.map(a=>a.name).join("、")}`}},11248:(a,b,c)=>{c.d(b,{K3:()=>f,zn:()=>g});let d=/[A-Za-z0-9%+-.,]/gu;function e(a){let b=a.charCodeAt(0);return b>=65281&&b<=65374?String.fromCharCode(b-65248):a}function f(a){return a.replace(d,e).replace(/\s+/gu,"").replace(/[×X**]/gu,"x").replace(/[%]/gu,"%").replace(/‰/gu,"permille").replace(/平方米|平方|平米|m²|㎡/giu,"m2").replace(/公顷|hm²/giu,"hm2").replace(/立方米|立方|m³/giu,"m3").replace(/升/gu,"l").replace(/毫升/gu,"ml").replace(/千米|公里/gu,"km").replace(/毫米/gu,"mm").replace(/厘米/gu,"cm").replace(/米/gu,"m").replace(/千克|公斤/gu,"kg").replace(/克/gu,"g").replace(/吨/gu,"t").replace(/人民币万元|万元人民币/gu,"万元").replace(/人民币元|元人民币|¥/gu,"元").replace(/日历天|自然日/gu,"天").replace(/工作日/gu,"工作天").replace(/个月/gu,"月").replace(/小时/gu,"h").replace(/分钟/gu,"min").replace(/兆帕/gu,"mpa").replace(/千帕/gu,"kpa").replace(/千牛/gu,"kn").replace(/牛/gu,"n").replace(/千瓦/gu,"kw").replace(/兆瓦/gu,"mw").replace(/瓦/gu,"w").replace(/千伏/gu,"kv").replace(/伏/gu,"v").replace(/毫安/gu,"ma").replace(/安培|安/gu,"a").replace(/赫兹/gu,"hz").replace(/摄氏度/gu,"℃").replace(/百分之\s*(\d+(?:\.\d+)?)/gu,"$1%").replace(/千分之\s*(\d+(?:\.\d+)?)/gu,"$1permille").replace(/直径\s*(\d+(?:\.\d+)?)/gu,"φ$1").replace(/[Φφ]\s*(\d+(?:\.\d+)?)(?:mm)?/giu,"φ$1").replace(/DN\s*(\d+)/giu,"dn$1").replace(/D\s*(\d+)(?=\b|[^a-z0-9])/giu,"d$1").replace(/\b(KN|MPA|KPA|KW|MW|KV|HZ|DN)\b/giu,a=>a.toLowerCase()).replace(/[,,、。;;::||()()【】\]《》<>"“”'‘’[]/gu,"").toLowerCase()}function g(a){let b=f(a),c=new Set;for(let a of b.matchAll(/\d+(?:\.\d+)?(?:m2|hm2|亩|m3|l|ml|mm|cm|km|m|kg|g|t|万元|亿元|元|天|工作天|月|年|h|min|%|permille|mpa|kpa|pa|kn|n|kn\/m2|kn\/m|kw|mw|w|kv|v|ma|a|hz|℃|台|套|件|个|根|只|组|项|处|座|栋|层|间|批|次|人|工日|人日)?|dn\d+|φ\d+(?:\.\d+)?|d\d+|c\d{2,}|hrb\d+|q\d{3}[a-z]?|m\d+|\d+(?:\.\d+)?x\d+(?:\.\d+)?(?:x\d+(?:\.\d+)?)?|[+-]?\d+\.\d{3}|\d+[:/]\d+/giu))c.add(a[0]);return[...c]}},14070:(a,b,c)=>{function d(a){let b=a.split(/[,。;:、\s\d()()《》<>【】"“”'‘’\-/\\|,.:;]+/u).filter(Boolean),c=new Set;for(let a of b){let b=a.trim();if(b.length>=2&&c.add(b),b.length>=3)for(let a=0;a<=b.length-2;a++){let d=b.slice(a,a+2);d.length>=2&&!/^[a-zA-Z0-9]+$/u.test(d)&&c.add(d)}}return[...c]}function e(a,b,c=.3){return function(a,b){let c=new Set(d(a)),e=new Set(d(b));if(0===c.size||0===e.size)return 0;let f=0;for(let a of c)if(e.has(a))f+=1;else if(a.length>=2){for(let b of e)if(b.length>=2&&(b.includes(a)||a.includes(b))){f+=.5;break}}return f/Math.max(c.size,1)}(a,b)>=c}c.d(b,{C1:()=>e})},22157:(a,b,c)=>{c.d(b,{Te:()=>g,_3:()=>h,c6:()=>e,l$:()=>i,lG:()=>f});var d=c(77598);function e(a){return(0,d.createHash)("sha1").update(JSON.stringify(a)).digest("hex")}function f(a){if(null==a)return"";if("string"==typeof a)return a;if("number"==typeof a||"boolean"==typeof a)return String(a);try{return JSON.stringify(a)}catch{return String(a)}}function g(a){if(a?.aborted)throw Error("用户中止")}function h(a){let b=Math.max(1,a.total);return"chapter"===a.kind?(a.targetWords||0)>=6e3?b<=3?1:Math.min(b,2):b<=3?b:b<=6?Math.min(b,4):b<=10?Math.min(b,6):Math.min(b,8):"search"===a.kind?b<=6?b:Math.min(b,8):"deepRetrieval"===a.kind?Math.min(b,a.highRisk?6:4):"sectionRepair"===a.kind?b<=3?b:b<=8?4:Math.min(b,6):Math.min(b,4)}async function i(a,b,c){if(0===a.length)return[];let d=Math.max(1,Math.min(a.length,c.concurrency||h({total:a.length,kind:c.kind,targetWords:c.targetWords,highRisk:c.highRisk}))),e=Array(a.length),f=0;return await Promise.all(Array.from({length:d},async()=>{for(;f<a.length;){let c=f;f+=1,e[c]=await b(a[c],c)}})),e}},23760:(a,b,c)=>{c.d(b,{AC:()=>p,Ai:()=>s,BV:()=>v,Ff:()=>n,Fv:()=>D,K1:()=>B,M$:()=>$,N1:()=>S,NS:()=>E,N_:()=>Y,Nz:()=>l,S2:()=>T,ST:()=>O,Ty:()=>w,bM:()=>V,f8:()=>z,gN:()=>x,i0:()=>Q,iC:()=>u,ji:()=>R,k0:()=>C,kQ:()=>Z,mR:()=>X,qK:()=>J,qm:()=>M,vY:()=>P,xX:()=>N,yd:()=>U,yw:()=>I,z0:()=>m});var d=c(8753),e=c(74329),f=c(78217),g=c(11248),h=c(70208),i=c(91977),j=c(52511),k=c(22157);function l(a){return e.hc.test(a.message)}function m(a){let b="string"==typeof a?a:a.message;if("error"===("string"==typeof a?void 0:a.level))return"blocking";for(let a of e.gr)if(a.pattern.test(b))return a.severity;return"minor"}function n(a){let b={blocking:0,important:0,minor:0};for(let c of a)b[m(c)]+=1;return b}function o(a,b){let c=a.replace(/[\][()`*_>#|{},。、“”‘’:;!?,.!?:;-]+/gu," ").replace(e.ug," ").trim();if(c.length<120)return;let d=c.match(/[A-Za-z][A-Za-z-]{2,}|[\p{Script=Han}]{2,}/gu)||[];if(d.length<30)return;let f=1,g=new Map;for(let a=0;a<d.length;a+=1){let c=d[a].toLowerCase();if(g.set(c,(g.get(c)||0)+1),a>0&&c===d[a-1].toLowerCase()?f+=1:f=1,f>=12)return{level:"error",message:`${b} 存在重复 token 退化输出`,suggestion:"请重新生成该小节,禁止保留连续重复的英文单词或无意义片段。"}}let h=[...g.entries()].sort((a,b)=>b[1]-a[1])[0];if(h&&h[1]>=25&&h[1]/d.length>=.42)return{level:"error",message:`${b} 存在重复 token 退化输出`,suggestion:`检测到“${h[0]}”异常高频重复,请重新生成该小节。`}}function p(a,b=[]){let c=[],d=o(a,"全文");for(let a of(d&&c.push(d),b)){let b=o(a.content,`章节“${a.title}”`);for(let d of(b&&c.push(b),a.sections||[])){let b=d.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=a.content.match(RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${b}\\s*\\n([\\s\\S]*?)(?=^#{3,4}\\s+|^##\\s+|$)`,"mu"));if(!e)continue;let f=o(e[1],`小节“${d}”`);f&&c.push(f)}}return c}function q(a){return a.severity&&a.repairability?a:/小节只有标题|空小节|小节内容补写未完成/u.test(a.message)?{...a,severity:"blocker",repairability:"local_deterministic",category:"structure",owner:"system"}:/不得出现|提示词要求|疑似提示词指令标题|项目污染|生成未完成/u.test(a.message)?{...a,severity:"blocker",repairability:"llm_repairable",category:"structure",owner:"system"}:/事实一致性冲突|projectFactOnly|核心事实/u.test(a.message)?{...a,severity:"error"===a.level?"blocker":"warning",repairability:"manual_review",category:"fact_consistency",owner:"user"}:/证据使用覆盖率偏低|BOQ|落位|高分模块|专业链|闭环/u.test(a.message)?{...a,severity:"warning",repairability:"not_repair_needed",category:"evidence_coverage",owner:"system"}:"error"===a.level?{...a,severity:"blocker",repairability:"llm_repairable",category:"structure",owner:"system"}:"warning"===a.level?{...a,severity:"warning",repairability:"not_repair_needed",category:"style",owner:"system"}:{...a,severity:"suggestion",repairability:"not_repair_needed",category:"style",owner:"system"}}function r(a){return"blocker"===q(a).severity&&(!!/提示词要求|疑似提示词指令标题|适用性自相矛盾|不得出现/u.test(a.message)||!/目录与正文/u.test(a.message)&&(/配置要求缺少必要内容/u.test(a.message)?"error"===a.level:!/正文缺少规划小节|缺少规划小节/u.test(a.message)&&(!!/小节内容补写未完成|空小节|小节只有标题|生成未完成/u.test(a.message)||!(/生成后事实反查失败/u.test(a.message)||/规划小节正文过短|小节生成未达标/u.test(a.message)||/事实一致性冲突:项目名称/u.test(a.message))&&(/跨章一致性|专业评分不足|专业缺口|泛化套话|缺少关键线路|缺少材料验收|缺少风险识别|缺少进场/u.test(a.message)?"error"===a.level&&!/证据使用覆盖率偏低|章节逻辑依赖不足|文档交付评分报告/u.test(a.message):!(!l(a)||/章节审查|最终质量审查|正文篇幅明显低于目标|正文存在空泛占位表达|结构化事实读取不足|正文可能未显式覆盖|仅包含文件类型和占位符|不在本次招标范围内/u.test(a.message))))))}function s(a,b,c){let d=[{key:"no_errors",label:"无阻断级校验错误",passed:!a.some(a=>"error"===a.level&&r(a))},{key:"basic_facts",label:"基础事实齐全",passed:b.project.length>0},{key:"source_traceability",label:"事实具备来源追踪",passed:[...b.project,...b.schedule,...b.quality,...b.safety].every(a=>!!a.sourceFile)},{key:"structured_precision",label:"结构化精确参数已使用",passed:b.preciseFacts.length<e.mu||a.every(a=>"error"!==a.level||!e.Ab.test(a.message))},{key:"chapter_evidence",label:"章节均具备证据",passed:c.every(a=>a.evidence.length>0)},{key:"no_missing_content",label:"无资料未提供章节",passed:c.every(a=>!a.content.includes("资料未提供"))},{key:"no_project_contamination",label:"无项目污染和事实一致性阻断",passed:!a.some(a=>"error"===a.level&&e.Uv.test(a.message)&&r(a))}],f=a.map(q).filter(a=>"error"===a.level&&r(a));return{passed:0===f.length,blockingIssues:f,checklist:d}}function t(a){let b=[];for(let c of a.split(e.AQ))e.w7.test(c)&&e.N3.test(c)&&b.push(c);return b}function u(a){let b=[...a.matchAll(e.DB)],c=[];for(let d=1;d<b.length;d+=1){let f=b[d].index||0,g=b[d+1]?.index??a.length,h=a.slice(f,g);e.Ks.test(h)&&c.push({level:"warning",message:`第 ${d+1} 章可能重复出现基础信息`,suggestion:"如该信息与本章主题无关,建议合并到更合适的概况类章节,避免重复铺陈。"})}if(0===b.length)return c;let d=b[0].index||0,f=b[1]?.index??a.length,g=a.slice(d,f),h=g.search(e.jM);if(h<=0)return c;let i=g.slice(0,h).replace(e.Dc,""),j=[];for(let a of e.Y8)RegExp(`${a}\\s*[::]`,"u").test(i)&&j.push(a);return j.length>=3&&c.push({level:"warning",message:`基础信息表前重复叙述字段:${j.join("、")}`,suggestion:"基础信息已表格化时,表格前只保留一句引导语,不要重复逐项叙述名称、编号、范围、周期、质量等字段。"}),c}function v(a){let b=[],c=[];for(let b of e.ZH)a.includes(b)&&c.push(b);c.length>0&&b.push({level:"warning",message:`存在模板化前缀或套话:${c.join("、")}`,suggestion:"请删除“本节/本章将/以下从”等前缀,标题后直接进入对象、动作、措施、检查和闭环。"});let d=a.match(/OCR|知识库|提示词|绑定片段|兜底|后台|文件路径|识别错误/giu);return d?.length&&b.push({level:"error",message:`正文包含后台或资料处理话术:${[...new Set(d)].join("、")}`,suggestion:"请改为正式文档语言,例如“资料文字不清”“资料口径不一致”“项目资料”,不得暴露后台处理过程。"}),b}function w(a){let b=[];for(let c of a){let a=(c.sections||[]).filter(Boolean),d=a.filter((b,c)=>a.indexOf(b)!==c);d.length>0&&b.push({level:"warning",message:`${c.title} 存在重复小节:${[...new Set(d)].join("、")}`,suggestion:"请保留用户需求、模板或显式大纲中真实需要的小节,删除重复项。"});let e=new Map;for(let b of a){let a=/劳动力|人员|工种/u.test(b)?"劳动力计划":/机械|设备|机具/u.test(b)?"机械设备计划":/材料|物资/u.test(b)?"材料物资计划":/冬季|雨季|高温|台风|大风/u.test(b)?"特殊气候措施":"";a&&e.set(a,[...e.get(a)||[],b])}for(let[a,d]of e)d.length>1&&b.push({level:"warning",message:`${c.title} 存在重复主题小节:${a}(${d.join("、")})`,suggestion:"请合并同类小节,只保留一个主表或主方案,其他位置采用引用或执行说明。"})}return b}function x(a){let b=e.HX.exec(a);if(!b)return[{level:"error",message:"缺少目录页",suggestion:"请在封面后生成“## 目录”,并按一级章父级、二级小节子级组织。"}];let c=0,d=0;for(let a of b[1].split(e.A5))e.ZT.test(a)&&e.EB.test(a)&&(c+=1,e.sr.test(a)&&(d+=1));return c>0&&0===d?[{level:"error",message:"目录二级小节未作为子级缩进",suggestion:"目录应为父子级导航:一级章单独成行,二级小节至少缩进两个空格列在所属章下方。"}]:[]}function y(a){return a.replace(/^#+\s*/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").replace(/^\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/[()]/gu,a=>"("===a?"(":")").replace(/[\s::.。;;,,、]+$/gu,"").replace(/的(?=保障体系|管理体系|控制体系|措施|方案|计划|要求)/gu,"").replace(/[\s()()::.。;;,,、-]/gu,"").trim()}function z(a){let b=function(a){let b=e.HX.exec(a);return b?b[1].split(e.A5).map(a=>/^\s*\d+\.\d+\s+(.+)$/u.exec(a.trim())).filter(a=>!!a).map(a=>y(a[1]||"")).filter(Boolean):[]}(a),c=[...a.matchAll(/^###\s+(\d+\.\d+\s+.+)$/gmu)].map(a=>y(a[1]||"")).filter(Boolean);if(0===b.length||0===c.length)return[];let d=new Set(c),f=new Set(b),g=b.filter(a=>!d.has(a)),h=c.filter(a=>!f.has(a)),i=[];return g.length>0&&i.push({level:"error",message:`目录与正文不一致,目录小节未在正文中找到:${[...new Set(g)].join("、")}`,suggestion:"请以最终清洗后的正文二级标题为准重新生成目录。"}),h.length>0&&i.push({level:"error",message:`目录与正文不一致,正文小节未进入目录:${[...new Set(h)].join("、")}`,suggestion:"请重新生成目录,确保只收录正文二级小节,不收录三级小节。"}),i}function A(a){let b=a.replace(/^#{1,6}\s+/u,"").replace(/^\s*\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").trim(),c=(0,h.GQ)(b),d=/^(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用).*|(?:如|若|如果)(?:涉及|不涉及|适用|不适用).*|.*(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成).*|.*(?:按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|注意事项))\s*$/u;return d.test(b)||d.test(c)}function B(a){let b=[...a.matchAll(/^#{2,6}\s+(.+)$/gmu)].map(a=>(0,h.GQ)(a[1]||"")).filter(A);return b.length>0?[{level:"error",message:`正文存在疑似提示词指令标题:${[...new Set(b)].slice(0,8).join("、")}`,suggestion:"请删除或改写为正式施工组织设计小节标题,目录也不得收录该类标题。"}]:[]}function C(a){let b=[],c=a.split(e.A5).map(a=>a.trim()).filter(a=>a&&!/^#{1,6}\s+/u.test(a)&&!/^\s*\|/u.test(a)&&!/^<div\b/iu.test(a)),d=c.find(a=>y(a).length<=1);d&&b.push({level:"warning",message:`正文存在孤立字或残缺段落:${d}`,suggestion:"请删除残缺行或重新生成所在小节。"});let f=c.find(a=>/[,、;:和与在为对将]$/u.test(a)||/(通过|包括|如下|主要包括)$/u.test(a));f&&b.push({level:"warning",message:`正文存在疑似截断句:${f}`,suggestion:"请补完整该段落,避免以连接词、逗号或冒号结尾。"});let g=c.find(a=>a.length>380);g&&b.push({level:"warning",message:`正文存在过长段落:${g}`,suggestion:"请拆分为多段或表格,改善导出版式和可读性。"});let h=c.find(a=>/\S.+(?:\s|[。;;])(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)\S.+(?:\s|[。;;])(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)\S/u.test(a)&&!/\b\d+\.\d+\s*(?:mm|cm|m|㎡|m2|kg|t|MPa|kPa|V|KV|kV|A)\b/iu.test(a));h&&b.push({level:"error",message:`正文存在列表项粘连同一行:${h.slice(0,120)}`,suggestion:"有序列表和无序列表必须逐项独占一行,确保 Markdown/PDF/DOCX 正确排版。"});let i=a.match(/(?:PDF\s*)?第\s*\d+\s*(?:[-—至到~~]\s*\d+)?\s*页|(?:图纸|清单|资料|文件|[\u4e00-\u9fa5A-Za-z0-9()()、·-]{2,24}(?:工程)?)\s*(?:[((]?\s*|(?:共|多达|约|合计)\s*)\d+\s*页|[\u4e00-\u9fa5A-Za-z0-9、及与和]{2,24}\s*(?:共|多达|约|合计)\s*\d+\s*页|\d+\s*页\s*(?:图纸|资料|文件|装饰|土建|加固|给排水|电气|智能化|消防)|\d+\s*页/iu)?.[0];i&&b.push({level:"error",message:`正文残留资料页码元信息:${i}`,suggestion:"正式投标正文应引用招标文件、施工图设计文件、工程量清单和相关专业图纸,不写 PDF 页码或资料页数。"});let j=c.find(a=>/仅作为内部事实提取依据|正式正文不得引用文件名|后台事实|内部事实/u.test(a));return j&&b.push({level:"error",message:`正文残留内部处理说明:${j.slice(0,120)}`,suggestion:"正式投标正文不得出现内部事实抽取、后台处理或文件名引用限制说明。"}),b}function D(a){let b=[],c=[...a.matchAll(/^##\s+(.+)$/gmu)].map(a=>(0,h.GQ)(a[1]||"")).filter(a=>"目录"!==a&&!/^第[一二三四五六七八九十百千万\d]+章\s+/u.test(a));c.length>0&&b.push({level:"error",message:`正文存在非正式章二级标题:${[...new Set(c)].slice(0,8).join("、")}`,suggestion:"正文 ## 只允许用于“第X章”正式章标题;章内小节必须使用 ### X.Y。"});let d=[...a.matchAll(/^##\s+(第[一二三四五六七八九十百千万\d]+章\s+.+)$/gmu)];for(let c=0;c<d.length;c+=1){let e=d[c].index||0,f=d[c+1]?.index??a.length,g=[...a.slice(e,f).matchAll(/^###\s+\d+\.\d+\s+(.+)$/gmu)].map(a=>(0,h.GQ)(a[1]||"")),i=(0,h.GQ)((d[c][1]||"").replace(/^第[一二三四五六七八九十百千万\d]+章\s*/u,""));1===g.length&&y(g[0])===y(i)&&b.push({level:"error",message:`章节只有一个且与章名同名的小节:${d[c][1]}`,suggestion:"应拆分为多个业务小节,不能用章标题重复作为唯一二级小节。"})}return b}function E(a){let b=[];/按审批确认执行/u.test(a)&&b.push({level:"error",message:"表格存在自动兜底污染内容:按审批确认执行",suggestion:"正式投标表格不得使用通用兜底短语,应保留真实业务内容或删除该行。"});let c=(a.match(/\|\s*信息项\s*\|\s*内容\s*\|/gu)||[]).length;c>1&&b.push({level:"error",message:`项目基础信息类表格重复:${c} 处`,suggestion:"项目名称、招标人、建设地点、工期、质量等基础信息只能集中输出一次。"});let d=a.match(/^\|\s*---\s*\|\s*---\s*\|\s*$/gmu)||[];for(let c of(d.length>20&&b.push({level:"error",message:`表格分隔线异常重复:${d.length} 行`,suggestion:"请修复表格规范化逻辑,禁止把数据行拆成多个碎表。"}),t(a))){let a=c.split(e.A5).filter(a=>e.w7.test(a));if(a.length<2)continue;if(!e.N3.test(a[1]||"")){b.push({level:"error",message:`表格分隔线位置不规范:${a[0]||""}`,suggestion:"Markdown 表格必须紧跟表头输出分隔线,例如 |---|---|,中间不得插入正文或其他管道行。"});continue}let d=a.map(a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>a.trim())),f=d[0]||[],g=f.filter(a=>/^(?:列|字段|内容|备注)\d+$/u.test(a));g.length>0&&b.push({level:"error",message:`表格存在泛化表头:${g.join("、")}`,suggestion:"正式投标表格必须使用业务字段表头,不得出现“列5/字段1/内容2”等临时表头。"});let h=f.length;d.find((a,b)=>1!==b&&a.some(a=>!a)||a.length!==h)&&b.push({level:"error",message:`表格存在空单元格或列数不一致:${f.join("、")}`,suggestion:"请补齐每个单元格内容并统一列数;无适用内容时写明“不适用原因”或调整表格结构。"})}return b}function F(a){return a.split(e.A5).filter(a=>!/^#{1,6}\s+/u.test(a.trim())).filter(a=>!/^\s*\|/u.test(a)).filter(a=>!/^\s*:?-{3,}:?/u.test(a)).filter(a=>!/^<\/?div\b/iu.test(a.trim())).join("\n").replace(/[|*_`<>-]/gu,"").replace(e.ug,"").length}function G(a){let b=[...a.matchAll(/^(#{3,4})\s+(.+)$/gmu)];return b.map((c,d)=>{let e=c[1].length,f=(c.index||0)+c[0].length,g=b.slice(d+1).find(a=>a[1].length<=e),h=g?.index??a.length,i=(c[2]||"").trim();return{rawTitle:i,title:y(i),level:e,body:a.slice(f,h)}}).filter(a=>a.title&&(3===a.level||4===a.level))}function H(a,b,c,d,f){let g=F(d),h=e.w7.test(d)&&e.N3.test(d),i=F(d.split("\n").filter(a=>!e.w7.test(a)&&!e.N3.test(a)).join("\n").replace(/^#{1,6}\s+.+$/gmu,""));if(/【本小节生成未达标,需重新生成】/u.test(d))return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 小节生成未达标:${b}`};if((!/项目基本信息|基本信息|工程概况表|项目概况表/u.test(b)||!h&&!(g>=40))&&(!h||!(i<20))&&(!(g>=80)||!(i>=20))){if(0===g)return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 空小节:${b}`};if(g<180)return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"too_short",planned:f,message:`${a} ${f?"规划小节":"正文小节"}正文过短:${b}`}}}function I(a,b){let c=[],d=new Set;for(let e of b){let b=e.content?.trim()?e.content:a;for(let a of e.sections||[]){let f=y(a),g=function(a,b){let c=G(a).filter(a=>(function(a,b){let c=y(a),d=y(b);if(!c||!d)return!1;if(c===d||c.includes(d)||d.includes(c))return!0;let e=/项目概况|主要施工方案|新技术新材料|工程重点难点|重点难点|危大工程|保障体系|安全保障|工期|质量|安全生产|应急预案|资源|人材机|材料|机械|劳动力|进度|关键线路|交通疏导|成品保护|深化设计|验收/gu,f=new Set(c.match(e)||[]),g=new Set(d.match(e)||[]),h=[...f].filter(a=>g.has(a)).length;return h>=2||1===Math.min(f.size,g.size)&&1===h&&16>=Math.max(c.length,d.length)})(a.rawTitle,b));return c.length<=1?c[0]:c.map(a=>({item:a,gap:H("",b,a.level,a.body,!0),textLength:F(a.body)})).sort((a,b)=>{let c=a.gap&&"empty"===a.gap.reason?1:0,d=b.gap&&"empty"===b.gap.reason?1:0;return c!==d?c-d:b.textLength-a.textLength})[0]?.item}(b,a),h=`${e.title}|${f}|planned`;if(!g){c.push({chapterTitle:e.title,sectionTitle:a,level:3,bodyLength:0,reason:"missing_planned_section",planned:!0,message:`${e.title} 缺少规划小节:${a}`}),d.add(h);continue}let i=H(e.title,a,g.level,g.body,!0);i&&c.push(i),d.add(h)}for(let a of G(b)){let b=`${e.title}|${a.title}|actual`,f=`${e.title}|${a.title}|planned`;if(d.has(b)||d.has(f))continue;let g=H(e.title,a.title,a.level,a.body,!1);g&&"empty"===g.reason&&c.push(g),d.add(b)}}return c}function J(a,b){return I(a,b).filter(a=>"empty"===a.reason).map(a=>({level:"error",message:a.message,suggestion:"必须补充与该小节相关的材料事实和必要内容,达到正文完整度要求。"}))}function K(a){return`${a.fieldName||a.key} ${(0,k.lG)(a.value)}`.replace(/\s+/gu," ").trim()}function L(a){let b=new Set;for(let c of[/\d+\s*日历天/gu,/(?:计划工期|合同工期|总工期|工期|施工周期)[^\n。;;]{0,12}\d+\s*天/gu,/(?:计划工期|合同工期|总工期|工期|施工周期)[^\n。;;]{0,12}\d+\s*(?:个月|月)/gu])for(let d of a.matchAll(c)){let a=d[0].match(/\d+\s*(?:日历天|天|个月|月)/u)?.[0]?.replace(/\s+/gu,"");a&&b.add(a)}return[...b]}function M(a,b){let c=[],d=b.schedule.map(K).find(a=>/\d+\s*(?:日历天|天|个月|月)|计划工期|合同工期/u.test(a)),e=b.quality.map(K).find(a=>/质量|合格|优良/u.test(a));if(d){let b=L(d)[0],e=L(a),f=b?e.filter(a=>a!==b&&/日历天/u.test(a)):[];b&&f.length>=2&&c.push({level:"warning",message:`跨章一致性冲突:正文出现与资料工期不一致的表述 ${f.slice(0,6).join("、")}`,suggestion:`请统一使用资料中的工期口径:${d}`})}return e&&!/质量标准|质量目标|合格|优良/u.test(a)&&c.push({level:"error",message:"跨章一致性缺口:正文未稳定体现资料中的质量目标",suggestion:`请在工程概况、质量保证和验收相关章节统一体现:${e}`}),c}function N(a){let b=[],c=/(?:三检制|三级教育|三级管理|5S|24\s*小时|每日|每周|每月|一次|两次)/gu;for(let d of a){let a=[...new Set(d.content.match(c)||[])];a.length>=3&&!/责任人|检查记录|整改|复查|验收|台账|交底|巡查|闭环/u.test(d.content)&&b.push({level:"warning",message:`${d.title} 管理措施数字较多但缺少执行闭环:${a.slice(0,8).join("、")}`,suggestion:"这些管理数字可以保留,但需要补充责任主体、检查频次、记录台账、整改复查和闭环要求。"})}return b}function O(a){let b=/(?:加强组织领导|严格执行规范|落实责任制度|确保工程质量|强化过程管理|提高思想认识|完善管理体系|形成闭环管理)/gu,c=[];for(let d of a)(d.content.match(b)||[]).length>=6&&!/材料|工序|验收|复验|节点|风险|交底|隐蔽|检验批|进场/u.test(d.content)&&c.push({level:"error",message:`${d.title} 存在较多未绑定项目事实和工序控制点的泛化套话`,suggestion:"请替换为结合资料事实、施工对象、工序控制、验收资料和整改闭环的专业内容。"});return c}function P(a,b){let c=[...b.project,...b.schedule,...b.quality,...b.safety,...b.resources,...b.preciseFacts,...b.bills,...b.drawings,...b.rules,...b.specifications].map(K).join("\n");if(80>(0,f.V7)(c))return[];let d=[],e=(0,g.K3)(c),h=[],i=[];for(let b of(0,g.zn)(a)){let c=(0,g.K3)(b),d=a.indexOf(b),f=d>=0?a.slice(Math.max(0,d-36),Math.min(a.length,d+b.length+36)):a,j=function(a,b){let c=`${a} ${b}`;return/三检制|三级|5S|24\s*小时|每日|每周|每月|一次|两次|责任制|制度/u.test(c)?"soft":/总工期|计划工期|合同工期|日历天/u.test(c)||/最高投标限价|招标控制价|合同估算价|投资估算|报价|金额|万元|元/u.test(c)||/(?:工程量|清单|建设规模|建筑面积|长度|材料|设备|规格|型号).{0,24}(?:m²|㎡|m3|m³|米|吨|套|台|个|项|%)/u.test(c)?"hard":/GB\s*\d|JGJ\s*\d|CJJ\s*\d|ISO\s*\d|GB\/T|CECS\s*\d|DL\s*\d|YB\s*\d|SH\s*\d|SJ\/T\s*\d|CJJ\/T\s*\d/u.test(c)?"soft":/标准|规范|编号/u.test(c)?"hard":"soft"}(b,f);"hard"!==j||e.includes(c)||h.push(b),"soft"!==j||e.includes(c)||i.push(b)}let j=[...new Set(h)],l=[...new Set(i)];return j.length>=2&&d.push({level:"error",message:`生成后事实反查失败:正文出现资料事实主表中未找到的关键数字 ${j.slice(0,8).join("、")}`,suggestion:"请删除无法在资料中反查的关键数字,或改写为资料已明确的事实口径。"}),l.length>=6&&d.push({level:"warning",message:`生成后事实反查提示:正文出现较多未在资料事实主表中反查到的管理数字 ${l.slice(0,10).join("、")}`,suggestion:"请确认这些管理数字属于通用制度、规范要求或项目资料事实;如无依据,建议改为定性管理要求。"}),/质量目标|质量标准/u.test(a)&&b.quality.length>0&&!b.quality.some(b=>a.includes((0,k.lG)(b.value).slice(0,18)))&&d.push({level:"warning",message:"生成后事实反查提示:正文质量目标表述未明显匹配质量事实主表",suggestion:"请使用资料中的质量目标原文或等价表述。"}),d}function Q(a){let b=[];for(let d of a){var c;let a=d.content;if(800>(0,f.V7)(a))continue;let e=/资料|招标|清单|图纸|标准|范围|工期|质量|验收/u.test(a)?2:+!!/项目|工程|要求/u.test(a),g=/首先|其次|同时|最后|一是|二是|流程|步骤|阶段|组织顺序/u.test(a)?2:+!!/并且|同时|然后|因此/u.test(a),h=/控制点|关键线路|复验|隐蔽验收|风险|交底|检验批|整改|闭环/u.test(a)?2:+!!/措施|要求|管理|检查/u.test(a),i=/责任人|检查|记录|验收|整改|复查|进场|调配|应急/u.test(a)?2:+!!/落实|执行|安排|组织/u.test(a),j=/本项目|本工程|招标范围|工程量|建设地点|计划工期|质量目标/u.test(a)?2:+!!/项目|工程/u.test(a),k=/工期|质量|安全|资源|验收/u.test(a)?2:+!!/目标|要求/u.test(a),l={factuality:e,structure:g,depth:h,executable:i,specificity:j,consistency:k},m=e+g+h+i+j+k,n=(c=d.title,/概况|工程|项目/u.test(c)?{min:5,focus:"事实依据、项目特异性"}:/部署|总体|组织/u.test(c)?{min:6,focus:"组织结构、可执行闭环、跨章一致性"}:/进度|工期/u.test(c)?{min:6,focus:"进度结构、工期一致性、纠偏机制"}:/质量/u.test(c)?{min:6,focus:"质量深度、验收复验、资料闭环"}:/安全|文明|危大|风险/u.test(c)?{min:6,focus:"风险覆盖、应急响应、检查整改"}:/资源|材料|设备|劳动力/u.test(c)?{min:5,focus:"资源依据、进场调配、进度支撑"}:{min:4,focus:"事实依据、专业深度、可执行性"});if(m<n.min){let a=Object.entries(l).filter(([,a])=>a<1).map(([a])=>a).join("、")||n.focus;b.push({level:"error",message:`${d.title} 专业评分不足:${m}/12,薄弱维度:${a}`,suggestion:`请按章节任务卡补齐${n.focus},并写出资料依据、实施流程、专业控制点和检查整改闭环。`})}}return b}function R(a){let b=[{re:/进度|工期/u,need:/关键线路|穿插|纠偏|资源保障|节点|动态调整/u,message:"进度工期章节缺少关键线路、穿插施工或纠偏保障内容"},{re:/质量/u,need:/材料.*验收|复验|隐蔽验收|整改.*复验|质量.*资料|检验批/u,message:"质量章节缺少材料验收复验、隐蔽验收或整改复验闭环"},{re:/安全|文明|危大|风险/u,need:/风险|临电|消防|应急|检查.*整改|文明施工|人员|设备/u,message:"安全文明章节缺少风险识别、现场控制或应急检查闭环"},{re:/资源|材料|设备|劳动力/u,need:/进场|验收|调配|保管|供应|投入计划/u,message:"资源章节缺少进场、验收、调配或保管计划"},{re:/施工|工艺|技术|方案/u,need:/准备|流程|工艺|控制点|验收|交底/u,message:"施工技术章节缺少施工准备、工艺流程、控制点或验收要求"}],c=[];for(let d of a){let a=d.content;for(let e of b)e.re.test(d.title)&&(0,f.V7)(a)>=600&&!e.need.test(a)&&c.push({level:"error",message:`${d.title}:${e.message}`,suggestion:"请按专业任务卡定向补写该章节,补齐可实施的控制措施、资料依据和闭环要求。"})}return c}function S(a,b){let c=[],d=a.replace(e.ug,""),f=function(a){let b=new Set;for(let c of a.preciseFacts){let a=`${c.processingType||""} ${c.roleId} ${c.sourceFile}`;if(!e.FM.test(a)&&"precise_fact"!==c.roleId)continue;let d=`${c.key} ${c.fieldName||""} ${c.value}`;for(let a of d.matchAll(e.No)){let c=a[0].trim();/万元|元|报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(`${c} ${d}`)||/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂|页码|目录/u.test(d)||/^\d+$/.test(c)&&10>Number(c)||b.add(c)}}return[...b]}(b),g=function(a,b){let c=0;for(let d of a)b.includes(d.replace(e.ug,""))&&(c+=1);return c}(f,d);return f.length>=e.mu&&g/f.length<e.tg&&c.push({level:"warning",message:`可靠精确参数使用不足:${g}/${f.length}`,suggestion:"请将资料中可靠的规格、参数、数量、时间、比例和标准编号写入对应章节;商务金额、单价、税率、预留金不得写入正文。"}),b.bills.length>0&&!e.pP.test(a)&&c.push({level:"error",message:"正文未体现结构化数据资料",suggestion:"请从表格、列表或明细中提取对象、单位、数量、规格和关键参数补入对应章节。"}),b.drawings.length>0&&!e._U.test(a)&&c.push({level:"error",message:"正文未体现设计/方案/说明类资料",suggestion:"请从设计、方案或说明资料中提取对象、流程、节点、做法、配置、规则和标准要求。"}),c}function T(a,b,c){let d=[],e=c.tables||[];if(0===e.length)return d;let f=a.replace(/\s+/gu,"").toLowerCase(),g=0,h=0,i=[];for(let a of e){let b=a.headers.map(a=>a.replace(/\s+/gu,"").toLowerCase()),c=b.findIndex(a=>/项目名称|^名称$|清单项|分部分项|项目特征/u.test(a)),d=b.findIndex(a=>/项目编码|编码|编号/u.test(a)),e=b.findIndex(a=>/^工程量$|^数量$/u.test(a));for(let b of a.rows){g+=1;let a=c>=0?(b[c]||"").replace(/\s+/gu,""):"",j=d>=0?(b[d]||"").replace(/\s+/gu,""):"",k=e>=0?(b[e]||"").replace(/\s+/gu,""):"",l=a.length>=3?a.slice(0,Math.min(a.length,16)):"",m=j.length>=3?j.slice(0,Math.min(j.length,12)):"",n=l&&f.includes(l),o=m&&f.includes(m);n||o?h+=1:a.length>=3&&i.push(`${a.slice(0,40)}${k?` ${k}`:""}(未落位)`)}}if(g>0){let a=h/g,b=i.length>0?`未落位项(共${i.length}项):${i.slice(0,12).join(";")}${i.length>12?` 及其他${i.length-12}项`:""}`:"";a<.3?d.push({level:"error",message:`清单项落位严重不足:${h}/${g} 项(${Math.round(100*a)}%),将触发质量修复`,suggestion:`请将清单中的工程内容、项目特征和数量写入对应章节正文。${b}`}):a<.6&&d.push({level:"warning",message:`清单项落位不足:${h}/${g} 项(${Math.round(100*a)}%)`,suggestion:`建议补充落位以下清单项:${b}`})}return d}function U(a,b){let c=[],d=b.drawings||[];if(0===d.length)return c;let e=a.replace(/\s+/gu,"").toLowerCase(),f=[...new Set(d.map(a=>a.sourceFile||"").filter(Boolean))],g=0,h=[];for(let a of f){let b=a.replace(/\.[^.]+$/u,"").replace(/[/\\]/gu,"").toLowerCase(),c=a.split("/").pop()||a;(b.length>=3?e.includes(b.slice(0,Math.min(b.length,12))):/图纸|设计|说明|节点|做法|构造/u.test(e))?g+=1:h.push(c)}if(f.length>0){let a=g/f.length;a<.25?c.push({level:"error",message:`图纸引用严重不足:${g}/${f.length} 份图纸被正文引用(${Math.round(100*a)}%)`,suggestion:`请将图纸中的设计说明、构造做法、材料规格和设备参数写入对应章节。未引用图纸:${h.slice(0,5).join("、")}`}):a<.5&&c.push({level:"warning",message:`图纸引用不足:${g}/${f.length} 份(${Math.round(100*a)}%)`,suggestion:`建议补充引用:${h.slice(0,5).join("、")}`})}return c}function V(a){let b=[];for(let c of(/【本小节生成未达标,需重新生成】/u.test(a)&&b.push({level:"error",message:"生成未完成:存在未达标小节,需要重新生成或补写后才能导出",suggestion:"请重新生成未达标小节,禁止将占位内容作为正式正文。"}),e.IA))c.test(a)&&b.push({level:"warning",message:`存在占位式表达:${c.source}`,suggestion:"请改写为来自资料的准确事实;资料确实未提供时,改写为正式管理措施,不留空值或“见资料/按文件”。"});return b}function W(a,b){for(let c of b)try{if(RegExp(c,"iu").test(a))return!0}catch{if(a.includes(c))return!0}return!1}function X(a,b){let c=`${b.name} ${b.category} ${b.outputTitle} ${b.description}`,f=[];for(let a of(0,d.V)().autoSpecGates)W(c,a.templateMatchers)&&f.push(a);if(0===f.length)return[];let g=[],h=t(a).length,i=0;for(let b of f){for(let c of(i=Math.max(i,b.minTables||0),b.requiredTexts))a.includes(c)||g.push({level:"warning",message:`配置要求缺少必要内容:${c}`,suggestion:"请按当前模板匹配的专业规则补齐必要内容。"});for(let c of b.forbiddenTexts)a.includes(c)&&g.push({level:"error",message:`配置要求不得出现:${c}`,suggestion:"请根据当前模板匹配的专业规则清理正文污染内容。"})}return e.bu.test(a)&&g.push({level:"error",message:"正式正文存在 Markdown 标题符号 #",suggestion:"导出正文应去除 Markdown 标题符号,保留正式标题文字。"}),i&&h<i&&g.push({level:"warning",message:`配置要求正式表格不足:${h}/${i}`,suggestion:"如用户提示词或章节内容要求表格,应按项目资料补充对应表格本体。"}),g}function Y(a){let b=`${a.name} ${a.category} ${a.outputTitle} ${a.description}`,c=new Set;for(let a of(0,d.V)().autoSpecGates)if(W(b,a.templateMatchers))for(let b of a.forbiddenTexts)b&&c.add(b);return[...c]}function Z(a,b,c,d,g,h,j){if(!a)return b;let k=[...b],l=function(a){let b=[...a.project,...a.schedule,...a.quality,...a.safety,...a.resources];for(let c of Object.values(a.schemaFacts))b.push(...c);return b}(c),m=function(a,b){let c=new Set;for(let a of b)c.add(a.key),a.fieldName&&c.add(a.fieldName);for(let b of a.tables){for(let a of b.headers)c.add(a);for(let a of b.rows)for(let b of a)c.add(b)}return c}(c,l),n=new Set(d.map(a=>a.title));for(let b of a.factFields){if(!b.required)continue;let a=c.schemaFacts[b.id]||[],e=!1,f=!b.sourceRoleIds?.length||a.some(a=>b.sourceRoleIds?.includes(a.roleId));for(let a of d){if(e&&f)break;for(let c of a.evidence)!e&&!a.missingFacts.includes(b.name)&&(0,i.I2)(c,b)&&(e=!0),!f&&(0,i.I2)(c,b)&&(f=!0)}0!==a.length||m.has(b.name)||e||k.push({level:"warning",message:`系统暂未从知识库确认必需事实:${b.name}`,suggestion:b.extractionHint||"请扩大本地知识库检索、执行事实补抽,或调整事实字段配置。"}),f||k.push({level:"warning",message:`必需事实来源角色不匹配:${b.name}`,suggestion:`请确认该事实来自角色:${b.sourceRoleIds?.join("、")}`})}for(let b of a.chapterRules){let a=d.find(a=>a.title===b.title);a&&b.minWords&&a.content.length<b.minWords&&k.push({level:"warning",message:`章节内容深度建议:${b.title}`,suggestion:`可扩展到约 ${b.minWords} 字,但不要改变模板章节结构。`})}let o=t(g),p=function(a){let b=[];for(let c of a.matchAll(e.gW))b.push({alt:c[1]||"",url:c[2]||"",index:c.index??0});return b}(g),q=(0,f.Cv)(g);for(let b of a.gateRules){let a=b.evaluator?b.evaluator:e.cA[b.type]?.(b)??{subject:"document",operator:"contains",value:b.value||b.target},f=a.target||b.target||"",i=a.value||b.value||f,r=d.find(a=>a.title===f),s=function(a){for(let c of e.Lp){let d=c(a);if(d){var b;return{level:a.rule.level,message:(b=a.rule,`${b.name}:${d}`)}}}}({rule:b,evaluator:a,target:f,value:i,min:a.min||Number(b.value)||1,markdown:g,textScope:"chapter"===a.subject&&r?r.content:g,regex:i?function(a){try{return RegExp(a,"iu")}catch{return}}(i):void 0,chapter:r,factNames:m,chapterTitles:n,tableBlocks:o,imageRefs:p,estimatedPages:q,allFacts:l,factsModel:c,projectBindings:h,promptBindings:j});s&&k.push(s)}return k}function $(a,b){let c=function(a){let b="";for(let c of(0,j.dU)(a))c.content&&(b+=`${c.content}
15
+ 质量提醒:${a.gateRules.map(a=>a.name).join("、")}`}},11248:(a,b,c)=>{c.d(b,{K3:()=>f,zn:()=>g});let d=/[A-Za-z0-9%+-.,]/gu;function e(a){let b=a.charCodeAt(0);return b>=65281&&b<=65374?String.fromCharCode(b-65248):a}function f(a){return a.replace(d,e).replace(/\s+/gu,"").replace(/[×X**]/gu,"x").replace(/[%]/gu,"%").replace(/‰/gu,"permille").replace(/平方米|平方|平米|m²|㎡/giu,"m2").replace(/公顷|hm²/giu,"hm2").replace(/立方米|立方|m³/giu,"m3").replace(/升/gu,"l").replace(/毫升/gu,"ml").replace(/千米|公里/gu,"km").replace(/毫米/gu,"mm").replace(/厘米/gu,"cm").replace(/米/gu,"m").replace(/千克|公斤/gu,"kg").replace(/克/gu,"g").replace(/吨/gu,"t").replace(/人民币万元|万元人民币/gu,"万元").replace(/人民币元|元人民币|¥/gu,"元").replace(/日历天|自然日/gu,"天").replace(/工作日/gu,"工作天").replace(/个月/gu,"月").replace(/小时/gu,"h").replace(/分钟/gu,"min").replace(/兆帕/gu,"mpa").replace(/千帕/gu,"kpa").replace(/千牛/gu,"kn").replace(/牛/gu,"n").replace(/千瓦/gu,"kw").replace(/兆瓦/gu,"mw").replace(/瓦/gu,"w").replace(/千伏/gu,"kv").replace(/伏/gu,"v").replace(/毫安/gu,"ma").replace(/安培|安/gu,"a").replace(/赫兹/gu,"hz").replace(/摄氏度/gu,"℃").replace(/百分之\s*(\d+(?:\.\d+)?)/gu,"$1%").replace(/千分之\s*(\d+(?:\.\d+)?)/gu,"$1permille").replace(/直径\s*(\d+(?:\.\d+)?)/gu,"φ$1").replace(/[Φφ]\s*(\d+(?:\.\d+)?)(?:mm)?/giu,"φ$1").replace(/DN\s*(\d+)/giu,"dn$1").replace(/D\s*(\d+)(?=\b|[^a-z0-9])/giu,"d$1").replace(/\b(KN|MPA|KPA|KW|MW|KV|HZ|DN)\b/giu,a=>a.toLowerCase()).replace(/[,,、。;;::||()()【】\]《》<>"“”'‘’[]/gu,"").toLowerCase()}function g(a){let b=f(a),c=new Set;for(let a of b.matchAll(/\d+(?:\.\d+)?(?:m2|hm2|亩|m3|l|ml|mm|cm|km|m|kg|g|t|万元|亿元|元|天|工作天|月|年|h|min|%|permille|mpa|kpa|pa|kn|n|kn\/m2|kn\/m|kw|mw|w|kv|v|ma|a|hz|℃|台|套|件|个|根|只|组|项|处|座|栋|层|间|批|次|人|工日|人日)?|dn\d+|φ\d+(?:\.\d+)?|d\d+|c\d{2,}|hrb\d+|q\d{3}[a-z]?|m\d+|\d+(?:\.\d+)?x\d+(?:\.\d+)?(?:x\d+(?:\.\d+)?)?|[+-]?\d+\.\d{3}|\d+[:/]\d+/giu))c.add(a[0]);return[...c]}},14070:(a,b,c)=>{function d(a){let b=a.split(/[,。;:、\s\d()()《》<>【】"“”'‘’\-/\\|,.:;]+/u).filter(Boolean),c=new Set;for(let a of b){let b=a.trim();if(b.length>=2&&c.add(b),b.length>=3)for(let a=0;a<=b.length-2;a++){let d=b.slice(a,a+2);d.length>=2&&!/^[a-zA-Z0-9]+$/u.test(d)&&c.add(d)}}return[...c]}function e(a,b,c=.3){return function(a,b){let c=new Set(d(a)),e=new Set(d(b));if(0===c.size||0===e.size)return 0;let f=0;for(let a of c)if(e.has(a))f+=1;else if(a.length>=2){for(let b of e)if(b.length>=2&&(b.includes(a)||a.includes(b))){f+=.5;break}}return f/Math.max(c.size,1)}(a,b)>=c}c.d(b,{C1:()=>e})},22157:(a,b,c)=>{c.d(b,{Te:()=>g,_3:()=>h,c6:()=>e,l$:()=>i,lG:()=>f});var d=c(77598);function e(a){return(0,d.createHash)("sha1").update(JSON.stringify(a)).digest("hex")}function f(a){if(null==a)return"";if("string"==typeof a)return a;if("number"==typeof a||"boolean"==typeof a)return String(a);try{return JSON.stringify(a)}catch{return String(a)}}function g(a){if(a?.aborted)throw Error("用户中止")}function h(a){let b=Math.max(1,a.total);return"chapter"===a.kind?(a.targetWords||0)>=6e3?b<=3?1:Math.min(b,2):b<=3?b:b<=6?Math.min(b,4):b<=10?Math.min(b,6):Math.min(b,8):"search"===a.kind?b<=6?b:Math.min(b,8):"deepRetrieval"===a.kind?Math.min(b,a.highRisk?6:4):"sectionRepair"===a.kind?b<=3?b:b<=8?4:Math.min(b,6):Math.min(b,4)}async function i(a,b,c){if(0===a.length)return[];let d=Math.max(1,Math.min(a.length,c.concurrency||h({total:a.length,kind:c.kind,targetWords:c.targetWords,highRisk:c.highRisk}))),e=Array(a.length),f=0;return await Promise.all(Array.from({length:d},async()=>{for(;f<a.length;){let c=f;f+=1,e[c]=await b(a[c],c)}})),e}},23760:(a,b,c)=>{c.d(b,{AC:()=>p,Ai:()=>s,BV:()=>v,Ff:()=>n,Fv:()=>D,K1:()=>B,M$:()=>$,N1:()=>S,NS:()=>E,N_:()=>Y,Nz:()=>l,S2:()=>T,ST:()=>O,Ty:()=>w,bM:()=>V,f8:()=>z,gN:()=>x,i0:()=>Q,iC:()=>u,ji:()=>R,k0:()=>C,kQ:()=>Z,mR:()=>X,qK:()=>J,qm:()=>M,vY:()=>P,xX:()=>N,yd:()=>U,yw:()=>I,z0:()=>m});var d=c(8753),e=c(74329),f=c(78217),g=c(11248),h=c(70208),i=c(91977),j=c(52511),k=c(22157);function l(a){return e.hc.test(a.message)}function m(a){let b="string"==typeof a?a:a.message;if("error"===("string"==typeof a?void 0:a.level))return"blocking";for(let a of e.gr)if(a.pattern.test(b))return a.severity;return"minor"}function n(a){let b={blocking:0,important:0,minor:0};for(let c of a)b[m(c)]+=1;return b}function o(a,b){let c=a.replace(/[\][()`*_>#|{},。、“”‘’:;!?,.!?:;-]+/gu," ").replace(e.ug," ").trim();if(c.length<120)return;let d=c.match(/[A-Za-z][A-Za-z-]{2,}|[\p{Script=Han}]{2,}/gu)||[];if(d.length<30)return;let f=1,g=new Map;for(let a=0;a<d.length;a+=1){let c=d[a].toLowerCase();if(g.set(c,(g.get(c)||0)+1),a>0&&c===d[a-1].toLowerCase()?f+=1:f=1,f>=12)return{level:"error",message:`${b} 存在重复 token 退化输出`,suggestion:"请重新生成该小节,禁止保留连续重复的英文单词或无意义片段。"}}let h=[...g.entries()].sort((a,b)=>b[1]-a[1])[0];if(h&&h[1]>=25&&h[1]/d.length>=.42)return{level:"error",message:`${b} 存在重复 token 退化输出`,suggestion:`检测到“${h[0]}”异常高频重复,请重新生成该小节。`}}function p(a,b=[]){let c=[],d=o(a,"全文");for(let a of(d&&c.push(d),b)){let b=o(a.content,`章节“${a.title}”`);for(let d of(b&&c.push(b),a.sections||[])){let b=d.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=a.content.match(RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${b}\\s*\\n([\\s\\S]*?)(?=^#{3,4}\\s+|^##\\s+|$)`,"mu"));if(!e)continue;let f=o(e[1],`小节“${d}”`);f&&c.push(f)}}return c}function q(a){return a.severity&&a.repairability?a:/小节只有标题|空小节|小节内容补写未完成/u.test(a.message)?{...a,severity:"blocker",repairability:"local_deterministic",category:"structure",owner:"system"}:/不得出现|提示词要求|疑似提示词指令标题|项目污染|生成未完成/u.test(a.message)?{...a,severity:"blocker",repairability:"llm_repairable",category:"structure",owner:"system"}:/事实一致性冲突|projectFactOnly|核心事实/u.test(a.message)?{...a,severity:"error"===a.level?"blocker":"warning",repairability:"manual_review",category:"fact_consistency",owner:"user"}:/证据使用覆盖率偏低|BOQ|落位|高分模块|专业链|闭环/u.test(a.message)?{...a,severity:"warning",repairability:"not_repair_needed",category:"evidence_coverage",owner:"system"}:"error"===a.level?{...a,severity:"blocker",repairability:"llm_repairable",category:"structure",owner:"system"}:"warning"===a.level?{...a,severity:"warning",repairability:"not_repair_needed",category:"style",owner:"system"}:{...a,severity:"suggestion",repairability:"not_repair_needed",category:"style",owner:"system"}}function r(a){return"blocker"===q(a).severity&&(!!/提示词要求|疑似提示词指令标题|适用性自相矛盾|不得出现/u.test(a.message)||!/目录与正文/u.test(a.message)&&(/配置要求缺少必要内容/u.test(a.message)?"error"===a.level:!/正文缺少规划小节|缺少规划小节/u.test(a.message)&&(!!/小节内容补写未完成|空小节|小节只有标题|生成未完成/u.test(a.message)||!(/生成后事实反查失败/u.test(a.message)||/规划小节正文过短|小节生成未达标/u.test(a.message)||/事实一致性冲突:项目名称/u.test(a.message))&&(/跨章一致性|专业评分不足|专业缺口|泛化套话|缺少关键线路|缺少材料验收|缺少风险识别|缺少进场/u.test(a.message)?"error"===a.level&&!/证据使用覆盖率偏低|章节逻辑依赖不足|文档交付评分报告/u.test(a.message):!(!l(a)||/章节审查|最终质量审查|正文篇幅明显低于目标|正文存在空泛占位表达|结构化事实读取不足|正文可能未显式覆盖|仅包含文件类型和占位符|不在本次招标范围内/u.test(a.message))))))}function s(a,b,c){let d=[{key:"no_errors",label:"无阻断级校验错误",passed:!a.some(a=>"error"===a.level&&r(a))},{key:"basic_facts",label:"基础事实齐全",passed:b.project.length>0},{key:"source_traceability",label:"事实具备来源追踪",passed:[...b.project,...b.schedule,...b.quality,...b.safety].every(a=>!!a.sourceFile)},{key:"structured_precision",label:"结构化精确参数已使用",passed:b.preciseFacts.length<e.mu||a.every(a=>"error"!==a.level||!e.Ab.test(a.message))},{key:"chapter_evidence",label:"章节均具备证据",passed:c.every(a=>a.evidence.length>0)},{key:"no_missing_content",label:"无资料未提供章节",passed:c.every(a=>!a.content.includes("资料未提供"))},{key:"no_project_contamination",label:"无项目污染和事实一致性阻断",passed:!a.some(a=>"error"===a.level&&e.Uv.test(a.message)&&r(a))}],f=a.map(q).filter(a=>"error"===a.level&&r(a));return{passed:0===f.length,blockingIssues:f,checklist:d}}function t(a){let b=[];for(let c of a.split(e.AQ))e.w7.test(c)&&e.N3.test(c)&&b.push(c);return b}function u(a){let b=[...a.matchAll(e.DB)],c=[];for(let d=1;d<b.length;d+=1){let f=b[d].index||0,g=b[d+1]?.index??a.length,h=a.slice(f,g);e.Ks.test(h)&&c.push({level:"warning",message:`第 ${d+1} 章可能重复出现基础信息`,suggestion:"如该信息与本章主题无关,建议合并到更合适的概况类章节,避免重复铺陈。"})}if(0===b.length)return c;let d=b[0].index||0,f=b[1]?.index??a.length,g=a.slice(d,f),h=g.search(e.jM);if(h<=0)return c;let i=g.slice(0,h).replace(e.Dc,""),j=[];for(let a of e.Y8)RegExp(`${a}\\s*[::]`,"u").test(i)&&j.push(a);return j.length>=3&&c.push({level:"warning",message:`基础信息表前重复叙述字段:${j.join("、")}`,suggestion:"基础信息已表格化时,表格前只保留一句引导语,不要重复逐项叙述名称、编号、范围、周期、质量等字段。"}),c}function v(a){let b=[],c=[];for(let b of e.ZH)a.includes(b)&&c.push(b);c.length>0&&b.push({level:"warning",message:`存在模板化前缀或套话:${c.join("、")}`,suggestion:"请删除“本节/本章将/以下从”等前缀,标题后直接进入对象、动作、措施、检查和闭环。"});let d=a.match(/OCR|知识库|提示词|绑定片段|兜底|后台|文件路径|识别错误/giu);return d?.length&&b.push({level:"error",message:`正文包含后台或资料处理话术:${[...new Set(d)].join("、")}`,suggestion:"请改为正式文档语言,例如“资料文字不清”“资料口径不一致”“项目资料”,不得暴露后台处理过程。"}),b}function w(a){let b=[];for(let c of a){let a=(c.sections||[]).filter(Boolean),d=a.filter((b,c)=>a.indexOf(b)!==c);d.length>0&&b.push({level:"warning",message:`${c.title} 存在重复小节:${[...new Set(d)].join("、")}`,suggestion:"请保留用户需求、模板或显式大纲中真实需要的小节,删除重复项。"});let e=new Map;for(let b of a){let a=/劳动力|人员|工种/u.test(b)?"劳动力计划":/机械|设备|机具/u.test(b)?"机械设备计划":/材料|物资/u.test(b)?"材料物资计划":/冬季|雨季|高温|台风|大风/u.test(b)?"特殊气候措施":"";a&&e.set(a,[...e.get(a)||[],b])}for(let[a,d]of e)d.length>1&&b.push({level:"warning",message:`${c.title} 存在重复主题小节:${a}(${d.join("、")})`,suggestion:"请合并同类小节,只保留一个主表或主方案,其他位置采用引用或执行说明。"})}return b}function x(a){let b=e.HX.exec(a);if(!b)return[{level:"error",message:"缺少目录页",suggestion:"请在封面后生成“## 目录”,并按一级章父级、二级小节子级组织。"}];let c=0,d=0;for(let a of b[1].split(e.A5))e.ZT.test(a)&&e.EB.test(a)&&(c+=1,e.sr.test(a)&&(d+=1));return c>0&&0===d?[{level:"error",message:"目录二级小节未作为子级缩进",suggestion:"目录应为父子级导航:一级章单独成行,二级小节至少缩进两个空格列在所属章下方。"}]:[]}function y(a){return a.replace(/^#+\s*/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").replace(/^\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/[()]/gu,a=>"("===a?"(":")").replace(/[\s::.。;;,,、]+$/gu,"").replace(/的(?=保障体系|管理体系|控制体系|措施|方案|计划|要求)/gu,"").replace(/[\s()()::.。;;,,、-]/gu,"").trim()}function z(a){let b=function(a){let b=e.HX.exec(a);return b?b[1].split(e.A5).map(a=>/^\s*\d+\.\d+\s+(.+)$/u.exec(a.trim())).filter(a=>!!a).map(a=>y(a[1]||"")).filter(Boolean):[]}(a),c=[...a.matchAll(/^###\s+(\d+\.\d+\s+.+)$/gmu)].map(a=>y(a[1]||"")).filter(Boolean);if(0===b.length||0===c.length)return[];let d=new Set(c),f=new Set(b),g=b.filter(a=>!d.has(a)),h=c.filter(a=>!f.has(a)),i=[];return g.length>0&&i.push({level:"error",message:`目录与正文不一致,目录小节未在正文中找到:${[...new Set(g)].join("、")}`,suggestion:"请以最终清洗后的正文二级标题为准重新生成目录。"}),h.length>0&&i.push({level:"error",message:`目录与正文不一致,正文小节未进入目录:${[...new Set(h)].join("、")}`,suggestion:"请重新生成目录,确保只收录正文二级小节,不收录三级小节。"}),i}function A(a){let b=a.replace(/^#{1,6}\s+/u,"").replace(/^\s*\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").trim(),c=(0,h.GQ)(b),d=/^(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用).*|(?:如|若|如果)(?:涉及|不涉及|适用|不适用).*|.*(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成).*|.*(?:按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|注意事项))\s*$/u;return d.test(b)||d.test(c)}function B(a){let b=[...a.matchAll(/^#{2,6}\s+(.+)$/gmu)].map(a=>(0,h.GQ)(a[1]||"")).filter(A);return b.length>0?[{level:"error",message:`正文存在疑似提示词指令标题:${[...new Set(b)].slice(0,8).join("、")}`,suggestion:"请删除或改写为正式施工组织设计小节标题,目录也不得收录该类标题。"}]:[]}function C(a){let b=[],c=a.split(e.A5).map(a=>a.trim()).filter(a=>a&&!/^#{1,6}\s+/u.test(a)&&!/^\s*\|/u.test(a)&&!/^<div\b/iu.test(a)),d=c.find(a=>y(a).length<=1);d&&b.push({level:"warning",message:`正文存在孤立字或残缺段落:${d}`,suggestion:"请删除残缺行或重新生成所在小节。"});let f=c.find(a=>/[,、;:和与在为对将]$/u.test(a)||/(通过|包括|如下|主要包括)$/u.test(a));f&&b.push({level:"warning",message:`正文存在疑似截断句:${f}`,suggestion:"请补完整该段落,避免以连接词、逗号或冒号结尾。"});let g=c.find(a=>a.length>380);g&&b.push({level:"warning",message:`正文存在过长段落:${g}`,suggestion:"请拆分为多段或表格,改善导出版式和可读性。"});let h=c.find(a=>/\S.+(?:\s|[。;;])(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)\S.+(?:\s|[。;;])(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)\S/u.test(a)&&!/\b\d+\.\d+\s*(?:mm|cm|m|㎡|m2|kg|t|MPa|kPa|V|KV|kV|A)\b/iu.test(a));h&&b.push({level:"error",message:`正文存在列表项粘连同一行:${h.slice(0,120)}`,suggestion:"有序列表和无序列表必须逐项独占一行,确保 Markdown/PDF/DOCX 正确排版。"});let i=a.match(/(?:PDF\s*)?第\s*\d+\s*(?:[-—至到~~]\s*\d+)?\s*页|(?:图纸|清单|资料|文件|[\u4e00-\u9fa5A-Za-z0-9()()、·-]{2,24}(?:工程)?)\s*(?:[((]?\s*|(?:共|多达|约|合计)\s*)\d+\s*页|[\u4e00-\u9fa5A-Za-z0-9、及与和]{2,24}\s*(?:共|多达|约|合计)\s*\d+\s*页|\d+\s*页\s*(?:图纸|资料|文件|装饰|土建|加固|给排水|电气|智能化|消防)|\d+\s*页/iu)?.[0];i&&b.push({level:"error",message:`正文残留资料页码元信息:${i}`,suggestion:"正式投标正文应引用招标文件、施工图设计文件、工程量清单和相关专业图纸,不写 PDF 页码或资料页数。"});let j=c.find(a=>/仅作为内部事实提取依据|正式正文不得引用文件名|后台事实|内部事实/u.test(a));return j&&b.push({level:"error",message:`正文残留内部处理说明:${j.slice(0,120)}`,suggestion:"正式投标正文不得出现内部事实抽取、后台处理或文件名引用限制说明。"}),b}function D(a){let b=[],c=[...a.matchAll(/^##\s+(.+)$/gmu)].map(a=>(0,h.GQ)(a[1]||"")).filter(a=>"目录"!==a&&!/^第[一二三四五六七八九十百千万\d]+章\s+/u.test(a));c.length>0&&b.push({level:"error",message:`正文存在非正式章二级标题:${[...new Set(c)].slice(0,8).join("、")}`,suggestion:"正文 ## 只允许用于“第X章”正式章标题;章内小节必须使用 ### X.Y。"});let d=[...a.matchAll(/^##\s+(第[一二三四五六七八九十百千万\d]+章\s+.+)$/gmu)];for(let c=0;c<d.length;c+=1){let e=d[c].index||0,f=d[c+1]?.index??a.length,g=[...a.slice(e,f).matchAll(/^###\s+\d+\.\d+\s+(.+)$/gmu)].map(a=>(0,h.GQ)(a[1]||"")),i=(0,h.GQ)((d[c][1]||"").replace(/^第[一二三四五六七八九十百千万\d]+章\s*/u,""));1===g.length&&y(g[0])===y(i)&&b.push({level:"error",message:`章节只有一个且与章名同名的小节:${d[c][1]}`,suggestion:"应拆分为多个业务小节,不能用章标题重复作为唯一二级小节。"})}return b}function E(a){let b=[];/按审批确认执行/u.test(a)&&b.push({level:"error",message:"表格存在自动兜底污染内容:按审批确认执行",suggestion:"正式投标表格不得使用通用兜底短语,应保留真实业务内容或删除该行。"});let c=(a.match(/\|\s*信息项\s*\|\s*内容\s*\|/gu)||[]).length;c>1&&b.push({level:"error",message:`项目基础信息类表格重复:${c} 处`,suggestion:"项目名称、招标人、建设地点、工期、质量等基础信息只能集中输出一次。"});let d=a.match(/^\|\s*---\s*\|\s*---\s*\|\s*$/gmu)||[];for(let c of(d.length>20&&b.push({level:"error",message:`表格分隔线异常重复:${d.length} 行`,suggestion:"请修复表格规范化逻辑,禁止把数据行拆成多个碎表。"}),t(a))){let a=c.split(e.A5).filter(a=>e.w7.test(a));if(a.length<2)continue;if(!e.N3.test(a[1]||"")){b.push({level:"error",message:`表格分隔线位置不规范:${a[0]||""}`,suggestion:"Markdown 表格必须紧跟表头输出分隔线,例如 |---|---|,中间不得插入正文或其他管道行。"});continue}let d=a.map(a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>a.trim())),f=d[0]||[],g=f.filter(a=>/^(?:列|字段|内容|备注)\d+$/u.test(a));g.length>0&&b.push({level:"error",message:`表格存在泛化表头:${g.join("、")}`,suggestion:"正式投标表格必须使用业务字段表头,不得出现“列5/字段1/内容2”等临时表头。"});let h=f.length;d.find((a,b)=>1!==b&&a.some(a=>!a)||a.length!==h)&&b.push({level:"error",message:`表格存在空单元格或列数不一致:${f.join("、")}`,suggestion:"请补齐每个单元格内容并统一列数;无适用内容时写明“不适用原因”或调整表格结构。"})}return b}function F(a){return a.split(e.A5).filter(a=>!/^#{1,6}\s+/u.test(a.trim())).filter(a=>!/^\s*\|/u.test(a)).filter(a=>!/^\s*:?-{3,}:?/u.test(a)).filter(a=>!/^<\/?div\b/iu.test(a.trim())).join("\n").replace(/[|*_`<>-]/gu,"").replace(e.ug,"").length}function G(a){let b=[...a.matchAll(/^(#{3,4})\s+(.+)$/gmu)];return b.map((c,d)=>{let e=c[1].length,f=(c.index||0)+c[0].length,g=b.slice(d+1).find(a=>a[1].length<=e),h=g?.index??a.length,i=(c[2]||"").trim();return{rawTitle:i,title:y(i),level:e,body:a.slice(f,h)}}).filter(a=>a.title&&(3===a.level||4===a.level))}function H(a,b,c,d,f){let g=F(d),h=e.w7.test(d)&&e.N3.test(d),i=F(d.split("\n").filter(a=>!e.w7.test(a)&&!e.N3.test(a)).join("\n").replace(/^#{1,6}\s+.+$/gmu,""));if(/【本小节生成未达标,需重新生成】/u.test(d))return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 小节生成未达标:${b}`};if((!/项目基本信息|基本信息|工程概况表|项目概况表/u.test(b)||!h&&!(g>=40))&&(!h||!(i<20))&&(!(g>=80)||!(i>=20))){if(0===g)return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 空小节:${b}`};if(g<180)return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"too_short",planned:f,message:`${a} ${f?"规划小节":"正文小节"}正文过短:${b}`}}}function I(a,b){let c=[],d=new Set;for(let e of b){let b=e.content?.trim()?e.content:a;for(let a of e.sections||[]){let f=y(a),g=function(a,b){let c=G(a).filter(a=>(function(a,b){let c=y(a),d=y(b);if(!c||!d)return!1;if(c===d||c.includes(d)||d.includes(c))return!0;let e=/项目概况|主要施工方案|新技术新材料|工程重点难点|重点难点|危大工程|保障体系|安全保障|工期|质量|安全生产|应急预案|资源|人材机|材料|机械|劳动力|进度|关键线路|交通疏导|成品保护|深化设计|验收/gu,f=new Set(c.match(e)||[]),g=new Set(d.match(e)||[]),h=[...f].filter(a=>g.has(a)).length;return h>=2||1===Math.min(f.size,g.size)&&1===h&&16>=Math.max(c.length,d.length)})(a.rawTitle,b));return c.length<=1?c[0]:c.map(a=>({item:a,gap:H("",b,a.level,a.body,!0),textLength:F(a.body)})).sort((a,b)=>{let c=a.gap&&"empty"===a.gap.reason?1:0,d=b.gap&&"empty"===b.gap.reason?1:0;return c!==d?c-d:b.textLength-a.textLength})[0]?.item}(b,a),h=`${e.title}|${f}|planned`;if(!g){c.push({chapterTitle:e.title,sectionTitle:a,level:3,bodyLength:0,reason:"missing_planned_section",planned:!0,message:`${e.title} 缺少规划小节:${a}`}),d.add(h);continue}let i=H(e.title,a,g.level,g.body,!0);i&&c.push(i),d.add(h)}for(let a of G(b)){let b=`${e.title}|${a.title}|actual`,f=`${e.title}|${a.title}|planned`;if(d.has(b)||d.has(f))continue;let g=H(e.title,a.title,a.level,a.body,!1);g&&"empty"===g.reason&&c.push(g),d.add(b)}}return c}function J(a,b){return I(a,b).filter(a=>"empty"===a.reason||"missing_planned_section"===a.reason).map(a=>({level:"error",message:a.message,suggestion:"必须补充与该小节相关的材料事实和必要内容,达到正文完整度要求。"}))}function K(a){return`${a.fieldName||a.key} ${(0,k.lG)(a.value)}`.replace(/\s+/gu," ").trim()}function L(a){let b=new Set;for(let c of[/\d+\s*日历天/gu,/(?:计划工期|合同工期|总工期|工期|施工周期)[^\n。;;]{0,12}\d+\s*天/gu,/(?:计划工期|合同工期|总工期|工期|施工周期)[^\n。;;]{0,12}\d+\s*(?:个月|月)/gu])for(let d of a.matchAll(c)){let a=d[0].match(/\d+\s*(?:日历天|天|个月|月)/u)?.[0]?.replace(/\s+/gu,"");a&&b.add(a)}return[...b]}function M(a,b){let c=[],d=b.schedule.map(K).find(a=>/\d+\s*(?:日历天|天|个月|月)|计划工期|合同工期/u.test(a)),e=b.quality.map(K).find(a=>/质量|合格|优良/u.test(a));if(d){let b=L(d)[0],e=L(a),f=b?e.filter(a=>a!==b&&/日历天/u.test(a)):[];b&&f.length>=2&&c.push({level:"warning",message:`跨章一致性冲突:正文出现与资料工期不一致的表述 ${f.slice(0,6).join("、")}`,suggestion:`请统一使用资料中的工期口径:${d}`})}return e&&!/质量标准|质量目标|合格|优良/u.test(a)&&c.push({level:"error",message:"跨章一致性缺口:正文未稳定体现资料中的质量目标",suggestion:`请在工程概况、质量保证和验收相关章节统一体现:${e}`}),c}function N(a){let b=[],c=/(?:三检制|三级教育|三级管理|5S|24\s*小时|每日|每周|每月|一次|两次)/gu;for(let d of a){let a=[...new Set(d.content.match(c)||[])];a.length>=3&&!/责任人|检查记录|整改|复查|验收|台账|交底|巡查|闭环/u.test(d.content)&&b.push({level:"warning",message:`${d.title} 管理措施数字较多但缺少执行闭环:${a.slice(0,8).join("、")}`,suggestion:"这些管理数字可以保留,但需要补充责任主体、检查频次、记录台账、整改复查和闭环要求。"})}return b}function O(a){let b=/(?:加强组织领导|严格执行规范|落实责任制度|确保工程质量|强化过程管理|提高思想认识|完善管理体系|形成闭环管理)/gu,c=[];for(let d of a)(d.content.match(b)||[]).length>=6&&!/材料|工序|验收|复验|节点|风险|交底|隐蔽|检验批|进场/u.test(d.content)&&c.push({level:"error",message:`${d.title} 存在较多未绑定项目事实和工序控制点的泛化套话`,suggestion:"请替换为结合资料事实、施工对象、工序控制、验收资料和整改闭环的专业内容。"});return c}function P(a,b){let c=[...b.project,...b.schedule,...b.quality,...b.safety,...b.resources,...b.preciseFacts,...b.bills,...b.drawings,...b.rules,...b.specifications].map(K).join("\n");if(80>(0,f.V7)(c))return[];let d=[],e=(0,g.K3)(c),h=[],i=[];for(let b of(0,g.zn)(a)){let c=(0,g.K3)(b),d=a.indexOf(b),f=d>=0?a.slice(Math.max(0,d-36),Math.min(a.length,d+b.length+36)):a,j=function(a,b){let c=`${a} ${b}`;return/三检制|三级|5S|24\s*小时|每日|每周|每月|一次|两次|责任制|制度/u.test(c)?"soft":/总工期|计划工期|合同工期|日历天/u.test(c)||/最高投标限价|招标控制价|合同估算价|投资估算|报价|金额|万元|元/u.test(c)||/(?:工程量|清单|建设规模|建筑面积|长度|材料|设备|规格|型号).{0,24}(?:m²|㎡|m3|m³|米|吨|套|台|个|项|%)/u.test(c)?"hard":/GB\s*\d|JGJ\s*\d|CJJ\s*\d|ISO\s*\d|GB\/T|CECS\s*\d|DL\s*\d|YB\s*\d|SH\s*\d|SJ\/T\s*\d|CJJ\/T\s*\d/u.test(c)?"soft":/标准|规范|编号/u.test(c)?"hard":"soft"}(b,f);"hard"!==j||e.includes(c)||h.push(b),"soft"!==j||e.includes(c)||i.push(b)}let j=[...new Set(h)],l=[...new Set(i)];return j.length>=2&&d.push({level:"error",message:`生成后事实反查失败:正文出现资料事实主表中未找到的关键数字 ${j.slice(0,8).join("、")}`,suggestion:"请删除无法在资料中反查的关键数字,或改写为资料已明确的事实口径。"}),l.length>=6&&d.push({level:"warning",message:`生成后事实反查提示:正文出现较多未在资料事实主表中反查到的管理数字 ${l.slice(0,10).join("、")}`,suggestion:"请确认这些管理数字属于通用制度、规范要求或项目资料事实;如无依据,建议改为定性管理要求。"}),/质量目标|质量标准/u.test(a)&&b.quality.length>0&&!b.quality.some(b=>a.includes((0,k.lG)(b.value).slice(0,18)))&&d.push({level:"warning",message:"生成后事实反查提示:正文质量目标表述未明显匹配质量事实主表",suggestion:"请使用资料中的质量目标原文或等价表述。"}),d}function Q(a){let b=[];for(let d of a){var c;let a=d.content;if(800>(0,f.V7)(a))continue;let e=/资料|招标|清单|图纸|标准|范围|工期|质量|验收/u.test(a)?2:+!!/项目|工程|要求/u.test(a),g=/首先|其次|同时|最后|一是|二是|流程|步骤|阶段|组织顺序/u.test(a)?2:+!!/并且|同时|然后|因此/u.test(a),h=/控制点|关键线路|复验|隐蔽验收|风险|交底|检验批|整改|闭环/u.test(a)?2:+!!/措施|要求|管理|检查/u.test(a),i=/责任人|检查|记录|验收|整改|复查|进场|调配|应急/u.test(a)?2:+!!/落实|执行|安排|组织/u.test(a),j=/本项目|本工程|招标范围|工程量|建设地点|计划工期|质量目标/u.test(a)?2:+!!/项目|工程/u.test(a),k=/工期|质量|安全|资源|验收/u.test(a)?2:+!!/目标|要求/u.test(a),l={factuality:e,structure:g,depth:h,executable:i,specificity:j,consistency:k},m=e+g+h+i+j+k,n=(c=d.title,/概况|工程|项目/u.test(c)?{min:5,focus:"事实依据、项目特异性"}:/部署|总体|组织/u.test(c)?{min:6,focus:"组织结构、可执行闭环、跨章一致性"}:/进度|工期/u.test(c)?{min:6,focus:"进度结构、工期一致性、纠偏机制"}:/质量/u.test(c)?{min:6,focus:"质量深度、验收复验、资料闭环"}:/安全|文明|危大|风险/u.test(c)?{min:6,focus:"风险覆盖、应急响应、检查整改"}:/资源|材料|设备|劳动力/u.test(c)?{min:5,focus:"资源依据、进场调配、进度支撑"}:{min:4,focus:"事实依据、专业深度、可执行性"});if(m<n.min){let a=Object.entries(l).filter(([,a])=>a<1).map(([a])=>a).join("、")||n.focus;b.push({level:"error",message:`${d.title} 专业评分不足:${m}/12,薄弱维度:${a}`,suggestion:`请按章节任务卡补齐${n.focus},并写出资料依据、实施流程、专业控制点和检查整改闭环。`})}}return b}function R(a){let b=[{re:/进度|工期/u,need:/关键线路|穿插|纠偏|资源保障|节点|动态调整/u,message:"进度工期章节缺少关键线路、穿插施工或纠偏保障内容"},{re:/质量/u,need:/材料.*验收|复验|隐蔽验收|整改.*复验|质量.*资料|检验批/u,message:"质量章节缺少材料验收复验、隐蔽验收或整改复验闭环"},{re:/安全|文明|危大|风险/u,need:/风险|临电|消防|应急|检查.*整改|文明施工|人员|设备/u,message:"安全文明章节缺少风险识别、现场控制或应急检查闭环"},{re:/资源|材料|设备|劳动力/u,need:/进场|验收|调配|保管|供应|投入计划/u,message:"资源章节缺少进场、验收、调配或保管计划"},{re:/施工|工艺|技术|方案/u,need:/准备|流程|工艺|控制点|验收|交底/u,message:"施工技术章节缺少施工准备、工艺流程、控制点或验收要求"}],c=[];for(let d of a){let a=d.content;for(let e of b)e.re.test(d.title)&&(0,f.V7)(a)>=600&&!e.need.test(a)&&c.push({level:"error",message:`${d.title}:${e.message}`,suggestion:"请按专业任务卡定向补写该章节,补齐可实施的控制措施、资料依据和闭环要求。"})}return c}function S(a,b){let c=[],d=a.replace(e.ug,""),f=function(a){let b=new Set;for(let c of a.preciseFacts){let a=`${c.processingType||""} ${c.roleId} ${c.sourceFile}`;if(!e.FM.test(a)&&"precise_fact"!==c.roleId)continue;let d=`${c.key} ${c.fieldName||""} ${c.value}`;for(let a of d.matchAll(e.No)){let c=a[0].trim();/万元|元|报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(`${c} ${d}`)||/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂|页码|目录/u.test(d)||/^\d+$/.test(c)&&10>Number(c)||b.add(c)}}return[...b]}(b),g=function(a,b){let c=0;for(let d of a)b.includes(d.replace(e.ug,""))&&(c+=1);return c}(f,d);return f.length>=e.mu&&g/f.length<e.tg&&c.push({level:"warning",message:`可靠精确参数使用不足:${g}/${f.length}`,suggestion:"请将资料中可靠的规格、参数、数量、时间、比例和标准编号写入对应章节;商务金额、单价、税率、预留金不得写入正文。"}),b.bills.length>0&&!e.pP.test(a)&&c.push({level:"error",message:"正文未体现结构化数据资料",suggestion:"请从表格、列表或明细中提取对象、单位、数量、规格和关键参数补入对应章节。"}),b.drawings.length>0&&!e._U.test(a)&&c.push({level:"error",message:"正文未体现设计/方案/说明类资料",suggestion:"请从设计、方案或说明资料中提取对象、流程、节点、做法、配置、规则和标准要求。"}),c}function T(a,b,c){let d=[],e=c.tables||[];if(0===e.length)return d;let f=a.replace(/\s+/gu,"").toLowerCase(),g=0,h=0,i=[];for(let a of e){let b=a.headers.map(a=>a.replace(/\s+/gu,"").toLowerCase()),c=b.findIndex(a=>/项目名称|^名称$|清单项|分部分项|项目特征/u.test(a)),d=b.findIndex(a=>/项目编码|编码|编号/u.test(a)),e=b.findIndex(a=>/^工程量$|^数量$/u.test(a));for(let b of a.rows){g+=1;let a=c>=0?(b[c]||"").replace(/\s+/gu,""):"",j=d>=0?(b[d]||"").replace(/\s+/gu,""):"",k=e>=0?(b[e]||"").replace(/\s+/gu,""):"",l=a.length>=3?a.slice(0,Math.min(a.length,16)):"",m=j.length>=3?j.slice(0,Math.min(j.length,12)):"",n=l&&f.includes(l),o=m&&f.includes(m);n||o?h+=1:a.length>=3&&i.push(`${a.slice(0,40)}${k?` ${k}`:""}(未落位)`)}}if(g>0){let a=h/g,b=i.length>0?`未落位项(共${i.length}项):${i.slice(0,12).join(";")}${i.length>12?` 及其他${i.length-12}项`:""}`:"";a<.3?d.push({level:"error",message:`清单项落位严重不足:${h}/${g} 项(${Math.round(100*a)}%),将触发质量修复`,suggestion:`请将清单中的工程内容、项目特征和数量写入对应章节正文。${b}`}):a<.6&&d.push({level:"warning",message:`清单项落位不足:${h}/${g} 项(${Math.round(100*a)}%)`,suggestion:`建议补充落位以下清单项:${b}`})}return d}function U(a,b){let c=[],d=b.drawings||[];if(0===d.length)return c;let e=a.replace(/\s+/gu,"").toLowerCase(),f=[...new Set(d.map(a=>a.sourceFile||"").filter(Boolean))],g=0,h=[];for(let a of f){let b=a.replace(/\.[^.]+$/u,"").replace(/[/\\]/gu,"").toLowerCase(),c=a.split("/").pop()||a;(b.length>=3?e.includes(b.slice(0,Math.min(b.length,12))):/图纸|设计|说明|节点|做法|构造/u.test(e))?g+=1:h.push(c)}if(f.length>0){let a=g/f.length;a<.25?c.push({level:"error",message:`图纸引用严重不足:${g}/${f.length} 份图纸被正文引用(${Math.round(100*a)}%)`,suggestion:`请将图纸中的设计说明、构造做法、材料规格和设备参数写入对应章节。未引用图纸:${h.slice(0,5).join("、")}`}):a<.5&&c.push({level:"warning",message:`图纸引用不足:${g}/${f.length} 份(${Math.round(100*a)}%)`,suggestion:`建议补充引用:${h.slice(0,5).join("、")}`})}return c}function V(a){let b=[];for(let c of(/【本小节生成未达标,需重新生成】/u.test(a)&&b.push({level:"error",message:"生成未完成:存在未达标小节,需要重新生成或补写后才能导出",suggestion:"请重新生成未达标小节,禁止将占位内容作为正式正文。"}),e.IA))c.test(a)&&b.push({level:"warning",message:`存在占位式表达:${c.source}`,suggestion:"请改写为来自资料的准确事实;资料确实未提供时,改写为正式管理措施,不留空值或“见资料/按文件”。"});return b}function W(a,b){for(let c of b)try{if(RegExp(c,"iu").test(a))return!0}catch{if(a.includes(c))return!0}return!1}function X(a,b){let c=`${b.name} ${b.category} ${b.outputTitle} ${b.description}`,f=[];for(let a of(0,d.V)().autoSpecGates)W(c,a.templateMatchers)&&f.push(a);if(0===f.length)return[];let g=[],h=t(a).length,i=0;for(let b of f){for(let c of(i=Math.max(i,b.minTables||0),b.requiredTexts))a.includes(c)||g.push({level:"warning",message:`配置要求缺少必要内容:${c}`,suggestion:"请按当前模板匹配的专业规则补齐必要内容。"});for(let c of b.forbiddenTexts)a.includes(c)&&g.push({level:"error",message:`配置要求不得出现:${c}`,suggestion:"请根据当前模板匹配的专业规则清理正文污染内容。"})}return e.bu.test(a)&&g.push({level:"error",message:"正式正文存在 Markdown 标题符号 #",suggestion:"导出正文应去除 Markdown 标题符号,保留正式标题文字。"}),i&&h<i&&g.push({level:"warning",message:`配置要求正式表格不足:${h}/${i}`,suggestion:"如用户提示词或章节内容要求表格,应按项目资料补充对应表格本体。"}),g}function Y(a){let b=`${a.name} ${a.category} ${a.outputTitle} ${a.description}`,c=new Set;for(let a of(0,d.V)().autoSpecGates)if(W(b,a.templateMatchers))for(let b of a.forbiddenTexts)b&&c.add(b);return[...c]}function Z(a,b,c,d,g,h,j){if(!a)return b;let k=[...b],l=function(a){let b=[...a.project,...a.schedule,...a.quality,...a.safety,...a.resources];for(let c of Object.values(a.schemaFacts))b.push(...c);return b}(c),m=function(a,b){let c=new Set;for(let a of b)c.add(a.key),a.fieldName&&c.add(a.fieldName);for(let b of a.tables){for(let a of b.headers)c.add(a);for(let a of b.rows)for(let b of a)c.add(b)}return c}(c,l),n=new Set(d.map(a=>a.title));for(let b of a.factFields){if(!b.required)continue;let a=c.schemaFacts[b.id]||[],e=!1,f=!b.sourceRoleIds?.length||a.some(a=>b.sourceRoleIds?.includes(a.roleId));for(let a of d){if(e&&f)break;for(let c of a.evidence)!e&&!a.missingFacts.includes(b.name)&&(0,i.I2)(c,b)&&(e=!0),!f&&(0,i.I2)(c,b)&&(f=!0)}0!==a.length||m.has(b.name)||e||k.push({level:"warning",message:`系统暂未从知识库确认必需事实:${b.name}`,suggestion:b.extractionHint||"请扩大本地知识库检索、执行事实补抽,或调整事实字段配置。"}),f||k.push({level:"warning",message:`必需事实来源角色不匹配:${b.name}`,suggestion:`请确认该事实来自角色:${b.sourceRoleIds?.join("、")}`})}for(let b of a.chapterRules){let a=d.find(a=>a.title===b.title);a&&b.minWords&&a.content.length<b.minWords&&k.push({level:"warning",message:`章节内容深度建议:${b.title}`,suggestion:`可扩展到约 ${b.minWords} 字,但不要改变模板章节结构。`})}let o=t(g),p=function(a){let b=[];for(let c of a.matchAll(e.gW))b.push({alt:c[1]||"",url:c[2]||"",index:c.index??0});return b}(g),q=(0,f.Cv)(g);for(let b of a.gateRules){let a=b.evaluator?b.evaluator:e.cA[b.type]?.(b)??{subject:"document",operator:"contains",value:b.value||b.target},f=a.target||b.target||"",i=a.value||b.value||f,r=d.find(a=>a.title===f),s=function(a){for(let c of e.Lp){let d=c(a);if(d){var b;return{level:a.rule.level,message:(b=a.rule,`${b.name}:${d}`)}}}}({rule:b,evaluator:a,target:f,value:i,min:a.min||Number(b.value)||1,markdown:g,textScope:"chapter"===a.subject&&r?r.content:g,regex:i?function(a){try{return RegExp(a,"iu")}catch{return}}(i):void 0,chapter:r,factNames:m,chapterTitles:n,tableBlocks:o,imageRefs:p,estimatedPages:q,allFacts:l,factsModel:c,projectBindings:h,promptBindings:j});s&&k.push(s)}return k}function $(a,b){let c=function(a){let b="";for(let c of(0,j.dU)(a))c.content&&(b+=`${c.content}
16
16
 
17
17
  `);return b}(b);if(!c.trim())return[];let d=a.replace(e.ug," ");for(let a of c.matchAll(e.QX)){let b=(a[1]||"").replace(e.ug," ").trim();if(b&&d.includes(b))return[{level:"error",message:"正文疑似包含提示词示例内容",suggestion:"请删除提示词样例数据,仅保留基于当前绑定材料生成的正文。"}]}return[]}},29281:(a,b,c)=>{c.d(b,{I:()=>f});var d=c(96770);let e=null;function f(){return e||(e=new d.ConfigStore),e}},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}
18
18
  ${a.category}
@@ -60,7 +60,7 @@ ${h.join("\n")}`:"",`事实覆盖矩阵:
60
60
  ${i.join("\n")}`,`知识库确认覆盖矩阵:
61
61
  ${j.join("\n")}`,m,"证据引用约束:工期、质量目标、招标范围、金额、工程量、标准规范、验收要求等关键事实必须来自可信基础事实主表或绑定材料;系统暂未从知识库确认的数字和参数不得编造。","跨章一致性要求:所有章节必须共用同一套工期、质量、范围、资源和验收口径;不得在不同章节写出相互矛盾的项目基础信息。",`章节专业任务卡:
62
62
  ${k.join("\n")}`,`章节实施方案:
63
- ${l.join("\n")}`,...f].filter(Boolean).join("\n")}function aF(a,b,c,d,e=!0){return{name:a,sourceDomain:b,sourceHint:c,fallbackPolicy:d,required:e}}let aG=[{id:"project-overview",title:"工程概况一览表",moduleTitles:["编制说明与工程概况"],required:!0,triggerKeywords:["工程概况","项目概况","编制说明"],fields:[aF("工程名称","project","从项目基础事实、招标文件名称或资料包项目名称提取","projectFactOnly"),aF("建设地点","project","从招标文件、工程概况或现场条件提取","projectFactOnly"),aF("建设单位","project","从招标文件项目基本信息提取","projectFactOnly",!1),aF("结构类型/工程类型","works","从主要工程内容、图纸说明或招标范围提取","projectFactOnly",!1),aF("建设规模","works","从招标范围、清单、图纸或工程量事实提取","projectFactOnly"),aF("计划工期","schedule","从工期节点、计划工期或招标要求提取","projectFactOnly"),aF("质量目标","requirements","从质量标准、验收要求或招标响应要求提取","projectFactOnly"),aF("安全目标","requirements","从安全文明、管理目标或招标要求提取","projectFactOnly",!1)]},{id:"bid-score-response-index",title:"招标评分项响应索引表",moduleTitles:["编制说明与工程概况"],required:!0,triggerKeywords:["招标评分","评分响应","响应索引","技术标"],fields:[aF("评分项","requirements","从招标文件评分办法或技术要求提取","projectFactOnly"),aF("对应章节","standard","根据当前文档章节和自动挂靠模块填写","deriveFromContext"),aF("响应内容","requirements","从招标要求、图谱要求和章节任务概括","deriveFromContext"),aF("页码/位置","standard","Markdown 草稿阶段可填写“对应章节内”","standardAllowed",!1),aF("是否专项响应","requirements","依据评分项是否属于危大、扬尘、工资、应急等专项判断","deriveFromContext")]},{id:"project-difficulty",title:"项目重难点识别表",moduleTitles:["编制说明与工程概况"],required:!0,triggerKeywords:["重点","难点","重难点","风险"],fields:[aF("重难点","risks","从图谱风险、现场条件、项目要求中提取","deriveFromContext"),aF("形成原因","siteConditions","结合现场条件、工期、周边环境、施工范围说明","deriveFromContext"),aF("影响范围","works","关联受影响的分部分项、区域、工序或周边对象","deriveFromContext"),aF("专项措施","methods","结合工艺方法、风险 mitigation 和标准措施填写","standardAllowed"),aF("责任岗位","standard","按项目经理、技术负责人、施工员、安全员、质量员等职责填写","standardAllowed")]},{id:"site-layout-zones",title:"现场总平面分区布置表",moduleTitles:["施工现场平面布置与临设管理"],required:!0,triggerKeywords:["总平面","平面布置","临设","材料堆场"],fields:[aF("区域名称","siteConditions","从现场条件、临设、加工区、办公生活区等识别","deriveFromContext"),aF("位置","siteConditions","从现场平面、道路、场地条件或资料描述提取","projectFactOnly",!1),aF("功能","standard","按办公、生活、加工、堆放、通行等功能填写","standardAllowed"),aF("面积","project","仅资料明确时填写,不得编造","projectFactOnly",!1),aF("搭设标准","standards","按临设、安全文明、消防、环保标准填写","standardAllowed"),aF("拆除时间","schedule","结合施工阶段或竣工清理阶段填写","deriveFromContext",!1)]},{id:"temporary-electric-load",title:"临时用电负荷统计表",moduleTitles:["施工现场平面布置与临设管理"],required:!0,triggerKeywords:["临时用电","临电","三级配电","设备功率"],fields:[aF("设备名称","resources","从设备资源、机械投入计划中提取","deriveFromContext"),aF("功率","resources","仅资料或设备参数明确时填写","projectFactOnly",!1),aF("数量","resources","从设备数量或资源计划提取","projectFactOnly",!1),aF("总功率","resources","仅功率和数量明确时计算,否则不编造","projectFactOnly",!1),aF("负荷等级","standard","按临电管理和设备重要性判断","standardAllowed",!1),aF("检查频次","standards","按临电巡查制度填写","standardAllowed")]},{id:"progress-milestones",title:"关键施工节点控制计划表",moduleTitles:["进度计划与工期保障"],required:!0,triggerKeywords:["进度","工期","节点","计划"],fields:[aF("关键节点","schedule","从工期节点、里程碑、施工阶段提取","projectFactOnly"),aF("计划完成时间","schedule","仅资料明确时填写日期或工期节点","projectFactOnly",!1),aF("责任岗位","standard","按施工组织管理职责填写","standardAllowed"),aF("投入资源","resources","关联劳动力、机械、材料资源","deriveFromContext"),aF("检查频次","standard","按日计划、周计划、月计划检查机制填写","standardAllowed"),aF("滞后纠偏措施","methods","结合资源调配、穿插施工和备用资源填写","standardAllowed")]},{id:"equipment-plan",title:"主要施工机械设备投入计划表",moduleTitles:["资源配置计划"],required:!0,triggerKeywords:["机械设备","设备投入","资源配置"],fields:[aF("设备名称","resources","从 equipment 类型资源提取","deriveFromContext"),aF("规格型号","resources","从资源规格型号提取","projectFactOnly",!1),aF("数量","resources","从资源数量提取","projectFactOnly",!1),aF("使用阶段","schedule","结合施工阶段和适用工程内容填写","deriveFromContext"),aF("用途","works","关联适用分部分项或工序","deriveFromContext"),aF("进退场时间","schedule","仅资料明确时填写,否则按施工阶段表达","deriveFromContext",!1)]},{id:"labor-plan",title:"分阶段劳动力动态投入计划表",moduleTitles:["资源配置计划"],required:!0,triggerKeywords:["劳动力","人员投入","班组"],fields:[aF("施工阶段","schedule","从施工阶段和进度节点提取","deriveFromContext"),aF("工种","resources","从 labor 类型资源、工序需求推导","deriveFromContext"),aF("人数","resources","仅资料明确时填写","projectFactOnly",!1),aF("主要工作内容","works","关联对应分部分项工程","deriveFromContext"),aF("调配原则","standard","按工期节点、穿插施工和资源动态调配填写","standardAllowed")]},{id:"quality-hidden-acceptance",title:"隐蔽工程验收清单表",moduleTitles:["质量管理体系与质量保证措施"],required:!0,triggerKeywords:["隐蔽工程","隐蔽验收","质量验收"],fields:[aF("隐蔽部位","works","从分部分项工程、图纸做法和工序识别","deriveFromContext"),aF("验收内容","methods","结合工艺步骤和质量控制点填写","deriveFromContext"),aF("验收时机","schedule","按工序完成、覆盖前、下道工序前填写","standardAllowed"),aF("验收要点","standards","从验收规范、质量标准和材料要求提取","standardAllowed"),aF("影像留存","standard","按隐蔽验收资料归档要求填写","standardAllowed")]},{id:"quality-common-defects",title:"质量通病防治清单表",moduleTitles:["质量管理体系与质量保证措施"],required:!0,triggerKeywords:["质量通病","防治","质量控制"],fields:[aF("通病问题","risks","从质量风险、常见工序问题和项目类型推导","deriveFromContext"),aF("产生原因","methods","结合施工工艺、材料、环境和操作因素填写","deriveFromContext"),aF("预防措施","methods","按工艺控制、样板引路、材料复试等填写","standardAllowed"),aF("整改标准","standards","从验收规范和质量标准提取","standardAllowed"),aF("复查频次","standard","按质量检查制度填写","standardAllowed")]},{id:"risk-grade-control",title:"危险源辨识与风险分级管控清单",moduleTitles:["安全管理、风险分级与危大工程管控"],required:!0,triggerKeywords:["安全","风险","危险源","危大"],fields:[aF("危险源","risks","从项目图谱 risks 和施工工序识别","deriveFromContext"),aF("风险等级","risks","使用图谱风险等级或按影响程度判断","deriveFromContext"),aF("存在部位","works","关联风险所在工程部位、区域或工序","deriveFromContext"),aF("管控措施","risks","优先使用 mitigation,必要时按标准安全措施补充","standardAllowed"),aF("监测频次","standards","按安全巡查和专项监测制度填写","standardAllowed"),aF("闭环要求","standard","按隐患整改、复查、销项、归档填写","standardAllowed")]},{id:"dangerous-workflow",title:"危大工程全流程闭环管控表",moduleTitles:["安全管理、风险分级与危大工程管控"],required:!0,triggerKeywords:["危大工程","专项施工方案","专家论证"],fields:[aF("危大项目","risks","从危大工程、深基坑、高支模、起重吊装等风险识别","deriveFromContext"),aF("方案编制","standard","按专项方案编制要求填写","standardAllowed"),aF("审批交底","standard","按审核审批、专家论证、技术交底流程填写","standardAllowed"),aF("旁站监测","standard","按实施过程旁站、监测、验收要求填写","standardAllowed"),aF("验收闭环","standard","按联合验收、挂牌使用、整改销项填写","standardAllowed")]},{id:"environment-control",title:"环境污染物管控指标一览表",moduleTitles:["文明施工、扬尘、噪声与绿色施工"],required:!0,triggerKeywords:["文明施工","扬尘","噪声","绿色施工","环保"],fields:[aF("污染源","siteConditions","从扬尘、噪声、废水、垃圾等施工影响识别","deriveFromContext"),aF("控制指标","requirements","从招标环保要求、地方监管或标准要求提取","standardAllowed"),aF("监测方式","standard","按在线监测、巡查、台账记录填写","standardAllowed"),aF("管控措施","methods","按湿法作业、覆盖、冲洗、封闭、沉淀处理填写","standardAllowed"),aF("责任岗位","standard","按文明施工管理员、安全员、施工员等填写","standardAllowed")]},{id:"construction-waste",title:"建筑垃圾分类管理表",moduleTitles:["文明施工、扬尘、噪声与绿色施工"],required:!0,triggerKeywords:["建筑垃圾","垃圾分类","绿色施工"],fields:[aF("垃圾类别","standard","按可回收材料、建筑垃圾、生活垃圾、危险废弃物分类","standardAllowed"),aF("堆放区域","siteConditions","结合现场平面和堆放分区填写","deriveFromContext"),aF("处理方式","standard","按回收利用、外运消纳、资质单位处置填写","standardAllowed"),aF("清运频次","standard","按现场保洁和垃圾日产日清要求填写","standardAllowed"),aF("责任人","standard","按材料员、施工员、安全员、保洁员等填写","standardAllowed")]},{id:"wage-control",title:"农民工工资管控台账表",moduleTitles:["农民工工资保障与劳务管理"],required:!0,triggerKeywords:["农民工工资","工资保障","劳务实名制"],fields:[aF("管理环节","requirements","按实名登记、考勤、核算、公示、代发、归档填写","standardAllowed"),aF("执行要求","requirements","从工资支付、实名制和专户要求提取","standardAllowed"),aF("责任岗位","standard","按劳资员、项目经理、班组长等填写","standardAllowed"),aF("形成资料","standard","按考勤表、工资表、银行流水、公示记录等填写","standardAllowed"),aF("闭环要求","standard","按争议受理、核查、整改、销项归档填写","standardAllowed")]},{id:"pipeline-protection",title:"临近建筑地下管线保护清单表",moduleTitles:["周边环境、管线与既有建构筑物保护"],required:!1,triggerKeywords:["地下管线","管线保护","既有建筑","周边环境"],fields:[aF("保护对象","siteConditions","从地下管线、临近建筑、道路、居民区等识别","deriveFromContext"),aF("位置关系","siteConditions","从现场条件、图纸或踏勘资料提取","projectFactOnly",!1),aF("风险影响","risks","结合开挖、振动、沉降、交通等影响填写","deriveFromContext"),aF("保护措施","methods","按探测、标识、支护、监测、应急抢修填写","standardAllowed"),aF("监测频次","standards","按风险等级和施工阶段填写","standardAllowed"),aF("应急处置","risks","按停工警戒、抢修联络、复查恢复填写","standardAllowed")]},{id:"seasonal-resource",title:"季节性施工资源配置表",moduleTitles:["季节性施工保障"],required:!0,triggerKeywords:["季节性施工","雨季","冬季","高温","防汛"],fields:[aF("季节/天气类型","siteConditions","结合施工季节、当地气候和工期节点填写","deriveFromContext"),aF("影响工序","works","关联受雨季、高温、冬季影响的工序","deriveFromContext"),aF("配置资源","resources","结合排水、防暑、防冻、防风等物资设备填写","standardAllowed"),aF("检查频次","standard","按天气预警、班前检查、雨后复查填写","standardAllowed"),aF("应急措施","risks","按防汛、排水、防雷、大风停工等填写","standardAllowed")]},{id:"emergency-materials",title:"应急物资储备清单表",moduleTitles:["应急管理体系"],required:!0,triggerKeywords:["应急","应急物资","应急救援"],fields:[aF("物资名称","resources","从应急物资或按风险场景配置","standardAllowed"),aF("规格型号","resources","资料明确时填写,否则按通用应急物资表达","standardAllowed",!1),aF("数量","resources","仅资料明确时填写","projectFactOnly",!1),aF("存放位置","siteConditions","结合现场平面和应急点位填写","deriveFromContext",!1),aF("用途","risks","关联火灾、触电、坍塌、暴雨、高温等风险场景","deriveFromContext"),aF("检查周期","standard","按应急物资定期检查制度填写","standardAllowed")]},{id:"bim-smart-site",title:"BIM智慧工地应用点表",moduleTitles:["BIM、智慧工地与创新加分模块"],required:!1,triggerKeywords:["BIM","智慧工地","在线监测","数字化"],fields:[aF("应用点","requirements","从 BIM、智慧工地、监测要求或加分点识别","deriveFromContext"),aF("应用内容","methods","按管线综合、4D模拟、视频监控、扬尘监测等填写","standardAllowed"),aF("实施阶段","schedule","结合深化设计、施工准备、全过程管控等阶段填写","deriveFromContext"),aF("输出成果","standard","按模型、图纸、台账、预警记录等填写","standardAllowed"),aF("作用","standard","按减少返工、校核工期、联动喷淋、风险预警等填写","standardAllowed")]}];function aH(a){return a.replace(/\s+/gu,"").toLowerCase()}function aI(a){return[...new Set(a)]}function aJ(a){return aH([a.title,a.purpose,...a.sections||[],...a.tableSections||[],...a.requiredFacts||[],...a.queries||[]].join(" "))}function aK(a,b,c){return c?!!a.triggerKeywords.some(a=>b.includes(aH(a)))||("equipment-plan"===a.id?c.resources.some(a=>"equipment"===a.type):"labor-plan"===a.id?c.resources.some(a=>"labor"===a.type):"progress-milestones"===a.id?c.schedule.length>0:"risk-grade-control"===a.id?c.risks.length>0:"pipeline-protection"===a.id?c.siteConditions.some(a=>/管线|道路|居民|学校|医院|商业|既有|周边/u.test(`${a.condition}${a.impact}`)):"bim-smart-site"===a.id?c.requirements.some(a=>/BIM|智慧|数字|监测|视频|实名制/u.test(`${a.category}${a.detail}`)):a.required):a.required}function aL(a,b,c){return"factsModel"===a?!!(c&&Object.keys(c.byKey||{}).length>0):!!b&&("project"===a?Object.keys(c?.byKey||{}).length>0||b.requirements.length>0:"works"===a?b.works.length>0:"methods"===a?b.methods.length>0:"resources"===a?b.resources.length>0:"schedule"===a?b.schedule.length>0||!!c?.schedule.duration:"standards"===a?b.standards.length>0:"risks"===a?b.risks.length>0:"requirements"===a?b.requirements.length>0:"siteConditions"!==a||b.siteConditions.length>0)}function aM(a){var b;let c=(b=a.projectGraph)?aH([...b.works.flatMap(a=>[a.name,a.scope,...a.relatedItems]),...b.methods.flatMap(a=>[a.name,...a.steps,...a.applicableWorks]),...b.resources.flatMap(a=>[a.name,a.type,a.spec,a.quantity,a.unit]),...b.schedule.flatMap(a=>[a.milestone,a.duration,a.startDate,a.endDate]),...b.standards.flatMap(a=>[a.code,a.description]),...b.risks.flatMap(a=>[a.risk,a.level,a.mitigation]),...b.requirements.flatMap(a=>[a.category,a.detail]),...b.siteConditions.flatMap(a=>[a.condition,a.impact]),...b.addendumChanges.flatMap(a=>[a.originalPath,a.original,a.revised]),...b.gaps].join(" ")):"";return a.chapters.map(b=>{var d;let e=`${c} ${!(d=a.canonicalFacts)?"":aH(Object.values(d.byKey||{}).map(a=>`${a.label} ${a.value}`).join(" "))}`,f=aG.filter(c=>(function(a,b){let c=aJ(b);return!!((b.tableSections||[]).some(b=>b===a.title||a.title.includes(b)||b.includes(a.title))||a.moduleTitles.some(a=>c.includes(aH(a)))||a.triggerKeywords.some(a=>c.includes(aH(a))))})(c,b)&&aK(c,e,a.projectGraph)).map(c=>{let d=aI(c.fields.map(a=>a.sourceDomain)),f=function(a,b,c,d){let e=aJ(b);if(a.required||(b.tableSections||[]).some(b=>b===a.title||a.title.includes(b)))return"must";let f=aK(a,c,d);return/危大|安全|进度|工期|质量|资源|人材机|机械|劳动力|材料/u.test(e)&&f?"should":f?"conditional":"reference"}(c,b,e,a.projectGraph),g=function(a,b,c){let d=a.fields.filter(a=>a.required),e=a.fields.filter(a=>a.required&&"projectFactOnly"===a.fallbackPolicy&&!aL(a.sourceDomain,b,c)).map(a=>a.name),f=a.fields.filter(a=>"projectFactOnly"!==a.fallbackPolicy||aL(a.sourceDomain,b,c)).length,g="generate_with_confirmed_facts";return e.length>0&&f>0&&(g="generate_with_review_notes"),e.length===d.length&&d.length>0&&(g="convert_to_text"),0===f&&(g="skip_with_reason"),{requiredFieldCount:d.length,confirmedFieldCount:f,missingProjectFactFields:e,canGenerate:"skip_with_reason"!==g,fallbackPolicy:g}}(c,a.projectGraph,a.canonicalFacts),h="must"===f?{shouldOutput:!0,outputType:"convert_to_text"===g.fallbackPolicy?"checklist":"markdown_table",decisionReason:"章节必要管控表,按项目资料和图谱事实输出。"}:"should"===f?{shouldOutput:!0,outputType:"convert_to_text"===g.fallbackPolicy?"checklist":"markdown_table",decisionReason:"项目图谱和章节语义均触发,按资料内容输出。"}:"conditional"===f&&g.confirmedFieldCount>0?{shouldOutput:!0,outputType:"checklist",decisionReason:"资料已触发该结构,按已有事实表达。"}:{shouldOutput:!1,outputType:"skip",decisionReason:"非本章核心输出。"};return{id:c.id,title:c.title,chapterTitle:b.title,moduleTitle:c.moduleTitles[0]||b.title,required:h.shouldOutput&&("must"===f||c.required),reason:function(a,b){let c=[];return b?.schedule.length&&a.fields.some(a=>"schedule"===a.sourceDomain)&&c.push("项目图谱包含工期与关键节点"),b?.resources.length&&a.fields.some(a=>"resources"===a.sourceDomain)&&c.push("项目图谱包含资源投入信息"),b?.risks.length&&a.fields.some(a=>"risks"===a.sourceDomain)&&c.push("项目图谱包含风险与管控要求"),b?.requirements.length&&a.fields.some(a=>"requirements"===a.sourceDomain)&&c.push("项目图谱包含招标/管理要求"),b?.siteConditions.length&&a.fields.some(a=>"siteConditions"===a.sourceDomain)&&c.push("项目图谱包含现场条件约束"),c.length?c.join(";"):`章节包含“${a.moduleTitles.join("、")}”模块,按施工组织设计标准表格库生成。`}(c,a.projectGraph),fields:c.fields,sourceDomains:d,necessity:f,belongsToChapter:!0,scopeExplanation:`表格归属于“${b.title}”中“${c.moduleTitles.join("、")}”相关管理对象。`,triggerFacts:Object.values(a.canonicalFacts?.byKey||{}).filter(a=>c.triggerKeywords.some(b=>aH(`${a.label}${a.value}`).includes(aH(b)))).map(a=>`${a.label}=${a.value}`),triggerGraphNodes:c.triggerKeywords.filter(a=>e.includes(aH(a))),fillability:g,outputDecision:h,rowSeeds:function(a,b,c){let d=[],e=(b,c,e,f)=>{if(!aH(`${b}${e}`)||d.some(a=>aH(a.rowLabel)===aH(b)))return;let g=a.fields.filter(a=>aH(e).includes(aH(a.name))||"projectFactOnly"!==a.fallbackPolicy).map(a=>a.name),h=a.fields.filter(a=>a.required&&!g.includes(a.name)&&"projectFactOnly"===a.fallbackPolicy).map(a=>a.name);d.push({rowLabel:b,source:c,confirmedFields:g,missingFields:h,sourceRef:f})};for(let b of Object.values(c?.byKey||{}))a.triggerKeywords.some(a=>aH(`${b.label}${b.value}`).includes(aH(a)))&&e(b.label,"canonicalFact",b.value,b.sourceFile);for(let c of b?.resources||[])(a.fields.some(a=>"resources"===a.sourceDomain)||a.triggerKeywords.some(a=>aH(`${c.name}${c.type}`).includes(aH(a))))&&e(c.name,"equipment"===c.type||"material"===c.type||"labor"===c.type?"projectGraph":"standard",[c.spec,c.quantity,c.unit].filter(Boolean).join(" "),c.sourceFiles?.[0]);for(let c of b?.risks||[])(a.fields.some(a=>"risks"===a.sourceDomain)||a.triggerKeywords.some(a=>aH(c.risk).includes(aH(a))))&&e(c.risk,"projectGraph",[c.level,c.mitigation].filter(Boolean).join(" "),c.sourceFiles?.[0]);for(let c of b?.schedule||[])a.fields.some(a=>"schedule"===a.sourceDomain)&&e(c.milestone,"projectGraph",[c.duration,c.startDate,c.endDate].filter(Boolean).join(" "),c.sourceFiles?.[0]);return d.slice(0,24)}(c,a.projectGraph,a.canonicalFacts)}}),g=new Map((b.tablePlans||[]).map(a=>[a.id,a]));for(let a of f)g.set(a.id,a);let h=[...g.values()],i=aI([...b.tableSections||[],...h.map(a=>a.title)]),j=aI([...b.tableRequirements||[],...h.map(a=>`${a.title}:表头必须为“${a.fields.map(a=>a.name).join("、")}”;${a.fields.some(a=>"projectFactOnly"===a.fallbackPolicy)?"项目特有数字、日期、工程量、规格必须来自资料或项目图谱,不得编造。":"可按施工组织设计标准流程填写。"}`)]);return{...b,tableSections:i,tableRequirements:j,tablePlans:h}})}async function aN(a){let b=[];if(0===a.scopedFilePaths.length)return b;let c=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.chapter.title),d=(c?1.6:1)*(/[、,,与和及]/.test(a.chapter.title)?1.4:1),e=Math.ceil((a.highRisk?18:10)*d),f=(function(a,b=[]){let c=a.sections||[],d=[...a.requiredFacts,...b],e=(0,az.Cr)(c,a=>(0,az.Ox)(a),{maxItems:16,maxChars:1200},"retrieval-sections").selected,f=(0,az.Cr)(d,a=>(0,az.Ox)(a),{maxItems:16,maxChars:1200},"retrieval-facts").selected,g=/[、,,与和及]/.test(a.title),h=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.title),i=/进度|工期|节点/u.test(a.title)?["合同工期","计划工期","日历天","开工","竣工","关键线路","进度计划","施工进度"]:/质量|验收/u.test(a.title)?["质量标准","验收规范","检验批","复验","合格","质量保证","隐蔽验收"]:/安全|危大|风险/u.test(a.title)?["安全措施","风险源","危大工程","应急","检查整改","安全防护","应急预案"]:h?["工程量清单","项目特征","材料设备","规格型号","数量单位","劳动力","机械设备","进场计划","资源保障","主要材料","施工机具","材料供应","设备配置"]:/施工|方案|方法|技术|工艺/u.test(a.title)?["施工方法","工艺流程","技术标准","构造做法","控制要点","施工准备"]:["工程范围","施工方法","控制要点","验收要求"],j=g?[...i,...a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4)]:i,k=[...new Set([a.title,...e,...f,...j].flatMap(a=>a.split(/[\s、,,。;;::()()《》【】\-/]+/u)).map(a=>a.trim()).filter(a=>a.length>=2))],l=(0,az.Cr)(k,a=>(0,az.Ox)(a),{maxItems:36,maxChars:1200},"retrieval-tokens").selected,m=g?a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4).map(a=>`${a} ${e.slice(0,6).join(" ")} ${f.slice(0,4).join(" ")}`.trim()):[];return[...new Set([`${a.title} ${e.join(" ")}`.trim(),...f.map(b=>`${a.title} ${b}`.trim()),...e.map(b=>`${a.title} ${b} ${f.slice(0,6).join(" ")}`.trim()),`${a.title} ${j.join(" ")}`.trim(),...m,l.join(" ")].filter(Boolean))]})(a.chapter,a.requiredNeeds).slice(0,e),g=Math.ceil((a.highRisk?24:14)*(c?1.4:1)),h=Math.ceil((a.highRisk?72:42)*d),i=Math.ceil((a.highRisk?72e3:42e3)*d),j=await (0,ay.l$)(f,async b=>{var c;let d=await a.manager.search(a.projectRoot,b,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:g,weights:{keyword:.62,vector:.32,rewrite:.9,hybridBonus:.28},generationMode:!1});return(c={chapter:a.chapter,results:d.results.filter(b=>a.scopedFilePaths.includes(b.filePath)),fileRoleByPath:a.fileRoleByPath,fileProcessingByPath:a.fileProcessingByPath,boost:2.4,source:"deep-retrieval"}).results.map(a=>{let b=c.fileProcessingByPath.get(a.filePath);return{chapterId:c.chapter.id,filePath:a.filePath,score:a.score+c.boost+("table"===b?3:"structured_data"===b?2.6:3.2*("bill_of_quantities"===b)),content:a.content,roleId:c.fileRoleByPath.get(a.filePath),processingType:b,sectionTitle:a.sectionTitle,source:c.source}})},{kind:"deepRetrieval",highRisk:a.highRisk});return b.push(...j.flat()),(0,s.QR)(b,{maxItems:h,maxChars:i,preservePinned:!0})}var aO=c(73024),aP=c(15751),aQ=c(11248),aR=c(95734);function aS(a){let b=[],c=new Set;for(let d of a.filter(a=>"table"===a.processingType)){if(c.has(d.filePath))continue;c.add(d.filePath);let a=(0,g.aY)(),f=e.isAbsolute(d.filePath)?d.filePath:aO.existsSync(e.join(a,"knowledgeBase",d.filePath))?e.join(a,"knowledgeBase",d.filePath):e.join(a,d.filePath),h=e.extname(d.filePath).toLowerCase();if(aO.existsSync(f)&&[".xlsx",".xls",".csv"].includes(h))try{let a=aP.readFile(f,{cellDates:!0,sheetStubs:!1});for(let c of a.SheetNames){let e=a.Sheets[c],f=aP.utils.sheet_to_json(e,{header:1,raw:!1,defval:""}).map(a=>a.map(a=>String(a).trim())).filter(a=>a.some(Boolean));if(f.length<2)continue;let g=f.findIndex(a=>a.filter(Boolean).length>=2);if(g<0)continue;let h=f[g].filter(Boolean),i=f.slice(g+1).map(a=>a.slice(0,h.length)).filter(a=>a.some(Boolean));0!==i.length&&b.push({tableType:d.roleId||"table",sheet:c,headers:h,rows:i,sourceFile:d.filePath,sourceRange:e["!ref"]})}continue}catch{}let i=d.content.split("\n").map(a=>a.trim()).filter(Boolean).filter(a=>a.includes("|")||a.includes(" ")||a.includes(","));if(i.length<2)continue;let j=i[0].includes("|")?"|":i[0].includes(" ")?" ":",",k=i.map(a=>a.split(j).map(a=>a.trim()).filter(Boolean)).filter(a=>a.length>1);k.length<2||b.push({tableType:d.roleId||"table",headers:k[0],rows:k.slice(1),sourceFile:d.filePath,sourceRange:d.sectionTitle})}return b}function aT(a,b,c){let d=(0,u.Uy)(b,c).map(a=>({field:a,pattern:function(a){let b=a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");return RegExp(`${b}[::\\s]+([^\\n,。;;]+)`,"u")}(a.name)})),e=[];for(let b of a)for(let{field:a,pattern:c}of d){if(!(0,u.I2)(b,a))continue;let d=b.content.match(c)||[void 0,b.content.replace(/\s+/gu," ")],f=d?.[1]?.trim();f&&!e.some(b=>b.fieldId===a.id&&b.value===f)&&e.push({key:a.name,fieldId:a.id,fieldName:a.name,value:f,sourceFile:b.filePath,roleId:b.roleId||"unknown",processingType:b.processingType,confidence:b.score,sourceRef:{filePath:b.filePath,roleId:b.roleId||"unknown",processingType:b.processingType,sectionTitle:b.sectionTitle}})}return e}async function aU(a,b,c,d,e){let f=[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"LLM JSON 抽取未启用或无可用模型"}],g=Math.max(12e3,Math.floor(Number(process.env.DOCUMENT_FACT_EXTRACTION_MAX_CHARS??45e3))),h=Math.max(8,Math.floor(Number(process.env.DOCUMENT_FACT_EXTRACTION_MAX_ITEMS??48))),i=0,j=[];for(let b of[...a].sort((a,b)=>b.score-a.score).slice(0,h)){let a=(0,ay.lG)(b.content).replace(/\s+/gu," ").slice(0,Math.max(800,Math.floor(g/h))),c=`文件:${b.filePath}
63
+ ${l.join("\n")}`,...f].filter(Boolean).join("\n")}function aF(a,b,c,d,e=!0){return{name:a,sourceDomain:b,sourceHint:c,fallbackPolicy:d,required:e}}let aG=[{id:"project-overview",title:"工程概况一览表",moduleTitles:["编制说明与工程概况"],required:!0,triggerKeywords:["工程概况","项目概况","编制说明"],fields:[aF("工程名称","project","从项目基础事实、招标文件名称或资料包项目名称提取","projectFactOnly"),aF("建设地点","project","从招标文件、工程概况或现场条件提取","projectFactOnly"),aF("建设单位","project","从招标文件项目基本信息提取","projectFactOnly",!1),aF("结构类型/工程类型","works","从主要工程内容、图纸说明或招标范围提取","projectFactOnly",!1),aF("建设规模","works","从招标范围、清单、图纸或工程量事实提取","projectFactOnly"),aF("计划工期","schedule","从工期节点、计划工期或招标要求提取","projectFactOnly"),aF("质量目标","requirements","从质量标准、验收要求或招标响应要求提取","projectFactOnly"),aF("安全目标","requirements","从安全文明、管理目标或招标要求提取","projectFactOnly",!1)]},{id:"bid-score-response-index",title:"招标评分项响应索引表",moduleTitles:["编制说明与工程概况"],required:!0,triggerKeywords:["招标评分","评分响应","响应索引","技术标"],fields:[aF("评分项","requirements","从招标文件评分办法或技术要求提取","projectFactOnly"),aF("对应章节","standard","根据当前文档章节和自动挂靠模块填写","deriveFromContext"),aF("响应内容","requirements","从招标要求、图谱要求和章节任务概括","deriveFromContext"),aF("页码/位置","standard","Markdown 草稿阶段可填写“对应章节内”","standardAllowed",!1),aF("是否专项响应","requirements","依据评分项是否属于危大、扬尘、工资、应急等专项判断","deriveFromContext")]},{id:"project-difficulty",title:"项目重难点识别表",moduleTitles:["编制说明与工程概况"],required:!0,triggerKeywords:["重点","难点","重难点","风险"],fields:[aF("重难点","risks","从图谱风险、现场条件、项目要求中提取","deriveFromContext"),aF("形成原因","siteConditions","结合现场条件、工期、周边环境、施工范围说明","deriveFromContext"),aF("影响范围","works","关联受影响的分部分项、区域、工序或周边对象","deriveFromContext"),aF("专项措施","methods","结合工艺方法、风险 mitigation 和标准措施填写","standardAllowed"),aF("责任岗位","standard","按项目经理、技术负责人、施工员、安全员、质量员等职责填写","standardAllowed")]},{id:"site-layout-zones",title:"现场总平面分区布置表",moduleTitles:["施工现场平面布置与临设管理"],required:!0,triggerKeywords:["总平面","平面布置","临设","材料堆场"],fields:[aF("区域名称","siteConditions","从现场条件、临设、加工区、办公生活区等识别","deriveFromContext"),aF("位置","siteConditions","从现场平面、道路、场地条件或资料描述提取","projectFactOnly",!1),aF("功能","standard","按办公、生活、加工、堆放、通行等功能填写","standardAllowed"),aF("面积","project","仅资料明确时填写,不得编造","projectFactOnly",!1),aF("搭设标准","standards","按临设、安全文明、消防、环保标准填写","standardAllowed"),aF("拆除时间","schedule","结合施工阶段或竣工清理阶段填写","deriveFromContext",!1)]},{id:"temporary-electric-load",title:"临时用电负荷统计表",moduleTitles:["施工现场平面布置与临设管理"],required:!0,triggerKeywords:["临时用电","临电","三级配电","设备功率"],fields:[aF("设备名称","resources","从设备资源、机械投入计划中提取","deriveFromContext"),aF("功率","resources","仅资料或设备参数明确时填写","projectFactOnly",!1),aF("数量","resources","从设备数量或资源计划提取","projectFactOnly",!1),aF("总功率","resources","仅功率和数量明确时计算,否则不编造","projectFactOnly",!1),aF("负荷等级","standard","按临电管理和设备重要性判断","standardAllowed",!1),aF("检查频次","standards","按临电巡查制度填写","standardAllowed")]},{id:"progress-milestones",title:"关键施工节点控制计划表",moduleTitles:["进度计划与工期保障"],required:!0,triggerKeywords:["进度","工期","节点","计划"],fields:[aF("关键节点","schedule","从工期节点、里程碑、施工阶段提取","projectFactOnly"),aF("计划完成时间","schedule","仅资料明确时填写日期或工期节点","projectFactOnly",!1),aF("责任岗位","standard","按施工组织管理职责填写","standardAllowed"),aF("投入资源","resources","关联劳动力、机械、材料资源","deriveFromContext"),aF("检查频次","standard","按日计划、周计划、月计划检查机制填写","standardAllowed"),aF("滞后纠偏措施","methods","结合资源调配、穿插施工和备用资源填写","standardAllowed")]},{id:"equipment-plan",title:"主要施工机械设备投入计划表",moduleTitles:["资源配置计划"],required:!0,triggerKeywords:["机械设备","设备投入","资源配置"],fields:[aF("设备名称","resources","从 equipment 类型资源提取","deriveFromContext"),aF("规格型号","resources","从资源规格型号提取","projectFactOnly",!1),aF("数量","resources","从资源数量提取","projectFactOnly",!1),aF("使用阶段","schedule","结合施工阶段和适用工程内容填写","deriveFromContext"),aF("用途","works","关联适用分部分项或工序","deriveFromContext"),aF("进退场时间","schedule","仅资料明确时填写,否则按施工阶段表达","deriveFromContext",!1)]},{id:"labor-plan",title:"分阶段劳动力动态投入计划表",moduleTitles:["资源配置计划"],required:!0,triggerKeywords:["劳动力","人员投入","班组"],fields:[aF("施工阶段","schedule","从施工阶段和进度节点提取","deriveFromContext"),aF("工种","resources","从 labor 类型资源、工序需求推导","deriveFromContext"),aF("人数","resources","仅资料明确时填写","projectFactOnly",!1),aF("主要工作内容","works","关联对应分部分项工程","deriveFromContext"),aF("调配原则","standard","按工期节点、穿插施工和资源动态调配填写","standardAllowed")]},{id:"quality-hidden-acceptance",title:"隐蔽工程验收清单表",moduleTitles:["质量管理体系与质量保证措施"],required:!0,triggerKeywords:["隐蔽工程","隐蔽验收","质量验收"],fields:[aF("隐蔽部位","works","从分部分项工程、图纸做法和工序识别","deriveFromContext"),aF("验收内容","methods","结合工艺步骤和质量控制点填写","deriveFromContext"),aF("验收时机","schedule","按工序完成、覆盖前、下道工序前填写","standardAllowed"),aF("验收要点","standards","从验收规范、质量标准和材料要求提取","standardAllowed"),aF("影像留存","standard","按隐蔽验收资料归档要求填写","standardAllowed")]},{id:"quality-common-defects",title:"质量通病防治清单表",moduleTitles:["质量管理体系与质量保证措施"],required:!0,triggerKeywords:["质量通病","防治","质量控制"],fields:[aF("通病问题","risks","从质量风险、常见工序问题和项目类型推导","deriveFromContext"),aF("产生原因","methods","结合施工工艺、材料、环境和操作因素填写","deriveFromContext"),aF("预防措施","methods","按工艺控制、样板引路、材料复试等填写","standardAllowed"),aF("整改标准","standards","从验收规范和质量标准提取","standardAllowed"),aF("复查频次","standard","按质量检查制度填写","standardAllowed")]},{id:"risk-grade-control",title:"危险源辨识与风险分级管控清单",moduleTitles:["安全管理、风险分级与危大工程管控"],required:!0,triggerKeywords:["安全","风险","危险源","危大"],fields:[aF("危险源","risks","从项目图谱 risks 和施工工序识别","deriveFromContext"),aF("风险等级","risks","使用图谱风险等级或按影响程度判断","deriveFromContext"),aF("存在部位","works","关联风险所在工程部位、区域或工序","deriveFromContext"),aF("管控措施","risks","优先使用 mitigation,必要时按标准安全措施补充","standardAllowed"),aF("监测频次","standards","按安全巡查和专项监测制度填写","standardAllowed"),aF("闭环要求","standard","按隐患整改、复查、销项、归档填写","standardAllowed")]},{id:"dangerous-workflow",title:"危大工程全流程闭环管控表",moduleTitles:["安全管理、风险分级与危大工程管控"],required:!0,triggerKeywords:["危大工程","专项施工方案","专家论证"],fields:[aF("危大项目","risks","从危大工程、深基坑、高支模、起重吊装等风险识别","deriveFromContext"),aF("方案编制","standard","按专项方案编制要求填写","standardAllowed"),aF("审批交底","standard","按审核审批、专家论证、技术交底流程填写","standardAllowed"),aF("旁站监测","standard","按实施过程旁站、监测、验收要求填写","standardAllowed"),aF("验收闭环","standard","按联合验收、挂牌使用、整改销项填写","standardAllowed")]},{id:"environment-control",title:"环境污染物管控指标一览表",moduleTitles:["文明施工、扬尘、噪声与绿色施工"],required:!0,triggerKeywords:["文明施工","扬尘","噪声","绿色施工","环保"],fields:[aF("污染源","siteConditions","从扬尘、噪声、废水、垃圾等施工影响识别","deriveFromContext"),aF("控制指标","requirements","从招标环保要求、地方监管或标准要求提取","standardAllowed"),aF("监测方式","standard","按在线监测、巡查、台账记录填写","standardAllowed"),aF("管控措施","methods","按湿法作业、覆盖、冲洗、封闭、沉淀处理填写","standardAllowed"),aF("责任岗位","standard","按文明施工管理员、安全员、施工员等填写","standardAllowed")]},{id:"construction-waste",title:"建筑垃圾分类管理表",moduleTitles:["文明施工、扬尘、噪声与绿色施工"],required:!0,triggerKeywords:["建筑垃圾","垃圾分类","绿色施工"],fields:[aF("垃圾类别","standard","按可回收材料、建筑垃圾、生活垃圾、危险废弃物分类","standardAllowed"),aF("堆放区域","siteConditions","结合现场平面和堆放分区填写","deriveFromContext"),aF("处理方式","standard","按回收利用、外运消纳、资质单位处置填写","standardAllowed"),aF("清运频次","standard","按现场保洁和垃圾日产日清要求填写","standardAllowed"),aF("责任人","standard","按材料员、施工员、安全员、保洁员等填写","standardAllowed")]},{id:"wage-control",title:"农民工工资管控台账表",moduleTitles:["农民工工资保障与劳务管理"],required:!0,triggerKeywords:["农民工工资","工资保障","劳务实名制"],fields:[aF("管理环节","requirements","按实名登记、考勤、核算、公示、代发、归档填写","standardAllowed"),aF("执行要求","requirements","从工资支付、实名制和专户要求提取","standardAllowed"),aF("责任岗位","standard","按劳资员、项目经理、班组长等填写","standardAllowed"),aF("形成资料","standard","按考勤表、工资表、银行流水、公示记录等填写","standardAllowed"),aF("闭环要求","standard","按争议受理、核查、整改、销项归档填写","standardAllowed")]},{id:"pipeline-protection",title:"临近建筑地下管线保护清单表",moduleTitles:["周边环境、管线与既有建构筑物保护"],required:!1,triggerKeywords:["地下管线","管线保护","既有建筑","周边环境"],fields:[aF("保护对象","siteConditions","从地下管线、临近建筑、道路、居民区等识别","deriveFromContext"),aF("位置关系","siteConditions","从现场条件、图纸或踏勘资料提取","projectFactOnly",!1),aF("风险影响","risks","结合开挖、振动、沉降、交通等影响填写","deriveFromContext"),aF("保护措施","methods","按探测、标识、支护、监测、应急抢修填写","standardAllowed"),aF("监测频次","standards","按风险等级和施工阶段填写","standardAllowed"),aF("应急处置","risks","按停工警戒、抢修联络、复查恢复填写","standardAllowed")]},{id:"seasonal-resource",title:"季节性施工资源配置表",moduleTitles:["季节性施工保障"],required:!0,triggerKeywords:["季节性施工","雨季","冬季","高温","防汛"],fields:[aF("季节/天气类型","siteConditions","结合施工季节、当地气候和工期节点填写","deriveFromContext"),aF("影响工序","works","关联受雨季、高温、冬季影响的工序","deriveFromContext"),aF("配置资源","resources","结合排水、防暑、防冻、防风等物资设备填写","standardAllowed"),aF("检查频次","standard","按天气预警、班前检查、雨后复查填写","standardAllowed"),aF("应急措施","risks","按防汛、排水、防雷、大风停工等填写","standardAllowed")]},{id:"emergency-materials",title:"应急物资储备清单表",moduleTitles:["应急管理体系"],required:!0,triggerKeywords:["应急","应急物资","应急救援"],fields:[aF("物资名称","resources","从应急物资或按风险场景配置","standardAllowed"),aF("规格型号","resources","资料明确时填写,否则按通用应急物资表达","standardAllowed",!1),aF("数量","resources","仅资料明确时填写","projectFactOnly",!1),aF("存放位置","siteConditions","结合现场平面和应急点位填写","deriveFromContext",!1),aF("用途","risks","关联火灾、触电、坍塌、暴雨、高温等风险场景","deriveFromContext"),aF("检查周期","standard","按应急物资定期检查制度填写","standardAllowed")]},{id:"bim-smart-site",title:"BIM智慧工地应用点表",moduleTitles:["BIM、智慧工地与创新加分模块"],required:!1,triggerKeywords:["BIM","智慧工地","在线监测","数字化"],fields:[aF("应用点","requirements","从 BIM、智慧工地、监测要求或加分点识别","deriveFromContext"),aF("应用内容","methods","按管线综合、4D模拟、视频监控、扬尘监测等填写","standardAllowed"),aF("实施阶段","schedule","结合深化设计、施工准备、全过程管控等阶段填写","deriveFromContext"),aF("输出成果","standard","按模型、图纸、台账、预警记录等填写","standardAllowed"),aF("作用","standard","按减少返工、校核工期、联动喷淋、风险预警等填写","standardAllowed")]}];function aH(a){return a.replace(/\s+/gu,"").toLowerCase()}function aI(a){return[...new Set(a)]}function aJ(a){return aH([a.title,a.purpose,...a.sections||[],...a.tableSections||[],...a.requiredFacts||[],...a.queries||[]].join(" "))}function aK(a,b,c){return c?!!a.triggerKeywords.some(a=>b.includes(aH(a)))||("equipment-plan"===a.id?c.resources.some(a=>"equipment"===a.type):"labor-plan"===a.id?c.resources.some(a=>"labor"===a.type):"progress-milestones"===a.id?c.schedule.length>0:"risk-grade-control"===a.id?c.risks.length>0:"pipeline-protection"===a.id?c.siteConditions.some(a=>/管线|道路|居民|学校|医院|商业|既有|周边/u.test(`${a.condition}${a.impact}`)):"bim-smart-site"===a.id?c.requirements.some(a=>/BIM|智慧|数字|监测|视频|实名制/u.test(`${a.category}${a.detail}`)):a.required):a.required}function aL(a,b,c){return"factsModel"===a?!!(c&&Object.keys(c.byKey||{}).length>0):!!b&&("project"===a?Object.keys(c?.byKey||{}).length>0||b.requirements.length>0:"works"===a?b.works.length>0:"methods"===a?b.methods.length>0:"resources"===a?b.resources.length>0:"schedule"===a?b.schedule.length>0||!!c?.schedule.duration:"standards"===a?b.standards.length>0:"risks"===a?b.risks.length>0:"requirements"===a?b.requirements.length>0:"siteConditions"!==a||b.siteConditions.length>0)}function aM(a){var b;let c=(b=a.projectGraph)?aH([...b.works.flatMap(a=>[a.name,a.scope,...a.relatedItems]),...b.methods.flatMap(a=>[a.name,...a.steps,...a.applicableWorks]),...b.resources.flatMap(a=>[a.name,a.type,a.spec,a.quantity,a.unit]),...b.schedule.flatMap(a=>[a.milestone,a.duration,a.startDate,a.endDate]),...b.standards.flatMap(a=>[a.code,a.description]),...b.risks.flatMap(a=>[a.risk,a.level,a.mitigation]),...b.requirements.flatMap(a=>[a.category,a.detail]),...b.siteConditions.flatMap(a=>[a.condition,a.impact]),...b.addendumChanges.flatMap(a=>[a.originalPath,a.original,a.revised]),...b.gaps].join(" ")):"";return a.chapters.map(b=>{var d;let e=`${c} ${!(d=a.canonicalFacts)?"":aH(Object.values(d.byKey||{}).map(a=>`${a.label} ${a.value}`).join(" "))}`,f=aG.filter(c=>(function(a,b){let c=aJ(b);return!!((b.tableSections||[]).some(b=>b===a.title||a.title.includes(b)||b.includes(a.title))||a.moduleTitles.some(a=>c.includes(aH(a)))||a.triggerKeywords.some(a=>c.includes(aH(a))))})(c,b)&&aK(c,e,a.projectGraph)).map(c=>{let d=aI(c.fields.map(a=>a.sourceDomain)),f=function(a,b,c,d){let e=aJ(b);if(a.required||(b.tableSections||[]).some(b=>b===a.title||a.title.includes(b)))return"must";let f=aK(a,c,d);return/危大|安全|进度|工期|质量|资源|人材机|机械|劳动力|材料/u.test(e)&&f?"should":f?"conditional":"reference"}(c,b,e,a.projectGraph),g=function(a,b,c){let d=a.fields.filter(a=>a.required),e=a.fields.filter(a=>a.required&&"projectFactOnly"===a.fallbackPolicy&&!aL(a.sourceDomain,b,c)).map(a=>a.name),f=a.fields.filter(a=>"projectFactOnly"!==a.fallbackPolicy||aL(a.sourceDomain,b,c)).length,g="generate_with_confirmed_facts";return e.length>0&&f>0&&(g="generate_with_review_notes"),e.length===d.length&&d.length>0&&(g="convert_to_text"),0===f&&(g="skip_with_reason"),{requiredFieldCount:d.length,confirmedFieldCount:f,missingProjectFactFields:e,canGenerate:"skip_with_reason"!==g,fallbackPolicy:g}}(c,a.projectGraph,a.canonicalFacts),h="must"===f?{shouldOutput:!0,outputType:"convert_to_text"===g.fallbackPolicy?"checklist":"markdown_table",decisionReason:"章节必要管控表,按项目资料和图谱事实输出。"}:"should"===f?{shouldOutput:!0,outputType:"convert_to_text"===g.fallbackPolicy?"checklist":"markdown_table",decisionReason:"项目图谱和章节语义均触发,按资料内容输出。"}:"conditional"===f&&g.confirmedFieldCount>0?{shouldOutput:!0,outputType:"checklist",decisionReason:"资料已触发该结构,按已有事实表达。"}:{shouldOutput:!1,outputType:"skip",decisionReason:"非本章核心输出。"};return{id:c.id,title:c.title,chapterTitle:b.title,moduleTitle:c.moduleTitles[0]||b.title,required:h.shouldOutput&&("must"===f||c.required),reason:function(a,b){let c=[];return b?.schedule.length&&a.fields.some(a=>"schedule"===a.sourceDomain)&&c.push("项目图谱包含工期与关键节点"),b?.resources.length&&a.fields.some(a=>"resources"===a.sourceDomain)&&c.push("项目图谱包含资源投入信息"),b?.risks.length&&a.fields.some(a=>"risks"===a.sourceDomain)&&c.push("项目图谱包含风险与管控要求"),b?.requirements.length&&a.fields.some(a=>"requirements"===a.sourceDomain)&&c.push("项目图谱包含招标/管理要求"),b?.siteConditions.length&&a.fields.some(a=>"siteConditions"===a.sourceDomain)&&c.push("项目图谱包含现场条件约束"),c.length?c.join(";"):`章节包含“${a.moduleTitles.join("、")}”模块,按施工组织设计标准表格库生成。`}(c,a.projectGraph),fields:c.fields,sourceDomains:d,necessity:f,belongsToChapter:!0,scopeExplanation:`表格归属于“${b.title}”中“${c.moduleTitles.join("、")}”相关管理对象。`,triggerFacts:Object.values(a.canonicalFacts?.byKey||{}).filter(a=>c.triggerKeywords.some(b=>aH(`${a.label}${a.value}`).includes(aH(b)))).map(a=>`${a.label}=${a.value}`),triggerGraphNodes:c.triggerKeywords.filter(a=>e.includes(aH(a))),fillability:g,outputDecision:h,rowSeeds:function(a,b,c){let d=[],e=(b,c,e,f)=>{if(!aH(`${b}${e}`)||d.some(a=>aH(a.rowLabel)===aH(b)))return;let g=a.fields.filter(a=>aH(e).includes(aH(a.name))||"projectFactOnly"!==a.fallbackPolicy).map(a=>a.name),h=a.fields.filter(a=>a.required&&!g.includes(a.name)&&"projectFactOnly"===a.fallbackPolicy).map(a=>a.name);d.push({rowLabel:b,source:c,confirmedFields:g,missingFields:h,sourceRef:f})};for(let b of Object.values(c?.byKey||{}))a.triggerKeywords.some(a=>aH(`${b.label}${b.value}`).includes(aH(a)))&&e(b.label,"canonicalFact",b.value,b.sourceFile);for(let c of b?.resources||[])(a.fields.some(a=>"resources"===a.sourceDomain)||a.triggerKeywords.some(a=>aH(`${c.name}${c.type}`).includes(aH(a))))&&e(c.name,"equipment"===c.type||"material"===c.type||"labor"===c.type?"projectGraph":"standard",[c.spec,c.quantity,c.unit].filter(Boolean).join(" "),c.sourceFiles?.[0]);for(let c of b?.risks||[])(a.fields.some(a=>"risks"===a.sourceDomain)||a.triggerKeywords.some(a=>aH(c.risk).includes(aH(a))))&&e(c.risk,"projectGraph",[c.level,c.mitigation].filter(Boolean).join(" "),c.sourceFiles?.[0]);for(let c of b?.schedule||[])a.fields.some(a=>"schedule"===a.sourceDomain)&&e(c.milestone,"projectGraph",[c.duration,c.startDate,c.endDate].filter(Boolean).join(" "),c.sourceFiles?.[0]);return d.slice(0,24)}(c,a.projectGraph,a.canonicalFacts)}}),g=new Map((b.tablePlans||[]).map(a=>[a.id,a]));for(let a of f)g.set(a.id,a);let h=[...g.values()],i=aI([...b.tableSections||[],...h.map(a=>a.title)]),j=aI([...b.tableRequirements||[],...h.map(a=>`${a.title}:表头必须为“${a.fields.map(a=>a.name).join("、")}”;${a.fields.some(a=>"projectFactOnly"===a.fallbackPolicy)?"项目特有数字、日期、工程量、规格必须来自资料或项目图谱,不得编造。":"可按施工组织设计标准流程填写。"}`)]);return{...b,tableSections:i,tableRequirements:j,tablePlans:h}})}async function aN(a){(0,ay.Te)(a.signal);let b=[];if(0===a.scopedFilePaths.length)return b;let c=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.chapter.title),d=(c?1.6:1)*(/[、,,与和及]/.test(a.chapter.title)?1.4:1),e=Math.ceil((a.highRisk?18:10)*d),f=(function(a,b=[]){let c=a.sections||[],d=[...a.requiredFacts,...b],e=(0,az.Cr)(c,a=>(0,az.Ox)(a),{maxItems:16,maxChars:1200},"retrieval-sections").selected,f=(0,az.Cr)(d,a=>(0,az.Ox)(a),{maxItems:16,maxChars:1200},"retrieval-facts").selected,g=/[、,,与和及]/.test(a.title),h=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.title),i=/进度|工期|节点/u.test(a.title)?["合同工期","计划工期","日历天","开工","竣工","关键线路","进度计划","施工进度"]:/质量|验收/u.test(a.title)?["质量标准","验收规范","检验批","复验","合格","质量保证","隐蔽验收"]:/安全|危大|风险/u.test(a.title)?["安全措施","风险源","危大工程","应急","检查整改","安全防护","应急预案"]:h?["工程量清单","项目特征","材料设备","规格型号","数量单位","劳动力","机械设备","进场计划","资源保障","主要材料","施工机具","材料供应","设备配置"]:/施工|方案|方法|技术|工艺/u.test(a.title)?["施工方法","工艺流程","技术标准","构造做法","控制要点","施工准备"]:["工程范围","施工方法","控制要点","验收要求"],j=g?[...i,...a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4)]:i,k=[...new Set([a.title,...e,...f,...j].flatMap(a=>a.split(/[\s、,,。;;::()()《》【】\-/]+/u)).map(a=>a.trim()).filter(a=>a.length>=2))],l=(0,az.Cr)(k,a=>(0,az.Ox)(a),{maxItems:36,maxChars:1200},"retrieval-tokens").selected,m=g?a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4).map(a=>`${a} ${e.slice(0,6).join(" ")} ${f.slice(0,4).join(" ")}`.trim()):[];return[...new Set([`${a.title} ${e.join(" ")}`.trim(),...f.map(b=>`${a.title} ${b}`.trim()),...e.map(b=>`${a.title} ${b} ${f.slice(0,6).join(" ")}`.trim()),`${a.title} ${j.join(" ")}`.trim(),...m,l.join(" ")].filter(Boolean))]})(a.chapter,a.requiredNeeds).slice(0,e),g=Math.ceil((a.highRisk?24:14)*(c?1.4:1)),h=Math.ceil((a.highRisk?72:42)*d),i=Math.ceil((a.highRisk?72e3:42e3)*d),j=await (0,ay.l$)(f,async b=>{var c;(0,ay.Te)(a.signal);let d=await a.manager.search(a.projectRoot,b,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:g,weights:{keyword:.62,vector:.32,rewrite:.9,hybridBonus:.28},generationMode:!1});return(c={chapter:a.chapter,results:d.results.filter(b=>a.scopedFilePaths.includes(b.filePath)),fileRoleByPath:a.fileRoleByPath,fileProcessingByPath:a.fileProcessingByPath,boost:2.4,source:"deep-retrieval"}).results.map(a=>{let b=c.fileProcessingByPath.get(a.filePath);return{chapterId:c.chapter.id,filePath:a.filePath,score:a.score+c.boost+("table"===b?3:"structured_data"===b?2.6:3.2*("bill_of_quantities"===b)),content:a.content,roleId:c.fileRoleByPath.get(a.filePath),processingType:b,sectionTitle:a.sectionTitle,source:c.source}})},{kind:"deepRetrieval",highRisk:a.highRisk});return b.push(...j.flat()),(0,s.QR)(b,{maxItems:h,maxChars:i,preservePinned:!0})}var aO=c(73024),aP=c(15751),aQ=c(11248),aR=c(95734);function aS(a){let b=[],c=new Set;for(let d of a.filter(a=>"table"===a.processingType||"structured_data"===a.processingType||"bill_of_quantities"===a.processingType)){if(c.has(d.filePath))continue;c.add(d.filePath);let a=(0,g.aY)(),f=e.isAbsolute(d.filePath)?d.filePath:aO.existsSync(e.join(a,"knowledgeBase",d.filePath))?e.join(a,"knowledgeBase",d.filePath):e.join(a,d.filePath),h=e.extname(d.filePath).toLowerCase();if(aO.existsSync(f)&&[".xlsx",".xls",".csv"].includes(h))try{let a=aP.readFile(f,{cellDates:!0,sheetStubs:!1});for(let c of a.SheetNames){let e=a.Sheets[c],f=aP.utils.sheet_to_json(e,{header:1,raw:!1,defval:""}).map(a=>a.map(a=>String(a).trim())).filter(a=>a.some(Boolean));if(f.length<2)continue;let g=f.findIndex(a=>a.filter(Boolean).length>=2);if(g<0)continue;let h=f[g].filter(Boolean),i=f.slice(g+1).map(a=>a.slice(0,h.length)).filter(a=>a.some(Boolean));0!==i.length&&b.push({tableType:d.roleId||"table",sheet:c,headers:h,rows:i,sourceFile:d.filePath,sourceRange:e["!ref"]})}continue}catch{}let i=d.content.split("\n").map(a=>a.trim()).filter(Boolean).filter(a=>a.includes("|")||a.includes(" ")||a.includes(","));if(i.length<2)continue;let j=i[0].includes("|")?"|":i[0].includes(" ")?" ":",",k=i.map(a=>a.split(j).map(a=>a.trim()).filter(Boolean)).filter(a=>a.length>1);k.length<2||b.push({tableType:d.roleId||"table",headers:k[0],rows:k.slice(1),sourceFile:d.filePath,sourceRange:d.sectionTitle})}return b}function aT(a,b,c){let d=(0,u.Uy)(b,c).map(a=>({field:a,pattern:function(a){let b=a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");return RegExp(`${b}[::\\s]+([^\\n,。;;]+)`,"u")}(a.name)})),e=[];for(let b of a)for(let{field:a,pattern:c}of d){if(!(0,u.I2)(b,a))continue;let d=b.content.match(c),f=d?.[1]?.trim();!f||!(f.length<=220)||o(l,f)||p(l,f)||e.some(b=>b.fieldId===a.id&&b.value===f)||e.push({key:a.name,fieldId:a.id,fieldName:a.name,value:f,sourceFile:b.filePath,roleId:b.roleId||"unknown",processingType:b.processingType,confidence:b.score,sourceRef:{filePath:b.filePath,roleId:b.roleId||"unknown",processingType:b.processingType,sectionTitle:b.sectionTitle}})}return e}async function aU(a,b,c,d,e){let f=[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"LLM JSON 抽取未启用或无可用模型"}],g=Math.max(12e3,Math.floor(Number(process.env.DOCUMENT_FACT_EXTRACTION_MAX_CHARS??45e3))),h=Math.max(8,Math.floor(Number(process.env.DOCUMENT_FACT_EXTRACTION_MAX_ITEMS??48))),i=0,j=[];for(let b of[...a].sort((a,b)=>b.score-a.score).slice(0,h)){let a=(0,ay.lG)(b.content).replace(/\s+/gu," ").slice(0,Math.max(800,Math.floor(g/h))),c=`文件:${b.filePath}
64
64
  角色:${b.roleId||""}
65
65
  处理:${b.processingType||""}
66
66
  内容:${a}`;if(j.length>0&&i+c.length>g)break;i+=c.length,j.push(c)}let k=j.join("\n\n---\n\n");if(!k.trim())return{facts:[],stages:f};(0,ay.Te)(e);let l=(0,u.Uy)(c,d),m=l.map(a=>`- id=${a.id} name=${a.name} type=auto required=${a.required} sourceRoleIds=${a.sourceRoleIds.join(",")||"不限"} hint=${a.extractionHint||"无"}`).join("\n"),n=await (0,aR.bb)(b||"你是文档事实抽取器。",`请严格按下面的动态事实 schema 从资料中抽取事实。只抽取资料明确支持的内容;如果字段限定 sourceRoleIds,必须优先来自对应文件角色;事实取舍和冲突处理遵循规范包字段说明、文件角色和提示词角色配置。
@@ -70,7 +70,7 @@ ${l.join("\n")}`,...f].filter(Boolean).join("\n")}function aF(a,b,c,d,e=!0){retu
70
70
  ${m}
71
71
 
72
72
  资料:
73
- ${k}`,{signal:e});return((0,ay.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,ay.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 aV=/(?:\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 aW(a){return(0,ay.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 aX=[{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 aY(a,b){let c=aW((0,ay.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>=4&&c.length<=80&&/公司|局|委员会|中心|处|院|所|校|集团|有限|股份|责任|管理/u.test(c)&&!/将报|监督管理部门|投标人|中标|负责解释|见招标|详见|空白|填写/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 aZ(a){let b=[],c=new Set;for(let d of a)for(let a of aW(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 aX){let f=e.pattern.exec(a),g=f?.[1]?.trim();if(!g||!aY(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 a$(a,b=l){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,ay.lG)(e.content).replace(/\s+/gu," ");for(let a of f.matchAll(aV)){let g=a[0].trim();if(!g||o(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(p(b,j)||q(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 a_(a){return`${a.key} ${a.fieldName||""} ${a.value} ${a.roleId} ${a.processingType||""} ${a.sourceFile}`}function a0(a){return/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|项目估算价|最高投标限价|招标控制价/u.test(a)}function a1(a){let b=a_(a);return!a0(b)&&/投标保证金|发票类型|开标时间|公共资源交易监督管理|不良行为记录|投诉举报|资质投诉|投标承诺|违约金|中标服务费|交易平台|保证金账户|投标有效期|报价明细|投标报价|单价|合价|税率|增值税|利润|结算/u.test(b)}function a2(a){return(0,ay.lG)(a).replace(/\s+/gu," ").trim()}function a3(a,b=[]){return[...new Set([a,...b,...a.split(/[\s、,。;;::/\\_-]+/u)].map(a2).filter(a=>a.length>=2))]}function a4(a,b,c){var d,e;let f=a2(c.label);if(!f||o(b,f)||p(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(a2).filter(Boolean):a3(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 a5(a,b,c,d,e,f=[]){"do_not_use"!==c.usagePolicy&&"diagnostic_only"!==c.usagePolicy&&"forbidden"!==c.derivationPolicy&&a4(a,b,{label:c.name,category:c.category,required:e,source:d,fieldId:c.id,queries:a3(c.name,[...c.aliases,...f])})}function a6(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 a7(a){let b=a.profile||l,c=a6([...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=a6(c.filter(a=>(function(a,b,c){let d=a_(a);if(a1(a)||o(c,d)||p(c,d))return!1;if(b.fieldId&&a.fieldId===b.fieldId||n(c,a.fieldName||a.key)?.id===b.fieldId||b.queries.filter(a=>a.length>=2).some(a=>d.includes(a)))return!0;let e=n(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!(o(c,d)||p(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 a8(a){return(0,ay.lG)(a).replace(/\s+/gu," ").trim().slice(0,220)}function a9(a,b=[],c=[],d,e=l){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)&&(!o(e,b)||a0(b))&&!p(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=>p(d,a_(a))||q(d,a_(a))),f=a.filter(a=>{let b=a_(a);return a.confidence>=.58&&!a1(a)&&!o(d,b)&&!p(d,b)&&!q(d,b)}),g=[...b.filter(a=>!a1(a)),...f.filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|JGJ|ISO|IEC|台|套|个|项|批|次|份|人|㎡|型号|规格|数量|单位/iu.test(a_(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(a_(a))),i=f.filter(a=>"drawing"===a.processingType||/drawing|draw|dwg|图纸|设计|尺寸|标高|管径|做法/u.test(a_(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=l){let d=(b?.factFields.map(a=>a.name)||[...new Set(a.map(a=>a.fieldName||a.key))]).filter(a=>(function(a,b){let c=n(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||n(c,a.fieldName||a.key)?.name===b),f=new Map;for(let a of d){let b=function(a,b){let c=(0,ay.lG)(a).trim();if(p(b,c)||o(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,aQ.K3)((0,ay.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,ay.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)}}var ba=c(80439),bb=c(74329);function bc(a){let b=0,c=0;for(let d of a)/[\u4E00-\u9FFF\u3000-\u303F\uFF00-\uFFEF]/u.test(d)?b+=1:c+=1;return Math.ceil(b/1.5+c/4)}function bd(...a){return a.flat()}function be(a){let b={info:0,warning:1,error:2},c=new Map;for(let d of a){let a=d.message.replace(/\d+(?:\.\d+)?/gu,"#").replace(/\s+/gu,"").slice(0,120),e=c.get(a);!e||b[d.level]>b[e.level]?c.set(a,d):!e.suggestion&&d.suggestion&&c.set(a,{...e,suggestion:d.suggestion})}return[...c.values()]}function bf(a){let b="string"==typeof a?a:a.message;return(b.match(/问题:([^\n]+)/u)?.[1]||b).replace(/\d+(?:\.\d+)?/gu,"#").replace(/\s+/gu,"").slice(0,120)}function bg(a){let b="string"==typeof a?a:a.message,c="string"==typeof a?"":a.suggestion,d=b.match(/^([^::]+)[::]/u)?.[1]||"全文",e=/跨章一致性/u.test(b)?"跨章一致性修复":/泛化|套话/u.test(b)?"泛化内容替换":/专业|进度|质量|安全|资源|施工/u.test(b)?"专业缺口补写":/小节|章节|结构/u.test(b)?"结构完整性修复":"质量问题修复";return["【修复任务包】",`修复类型:${e}`,`修复对象:${d}`,`问题:${b}`,c?`要求:${c}`:"","输出要求:只改正文内容,不输出解释;必须结合资料事实、专业控制点、验收闭环和跨章一致性约束;不得用泛化套话填充。"].filter(Boolean).join("\n")}function bh(a,b){let c=new Map(b.map(a=>[bf(a),a]));return a.filter(a=>c.has(bf(a))).map(a=>{let b=c.get(bf(a)),d=b?.level==="warning"?"软问题复核":"硬问题升级";return bg(a).replace("修复类型:",`修复类型:${d}-小节/章节重写;原类型:`)})}async function bi(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 bj(a){let b=[];for(let c of a)bb.ee.lastIndex=0,bb.ee.test(c)&&b.push(c);return b}function bk(a){return bb.MG.lastIndex=0,bb.MG.test(a)}function bl(a){let b=[];for(let c of(RegExp(`^##\\s+(?:第[一二三四五六七八九十百千万\\d]+章\\s*)?${a.chapter.title.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}`,"mu").test(a.content)||b.push("正文缺少章节标题"),(0,aj.AC)(a.content,[{id:a.chapter.id,title:a.chapter.title,content:a.content,evidence:[],sections:a.chapter.sections||[],missingFacts:[]}])))b.push(c.message);for(let c of((0,ai.V7)(a.content)<Math.floor(.85*a.targetWords)&&b.push("正文篇幅明显低于目标"),x.lastIndex=0,(x.test(a.content)||/知识库|检索|事实字段|校验结果/u.test(a.content))&&b.push("正文包含后台流程话术"),/资料未提供|满足相关要求|结合实际情况|根据实际情况|视情况|待明确|待确认/u.test(a.content)&&b.push("正文存在空泛占位表达"),a.missingFacts.filter(b=>b&&!a.content.includes(b))))b.push(`requiredFacts 未明显覆盖:${c}`);let c=[...new Set(b)];return c.length<=16?c:[...c.slice(0,16),`(及其他 ${c.length-16} 个问题,详见校验报告)`]}async function bm(a){(0,ay.Te)(a.signal);let b=a.repairType||function(a){let b=a.join("\n");for(let a of bb.NP)if(a.pattern.lastIndex=0,a.pattern.test(b))return a.type;return"generic"}(a.issues),c=a.contextChapters?.length?`
73
+ ${k}`,{signal:e});return((0,ay.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,ay.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 aV=/(?:\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 aW(a){return(0,ay.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 aX=[{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 aY(a,b){let c=aW((0,ay.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>=4&&c.length<=80&&/公司|局|委员会|中心|处|院|所|校|集团|有限|股份|责任|管理/u.test(c)&&!/将报|监督管理部门|投标人|中标|负责解释|见招标|详见|空白|填写/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 aZ(a){let b=[],c=new Set;for(let d of a)for(let a of aW(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 aX){let f=e.pattern.exec(a),g=f?.[1]?.trim();if(!g||!aY(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 a$(a,b=l){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,ay.lG)(e.content).replace(/\s+/gu," ");for(let a of f.matchAll(aV)){let g=a[0].trim();if(!g||o(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(p(b,j)||q(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 a_(a){return`${a.key} ${a.fieldName||""} ${a.value} ${a.roleId} ${a.processingType||""} ${a.sourceFile}`}function a0(a){return/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|项目估算价|最高投标限价|招标控制价/u.test(a)}function a1(a){let b=a_(a);return!a0(b)&&/投标保证金|发票类型|开标时间|公共资源交易监督管理|不良行为记录|投诉举报|资质投诉|投标承诺|违约金|中标服务费|交易平台|保证金账户|投标有效期|报价明细|投标报价|单价|合价|税率|增值税|利润|结算/u.test(b)}function a2(a){return(0,ay.lG)(a).replace(/\s+/gu," ").trim()}function a3(a,b=[]){return[...new Set([a,...b,...a.split(/[\s、,。;;::/\\_-]+/u)].map(a2).filter(a=>a.length>=2))]}function a4(a,b,c){var d,e;let f=a2(c.label);if(!f||o(b,f)||p(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(a2).filter(Boolean):a3(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 a5(a,b,c,d,e,f=[]){"do_not_use"!==c.usagePolicy&&"diagnostic_only"!==c.usagePolicy&&"forbidden"!==c.derivationPolicy&&a4(a,b,{label:c.name,category:c.category,required:e,source:d,fieldId:c.id,queries:a3(c.name,[...c.aliases,...f])})}function a6(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 a7(a){let b=a.profile||l,c=a6([...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=a6(c.filter(a=>(function(a,b,c){let d=a_(a);if(a1(a)||o(c,d)||p(c,d))return!1;if(b.fieldId&&a.fieldId===b.fieldId||n(c,a.fieldName||a.key)?.id===b.fieldId||b.queries.filter(a=>a.length>=2).some(a=>d.includes(a)))return!0;let e=n(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!(o(c,d)||p(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 a8(a){return(0,ay.lG)(a).replace(/\s+/gu," ").trim().slice(0,220)}function a9(a,b=[],c=[],d,e=l){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)&&(!o(e,b)||a0(b))&&!p(e,b)}),i=a.filter(a=>"table"===a.processingType||"structured_data"===a.processingType||"bill_of_quantities"===a.processingType||/bill|boq|table|sheet|data|表格|列表|明细|数据/u.test(`${a.roleId} ${a.sourceFile}`)),j=a.filter(a=>/项目名称|工程名称|项目编号|招标项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`)).slice(0,80),k=function(a,b,c,d){let e=a.filter(a=>p(d,a_(a))||q(d,a_(a))),f=a.filter(a=>{let b=a_(a);return a.confidence>=.58&&!a1(a)&&!o(d,b)&&!p(d,b)&&!q(d,b)}),g=[...b.filter(a=>!a1(a)),...f.filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|JGJ|ISO|IEC|台|套|个|项|批|次|份|人|㎡|型号|规格|数量|单位/iu.test(a_(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(a_(a))),i=f.filter(a=>"drawing"===a.processingType||/drawing|draw|dwg|图纸|设计|尺寸|标高|管径|做法/u.test(a_(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:j,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:k,missing:[...new Set(c)],conflicts:function(a,b,c=l){let d=(b?.factFields.map(a=>a.name)||[...new Set(a.map(a=>a.fieldName||a.key))]).filter(a=>(function(a,b){let c=n(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||n(c,a.fieldName||a.key)?.name===b),f=new Map;for(let a of d){let b=function(a,b){let c=(0,ay.lG)(a).trim();if(p(b,c)||o(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,aQ.K3)((0,ay.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,ay.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)}}var ba=c(80439),bb=c(74329);function bc(a){let b=0,c=0;for(let d of a)/[\u4E00-\u9FFF\u3000-\u303F\uFF00-\uFFEF]/u.test(d)?b+=1:c+=1;return Math.ceil(b/1.5+c/4)}function bd(...a){return a.flat()}function be(a){let b={info:0,warning:1,error:2},c=new Map;for(let d of a){let a=d.message.replace(/\d+(?:\.\d+)?/gu,"#").replace(/\s+/gu,"").slice(0,120),e=c.get(a);!e||b[d.level]>b[e.level]?c.set(a,d):!e.suggestion&&d.suggestion&&c.set(a,{...e,suggestion:d.suggestion})}return[...c.values()]}function bf(a){let b="string"==typeof a?a:a.message;return(b.match(/问题:([^\n]+)/u)?.[1]||b).replace(/\d+(?:\.\d+)?/gu,"#").replace(/\s+/gu,"").slice(0,120)}function bg(a){let b="string"==typeof a?a:a.message,c="string"==typeof a?"":a.suggestion,d=b.match(/^([^::]+)[::]/u)?.[1]||"全文",e=/跨章一致性/u.test(b)?"跨章一致性修复":/泛化|套话/u.test(b)?"泛化内容替换":/专业|进度|质量|安全|资源|施工/u.test(b)?"专业缺口补写":/小节|章节|结构/u.test(b)?"结构完整性修复":"质量问题修复";return["【修复任务包】",`修复类型:${e}`,`修复对象:${d}`,`问题:${b}`,c?`要求:${c}`:"","输出要求:只改正文内容,不输出解释;必须结合资料事实、专业控制点、验收闭环和跨章一致性约束;不得用泛化套话填充。"].filter(Boolean).join("\n")}function bh(a,b){let c=new Map(b.map(a=>[bf(a),a]));return a.filter(a=>c.has(bf(a))).map(a=>{let b=c.get(bf(a)),d=b?.level==="warning"?"软问题复核":"硬问题升级";return bg(a).replace("修复类型:",`修复类型:${d}-小节/章节重写;原类型:`)})}async function bi(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 bj(a){let b=[];for(let c of a)bb.ee.lastIndex=0,bb.ee.test(c)&&b.push(c);return b}function bk(a){return bb.MG.lastIndex=0,bb.MG.test(a)}function bl(a){let b=[];for(let c of(RegExp(`^##\\s+(?:第[一二三四五六七八九十百千万\\d]+章\\s*)?${a.chapter.title.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}`,"mu").test(a.content)||b.push("正文缺少章节标题"),(0,aj.AC)(a.content,[{id:a.chapter.id,title:a.chapter.title,content:a.content,evidence:[],sections:a.chapter.sections||[],missingFacts:[]}])))b.push(c.message);for(let c of((0,ai.V7)(a.content)<Math.floor(.85*a.targetWords)&&b.push("正文篇幅明显低于目标"),x.lastIndex=0,(x.test(a.content)||/知识库|检索|事实字段|校验结果/u.test(a.content))&&b.push("正文包含后台流程话术"),/资料未提供|满足相关要求|结合实际情况|根据实际情况|视情况|待明确|待确认/u.test(a.content)&&b.push("正文存在空泛占位表达"),a.missingFacts.filter(b=>b&&!a.content.includes(b))))b.push(`requiredFacts 未明显覆盖:${c}`);let c=[...new Set(b)];return c.length<=16?c:[...c.slice(0,16),`(及其他 ${c.length-16} 个问题,详见校验报告)`]}async function bm(a){(0,ay.Te)(a.signal);let b=a.repairType||function(a){let b=a.join("\n");for(let a of bb.NP)if(a.pattern.lastIndex=0,a.pattern.test(b))return a.type;return"generic"}(a.issues),c=a.contextChapters?.length?`
74
74
 
75
75
  周边章节上下文(仅用于衔接,禁止改动其中内容):
76
76
  ${a.contextChapters.map(a=>`【${a.title}】
@@ -78,7 +78,7 @@ ${a.content.slice(0,2500)}`).join("\n\n")}`:"",d=await (0,aR.bb)(["你是章节
78
78
  ${a.issues.map(a=>`- ${a}`).join("\n")}`,a.chapter.evidence.length?`本章证据摘要:
79
79
  ${(0,s.ks)((0,s.QO)({id:a.chapter.id,title:a.chapter.title,purpose:a.chapter.title,queries:[],requiredFacts:[]},a.chapter.evidence),{maxChars:(0,s.Pc)((0,ai.V7)(a.chapter.content),5e3,14e3)})}`:"","当前章节 Markdown:",a.chapter.content,c].filter(Boolean).join("\n\n"),{maxTokens:2200,temperature:0,signal:a.signal,diagnostics:a.diagnostics});(0,ay.Te)(a.signal);let e=a.chapter.content,f=0;for(let b of Array.isArray(d?.patches)?d.patches:[]){let c=function(a){var b;let c=a.patch.replacement?.trim(),d=(b=a.content,Math.max(2600,Math.min(16e3,Math.ceil(.45*(0,ai.V7)(b)))));if(!c||c.length>d||a.forbidDrawingImages&&/!\[[^\]]*\]\([^)]*\)/iu.test(c))return{content:a.content,applied:!1};let e=function(a,b){let c=b.originalText?.trim();if(c&&a.indexOf(c)===a.lastIndexOf(c))return c;let d=b.targetStart?.trim(),e=b.targetEnd?.trim();if(!d||!e)return;let f=a.indexOf(d),g=a.indexOf(e,f+d.length);if(f<0||g<0)return;let h=g+e.length,i=a.slice(f,h);return a.indexOf(i)===a.lastIndexOf(i)?i:void 0}(a.content,a.patch);if(!e||e.length>d)return{content:a.content,applied:!1};let f=L(w(a.content.replace(e,c),a.forbidDrawingImages));return!function(a,b){let c=(a.match(/```/gu)||[]).length,d=b.replace(/^第[一二三四五六七八九十百千万]+章\s*/u,"").trim();return c%2==0&&(!d||a.includes(d))&&!/^\s*$/u.test(a)}(f,a.title)||(0,ai.V7)(f)<Math.floor(.65*(0,ai.V7)(a.content))?{content:a.content,applied:!1}:{content:f,applied:f!==a.content}}({content:e,patch:b,title:a.chapter.title,forbidDrawingImages:a.forbidDrawingImages});e=c.content,c.applied&&(f+=1)}return{content:e,appliedCount:f,repairType:b}}function bn(a){return a.replace(/【修复任务包】/gu,"").split(/\r?\n/u).map(a=>a.replace(/^(?:修复类型|修复对象|问题|要求|输出要求):/u,"").trim()).filter(Boolean)[0]?.slice(0,80)||"质量问题"}async function bo(a){let b=a.issues.filter(a=>"minor"!==(0,aj.z0)(a)).filter(bk),c=a.resolvedSignatures;if(c&&(b=b.filter(a=>!c.has(bf(a)))),0===b.length)return{markdown:a.markdown,chapters:a.chapters,stage:void 0,resolvedSignatures:[]};let d=a.chapters.map(a=>({chapter:a,issues:function(a,b){let c=b.filter(bk),d=new Set(a.sections||[]),e=function(a,b,c="text"){if(4e3>=bc(a))return{truncated:a,droppedChars:0,droppedLog:""};let d=a.split(/\n{2,}/u),e="",f=0,g=0;for(let a of d){let c=bc(a);if(f+c<=4e3)e+=(e?"\n\n":"")+a,f+=c;else{let c=a.split(/(?<=[。;])/u),d="";for(let a of c){let c=bc(a);f+c<=b?(d+=a,f+=c):g+=a.length}d&&(e+=(e?"\n\n":"")+d);break}}let h=(g=a.length-e.length)>0?`[token-budget] ${c}: 预算 ${b} tokens → 保留 ${bc(e)} tokens,丢弃 ${g} 字符`:"";return{truncated:e,droppedChars:g,droppedLog:h}}(a.content,4e3,"issue-matching").truncated,f=`${a.title}
80
80
  ${a.sections?.join("\n")||""}
81
- ${e}`;return c.filter(b=>b.includes(a.title)||[...d].some(a=>b.includes(a))||/图片|三级小节|目录|表格|量化|数值|单位|事实|不得出现|禁止词|禁用主体|生成后事实反查失败|跨章一致性/u.test(b)&&/!\[|####|\*\*|\||m\s*[²2]|mm2|cm2|km2|重新生成|见招标公告|招标范围|兜底|施工方|\d/u.test(f)).slice(0,8)}(a,b)})).filter(a=>a.issues.length>0);if(0===d.length)return{markdown:a.markdown,chapters:a.chapters,stage:{type:"llm_review",roleId:"quality-repair",status:"success",message:`已完成质量检查,未定位到可安全局部修复的阻断问题:共 ${b.length} 个;摘要:${b.slice(0,5).map(bn).join(";")}`},resolvedSignatures:[]};let e=Math.max(1,d.length||1),f=new Map,g=0;for(let b=0;b<d.length;b+=e){(0,ay.Te)(a.signal);let c=d.slice(b,b+e);(await Promise.all(c.map(async b=>bm({template:a.template,chapter:b.chapter,issues:b.issues,promptTexts:a.promptTexts,requirement:a.requirement,forbidDrawingImages:a.forbidDrawingImages,diagnostics:a.diagnostics,signal:a.signal})))).forEach((a,b)=>{f.set(c[b].chapter.id,a.content),g+=a.appliedCount})}let h=0,i=0,j=a.chapters.map(a=>{let b=f.get(a.id);if(!b||b===a.content)return a;let c=(0,ai.V7)(a.content);return(0,ai.V7)(b)<Math.max(1200,Math.floor(.92*c))?(i+=1,a):(h+=1,{...a,content:b})}),k=h>0?`已应用 ${g} 个局部质量 patch,修复 ${h} 个章节;拒绝 ${i} 个明显缩水 patch;未进行整章或全文重写`:`已完成质量检查,未生成可唯一定位且通过校验的局部 patch:共 ${b.length} 个,拒绝 ${i} 个明显缩水 patch;摘要:${b.slice(0,5).map(bn).join(";")}`,l=new Set;if(h>0){for(let a of d)if(f.has(a.chapter.id))for(let b of a.issues)l.add(bf(b))}let m=[...l];return{markdown:a.markdown,chapters:j,stage:{type:"llm_review",roleId:"quality-repair",status:"success",message:k},resolvedSignatures:m}}function bp(a,b,c){return function(a,b){let c=e.resolve(a),d=function(a,b){let c=e.resolve(a);if(e.isAbsolute(b))return e.resolve(b);let d=e.resolve(c,"knowledgeBase",b);return aO.existsSync(d)?d:e.resolve(c,b)}(c,b);return d===c||d.startsWith(`${c}${e.sep}`)}(a,b)&&c.size>0&&(function(a,b){let c=e.isAbsolute(b)?b:e.join(a,b),d=e.isAbsolute(b)?e.relative(a,b):b;return[b,c,d,e.join(a,d)]})(a,b).some(a=>c.has(a))}function bq(a){return a.map(a=>`## [${a.roleId}/${a.category}] ${a.name}
81
+ ${e}`;return c.filter(b=>b.includes(a.title)||[...d].some(a=>b.includes(a))||/图片|三级小节|目录|表格|量化|数值|单位|事实|不得出现|禁止词|禁用主体|生成后事实反查失败|跨章一致性/u.test(b)&&/!\[|####|\*\*|\||m\s*[²2]|mm2|cm2|km2|重新生成|见招标公告|招标范围|兜底|施工方|\d/u.test(f)).slice(0,8)}(a,b)})).filter(a=>a.issues.length>0);if(0===d.length)return{markdown:a.markdown,chapters:a.chapters,stage:{type:"llm_review",roleId:"quality-repair",status:"success",message:`已完成质量检查,未定位到可安全局部修复的阻断问题:共 ${b.length} 个;摘要:${b.slice(0,5).map(bn).join(";")}`},resolvedSignatures:[]};let e=Number(process.env.DOCUMENT_QUALITY_REPAIR_CONCURRENCY||2),f=Math.max(1,Math.min(d.length||1,Number.isFinite(e)?Math.floor(e):2)),g=new Map,h=0;for(let b=0;b<d.length;b+=f){(0,ay.Te)(a.signal);let c=d.slice(b,b+f);(await Promise.all(c.map(async b=>bm({template:a.template,chapter:b.chapter,issues:b.issues,promptTexts:a.promptTexts,requirement:a.requirement,forbidDrawingImages:a.forbidDrawingImages,diagnostics:a.diagnostics,signal:a.signal})))).forEach((a,b)=>{g.set(c[b].chapter.id,a.content),h+=a.appliedCount})}let i=0,j=0,k=new Set,l=a.chapters.map(a=>{let b=g.get(a.id);if(!b||b===a.content)return a;let c=(0,ai.V7)(a.content);return(0,ai.V7)(b)<Math.max(1200,Math.floor(.92*c))?(j+=1,a):(i+=1,k.add(a.id),{...a,content:b})}),m=i>0?`已应用 ${h} 个局部质量 patch,修复 ${i} 个章节;拒绝 ${j} 个明显缩水 patch;未进行整章或全文重写`:`已完成质量检查,未生成可唯一定位且通过校验的局部 patch:共 ${b.length} 个,拒绝 ${j} 个明显缩水 patch;摘要:${b.slice(0,5).map(bn).join(";")}`,n=new Set;if(i>0){for(let a of d)if(k.has(a.chapter.id))for(let b of a.issues)n.add(bf(b))}let o=[...n];return{markdown:a.markdown,chapters:l,stage:{type:"llm_review",roleId:"quality-repair",status:"success",message:m},resolvedSignatures:o}}function bp(a,b,c){return function(a,b){let c=e.resolve(a),d=function(a,b){let c=e.resolve(a);if(e.isAbsolute(b))return e.resolve(b);let d=e.resolve(c,"knowledgeBase",b);return aO.existsSync(d)?d:e.resolve(c,b)}(c,b);return d===c||d.startsWith(`${c}${e.sep}`)}(a,b)&&c.size>0&&(function(a,b){let c=e.isAbsolute(b)?b:e.join(a,b),d=e.isAbsolute(b)?e.relative(a,b):b;return[b,c,d,e.join(a,d)]})(a,b).some(a=>c.has(a))}function bq(a){return a.map(a=>`## [${a.roleId}/${a.category}] ${a.name}
82
82
  ${function(a){let b=a.replace(/```([\s\S]*?)```/gu,(a,b)=>/<OUTLINE>|\|\s*[^\n]+\s*\||#{1,6}\s+|必须|禁止|不得|应当|要求|规则|格式|输出|表格|章节|小节|正文/u.test(b)?`
83
83
  ${b.trim()}
84
84
  `:"\n【示例代码块已省略:仅作为格式参考,不作为当前文档事实】\n").split(/\r?\n/u),c=[],d=!1,e=!1;for(let a of b){let b=a.trim();if((0,t.bl)(b)&&(e=!0),e){c.push(a),(0,t.Ui)(b)&&(e=!1);continue}let f=/^(?:#+\s*)?(?:示例|样例|范例|例如|参考示例|示例数据|示例正文|示例目录|example|sample)\s*[::]?/iu.test(b),g=/(?:不得|禁止|必须|应当|要求|规则|格式|输出|保留|只返回|不要|表格|章节|小节|正文|目录|封面)/u.test(b);if(f&&!g){c.at(-1)?.includes("示例内容已省略")||c.push("【示例内容已省略:仅作为格式参考,不作为当前文档事实】"),d=!0;continue}if(d){if(!b){d=!1;continue}if(!(/^(?:#+\s*)?(?:规则|要求|输出|格式|禁止|注意|正文|章节|小节|表格|风格|校验)/u.test(b)||/\|\s*[^\n]+\s*\|/u.test(b)))continue;d=!1}c.push(a)}return c.join("\n").replace(/\n{3,}/gu,"\n\n").trim()}(a.content)}`).join("\n\n")}var br=c(2773),bs=c(95393);function bt(a,b){let c=`${a} ${b}`,d=[/概况|工程|项目/u.test(c)?"必须落入项目名称、范围、地点、规模、工期、质量目标等资料事实;说明编制边界。":"",/部署|总体|组织/u.test(c)?"必须说明施工组织逻辑、施工段/专业接口、资源进场和管理闭环。":"",/进度|工期/u.test(c)?"必须围绕总工期、关键线路、资源保障、穿插施工和纠偏机制展开。":"",/质量/u.test(c)?"必须覆盖材料验收复验、过程检查、隐蔽验收、整改复验和质量资料归档。":"",/安全|文明|风险|危大/u.test(c)?"必须覆盖风险识别、人员设备、临电消防、现场文明、检查整改和应急响应。":"",/资源|材料|设备|劳动力/u.test(c)?"必须说明资源配置依据、进场验收、保管调配,并与工期和质量目标一致。":"",/施工|工艺|技术|方案/u.test(c)?"必须写清施工准备、工艺流程、关键控制点、验收要求和资料依据。":""].filter(Boolean);return["【小节专业任务卡】",`任务对象:${b}`,...d.length?d:["必须结合本项目资料明确事实说明对象范围、实施方法、控制要点、验收要求和资料闭环,避免泛化套话。"]].join("\n")}function bu(a){return(0,t.GQ)(a.replace(/\*+/gu,"")).replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分、..\s-]*/u,"").replace(/^\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^[-—–]\s*/u,"").replace(/[<>]/gu,"").replace(/[::。;;,.,]+$/gu,"").trim()}function bv(a){let b=bu(a).replace(/\s+/gu,"");return!!(!b||/^(?:目录|章节|大纲|要求|说明|注意|输出|格式|示例|例如|写法|占位|提示)$/u.test(b))||/^(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用)|^(?:如|若|如果)(?:涉及|不涉及|适用|不适用)|(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成)|按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|说明要求|注意事项/u.test(b)}function bw(a,b){let c=bu(a),d=bu(b);if(c.length<4||c.length>60||c===d||bv(c)||/^(?:目标与范围|资料依据|实施内容|质量控制|概述|总体要求)$/u.test(c)||/^(?:雨季|冬季|高温|台风|大风等特殊气候|雨季、冬季、高温、台风、大风等特殊气候)$/u.test(c)||/如需|应由|大模型|提示词|上下文|动态规划|OUTLINE|章节生成|按照.*明确指定|需求和资料|JSON|小节标题/u.test(c)||/(.)\1/u.test(c))return!0;let e=d.match(/[\p{L}\p{N}]{2,6}$/u)?.[0]||"";return!(!(e.length>=2&&/^.{2,8}\p{L}$/u.test(c)&&c.endsWith(e.slice(-1)))||c.includes(e))}function bx(a,b){let c=bu(a).replace(/[\s()()::.。;;,,、-]/gu,""),d=bu(b).replace(/[\s()()::.。;;,,、-]/gu,"");return!!c&&!!d&&(c===d||c.includes(d)||d.includes(c))}function by(a){return/判断是否涉及|若涉及|若不涉及|如果涉及|如果不涉及|不涉及.*如实说明|根据项目所在地气候特征|根据计划施工周期|根据.*施工周期|按需|视情况|可设置|专项小节/u.test(a)}function bz(a,b=""){let c=by(b);return Array.from(new Set(a.map(bu).filter(a=>!(a.length<2||a.length>30||bv(a)||/必须|强制|排序|设置|输出|独立|之后|之前|小节|其他必要/u.test(a)||c&&/^(?:雨季|冬季|高温|台风|大风等特殊气候|雨季、冬季、高温、台风、大风等特殊气候)$/u.test(a)))))}function bA(a){let b=new Set;for(let c of[/(?:必须|应当|需要|全文必须)包含[::]\s*([^。;;\n]+)/gu,/(?:必须|应当|需要|全文必须)体现[::]\s*([^。;;\n]+)/gu,/(?:关键词|核心要点)[::]\s*([^。;;\n]+)/gu])for(let d of a.matchAll(c))for(let a of(d[1]||"").split(/[、,,//及和与]/u)){let c=a.trim().replace(/["“”'‘’《》<>]/gu,"");c.length>=2&&c.length<=24&&!/表格|章节|小节|正文|目录|封面/u.test(c)&&b.add(c)}return[...b].slice(0,24)}function bB(a){let b=new Set;for(let c of[/(?:禁止|不得|严禁|杜绝)出现[::]\s*([^。;;\n]+)/gu,/(?:禁用词|禁止词|不得使用)[::]\s*([^。;;\n]+)/gu])for(let d of a.matchAll(c))for(let a of(d[1]||"").split(/[、,,//及和与]/u)){let c=a.trim().replace(/["“”'‘’《》<>]/gu,"");c.length>=2&&c.length<=24&&b.add(c)}return[...b].slice(0,40)}function bC(a,b){return a.split(/[。;;\n]/u).map(a=>a.trim()).filter(a=>a.length>=4&&b.test(a)).slice(0,24)}function bD(a,b){let c=RegExp(`(?:生成|包含|输出|需要|保留|设置|编制|制作)[^。;;\\n]{0,12}${b}|${b}[^。;;\\n]{0,12}(?:必须|应当|需要|保留|生成|输出|包含)`,"u").test(a);return RegExp(`(?:不要|不需要|不允许|不得|禁止|严禁|不输出|不生成|无需)[^。;;\\n]{0,12}${b}|${b}[^。;;\\n]{0,12}(?:不要|不需要|不允许|不得|禁止|严禁|不输出|不生成|无需)`,"u").test(a)?"forbidden":c?"required":"unspecified"}function bE(a=[],b){let c=[];for(let d of a){let a=bu(d);!(!a||bw(a,b))&&(c.some(b=>bx(b,a))||c.push(a))}return c}async function bF(a){var b,c,d,e;let f=(0,s.ks)((0,s.QO)(a.chapter,a.evidence),{maxChars:(0,s.Pc)(a.targetWords,5e3,12e3)}),g=(b=a.structuralRules,c=a.chapter,d=a.chapterIndex,(b||[]).filter(a=>!!(void 0!==a.chapterIndex&&void 0!==d&&a.chapterIndex===d||a.chapterTitle&&bx(a.chapterTitle,c.title)))),h=g.flatMap(a=>a.requiredSections).sort((a,b)=>(a.order||0)-(b.order||0)).map(a=>a.title),i=function(a,b,c,d){let e=a.title,f=/质量|安全|工期|进度|物资|材料|机械|设备|劳动力|危大|专项|文明|总平面|施工方法|施工方案/u.test(e),g=b>=14e3?6:b>=8e3?5:b>=5e3||b>=3e3?4:3;f&&(g=Math.max(g,4));let h=new Set((c.map(a=>`${a.sectionTitle||""}
@@ -124,7 +124,7 @@ ${c.join("\n\n")}`,a.forbidDrawingImages))}let j=i;if(j.length>0){for(let c=0;c<
124
124
  ${k.join("\n\n")}`,a.forbidDrawingImages))}function b$(a,b){return Math.min(24e3,Math.max(5e3,Math.ceil(1.45*(b||a))))}function b_(a){let b=a||1200;return b>=8e3?3e5:b>=5e3?24e4:b>=3e3?18e4:12e4}async function b0(a){let b=(0,ai.V7)(a.currentContent),c=a.maxChars??Math.ceil(1.12*a.targetChars),d=a.targetChars-b;if(b>=c||d<=300)return a.currentContent;let e=(0,s.ks)((0,s.QO)(a.chapter,a.evidence),{maxChars:(0,s.Pc)(Math.ceil(a.targetChars/2),6e3,16e3)}),f=await (0,aR.rI)(["你是章节正文扩写专家。你的任务是在保持章节结构和已有内容连续性的基础上,对当前章节进行局部扩写、补充和衔接优化。",M,"返回扩写后的完整本章 Markdown,而不是整篇文档;必须保留本章一级标题,不得新增、删除或重命名一级章节。","不得删除、压缩、总结已有正文中的有效事实和已成文内容;可以在已有二级小节内部补充段落、补充三级小节、补充表格前后说明、增强段落衔接。","可以对局部语句做轻微衔接性改写,但不得改变事实含义,不得减少有效字数;不得把所有新增内容堆到章末,应优先补到对应的小节或语义位置。",N,"不得输出“已满足要求”“由于信息有限”“以下是补充”等说明性话术。",a.promptTexts].filter(Boolean).join("\n\n"),[`模板:${a.template.name}`,`章节标题:${a.chapter.title}`,a.requirement?`用户要求:${a.requirement}`:"",`当前本章有效字数约 ${b} 字,目标约 ${a.targetChars} 字,最多不超过 ${c} 字;本轮只补足必要缺口,不要过度展开。`,"扩写重点:围绕尚未充分展开的对象范围、关键事实、执行要求、资源条件、风险约束、检查确认和结果说明补充。材料没有新的精确数值时,可以扩展过程性正文,但不得编造具体数值。",a.roleContext,e?`绑定材料:
125
125
  ${e}`:"","当前章节 Markdown 分片(必须保留并覆盖全部已有内容,不得只基于末尾扩写):",b6(a.currentContent,12e3)].filter(Boolean).join("\n\n"),!1,{maxTokens:a.maxTokens??b$(b,a.targetChars),temperature:.25,signal:a.signal});if(!f||f.length<120)return a.currentContent;let g=L(w(f.startsWith("## ")?f:`## ${a.chapter.title}
126
126
 
127
- ${f}`,a.forbidDrawingImages));return!function(a,b,c,d,e=Math.ceil(1.12*d)){let f=(0,ai.V7)(a),g=(0,ai.V7)(b),h=(0,t.GQ)(c),i=Math.max(0,d-f),j=Math.min(300,Math.max(80,Math.floor(.2*i)));return!(g>e)&&(!(i>0)||!(g<f+j))&&!(g<.98*f)&&(!h||!!b.includes(h))}(a.currentContent,g,a.chapter.title,a.targetChars,c)?a.currentContent:g}function b1(a){let b=Number(process.env.DOCUMENT_SECTION_SUPPLEMENT_ATTEMPTS??2);return Math.max(1,Math.min(3,Number.isFinite(b)?Math.floor(b):2,a))}async function b2(a,b){let c;for(let d=0;d<b;d+=1){let b=await bS({...a,qualityFeedback:c});if(!b){c="上一轮未生成有效正文,请重新生成完整小节正文。";continue}let d=function(a,b){let c=b.replace(/^#{3,4}\s+.*\n+/u,"").split(/\r?\n/u).filter(a=>!/^\s*\|/u.test(a)).filter(a=>!/^\s*\|?\s*:?-{3,}:?/u.test(a)).join("\n"),d=(0,ai.V7)(c);return d<360?`正文有效内容不足:${a} 当前约 ${d} 字`:/资料未提供|信息有限|无法确定|待补充|建议扩大本地知识库检索|以下是|本文档|本小节围绕/u.test(c)?`存在空泛或说明性话术:${a}`:void 0}(a.sectionTitle,b);if(!d)return b;c=d}}async function b3(a){let b=bH(a.chapter,a.targetWords),c=new Map(b.map(a=>[a.title,a])),d=(a.forcedSections||[]).filter(b=>b.chapterTitle===a.chapter.title&&"empty"===b.reason).map(d=>({title:d.sectionTitle,targetWords:Math.max(c.get(d.sectionTitle)?.targetWords||0,Math.floor(a.targetWords/Math.max(1,b.length||a.forcedSections?.length||1))),forced:!0,reason:d.reason})),e=[...b];for(let a of d)e.some(b=>b.title===a.title)||e.push(a);if(e.length<1)return a.content;let f=a.content,g=new Set(d.map(a=>a.title)),h=e.map(a=>{let b=a.title.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),c=f.match(RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${b}\\s*\\n([\\s\\S]*?)(?=^#{3,4}\\s+|^##\\s+|$)`,"mu")),e=(0,ai.V7)(c?.[1]||""),h=g.has(a.title);return{...a,currentWords:e,priority:h?0:e<80?1:2,forced:h,reason:d.find(b=>b.title===a.title)?.reason}}).filter(a=>a.forced||a.currentWords<Math.max(360,Math.floor(.7*a.targetWords))).sort((a,b)=>a.priority-b.priority||a.currentWords-b.currentWords),i=Number(process.env.DOCUMENT_SECTION_REPAIR_MAX_TARGETS||0),j=i>0?h.slice(0,i):h,k=new Map,l=Math.max(1,j.length||1);for(let b=0;b<j.length;b+=l){let c=j.slice(b,b+l),d=b1(j.length),e=await Promise.all(c.map(async b=>{try{let c=Math.max(0,b.targetWords-b.currentWords),e=/概况|范围|工期|质量|安全|危大|资源|材料|设备|验收|清单|图纸|设计/u.test(b.title),f=e?.8:.65,g=e?.5:.35,h=Math.max(280,Math.ceil(b.targetWords*f)),i=Math.max(220,Math.ceil(b.targetWords*g)),j=Math.max(h-b.currentWords,i),k=Math.max(b.forced?j:c,Math.ceil(.35*b.targetWords));return await b2({...a,evidence:a.evidence,sectionTitle:b.title,targetWords:k,maxWords:Math.ceil(1.25*k),timeoutMs:Math.max(75e3,Math.min(15e4,Math.ceil(.55*b_(k))))},d)}catch{return}}));c.forEach((a,b)=>{k.set(a.title,e[b])})}for(let a of j){let b=k.get(a.title);b&&(f=function(a,b,c){let d=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=RegExp(`(^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${d}\\s*\\n)([\\s\\S]*?)(?=^#{3,4}\\s+|^##\\s+|$)`,"mu"),f=c.trim().replace(/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]+\n+/u,"").trim();return e.test(a)?a.replace(e,(a,b,c)=>{let d=function(a,b){let c=a.trim(),d=b.trim();if(!d)return"";if(/【本小节生成未达标,需重新生成】/u.test(c)||!c)return d;if(c.includes(d))return"";if(d.includes(c))return d.slice(d.indexOf(c)+c.length).trim();let e=c.slice(-240),f=e.length>=80?d.indexOf(e):-1;return f>=0?d.slice(f+e.length).trim():d}(c,f);return/【本小节生成未达标,需重新生成】/u.test(c)?d?`${b}${d}
127
+ ${f}`,a.forbidDrawingImages));return!function(a,b,c,d,e=Math.ceil(1.12*d)){let f=(0,ai.V7)(a),g=(0,ai.V7)(b),h=(0,t.GQ)(c),i=Math.max(0,d-f),j=Math.min(300,Math.max(80,Math.floor(.2*i)));return!(g>e)&&(!(i>0)||!(g<f+j))&&!(g<.98*f)&&(!h||!!b.includes(h))}(a.currentContent,g,a.chapter.title,a.targetChars,c)?a.currentContent:g}function b1(a){let b=Number(process.env.DOCUMENT_SECTION_SUPPLEMENT_ATTEMPTS??2);return Math.max(1,Math.min(3,Number.isFinite(b)?Math.floor(b):2,a))}async function b2(a,b){let c;for(let d=0;d<b;d+=1){let b=await bS({...a,qualityFeedback:c});if(!b){c="上一轮未生成有效正文,请重新生成完整小节正文。";continue}let d=function(a,b){let c=b.replace(/^#{3,4}\s+.*\n+/u,"").split(/\r?\n/u).filter(a=>!/^\s*\|/u.test(a)).filter(a=>!/^\s*\|?\s*:?-{3,}:?/u.test(a)).join("\n"),d=(0,ai.V7)(c);return d<360?`正文有效内容不足:${a} 当前约 ${d} 字`:/资料未提供|信息有限|无法确定|待补充|建议扩大本地知识库检索|以下是|本文档|本小节围绕/u.test(c)?`存在空泛或说明性话术:${a}`:void 0}(a.sectionTitle,b);if(!d)return b;c=d}}async function b3(a){let b=bH(a.chapter,a.targetWords),c=new Map(b.map(a=>[a.title,a])),d=(a.forcedSections||[]).filter(b=>b.chapterTitle===a.chapter.title&&("empty"===b.reason||"missing_planned_section"===b.reason)).map(d=>({title:d.sectionTitle,targetWords:Math.max(c.get(d.sectionTitle)?.targetWords||0,Math.floor(a.targetWords/Math.max(1,b.length||a.forcedSections?.length||1))),forced:!0,reason:d.reason})),e=[...b];for(let a of d)e.some(b=>b.title===a.title)||e.push(a);if(e.length<1)return a.content;let f=a.content,g=new Set(d.map(a=>a.title)),h=e.map(a=>{let b=a.title.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),c=f.match(RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${b}\\s*\\n([\\s\\S]*?)(?=^#{3,4}\\s+|^##\\s+|$)`,"mu")),e=(0,ai.V7)(c?.[1]||""),h=g.has(a.title);return{...a,currentWords:e,priority:h?0:e<80?1:2,forced:h,reason:d.find(b=>b.title===a.title)?.reason}}).filter(a=>a.forced||a.currentWords<Math.max(360,Math.floor(.7*a.targetWords))).sort((a,b)=>a.priority-b.priority||a.currentWords-b.currentWords),i=Number(process.env.DOCUMENT_SECTION_REPAIR_MAX_TARGETS||0),j=i>0?h.slice(0,i):h,k=new Map,l=Number(process.env.DOCUMENT_SECTION_SUPPLEMENT_CONCURRENCY||2),m=Math.max(1,Math.min(j.length||1,Number.isFinite(l)?Math.floor(l):2));for(let b=0;b<j.length;b+=m){let c=j.slice(b,b+m),d=b1(j.length),e=await Promise.all(c.map(async b=>{try{let c=Math.max(0,b.targetWords-b.currentWords),e=/概况|范围|工期|质量|安全|危大|资源|材料|设备|验收|清单|图纸|设计/u.test(b.title),f=e?.8:.65,g=e?.5:.35,h=Math.max(280,Math.ceil(b.targetWords*f)),i=Math.max(220,Math.ceil(b.targetWords*g)),j=Math.max(h-b.currentWords,i),k=Math.max(b.forced?j:c,Math.ceil(.35*b.targetWords));return await b2({...a,evidence:a.evidence,sectionTitle:b.title,targetWords:k,maxWords:Math.ceil(1.25*k),timeoutMs:Math.max(75e3,Math.min(15e4,Math.ceil(.55*b_(k))))},d)}catch{return}}));c.forEach((a,b)=>{k.set(a.title,e[b])})}for(let a of j){let b=k.get(a.title);b&&(f=function(a,b,c){let d=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=RegExp(`(^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${d}\\s*\\n)([\\s\\S]*?)(?=^#{3,4}\\s+|^##\\s+|$)`,"mu"),f=c.trim().replace(/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]+\n+/u,"").trim();return e.test(a)?a.replace(e,(a,b,c)=>{let d=function(a,b){let c=a.trim(),d=b.trim();if(!d)return"";if(/【本小节生成未达标,需重新生成】/u.test(c)||!c)return d;if(c.includes(d))return"";if(d.includes(c))return d.slice(d.indexOf(c)+c.length).trim();let e=c.slice(-240),f=e.length>=80?d.indexOf(e):-1;return f>=0?d.slice(f+e.length).trim():d}(c,f);return/【本小节生成未达标,需重新生成】/u.test(c)?d?`${b}${d}
128
128
 
129
129
  `:`${b}${c.trim()}
130
130
 
@@ -167,7 +167,7 @@ ${e}`,source:function(a){let b=a.toLowerCase();return b.includes(".gov.cn")||b.i
167
167
  ${a.content}`).join("\n\n");return/进度|工期/u.test(d)&&/资源|材料|设备|劳动力/u.test(d)&&!/保障|投入|调配|进场|计划/u.test(c.get(a.find(a=>/资源|材料|设备|劳动力/u.test(a.title))?.title||"")||"")&&b.push({level:"warning",message:"章节逻辑依赖不足:进度章节与资源章节之间缺少明显支撑关系",suggestion:"请在资源章节补充与工期目标相匹配的劳动力、材料、设备投入和调配计划。"}),/质量/u.test(d)&&/施工|工艺|技术/u.test(d)&&!/验收|复验|控制点|交底|隐蔽/u.test(d)&&b.push({level:"warning",message:"章节逻辑依赖不足:质量章节未明显支撑施工工艺控制",suggestion:"请在施工技术和质量章节之间补齐工艺控制点、验收要求和整改复验闭环。"}),/安全|文明|风险/u.test(d)&&!/应急|检查|整改|巡查|培训|演练/u.test(d)&&b.push({level:"warning",message:"章节逻辑依赖不足:安全章节缺少检查整改和应急支撑",suggestion:"请补齐风险识别、检查整改、应急响应和演练闭环。"}),b}function cB(a){return a.replace(/[\s,,.。::;;||()()《》<>【】"“”'‘’]/gu,"").toLowerCase()}let cC=[{label:"工程名称",factGroups:["project"],patterns:[/工程名称\s*[::]\s*([^\n|]+)/u],locations:"封面、工程概况、页眉页脚、专项方案、表格标题"},{label:"建设地点",factGroups:["project"],patterns:[/建设地点\s*[::]\s*([^\n|]+)/u,/工程地点\s*[::]\s*([^\n|]+)/u],locations:"工程概况、周边环境、扬尘噪声、交通导改、属地化措施"},{label:"总工期",factGroups:["schedule"],patterns:[/总工期\s*[::]\s*([^\n|]+)/u,/计划工期\s*[::]\s*([^\n|]+)/u,/工期目标\s*[::]\s*([^\n|]+)/u],locations:"工程概况、进度计划、横道图、资源计划、纠偏措施"},{label:"建设规模",factGroups:["project","preciseFacts"],patterns:[/建设规模\s*[::]\s*([^\n|]+)/u,/建筑面积\s*[::]\s*([^\n|]+)/u,/道路长度\s*[::]\s*([^\n|]+)/u,/管线长度\s*[::]\s*([^\n|]+)/u],locations:"工程概况、工程量表、施工部署、资源配置"},{label:"机械数量型号",factGroups:["resources"],patterns:[/([\p{Script=Han}A-Za-z0-9]+(?:机|吊|泵|车))\s*[^\n|]{0,12}(\d+)\s*(台|套|辆)/u],locations:"机械表、平面布置、进度保障、安全专项方案"},{label:"劳动力人数",factGroups:["resources"],patterns:[/劳动力\s*[^\n|]{0,12}(\d+)\s*人/u,/班组\s*[^\n|]{0,12}(\d+)\s*人/u],locations:"劳动力计划、进度节点、抢工方案、工资保障台账"},{label:"危大工程清单",factGroups:["safety","preciseFacts"],patterns:[/危大工程\s*[::]\s*([^\n|]+)/u,/深基坑|高支模|起重吊装|脚手架/u],locations:"安全章节、专项方案、审批表、应急预案"},{label:"环保监测指标",factGroups:["quality","safety","preciseFacts"],patterns:[/PM10|PM2\.5|TSP|噪声|扬尘在线监测/u],locations:"文明施工、扬尘噪声、智慧工地、应急联动"}];function cD(a){return a.replace(/[\s,。;;::|]/gu,"").trim()}function cE(a,b){let c=[];for(let d of b){let b=a[d];if(Array.isArray(b))for(let a of b)a&&"object"==typeof a&&"value"in a&&"string"==typeof a.value&&c.push(a.value)}return c.map(cD).filter(Boolean)}function cF(a){return[...a.promptDocumentRules?.forbidToc?[]:[...(0,aj.gN)(a.markdown),...(0,aj.f8)(a.markdown)],...(0,aj.K1)(a.markdown),...(0,aj.Fv)(a.markdown),...(0,aj.k0)(a.markdown),...(0,aj.NS)(a.markdown),...(0,aj.qK)(a.markdown,a.chapters),...(0,aj.ji)(a.chapters),...(0,aj.i0)(a.chapters),...(0,aj.ST)(a.chapters),...(0,aj.xX)(a.chapters),...(0,aj.qm)(a.markdown,a.factsModel),...cy(a.markdown,a.factsModel),...cz(a.markdown),...function(a){let b=[];for(let c of a){let a=as.filter(a=>c.content.includes(a));a.length>0&&b.push({level:"warning",message:`${c.title} 存在施工组织设计空泛套话:${[...new Set(a)].slice(0,8).join("、")}`,suggestion:"请按“责任岗位+执行动作+量化标准+检查频次+整改时限+复查销项”重写相关措施。"})}return b}(a.chapters),...function(a){let b=[];for(let c of a){let a=`${c.title} ${(c.sections||[]).join(" ")}`;for(let d of at){if(!d.pattern.test(a))continue;let e=d.required.filter(a=>!c.content.includes(a));e.length>=Math.ceil(d.required.length/2)&&b.push({level:"warning",message:`${c.title} 缺少${d.label}关键链条:${e.join("、")}`,suggestion:d.prompt})}}return b}(a.chapters),...function(a){let b=aw(`${a.markdown} ${a.factsModel.project.map(a=>a.value).join(" ")} ${a.factsModel.preciseFacts.map(a=>a.value).join(" ")}`),c=[];for(let d of Object.values(au)){let e=d.chain.filter(a=>b.includes(aw(a)));if(!(RegExp(d.label,"u").test(a.markdown)||e.length>=3))continue;let f=d.forbidden.filter(a=>b.includes(aw(a)));f.length>=2&&c.push({level:"warning",message:`疑似${d.label}内容混入不匹配工序:${f.join("、")}`,suggestion:d.prompt}),e.length<Math.min(3,d.chain.length)&&c.push({level:"warning",message:`${d.label}工序链覆盖不足:仅识别到 ${e.join("、")||"未识别到关键工序"}`,suggestion:d.prompt})}return c}({markdown:a.markdown,factsModel:a.factsModel,chapters:a.chapters}),...function(a,b){let c=[];if(!/施工组织设计|施工组织|施组|质量|安全|文明施工/u.test(a))return c;for(let d of cC){let e=cE(b,d.factGroups),f=(function(a,b){let c=[];for(let d of b){let b=new RegExp(d.source,d.flags.includes("g")?d.flags:`${d.flags}g`);for(let d of a.matchAll(b)){let a=cD(d[1]||d[0]||"");a.length>=2&&a.length<=80&&c.push(a)}}return[...new Set(c)]})(a,d.patterns).filter(a=>!function(a,b){return 0===b.length||b.some(b=>b.includes(a)||a.includes(b)||a.length>=4&&b.includes(a.slice(0,4)))}(a,e)).slice(0,5);f.length>0&&c.push({level:"warning",message:`施组数据一致性风险:${d.label} 可能与项目图谱/事实不一致(${f.join("、")})`,suggestion:`请核对${d.label}在${d.locations}中的表述,统一以招标文件、项目图谱和可信事实为准。`})}return c}(a.markdown,a.factsModel),...function(a,b){let c=[],d=cE(b,["project","schedule","resources","quality","safety","preciseFacts"]);if(0===d.length)return c;for(let b of a)/概况|进度|资源|质量|安全|文明|工资|应急/u.test(`${b.title} ${(b.sections||[]).join(" ")}`)&&(d.some(a=>a.length>=3&&b.content.includes(a.slice(0,Math.min(10,a.length))))||c.push({level:"warning",message:`${b.title} 缺少可识别的项目图谱事实支撑`,suggestion:"请至少引用工程名称、工期、工程量、资源、风险、质量安全目标等项目专属事实之一,避免纯模板化。"}));return c}(a.chapters,a.factsModel),...function(a){let b=[];for(let c of a){let a=`${c.title} ${(c.sections||[]).join(" ")} ${c.content}`;for(let d of av)d.pattern.test(a)&&!c.content.includes(d.title)&&b.push({level:"warning",message:`${c.title} 可补充隐藏高分模块:${d.title}`,suggestion:d.prompt})}return b}(a.chapters),...cA(a.chapters),...function(a,b,c){let d={factuality:2*!(0,aj.vY)(a,c).some(a=>"error"===a.level),structure:b.length>0&&b.every(b=>a.includes(b.title)&&(0,ai.V7)(b.content)>=600)?2:1,depth:0===(0,aj.i0)(b).length?2:1,executable:0===cA(b).length?2:1,evidence:0===cy(a,c).length?2:1},e=d.factuality+d.structure+d.depth+d.executable+d.evidence;return[{level:"warning",message:`文档交付评分报告:总分 ${e}/10,事实${d.factuality},结构${d.structure},专业${d.depth},可执行${d.executable},证据${d.evidence}`,suggestion:e>=8?"可交付,但建议继续优化证据使用覆盖率和章节依赖链路。":"建议优先修复低分维度后再导出。"}]}(a.markdown,a.chapters,a.factsModel),...(0,aj.vY)(a.markdown,a.factsModel),...(0,aj.iC)(a.markdown),...(0,aj.BV)(a.markdown),...S(a.markdown),...(0,aj.Ty)(a.chapters),...(0,aj.N1)(a.markdown,a.factsModel),...(0,aj.S2)(a.markdown,a.chapters,a.factsModel),...function(a,b={}){let c=a.filter(a=>!a.placed);if(0===c.length)return[];let d=a.length,e=(d-c.length)/d,f=[];return e<.3?f.push({level:"error",message:`BOQ 清单行级落位严重不足:${d-c.length}/${d} 行(${Math.round(100*e)}%)`,suggestion:`未落位清单项示例:${c.slice(0,5).map(a=>`${a.itemName} ${a.quantity}${a.unit}`).join(";")}`}):e<.6&&f.push({level:"warning",message:`BOQ 清单行级落位不足:${d-c.length}/${d} 行(${Math.round(100*e)}%)`,suggestion:`建议补充落位:${c.slice(0,5).map(a=>a.itemName).join("、")}`}),f}(function(a,b){let c=b.tables||[],d=[],e=cB(a);for(let a of c){let b=a.headers.map(a=>a.replace(/\s+/gu,"").toLowerCase()),c=b.findIndex(a=>/项目名称|名称|清单项|分部分项|项目特征|工程内容|材料名称|设备名称/u.test(a)),f=b.findIndex(a=>/编码|编号|序号|项目编码/u.test(a)),g=b.findIndex(a=>/数量|工程量/u.test(a)),h=b.findIndex(a=>/单位/u.test(a));for(let b of a.rows){let i=c>=0&&b[c]||"",j=f>=0&&b[f]||"",k=g>=0&&b[g]||"",l=h>=0&&b[h]||"";if(!i&&!j)continue;let m=cB(i),n=cB(j),o=m.length>=3&&e.includes(m.slice(0,12))||n.length>=3&&e.includes(n.slice(0,8));d.push({itemCode:j.slice(0,50),itemName:i.slice(0,200),quantity:k.slice(0,50),unit:l.slice(0,20),sourceFile:a.sourceFile||"",placed:o})}}return d.sort((a,b)=>a.placed===b.placed?0:a.placed?1:-1)}(a.markdown,a.factsModel)),...(0,aj.yd)(a.markdown,a.factsModel),...function(a){let b=[];return cj.test(a)&&b.push({level:"warning",message:"正文包含联网增强过程性表述",suggestion:"请删除联网检索、网页资料、搜索结果等过程性话术,改为正式交付语言。"}),b}(a.markdown),...(0,aj.bM)(a.markdown),...(0,aj.M$)(a.markdown,a.promptBindings),...(0,aj.AC)(a.markdown,a.chapters),...(0,aj.mR)(a.markdown,a.template),...ae(a.markdown,a.template),...ad(a.markdown,a.promptDocumentRules)]}let cG={project:"项目基础事实",schedule:"工期与节点",quality:"质量目标与验收",safety:"安全文明要求",resources:"资源投入依据",quantities:"清单/图纸/工程量事实",rules:"规范规则与验收要求"};function cH(a){return 0===a.length?100:Math.round(a.reduce((a,b)=>a+b,0)/a.length)}function cI(a){let b=Math.max(0,100-a.issues.reduce((a,b)=>a+("error"===b.level?10:"warning"===b.level?4:1),0)),c=cH(a.chapterCoverage.map(a=>a.score)),d=a.factTraces.filter(a=>"used"===a.status).length,e={factuality:Math.min(100,Math.round(.65*(a.factTraces.length?Math.round(d/a.factTraces.length*100):100)+.35*b)),structure:Math.min(100,Math.round(.7*(a.chapters.length>0&&a.chapters.every(b=>a.markdown.includes(b.title)&&(0,ai.V7)(b.content)>=600)?95:78)+.3*c)),professionalDepth:c,executable:cH(a.chapterCoverage.map(a=>a.checks.some(a=>"professional"===a.key&&a.passed)?95:75)),evidenceCoverage:a.knowledgeCoverage.score,consistency:b},f=Math.round(.22*e.factuality+.16*e.structure+.18*e.professionalDepth+.16*e.executable+.18*e.evidenceCoverage+.1*e.consistency),g=a.issues.filter(a=>"error"===a.level).length,h=Math.max(0,Math.min(99,Math.round(f-8*g))),i=a.knowledgeCoverage.score>=95?95:85;return{overall:f,deliveryProbability:h,target:i,passed:h>=i&&0===g,scores:e,summary:`交付置信度 ${h}% / 目标 ${i}%,综合评分 ${f}/100`,actions:h>=i&&0===g?["已达到当前质量目标,建议保持事实口径和导出前复核。"]:["系统需优先修复阻断问题、扩大本地知识库检索、补抽结构化事实,并将未落位事实写入对应章节。","对低分章节执行结构补齐、专业控制点补写、跨章一致性复核和证据引用覆盖修复。"]}}let cJ={version:"professional-document-workflow-v3",rules:["complete-local-knowledge-assumption","knowledge-coverage-recovery","fact-trace-placement","chapter-coverage-gate","structured-quality-report","post-repair-verification"]},cK=[{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 cL(a){return/^(见|详见|参见|按|以).{0,30}(招标公告|招标文件|投标人须知|前附表|合同|附件|图纸|清单|约定|规定|执行)/u.test(a)||/见招标公告|见投标人须知前附表|详见|按.*执行/u.test(a)}function cM(a,b){let c=aW(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 噪声")),cK.some(a=>a.key!==b.key&&a.aliases.some(a=>c.includes(a)))&&(e-=45,d.push("包含其他字段名,疑似字段串位")),cL(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(cL(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 cN(a){return function(a,b=cK){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 cK.find(c=>c.key===a.fieldId||c.aliases.some(a=>b.includes(a)))}(c);if(!a)continue;let d=(0,ay.lG)(c.value);b.push(cM({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=cK.find(a=>a.aliases.some(a=>e.includes(a))||a.label===e);!h||!f||/内容|参数|资料未明确|系统暂未确认|暂未从知识库确认/u.test(f)||c.push(cM({fieldKey:h.key,label:h.label,value:f,sourceType:"generated_markdown",sourceName:g||b},h))}return c}(a.markdown||"")])}function cO(a){return({user:100,contract:90,tender:85,boq:75,drawing:70,standard:60,evidence:55,structured_fact:50,projectGraph:40,generated_markdown:30,derived:20,unknown:10})[a]}function cP(a){let b=e.join(process.env.HOME||process.cwd(),".customize-agent","cache","document-workflow",(0,ay.c6)(a||"default"));return aO.mkdirSync(b,{recursive:!0}),b}function cQ(a,b){return 0>=(0,ai.V7)(a.content)?"failed":"completed"}let cR=["项目名称 项目编号 招标人 项目概况与招标范围 建设地点 建设规模 计划工期 质量标准 合同估算价","计划工期 合同工期 总工期 日历天","合同估算价 合同估算价格 投资估算 最高投标限价 招标控制价","质量标准 质量目标 合格","建设地点 建设规模 招标范围"];function cS(a){let b=aW(a),c=0;return/项目名称|工程名称|招标项目名称|项目编号|招标项目编号|招标人|建设单位|发包人/u.test(b)&&(c+=4),/计划工期|合同工期|总工期|\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年)/u.test(b)&&(c+=6),/合同估算价|投资估算|最高投标限价|招标控制价|\d+(?:\.\d+)?\s*(?:万元|元)/u.test(b)&&(c+=5),/质量标准|质量目标|合格|优良/u.test(b)&&(c+=4),/建设地点|建设规模|招标范围|项目概况与招标范围/u.test(b)&&(c+=4),/招标文件|招标公告|投标人须知|前附表|合同协议/u.test(b)&&(c+=2),c}async function cT(a){let b=[],c=new Set(a.scopedFilePaths),d=await Promise.all(cR.map(async b=>((0,ay.Te)(a.signal),(await a.manager.search(a.projectRoot,b,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:10,weights:{keyword:.65,vector:.25,rewrite:.8,hybridBonus:.2},generationMode:!1})).results.filter(a=>c.has(a.filePath)&&cS(`${a.sectionTitle||""}
168
168
  ${a.content}`)>0).map(b=>({chapterId:"project-basic",filePath:b.filePath,score:Math.max(b.score,1)+cS(`${b.sectionTitle||""}
169
169
  ${b.content}`),content:b.content,roleId:a.fileRoleByPath.get(b.filePath),processingType:a.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"pinned-evidence"})))));for(let c of(b.push(...d.flat()),a.scopedFilePaths)){(0,ay.Te)(a.signal);let d=a.project.getFileDetail?.(c,{maxChunkContentChars:12e3});if(d?.chunks?.length)for(let e of d.chunks){let f=cS(`${e.sectionTitle||""}
170
- ${e.content||""}`);if(f<=0)continue;let g=d.file?.relativePath||c;b.push({chapterId:"project-basic",filePath:g,score:1+f,content:e.content,roleId:a.fileRoleByPath.get(g),processingType:a.fileProcessingByPath.get(g),sectionTitle:e.sectionTitle,source:"pinned-evidence"})}}let e=new Set;return b.sort((a,b)=>b.score-a.score).filter(a=>{let b=`${a.filePath}|${a.sectionTitle||""}|${aW(a.content).slice(0,180)}`;return!e.has(b)&&(e.add(b),!0)}).slice(0,24)}function cU(a,b){let c=Q(a);return(0,aj.yw)(a,[{title:b.title,content:a,sections:c}]).filter(a=>"empty"===a.reason)}function cV(a){return a.replace(/^\s*本表依据项目图谱[^\n。]*[。.]\s*$/gmu,"").replace(/^\s*本表依据(?:招标文件|工程量清单|施工区段|质量目标|计划工期|项目图谱|危险源辨识|材料设备清单|现场条件|图纸资料|图纸设计说明)[^\n。]*[。.]\s*$/gmu,"").replace(/^\s*表中事项应纳入[^\n。]*[。.]\s*$/gmu,"").replace(/^\s*正式输出的表格\/清单必须形成[^\n。]*[。.]\s*$/gmu,"").replace(/\n{3,}/gu,"\n\n").trim()}function cW(a){return a.filter(a=>/项目名称|工程名称|项目编号|招标项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`))}function cX(a,b){if(0===cW(b).length)return a;let c=a,d=a=>cW(b).filter(b=>a.some(a=>a.test(`${b.key||""}${b.fieldName||""}${b.fieldId||""}`))).filter(a=>aY(a.fieldId,a.value)).sort((a,b)=>{let c=(0,ay.lG)(a.value),d=(0,ay.lG)(b.value),e=3*!!a.sourceFile?.includes("招标文件")+(a.sourceRef?.sectionTitle&&/项目概况|招标公告|前附表|招标范围/u.test(a.sourceRef.sectionTitle)?2:0)-Math.floor(c.length/80);return 3*!!b.sourceFile?.includes("招标文件")+(b.sourceRef?.sectionTitle&&/项目概况|招标公告|前附表|招标范围/u.test(b.sourceRef.sectionTitle)?2:0)-Math.floor(d.length/80)-e})[0]?.value;for(let a of[{label:/计划工期|合同工期|周期要求/u,value:d([/计划工期|合同工期|周期要求|schedule_requirement/u])},{label:/质量标准|质量目标/u,value:d([/质量标准|quality_standard/u])},{label:/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u,value:d([/合同估算|投资估算|最高投标限价|招标控制价|project_investment_estimate/u])},{label:/建设地点/u,value:d([/建设地点|project_location/u])},{label:/建设规模/u,value:d([/建设规模|project_scale/u])}]){let b=cY((0,ay.lG)(a.value||""));b&&(c=c.replace(RegExp(`(${a.label.source})(\\s*[|::]\\s*)(?:资料未明确|系统暂未从知识库确认)[^|\\n。;;]*`,"gu"),`$1$2${b}`))}return c}function cY(a){return aW(a).replace(/[。;;]$/u,"").trim()}function cZ(a,b="",c=b){let d=function(a){let b=new Map;for(let c of a.split(/\r?\n/u)){if(!/^\|.*\|\s*$/u.test(c)||/^\|\s*:?-{3,}:?/u.test(c))continue;let a=c.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.replace(/\*\*/gu,"").trim());if(a.length<2)continue;let d="序号"===a[0]&&a.length>=3?a[1]:a[0],e="序号"===a[0]&&a.length>=3?a[2]:a[1],f="序号"===a[0]&&a.length>=4?a[3]:a[2],g=d.replace(/\/|:|:/gu,"").trim();if(!/项目名称|工程名称|项目编号|招标项目编号|招标人|项目业主|建设单位|发包人|建设地点|建设规模|施工范围|招标范围|计划工期|合同工期|质量标准|合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(g))continue;let h=/计划工期|合同工期/u.test(g)?"schedule_requirement":/质量标准/u.test(g)?"quality_standard":/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(g)?"project_investment_estimate":/招标人|项目业主|建设单位|发包人/u.test(g)?"owner":/建设地点/u.test(g)?"project_location":/项目编号|招标项目编号/u.test(g)?"project_code":void 0;!(!e||/内容|参数|资料未明确|系统暂未从知识库确认/u.test(e))&&aY(h||"project_name",e)&&b.set(g,[cY(e),cY(f||"项目资料")||"项目资料"])}return b}(b),e=cN({facts:a,markdown:c}),f=(a,b)=>{let c=e.get(a);return c?[c.value,c.source||"项目资料"]:function(a,b){for(let[c,d]of a.entries())if(b.some(a=>a.test(c)))return d}(d,b)||["",""]};return[["项目名称",...f("project_name",[/项目名称|工程名称|project_name/u])],["项目编号",...f("project_code",[/项目编号|招标项目编号|project_code/u])],["招标人",...f("owner",[/招标人|项目业主|建设单位|发包人|owner/u])],["建设地点",...f("project_location",[/建设地点|project_location/u])],["建设规模",...f("project_scale",[/建设规模|project_scale/u])],["计划工期",...f("schedule_requirement",[/计划工期|合同工期|周期要求|schedule_requirement/u])],["质量标准",...f("quality_standard",[/质量标准|quality_standard/u])],["合同估算价",...f("project_investment_estimate",[/合同估算|投资估算|最高投标限价|招标控制价|project_investment_estimate/u])]].map(([a,b,c])=>[a,b||"系统暂未从知识库确认",b?c||"项目资料":"待系统补抽确认"])}function c$(a,b="",c=b){return["**项目基本信息表**","","| 信息项 | 内容 |","|---|---|",...cZ(a,b,c).map(a=>`| ${a[0]} | ${a[1]} |`)].join("\n")}function c_(a){return/^\s*\|?\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a.trim())}function c0(a){let b=a.trim();if(!b||/^#{1,6}\s+/u.test(b)||c_(b))return!1;let c=(b.match(/\|/gu)||[]).length;return c>=2||c>=1&&/^\s*\|/u.test(b)||c>=1&&/\|\s*$/u.test(b)}function c1(a){return a.trim().replace(/^\|/u,"").replace(/\|$/u,"").trim().split("|").map(a=>a.trim())}function c2(a,b){let c=a.slice(0,b);for(;c.length<b;)c.push("");return`| ${c.join(" | ")} |`}function c3(a){let b=a.replace(/\r?\n/gu,"\n").split("\n"),c=[];for(let a=0;a<b.length;){let d=b[a]||"",e=b[a+1]?.trim()===""?a+2:a+1,f=b[e]||"";if(c0(d)&&c_(f)){for(c.push(d),e!==a+1&&c.push(b[a+1]||""),c.push(f),a=e+1;a<b.length&&c0(b[a]||"");)c.push(b[a]||""),a+=1;continue}if(!c0(d)){c.push(d),a+=1;continue}let g=[],h=a;for(;h<b.length&&c0(b[h]||"");)g.push(b[h]||""),h+=1;let i=g.map(a=>c1(a)),j=i.map(a=>a.length),k=j[0]||0,l=/^(?:项目名称|工程名称|项目编号|招标人|建设单位|建设地点|建设规模|计划工期|质量标准|合同估算价|招标范围)$/u;if(g.length<2||k<2||j.some(a=>a!==k)||i.some(a=>l.test(a[0]||""))){c.push(...g),a=h;continue}for(let a of(c.length>0&&c[c.length-1]?.trim()&&c.push(""),c.push(c2(function(a){if(2===a)return["信息项","内容"];let b=["项目","内容","备注","说明"];return Array.from({length:a},(a,c)=>b[c]||`列${c+1}`)}(k),k)),c.push(c2(Array.from({length:k},()=>"---"),k)),g))c.push(c2(c1(a),k));(a=h)<b.length&&b[a]?.trim()&&c.push("")}return c.join("\n").replace(/\n{3,}/gu,"\n\n")}function c4(a){let b=a.replace(/\r?\n/gu,"\n").split("\n"),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>/^\s*\|.*\|\s*$/u.test(a),f=a=>/^\s*\|\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a),g=a=>`| ${a.join(" | ")} |`;for(let a=0;a<b.length;){let h=b[a]||"",i=b[a+1]||"";if(!e(h)||!f(i)){c.push(h),a+=1;continue}let j=d(h),k=j.map((a,b)=>/^(?:资料来源|资料来源\/(?:说明|证明)|来源|证明)$/u.test(a)?b:-1).filter(a=>a>=0);if(0===k.length){c.push(h),a+=1;continue}let l=a=>a.filter((a,b)=>!k.includes(b));for(c.push(g(l(j))),c.push(g(l(d(i)).map(a=>a||"---"))),a+=2;a<b.length&&e(b[a]||"");)c.push(g(l(d(b[a]||"")))),a+=1}return c.join("\n").replace(/资料来源\/(?:说明|证明)/gu,"")}function c5(a){let b=[/^项目名称$/u,/^工程名称$/u,/^项目编号$/u,/^招标项目编号$/u,/^招标人$/u,/^项目业主$/u,/^建设单位$/u,/^发包人$/u,/^建设地点$/u,/^实施地点$/u,/^建设规模$/u,/^工程规模$/u,/^计划工期$/u,/^合同工期$/u,/^总工期$/u,/^质量标准$/u,/^质量目标$/u,/^合同估算价$/u,/^投资估算$/u,/^最高投标限价$/u,/^招标控制价$/u],c=a.replace(/\r?\n/gu,"\n").split("\n"),d=[],e=!1,f=a=>c1(a).map(a=>a.replace(/\*\*/gu,"").trim()),g=a=>b.some(b=>b.test(a)),h=a=>{let b=a.slice(2).map(f).filter(a=>a.length>=2).map(a=>a[0]||""),c=b.filter(g).length;return c>=3&&c>=Math.ceil(.45*b.length)};for(let a=0;a<c.length;){let b=c[a]||"",f=c[a+1]||"";if(/(?:\*\*[^\n]*项目基本信息表[^\n]*\*\*|####\s+[^\n]*项目基本信息表[^\n]*|###\s+[^\n]*项目基本信息表[^\n]*)/u.test(b)){let f=[b];for(a+=1;a<c.length&&!(c0(c[a]||"")&&c_(c[a+1]||""))&&""===(c[a]||"").trim();)f.push(c[a]||""),a+=1;if(a<c.length&&c0(c[a]||"")&&c_(c[a+1]||""))for(f.push(c[a]||"",c[a+1]||""),a+=2;a<c.length&&c0(c[a]||"");)f.push(c[a]||""),a+=1;e||(e=!0,d.push(...f));continue}if(/^###\s+(?:\d+\.\d+\s+)?(?:项目基本信息|工程概况|项目概况)\s*$/u.test(b)){let f=[b];for(a+=1;a<c.length&&!(c0(c[a]||"")&&c_(c[a+1]||""))&&!/^###\s+/u.test(c[a]||"");)f.push(c[a]||""),a+=1;if(a<c.length&&c0(c[a]||"")&&c_(c[a+1]||"")){let g=[c[a]||"",c[a+1]||""];for(a+=2;a<c.length&&c0(c[a]||"");)g.push(c[a]||""),a+=1;if(h(g)){if(e){let a=f.filter(a=>a.trim()&&!/^###\s+/u.test(a));a.length&&d.push(b,...a)}else e=!0,d.push(...f,...g);continue}d.push(...f,...g);continue}d.push(...f);continue}if(c0(b)&&c_(f)){let g=[b,f];for(a+=2;a<c.length&&c0(c[a]||"");)g.push(c[a]||""),a+=1;if(h(g)){e||(e=!0,d.push(...g));continue}d.push(...g);continue}d.push(b),a+=1}return d.join("\n").replace(/\n{3,}/gu,"\n\n").replace(/\n{1,2}\|\s*信息项\s*\|\s*内容\s*\|\s*\n+(?:该小节围绕[^\n]*\n+)+\|\s*:?-{3,}:?\s*\|\s*:?-{3,}:?\s*\|\s*/gu,"\n\n")}function c6(a,b){if(!/项目基本信息|项目概况|工程概况|招标范围/u.test(a))return c5(c3(c4(a)));if(!/\|\s*信息项\s*\|\s*内容\s*\|/u.test(a)&&cW(b).length>0){let c=/^(###\s+(?:\d+\.\d+\s+)?[^\n]*(?:项目概况|工程概况|项目基本信息|招标范围)[^\n]*\n)/mu.exec(a);if(c?.index||c?.index===0){let d=c.index+c[0].length,e=`${c$(b,"",a)}
170
+ ${e.content||""}`);if(f<=0)continue;let g=d.file?.relativePath||c;b.push({chapterId:"project-basic",filePath:g,score:1+f,content:e.content,roleId:a.fileRoleByPath.get(g),processingType:a.fileProcessingByPath.get(g),sectionTitle:e.sectionTitle,source:"pinned-evidence"})}}let e=new Set;return b.sort((a,b)=>b.score-a.score).filter(a=>{let b=`${a.filePath}|${a.sectionTitle||""}|${aW(a.content).slice(0,180)}`;return!e.has(b)&&(e.add(b),!0)}).slice(0,24)}function cU(a,b){return(0,aj.yw)(a,[{title:b.title,content:a,sections:b.sections||[]}]).filter(a=>"empty"===a.reason||"missing_planned_section"===a.reason)}function cV(a){return a.replace(/^\s*本表依据项目图谱[^\n。]*[。.]\s*$/gmu,"").replace(/^\s*本表依据(?:招标文件|工程量清单|施工区段|质量目标|计划工期|项目图谱|危险源辨识|材料设备清单|现场条件|图纸资料|图纸设计说明)[^\n。]*[。.]\s*$/gmu,"").replace(/^\s*表中事项应纳入[^\n。]*[。.]\s*$/gmu,"").replace(/^\s*正式输出的表格\/清单必须形成[^\n。]*[。.]\s*$/gmu,"").replace(/\n{3,}/gu,"\n\n").trim()}function cW(a){return a.filter(a=>/项目名称|工程名称|项目编号|招标项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`))}function cX(a,b){if(0===cW(b).length)return a;let c=a,d=a=>cW(b).filter(b=>a.some(a=>a.test(`${b.key||""}${b.fieldName||""}${b.fieldId||""}`))).filter(a=>aY(a.fieldId,a.value)).sort((a,b)=>{let c=(0,ay.lG)(a.value),d=(0,ay.lG)(b.value),e=3*!!a.sourceFile?.includes("招标文件")+(a.sourceRef?.sectionTitle&&/项目概况|招标公告|前附表|招标范围/u.test(a.sourceRef.sectionTitle)?2:0)-Math.floor(c.length/80);return 3*!!b.sourceFile?.includes("招标文件")+(b.sourceRef?.sectionTitle&&/项目概况|招标公告|前附表|招标范围/u.test(b.sourceRef.sectionTitle)?2:0)-Math.floor(d.length/80)-e})[0]?.value;for(let a of[{label:/计划工期|合同工期|周期要求/u,value:d([/计划工期|合同工期|周期要求|schedule_requirement/u])},{label:/质量标准|质量目标/u,value:d([/质量标准|quality_standard/u])},{label:/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u,value:d([/合同估算|投资估算|最高投标限价|招标控制价|project_investment_estimate/u])},{label:/建设地点/u,value:d([/建设地点|project_location/u])},{label:/建设规模/u,value:d([/建设规模|project_scale/u])}]){let b=cY((0,ay.lG)(a.value||""));b&&(c=c.replace(RegExp(`(${a.label.source})(\\s*[|::]\\s*)(?:资料未明确|系统暂未从知识库确认)[^|\\n。;;]*`,"gu"),`$1$2${b}`))}return c}function cY(a){return aW(a).replace(/[。;;]$/u,"").trim()}function cZ(a,b="",c=b){let d=function(a){let b=new Map;for(let c of a.split(/\r?\n/u)){if(!/^\|.*\|\s*$/u.test(c)||/^\|\s*:?-{3,}:?/u.test(c))continue;let a=c.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.replace(/\*\*/gu,"").trim());if(a.length<2)continue;let d="序号"===a[0]&&a.length>=3?a[1]:a[0],e="序号"===a[0]&&a.length>=3?a[2]:a[1],f="序号"===a[0]&&a.length>=4?a[3]:a[2],g=d.replace(/\/|:|:/gu,"").trim();if(!/项目名称|工程名称|项目编号|招标项目编号|招标人|项目业主|建设单位|发包人|建设地点|建设规模|施工范围|招标范围|计划工期|合同工期|质量标准|合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(g))continue;let h=/计划工期|合同工期/u.test(g)?"schedule_requirement":/质量标准/u.test(g)?"quality_standard":/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(g)?"project_investment_estimate":/招标人|项目业主|建设单位|发包人/u.test(g)?"owner":/建设地点/u.test(g)?"project_location":/项目编号|招标项目编号/u.test(g)?"project_code":void 0;!(!e||/内容|参数|资料未明确|系统暂未从知识库确认/u.test(e))&&aY(h||"project_name",e)&&b.set(g,[cY(e),cY(f||"项目资料")||"项目资料"])}return b}(b),e=cN({facts:a,markdown:c}),f=(a,b)=>{let c=e.get(a);return c?[c.value,c.source||"项目资料"]:function(a,b){for(let[c,d]of a.entries())if(b.some(a=>a.test(c)))return d}(d,b)||["",""]};return[["项目名称",...f("project_name",[/项目名称|工程名称|project_name/u])],["项目编号",...f("project_code",[/项目编号|招标项目编号|project_code/u])],["招标人",...f("owner",[/招标人|项目业主|建设单位|发包人|owner/u])],["建设地点",...f("project_location",[/建设地点|project_location/u])],["建设规模",...f("project_scale",[/建设规模|project_scale/u])],["计划工期",...f("schedule_requirement",[/计划工期|合同工期|周期要求|schedule_requirement/u])],["质量标准",...f("quality_standard",[/质量标准|quality_standard/u])],["合同估算价",...f("project_investment_estimate",[/合同估算|投资估算|最高投标限价|招标控制价|project_investment_estimate/u])]].map(([a,b,c])=>[a,b||"系统暂未从知识库确认",b?c||"项目资料":"待系统补抽确认"])}function c$(a,b="",c=b){return["**项目基本信息表**","","| 信息项 | 内容 |","|---|---|",...cZ(a,b,c).map(a=>`| ${a[0]} | ${a[1]} |`)].join("\n")}function c_(a){return/^\s*\|?\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a.trim())}function c0(a){let b=a.trim();if(!b||/^#{1,6}\s+/u.test(b)||c_(b))return!1;let c=(b.match(/\|/gu)||[]).length;return c>=2||c>=1&&/^\s*\|/u.test(b)||c>=1&&/\|\s*$/u.test(b)}function c1(a){return a.trim().replace(/^\|/u,"").replace(/\|$/u,"").trim().split("|").map(a=>a.trim())}function c2(a,b){let c=a.slice(0,b);for(;c.length<b;)c.push("");return`| ${c.join(" | ")} |`}function c3(a){let b=a.replace(/\r?\n/gu,"\n").split("\n"),c=[];for(let a=0;a<b.length;){let d=b[a]||"",e=b[a+1]?.trim()===""?a+2:a+1,f=b[e]||"";if(c0(d)&&c_(f)){for(c.push(d),e!==a+1&&c.push(b[a+1]||""),c.push(f),a=e+1;a<b.length&&c0(b[a]||"");)c.push(b[a]||""),a+=1;continue}if(!c0(d)){c.push(d),a+=1;continue}let g=[],h=a;for(;h<b.length&&c0(b[h]||"");)g.push(b[h]||""),h+=1;let i=g.map(a=>c1(a)),j=i.map(a=>a.length),k=j[0]||0,l=/^(?:项目名称|工程名称|项目编号|招标人|建设单位|建设地点|建设规模|计划工期|质量标准|合同估算价|招标范围)$/u;if(g.length<2||k<2||j.some(a=>a!==k)||i.some(a=>l.test(a[0]||""))){c.push(...g),a=h;continue}for(let a of(c.length>0&&c[c.length-1]?.trim()&&c.push(""),c.push(c2(function(a){if(2===a)return["信息项","内容"];let b=["项目","内容","备注","说明"];return Array.from({length:a},(a,c)=>b[c]||`列${c+1}`)}(k),k)),c.push(c2(Array.from({length:k},()=>"---"),k)),g))c.push(c2(c1(a),k));(a=h)<b.length&&b[a]?.trim()&&c.push("")}return c.join("\n").replace(/\n{3,}/gu,"\n\n")}function c4(a){let b=a.replace(/\r?\n/gu,"\n").split("\n"),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>/^\s*\|.*\|\s*$/u.test(a),f=a=>/^\s*\|\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a),g=a=>`| ${a.join(" | ")} |`;for(let a=0;a<b.length;){let h=b[a]||"",i=b[a+1]||"";if(!e(h)||!f(i)){c.push(h),a+=1;continue}let j=d(h),k=j.map((a,b)=>/^(?:资料来源|资料来源\/(?:说明|证明)|来源|证明)$/u.test(a)?b:-1).filter(a=>a>=0);if(0===k.length){c.push(h),a+=1;continue}let l=a=>a.filter((a,b)=>!k.includes(b));for(c.push(g(l(j))),c.push(g(l(d(i)).map(a=>a||"---"))),a+=2;a<b.length&&e(b[a]||"");)c.push(g(l(d(b[a]||"")))),a+=1}return c.join("\n").replace(/资料来源\/(?:说明|证明)/gu,"")}function c5(a){let b=[/^项目名称$/u,/^工程名称$/u,/^项目编号$/u,/^招标项目编号$/u,/^招标人$/u,/^项目业主$/u,/^建设单位$/u,/^发包人$/u,/^建设地点$/u,/^实施地点$/u,/^建设规模$/u,/^工程规模$/u,/^计划工期$/u,/^合同工期$/u,/^总工期$/u,/^质量标准$/u,/^质量目标$/u,/^合同估算价$/u,/^投资估算$/u,/^最高投标限价$/u,/^招标控制价$/u],c=a.replace(/\r?\n/gu,"\n").split("\n"),d=[],e=!1,f=a=>c1(a).map(a=>a.replace(/\*\*/gu,"").trim()),g=a=>b.some(b=>b.test(a)),h=a=>{let b=a.slice(2).map(f).filter(a=>a.length>=2).map(a=>a[0]||""),c=b.filter(g).length;return c>=3&&c>=Math.ceil(.45*b.length)};for(let a=0;a<c.length;){let b=c[a]||"",f=c[a+1]||"";if(/(?:\*\*[^\n]*项目基本信息表[^\n]*\*\*|####\s+[^\n]*项目基本信息表[^\n]*|###\s+[^\n]*项目基本信息表[^\n]*)/u.test(b)){let f=[b];for(a+=1;a<c.length&&!(c0(c[a]||"")&&c_(c[a+1]||""))&&""===(c[a]||"").trim();)f.push(c[a]||""),a+=1;if(a<c.length&&c0(c[a]||"")&&c_(c[a+1]||""))for(f.push(c[a]||"",c[a+1]||""),a+=2;a<c.length&&c0(c[a]||"");)f.push(c[a]||""),a+=1;e||(e=!0,d.push(...f));continue}if(/^###\s+(?:\d+\.\d+\s+)?(?:项目基本信息|工程概况|项目概况)\s*$/u.test(b)){let f=[b];for(a+=1;a<c.length&&!(c0(c[a]||"")&&c_(c[a+1]||""))&&!/^###\s+/u.test(c[a]||"");)f.push(c[a]||""),a+=1;if(a<c.length&&c0(c[a]||"")&&c_(c[a+1]||"")){let g=[c[a]||"",c[a+1]||""];for(a+=2;a<c.length&&c0(c[a]||"");)g.push(c[a]||""),a+=1;if(h(g)){if(e){let a=f.filter(a=>a.trim()&&!/^###\s+/u.test(a));a.length&&d.push(b,...a)}else e=!0,d.push(...f,...g);continue}d.push(...f,...g);continue}d.push(...f);continue}if(c0(b)&&c_(f)){let g=[b,f];for(a+=2;a<c.length&&c0(c[a]||"");)g.push(c[a]||""),a+=1;if(h(g)){e||(e=!0,d.push(...g));continue}d.push(...g);continue}d.push(b),a+=1}return d.join("\n").replace(/\n{3,}/gu,"\n\n").replace(/\n{1,2}\|\s*信息项\s*\|\s*内容\s*\|\s*\n+(?:该小节围绕[^\n]*\n+)+\|\s*:?-{3,}:?\s*\|\s*:?-{3,}:?\s*\|\s*/gu,"\n\n")}function c6(a,b){if(!/项目基本信息|项目概况|工程概况|招标范围/u.test(a))return c5(c3(c4(a)));if(!/\|\s*信息项\s*\|\s*内容\s*\|/u.test(a)&&cW(b).length>0){let c=/^(###\s+(?:\d+\.\d+\s+)?[^\n]*(?:项目概况|工程概况|项目基本信息|招标范围)[^\n]*\n)/mu.exec(a);if(c?.index||c?.index===0){let d=c.index+c[0].length,e=`${c$(b,"",a)}
171
171
 
172
172
  `;a=`${a.slice(0,d)}
173
173
  ${e}${a.slice(d).trimStart()}`}}let c=/^(###\s+(?:\d+\.\d+\s+)?[^\n]*(?:项目概况|工程概况|项目基本信息|招标范围)[^\n]*\n)/mu.exec(a);if(!c?.index&&c?.index!==0)return a;let d=c.index,e=d+c[0].length,f=/^###\s+/gmu;f.lastIndex=e;let g=f.exec(a),h=g?.index??a.length,i=a.slice(e,h),j=c$(b,i,a);if(!cZ(b,i,a).some(a=>!/资料未明确|系统暂未从知识库确认/u.test(a[1])))return a;let k=i.replace(/\*\*项目基本信息表\*\*[\s\S]*?(?=\n\n(?:[^|\n]|$)|$)/u,"").replace(/\|\s*(?:序号\s*\|\s*项目名称\s*\|\s*内容参数|信息项\s*\|\s*内容\s*(?:\|\s*资料来源\/(?:说明|证明))?)\s*\|[\s\S]*?(?=\n\n(?:[^|\n]|$)|$)/u,"").replace(/^\|\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|\s*\n(?:^\|.*\|\s*\n?)*/gmu,"").replace(/该小节围绕“[^”]+”进行补充说明[^\n]*(?:\n\n该小节围绕“[^”]+”进行补充说明[^\n]*)*/gu,"").replace(/\n{3,}/gu,"\n\n").trim(),l=`${c[0].trimEnd()}
@@ -187,23 +187,23 @@ ${c}`,h+=1}return{chapters:g.map(a=>({...a,sections:a.sections||[]})),patchedCou
187
187
  ${b.filePath}
188
188
  ${b.content}`;return Math.min(1.8,.16*[...new Set([a.title,...a.sections||[],...a.requiredFacts].flatMap(a=>a.split(/[\s、,,。;;::()()《》【】\-/]+/u)).map(a=>a.trim()).filter(a=>a.length>=2).slice(0,36))].filter(a=>c.includes(a)).length)}(a,b)}));return(0,s.QR)(e,c,d)}function dm(a,b,c){let d=(a.sections||[]).slice(0,10).join(" "),e=a.requiredFacts.slice(0,10).join(" "),f=a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4);return[...new Set([...f.length>=2?[`${a.title} ${d} ${e}`.trim(),...f.map(b=>`${b} ${(a.sections||[]).slice(0,6).join(" ")}`.trim()),`${f.slice(0,3).join(" ")} ${e}`.trim()]:[`${a.title} ${d} ${e}`.trim()],...b,...c].filter(Boolean))]}function dn(a,b){let c=Number(process.env.DOCUMENT_MAX_QUERIES_PER_CHAPTER);return Math.max(2,Math.min(9,Math.floor(Number.isFinite(c)&&c>0?c:4)+ +((a.sections||[]).length>=6||a.requiredFacts.length>=8)+Math.min(2,b.length)))}function dp(a,b,c=!1){return Math.max(12,Math.min(c?58:26,a+10+4*((b.sections||[]).length>=6||b.requiredFacts.length>=8)+18*!!c))}async function dq(a){if((0,ay.Te)(a.signal),0===a.scopedFilePaths.length)return[];let b=`${a.chapter.title} ${a.sectionTitle}`.trim(),c=await a.manager.search(a.projectRoot,b,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:5,weights:dk(b),generationMode:!1});return(0,s.QR)(c.results.filter(b=>a.scopedFilePaths.includes(b.filePath)).map(b=>({chapterId:a.chapter.id,filePath:b.filePath,score:b.score+1.2,content:b.content,roleId:a.fileRoleByPath.get(b.filePath),processingType:a.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"section-evidence"})),{maxItems:5,maxChars:9e3,preservePinned:!0})}async function dr(a){let b=[],c=a.needs.slice(0,8),d=await Promise.all(c.map(async b=>{(0,ay.Te)(a.signal);let c=`${a.chapter.title} ${b} ${(a.chapter.sections||[]).join(" ")}`.trim();return(await a.manager.search(a.projectRoot,c,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:6,weights:dk(`${a.chapter.title} ${b}`),generationMode:!1})).results.filter(b=>a.scopedFilePaths.includes(b.filePath)).map(b=>({chapterId:a.chapter.id,filePath:b.filePath,score:b.score+2,content:b.content,roleId:a.fileRoleByPath.get(b.filePath),processingType:a.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"required-fact-evidence"}))}));return b.push(...d.flat()),(0,s.QR)(b,{maxItems:Math.max(6,3*c.length),maxChars:18e3,preservePinned:!0})}function ds(a,b,c=12){if(0===b.length)return[];let d=b.slice(0,c).map(a=>e.basename(a)),f=b.length>c?` 等 ${b.length} 个文件`:"";return[`${a}:${d.join("、")}${f}`]}function dt(a,b,c){if(Number.isFinite(c)&&c>0)return Math.ceil(c);let d=new Set(b.filter(Boolean)),e=a.listFiles?.().filter(a=>0===d.size||d.has(a.relativePath)).reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0)??0;return e>0?e:Math.max(1,d.size)}async function du(a){var b,c,e,f,g;let h=a.chapterDrafts,{chapterDraftsByOrder:i,chapterGenerationStagesByOrder:j,chapterGenerationStages:k,effectiveChapters:l,template:m,allEvidence:n,progressStages:o,documentSpec:p,projectMaterialProfile:q,projectMaterialSummary:r,domainProfile:v,documentBudget:w,promptTexts:x,reviewPromptTexts:y,input:z,generationStrategy:A,generationDiagnostics:B,promptBindings:C,promptDocumentRules:D,projectUnderstanding:E,projectContext:F,projectRoot:G,projectId:H,readiness:I,factExtractionPromptTexts:J,hasExplicitOutline:K,missingItems:L,retrievalCoverageReports:M,failedChapterMessages:N,webResearchReport:O,indexHealth:P,promptPlan:R,emitProgress:T,withProgressHeartbeat:U}=a,{signal:V,requirement:W}=z,X=(0,aj.N_)(m);h=i.filter(a=>!!a),k.push(...j.filter(a=>!!a));let Y=h.flatMap(a=>a.evidence||[]);if(Y.length>0){n.push(...Y);let a=(0,s.QR)(n,{maxChars:Math.max(5e4,9e3*l.length),preservePinned:!0});n.splice(0,n.length,...a)}if(0===h.length)throw Error(`章节生成未完成:${N.join(";")||"没有生成任何有效章节"}`);if(K&&h.length<l.length)throw Error(`OUTLINE 指定 ${l.length} 章,实际只生成 ${h.length} 章:${N.join(";")||"部分章节未生成"}`);(0,ay.Te)(V),(0,ba.fx)(o,(0,ba.X5)({type:"file_understanding",roleId:"multimodal-files",status:"running",message:"正在理解多模态参考文件"},{subtitle:"多模态参考文件"})),T(h);let Z={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{Z=await cb(G,n,V)}catch(a){if(V?.aborted)throw a;console.error("[gen] fileUnderstanding failed:",a)}for(let a of((0,ba.fx)(o,Z.stage),T(h),(0,ay.Te)(V),Z.notes))n.push({chapterId:"multimodal-file-understanding",filePath:"多模态模型文件理解结果",score:1,content:a,roleId:"multimodal-files",processingType:"reference",source:"multimodal"});let $=(0,s.QR)(n,{maxItems:Math.max(48,10*l.length),maxChars:Math.max(52e3,9e3*l.length),preservePinned:!0});n.splice(0,n.length,...$);let _=function(a,b,c){let d={};for(let e of(0,u.Uy)(a,c)){let a=b.find(a=>(0,u.I2)(a,e));a&&(d[e.name]=`${a.content.replace(/\s+/gu," ")}(来源:${a.filePath},角色:${a.roleId||"未标注"})`)}return d}(m,n,p),aa=aT(n,m,p),ab=aZ(n),ac=a$(n,v),af=[],ak={facts:[],stages:[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"已有本地/资料事实覆盖主要必需字段,跳过 LLM 全量事实抽取"}]};if(function(a,b,c){let d=(0,u.Uy)(b,c).filter(a=>a.required);return 0===d.length?a.filter(a=>a.confidence>=.75&&(0,ay.lG)(a.value).trim().length>=2).length<12:d.filter(b=>a.some(a=>(function(a,b){let c=(0,ay.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}([...af,...aa,...ab,...ac],m,p)){let a=(0,s.QR)(n,{maxItems:48,maxChars:45e3,preservePinned:!0});try{ak=await aU(a,J,m,p,V)}catch(a){if(V?.aborted)throw a;console.error("[gen] fact extraction failed:",a)}}(0,ay.Te)(V);let al=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}([...af,...aa,...ab,...ac,...ak.facts],n);for(let a of((0,ba.fx)(o,Z.stage),ak.stages))(0,ba.fx)(o,a);T();let am=aS(n),an=n.filter(a=>"pinned-evidence"===a.source).length,ao=n.filter(a=>"pinned-evidence"!==a.source&&"bound-file"!==a.source).length,ap=(0,ba.X5)({type:"reference",roleId:"quality-enhancement",status:n.length>0?"success":"skipped",message:`增强贡献:知识库证据 ${n.length} 条,人工确认/固定证据 ${an} 条,自动检索证据 ${ao} 条`},{subtitle:"证据与上下文增强"});for(let a of(o.push(ap),T(),al))_[a.key]=`${(0,ay.lG)(a.value)}(来源:${a.sourceFile},角色:${a.roleId})`;let aq=new Map;for(let a of n)aq.set(a.filePath,(aq.get(a.filePath)??0)+1);let ar=new Map;for(let a of n)ar.set(a.source||"unknown",(ar.get(a.source||"unknown")??0)+1);let as=[...aq.entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),at=a9(al,am,L,p,v),au=h.map(a=>{let b=p.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=(b?.requiredFactIds||[]).map(a=>p.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)}}),av=function(a,b=[],c){let e=[],f=[];for(let b of a)0===b.evidence.length&&e.push(`${b.title} 未检索到资料证据`),b.content.length<80&&e.push(`${b.title} 内容较短,建议人工补充或重新生成`);return c&&a.length<c.chapters.length&&f.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===(0,d.zY)(c).length&&f.push("模板未绑定任何提示词"),{passed:0===f.length,warnings:e,errors:f}}(h,al,m);av.warnings=[...av.warnings,...I.warnings],av.errors=[...av.errors,...I.blockingIssues];let aw=bd(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}(av,at,h),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}(au)),ax=Date.now(),az=(0,ai.V7)(h.map(a=>a.content).join("\n\n")),aA=au.filter(a=>a.readinessRate<.5||0===a.evidenceCount||a.missingFacts.length>0).flatMap(a=>[0===a.evidenceCount?`章节缺少证据:${a.title}`:"",a.missingFacts.length?`章节事实缺口:${a.title}:${a.missingFacts.slice(0,6).join("、")}`:"",a.readinessRate<.5?`章节准备度较低:${a.title} ${Math.round(100*a.readinessRate)}%`:""].filter(Boolean)).slice(0,12);(0,ba.fx)(o,(0,ba.X5)({type:"validation",roleId:"document-budget",status:"success",message:`全文预算校准已改为结构缺口优先:当前 ${az} 字`,details:aA.length?[`发现 ${aA.length} 个结构缺口,后续按缺口修复,不按剩余字数盲扩写`,...aA.slice(0,6)]:[`章节数:${h.length}`,`目标:${w.targetChars||w.targetPages||"按章节深度"}`,"未发现阻断性结构缺口,跳过全文盲扩写"],progress:{current:2,total:2,label:"结构校准"}},{subtitle:"文档预算"})),T(h);let aB=h.map(a=>a.content).join("\n\n"),aC=dj(h,al,aB,{forbiddenTexts:X});aC.patchedCount>0&&(h.splice(0,h.length,...aC.chapters),aw=[...aw,{level:"info",message:`已自动补写未落位事实 ${aC.patchedCount} 项`,suggestion:"补写仅使用本项目资料明确事实,未补写商务敏感信息或系统暂未确认内容。"}]);let aD=(0,ai.fW)(w,h.map(a=>a.content).join("\n\n")),aE=[w.targetChars?`目标 ${w.targetChars} 字${w.minChars||w.maxChars?`(区间 ${w.minChars||0}-${w.maxChars||"∞"} 字)`:""}`:void 0,w.targetPages?`目标 ${w.targetPages} 页${w.minPages||w.maxPages?`(区间 ${w.minPages||0}-${w.maxPages||"∞"} 页)`:""}`:void 0].filter(Boolean).join(" / ")||"默认章节深度",aF=!!(w.maxChars&&aD.currentChars>w.maxChars),aG=(0,ba.X5)({type:"validation",roleId:"document-budget",status:aF?"fallback":"success",message:(0,ba.AQ)(`文档预算:当前 ${aD.currentChars} 字,新增 ${Math.max(0,aD.currentChars-az)} 字,预计 ${aD.estimatedPages} 页;${aE}${w.minChars&&aD.currentChars<w.minChars?";未按字数差距执行全文盲扩写":""}`,ax)},{subtitle:"文档预算"});(0,ba.fx)(o,aG),T(h);let aH=k.filter(a=>"chapter_generation"===a.type&&"fallback"===a.status).length,aI=Math.max(0,l.length-h.length),aJ=[...aH>0?[{level:"info",message:`章节生成存在补充完善:${aH} 章`,suggestion:"已保留章节成果;如需更高质量可复核对应章节,但不阻断导出。"}]:[],...aI>0?[{level:"error",message:`部分章节生成失败:${aI} 章`,suggestion:N.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。"}]:[]],aK=h.flatMap(a=>{let b=l.find(b=>b.id===a.id);if(!b)return[];let c=bV({chapter:b,content:a.content,evidence:a.evidence||[]});return c.length>0?[{level:"warning",message:`${(0,t.GQ)(a.title)} 小节知识库事实或量化参数落位可继续优化:${c.slice(0,5).join(";")}`,suggestion:"建议扩大本地知识库检索并定向补写对应小节,优先使用清单、图纸、招标要求中的原始事实、规格、数量、标准和工期参数。"}]:[]}),aL=(aw=bd(aw,aJ,aK)).filter(a=>"error"===a.level&&(0,aj.Nz)(a)).length,aM=[...o];(0,ba.fx)(aM,(0,ba.X5)({type:"reference",roleId:"knowledge-usage-report",status:"success",message:`资料使用报告:证据 ${n.length} 条,来源文件 ${as.length} 份,结构化事实 ${al.length} 条`,details:[`证据类型:${[...ar.entries()].map(([a,b])=>`${a} ${b}`).join(",")||"无"}`,`索引健康:可用切片 ${P.usableChunkCount} 条,待索引 ${P.pendingJobs} 个,向量 ${P.vectorStatus?.status||"unknown"}`,aC.patchedCount>0?`自动补写事实:${aC.patchedCount}/${aC.missingCount}`:`事实落位补写:0/${aC.missingCount}`]},{subtitle:"资料使用报告"})),(0,ba.fx)(aM,(0,ba.X5)({type:"reference",roleId:"web-research-report",status:O.enabled?"success":"skipped",message:O.enabled?`联网增强:检索章节 ${new Set(O.chapters).size} 个,查询 ${O.queries.length} 个,使用公开资料 ${O.evidenceCount} 条`:"联网增强未开启",details:O.enabled?[`检索主题:${[...new Set(O.queries)].join(";")||"无"}`,`过滤结果:${O.filteredCount} 条`,"公开资料仅用于通用规范、政策、工艺和措施补充,不作为项目事实来源"]:["可在模型配置中开启联网增强"]},{subtitle:"联网增强报告"})),(0,ba.fx)(aM,(0,ba.X5)({type:"validation",roleId:"document-workflow",status:aL>0?"failed":"success",message:`阻断 ${aL},错误 ${av.errors.length},警告 ${av.warnings.length}`},{subtitle:"最终规范校验"})),(0,ba.fx)(aM,(0,ba.X5)({type:"formatting",roleId:"document-workflow",status:"success",message:"已生成正式排版 Markdown"})),(0,ba.fx)(aM,(0,ba.X5)({type:"export_ready",roleId:"document-workflow",status:aL>0?"failed":"success",message:aL>0?"导出门禁未通过,请完成阻断问题修复后再导出":"已准备好导出 Markdown/HTML/DOCX/PDF"}));let aN={templateId:m.id,templateName:m.name,title:m.outputTitle,requirement:W||"",projectRoot:G,projectId:H,exportSettings:m.exportSettings,generationSettings:m.generationSettings,facts:_,structuredFacts:al,factsModel:at,chapters:h,sources:as,missingItems:[...new Set(L)],validation:av,validationIssues:aw,executionStages:aM,exportGate:{passed:0===aL,blockingIssues:aw.filter(a=>"error"===a.level&&(0,aj.Nz)(a)),checklist:[]},assets:[],partialChapters:h.map(a=>({id:a.id,title:a.title,chars:(0,ai.V7)(a.content),status:cQ(a,w.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:h,generatedAt:Date.now()},aO=ah(aN,{forbidDrawingImages:!1,promptRules:D});if("1"!==process.env.DOCUMENT_ENABLE_POST_EXPORT_REVIEW){let a=ag(aO,h,{forbidDrawingImages:!1,promptRules:D}).chapters.map(a=>{let b=l.find(b=>b.id===a.id)||a;return{...a,content:dd(a.content,b)}}),b="",c=(a,b)=>bd(aw.filter(a=>!c9(a)&&"error"!==a.level&&!/目录与正文不一致|表格分隔线位置不规范|正文存在过长段落|正文存在非正式章二级标题|正文残留资料页码/u.test(a.message)),cr({markdown:a,spec:p,summary:r}),cv({markdown:a,facts:al,summary:r,profile:v}),cs(a,r),c7(a,al),cF({markdown:a,chapters:b,factsModel:at,template:m,promptBindings:C,promptDocumentRules:D}),(0,ai.PE)(m.generationSettings||m.exportSettings,a).filter(a=>!(w.minPages&&/低于目标页数/u.test(a.message))),(0,ai.ty)(w,a)),d=[],e=()=>{var e;d=be(c(b=c6(cX(c8(ag(ah({...aN,chapters:a},{forbidDrawingImages:!1,promptRules:D}),a,{forbidDrawingImages:!1,promptRules:D}).markdown),al),al),a)),d=be(c(b=dc(b,d,X).replace(/^##\s+(.+)$/gmu,(a,b)=>{let c=String(b||"").trim();return"目录"===c||/^第[一二三四五六七八九十百千万\d]+章\s+/u.test(c)?a:`### ${c}`}),a)),d=be(c(b,a)),e=b,w.minChars,d=function(a,b){let c=/^##\s+(?!目录$)(?!第[一二三四五六七八九十百千万\d]+章\s+)/gmu.test(a),d=/(?:第?\d+页|P\.?\s*\d+)/iu.test(a),e=/施工方/u.test(a);return b.filter(a=>/正文存在非正式章二级标题/u.test(a.message)?c:/资料页码|文件页码|页码引用/u.test(a.message)?d:!/禁止内容|施工方/u.test(a.message)||e)}(b=e,be(c(b,a)))},f=b=>{a=b.map(a=>{let b=l.find(b=>b.id===a.id)||a;return{...a,sections:a.sections||[],content:dd(a.content,b)}}),e()},g=()=>d.filter(da).map(a=>bg(a)).slice(0,24),i=async(c,d)=>{let e=(0,aj.yw)(b,a.map(a=>({...a,sections:Q(a.content)}))).filter(a=>"empty"===a.reason);return aM.push((0,ba.X5)({type:"validation",roleId:c,status:e.length?"fallback":"success",message:e.length?`${d}:发现 ${e.length} 个结构缺口,交由小节补写处理,不执行全文盲扩写`:`${d}:未发现结构缺口,跳过全文盲扩写`,details:e.slice(0,8).map(a=>a.message)},{subtitle:d})),!1},j=[];e();let k=!1,n=0,o=new Set(d.filter(a=>"error"===a.level).map(a=>bf(a)));for(let c=0;c<5;c+=1){if((0,ay.Te)(V),!k&&await i(`default-budget-repair-${c+1}`,0===c?"默认路径预算补齐":"默认路径预算再补齐"))continue;k=!0;let e=g(),h=e.length>0&&e.every(a=>/正文篇幅低于目标字数|正文长度低于提示词要求/u.test(a));if(0===e.length||h)break;let l=await U(()=>bi(B,"default-path-quality-repair",()=>bo({markdown:b,template:m,chapters:a,promptTexts:x,requirement:W,issues:e,forbidDrawingImages:!1,strategy:A,diagnostics:B,signal:V}),{issues:e.length,round:c+1}),aM);if(l.stage&&j.push({...l.stage,message:`${l.stage.message||"默认路径质量修复完成"};第 ${c+1} 轮,触发问题 ${e.length} 个`}),l.chapters===a)break;f(l.chapters);let p=bh(e,d).slice(0,8);if(0===p.length)continue;let q=await U(()=>bi(B,"default-path-quality-repair-escalation",()=>bo({markdown:b,template:m,chapters:a,promptTexts:x,requirement:W,issues:p,forbidDrawingImages:!1,strategy:A,diagnostics:B,signal:V}),{issues:p.length,round:c+1}),aM);q.chapters!==a&&f(q.chapters),j.push((0,ba.X5)({type:"llm_review",roleId:`default-repair-verify-${c+1}`,status:d.some(a=>p.some(b=>bf(b)===bf(a)))?"fallback":"success",message:`修复后验证闭环完成:第 ${c+1} 轮升级修复 ${p.length} 个残留问题`,details:p},{subtitle:"修复后验证"}));let r=new Set(d.filter(a=>"error"===a.level).map(a=>bf(a)));if(0===r.size||r.size<o.size)n=0;else if((n+=1)>=2){j.push((0,ba.X5)({type:"llm_review",roleId:"default-repair-stuck",status:"fallback",message:`连续 ${n} 轮质量修复未减少阻断问题,已停止重复修复并保留当前成果`},{subtitle:"修复收敛"}));break}o=r}e();let q=(0,aj.Ai)(d,at,a),t=[...aM,...j].map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:q.blockingIssues.length>0?"failed":"success",message:`阻断 ${q.blockingIssues.length},问题 ${d.length}`}:"export_ready"===a.type?{...a,status:q.passed?"success":"failed",message:q.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:a);t.push((0,ba.X5)({type:"llm_review",roleId:"post-export-review",status:"skipped",message:"已跳过导出后的重型 LLM 复审;默认路径已执行本地硬规则校验与必要的精准局部修复;如需开启重型复审请设置 DOCUMENT_ENABLE_POST_EXPORT_REVIEW=1"},{subtitle:"导出后复审"}));let u=a.map(a=>({...a,evidence:(0,s.QR)(a.evidence||[],{maxItems:12,maxChars:9e3,preservePinned:!0})}));return{...aN,chapters:u,validationIssues:d,exportGate:q,executionStages:t,partialChapters:a.map(a=>({id:a.id,title:a.title,chars:(0,ai.V7)(a.content),status:cQ(a,w.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:u,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:B},markdown:b}}(0,ay.Te)(V);let aP=h.map(a=>{let b=bl({chapter:l.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:w.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,ai.V7)(a.content)}}),aQ=aP.filter(a=>"pass"!==a.status).length,aV=A.enableChapterReview&&aQ>0;aV&&((0,ba.fx)(aM,(0,ba.X5)({type:"llm_review",roleId:"chapter-review",status:"running",message:`正在进行章节级质量审查:${aQ}/${h.length} 章存在本地风险`,details:["仅对本地扫描发现风险的生成结果触发 LLM 审查,按风险章节自然并行"],progress:{current:1,total:3,label:"章节审查"}},{subtitle:"章节级质量审查"})),T(h,aM));let aW=aV?await U(()=>bi(B,"chapter-review",()=>cc({template:m,chapters:h,budget:w,promptTexts:y||x,requirement:W,strategy:A,diagnostics:B,signal:V}),{chapters:h.length}),aM):{summaries:aP,stage:(0,ba.X5)({type:"llm_review",roleId:"chapter-review",status:"skipped",message:A.enableChapterReview?"本地章节扫描未发现需要 LLM 章节审查的问题,已跳过":"当前策略未启用章节级 LLM 审查"},{subtitle:"章节级质量审查"})};aM.push(aW.stage);let aX=aW.summaries,aY=aX.filter(a=>"pass"!==a.status&&a.issues.length>0);if(aY.length>0){(0,ba.fx)(aM,(0,ba.X5)({type:"llm_review",roleId:"chapter-review-repair",status:"running",message:`正在按章节审查结果就地修复:${aY.length} 章`,details:aY.map(a=>`${a.title}:${a.issues.slice(0,5).join(";")}`),progress:{current:1,total:aY.length,label:"章节就地修复"}},{subtitle:"章节就地修复"})),T(h,aM);let a=new Map,b=0,c=Math.max(1,aY.length||1);for(let d=0;d<aY.length;d+=c){(0,ay.Te)(V);let e=aY.slice(d,d+c);for(let c of(await Promise.all(e.map(async a=>{let b=h.find(b=>b.id===a.chapterId);if(!b)return{chapterId:a.chapterId,content:void 0,appliedCount:0};try{let c=await (0,aR.od)(c=>bm({template:m,chapter:b,issues:a.issues.slice(0,4),promptTexts:y||x,requirement:W,forbidDrawingImages:!1,diagnostics:B,signal:c}),9e4,V);return{chapterId:a.chapterId,content:c?.content,appliedCount:c?.appliedCount||0}}catch{return{chapterId:a.chapterId,content:void 0,appliedCount:0}}}))))c.content&&a.set(c.chapterId,c.content),b+=c.appliedCount}let d=0,e=new Set;for(let b=0;b<h.length;b+=1){let c=a.get(h[b].id);c&&c!==h[b].content&&(h[b]={...h[b],content:c},e.add(h[b].id),d+=1)}d>0&&(aX=aX.map(a=>e.has(a.chapterId)?{...a,status:"warn",issues:[],suggestions:[`已按章节审查结果应用局部修复,修复前问题已移交最终校验复核。`],chars:(0,ai.V7)(h.find(b=>b.id===a.chapterId)?.content||"")}:a),aO=ah({...aN,chapters:h,validationIssues:aw,executionStages:aM},{forbidDrawingImages:!1,promptRules:D})),aM.push((0,ba.X5)({type:"llm_review",roleId:"chapter-review-repair",status:"success",message:`章节就地修复完成:修复 ${d} 章,应用 ${b} 个 patch`},{subtitle:"章节就地修复"})),T(h,aM)}if(aV){let a=aX.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(";")||"请复核章节事实覆盖、结构完整性和角色证据覆盖。"}));aw=bd(aw,a)}let a_=A.enableGlobalReview&&(aV||aw.some(a=>/事实一致性|项目污染|章节缺失|结构/u.test(a.message)));a_&&((0,ba.fx)(aM,(0,ba.X5)({type:"llm_review",roleId:"global-consistency-review",status:"running",message:"正在进行全局一致性审查",details:["仅在章节审查或本地校验发现跨章节风险时触发"],progress:{current:2,total:3,label:"全局审查"}},{subtitle:"全局一致性审查"})),T(h,aM));let a0=a_?await U(()=>bi(B,"global-consistency-review",()=>cd({template:m,chapters:h,chapterReviews:aX,promptTexts:y||x,requirement:W,projectContext:F,diagnostics:B,signal:V}),{chapters:h.length}),aM):{issues:[],stage:(0,ba.X5)({type:"llm_review",roleId:"global-consistency-review",status:"skipped",message:A.enableGlobalReview?"未发现需要 LLM 全局一致性审查的跨章节风险,已跳过":"当前策略未启用全局一致性审查"},{subtitle:"全局一致性审查"})};aM.push(a0.stage),aw=bd(aw,a0.issues.map(a=>({level:"warning",message:`全局一致性审查:${a}`,suggestion:"请复核跨章节术语、关键事实、范围边界和上下文一致性。"}))),T(h,aM);let a1=h.filter(a=>0===a.evidence.length||a.missingFacts.length>0||(0,ai.V7)(a.content)<Math.floor(.7*(w.chapterTargets.get(a.id)||1200))||aX.some(b=>b.chapterId===a.id&&"fail"===b.status)||bl({chapter:l.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:w.chapterTargets.get(a.id)||1200}).length>0),a2=aL>0||a0.issues.length>0||aX.some(a=>"fail"===a.status)||aw.some(a=>/事实一致性|项目污染|章节生成存在兜底|章节生成失败|阻断/u.test(a.message)),a3=A.enableFinalQualityReview&&(a2||a1.length>Math.max(3,Math.floor(.35*h.length))),a4=Date.now();a3&&((0,ba.fx)(aM,(0,ba.X5)({type:"llm_review",roleId:"llm-review",status:"running",message:`正在进行最终质量审查:风险章节 ${a1.length} 个`,details:["只检查结构、事实一致性、目录层级和正式文档风格,不重写正文"],progress:{current:3,total:3,label:"质量审查"}},{subtitle:"最终质量审查"})),T(h,aM));let a5=(0,s.QR)(n,{maxItems:Math.max(32,8*l.length),maxChars:Math.max(36e3,6e3*l.length),preservePinned:!0}),a6=a3?await U(()=>cf({template:m,spec:p,markdown:aO,evidence:a5,promptTexts:y||x,projectContext:F,requirement:W,diagnostics:B,signal:V}),aM):{markdown:aO,stage:{type:"llm_review",roleId:"llm-review",status:a1.length>0?"fallback":"success",message:a1.length>0?`本地风险扫描发现 ${a1.length} 个低/中风险章节,未达到最终 LLM 审查触发阈值,保留为待复核 warning`:"本地风险扫描未发现需要 LLM 最终质量审查的章节"}};a6.stage.message=(0,ba.AQ)(a6.stage.message||"LLM 审查完成",a4),(0,ay.Te)(V);let a7=dc(ag(a6.markdown===aO?ah({...aN,validationIssues:aw,exportGate:aN.exportGate,executionStages:aM},{forbidDrawingImages:!1,promptRules:D}):a6.markdown,h,{forbidDrawingImages:!1,promptRules:D}).markdown,aw,X),a8=ae(a7,m).map(a=>bg(a)),bb=(0,aj.bM)(a7).map(a=>bg(a)),bc=(0,aj.mR)(a7,m).map(a=>bg(a)),bj=(0,aj.N1)(a7,at).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),bk=D.forbidToc?[]:[...(0,aj.gN)(a7),...(0,aj.f8)(a7)].map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),bn=(0,aj.k0)(a7).map(a=>bg(a)),bp=(0,aj.qK)(a7,h).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),bq=(b={markdown:a7,chapters:h,factsModel:at},[...(0,aj.ji)(b.chapters),...(0,aj.i0)(b.chapters),...(0,aj.ST)(b.chapters),...(0,aj.xX)(b.chapters),...(0,aj.qm)(b.markdown,b.factsModel),...cy(b.markdown,b.factsModel),...cz(b.markdown),...cA(b.chapters),...(0,aj.vY)(b.markdown,b.factsModel)]).map(a=>bg(a)),br=(0,aj.iC)(a7).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),bs=(0,aj.BV)(a7).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),bt=function(...a){return a.flat()}(a8,bb,bc,bj,bk,bn,bp,bq,br,bs,(0,aj.Ty)(h).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),S(a7).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`)),bu=new Set(bp),bv=Date.now(),bw=bt.filter(a=>!bu.has(a));(0,ba.fx)(aM,(0,ba.X5)({type:"llm_review",roleId:"quality-repair",status:bw.length>0?"running":"success",message:bw.length>0?`正在进行精准质量修复:${bw.length} 个问题`:"未发现需要精准修复的问题",details:bw,progress:{current:1,total:Math.max(1,bw.length),label:"质量修复"}},{subtitle:"精准质量修复"})),T(h,aM);let bx=await U(()=>bi(B,"local-patch-quality-repair",()=>bo({markdown:a7,template:m,chapters:h,promptTexts:x,requirement:W,issues:bw,forbidDrawingImages:!1,strategy:A,diagnostics:B,signal:V}),{issues:bw.length}),aM);bx.stage&&(bx.stage.message=(0,ba.AQ)(bx.stage.message||"质量修复完成",bv)),(0,ay.Te)(V);let by=bx.stage?[...aM,a6.stage,bx.stage]:[...aM,a6.stage],bz=bx.chapters,bA=ah({...aN,chapters:bz,validationIssues:aw,exportGate:aN.exportGate,executionStages:aM},{forbidDrawingImages:!1,promptRules:D}),bB=[...ae((c={markdown:bA=dc(bA,aw,X),chapters:bz,template:m,factsModel:at}).markdown,c.template),...(0,aj.bM)(c.markdown),...(0,aj.k0)(c.markdown),...(0,aj.ji)(c.chapters),...(0,aj.i0)(c.chapters),...(0,aj.ST)(c.chapters),...(0,aj.xX)(c.chapters),...(0,aj.qm)(c.markdown,c.factsModel),...cy(c.markdown,c.factsModel),...cz(c.markdown),...cA(c.chapters),...(0,aj.vY)(c.markdown,c.factsModel)],bC=bh(bw,bB).slice(0,8);if(bC.length>0){let a=await U(()=>bi(B,"local-patch-quality-repair-escalation",()=>bo({markdown:bA,template:m,chapters:bz,promptTexts:x,requirement:W,issues:bC,forbidDrawingImages:!1,strategy:A,diagnostics:B,signal:V}),{issues:bC.length}),by);bz=a.chapters,bA=dc(bA=ah({...aN,chapters:bz,validationIssues:aw,exportGate:aN.exportGate,executionStages:aM},{forbidDrawingImages:!1,promptRules:D}),aw,X),by=a.stage?[...by,{...a.stage,roleId:"quality-repair-escalation",message:`修复后验证发现残留问题,已升级修复 ${bC.length} 个问题`}]:by}let bD=(0,aj.yw)(bA,bz.map(a=>({...a,sections:Q(a.content)}))).filter(a=>"empty"===a.reason);if(bD.length>0){let a=Date.now();(0,ba.fx)(by,(0,ba.X5)({type:"llm_review",roleId:"section-content-repair",status:"running",message:`正在补写空洞小节:${bD.length} 个问题`,details:bD.map(a=>a.message),progress:{current:1,total:bD.length,label:"小节补写"}},{subtitle:"小节内容补写"})),T(bz,by);let b=[...bz];for(let a=0;a<bz.length;a+=Math.max(1,bz.length||1)){(0,ay.Te)(V);let c=bz.slice(a,a+Math.max(1,bz.length||1));(await Promise.all(c.map(async a=>{let b=bD.filter(b=>b.chapterTitle===a.title);if(0===b.length)return a;let c=l.find(b=>b.id===a.id||b.title===a.title)||{id:a.id,title:a.title,purpose:"",queries:[],requiredFacts:[],sections:a.sections},d=w.chapterTargets.get(a.id)||1200,e=E.chapterPlans.find(a=>a.chapterId===c.id||a.chapterTitle===c.title),f=[e?.writingGoal,e?.mustCover?.length?`本章必须覆盖:${e.mustCover.join("、")}`:""].filter(Boolean).join("\n");try{let e=await (0,aR.od)(e=>b3({template:m,chapter:c,content:a.content,evidence:a.evidence,missingFacts:a.missingFacts,promptTexts:x,projectContext:F,requirement:W,roleContext:f,targetWords:d,forbidDrawingImages:!1,forcedSections:b,signal:e}),Math.min(3e5,Math.max(9e4,9e4*b.length)),V);if(!e)return a;let g=Q(e);return{...a,content:e,markdown:e,sections:g}}catch{return a}}))).forEach((c,d)=>{b[a+d]=c})}bz=b;let c=(0,aj.qK)(ah({...aN,chapters:bz,validationIssues:aw,exportGate:aN.exportGate,executionStages:aM},{forbidDrawingImages:!1,promptRules:D}),bz);(0,ba.fx)(by,(0,ba.X5)({type:"llm_review",roleId:"section-content-repair",status:c.length>0?"fallback":"success",message:(0,ba.AQ)(c.length>0?`小节补写后仍存在 ${c.length} 个内容缺口`:"小节内容补写完成",a),details:c.map(a=>a.message)},{subtitle:"小节内容补写"})),T(bz,by)}let bE=(0,ai.fW)(w,bz.map(a=>a.content).join("\n\n"));A.enableDocumentBudgetExpansion&&w.minChars&&bE.currentChars<Math.floor(.9*w.minChars)&&(!w.maxChars||bE.currentChars<w.maxChars)&&(0,ba.fx)(by,(0,ba.X5)({type:"validation",roleId:"document-budget-repair",status:"fallback",message:`修复后预算补齐已跳过全文盲扩写:当前 ${bE.currentChars} 字,目标下限 ${w.minChars} 字`,details:["字数差距不再触发全文扩写;仅保留前序章节/小节结构缺口修复结果,避免长时间空烧和套话补写。"]},{subtitle:"修复后预算补齐"}));let bF=ag(ah({...aN,chapters:bz,validationIssues:aw,exportGate:aN.exportGate,executionStages:aM},{forbidDrawingImages:!1,promptRules:D}),bz,{forbidDrawingImages:!1,promptRules:D}),bG=bF.chapters,bH=bF.markdown,bI=(0,aj.yw)(bH,bG.map(a=>({...a,sections:Q(a.content)}))).filter(a=>"empty"===a.reason);if(bI.length>0){let a=Date.now();(0,ba.fx)(by,(0,ba.X5)({type:"llm_review",roleId:"final-section-content-repair",status:"running",message:`最终结构化后补写残留空洞小节:${bI.length} 个问题`,details:bI.map(a=>a.message),progress:{current:1,total:bI.length,label:"最终小节补写"}},{subtitle:"最终小节内容补写"})),T(bG,by);let b=[...bG];for(let a=0;a<bG.length;a+=Math.max(1,bG.length||1)){(0,ay.Te)(V);let c=bG.slice(a,a+Math.max(1,bG.length||1));(await Promise.all(c.map(async a=>{let b=bI.filter(b=>b.chapterTitle===a.title);if(0===b.length)return a;let c=l.find(b=>b.id===a.id||b.title===a.title)||{id:a.id,title:a.title,purpose:"",queries:[],requiredFacts:[],sections:a.sections},d=w.chapterTargets.get(a.id)||1200,e=E.chapterPlans.find(a=>a.chapterId===c.id||a.chapterTitle===c.title),f=[e?.writingGoal,e?.mustCover?.length?`本章必须覆盖:${e.mustCover.join("、")}`:""].filter(Boolean).join("\n");try{let e=await (0,aR.od)(e=>b3({template:m,chapter:c,content:a.content,evidence:a.evidence,missingFacts:a.missingFacts,promptTexts:x,projectContext:F,requirement:W,roleContext:f,targetWords:d,forbidDrawingImages:!1,forcedSections:b,signal:e}),Math.min(3e5,Math.max(9e4,9e4*b.length)),V);if(!e)return a;let g=Q(e);return{...a,content:e,markdown:e,sections:g}}catch{return a}}))).forEach((c,d)=>{b[a+d]=c})}bG=(bF=ag(ah({...aN,chapters:b,validationIssues:aw,exportGate:aN.exportGate,executionStages:aM},{forbidDrawingImages:!1,promptRules:D}),b,{forbidDrawingImages:!1,promptRules:D})).chapters,bH=bF.markdown;let c=(0,aj.qK)(bH,bG);(0,ba.fx)(by,(0,ba.X5)({type:"llm_review",roleId:"final-section-content-repair",status:c.length>0?"fallback":"success",message:(0,ba.AQ)(c.length>0?`最终补写后仍存在 ${c.length} 个内容缺口`:"最终小节内容补写完成",a),details:c.map(a=>a.message)},{subtitle:"最终小节内容补写"})),T(bG,by)}bG=(bF=ag(ah({...aN,chapters:bG,validationIssues:aw,exportGate:aN.exportGate,executionStages:aM},{forbidDrawingImages:!1,promptRules:D}),bG,{forbidDrawingImages:!1,promptRules:D})).chapters,bH=db(c6(cX(bF.markdown,al),al),X);let bJ=cN({facts:al,markdown:bH});bJ.size>0&&aM.push({type:"fact_extraction",roleId:"canonical-facts",status:"success",message:`已决策可信基础事实 ${bJ.size} 项`,details:[...bJ.values()].map(a=>`${a.label}=${a.value}(${a.source},confidence=${a.confidence})`).slice(0,12)});let bK=[...a8];aw=bd((0,aj.kQ)(p,[...aw,...bK.map(a=>({level:"warning",message:a}))],at,bG,bH,m.projectBindings||[],C),cr({markdown:bH,spec:p,summary:r}),cv({markdown:bH,facts:al,summary:r,profile:v}),cs(bH,r),c7(bH,al),cF({markdown:bH,chapters:bG,factsModel:at,template:m,promptBindings:C,promptDocumentRules:D}));let bL=dj(bG,al,bH,{forbiddenTexts:X});bL.patchedCount>0&&(bG=bL.chapters.map(a=>({...a,sections:a.sections||[]})),aw=[...aw,{level:"info",message:`最终审查阶段已补写未落位事实 ${bL.patchedCount} 项`,suggestion:"补写仅使用本项目资料明确事实,未补写商务敏感信息或系统暂未确认内容。"}],bH=db(ag(ah({...aN,chapters:bG,validationIssues:aw,exportGate:aN.exportGate,executionStages:aM},{forbidDrawingImages:!1,promptRules:D}),bG,{forbidDrawingImages:!1,promptRules:D}).markdown,X)),aw=bd(aw,function(a,b,c={}){return di(a,b,{maxItems:c.maxIssues}).map(a=>({level:"warning",message:`已确认事实未在正文中落位:${a.label}=${a.value}`,suggestion:"请将该事实自然写入对应章节或小节,不得改变原始数值和单位。"}))}(bH,[...al,...at.preciseFacts],{maxIssues:30})),bH=ag(bH,bG,{forbidDrawingImages:!1,promptRules:D}).markdown;let bM=(0,ai.ty)(w,bH),bN=(0,ai.PE)(m.generationSettings||m.exportSettings,bH).filter(a=>!(w.minPages&&/低于目标页数/u.test(a.message)));aw=be(bd(aw,bN,bM,ae(bH,m),ad(bH,D)));let bO=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(cG[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:bG,templateChapters:l,factsModel:at,evidence:n}),bP=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,ay.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=cB(a),d=cB(b);return!!(!d||d.length<2||c.includes(d))||(b.match(/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年|万元|元|平方米|㎡|m²|立方米|m³|米|m|mm|cm|台|套|人|项|%|MPa|kPa)?/giu)||[]).some(a=>cB(a).length>=2&&c.includes(cB(a)))}(a,b)?"unplaced":"used",confidence:e.confidence}))}return d}(bH,at),bQ=(e={chapters:bG,templateChapters:l,factsModel:at}).chapters.map(a=>{let b=e.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,ai.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?"章节覆盖完整。":"系统需补齐章节结构、证据绑定、专业控制点和跨章依赖。"}});aw=be(bd(aw,bO.score>=85?[]:[{level:"warning",message:`系统知识库覆盖确认率偏低:${bO.score}%`,suggestion:`${bO.remediation} 未确认事实域:${bO.unconfirmedDomains.map(a=>cG[a]||a).join("、")||"无"}`}],function(a,b={}){let c=a.filter(a=>"unplaced"===a.status&&/项目|工程|编号|地点|规模|范围|工期|质量|安全|资源|材料|设备|验收|\d/u.test(`${a.label}${a.value}`)),d=b.maxIssues&&b.maxIssues>0?b.maxIssues:c.length;return c.slice(0,d).map(a=>({level:"warning",message:`已确认知识库事实未落位:${a.label}=${a.value}`,suggestion:`请将该事实落位到对应章节,并保持来源 ${a.sourceFile||"结构化事实主表"} 的原始口径。${c.length>d?`(共${c.length}个未落位事实,此处显示前${d}个)`:""}`}))}(bP,{maxIssues:20}),bQ.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("、")}`})),M.filter(a=>a.risk.highRisk&&(0===a.requiredFactTotal?a.evidenceCount<8:a.requiredFactCovered<a.requiredFactTotal)).map(a=>({level:"warning",message:`系统知识库召回覆盖需复核:${a.chapterTitle}`,suggestion:`知识库总切片 ${a.risk.totalChunks},当前预加载 ${a.risk.loadedChunks}${a.risk.riskReason?`(${a.risk.riskReason})`:""},已启用深召回;事实覆盖 ${a.requiredFactCovered}/${a.requiredFactTotal},小节覆盖 ${a.sectionCovered}/${a.sectionTotal}。`}))));let bR=(0,aj.Ai)(aw,at,bG),bS=cI({markdown:bH,chapters:bG,issues:aw,knowledgeCoverage:bO,factTraces:bP,chapterCoverage:bQ}),bT=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);if(d.length>0){let a=d.length>12?`${d.length} 项(示例:${d.slice(0,8).map(a=>a.label).join("、")} 等)`:`${d.length} 项(${d.map(a=>a.label).join("、")})`;b.push({priority:"high",title:"事实落位修复",action:`将 ${a} 已确认知识库事实写入对应章节,保持原始数值、单位和来源口径。`})}a.knowledgeCoverage&&a.knowledgeCoverage.score<95&&b.push({priority:"medium",title:"知识库确认覆盖修复",action:"扩大本地知识库检索范围,执行事实补抽和章节证据重分配;这是系统检索、抽取、落位问题,不要求用户追加资料。"});let e=(a.chapterCoverage||[]).filter(a=>a.score<80);if(e.length>0){let a=e.length>10?`${e.slice(0,8).map(a=>a.title).join("、")} 及其他${e.length-8}章`:e.map(a=>a.title).join("、");b.push({priority:"medium",title:"章节覆盖修复",action:`补齐低覆盖章节(${e.length}章):${a}。`})}return a.qualityReport&&!a.qualityReport.passed&&b.push({priority:"medium",title:"交付置信度修复",action:a.qualityReport.actions.join(" ")}),b}({issues:aw,qualityReport:bS,knowledgeCoverage:bO,factTraces:bP,chapterCoverage:bQ});aw=be(bd(aw,(f=bS).passed?[]:[{level:"warning",message:`交付置信度未达目标:${f.deliveryProbability}% / ${f.target}%`,suggestion:f.actions.join(" ")}],bT.filter(a=>"high"===a.priority).map(a=>({level:"warning",message:`修复策略待执行:${a.title}`,suggestion:a.action})))),bR=(0,aj.Ai)(aw,at,bG),bS=cI({markdown:bH,chapters:bG,issues:aw,knowledgeCoverage:bO,factTraces:bP,chapterCoverage:bQ});let bU=[{key:"export-gate",label:"导出门禁",passed:(g={exportGate:bR,qualityReport:bS,repairStrategies:bT}).exportGate.passed,message:g.exportGate.passed?"导出门禁通过":`仍有 ${g.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:g.qualityReport.passed,message:`${g.qualityReport.deliveryProbability}% / ${g.qualityReport.target}%`},{key:"factuality",label:"事实准确性",passed:g.qualityReport.scores.factuality>=85,message:`${g.qualityReport.scores.factuality}/100`},{key:"evidence-coverage",label:"知识库证据覆盖",passed:g.qualityReport.scores.evidenceCoverage>=85,message:`${g.qualityReport.scores.evidenceCoverage}/100`},{key:"professional-depth",label:"专业深度",passed:g.qualityReport.scores.professionalDepth>=80,message:`${g.qualityReport.scores.professionalDepth}/100`},{key:"repair-strategies",label:"修复策略",passed:0===g.repairStrategies.filter(a=>"high"===a.priority).length,message:g.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}],bW=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:B}),bX=bR.blockingIssues.length,bY=(0,aj.Ff)(aw);B.quality.blockingCount+=bY.blocking,B.quality.importantCount+=bY.important,B.quality.minorCount+=bY.minor;let bZ=by.map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:bX>0?"failed":"success",message:`阻断 ${bX},问题 ${aw.length}`}:"export_ready"===a.type?{...a,status:bR.passed?"success":"failed",message:bR.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:a);bZ.push((0,ba.X5)({type:"validation",roleId:"document-delivery-score",status:bS.passed?"success":"fallback",message:bS.summary,details:bS.actions},{subtitle:"交付评分"})),bZ.push((0,ba.X5)({type:"reference",roleId:"knowledge-coverage",status:bO.score>=85?"success":"fallback",message:`知识库确认覆盖率:${bO.score}%(证据 ${bO.evidenceCount} 条,文件 ${bO.confirmedFiles} 份)`,details:[bO.remediation]},{subtitle:"知识库覆盖"})),bZ.push((0,ba.X5)({type:"validation",roleId:"document-review-checklist",status:bU.every(a=>a.passed)?"success":"fallback",message:`交付复核清单:通过 ${bU.filter(a=>a.passed).length}/${bU.length}`,details:bU.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let b$=[...B.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(",");bZ.push((0,ba.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${B.llm.calls} 次,失败 ${B.llm.failures} 次,瞬态重试 ${B.llm.retries} 次,峰值并行 ${B.llm.maxActive},检索 ${B.evidence.searchQueries} 次/${Math.round(B.evidence.searchMs/1e3)} 秒,证据上下文 ${B.evidence.contextChars} 字,噪声过滤 ${B.evidence.filteredNoise} 条,质量问题 阻断${B.quality.blockingCount}/重要${B.quality.importantCount}/轻微${B.quality.minorCount}${b$?`,Top耗时:${b$}`:""}`},{subtitle:"后台诊断"}));let b_=bG.map(a=>({...a,evidence:(0,s.QR)(a.evidence||[],{maxItems:12,maxChars:9e3,preservePinned:!0})}));return{...{...aN,chapters:b_,validationIssues:aw,exportGate:bR,executionStages:bZ,partialChapters:bG.map(a=>({id:a.id,title:a.title,chars:(0,ai.V7)(a.content),status:cQ(a,w.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:b_,reviewMetadata:{chapterSummaries:aX,globalIssues:a0.issues,diagnostics:B,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:m,chapters:l,requirement:W}),knowledgeCoverage:bO,factTraces:bP,chapterCoverage:bQ,retrievalCoverage:M,qualityReport:bS,repairStrategies:bT,reviewChecklist:bU,workflowVersion:cJ,telemetry:bW}},markdown:bH}}var dv=c(70963);function dw(a){return a.replace(/\s+/gu,"").toLowerCase()}var dx=c(14070);async function dy(a){(0,ay.Te)(a.signal);let b=(0,d.QJ)(a.templateId);if(!b)throw Error("Document template not found");let c=e.resolve(a.projectRoot||(0,g.aY)());if(!c)throw Error("No knowledge base project found");let o=(0,f.computeProjectId)(c),p=b,q=(0,g.Qh)(),v=[],w=[],x=(b,c=C)=>{let d=b?[...b].sort((a,b)=>{let c=w.indexOf(a.id),d=w.indexOf(b.id);return(c<0?Number.MAX_SAFE_INTEGER:c)-(d<0?Number.MAX_SAFE_INTEGER:d)}):void 0;a.onProgress?.([...c],d?{chapters:d}:void 0)},y=Math.max(15e3,Math.min(6e4,Number(process.env.DOCUMENT_GENERATION_HEARTBEAT_MS??3e4))),z=async(b,c=C)=>{let d=setInterval(()=>{a.signal?.aborted||x(v,c)},y);try{return await b()}finally{clearInterval(d)}},A=(0,d.N6)(p)||"none",B=(0,i.Mu)(A)?.name||A,C=[(0,ba.X5)({type:"role_binding",roleId:A,status:"running",message:`生成任务已创建,正在读取模板与角色配置:${p.name}`,details:[`当前项目:${o}`,`资料目录:${e.join(c,"knowledgeBase")}`,"正在读取项目资料包和提示词配置"],progress:{current:1,total:4,label:"初始化配置"}},{subtitle:B,roleName:B,order:0})];x();let D=(0,d.bj)(p),E=D.bindings;(0,ba.fx)(C,(0,ba.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在分析模板规范、用户要求与项目资料包",details:["解析 OUTLINE 与模板章节","读取项目资料包","自动识别资料类型并构建项目理解"],progress:{current:1,total:3,label:"准备分析"}},{subtitle:"生成准备",order:C.length})),x();let F=(0,br.Hh)(c,p);if(0===F.length)throw Error("模板未绑定可用项目资料包,请先在模板中绑定需要参与生成的项目文件夹。");let G=(0,br.W9)(c,p),H=(0,br._n)(p,G),{kindByPath:I,processingByPath:J}=(0,br.Hz)(G),K=bq([...D.writerPrompts,...D.chapterPrompts]),L=(0,t.cs)([{text:a.requirement,source:"用户需求",strict:!0},{text:K,source:"提示词角色",strict:!0}]),M=L.length>=2;M&&(p={...b,chapters:L});let N=await z(()=>Promise.resolve((0,k.P)(c,{requirement:a.requirement,boundFilePaths:F})));(0,ba.fx)(C,(0,ba.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在生成自动文档规格并评估生成准备度",details:[`项目资料:${F.length} 份`,`资料类型:${Object.values(G.groups).filter(a=>a.length>0).length} 类`,"生成事实字段与章节约束"],progress:{current:2,total:3,label:"规格评估"}},{subtitle:"生成准备",order:C.length})),x();let O=await z(()=>Promise.resolve((0,j.x)(p,a.requirement||""))),P=O.spec,R=function(a,b=""){let c=`${a?.id||""} ${a?.name||""} ${a?.category||""} ${a?.description||""} ${a?.outputTitle||""} ${b}`;return/施工组织设计|施工方案|危大工程|人、材、机|安全文明施工/u.test(c)?m:l}(p,a.requirement||""),S=(0,r.$)({template:p,spec:P,summary:N,resolvedRoles:[]});if(!S.ready)throw Error(`生成准备度不足:${S.blockingIssues.join(";")}`);let T=[H.prompt,(0,k.F)(N,{publicSafe:!0}),(0,j.N)(P,O.sourceHash,{publicSafe:!0}),(0,r.R)(S,{publicSafe:!0})].filter(Boolean).join("\n\n"),U=[H.prompt,(0,k.F)(N),(0,j.N)(P,O.sourceHash),(0,r.R)(S)].filter(Boolean).join("\n\n"),V=bq([...D.writerPrompts,...D.formattingPrompts]),W=bq([...D.writerPrompts,...D.chapterPrompts,...D.formattingPrompts]),X=bq(D.prompts),Y=(0,h.I)().load().webAccess||{enabled:!1,allowProjectFacts:!1,maxQueriesPerChapter:2,maxResultsPerQuery:3,trustedDomains:[]},Z=function(a){let b=a.attributedPrompts||[],c=[a.promptTexts,a.requirement||""].filter(Boolean).join("\n\n").replace(/\\n/gu,"\n"),d=function(a){let b=a.replace(/\\n/gu,"\n"),c=new Set;for(let a of(/全文必须输出[::]\s*([^。;;\n]+)/u.exec(b)?.[1]||/必须输出(?:的)?表格[::]\s*([^。;;\n]+)/u.exec(b)?.[1]||"").split(/[、,,]/u)){let b=/([\p{Script=Han}A-Za-z0-9()()]{2,30}表)$/u.exec(a.trim())?.[1];b&&b.length>=4&&b.length<=30&&c.add(b)}/项目基本信息表/u.test(b)&&c.add("项目基本信息表");let d=["知识库","提示词","建议补充","资料库","OCR","后台","绑定片段","兜底"];/杜绝|禁止|不得|严禁/u.test(b)&&d.push("施工方","投标人","高度重视","重中之重"),/商务|报价|单价|税率|利润|造价/u.test(b)&&d.push("综合单价","报价明细","单价","税率","增值税","利润","预留金","报价明细表");let e=bD(b,"封面"),f=bD(b,"目录");return{coverPolicy:e,tocPolicy:f,forbidCover:"forbidden"===e,forbidToc:"forbidden"===f,forbiddenTerms:[...new Set(d)],preferredTerms:[{from:"施工方",to:"我公司"},{from:"投标人",to:"我公司"},{from:"高度重视",to:"严格落实"},{from:"重中之重",to:"关键控制事项"}],requiredTables:[...c],requiredKeywords:bA(b),forbiddenPatterns:bB(b)}}(c),e=[...new Set([...d.requiredTables,...function(a){let b=new Set;for(let c of[/(?:必须|应当|需要|全文必须|至少)输出(?:的)?表格[::]\s*([^。;;\n]+)/gu,/(?:必须|应当|需要|全文必须|至少)包含(?:的)?表格[::]\s*([^。;;\n]+)/gu,/(?:表格清单|表格要求)[::]\s*([^。;;\n]+)/gu])for(let d of a.matchAll(c))for(let a of(d[1]||"").split(/[、,,//及和与]/u)){let c=/([\p{Script=Han}A-Za-z0-9()()《》<>]{2,40}表)/u.exec(a.trim())?.[1];c&&b.add(c.replace(/[<>《》]/gu,""))}for(let c of a.matchAll(/([\p{Script=Han}A-Za-z0-9()()]{2,40}表)(?:必须|应当|需要|不得缺失|不可缺失)/gu))b.add(c[1]);return/项目基本信息表/u.test(a)&&b.add("项目基本信息表"),[...b]}(c)])],f=bA(c),g=bB(c),h=function(a){let b=[];for(let c of(/<OUTLINE>([\s\S]*?)<\/OUTLINE>/u.exec(a)?.[1]||"").split(/\r?\n/u)){let a=c.replace(/^\s*(?:\d+[.、.]|[-*])\s*/u,"").trim();a.length>=2&&a.length<=80&&!bv(a)&&b.push(a)}return[...new Set(b)]}(c),i=["知识库","提示词","建议补充","资料库","OCR","后台","绑定片段","兜底"],j=["工程造价","报价","投标报价","报价明细","综合单价","单价","合价","金额","税率","增值税","利润","预留金","暂列金额","最高投标限价","招标控制价"],k=[...new Set([...(d.forbiddenTerms||[]).filter(a=>/施工方|投标人/u.test(a)),.../施工方|投标人/u.test(c)?["施工方","投标人"]:[]])],l=function(a){let b=/(?:不少于|至少|最低|必须生成不少于)\s*(\d+(?:\.\d+)?)\s*(万)?\s*字/u.exec(a);if(!b)return;let c=Number(b[1]);if(Number.isFinite(c)&&!(c<=0))return Math.floor(c*(b[2]?1e4:1))}(c),m=(a.template?.chapters||[]).map(a=>({chapterTitle:a.title,mustInclude:bC(c,RegExp(`${a.title.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}|${a.title.slice(0,6).replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}`,"u")).slice(0,8),mustNotInclude:bC(c,/禁止|不得|严禁|杜绝/u).filter(b=>b.includes(a.title)).slice(0,8)})).filter(a=>a.mustInclude.length>0||a.mustNotInclude.length>0),n=(a.rolePrompts||[]).map(a=>({roleId:a.roleId,focusAreas:bC(a.content,/重点|关注|围绕|响应|体系|措施|质量|安全|工期|资源/u).slice(0,8),mustDo:bC(a.content,/必须|应当|需要|确保|严格/u).slice(0,10),mustNotDo:bC(a.content,/禁止|不得|严禁|杜绝/u).slice(0,10)})).filter(a=>a.focusAreas.length>0||a.mustDo.length>0||a.mustNotDo.length>0),o=[d.coverPolicy&&"unspecified"!==d.coverPolicy?`已识别封面规则:${"required"===d.coverPolicy?"要求生成":"禁止生成"}`:"",d.tocPolicy&&"unspecified"!==d.tocPolicy?`已识别目录规则:${"required"===d.tocPolicy?"要求生成":"禁止生成"}`:"",h.length?`已识别一级章节固定规则 ${h.length} 条`:"",k.length?`已识别禁用主体表达:${k.join("、")}`:"",d.forbiddenTerms.length?`已识别禁用词 ${d.forbiddenTerms.length} 个`:"",e.length?`已识别必需表格:${e.join("、")}`:"",f.length?`已识别必含关键词:${f.join("、")}`:"",g.length?`已识别禁止出现内容:${g.join("、")}`:"",l?`已识别最低字数要求:${l} 字`:"",n.length?`已抽取角色执行规则 ${n.length} 组`:""].filter(Boolean),p=[],q={},r=(a,c,d,e)=>{let f=function(a,b,c){for(let d of a)if(d.content.includes(b))return{promptId:d.promptId,roleId:d.roleId,pattern:c};return{promptId:"system:generation-control",roleId:"generation-control",pattern:c}}(b,d,e);q[a]||(q[a]=[]),q[a].length<24&&q[a].push({...f,matchedText:d}),p.length<60&&p.push({rule:c,source:f,matchedText:d})};for(let a of(d.coverPolicy&&"unspecified"!==d.coverPolicy&&r("coverPolicy",`已识别封面规则:${d.coverPolicy}`,"封面",/封面|cover/u.source),d.tocPolicy&&"unspecified"!==d.tocPolicy&&r("tocPolicy",`已识别目录规则:${d.tocPolicy}`,"目录",/目录|toc/u.source),e))r("requiredTables",`必需表格:${a}`,a,/全文必须输出|必须输出表格|项目基本信息表/u.source);for(let a of f)r("requiredKeywords",`必含关键词:${a}`,a,/必须包含|必须含|应包含|需要包含/u.source);for(let a of g)r("forbiddenPatterns",`禁止内容:${a}`,a,/禁止|不得|严禁|杜绝/u.source);for(let a of h)r("exactHeadings",`固定章节:${a}`,a,/第[一二三四五六七八九十百千\d]+章/u.source);return l&&r("minWords",`最低字数:${l}`,String(l),/\d{3,}\s*字/u.source),{...d,requiredTables:e,requiredKeywords:f,forbiddenPatterns:g,sourceHash:function(a){let b=0x811c9dc5;for(let c=0;c<a.length;c+=1)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193);return(b>>>0).toString(16)}(c),exactHeadings:h,forbidExtraHeadings:/不得合并|不得删除|不得改名|不得新增|严格按.*章节名称|一级章节.*不得/u.test(c)||h.length>0,requiredSubjects:/我公司/u.test(c)?["我公司","项目部"]:[],forbiddenSubjects:k,backendTerms:i,commercialTerms:j,forbiddenTerms:[...new Set([...d.forbiddenTerms,...i,...j,...k])],forbidFabrication:/不得编造|严禁编造|不得擅自|资料未明确|系统暂未|事实真实性/u.test(c),requireEvidenceForQuantities:/量化|参数|数值|工程实体参数|资料中明确/u.test(c),preferProjectFacts:/事实优先|项目事实|真实性高于/u.test(c),minWords:l,minChars:l,chapterRules:m,roleRules:n,executionSummary:o,ruleSources:Object.keys(q).length>0?q:void 0,extractionTrace:p.length>0?p:void 0}}({promptTexts:[T,X].filter(Boolean).join("\n\n"),requirement:a.requirement,template:p,rolePrompts:D.prompts}),$=[function(a){let b=[`运行时规则版本:${a.sourceHash}`,"required"===a.coverPolicy?"用户要求输出封面时必须保留封面;未要求时不得由系统擅自决定。":"","required"===a.tocPolicy?"用户要求输出目录时必须保留目录,并确保目录只来自最终合法正文标题。":"",a.forbidCover?"用户明确禁止输出封面。":"",a.forbidToc?"用户明确禁止输出目录、目录说明或导航页。":"",a.exactHeadings.length?`一级章节必须严格使用:${a.exactHeadings.join(";")}`:"",a.forbidExtraHeadings?"不得新增、删除、合并或改名一级章节。":"",a.requiredSubjects.length?`正文主体优先使用:${a.requiredSubjects.join("、")}`:"",a.forbiddenSubjects.length?`禁止主体表达:${a.forbiddenSubjects.join("、")}`:"",a.forbidFabrication?"不得编造系统暂未从知识库确认的项目事实、工程实体参数、人名、联系方式或品牌;应通过扩大检索、事实补抽或落位修复解决。":"",a.requireEvidenceForQuantities?"涉及数量、工期、质量标准、规格型号等参数时必须以绑定资料中的明确事实为准。":"",a.commercialTerms.length?`禁止输出商务敏感内容:${a.commercialTerms.join("、")}`:"",a.backendTerms.length?`禁止输出系统内部话术:${a.backendTerms.join("、")}`:"",a.requiredTables.length?`必须输出以下正式 Markdown 表格:${a.requiredTables.join("、")}。表格必须包含表名、表头、分隔线和数据行。`:"",a.requiredKeywords?.length?`正文必须覆盖以下关键词或要点:${a.requiredKeywords.join("、")}。`:"",a.forbiddenPatterns?.length?`正文禁止出现以下内容:${a.forbiddenPatterns.join("、")}。`:"",a.minWords?`全文不少于 ${a.minWords} 字。`:""].filter(Boolean);return`以下规则由系统运行时从用户绑定指令中自动抽取,不作为用户可编辑内容。生成、检查和修复必须共同遵守:
189
189
  ${b.map((a,b)=>`${b+1}. ${a}`).join("\n")}`}(Z),!Y.enabled?"":"公开资料补充使用规则:\n1. 公开资料只可用于补充通用规范、政策、工艺和措施。\n2. 不得使用公开资料新增或修改项目名称、建设地点、建设规模、工期、质量标准、工程量、材料规格、图纸参数、商务数据。\n3. 本地项目资料与公开资料冲突时,必须以本地项目资料为准。\n4. 不得在正文中出现任何检索过程、外部页面、工具调用或系统内部过程性表述。\n5. 不得把公开资料中的其他项目案例参数写入本项目正文。"].filter(Boolean).join("\n\n"),_=[T,$,`生成前规划章节结构:
190
- ${p.chapters.map(a=>[`- ${a.title}`,a.sections?.length?` 规划小节:${a.sections.join("、")}`:"",a.tableSections?.length?` 表格小节:${a.tableSections.join("、")}`:"",a.tableRequirements?.length?` 表格内容要求:${a.tableRequirements.join(";")}`:"",a.tablePlans?.length?` 结构化表格规划:${a.tablePlans.map(a=>`${a.title}(${a.fields.map(a=>a.name).join("/")})`).join(";")}`:""].filter(Boolean).join("\n")).join("\n")}`,V||W].filter(Boolean).join("\n\n"),aa=[U,$,bq([...D.extractionPrompts,...D.referencePrompts])].filter(Boolean).join("\n\n"),ab=[T,$,bq([...D.writerPrompts,...D.chapterPrompts,...D.formattingPrompts])].filter(Boolean).join("\n\n");(0,ba.fx)(C,(0,ba.X5)({type:"validation",roleId:"document-preparation",status:"success",message:`模板规范与项目资料理解完成,识别 ${F.length} 份项目资料`,details:[`提示词绑定:${E.length} 个`,`项目资料包:${G.materialRoots.join("、")||"当前知识库"}`,M?`识别 OUTLINE 章节:${L.length} 个`:"未识别显式 OUTLINE,使用模板章节"],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备",order:C.length})),x();let ac=new Set(F),ad=new Map([...I.entries()].map(([a,b])=>[a,(0,br._W)(b)])),ae=new Map([...J.entries()].map(([a,b])=>[a,b]));(0,ba.fx)(C,(0,ba.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:"running",message:"正在读取项目资料包索引",details:["使用上传阶段已完成的解析、切片和索引结果","不在生成流程中重新解析或入库","准备按资料类型召回章节证据"],progress:{current:1,total:3,label:"读取索引"}},{subtitle:"知识库检索",order:C.length})),x();let af=await z(()=>q.getProject(c)),ag=function(a,b){let c=new Set(b.filter(Boolean)),d=(a.listFiles?.()||[]).filter(a=>0===c.size||c.has(a.relativePath)),e=new Set(d.map(a=>a.relativePath)),f=[...c].filter(a=>!e.has(a)),g=d.filter(a=>0===Math.max(0,Math.ceil(Number(a.chunkCount)||0))).map(a=>a.relativePath),h=d.filter(a=>"error"===a.status).map(a=>a.relativePath),i="function"==typeof a.countPendingIndexJobs?a.countPendingIndexJobs():0,j="function"==typeof a.getVectorStatus?a.getVectorStatus():void 0,k=d.filter(a=>"error"!==a.status&&Math.max(0,Math.ceil(Number(a.chunkCount)||0))>0),l=k.map(a=>a.relativePath),m=k.reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0),n=[...ds("部分绑定文件未完成索引,已自动跳过",f),...ds("部分绑定文件没有可用切片,已自动跳过",g),...ds("部分绑定文件索引失败,已自动跳过",h)],o=c.size>0&&0===m?["所有绑定文件均无可用切片"]:[],p=[...n,...i>0?[`仍有 ${i} 个待索引任务,建议等待索引完成后生成`]:[],...j&&"ready"!==j.status?[`向量索引状态为 ${j.status},当前召回质量可能下降`]:[]];return{scopedRecords:d,usablePaths:l,missingFiles:f,emptyFiles:g,errorFiles:h,pendingJobs:i,vectorStatus:j,usableChunkCount:m,blockingIssues:o,warnings:p}}(af,[...ac]);if(ag.blockingIssues.length>0)throw Error(`生成前知识索引不可用:${ag.blockingIssues.join(";")}`);let ah=new Set(ag.usablePaths),ak=dt(af,[...ah],a.maxEvidencePerChapter),as=ag.pendingJobs>0||ag.vectorStatus&&"ready"!==ag.vectorStatus.status||0===ag.usableChunkCount,at=function(a){let b=Math.max(0,Math.ceil(a.totalChunks||0)),c=Math.max(0,Math.ceil(a.loadedChunks||0)),d=Math.max(0,b-c),e=b>0?c/b:1,f=[...b>=1e3&&e<.35?["切片未完全预加载"]:[],...!1===a.vectorReady?["向量索引未就绪"]:[]];return{totalChunks:b,loadedChunks:c,omittedChunks:d,loadedRatio:e,highRisk:f.length>0,riskReason:f.join("、")||void 0}}({totalChunks:ag.usableChunkCount,loadedChunks:ag.usableChunkCount,vectorReady:ag.vectorStatus?"ready"===ag.vectorStatus.status:void 0});(0,ba.fx)(C,(0,ba.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:as?"fallback":"success",message:`已读取知识索引:项目资料 ${ag.scopedRecords.length} 份,可用切片 ${ag.usableChunkCount} 条`,details:[`项目资料:${ac.size} 份`,`可用证据文件:${ah.size} 份`,`向量状态:${ag.vectorStatus?.status||"unknown"}`,...ag.warnings,"后续将按招标正文/清单/图纸/补疑等资料类型召回"],progress:{current:3,total:3,label:"索引已就绪"}},{subtitle:"知识库检索",order:C.length})),x(),(0,ay.Te)(a.signal);let au=[],av=[],aw={enabled:Y.enabled,queries:[],evidenceCount:0,filteredCount:0,chapters:[]},ax=[],aA=[],aB=[],aC=[],aD=[],aF=-1,aG=new Map,aH=new Map,aI=(a,b)=>{let c=`${a}::${b.maxChunkContentChars}`;if(!aH.has(c))try{aH.set(c,af.getFileDetail?.(a,b))}catch{aH.set(c,void 0)}return aH.get(c)},aJ=async(a,b,d,e)=>{let f=dk(e),g=(0,ay.c6)({query:a,scopedFilePaths:b,limit:d,weights:f,generationMode:!1}),h=aG.get(g);if(h)return h;let i=await q.search(c,a,{scope:"project",filters:{filePaths:b},limit:d,weights:f,generationMode:!1});return aG.set(g,i.results),i.results},aK={stage:(0,ba.X5)({type:"file_understanding",roleId:"project-understanding",status:"success",message:`已完成项目资料理解:${G.files.length} 份资料,${Object.values(G.groups).filter(a=>a.length>0).length} 类资料类型`,details:H.prompt.split("\n").slice(0,16)},{subtitle:"项目资料理解",order:C.length})};(0,ba.fx)(C,aK.stage),x();let aL=await cT({manager:q,project:af,projectRoot:c,scopedFilePaths:[...ac].filter(Boolean).sort(),fileRoleByPath:ad,fileProcessingByPath:ae,signal:a.signal});aL.length>0&&(au.push(...aL),(0,ba.fx)(C,(0,ba.X5)({type:"knowledge_retrieval",roleId:"project-basic-evidence",status:"success",message:`已锁定项目基础事实证据 ${aL.length} 条`,details:aL.slice(0,8).map(a=>`${e.basename(a.filePath)}|${a.sectionTitle||"正文片段"}|score=${a.score.toFixed(2)}`)},{subtitle:"基础事实召回",order:C.length})),x());let aP=aT(au,p,P),aQ=aZ(au),aU=a$(au,R),aV=a9([...aP,...aQ,...aU],aS(au),ax,P,R);(0,ba.fx)(C,(0,ba.X5)({type:"file_understanding",roleId:"project-graph",status:"running",message:`正在进行项目资料图谱分析:${au.length} 条证据 → LLM 结构化提取`,details:["提取:工程内容、施工方法、材料设备、技术标准、重点难点"],progress:{current:2,total:3,label:"图谱分析"}},{subtitle:"项目资料图谱分析",order:C.length})),x();let aX=await z(()=>(0,dv.i)({evidence:au,signal:a.signal,projectRoot:c,requirement:a.requirement,templateId:p.id}),C);if((0,ba.fx)(C,aX.stage),x(),!aX.graph)throw Error(aX.stage.message||"项目图谱分析失败,已阻断正文生成");let aY=aX.graph;H=(0,br._n)(p,G,aY);let a_=function(a){var b;let c=(0,ay.c6)({version:"canonical-facts-v2",requirement:a.requirement||"",templateId:a.templateId||"",requiredKeys:a.requiredKeys||[],facts:a.facts.map(a=>({key:a.key,fieldId:a.fieldId,fieldName:a.fieldName,value:a.value,sourceFile:a.sourceFile,roleId:a.roleId,confidence:a.confidence})).sort((a,b)=>`${a.sourceFile}${a.key}${a.value}`.localeCompare(`${b.sourceFile}${b.key}${b.value}`)),graphHash:a.projectGraph?(0,ay.c6)(a.projectGraph):"",markdownHash:a.markdown?(0,ay.c6)(a.markdown.slice(0,2e4)):""}),d=function(a,b){let c=cP(a);if(c)try{let a=JSON.parse(aO.readFileSync(e.join(c,`canonical-facts-${b}.json`),"utf8"));return a&&a.byKey?a:void 0}catch{return}}(a.projectRoot,c);if(d)return d;let f=cN({facts:a.facts,markdown:a.markdown}),g={};for(let[a,b]of f.entries())g[a]=function(a){let b=a.source.includes("generated_markdown")?"generated_markdown":a.source.includes("evidence")?"evidence":"structured_fact";return{key:a.fieldKey,label:a.label,value:a.value,normalizedValue:aW(a.value),sourceType:b,sourceFile:a.source,confidence:a.confidence,priority:cO(b),locked:cO(b)>=80,selectedReason:a.selectedReason}}(b);let h=a.facts||[],i=[];for(let a of[{key:"project_name",label:"项目名称",pattern:/项目名称|工程名称|招标项目名称|project_name/u,bucket:"projectIdentity"},{key:"project_code",label:"项目编号",pattern:/项目编号|招标项目编号|project_code/u,bucket:"projectIdentity"},{key:"owner",label:"招标人",pattern:/招标人|建设单位|发包人|owner/u,bucket:"projectIdentity"},{key:"project_location",label:"建设地点",pattern:/建设地点|实施地点|project_location/u,bucket:"projectIdentity"},{key:"project_scale",label:"建设规模",pattern:/建设规模|工程规模|project_scale/u,bucket:"projectScope"},{key:"construction_scope",label:"施工范围",pattern:/施工范围|招标范围|工程范围/u,bucket:"projectScope"},{key:"duration",label:"计划工期",pattern:/计划工期|合同工期|总工期|schedule_requirement|duration/u,bucket:"schedule"},{key:"quality_target",label:"质量目标",pattern:/质量标准|质量目标|quality_standard/u,bucket:"quality"}]){let b=function(a,b,c,d){return a.filter(a=>d.test(`${a.fieldId||""}${a.key||""}${a.fieldName||""}`)).map(a=>(function(a,b,c){let d=(0,ay.lG)(a.value),e=function(a){let b=`${a.sourceFile||""} ${a.sourceRef?.sectionTitle||""} ${a.roleId||""}`;return/合同/u.test(b)?"contract":/招标|公告|前附表|需求书/u.test(b)?"tender":/清单|工程量|BOQ|报价/u.test(b)?"boq":/图纸|设计|CAD|DWG/u.test(b)?"drawing":/规范|标准/u.test(b)?"standard":"structured_fact"}(a);return{key:b,label:c,value:d,normalizedValue:aW(d),sourceType:e,sourceFile:a.sourceFile,sourceRef:a.sourceRef?.sectionTitle,confidence:Math.round(100*(a.confidence||.5)),priority:cO(e),locked:cO(e)>=80,selectedReason:"按资料来源优先级和字段置信度决策"}})(a,b,c)).filter(a=>a.value&&!/资料未明确|系统暂未确认/u.test(a.value)).sort((a,b)=>b.priority-a.priority||b.confidence-a.confidence||a.value.length-b.value.length)}(h,a.key,a.label,a.pattern);!g[a.key]&&b.length>0&&(g[a.key]=b[0]);let c=function(a,b,c){let d=[...new Map(c.map(a=>[a.normalizedValue,a])).values()];if(d.length<=1)return;let e=Math.max(...d.map(a=>a.priority)),f=d.filter(a=>a.priority===e);return{key:a,label:b,values:d.map(a=>({value:a.value,sourceFile:a.sourceFile,priority:a.priority,confidence:a.confidence})),decision:1===f.length?"highest_priority_selected":"manual_review_required"}}(a.key,a.label,b);c&&i.push(c)}let j=(b=a.projectGraph)?[...(b.resources||[]).map(a=>({key:`resource_${a.type}_${a.name}`,label:"equipment"===a.type?"机械设备":"labor"===a.type?"劳动力":"材料资源",value:[a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" "),normalizedValue:aW([a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:cO("projectGraph"),locked:!1,selectedReason:"来自项目图谱资源节点"})).filter(a=>a.value),...(b.risks||[]).map(a=>({key:`risk_${a.risk}`,label:"风险源",value:[a.risk,a.level,a.mitigation].filter(Boolean).join(" "),normalizedValue:aW([a.risk,a.level,a.mitigation].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:cO("projectGraph"),locked:!1,selectedReason:"来自项目图谱风险节点"})).filter(a=>a.value)]:[],k=j.filter(a=>/resource_/u.test(a.key)),l=j.filter(a=>/risk_/u.test(a.key));for(let a of j)g[a.key]||(g[a.key]=a);let m=(a.requiredKeys||[]).filter(a=>!g[a]).map(a=>({key:a,label:cK.find(b=>b.key===a)?.label||a,reason:"未从用户输入、招标资料、清单、图纸或项目图谱中确认该事实"})),n={projectIdentity:{projectName:g.project_name,projectCode:g.project_code,owner:g.owner,location:g.project_location},projectScope:{scale:g.project_scale,constructionScope:g.construction_scope},schedule:{duration:g.duration||g.schedule_requirement},quality:{target:g.quality_target||g.quality_standard},safety:{risks:l},resources:{resources:k},environment:{},constraints:{},byKey:g,conflicts:i,gaps:m},o=cP(a.projectRoot);return o&&aO.writeFileSync(e.join(o,`canonical-facts-${c}.json`),JSON.stringify(n,null,2)),n}({facts:[...aP,...aQ,...aU],projectGraph:aY,requiredKeys:cK.map(a=>a.key),projectRoot:c,requirement:a.requirement,templateId:p.id});aV.canonical=a_;let a0=(0,t._9)(p,P,{preserveExplicitOutline:M}),a1=aM({chapters:function(a){if(!function(a){let b=am(`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`);return!!/施工组织设计|施工组织|施组|技术标|投标技术|施工方案/u.test(b)||["施工","工程","质量","安全","进度","文明","部署","方案"].filter(a=>b.includes(a)).length>=3&&!/监理|可研|运维|维护|保养/u.test(b)}(a))return a.chapters;let b=ao(a),c=am(`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>`${a.title} ${(a.sections||[]).join(" ")}`).join(" ")}`),d=a.chapters.some(a=>/概况|部署|总体|组织|主要施工方案|保障|保证|综合措施|管理体系/u.test(a.title)&&!/雨季|冬季|高温|防汛|扬尘|噪声|工资|劳务|应急|BIM|智慧|管线|交通导改/u.test(a.title)),e=al.filter(a=>ap(a,b,c)),f=new Set,g=a.chapters.map(a=>({...a,sections:[...a.sections||[]],queries:[...a.queries||[]],requiredFacts:[...a.requiredFacts||[]],tableSections:[...a.tableSections||[]]}));for(let a of e){let e=g.map((b,c)=>({index:c,score:aq(b.title,a),chapter:b})).filter(d=>(function(a,b,c,d){var e;if(!ap(a,c,d))return!1;let f=am(b.title);if(a.aliases.some(a=>f.includes(am(a)))||a.sectionItems.some(a=>f.includes(am(a))))return!0;if(e=b.title,/雨季|冬季|高温|防汛|扬尘|噪声|工资|劳务|实名|应急|BIM|智慧|管线|交通导改|垃圾分类|多塔|成品保护/u.test(e))return!1;let g=aq(b.title,a);return g>=10||("optional"===a.level?g>=12||/BIM|智慧|数字|创新/iu.test(d):"conditional"===a.level?g>=8||a.projectTypes?.some(a=>c.includes(a))===!0||a.aliases.some(a=>d.includes(am(a))):g>=6)})(a,d.chapter,b,c)).sort((a,b)=>b.score-a.score),h=e[0]?.index??(d&&("core"===a.level||"mandatory"===a.level)?ar(a,g):-1);if(h<0)continue;let i=g[h],j=function(a,b){let c=am(b.title);return a.aliases.some(a=>c.includes(am(a)))||c.includes(am(a.title)),a.title}(a,i);i.sections=an(i.sections,[j,...a.sectionItems],50),i.queries=an(i.queries,[a.title,...a.queries],30),i.requiredFacts=an(i.requiredFacts,a.facts,30),i.tableSections=an(i.tableSections,a.tableSections||[],20),i.purpose=`${i.purpose};系统已按施工组织设计标准模块库自动挂靠“${a.title}”,仅在本章范围内展开与章节语义、项目类型和资料事实合理相关的内容,禁止机械塞入无关内容。`,f.add(a.id)}for(let a of d?e.filter(a=>("mandatory"===a.level||"core"===a.level)&&!f.has(a.id)):[]){let b=ar(a,g),c=g[b];c.sections=an(c.sections,[a.title,...a.sectionItems],50),c.queries=an(c.queries,[a.title,...a.queries],30),c.requiredFacts=an(c.requiredFacts,a.facts,30),c.tableSections=an(c.tableSections,a.tableSections||[],20),c.purpose=`${c.purpose};系统已补足施工组织设计必备模块“${a.title}”,需以合理挂靠方式呈现,不改变用户一级章节。`}return g}({template:p,chapters:a0,requirement:a.requirement}),projectGraph:aY,canonicalFacts:a_});p={...p,chapters:a1};let bb=new Map,bc=new Set;for(let a of[...aY.works,...aY.methods,...aY.resources,...aY.schedule,...aY.standards,...aY.risks,...aY.requirements,...aY.siteConditions])(a.sourceFiles||[]).forEach(a=>bc.add(a));for(let a of a1){let b=[a.title,a.purpose,...a.sections||[],...a.requiredFacts||[],...a.queries||[]].join(" "),c=c=>c&&((0,dx.C1)(c,b,.18)||(0,dx.C1)(c,a.title,.12)),d=/概况|总体|部署|施工|进度|工期|质量|安全|资源|人材机|材料|机械|劳动力|风险|危大|绿色|环保/u.test(b),e=aY.works.filter(a=>a.name&&(c(a.name)||d)),f=aY.methods.filter(a=>a.name&&(c(a.name)||(a.applicableWorks||[]).some(c)||d)),g=aY.resources.filter(a=>a.name&&(c(a.name)||/资源|人材机|材料|机械|劳动力/u.test(b)&&/material|equipment|labor/u.test(a.type))),h=aY.gaps.filter(a=>c(a)||d),i=new Set;for(let a of e)(a.sourceFiles||[]).forEach(a=>i.add(a));for(let a of f)(a.sourceFiles||[]).forEach(a=>i.add(a));for(let a of g)(a.sourceFiles||[]).forEach(a=>i.add(a));0===i.size&&d&&[...bc].slice(0,12).forEach(a=>i.add(a)),bb.set(a.id,{graphFiles:i,graphBoqItems:g.map(a=>({name:a.name,quantity:a.quantity,unit:a.unit,sourceFiles:a.sourceFiles||[]})),graphWorks:e.map(a=>a.name),graphMethods:f.map(a=>a.name),gaps:h})}(0,ba.fx)(C,(0,ba.X5)({type:"file_understanding",roleId:"project-graph-match",status:"success",message:`图谱→章节映射完成:${aY.works.length}工程 ${aY.methods.length}工法 ${aY.resources.length}资源 → ${a1.length}章`,details:a1.map(a=>{let b=bb.get(a.id);return`${(0,t.GQ)(a.title)}:图谱文件${b?.graphFiles.size||0}个,BOQ项${b?.graphBoqItems.length||0}个`})},{subtitle:"图谱章节映射"})),x();let bd=a1,be=H.prompt,bf=[be,aE({template:{...p,chapters:bd},chapters:bd,factsModel:aV,requirement:a.requirement})].filter(Boolean).join("\n\n"),bg={...p,chapters:bd},bh=function(a,b){let c=a.replace(/\\n/gu,"\n"),d=new Map,e=[...c.matchAll(/第([一二两三四五六七八九十\d]+)章[^\n。;;]{0,80}(?:强制|必须|挂靠|小节|排序|最先|之后|之前)/gu)];for(let a of e){let b=function(a){let b={零:0,一:1,二:2,两:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};if(/^\d+$/u.test(a))return Number(a);if(void 0!==b[a])return b[a];if("十"===a)return 10;let c=/^(?:(一|二|两|三|四|五|六|七|八|九)?)十(?:(一|二|两|三|四|五|六|七|八|九))?$/u.exec(a);if(c)return 10*(c[1]?b[c[1]]:1)+(c[2]?b[c[2]]:0)}(a[1]);if(!b)continue;let f=Math.max(0,a.index||0),g=e.find(a=>(a.index||0)>f)?.index,h=c.slice(f,Math.min(c.length,g??f+1400));if(by(h)&&!/(强制小节|必须小节|以下小节设置和排序|必须设置独立的|必须包含独立的)/u.test(h))continue;let i=function(a){let b=/(?:以下小节设置和排序|强制小节|必须小节)[::]\s*([\s\S]*?)(?:\n\s*#{2,6}\s|\n\s*第[一二两三四五六七八九十\d]+章|$)/u.exec(a)?.[1];if(b){let c=bz([...b.matchAll(/(?:^|\n)\s*\d+[..、]\s*([^——\-—::。;;\n]{2,30})(?:[——\-—::]|,|,|。|;|;|\n|$)/gu)].map(a=>a[1]),a);if(c.length>0)return c}let c=[];for(let b of a.matchAll(/第[一二两三四五六七八九十\d]+章[^。;;\n]{0,50}(?:强制)?(?:包含|设置|输出|排序|挂靠)[^::。;;\n]{0,20}[::]\s*([^。;;\n]{2,120})/gu))for(let a of b[1].split(/[、,,//及和与]/u))c.push(a);for(let b of a.matchAll(/[“"]([^”"]{2,30})[”"]\s*(?:二级)?小节/gu))c.push(b[1]);for(let b of a.matchAll(/([\p{Script=Han}A-Za-z0-9()()]{2,30})(?:——|—|-|:|:)\s*(?:独立的)?(?:二级)?小节/gu))c.push(b[1]);for(let b of a.matchAll(/(?:必须|应当|需|需要|包含|设置|输出)[^。;;\n]{0,30}(?:独立的)?(?:二级)?小节[::]\s*([^。;;\n]{2,80})/gu))for(let a of b[1].split(/[、,,//及和与]/u))c.push(a);return bz(c,a)}(h);if(0===i.length)continue;let j=d.get(b)||{blocks:[],titles:[]};for(let a of(j.blocks.push(h),i))j.titles.some(b=>bx(b,a))||j.titles.push(a);d.set(b,j)}return[...d.entries()].map(([a,c])=>{let d=b?.[a-1];return{chapterIndex:a-1,chapterTitle:d?.title,source:c.blocks[0]?.split("\n").find(a=>a.trim())?.trim().slice(0,120),requiredSections:c.titles.map((a,b)=>({title:a,order:b+1,required:!0,source:c.blocks[0]?.slice(0,240)}))}})}([_,a.requirement||""].filter(Boolean).join("\n\n"),bd),bk=(0,ai.tF)({requirement:a.requirement,promptTexts:_,template:bg,chapters:bd,spec:P}),bn=0,bo=0;bd=aM({chapters:await Promise.all(bd.map(async(b,c)=>{if(b.sections?.length){bn+=1;let a=bE([...bh.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,t.GQ)(a.chapterTitle)===(0,t.GQ)(b.title)).flatMap(a=>a.requiredSections.sort((a,b)=>(a.order||0)-(b.order||0)).map(a=>a.title)),...b.sections],b.title);return{...b,sections:a.length?a:bE(b.sections,b.title)}}bo+=1;let d=(0,s.QR)(au.filter(a=>a.chapterId===b.id||(0,u.Lk)(a,b.title)),{maxChars:(0,s.Pc)(bk.chapterTargets.get(b.id)||1200),preservePinned:!0}),e=H.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",f=de(D,b),g=await bF({template:bg,chapter:b,chapterIndex:c,evidence:d,promptTexts:f.promptTexts,projectContext:bf,requirement:a.requirement,roleContext:e,targetWords:bk.chapterTargets.get(b.id)||1200,structuralRules:bh,signal:a.signal}),h=bh.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,t.GQ)(a.chapterTitle)===(0,t.GQ)(b.title)).flatMap(a=>a.requiredSections.map(a=>`强制小节:${a.title}`));return(0,ba.fx)(C,(0,ba.X5)({type:"validation",roleId:"section-planning",promptId:f.primaryPromptId,status:g.length?"success":"fallback",message:`${(0,t.GQ)(b.title)} 小节规划${g.length?`生成 ${g.length} 个小节`:"未生成可用小节"}`,details:[...f.promptDetails,...h,...g.length?g.map(a=>`规划小节:${a}`):["规划结果为空或被污染过滤"]]},{subtitle:"小节规划"})),g.length?{...b,sections:g}:b})),projectGraph:aY,canonicalFacts:a_});let bs=aE({template:p={...p,chapters:bd},chapters:bd,factsModel:aV,requirement:a.requirement});bf=[be,bs].filter(Boolean).join("\n\n"),(0,ba.fx)(C,(0,ba.X5)({type:"validation",roleId:"document-blueprint",status:"success",message:"已生成全局事实主表与文档蓝图,后续章节和小节将共用同一套专业约束",details:bs.split("\n").slice(0,12)},{subtitle:"全局蓝图"}));let bt=(0,ai.tF)({requirement:a.requirement,promptTexts:_,template:p,chapters:bd,spec:P});w=bd.map(a=>a.id);let bu=function(a){let b=a.template.chapters.length,c=b>0?a.targetWords/b:a.targetWords,d=`${a.template.name}
190
+ ${p.chapters.map(a=>[`- ${a.title}`,a.sections?.length?` 规划小节:${a.sections.join("、")}`:"",a.tableSections?.length?` 表格小节:${a.tableSections.join("、")}`:"",a.tableRequirements?.length?` 表格内容要求:${a.tableRequirements.join(";")}`:"",a.tablePlans?.length?` 结构化表格规划:${a.tablePlans.map(a=>`${a.title}(${a.fields.map(a=>a.name).join("/")})`).join(";")}`:""].filter(Boolean).join("\n")).join("\n")}`,V||W].filter(Boolean).join("\n\n"),aa=[U,$,bq([...D.extractionPrompts,...D.referencePrompts])].filter(Boolean).join("\n\n"),ab=[T,$,bq([...D.writerPrompts,...D.chapterPrompts,...D.formattingPrompts])].filter(Boolean).join("\n\n");(0,ba.fx)(C,(0,ba.X5)({type:"validation",roleId:"document-preparation",status:"success",message:`模板规范与项目资料理解完成,识别 ${F.length} 份项目资料`,details:[`提示词绑定:${E.length} 个`,`项目资料包:${G.materialRoots.join("、")||"当前知识库"}`,M?`识别 OUTLINE 章节:${L.length} 个`:"未识别显式 OUTLINE,使用模板章节"],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备",order:C.length})),x();let ac=new Set(F),ad=new Map([...I.entries()].map(([a,b])=>[a,(0,br._W)(b)])),ae=new Map([...J.entries()].map(([a,b])=>[a,b]));(0,ba.fx)(C,(0,ba.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:"running",message:"正在读取项目资料包索引",details:["使用上传阶段已完成的解析、切片和索引结果","不在生成流程中重新解析或入库","准备按资料类型召回章节证据"],progress:{current:1,total:3,label:"读取索引"}},{subtitle:"知识库检索",order:C.length})),x();let af=await z(()=>q.getProject(c)),ag=function(a,b){let c=new Set(b.filter(Boolean)),d=(a.listFiles?.()||[]).filter(a=>0===c.size||c.has(a.relativePath)),e=new Set(d.map(a=>a.relativePath)),f=[...c].filter(a=>!e.has(a)),g=d.filter(a=>0===Math.max(0,Math.ceil(Number(a.chunkCount)||0))).map(a=>a.relativePath),h=d.filter(a=>"error"===a.status).map(a=>a.relativePath),i="function"==typeof a.countPendingIndexJobs?a.countPendingIndexJobs():0,j="function"==typeof a.getVectorStatus?a.getVectorStatus():void 0,k=d.filter(a=>"error"!==a.status&&Math.max(0,Math.ceil(Number(a.chunkCount)||0))>0),l=k.map(a=>a.relativePath),m=k.reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0),n=[...ds("部分绑定文件未完成索引,已自动跳过",f),...ds("部分绑定文件没有可用切片,已自动跳过",g),...ds("部分绑定文件索引失败,已自动跳过",h)],o=c.size>0&&0===m?["所有绑定文件均无可用切片"]:[],p=[...n,...i>0?[`仍有 ${i} 个待索引任务,建议等待索引完成后生成`]:[],...j&&"ready"!==j.status?[`向量索引状态为 ${j.status},当前召回质量可能下降`]:[]];return{scopedRecords:d,usablePaths:l,missingFiles:f,emptyFiles:g,errorFiles:h,pendingJobs:i,vectorStatus:j,usableChunkCount:m,blockingIssues:o,warnings:p}}(af,[...ac]);if(ag.blockingIssues.length>0)throw Error(`生成前知识索引不可用:${ag.blockingIssues.join(";")}`);let ah=new Set(ag.usablePaths),ak=dt(af,[...ah],a.maxEvidencePerChapter),as=ag.pendingJobs>0||ag.vectorStatus&&"ready"!==ag.vectorStatus.status||0===ag.usableChunkCount,at=function(a){let b=Math.max(0,Math.ceil(a.totalChunks||0)),c=Math.max(0,Math.ceil(a.loadedChunks||0)),d=Math.max(0,b-c),e=b>0?c/b:1,f=[...b>=1e3&&e<.35?["切片未完全预加载"]:[],...!1===a.vectorReady?["向量索引未就绪"]:[]];return{totalChunks:b,loadedChunks:c,omittedChunks:d,loadedRatio:e,highRisk:f.length>0,riskReason:f.join("、")||void 0}}({totalChunks:ag.usableChunkCount,loadedChunks:ag.usableChunkCount,vectorReady:ag.vectorStatus?"ready"===ag.vectorStatus.status:void 0});(0,ba.fx)(C,(0,ba.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:as?"fallback":"success",message:`已读取知识索引:项目资料 ${ag.scopedRecords.length} 份,可用切片 ${ag.usableChunkCount} 条`,details:[`项目资料:${ac.size} 份`,`可用证据文件:${ah.size} 份`,`向量状态:${ag.vectorStatus?.status||"unknown"}`,...ag.warnings,"后续将按招标正文/清单/图纸/补疑等资料类型召回"],progress:{current:3,total:3,label:"索引已就绪"}},{subtitle:"知识库检索",order:C.length})),x(),(0,ay.Te)(a.signal);let au=[],av=[],aw={enabled:Y.enabled,queries:[],evidenceCount:0,filteredCount:0,chapters:[]},ax=[],aA=[],aB=[],aC=[],aD=[],aF=-1,aG=new Map,aH=new Map,aI=(a,b)=>{let c=`${a}::${b.maxChunkContentChars}`;if(!aH.has(c))try{aH.set(c,af.getFileDetail?.(a,b))}catch{aH.set(c,void 0)}return aH.get(c)},aJ=async(a,b,d,e)=>{let f=dk(e),g=(0,ay.c6)({query:a,scopedFilePaths:b,limit:d,weights:f,generationMode:!1}),h=aG.get(g);if(h)return h;let i=await q.search(c,a,{scope:"project",filters:{filePaths:b},limit:d,weights:f,generationMode:!1});return aG.set(g,i.results),i.results},aK={stage:(0,ba.X5)({type:"file_understanding",roleId:"project-understanding",status:"success",message:`已完成项目资料理解:${G.files.length} 份资料,${Object.values(G.groups).filter(a=>a.length>0).length} 类资料类型`,details:H.prompt.split("\n").slice(0,16)},{subtitle:"项目资料理解",order:C.length})};(0,ba.fx)(C,aK.stage),x();let aL=await cT({manager:q,project:af,projectRoot:c,scopedFilePaths:[...ac].filter(Boolean).sort(),fileRoleByPath:ad,fileProcessingByPath:ae,signal:a.signal});aL.length>0&&(au.push(...aL),(0,ba.fx)(C,(0,ba.X5)({type:"knowledge_retrieval",roleId:"project-basic-evidence",status:"success",message:`已锁定项目基础事实证据 ${aL.length} 条`,details:aL.slice(0,8).map(a=>`${e.basename(a.filePath)}|${a.sectionTitle||"正文片段"}|score=${a.score.toFixed(2)}`)},{subtitle:"基础事实召回",order:C.length})),x());let aP=aT(au,p,P),aQ=aZ(au),aU=a$(au,R),aV=a9([...aP,...aQ,...aU],aS(au),ax,P,R);(0,ba.fx)(C,(0,ba.X5)({type:"file_understanding",roleId:"project-graph",status:"running",message:`正在进行项目资料图谱分析:${au.length} 条证据 → LLM 结构化提取`,details:["提取:工程内容、施工方法、材料设备、技术标准、重点难点"],progress:{current:2,total:3,label:"图谱分析"}},{subtitle:"项目资料图谱分析",order:C.length})),x();let aX=await z(()=>(0,dv.i)({evidence:au,signal:a.signal,projectRoot:c,requirement:a.requirement,templateId:p.id}),C);(0,ba.fx)(C,aX.stage),x();let aY=aX.graph;aY&&(H=(0,br._n)(p,G,aY));let a_=function(a){var b;let c=(0,ay.c6)({version:"canonical-facts-v2",requirement:a.requirement||"",templateId:a.templateId||"",requiredKeys:a.requiredKeys||[],facts:a.facts.map(a=>({key:a.key,fieldId:a.fieldId,fieldName:a.fieldName,value:a.value,sourceFile:a.sourceFile,roleId:a.roleId,confidence:a.confidence})).sort((a,b)=>`${a.sourceFile}${a.key}${a.value}`.localeCompare(`${b.sourceFile}${b.key}${b.value}`)),graphHash:a.projectGraph?(0,ay.c6)(a.projectGraph):"",markdownHash:a.markdown?(0,ay.c6)(a.markdown.slice(0,2e4)):""}),d=function(a,b){let c=cP(a);if(c)try{let a=JSON.parse(aO.readFileSync(e.join(c,`canonical-facts-${b}.json`),"utf8"));return a&&a.byKey?a:void 0}catch{return}}(a.projectRoot,c);if(d)return d;let f=cN({facts:a.facts,markdown:a.markdown}),g={};for(let[a,b]of f.entries())g[a]=function(a){let b=a.source.includes("generated_markdown")?"generated_markdown":a.source.includes("evidence")?"evidence":"structured_fact";return{key:a.fieldKey,label:a.label,value:a.value,normalizedValue:aW(a.value),sourceType:b,sourceFile:a.source,confidence:a.confidence,priority:cO(b),locked:cO(b)>=80,selectedReason:a.selectedReason}}(b);let h=a.facts||[],i=[];for(let a of[{key:"project_name",label:"项目名称",pattern:/项目名称|工程名称|招标项目名称|project_name/u,bucket:"projectIdentity"},{key:"project_code",label:"项目编号",pattern:/项目编号|招标项目编号|project_code/u,bucket:"projectIdentity"},{key:"owner",label:"招标人",pattern:/招标人|建设单位|发包人|owner/u,bucket:"projectIdentity"},{key:"project_location",label:"建设地点",pattern:/建设地点|实施地点|project_location/u,bucket:"projectIdentity"},{key:"project_scale",label:"建设规模",pattern:/建设规模|工程规模|project_scale/u,bucket:"projectScope"},{key:"construction_scope",label:"施工范围",pattern:/施工范围|招标范围|工程范围/u,bucket:"projectScope"},{key:"duration",label:"计划工期",pattern:/计划工期|合同工期|总工期|schedule_requirement|duration/u,bucket:"schedule"},{key:"quality_target",label:"质量目标",pattern:/质量标准|质量目标|quality_standard/u,bucket:"quality"}]){let b=function(a,b,c,d){return a.filter(a=>d.test(`${a.fieldId||""}${a.key||""}${a.fieldName||""}`)).map(a=>(function(a,b,c){let d=(0,ay.lG)(a.value),e=function(a){let b=`${a.sourceFile||""} ${a.sourceRef?.sectionTitle||""} ${a.roleId||""}`;return/合同/u.test(b)?"contract":/招标|公告|前附表|需求书/u.test(b)?"tender":/清单|工程量|BOQ|报价/u.test(b)?"boq":/图纸|设计|CAD|DWG/u.test(b)?"drawing":/规范|标准/u.test(b)?"standard":"structured_fact"}(a);return{key:b,label:c,value:d,normalizedValue:aW(d),sourceType:e,sourceFile:a.sourceFile,sourceRef:a.sourceRef?.sectionTitle,confidence:Math.round(100*(a.confidence||.5)),priority:cO(e),locked:cO(e)>=80,selectedReason:"按资料来源优先级和字段置信度决策"}})(a,b,c)).filter(a=>a.value&&!/资料未明确|系统暂未确认/u.test(a.value)).sort((a,b)=>b.priority-a.priority||b.confidence-a.confidence||a.value.length-b.value.length)}(h,a.key,a.label,a.pattern);!g[a.key]&&b.length>0&&(g[a.key]=b[0]);let c=function(a,b,c){let d=[...new Map(c.map(a=>[a.normalizedValue,a])).values()];if(d.length<=1)return;let e=Math.max(...d.map(a=>a.priority)),f=d.filter(a=>a.priority===e);return{key:a,label:b,values:d.map(a=>({value:a.value,sourceFile:a.sourceFile,priority:a.priority,confidence:a.confidence})),decision:1===f.length?"highest_priority_selected":"manual_review_required"}}(a.key,a.label,b);c&&i.push(c)}let j=(b=a.projectGraph)?[...(b.resources||[]).map(a=>({key:`resource_${a.type}_${a.name}`,label:"equipment"===a.type?"机械设备":"labor"===a.type?"劳动力":"材料资源",value:[a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" "),normalizedValue:aW([a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:cO("projectGraph"),locked:!1,selectedReason:"来自项目图谱资源节点"})).filter(a=>a.value),...(b.risks||[]).map(a=>({key:`risk_${a.risk}`,label:"风险源",value:[a.risk,a.level,a.mitigation].filter(Boolean).join(" "),normalizedValue:aW([a.risk,a.level,a.mitigation].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:cO("projectGraph"),locked:!1,selectedReason:"来自项目图谱风险节点"})).filter(a=>a.value)]:[],k=j.filter(a=>/resource_/u.test(a.key)),l=j.filter(a=>/risk_/u.test(a.key));for(let a of j)g[a.key]||(g[a.key]=a);let m=(a.requiredKeys||[]).filter(a=>!g[a]).map(a=>({key:a,label:cK.find(b=>b.key===a)?.label||a,reason:"未从用户输入、招标资料、清单、图纸或项目图谱中确认该事实"})),n={projectIdentity:{projectName:g.project_name,projectCode:g.project_code,owner:g.owner,location:g.project_location},projectScope:{scale:g.project_scale,constructionScope:g.construction_scope},schedule:{duration:g.duration||g.schedule_requirement},quality:{target:g.quality_target||g.quality_standard},safety:{risks:l},resources:{resources:k},environment:{},constraints:{},byKey:g,conflicts:i,gaps:m},o=cP(a.projectRoot);return o&&aO.writeFileSync(e.join(o,`canonical-facts-${c}.json`),JSON.stringify(n,null,2)),n}({facts:[...aP,...aQ,...aU],projectGraph:aY,requiredKeys:cK.map(a=>a.key),projectRoot:c,requirement:a.requirement,templateId:p.id});aV.canonical=a_;let a0=(0,t._9)(p,P,{preserveExplicitOutline:M}),a1=aM({chapters:function(a){if(!function(a){let b=am(`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`);return!!/施工组织设计|施工组织|施组|技术标|投标技术|施工方案/u.test(b)||["施工","工程","质量","安全","进度","文明","部署","方案"].filter(a=>b.includes(a)).length>=3&&!/监理|可研|运维|维护|保养/u.test(b)}(a))return a.chapters;let b=ao(a),c=am(`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>`${a.title} ${(a.sections||[]).join(" ")}`).join(" ")}`),d=a.chapters.some(a=>/概况|部署|总体|组织|主要施工方案|保障|保证|综合措施|管理体系/u.test(a.title)&&!/雨季|冬季|高温|防汛|扬尘|噪声|工资|劳务|应急|BIM|智慧|管线|交通导改/u.test(a.title)),e=al.filter(a=>ap(a,b,c)),f=new Set,g=a.chapters.map(a=>({...a,sections:[...a.sections||[]],queries:[...a.queries||[]],requiredFacts:[...a.requiredFacts||[]],tableSections:[...a.tableSections||[]]}));for(let a of e){let e=g.map((b,c)=>({index:c,score:aq(b.title,a),chapter:b})).filter(d=>(function(a,b,c,d){var e;if(!ap(a,c,d))return!1;let f=am(b.title);if(a.aliases.some(a=>f.includes(am(a)))||a.sectionItems.some(a=>f.includes(am(a))))return!0;if(e=b.title,/雨季|冬季|高温|防汛|扬尘|噪声|工资|劳务|实名|应急|BIM|智慧|管线|交通导改|垃圾分类|多塔|成品保护/u.test(e))return!1;let g=aq(b.title,a);return g>=10||("optional"===a.level?g>=12||/BIM|智慧|数字|创新/iu.test(d):"conditional"===a.level?g>=8||a.projectTypes?.some(a=>c.includes(a))===!0||a.aliases.some(a=>d.includes(am(a))):g>=6)})(a,d.chapter,b,c)).sort((a,b)=>b.score-a.score),h=e[0]?.index??(d&&("core"===a.level||"mandatory"===a.level)?ar(a,g):-1);if(h<0)continue;let i=g[h],j=function(a,b){let c=am(b.title);return a.aliases.some(a=>c.includes(am(a)))||c.includes(am(a.title)),a.title}(a,i);i.sections=an(i.sections,[j,...a.sectionItems],50),i.queries=an(i.queries,[a.title,...a.queries],30),i.requiredFacts=an(i.requiredFacts,a.facts,30),i.tableSections=an(i.tableSections,a.tableSections||[],20),i.purpose=`${i.purpose};系统已按施工组织设计标准模块库自动挂靠“${a.title}”,仅在本章范围内展开与章节语义、项目类型和资料事实合理相关的内容,禁止机械塞入无关内容。`,f.add(a.id)}for(let a of d?e.filter(a=>("mandatory"===a.level||"core"===a.level)&&!f.has(a.id)):[]){let b=ar(a,g),c=g[b];c.sections=an(c.sections,[a.title,...a.sectionItems],50),c.queries=an(c.queries,[a.title,...a.queries],30),c.requiredFacts=an(c.requiredFacts,a.facts,30),c.tableSections=an(c.tableSections,a.tableSections||[],20),c.purpose=`${c.purpose};系统已补足施工组织设计必备模块“${a.title}”,需以合理挂靠方式呈现,不改变用户一级章节。`}return g}({template:p,chapters:a0,requirement:a.requirement}),projectGraph:aY,canonicalFacts:a_});p={...p,chapters:a1};let bb=new Map;if(aY){let a=new Set;for(let b of[...aY.works,...aY.methods,...aY.resources,...aY.schedule,...aY.standards,...aY.risks,...aY.requirements,...aY.siteConditions])(b.sourceFiles||[]).forEach(b=>a.add(b));for(let b of a1){let c=[b.title,b.purpose,...b.sections||[],...b.requiredFacts||[],...b.queries||[]].join(" "),d=a=>a&&((0,dx.C1)(a,c,.18)||(0,dx.C1)(a,b.title,.12)),e=/概况|总体|部署|施工|进度|工期|质量|安全|资源|人材机|材料|机械|劳动力|风险|危大|绿色|环保/u.test(c),f=aY.works.filter(a=>a.name&&(d(a.name)||e)),g=aY.methods.filter(a=>a.name&&(d(a.name)||(a.applicableWorks||[]).some(d)||e)),h=aY.resources.filter(a=>a.name&&(d(a.name)||/资源|人材机|材料|机械|劳动力/u.test(c)&&/material|equipment|labor/u.test(a.type))),i=aY.gaps.filter(a=>d(a)||e),j=new Set;for(let a of f)(a.sourceFiles||[]).forEach(a=>j.add(a));for(let a of g)(a.sourceFiles||[]).forEach(a=>j.add(a));for(let a of h)(a.sourceFiles||[]).forEach(a=>j.add(a));0===j.size&&e&&[...a].slice(0,12).forEach(a=>j.add(a)),bb.set(b.id,{graphFiles:j,graphBoqItems:h.map(a=>({name:a.name,quantity:a.quantity,unit:a.unit,sourceFiles:a.sourceFiles||[]})),graphWorks:f.map(a=>a.name),graphMethods:g.map(a=>a.name),gaps:i})}(0,ba.fx)(C,(0,ba.X5)({type:"file_understanding",roleId:"project-graph-match",status:"success",message:`图谱→章节映射完成:${aY.works.length}工程 ${aY.methods.length}工法 ${aY.resources.length}资源 → ${a1.length}章`,details:a1.map(a=>{let b=bb.get(a.id);return`${(0,t.GQ)(a.title)}:图谱文件${b?.graphFiles.size||0}个,BOQ项${b?.graphBoqItems.length||0}个`})},{subtitle:"图谱章节映射"})),x()}let bc=a1,bd=H.prompt,be=[bd,aE({template:{...p,chapters:bc},chapters:bc,factsModel:aV,requirement:a.requirement})].filter(Boolean).join("\n\n"),bf={...p,chapters:bc},bg=function(a,b){let c=a.replace(/\\n/gu,"\n"),d=new Map,e=[...c.matchAll(/第([一二两三四五六七八九十\d]+)章[^\n。;;]{0,80}(?:强制|必须|挂靠|小节|排序|最先|之后|之前)/gu)];for(let a of e){let b=function(a){let b={零:0,一:1,二:2,两:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};if(/^\d+$/u.test(a))return Number(a);if(void 0!==b[a])return b[a];if("十"===a)return 10;let c=/^(?:(一|二|两|三|四|五|六|七|八|九)?)十(?:(一|二|两|三|四|五|六|七|八|九))?$/u.exec(a);if(c)return 10*(c[1]?b[c[1]]:1)+(c[2]?b[c[2]]:0)}(a[1]);if(!b)continue;let f=Math.max(0,a.index||0),g=e.find(a=>(a.index||0)>f)?.index,h=c.slice(f,Math.min(c.length,g??f+1400));if(by(h)&&!/(强制小节|必须小节|以下小节设置和排序|必须设置独立的|必须包含独立的)/u.test(h))continue;let i=function(a){let b=/(?:以下小节设置和排序|强制小节|必须小节)[::]\s*([\s\S]*?)(?:\n\s*#{2,6}\s|\n\s*第[一二两三四五六七八九十\d]+章|$)/u.exec(a)?.[1];if(b){let c=bz([...b.matchAll(/(?:^|\n)\s*\d+[..、]\s*([^——\-—::。;;\n]{2,30})(?:[——\-—::]|,|,|。|;|;|\n|$)/gu)].map(a=>a[1]),a);if(c.length>0)return c}let c=[];for(let b of a.matchAll(/第[一二两三四五六七八九十\d]+章[^。;;\n]{0,50}(?:强制)?(?:包含|设置|输出|排序|挂靠)[^::。;;\n]{0,20}[::]\s*([^。;;\n]{2,120})/gu))for(let a of b[1].split(/[、,,//及和与]/u))c.push(a);for(let b of a.matchAll(/[“"]([^”"]{2,30})[”"]\s*(?:二级)?小节/gu))c.push(b[1]);for(let b of a.matchAll(/([\p{Script=Han}A-Za-z0-9()()]{2,30})(?:——|—|-|:|:)\s*(?:独立的)?(?:二级)?小节/gu))c.push(b[1]);for(let b of a.matchAll(/(?:必须|应当|需|需要|包含|设置|输出)[^。;;\n]{0,30}(?:独立的)?(?:二级)?小节[::]\s*([^。;;\n]{2,80})/gu))for(let a of b[1].split(/[、,,//及和与]/u))c.push(a);return bz(c,a)}(h);if(0===i.length)continue;let j=d.get(b)||{blocks:[],titles:[]};for(let a of(j.blocks.push(h),i))j.titles.some(b=>bx(b,a))||j.titles.push(a);d.set(b,j)}return[...d.entries()].map(([a,c])=>{let d=b?.[a-1];return{chapterIndex:a-1,chapterTitle:d?.title,source:c.blocks[0]?.split("\n").find(a=>a.trim())?.trim().slice(0,120),requiredSections:c.titles.map((a,b)=>({title:a,order:b+1,required:!0,source:c.blocks[0]?.slice(0,240)}))}})}([_,a.requirement||""].filter(Boolean).join("\n\n"),bc),bh=(0,ai.tF)({requirement:a.requirement,promptTexts:_,template:bf,chapters:bc,spec:P}),bk=0,bn=0;bc=aM({chapters:await (0,ay.l$)(bc.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b,chapterIndex:c})=>{if(b.sections?.length){bk+=1;let a=bE([...bg.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,t.GQ)(a.chapterTitle)===(0,t.GQ)(b.title)).flatMap(a=>a.requiredSections.sort((a,b)=>(a.order||0)-(b.order||0)).map(a=>a.title)),...b.sections],b.title);return{...b,sections:a.length?a:bE(b.sections,b.title)}}bn+=1;let d=(0,s.QR)(au.filter(a=>a.chapterId===b.id||(0,u.Lk)(a,b.title)),{maxChars:(0,s.Pc)(bh.chapterTargets.get(b.id)||1200),preservePinned:!0}),e=H.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",f=de(D,b),g=await bF({template:bf,chapter:b,chapterIndex:c,evidence:d,promptTexts:f.promptTexts,projectContext:be,requirement:a.requirement,roleContext:e,targetWords:bh.chapterTargets.get(b.id)||1200,structuralRules:bg,signal:a.signal}),h=bg.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,t.GQ)(a.chapterTitle)===(0,t.GQ)(b.title)).flatMap(a=>a.requiredSections.map(a=>`强制小节:${a.title}`));return(0,ba.fx)(C,(0,ba.X5)({type:"validation",roleId:"section-planning",promptId:f.primaryPromptId,status:g.length?"success":"fallback",message:`${(0,t.GQ)(b.title)} 小节规划${g.length?`生成 ${g.length} 个小节`:"未生成可用小节"}`,details:[...f.promptDetails,...h,...g.length?g.map(a=>`规划小节:${a}`):["规划结果为空或被污染过滤"]]},{subtitle:"小节规划"})),g.length?{...b,sections:g}:b},{kind:"llmRepair",targetWords:bh.targetChars||4e3,concurrency:2}),projectGraph:aY,canonicalFacts:a_});let bo=aE({template:p={...p,chapters:bc},chapters:bc,factsModel:aV,requirement:a.requirement});be=[bd,bo].filter(Boolean).join("\n\n"),(0,ba.fx)(C,(0,ba.X5)({type:"validation",roleId:"document-blueprint",status:"success",message:"已生成全局事实主表与文档蓝图,后续章节和小节将共用同一套专业约束",details:bo.split("\n").slice(0,12)},{subtitle:"全局蓝图"}));let bs=(0,ai.tF)({requirement:a.requirement,promptTexts:_,template:p,chapters:bc,spec:P});w=bc.map(a=>a.id);let bt=function(a){let b=a.template.chapters.length,c=b>0?a.targetWords/b:a.targetWords,d=`${a.template.name}
191
191
  ${a.template.category||""}
192
- ${a.requirement||""}`,e=/专项|安全|质量|验收|审核|合同|合规|审计|风控|风险/u.test(d),f=a.targetWords>=3e4||b>=8||c>=4e3,g=a.targetWords<=6e3&&b<=4&&!e;return{mode:e?"strict":f?"longform":g?"fast":"balanced",enableChapterReview:!0,enableGlobalReview:!0,enableDocumentBudgetExpansion:!1,enableFinalQualityReview:!0}}({template:p,targetWords:bt.targetChars||[...bt.chapterTargets.values()].reduce((a,b)=>a+b,0),requirement:a.requirement}),bw={strategy:bu,metrics:[],llm:{calls:0,failures:0,maxActive:0,retries:0},evidence:{raw:0,used:0,filteredNoise:0,avgNoiseScore:0,avgFactDensity:0,searchQueries:0,searchMs:0,contextChars:0},quality:{blockingCount:0,importantCount:0,minorCount:0,repairedCount:0}};(0,ba.fx)(C,(0,ba.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${bu.mode} 生成策略:章节审查 ${bu.enableChapterReview?"启用":"跳过"}、全局审查 ${bu.enableGlobalReview?"启用":"跳过"}、最终质量审查 ${bu.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${bu.enableDocumentBudgetExpansion?"启用":"跳过"};LLM 调用按工作流任务自然并行`},{subtitle:"后台自动策略"}));let bH=M?"OUTLINE 章节":"模板章节",bI=(0,ba.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${bo} 章由 LLM 基于${bH}、项目资料理解和证据规划小节,${bn} 章已由模板显式提供小节并跳过规划`},{subtitle:"小节规划策略"}),bJ=M?`;识别到 OUTLINE 章节 ${L.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",bK=[...D.prompts.map(a=>`${a.category}|${a.roleId}|${a.id}|${a.name}|${a.bindingSource}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`),...D.unresolvedRoles.map(a=>`unresolved|${a}|项目角色配置中的提示词角色不存在`),...D.missingResourceRoles.map(a=>`missingResource|${a}|提示词角色未显式绑定资源`)];(0,ba.fx)(C,(0,ba.X5)({type:"role_binding",roleId:A,status:"success",message:`已绑定项目资料 ${F.length} 份、${D.prompts.length} 个有效提示词;写作 ${D.writerPrompts.length}、章节 ${D.chapterPrompts.length}、抽取 ${D.extractionPrompts.length};已自动抽取运行时规则 ${Z.executionSummary.length} 条;语义资料覆盖 ${Math.round(100*S.materialCoverageRate)}%${bJ}`,details:[...bK,...Z.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:B,roleName:B})),(0,ba.fx)(C,(0,ba.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${Z.executionSummary.length} 条,版本 ${Z.sourceHash}`,details:Z.executionSummary.length?[...Z.executionSummary,`必需表格:${Z.requiredTables.join("、")||"无"}`,`必含关键词:${Z.requiredKeywords?.join("、")||"无"}`,`禁含内容:${Z.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})),(0,ba.fx)(C,(0,ba.X5)({type:"validation",roleId:"document-readiness",status:S.ready?"success":"failed",message:`生成准备度:绑定资料已就绪,语义覆盖 ${Math.round(100*S.materialCoverageRate)}%,角色匹配 ${Math.round(100*S.roleSatisfactionRate)}%,优化建议 ${Math.round(100*S.specCompletenessRate)}%`,details:S.diagnostics},{subtitle:"生成准备度检查"})),(0,ba.fx)(C,bI),x();let bL=Math.round(([...bt.chapterTargets.values()].reduce((a,b)=>a+b,0)||bt.targetChars||0)/Math.max(1,bd.length)),bM=(0,ay._3)({total:bd.length||1,kind:"chapter",targetWords:bL});(0,ba.fx)(C,(0,ba.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节自适应调度:本轮 ${bM}/${bd.length} 章并发,避免章节\xd7检索\xd7补写嵌套洪峰`,details:[`有效章节数:${bd.length}`,`平均章节目标:${bL} 字`,bL>=6e3?"长文章节串行或低并发执行,章内按语义组适度并发":"短章节按吞吐自适应并发"]},{subtitle:"章节并发策略"})),x();for(let b=0;b<bd.length;b+=bM){let d=bd.slice(b,b+bM);await Promise.all(d.map(async(d,f)=>{let g,h=b+f;(0,ay.Te)(a.signal);let i=Date.now(),j=C.length;try{var k;C.push((0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:D.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${h+1}/${bd.length}`,`二级小节:${d.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:h+1,total:bd.length,label:"章节生成"}},{subtitle:(0,t.GQ)(d.title),order:h})),x();let b=[],f=H.chapterPlans.find(a=>a.chapterId===d.id||a.chapterTitle===d.title),m=f?Object.values(f.evidenceQueries).flat().filter(Boolean):[],o=d.queries.length>0?d.queries:[p.name,p.outputTitle,d.title],r=bb.get(d.id);if(aY&&r&&r.graphFiles.size>0){let a=[...ah],e=b=>a.includes(b)?b:a.find(a=>a.endsWith(b)||a.includes(b));for(let a of[...r.graphFiles].map(a=>e(a)||a).filter(a=>bp(c,a,ah)).slice(0,12)){let c=aI(a,{maxChunkContentChars:8e3});if(c?.chunks?.length)for(let e of c.chunks)b.push({chapterId:d.id,filePath:c.file?.relativePath||a,score:5+(r.graphWorks.length+r.graphMethods.length)*.5,content:e.content,roleId:ad.get(a),processingType:ae.get(a),sectionTitle:e.sectionTitle,source:"graph-evidence"})}}let w=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)?cR:[],y=dm(d,[...o,...m],w),A=dn(d,w),B=Date.now();C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:D.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 正在执行质量优先的章节检索${r?.graphFiles.size?`(图谱匹配 ${r.graphFiles.size} 个文件)`:""}`,details:y.slice(0,A).map(a=>`检索:${a.slice(0,42)}`),progress:{current:h+1,total:bd.length,label:"证据检索"}},{subtitle:(0,t.GQ)(d.title),order:h}),x();let E=[...ah].filter(Boolean).sort(),I=[],J=y.slice(0,A);if(E.length>0&&J.length>0){(0,ay.Te)(a.signal);let b=await (0,ay.l$)(J,async a=>aJ(a,E,Math.min(ak,12),d.title),{kind:"search"});I.push(...b)}for(let a of(bw.evidence.searchQueries+=Math.min(y.length,A),bw.evidence.searchMs+=Date.now()-B,I))b.push(...a.filter(a=>bp(c,a.filePath,ac)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:ad.get(a.filePath),processingType:ae.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));let K=await (0,br.$b)({manager:q,projectRoot:c,chapter:d,plan:f,profile:G,scopedFilePaths:E,limitPerQuery:Math.min(ak,10),signal:a.signal});b.push(...K);let L=new Set((d.pinnedEvidenceFilePaths||[]).filter(Boolean)),M=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)&&b.push(...aL.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"})));let N=new Set([...L]),O=bt.chapterTargets.get(d.id)||1200,S=(0,s.Pc)(O,6e3,12e3);for(let a of N){if(!bp(c,a,ac))continue;let e=L.has(a),f=aI(a,{maxChunkContentChars:S});f&&b.push(...f.chunks.map(a=>({chapterId:d.id,filePath:f.file.relativePath,score:1,content:a.content,roleId:ad.get(f.file.relativePath),processingType:ae.get(f.file.relativePath),sectionTitle:a.sectionTitle,source:e?"pinned-evidence":"bound-file"})))}let U=b.filter(a=>bp(c,a.filePath,ah));if(Y.enabled){let b=await cn({config:Y,chapterId:d.id,chapterTitle:d.title,sectionTitles:d.sections||[],runtimeRules:Z,localFacts:[...aV.project,...aV.schedule,...aV.quality,...aV.safety,...aV.resources,...aV.preciseFacts],signal:a.signal});b.evidence.length>0&&(U.push(...b.evidence),aw.chapters.push(d.title),aw.evidenceCount+=b.evidence.length),aw.queries.push(...b.queries),aw.filteredCount+=b.filtered}let V=(0,s.Pc)(O,7e3,26e3),W=(0,br.SK)({project:af,chapter:d,plan:f,profile:G,scopedFilePaths:E,highRisk:at.highRisk});W.length>0&&U.push(...W);let X=dl(d,U,{maxItems:dp(ak,d,at.highRisk),maxChars:V+(at.highRisk?14e3:4e3),preservePinned:!0},bw),$=d.requiredFacts.filter(a=>!X.some(b=>(0,u.Lk)(b,a))),_=0,aa=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>dw(`${a.sectionTitle||""}${a.content||""}`).includes(dw(b)))),c=(a.chapter.tablePlans||[]).flatMap(a=>a.fillability?.missingProjectFactFields||[]),d=a.evidence.length<3?["章节证据数量不足"]:[],e=b.length+c.length+d.length,f=e>=5?"high":e>=2?"medium":"low",g="high"===f?"evidence_first":c.length>0?"generate_with_review_notes":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:f,missingFacts:b,missingEvidence:d,tableFieldGaps:[...new Set(c)],suggestedStrategy:g,reason:0===e?"章节事实、证据和表格可填性满足常规生成条件。":`识别到 ${e} 项生成前缺口,按 ${g} 策略生成。`}}({chapter:d,evidence:X}),ab=new Set(X.map(a=>a.filePath)).size,ag=!!r&&(r?.graphFiles.size||0)>=8&&ab>=6&&0===$.length&&"low"===aa.riskLevel,al="evidence_first"===aa.suggestedStrategy||at.highRisk||$.length>0||X.length<8&&"low"!==aa.riskLevel;if(!ag&&al&&E.length>0){let b=await aN({manager:q,projectRoot:c,chapter:d,scopedFilePaths:E,fileRoleByPath:ad,fileProcessingByPath:ae,requiredNeeds:$,highRisk:at.highRisk,signal:a.signal});_=b.length,b.length>0&&(U=dl(d,[...U,...b],{maxItems:dp(ak+12,d,at.highRisk),maxChars:V+(at.highRisk?36e3:16e3),preservePinned:!0},bw),X=dl(d,U,{maxItems:dp(ak+8,d,at.highRisk),maxChars:V+(at.highRisk?28e3:12e3),preservePinned:!0},bw),$=d.requiredFacts.filter(a=>!X.some(b=>(0,u.Lk)(b,a))))}for(let a of(0===X.length&&ax.push(`${d.title}:系统暂未检索到明确知识库依据`),$))ax.push(`${d.title}:${a} 系统暂未从知识库确认`);let am=(0,ba.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:au.length>0?"success":"fallback",message:`已检索/绑定 ${au.length} 条证据`});aF<0?aF=(0,ba.fx)(C,am):C[aF]={...am,order:C[aF]?.order??am.order},x(),(0,ay.Te)(a.signal);let an=[r?[r.graphWorks.length?`图谱识别本章工程内容:${r.graphWorks.join("、")}`:"",r.graphMethods.length?`图谱识别本章施工方法:${r.graphMethods.join("、")}`:"",r.graphBoqItems.length?`图谱识别本章BOQ清单项(${r.graphBoqItems.length}项):${r.graphBoqItems.slice(0,30).map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",r.gaps.length?`图谱识别本章资料缺口:${r.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",f?.writingGoal,f?.mustCover?.length?`本章必须覆盖:${f.mustCover.join("、")}`:"",f?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${f.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),ao=de(D,d);if(D.writerPrompts.length>0&&!ao.primaryWriter)throw Error(`${(0,t.GQ)(d.title)} 写作主控提示词未进入章节生成阶段`);let ap=[ao.promptTexts,T].filter(Boolean).join("\n\n"),aq=ao.promptDetails.length?ao.promptDetails:["未绑定章节写作提示词"],ar=function(a){let b=a.profile||l,c=[],d=[a.template.name,a.template.outputTitle,a.chapter.title,a.chapter.purpose,...a.chapter.sections||[]].filter(Boolean).join(" "),e=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title);for(let d of a.chapter.requiredFacts||[])a4(c,b,{label:d,category:n(b,d)?.category||"required",required:!0,source:"template"});for(let d of a.chapter.sections||[])a4(c,b,{label:d,category:"section",required:!1,source:"section",queries:a3(d,[a.chapter.title])});for(let d of a.plan?.requiredContents||[])a4(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of a.plan?.evidenceNeeds||[])a4(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of e?.requiredFactIds||[]){let e=a.spec?.factFields.find(a=>a.id===d);e&&a4(c,b,{label:e.name,category:n(b,e.name)?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:a3(e.name,[e.extractionHint||"",e.validationHint||""])})}for(let e of a.spec?.factFields||[]){if(!e.required)continue;let f=n(b,e.name),g=`${e.name} ${e.extractionHint||""} ${e.validationHint||""}`;(d.includes(e.name)||a3(e.name,f?.aliases||[]).some(a=>d.includes(a))||a.chapter.requiredFacts.some(a=>a.includes(e.name)||e.name.includes(a)))&&a4(c,b,{label:e.name,category:f?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:a3(e.name,[g])})}for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&d.includes(a))&&a5(c,b,a,"profile","must_use"===a.usagePolicy,[d]);let f=a2(a.requirement||"");if(f)for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&f.includes(a))&&a5(c,b,a,"requirement",!0,[f]);let g=a2(a.promptTexts||"");if(g)for(let d of b.factFields)[d.name,...d.aliases].some(a=>a.length>=2&&g.includes(a))&&a5(c,b,d,"prompt","must_use"===d.usagePolicy,[a.chapter.title]);return c}({template:p,chapter:d,spec:P,profile:R,promptTexts:ap,requirement:a.requirement,plan:f?{requiredContents:f.mustCover,evidenceNeeds:Object.values(f.evidenceQueries).flat()}:void 0}),as=a7({needs:ar,factsModel:aV,evidence:U,profile:R}),aA=as.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label);if(aA.length>0&&E.length>0){let b=await dr({manager:q,projectRoot:c,chapter:d,needs:aA,scopedFilePaths:E,fileRoleByPath:ad,fileProcessingByPath:ae,signal:a.signal}),e=await aN({manager:q,projectRoot:c,chapter:d,scopedFilePaths:E,fileRoleByPath:ad,fileProcessingByPath:ae,requiredNeeds:aA,highRisk:!0,signal:a.signal}),f=[...b,...e];f.length>0&&(U=dl(d,[...U,...f],{maxItems:dp(ak+16,d,!0),maxChars:V+42e3,preservePinned:!0},bw),X=dl(d,U,{maxItems:dp(ak+12,d,!0),maxChars:V+32e3,preservePinned:!0},bw),$=d.requiredFacts.filter(a=>!X.some(b=>(0,u.Lk)(b,a))),aA=(as=a7({needs:ar,factsModel:aV,evidence:U,profile:R})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}let aB=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b)||`${a.sectionTitle||""} ${a.content}`.includes(b))).length,d=a.chapter.requiredFacts.length,e=a.chapter.requiredFacts.filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:d,evidence:X,risk:at});av.push(aB);let aE=new Set(X.map(a=>a.filePath)),aG=X.reduce((a,b)=>a+b.content.length,0),aH=[...at.highRisk?[`召回覆盖风险(${at.riskReason||"切片未完全预加载"}):已加载 ${at.loadedChunks}/${at.totalChunks},已启用深召回`]:[],`深召回证据:${_} 条`,`事实覆盖:${aB.requiredFactCovered}/${aB.requiredFactTotal}`,`小节覆盖:${aB.sectionCovered}/${aB.sectionTotal}`];C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:D.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 已选取 ${X.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aE.size} 份`,`上下文字符:${aG}`,`检索查询:${Math.min(y.length,A)} 组`,...aH],progress:{current:h+1,total:bd.length,label:"正文生成"}},{subtitle:(0,t.GQ)(d.title),order:h}),x(),bw.evidence.contextChars+=aG;let aK=(k=as,a6(k.flatMap(a=>a.facts))),aM=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)?aQ:[],aP=function(a){let b=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title),c=(b?.requiredFactIds||[]).map(b=>a.spec?.factFields.find(a=>a.id===b)?.name).filter(Boolean),d=[...new Set([...a.chapter.requiredFacts,...c,...a.plan?.requiredContents||[],...a.plan?.evidenceNeeds||[],...(a.resolvedFactNeeds||[]).filter(a=>a.need.required).map(a=>a.need.label)].filter(Boolean))],e=a.roleFacts.map(({fact:a})=>`- ${a.key}:${(0,s.eE)((0,ay.lG)(a.value))}`),f=(a.resolvedFactNeeds||[]).flatMap(a=>a.facts),g=a.indexedFacts||[],h=(0,az.Cr)(g,a=>(0,az.rF)(a),{maxItems:48,maxChars:12e3},"indexedFacts"),i=f.length>0?[]:h.selected.map(a=>`- ${a.key||a.fieldName||"资料事实"}:${(0,s.eE)((0,ay.lG)(a.value)).slice(0,180)}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`),j=h.dropped.length>0?[`⚠️ ${h.dropped.length} 个低优先级事实未列出(完整列表见事实主表)`]:[],k=[...f,...g].filter(a=>/建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`)).filter((a,b,c)=>c.findIndex(b=>`${b.key||b.fieldName}:${(0,ay.lG)(b.value)}`==`${a.key||a.fieldName}:${(0,ay.lG)(a.value)}`)===b),l=[...new Set([...function(a){let b=new Set,c=/(?:\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;for(let d of a){let a=(0,ay.lG)(d.content).replace(/\s+/gu," ");if((!/报价明细|投标报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(a)||/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(a))&&!/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂/u.test(a)){for(let d of a.matchAll(c))b.add(d[0].trim());if(b.size>=40)break}}return[...b].slice(0,40)}(a.evidence),...f.map(a=>(0,ay.lG)(a.value)).filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|JGJ|ISO|台|套|个|项|批|次|份|人|㎡|日历天|万元|元/iu.test(a)),...g.map(a=>(0,ay.lG)(a.value)).filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|JGJ|ISO|台|套|个|项|批|次|份|人|㎡|日历天|万元|元/iu.test(a))])],m=0,n=[];for(let a of l){if(m+a.length>3e3&&n.length>=10)break;n.push(a),m+=a.length+1}let o=new Set([...a.evidence.map(a=>a.filePath),...f.map(a=>a.sourceFile),...(a.indexedFacts||[]).map(a=>a.sourceFile)]).size,p=(a.resolvedFactNeeds||[]).filter(a=>"satisfied"!==a.status&&a.need.required).map(a=>a.need.label);return["【本章事实覆盖与参数落位要求】",d.length?`必须优先覆盖的事实/要求:
192
+ ${a.requirement||""}`,e=/专项|安全|质量|验收|审核|合同|合规|审计|风控|风险/u.test(d),f=a.targetWords>=3e4||b>=8||c>=4e3,g=a.targetWords<=6e3&&b<=4&&!e;return{mode:e?"strict":f?"longform":g?"fast":"balanced",enableChapterReview:!0,enableGlobalReview:!0,enableDocumentBudgetExpansion:!1,enableFinalQualityReview:!0}}({template:p,targetWords:bs.targetChars||[...bs.chapterTargets.values()].reduce((a,b)=>a+b,0),requirement:a.requirement}),bu={strategy:bt,metrics:[],llm:{calls:0,failures:0,maxActive:0,retries:0},evidence:{raw:0,used:0,filteredNoise:0,avgNoiseScore:0,avgFactDensity:0,searchQueries:0,searchMs:0,contextChars:0},quality:{blockingCount:0,importantCount:0,minorCount:0,repairedCount:0}};(0,ba.fx)(C,(0,ba.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${bt.mode} 生成策略:章节审查 ${bt.enableChapterReview?"启用":"跳过"}、全局审查 ${bt.enableGlobalReview?"启用":"跳过"}、最终质量审查 ${bt.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${bt.enableDocumentBudgetExpansion?"启用":"跳过"};LLM 调用按工作流任务自然并行`},{subtitle:"后台自动策略"}));let bw=M?"OUTLINE 章节":"模板章节",bH=(0,ba.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${bn} 章由 LLM 基于${bw}、项目资料理解和证据规划小节,${bk} 章已由模板显式提供小节并跳过规划`},{subtitle:"小节规划策略"}),bI=M?`;识别到 OUTLINE 章节 ${L.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",bJ=[...D.prompts.map(a=>`${a.category}|${a.roleId}|${a.id}|${a.name}|${a.bindingSource}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`),...D.unresolvedRoles.map(a=>`unresolved|${a}|项目角色配置中的提示词角色不存在`),...D.missingResourceRoles.map(a=>`missingResource|${a}|提示词角色未显式绑定资源`)];(0,ba.fx)(C,(0,ba.X5)({type:"role_binding",roleId:A,status:"success",message:`已绑定项目资料 ${F.length} 份、${D.prompts.length} 个有效提示词;写作 ${D.writerPrompts.length}、章节 ${D.chapterPrompts.length}、抽取 ${D.extractionPrompts.length};已自动抽取运行时规则 ${Z.executionSummary.length} 条;语义资料覆盖 ${Math.round(100*S.materialCoverageRate)}%${bI}`,details:[...bJ,...Z.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:B,roleName:B})),(0,ba.fx)(C,(0,ba.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${Z.executionSummary.length} 条,版本 ${Z.sourceHash}`,details:Z.executionSummary.length?[...Z.executionSummary,`必需表格:${Z.requiredTables.join("、")||"无"}`,`必含关键词:${Z.requiredKeywords?.join("、")||"无"}`,`禁含内容:${Z.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})),(0,ba.fx)(C,(0,ba.X5)({type:"validation",roleId:"document-readiness",status:S.ready?"success":"failed",message:`生成准备度:绑定资料已就绪,语义覆盖 ${Math.round(100*S.materialCoverageRate)}%,角色匹配 ${Math.round(100*S.roleSatisfactionRate)}%,优化建议 ${Math.round(100*S.specCompletenessRate)}%`,details:S.diagnostics},{subtitle:"生成准备度检查"})),(0,ba.fx)(C,bH),x();let bK=Math.round(([...bs.chapterTargets.values()].reduce((a,b)=>a+b,0)||bs.targetChars||0)/Math.max(1,bc.length)),bL=(0,ay._3)({total:bc.length||1,kind:"chapter",targetWords:bK});(0,ba.fx)(C,(0,ba.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节自适应调度:本轮 ${bL}/${bc.length} 章并发,避免章节\xd7检索\xd7补写嵌套洪峰`,details:[`有效章节数:${bc.length}`,`平均章节目标:${bK} 字`,bK>=6e3?"长文章节串行或低并发执行,章内按语义组适度并发":"短章节按吞吐自适应并发"]},{subtitle:"章节并发策略"})),x();for(let b=0;b<bc.length;b+=bL){let d=bc.slice(b,b+bL);await Promise.all(d.map(async(d,f)=>{let g,h=b+f;(0,ay.Te)(a.signal);let i=Date.now(),j=C.length;try{var k;C.push((0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:D.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${h+1}/${bc.length}`,`二级小节:${d.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:h+1,total:bc.length,label:"章节生成"}},{subtitle:(0,t.GQ)(d.title),order:h})),x();let b=[],f=H.chapterPlans.find(a=>a.chapterId===d.id||a.chapterTitle===d.title),m=f?Object.values(f.evidenceQueries).flat().filter(Boolean):[],o=d.queries.length>0?d.queries:[p.name,p.outputTitle,d.title],r=bb.get(d.id);if(aY&&r&&r.graphFiles.size>0){let a=[...ah],e=b=>a.includes(b)?b:a.find(a=>a.endsWith(b)||a.includes(b));for(let a of[...r.graphFiles].map(a=>e(a)||a).filter(a=>bp(c,a,ah)).slice(0,12)){let c=aI(a,{maxChunkContentChars:8e3});if(c?.chunks?.length)for(let e of c.chunks)b.push({chapterId:d.id,filePath:c.file?.relativePath||a,score:5+(r.graphWorks.length+r.graphMethods.length)*.5,content:e.content,roleId:ad.get(a),processingType:ae.get(a),sectionTitle:e.sectionTitle,source:"graph-evidence"})}}let w=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)?cR:[],y=dm(d,[...o,...m],w),A=dn(d,w),B=Date.now();C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:D.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 正在执行质量优先的章节检索${r?.graphFiles.size?`(图谱匹配 ${r.graphFiles.size} 个文件)`:""}`,details:y.slice(0,A).map(a=>`检索:${a.slice(0,42)}`),progress:{current:h+1,total:bc.length,label:"证据检索"}},{subtitle:(0,t.GQ)(d.title),order:h}),x();let E=[...ah].filter(Boolean).sort(),I=[],J=y.slice(0,A);if(E.length>0&&J.length>0){(0,ay.Te)(a.signal);let b=await (0,ay.l$)(J,async a=>aJ(a,E,Math.min(ak,12),d.title),{kind:"search"});I.push(...b)}for(let a of(bu.evidence.searchQueries+=Math.min(y.length,A),bu.evidence.searchMs+=Date.now()-B,I))b.push(...a.filter(a=>bp(c,a.filePath,ac)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:ad.get(a.filePath),processingType:ae.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));let K=await (0,br.$b)({manager:q,projectRoot:c,chapter:d,plan:f,profile:G,scopedFilePaths:E,limitPerQuery:Math.min(ak,10),signal:a.signal});b.push(...K);let L=new Set((d.pinnedEvidenceFilePaths||[]).filter(Boolean)),M=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)&&b.push(...aL.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"})));let N=new Set([...L]),O=bs.chapterTargets.get(d.id)||1200,S=(0,s.Pc)(O,6e3,12e3);for(let a of N){if(!bp(c,a,ac))continue;let e=L.has(a),f=aI(a,{maxChunkContentChars:S});f&&b.push(...f.chunks.map(a=>({chapterId:d.id,filePath:f.file.relativePath,score:1,content:a.content,roleId:ad.get(f.file.relativePath),processingType:ae.get(f.file.relativePath),sectionTitle:a.sectionTitle,source:e?"pinned-evidence":"bound-file"})))}let U=b.filter(a=>bp(c,a.filePath,ah));if(Y.enabled){let b=await cn({config:Y,chapterId:d.id,chapterTitle:d.title,sectionTitles:d.sections||[],runtimeRules:Z,localFacts:[...aV.project,...aV.schedule,...aV.quality,...aV.safety,...aV.resources,...aV.preciseFacts],signal:a.signal});b.evidence.length>0&&(U.push(...b.evidence),aw.chapters.push(d.title),aw.evidenceCount+=b.evidence.length),aw.queries.push(...b.queries),aw.filteredCount+=b.filtered}let V=(0,s.Pc)(O,7e3,26e3),W=(0,br.SK)({project:af,chapter:d,plan:f,profile:G,scopedFilePaths:E,highRisk:at.highRisk});W.length>0&&U.push(...W);let X=dl(d,U,{maxItems:dp(ak,d,at.highRisk),maxChars:V+(at.highRisk?14e3:4e3),preservePinned:!0},bu),$=d.requiredFacts.filter(a=>!X.some(b=>(0,u.Lk)(b,a))),_=0,aa=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>dw(`${a.sectionTitle||""}${a.content||""}`).includes(dw(b)))),c=(a.chapter.tablePlans||[]).flatMap(a=>a.fillability?.missingProjectFactFields||[]),d=a.evidence.length<3?["章节证据数量不足"]:[],e=b.length+c.length+d.length,f=e>=5?"high":e>=2?"medium":"low",g="high"===f?"evidence_first":c.length>0?"generate_with_review_notes":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:f,missingFacts:b,missingEvidence:d,tableFieldGaps:[...new Set(c)],suggestedStrategy:g,reason:0===e?"章节事实、证据和表格可填性满足常规生成条件。":`识别到 ${e} 项生成前缺口,按 ${g} 策略生成。`}}({chapter:d,evidence:X}),ab=new Set(X.map(a=>a.filePath)).size,ag=!!r&&(r?.graphFiles.size||0)>=8&&ab>=6&&0===$.length&&"low"===aa.riskLevel,al="evidence_first"===aa.suggestedStrategy||at.highRisk||$.length>0||X.length<8&&"low"!==aa.riskLevel;if(!ag&&al&&E.length>0){let b=await aN({manager:q,projectRoot:c,chapter:d,scopedFilePaths:E,fileRoleByPath:ad,fileProcessingByPath:ae,requiredNeeds:$,highRisk:at.highRisk,signal:a.signal});_=b.length,b.length>0&&(U=dl(d,[...U,...b],{maxItems:dp(ak+12,d,at.highRisk),maxChars:V+(at.highRisk?36e3:16e3),preservePinned:!0},bu),X=dl(d,U,{maxItems:dp(ak+8,d,at.highRisk),maxChars:V+(at.highRisk?28e3:12e3),preservePinned:!0},bu),$=d.requiredFacts.filter(a=>!X.some(b=>(0,u.Lk)(b,a))))}for(let a of(0===X.length&&ax.push(`${d.title}:系统暂未检索到明确知识库依据`),$))ax.push(`${d.title}:${a} 系统暂未从知识库确认`);let am=(0,ba.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:au.length>0?"success":"fallback",message:`已检索/绑定 ${au.length} 条证据`});aF<0?aF=(0,ba.fx)(C,am):C[aF]={...am,order:C[aF]?.order??am.order},x(),(0,ay.Te)(a.signal);let an=[r?[r.graphWorks.length?`图谱识别本章工程内容:${r.graphWorks.join("、")}`:"",r.graphMethods.length?`图谱识别本章施工方法:${r.graphMethods.join("、")}`:"",r.graphBoqItems.length?`图谱识别本章BOQ清单项(${r.graphBoqItems.length}项):${r.graphBoqItems.slice(0,30).map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",r.gaps.length?`图谱识别本章资料缺口:${r.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",f?.writingGoal,f?.mustCover?.length?`本章必须覆盖:${f.mustCover.join("、")}`:"",f?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${f.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),ao=de(D,d);if(D.writerPrompts.length>0&&!ao.primaryWriter)throw Error(`${(0,t.GQ)(d.title)} 写作主控提示词未进入章节生成阶段`);let ap=[ao.promptTexts,T].filter(Boolean).join("\n\n"),aq=ao.promptDetails.length?ao.promptDetails:["未绑定章节写作提示词"],ar=function(a){let b=a.profile||l,c=[],d=[a.template.name,a.template.outputTitle,a.chapter.title,a.chapter.purpose,...a.chapter.sections||[]].filter(Boolean).join(" "),e=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title);for(let d of a.chapter.requiredFacts||[])a4(c,b,{label:d,category:n(b,d)?.category||"required",required:!0,source:"template"});for(let d of a.chapter.sections||[])a4(c,b,{label:d,category:"section",required:!1,source:"section",queries:a3(d,[a.chapter.title])});for(let d of a.plan?.requiredContents||[])a4(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of a.plan?.evidenceNeeds||[])a4(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of e?.requiredFactIds||[]){let e=a.spec?.factFields.find(a=>a.id===d);e&&a4(c,b,{label:e.name,category:n(b,e.name)?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:a3(e.name,[e.extractionHint||"",e.validationHint||""])})}for(let e of a.spec?.factFields||[]){if(!e.required)continue;let f=n(b,e.name),g=`${e.name} ${e.extractionHint||""} ${e.validationHint||""}`;(d.includes(e.name)||a3(e.name,f?.aliases||[]).some(a=>d.includes(a))||a.chapter.requiredFacts.some(a=>a.includes(e.name)||e.name.includes(a)))&&a4(c,b,{label:e.name,category:f?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:a3(e.name,[g])})}for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&d.includes(a))&&a5(c,b,a,"profile","must_use"===a.usagePolicy,[d]);let f=a2(a.requirement||"");if(f)for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&f.includes(a))&&a5(c,b,a,"requirement",!0,[f]);let g=a2(a.promptTexts||"");if(g)for(let d of b.factFields)[d.name,...d.aliases].some(a=>a.length>=2&&g.includes(a))&&a5(c,b,d,"prompt","must_use"===d.usagePolicy,[a.chapter.title]);return c}({template:p,chapter:d,spec:P,profile:R,promptTexts:ap,requirement:a.requirement,plan:f?{requiredContents:f.mustCover,evidenceNeeds:Object.values(f.evidenceQueries).flat()}:void 0}),as=a7({needs:ar,factsModel:aV,evidence:U,profile:R}),aA=as.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label);if(aA.length>0&&E.length>0){let b=await dr({manager:q,projectRoot:c,chapter:d,needs:aA,scopedFilePaths:E,fileRoleByPath:ad,fileProcessingByPath:ae,signal:a.signal}),e=await aN({manager:q,projectRoot:c,chapter:d,scopedFilePaths:E,fileRoleByPath:ad,fileProcessingByPath:ae,requiredNeeds:aA,highRisk:!0,signal:a.signal}),f=[...b,...e];f.length>0&&(U=dl(d,[...U,...f],{maxItems:dp(ak+16,d,!0),maxChars:V+42e3,preservePinned:!0},bu),X=dl(d,U,{maxItems:dp(ak+12,d,!0),maxChars:V+32e3,preservePinned:!0},bu),$=d.requiredFacts.filter(a=>!X.some(b=>(0,u.Lk)(b,a))),aA=(as=a7({needs:ar,factsModel:aV,evidence:U,profile:R})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}let aB=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b)||`${a.sectionTitle||""} ${a.content}`.includes(b))).length,d=a.chapter.requiredFacts.length,e=a.chapter.requiredFacts.filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:d,evidence:X,risk:at});av.push(aB);let aE=new Set(X.map(a=>a.filePath)),aG=X.reduce((a,b)=>a+b.content.length,0),aH=[...at.highRisk?[`召回覆盖风险(${at.riskReason||"切片未完全预加载"}):已加载 ${at.loadedChunks}/${at.totalChunks},已启用深召回`]:[],`深召回证据:${_} 条`,`事实覆盖:${aB.requiredFactCovered}/${aB.requiredFactTotal}`,`小节覆盖:${aB.sectionCovered}/${aB.sectionTotal}`];C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:D.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 已选取 ${X.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aE.size} 份`,`上下文字符:${aG}`,`检索查询:${Math.min(y.length,A)} 组`,...aH],progress:{current:h+1,total:bc.length,label:"正文生成"}},{subtitle:(0,t.GQ)(d.title),order:h}),x(),bu.evidence.contextChars+=aG;let aK=(k=as,a6(k.flatMap(a=>a.facts))),aM=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)?aQ:[],aP=function(a){let b=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title),c=(b?.requiredFactIds||[]).map(b=>a.spec?.factFields.find(a=>a.id===b)?.name).filter(Boolean),d=[...new Set([...a.chapter.requiredFacts,...c,...a.plan?.requiredContents||[],...a.plan?.evidenceNeeds||[],...(a.resolvedFactNeeds||[]).filter(a=>a.need.required).map(a=>a.need.label)].filter(Boolean))],e=a.roleFacts.map(({fact:a})=>`- ${a.key}:${(0,s.eE)((0,ay.lG)(a.value))}`),f=(a.resolvedFactNeeds||[]).flatMap(a=>a.facts),g=a.indexedFacts||[],h=(0,az.Cr)(g,a=>(0,az.rF)(a),{maxItems:48,maxChars:12e3},"indexedFacts"),i=f.length>0?[]:h.selected.map(a=>`- ${a.key||a.fieldName||"资料事实"}:${(0,s.eE)((0,ay.lG)(a.value)).slice(0,180)}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`),j=h.dropped.length>0?[`⚠️ ${h.dropped.length} 个低优先级事实未列出(完整列表见事实主表)`]:[],k=[...f,...g].filter(a=>/建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`)).filter((a,b,c)=>c.findIndex(b=>`${b.key||b.fieldName}:${(0,ay.lG)(b.value)}`==`${a.key||a.fieldName}:${(0,ay.lG)(a.value)}`)===b),l=[...new Set([...function(a){let b=new Set,c=/(?:\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;for(let d of a){let a=(0,ay.lG)(d.content).replace(/\s+/gu," ");if((!/报价明细|投标报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(a)||/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(a))&&!/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂/u.test(a)){for(let d of a.matchAll(c))b.add(d[0].trim());if(b.size>=40)break}}return[...b].slice(0,40)}(a.evidence),...f.map(a=>(0,ay.lG)(a.value)).filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|JGJ|ISO|台|套|个|项|批|次|份|人|㎡|日历天|万元|元/iu.test(a)),...g.map(a=>(0,ay.lG)(a.value)).filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|JGJ|ISO|台|套|个|项|批|次|份|人|㎡|日历天|万元|元/iu.test(a))])],m=0,n=[];for(let a of l){if(m+a.length>3e3&&n.length>=10)break;n.push(a),m+=a.length+1}let o=new Set([...a.evidence.map(a=>a.filePath),...f.map(a=>a.sourceFile),...(a.indexedFacts||[]).map(a=>a.sourceFile)]).size,p=(a.resolvedFactNeeds||[]).filter(a=>"satisfied"!==a.status&&a.need.required).map(a=>a.need.label);return["【本章事实覆盖与参数落位要求】",d.length?`必须优先覆盖的事实/要求:
193
193
  ${d.map(a=>`- ${a}`).join("\n")}`:"",e.length?`角色节点已抽取事实:
194
194
  ${e.join("\n")}`:"",k.length?`项目基础事实卡片(资料已明确,项目概况、项目基本信息表、进度和质量相关内容必须优先使用,不得输出任何占位话术):
195
195
  ${k.map(a=>`- ${a.key||a.fieldName}:${(0,s.eE)((0,ay.lG)(a.value)).slice(0,220)}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`).join("\n")}
196
196
  项目基本信息表必须使用固定表头:| 信息项 | 内容 |,不得使用“序号|项目名称|内容参数”表头,不得输出后台溯源列。`:"",a.factNeedsPrompt||"",i.length?`全局资料事实索引匹配到的本章可写事实:
197
197
  ${i.join("\n")}`:"",n.length?`本章资料中可直接使用的可靠精确参数/编号:${n.join("、")}。这些参数来自绑定资料,不属于编造;涉及对应对象、部位、工序、材料、设备、项目概况、质量验收或安全控制时必须自然写入正文,并保持原样或等价专业表达。项目基础事实中的合同估算价、计划工期可用于项目概况;不得写入报价明细、单价、税率、预留金。`:"",p.length?`当前事实需求仍未充分确认:${p.join("、")}。未确认项不得编造;但已满足事实需求中的资料事实必须写入对应小节。`:"",a.missingFacts.length?`模板显式要求中当前检索未充分命中的项:${a.missingFacts.join("、")}。未命中项不得编造,但不得因此省略上方已经明确的可靠参数。`:"",`本章可用材料来源约 ${o} 个文件,正文必须按事实需求把可用事实内化到对应小节,不得单列后台资料清单。`,...j].filter(Boolean).join("\n")}({chapter:d,plan:void 0,spec:P,roleFacts:M,evidence:X,missingFacts:$,indexedFacts:[...aM,...aK],resolvedFactNeeds:as,factNeedsPrompt:function(a){let b=a.map(a=>{let b=a.facts.slice(0,5).map(b=>`${b.key||b.fieldName||a.need.label}=${a8(b.value)}${b.sourceFile?`(${e.basename(b.sourceFile)})`:""}`),c=a.facts.length?[]:(a.evidence||[]).slice(0,2).map(a=>`证据片段:${a8(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?`事实需求覆盖卡片:
198
- ${b.join("\n")}`:""}(as)}),aS={total:as.length,satisfied:as.filter(a=>"satisfied"===a.status).length,missing:as.filter(a=>"missing"===a.status).length,lowConfidence:as.filter(a=>"low_confidence"===a.status).length};for(let a of aA)ax.push(`${d.title}:事实需求未确认 ${a}`);let aT=P?.chapterRules.find(a=>a.id===d.id||a.title===d.title),aU=bt.chapterTargets.get(d.id)||1200,aW=Math.max(3500,Number(process.env.DOCUMENT_LONGFORM_INITIAL_CHAPTER_CAP||8e3)),aX=bt.longformStrict?Math.min(aU,aW):aU,aZ=Math.ceil(aX*(bt.maxChars?1.1:1.18)),a$=bt.targetChars?Math.min(1800,Math.max(600,Math.floor(.5*aX))):1200,a_=Math.max(Math.min(aT?.minWords||0,aX),Math.min(P?.dynamicChapterRule.minWordsPerChapter||0,aX),Math.floor(.78*aX),a$),a0=b$(a_,aX),a1=Math.min(aX,6e3),a9=Math.max(900,Math.min(aX,Math.ceil(.55*aX),a1)),bc=Math.max(450,Math.min(a_,Math.floor(.72*a9))),be=Math.max(a9+300,Math.min(aZ,Math.ceil(1.25*a9))),bg=b$(bc,a9),bh=Math.min(b_(a9),18e4),bk=d.sections?.filter(Boolean).length||0,bn=/[、,,;;]/u.test(d.title),bo=bk>0?Math.min(aX,Math.max(1800,950*bk)):aX,bq=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),bs=process.env.DOCUMENT_SECTION_FIRST_GENERATION,bu=void 0!==bs&&0===Number(bs),bv=void 0!==bs&&0!==Number(bs),bx=aX>=6e3&&bk>=4&&bk<=bq&&!bn,by=!bu&&bk>=2&&(bk>bq||bn||bt.longformStrict&&bk>=6),bz=!bu&&!by&&bk>=2&&bk<=bq&&(bv||bx||bt.longformStrict);C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:by?`${(0,t.GQ)(d.title)} 正在按语义小节组并发成稿`:bz?`${(0,t.GQ)(d.title)} 正在按小节并发成稿`:`${(0,t.GQ)(d.title)} 正在整章一次成稿`,details:by||bz?[...aq,`有效证据:${X.length} 条`,`事实需求:${aS.satisfied}/${aS.total} 已满足,缺失 ${aS.missing},低置信 ${aS.lowConfidence}`,`首轮质量目标:约 ${aX} 字${aU!==aX?`,总预算分配约 ${aU} 字`:""},上限约 ${aZ} 字`,`规划小节:${d.sections?.length||0} 个`,by?"小节较多,按工期/质量/安全/资源等语义组并发生成,避免整章长调用低产":"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...aq,`有效证据:${X.length} 条`,`事实需求:${aS.satisfied}/${aS.total} 已满足,缺失 ${aS.missing},低置信 ${aS.lowConfidence}`,`目标字数:约 ${aX} 字,上限约 ${aZ} 字`,`规划小节:${bk} 个`,"首次生成必须覆盖章节结构、小节、事实和目标篇幅,后置修复仅兜底"],progress:{current:h+1,total:bd.length,label:by?"小节分组":bz?"小节并发":"整章成稿"}},{subtitle:(0,t.GQ)(d.title),order:h}),x();let bA=bz||by?Math.min(b_(aX)+12e4,48e4):Math.min(b_(aX),18e4),bB=by?await z(()=>bi(bw,`chapter-section-group-draft:${d.id}`,()=>(0,aR.od)(b=>bY({template:p,chapter:d,evidence:X,missingFacts:$,promptTexts:ap,projectContext:bf,requirement:a.requirement,roleContext:an,targetWords:bo,maxWords:aZ,forbidDrawingImages:!1,factCoverageContext:aP,sectionEvidenceProvider:a=>dq({manager:q,projectRoot:c,chapter:d,sectionTitle:a,scopedFilePaths:E,fileRoleByPath:ad,fileProcessingByPath:ae,signal:b}),diagnostics:bw,signal:b}),bA,a.signal))):bz?await z(()=>bi(bw,`chapter-section-draft:${d.id}`,()=>(0,aR.od)(b=>bZ({template:p,chapter:d,evidence:X,missingFacts:$,promptTexts:ap,projectContext:bf,requirement:a.requirement,roleContext:an,targetWords:bo,maxWords:aZ,forbidDrawingImages:!1,factCoverageContext:aP,projectRoot:c,modelName:(0,aR.$y)()?.model.name,materialContextHash:(0,ay.c6)({materialFilePaths:F,promptTexts:ap}),allowPartialResult:!1,sectionEvidenceProvider:a=>dq({manager:q,projectRoot:c,chapter:d,sectionTitle:a,scopedFilePaths:E,fileRoleByPath:ad,fileProcessingByPath:ae,signal:b}),diagnostics:bw,signal:b}),bA,a.signal))):await z(()=>bi(bw,`chapter-draft:${d.id}`,()=>(0,aR.od)(b=>bG(p,d,X,$,ap,bf,a.requirement,an,{forbidDrawingImages:!1,minWords:a_,targetWords:aX,maxWords:aZ,maxTokens:a0,factCoverageContext:aP,signal:b}),b_(aX),a.signal)));!bB&&bz&&(C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} 小节并发未在限定时间内返回,正在回退整章一次成稿`,details:["小节优先模式超时后回退整章成稿(整章路径有扩写收敛器兜底),避免单章失败导致文档缺章。"],progress:{current:h+1,total:bd.length,label:"整章回退"}},{subtitle:(0,t.GQ)(d.title),order:h}),x(v),bB=await z(()=>bi(bw,`chapter-draft-section-first-fallback:${d.id}`,()=>(0,aR.od)(b=>bG(p,d,X,$,ap,bf,a.requirement,an,{forbidDrawingImages:!1,minWords:a_,targetWords:aX,maxWords:aZ,maxTokens:a0,factCoverageContext:aP,signal:b}),b_(aX),a.signal)))),bB||by||(C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} 整章成稿未完整返回,正在执行一次降级生成`,details:[`目标字数:约 ${a9} 字`,`有效证据:${X.length} 条`],progress:{current:h+1,total:bd.length,label:"降级生成"}},{subtitle:(0,t.GQ)(d.title),order:h}),x(v),bB=await z(()=>bi(bw,`chapter-draft-fallback:${d.id}`,()=>(0,aR.od)(b=>bG(p,d,X,$,ap,bf,a.requirement,an,{forbidDrawingImages:!1,minWords:bc,targetWords:a9,maxWords:be,maxTokens:bg,factCoverageContext:aP,signal:b}),bh,a.signal)))),(0,ay.Te)(a.signal),bB||(C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"fallback",message:`${(0,t.GQ)(d.title)} 大模型未返回有效正文,已使用真实证据构建可审查草稿`,details:[`LLM 最近错误:${bw.llm.lastError||"空响应或超时"}`,`证据条数:${X.length}`],progress:{current:h+1,total:bd.length,label:"证据兜底草稿"}},{subtitle:(0,t.GQ)(d.title),order:h}),x(v),bB=function(a,b,c){var d;let e=(a.sections&&a.sections.length?a.sections:(d=a.title,/工期|质量|安全/u.test(d)?["工期目标与进度控制","质量管理体系与验收控制","安全生产责任体系","关键工序穿插协调","检查整改与闭环管理","资料归档与交付保障"]:/人、材、机|人材机|劳动力|材料|机械/u.test(d)?["劳动力组织与动态调配","材料采购进场与验收","机械设备配置与调度","资源供应风险控制","现场协调与保障措施","资料记录与闭环管理"]:/重点难点|危大/u.test(d)?["工程重点难点识别","危大工程管理体系","专项方案与技术交底","现场风险控制措施","监测检查与应急处置","验收销项与资料闭合"]:["总体部署与责任分工","实施流程与关键控制","资源配置与资料依据","质量安全与风险控制","检查验收与闭环管理","资料记录与成果移交"])).slice(0,7),f=b.flatMap(a=>a.content.split(/\r?\n/u).map(a=>a.trim()).filter(Boolean)).filter(a=>a.length>=8&&a.length<=180&&!/^(?:资料类型|PDF\s*第|第\d+页|OCR|识别错误|乱码)/iu.test(a)).slice(0,36),g=e.map((a,b)=>{let c=f.slice(4*b,4*b+4),d=c.length?`结合资料明确的${c.join("、")}等内容,`:"结合招标文件、图纸设计说明、工程量清单和现场实施条件,";return`### ${a}
198
+ ${b.join("\n")}`:""}(as)}),aS={total:as.length,satisfied:as.filter(a=>"satisfied"===a.status).length,missing:as.filter(a=>"missing"===a.status).length,lowConfidence:as.filter(a=>"low_confidence"===a.status).length};for(let a of aA)ax.push(`${d.title}:事实需求未确认 ${a}`);let aT=P?.chapterRules.find(a=>a.id===d.id||a.title===d.title),aU=bs.chapterTargets.get(d.id)||1200,aW=d.sections?.filter(Boolean).length||0,aX=/[、,,;;]/u.test(d.title),aZ=function(a){let{budgetTarget:b,sectionCount:c,title:d,longformStrict:e}=a,f=/[、,,;;]/u.test(d),g=/工期|进度|质量|安全|危大|资源|人材机|保障|措施|重难点/u.test(d),h=/概况|结语|附录|说明/u.test(d),i=c>0?c*(f?720:g?900:780):g?5200:3600,j=e?h?2600:g?5200:3600:Math.min(1200,b),k=e?Math.min(Math.max(4200,b),c>=30?9800:f?8800:g?9200:7200):b,l=Math.max(j,Math.min(b,i,k));return{budgetTarget:b,roundTarget:l,structureTarget:i,maxWords:Math.ceil(l*(a.longformStrict?1.12:1.18)),label:`章节预算约 ${b} 字,本轮生成约 ${l} 字,结构目标约 ${i} 字`}}({budgetTarget:aU,sectionCount:aW,title:d.title,longformStrict:bs.longformStrict}),a$=Math.ceil(aZ.maxWords*(bs.maxChars?1.05:1)),a_=bs.targetChars?Math.min(1800,Math.max(600,Math.floor(.45*aZ.roundTarget))):1200,a0=aZ.roundTarget,a1=Math.max(Math.min(aT?.minWords||0,a0),Math.min(P?.dynamicChapterRule.minWordsPerChapter||0,a0),Math.floor(.68*a0),a_),a9=b$(a1,a0),bd=Math.min(a0,5200),bf=Math.max(900,Math.min(a0,Math.ceil(.55*a0),bd)),bg=Math.max(450,Math.min(a1,Math.floor(.72*bf))),bh=Math.max(bf+300,Math.min(a$,Math.ceil(1.25*bf))),bk=b$(bg,bf),bn=Math.min(b_(bf),18e4),bo=aW>0?Math.min(a0,Math.max(1800,aZ.structureTarget)):a0,bq=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),bt=process.env.DOCUMENT_SECTION_FIRST_GENERATION,bv=void 0!==bt&&0===Number(bt),bw=void 0!==bt&&0!==Number(bt),bx=a0>=6e3&&aW>=4&&aW<=bq&&!aX,by=!bv&&aW>=2&&(aW>bq||aX||bs.longformStrict&&aW>=6),bz=!bv&&!by&&aW>=2&&aW<=bq&&(bw||bx||bs.longformStrict);C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:by?`${(0,t.GQ)(d.title)} 正在按语义小节组并发成稿`:bz?`${(0,t.GQ)(d.title)} 正在按小节并发成稿`:`${(0,t.GQ)(d.title)} 正在整章一次成稿`,details:by||bz?[...aq,`有效证据:${X.length} 条`,`事实需求:${aS.satisfied}/${aS.total} 已满足,缺失 ${aS.missing},低置信 ${aS.lowConfidence}`,aZ.label,`生成上限约 ${a$} 字`,`规划小节:${d.sections?.length||0} 个`,by?"小节较多,按工期/质量/安全/资源等语义组并发生成,避免整章长调用低产":"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...aq,`有效证据:${X.length} 条`,`事实需求:${aS.satisfied}/${aS.total} 已满足,缺失 ${aS.missing},低置信 ${aS.lowConfidence}`,aZ.label,`生成上限约 ${a$} 字`,`规划小节:${aW} 个`,"首次生成必须覆盖章节结构、小节和事实,篇幅目标仅作为规划参考"],progress:{current:h+1,total:bc.length,label:by?"小节分组":bz?"小节并发":"整章成稿"}},{subtitle:(0,t.GQ)(d.title),order:h}),x();let bA=bz||by?Math.min(b_(a0)+12e4,48e4):Math.min(b_(a0),18e4),bB=by?await z(()=>bi(bu,`chapter-section-group-draft:${d.id}`,()=>(0,aR.od)(b=>bY({template:p,chapter:d,evidence:X,missingFacts:$,promptTexts:ap,projectContext:be,requirement:a.requirement,roleContext:an,targetWords:bo,maxWords:a$,forbidDrawingImages:!1,factCoverageContext:aP,sectionEvidenceProvider:a=>dq({manager:q,projectRoot:c,chapter:d,sectionTitle:a,scopedFilePaths:E,fileRoleByPath:ad,fileProcessingByPath:ae,signal:b}),diagnostics:bu,signal:b}),bA,a.signal))):bz?await z(()=>bi(bu,`chapter-section-draft:${d.id}`,()=>(0,aR.od)(b=>bZ({template:p,chapter:d,evidence:X,missingFacts:$,promptTexts:ap,projectContext:be,requirement:a.requirement,roleContext:an,targetWords:bo,maxWords:a$,forbidDrawingImages:!1,factCoverageContext:aP,projectRoot:c,modelName:(0,aR.$y)()?.model.name,materialContextHash:(0,ay.c6)({materialFilePaths:F,promptTexts:ap}),allowPartialResult:!1,sectionEvidenceProvider:a=>dq({manager:q,projectRoot:c,chapter:d,sectionTitle:a,scopedFilePaths:E,fileRoleByPath:ad,fileProcessingByPath:ae,signal:b}),diagnostics:bu,signal:b}),bA,a.signal))):await z(()=>bi(bu,`chapter-draft:${d.id}`,()=>(0,aR.od)(b=>bG(p,d,X,$,ap,be,a.requirement,an,{forbidDrawingImages:!1,minWords:a1,targetWords:a0,maxWords:a$,maxTokens:a9,factCoverageContext:aP,signal:b}),b_(a0),a.signal)));!bB&&bz&&(C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} 小节并发未在限定时间内返回,正在回退整章一次成稿`,details:["小节优先模式超时后回退整章成稿(整章路径有扩写收敛器兜底),避免单章失败导致文档缺章。"],progress:{current:h+1,total:bc.length,label:"整章回退"}},{subtitle:(0,t.GQ)(d.title),order:h}),x(v),bB=await z(()=>bi(bu,`chapter-draft-section-first-fallback:${d.id}`,()=>(0,aR.od)(b=>bG(p,d,X,$,ap,be,a.requirement,an,{forbidDrawingImages:!1,minWords:a1,targetWords:a0,maxWords:a$,maxTokens:a9,factCoverageContext:aP,signal:b}),b_(a0),a.signal)))),bB||by||(C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} 整章成稿未完整返回,正在执行一次降级生成`,details:[`降级本轮目标约 ${bf} 字`,`章节预算约 ${aZ.budgetTarget} 字`,`有效证据:${X.length} 条`],progress:{current:h+1,total:bc.length,label:"降级生成"}},{subtitle:(0,t.GQ)(d.title),order:h}),x(v),bB=await z(()=>bi(bu,`chapter-draft-fallback:${d.id}`,()=>(0,aR.od)(b=>bG(p,d,X,$,ap,be,a.requirement,an,{forbidDrawingImages:!1,minWords:bg,targetWords:bf,maxWords:bh,maxTokens:bk,factCoverageContext:aP,signal:b}),bn,a.signal)))),(0,ay.Te)(a.signal),bB||(C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"fallback",message:`${(0,t.GQ)(d.title)} 大模型未返回有效正文,已使用真实证据构建可审查草稿`,details:[`LLM 最近错误:${bu.llm.lastError||"空响应或超时"}`,`证据条数:${X.length}`],progress:{current:h+1,total:bc.length,label:"证据兜底草稿"}},{subtitle:(0,t.GQ)(d.title),order:h}),x(v),bB=function(a,b,c){var d;let e=(a.sections&&a.sections.length?a.sections:(d=a.title,/工期|质量|安全/u.test(d)?["工期目标与进度控制","质量管理体系与验收控制","安全生产责任体系","关键工序穿插协调","检查整改与闭环管理","资料归档与交付保障"]:/人、材、机|人材机|劳动力|材料|机械/u.test(d)?["劳动力组织与动态调配","材料采购进场与验收","机械设备配置与调度","资源供应风险控制","现场协调与保障措施","资料记录与闭环管理"]:/重点难点|危大/u.test(d)?["工程重点难点识别","危大工程管理体系","专项方案与技术交底","现场风险控制措施","监测检查与应急处置","验收销项与资料闭合"]:["总体部署与责任分工","实施流程与关键控制","资源配置与资料依据","质量安全与风险控制","检查验收与闭环管理","资料记录与成果移交"])).slice(0,7),f=b.flatMap(a=>a.content.split(/\r?\n/u).map(a=>a.trim()).filter(Boolean)).filter(a=>a.length>=8&&a.length<=180&&!/^(?:资料类型|PDF\s*第|第\d+页|OCR|识别错误|乱码)/iu.test(a)).slice(0,36),g=e.map((a,b)=>{let c=f.slice(4*b,4*b+4),d=c.length?`结合资料明确的${c.join("、")}等内容,`:"结合招标文件、图纸设计说明、工程量清单和现场实施条件,";return`### ${a}
199
199
 
200
200
  ${d}项目部应围绕本节管理目标建立责任分工、技术交底、资源投入、过程检查和验收复核机制。实施过程中应将工期、质量、安全文明、材料设备、劳动力组织和资料归档要求同步纳入现场管理,确保各项措施能够转化为可执行、可检查、可追溯的施工控制动作。
201
201
 
202
202
  对涉及专业穿插、作业面移交、材料进场、机械设备使用、隐蔽验收和成品保护的事项,应在施工前明确控制标准,在施工中落实旁站检查和问题整改,在完成后形成复核记录。各岗位应按项目总体目标开展协调,避免因信息传递、资源供应或工序衔接不及时影响施工组织设计的实施效果。`}).join("\n\n"),h=(0,ai.V7)(g)<Math.min(c,5200)?"\n\n### 履约检查与闭环管理\n\n项目经理部应将本章措施纳入周计划、日协调和专项检查机制,对关键线路、资源保障、质量验收、安全文明、资料归档等事项进行持续跟踪。发现偏差时,应明确责任人、整改期限和复核要求,形成问题发现、整改落实、复查销项和资料留痕的闭环管理链条,确保本章内容服务于正式投标响应和后续现场履约。":"";return dd(`## ${a.title}
203
203
 
204
- ${g}${h}`,a)}(d,X,a9));let bC=bB,bD=Q(bC),bE=bD.length>=Math.min(3,d.sections?.length||3)?{...d,sections:bD}:d,bF=cU(bC,bE),bH=0,bI=by?1:Math.min(6,Math.max(3,Math.ceil(bF.length/4))),bJ=bF.map(a=>`${a.sectionTitle}:${a.reason}:${a.bodyLength}`).join("|");for(;bF.length>0&&bH<bI;){bH+=1,C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} 存在 ${bF.length} 个小节缺口,正在按目标缺口强制补写`,details:bF.map(a=>a.message),progress:{current:h+1,total:bd.length,label:`小节补写第 ${bH} 轮`}},{subtitle:(0,t.GQ)(d.title),order:h}),x(v);let b=bC,c=await z(()=>bi(bw,`chapter-section-repair:${d.id}:${bH}`,()=>b3({template:p,chapter:d,content:b,evidence:X,missingFacts:$,promptTexts:ap,projectContext:bf,requirement:a.requirement,roleContext:an,targetWords:aX,maxWords:aZ,forbidDrawingImages:!1,factCoverageContext:aP,forcedSections:bF,signal:a.signal})));c?.trim()&&(bC=c);let e=(bF=cU(bC,bE)).map(a=>`${a.sectionTitle}:${a.reason}:${a.bodyLength}`).join("|"),f=e!==bJ;if(0===bF.length||!f)break;bJ=e}bF.length>0&&(C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"failed",message:`${(0,t.GQ)(d.title)} 小节补齐仍未完全达标,已标记为阻断问题`,details:bF.map(a=>a.message),progress:{current:h+1,total:bd.length,label:"小节未达标"}},{subtitle:(0,t.GQ)(d.title),order:h}),x(v));let bK=bl({chapter:d,content:bC,missingFacts:$,targetWords:aX}),bL=(0,aj.Ff)(bK);bw.quality.blockingCount+=bL.blocking,bw.quality.importantCount+=bL.important,bw.quality.minorCount+=bL.minor;let bM=bj(bK);if(bM.length>0){let b=bC;C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} 正在根据质量问题修复章节:${bM.length} 个阻断问题`,details:bM,progress:{current:h+1,total:bd.length,label:"章节修复"}},{subtitle:(0,t.GQ)(d.title),order:h}),x(v);let c=await z(()=>bi(bw,`chapter-repair:${d.id}`,()=>bm({template:p,chapter:{id:d.id,title:d.title,content:b,evidence:X,missingFacts:[...$,...aA.map(a=>`事实需求未确认:${a}`)],sections:d.sections||[]},issues:bM,promptTexts:ap,requirement:a.requirement,forbidDrawingImages:!1,diagnostics:bw,signal:a.signal})));bC=c.content,c.appliedCount>0&&(bw.quality.repairedCount+=1),(0,ay.Te)(a.signal)}if(!bC.trim())throw Error(`${(0,t.GQ)(d.title)} 首次生成失败,未获得可用于定稿的正文`);let bN=bC,bO=0,bP=bj(bl({chapter:d,content:bN,missingFacts:$,targetWords:aX})).filter(a=>!/正文篇幅明显低于目标/u.test(a)),bQ=(0,ai.V7)(bN)<Math.floor(.45*Math.min(aX,bo));if(bP.length>0&&!bQ){C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} 存在结构性质量问题,正在定向修复`,details:bP,progress:{current:h+1,total:bd.length,label:"结构修复"}},{subtitle:(0,t.GQ)(d.title),order:h}),x(v);let b=await z(()=>bi(bw,`chapter-structural-expand:${d.id}`,()=>b4({template:p,chapter:d,content:bC,evidence:X,promptTexts:ap,requirement:a.requirement,roleContext:an,targetChars:Math.min(aZ,Math.max((0,ai.V7)(bC)+1600,Math.floor(.7*bo))),maxChars:aZ,forbidDrawingImages:!1,signal:a.signal})));bN=b.content,bO=b.rounds}bN=dd(bN,d);let bR=Q(bN),bS=(0,aj.yw)(bN,[{title:d.title,content:bN,sections:bR}]).filter(a=>"empty"===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=>(0,aO.existsSync)(a));if(!c)return;let d=Object.fromEntries((0,aO.readFileSync)(c,"utf8").split(/\r?\n/u).map(a=>a.split("=")).filter(a=>a.length>=2).map(([a,...b])=>[a,b.join("=")])),f=d.DEBUG_SERVER_URL;if(!f)return;fetch(f,{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{}}(c,{event:"section-repair-check",hypothesisId:"H1",chapterId:d.id,chapterTitle:d.title,gapCount:bS.length,gaps:bS.slice(0,10).map(a=>({title:a.sectionTitle,reason:a.reason,message:a.message})),contentChars:(0,ai.V7)(bN),targetWords:aX}),bS.length>0&&(C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} 正在小节级定向补写 ${bS.length} 个未达标小节`,details:bS.slice(0,8).map(a=>a.message),progress:{current:h+1,total:bd.length,label:"小节补写"}},{subtitle:(0,t.GQ)(d.title),order:h}),x(v),bN=await z(()=>bi(bw,`section-repair:${d.id}`,()=>b3({template:p,chapter:d,content:bN,evidence:X,missingFacts:$,promptTexts:ap,projectContext:bf,requirement:a.requirement,roleContext:an,targetWords:Math.max(1200,Math.floor(.35*aX)),maxWords:Math.min(aZ,Math.max(2400,Math.floor(.55*aX))),forbidDrawingImages:!1,factCoverageContext:aP,forcedSections:bS,signal:a.signal}))),bN=dd(bN,d),bR=Q(bN),bS=(0,aj.yw)(bN,[{title:d.title,content:bN,sections:bR}]).filter(a=>"empty"===a.reason),0===bS.length&&(bw.quality.repairedCount+=1));let bT=bV({chapter:d,content:bN,evidence:X}),bU=(0,ai.V7)(bN),bW=Q(bN),bX=bW.length>0?bW:d.sections||[],b0=(0,aj.qK)(bN,[{title:d.title,content:bN,sections:bX}]).map(a=>a.message),b1=bT.slice(0,6).map(a=>`小节事实密度需优化:${a}`),b2=[...bl({chapter:{...d,sections:bX},content:bN,missingFacts:$,targetWords:aX}),...b0,...b1],b5=function(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))?"failed":"success"}(bU,0,b2);g=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:b5,message:(0,ba.AQ)(`${(0,t.GQ)(d.title)} 已由大模型成稿${bO>0?`并定向扩写 ${bO} 轮`:""}:当前 ${bU} 字 / 参考目标 ${Math.floor(.95*aX)} 字${b2.length?`;待优化:${b2.slice(0,8).join("、")}`:""}`,i),details:[`参考达标率:${Math.round(bU/Math.max(1,Math.floor(.95*aX))*100)}%`,...aq,`二级小节:${bX.length} 个`,`扩写轮次:${bO}`],progress:{current:h+1,total:bd.length,label:b2.length?"章节已生成":"章节达标"}},{subtitle:(0,t.GQ)(d.title),order:h}),aD[h]=g;let b6={id:d.id,title:d.title,content:bN,evidence:X,missingFacts:$,sections:bX,tablePlans:d.tablePlans||[]};aC[h]=b6,v=aC.filter(a=>!!a),x(v);let b7=bl({chapter:d,content:bN,missingFacts:$,targetWords:aX}),b8=(0,aj.Ff)(b7);bw.quality.blockingCount+=b8.blocking,bw.quality.importantCount+=b8.important,bw.quality.minorCount+=b8.minor}catch(b){if(a.signal?.aborted)throw b;console.error(`[gen] chapter ${d.title} failed:`,b),aA.push(`${d.title}:${b instanceof Error?b.message:"生成失败"}`),aD[h]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,t.GQ)(d.title)} 生成失败`},{subtitle:(0,t.GQ)(d.title),order:h})}g&&(C[j]=g),x(v)}))}let bN=aC.filter(a=>!!a);return aB.push(...aD.filter(a=>!!a)),du({chapterDrafts:bN,chapterDraftsByOrder:aC,chapterGenerationStagesByOrder:aD,chapterGenerationStages:aB,effectiveChapters:bd,template:p,allEvidence:au,progressStages:C,documentSpec:P,projectMaterialProfile:G,projectMaterialSummary:N,domainProfile:R,documentBudget:bt,promptTexts:_,reviewPromptTexts:ab,input:a,generationStrategy:bu,generationDiagnostics:bw,promptBindings:E,promptDocumentRules:Z,projectUnderstanding:H,projectContext:bf,projectRoot:c,projectId:o,readiness:S,factExtractionPromptTexts:aa,hasExplicitOutline:M,missingItems:ax,retrievalCoverageReports:av,failedChapterMessages:aA,webResearchReport:aw,indexHealth:ag,promptPlan:D,emitProgress:x,withProgressHeartbeat:z})}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,g.aY)());if(!f)throw Error("No knowledge base project found");let h=(0,g.Qh)(),i=(0,br.Hh)(f,b),j=(0,br.W9)(f,b),{kindByPath:k,processingByPath:l}=(0,br.Hz)(j),m=new Set(i),n=new Map([...k.entries()].map(([a,b])=>[a,(0,br._W)(b)])),o=new Map([...l.entries()].map(([a,b])=>[a,b])),p=dt(await h.getProject(f),[...m],a.maxEvidencePerChapter),q=[],r=[...m].filter(Boolean).sort(),t=dm(c,c.queries,[]),v=dn(c,[]);for(let a of t.slice(0,v)){let b=await h.search(f,a,{scope:"project",filters:{filePaths:r},limit:Math.min(p,12),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});q.push(...b.results.filter(a=>bp(f,a.filePath,m)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:n.get(a.filePath),processingType:o.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let w=dl(c,q.filter(a=>bp(f,a.filePath,m)),{maxItems:dp(p,c),maxChars:16e3,preservePinned:!0}),x=a.currentMarkdown||"",y=new Set(a.existingFacts??[]),z=c.requiredFacts.filter(a=>!y.has(a)&&!w.some(b=>(0,u.Lk)(b,a))),A=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",x?`> 当前文档上下文摘要:${x.replace(/\s+/gu," ")}`:"",w.length>0?`本章根据知识库资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`:"系统暂未检索到足够证据,建议扩大本地知识库检索后复核。","",w.length>0?"### 资料依据":"",...w.map(s.OF),"",z.length>0?"### 待确认事项":"",...z.map(a=>`- ${a}:建议扩大本地知识库检索、事实补抽或人工复核系统落位结果。`)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:A,evidence:w,missingFacts:z}}},51144:(a,b,c)=>{function d(a,b,c,e="items"){let f=c.maxItems??Number.MAX_SAFE_INTEGER,g=c.maxChars??Number.MAX_SAFE_INTEGER,h=c.charFn??(a=>JSON.stringify(a).length),i=a.map(a=>({item:a,score:b(a)}));i.sort((a,b)=>b.score-a.score);let j=[],k=[],l=0;for(let{item:a}of i){let b=h(a);j.length<f&&l+b<=g?(j.push(a),l+=b):k.push(a)}let m=[];if(k.length>0){for(let a of(m.push(`[selection] ${e}: 预算 ${f}项/${g}字符 → 选中 ${j.length}项(${l}字符),丢弃 ${k.length}项`),k.slice(0,10))){let b="string"==typeof a?a.slice(0,80):JSON.stringify(a).slice(0,80);m.push(` - 丢弃: ${b}`)}k.length>10&&m.push(` ... 及其他 ${k.length-10} 项`)}return{selected:j,dropped:k,droppedLog:m}}function e(a){let b=0,c=a.length;return 0===c?0:(b+=3*(a.match(/\d+(?:\.\d+)?/gu)||[]).length,/m[23²³]?|mm|cm|km|t|kg|台|套|个|项|批|次|份|人|日历天|天|月|万元|元|%|MPa|kPa|kN|℃/iu.test(a)&&(b+=2),/GB|JGJ|ISO|CJJ|CECS|DL|YB|SH|HG|SY|NB/iu.test(a)&&(b+=3),/验收|质量|安全|工期|进度|成本|风险|危大|重点|难点|关键|控制|标准|规范|设计|施工|材料|设备/u.test(a)&&(b+=1),c<20&&(b-=1),/项目名称|工程名称|招标人|建设地点|计划工期|质量标准|合同估算/u.test(a)&&(b+=2),b)}function f(a){let b=0,c=`${a.key||""}${a.fieldName||""}${a.fieldId||""}`,d="string"==typeof a.value?a.value:"number"==typeof a.value?String(a.value):"";return a.required&&(b+=10),/\d/u.test(d)&&(b+=5),/项目名称|工程名称|项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|施工范围|计划工期|合同工期|质量标准|合同估算|投资估算|最高投标限价/u.test(c)&&(b+=4),/m[23²³]?|mm|cm|km|t|kg|台|套|个|万元|元|%|MPa|日历天/u.test(d)&&(b+=3),/招标文件|招标公告|投标人须知|前附表/u.test(a.fieldId||"")&&(b+=2),b}c.d(b,{Cr:()=>d,Ox:()=>e,rF:()=>f})},52511:(a,b,c)=>{c.d(b,{Bh:()=>C,C1:()=>H,N6:()=>I,QJ:()=>B,bV:()=>F,bj:()=>z,dU:()=>y,h0:()=>E,jG:()=>A,xm:()=>D,zY:()=>L});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(81125),n=c(56942),o=c(2773);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){let{version:b,updatedAt:c,changeLog:d,...e}=a,f=JSON.stringify(e,Object.keys(e).sort());return(0,g.createHash)("sha256").update(f).digest("hex")}function s(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||"文档",version:Number.isFinite(a.version)&&a.version>0?Math.floor(a.version):1,updatedAt:Number.isFinite(a.updatedAt)?a.updatedAt:Date.now(),changeLog:Array.isArray(a.changeLog)?a.changeLog.filter(a=>a&&"object"==typeof a&&Number.isFinite(a.version)&&"string"==typeof a.summary).slice(0,50):[],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):[],tablePlans:Array.isArray(a.tablePlans)?a.tablePlans:[],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):[],projectBindings:Array.isArray(a.projectBindings)?a.projectBindings.filter(a=>a.materialRootPath).map(a=>({materialRootPath:a.materialRootPath.replace(/^\/+|\/+$/gu,"")})):(0,o.qp)(a),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"})):[],builtIn:!1}}function t(){try{let a=q();if(!d.existsSync(a))return[];let b=JSON.parse(d.readFileSync(a,"utf-8"));if(!Array.isArray(b))return d.renameSync(a,`${a}.corrupt-${Date.now()}`),[];return b.map(s)}catch{try{let a=q();d.existsSync(a)&&d.renameSync(a,`${a}.corrupt-${Date.now()}`)}catch{}return[]}}function u(a){d.writeFileSync(q(),JSON.stringify(a.map(s),null,2),"utf-8")}function v(a){return(0,g.createHash)("sha256").update(a).digest("hex").slice(0,12)}function w(a){return a.replace(/\s+/gu," ").trim().slice(0,160)}function x(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 y(a=[]){if(0===a.length)return[];let b=[];for(let c of a){let a=x(c.promptId);a&&b.push({...a,roleId:c.roleId,contentHash:v(a.content),contentPreview:w(a.content)})}return b}function z(a){let b=J(a),c=(0,i.XB)("prompt"),d=L(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=K(d),h=[];for(let a of g){let d=x(a.promptId);if(!d)continue;let e=c.find(b=>b.id===a.roleId),f=b?.promptRoles.find(b=>b.roleId===a.roleId),g=e?.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),i=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,g,d.name),j=`projectRole:${b?.id||"unknown"}:${a.roleId}:order=${f?.order??0}`;h.push({...d,roleId:a.roleId,contentHash:v(d.content),contentPreview:w(d.content),executionType:g,category:i,bindingSource:j,roleConfigId:b?.id,roleName:e?.name,order:f?.order})}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 A(){let a=(0,j.V)().templates,b=t().filter(b=>!a.some(a=>a.id===b.id));return[...a,...b]}function B(a){return A().find(b=>b.id===a)}function C(a){let b,c,d=s(a),e=t().find(a=>a.id===d.id),f=Date.now();if(e&&r(e)!==r(d)){b=(e.version||0)+1;let a=d.chapters.map(a=>a.title).join("、");c=[{version:b,timestamp:f,summary:a?`章节结构调整:${a.slice(0,80)}${a.length>80?"…":""}`:"模版内容已更新"},...e.changeLog||[]].slice(0,50)}else e?(b=e.version||1,c=e.changeLog||[]):(b=1,c=[{version:1,timestamp:f,summary:"创建模版"}]);let g={...d,version:b,updatedAt:f,changeLog:c},h=t().filter(a=>a.id!==d.id);return h.push(g),u(h),g}async function D(a,b=(0,h.aY)()){let c,d=B(a),f=[];if(!d)return{issues:[{level:"error",message:"文档模板不存在或已删除"}],fileDiagnostics:[],promptDiagnostics:[],config:void 0};let g=(0,i.XB)("prompt"),j=I(d),p=J(d);j||f.push({level:"error",message:"模板未绑定项目角色配置,且未匹配到自动专业角色配置"}),j&&!p&&f.push({level:"error",message:`项目角色配置不存在或已删除:${j}`}),d.promptIds?.length&&f.push({level:"warning",message:"模板存在旧 promptIds 字段残留,该字段已不参与生成,请清理模板历史数据。"}),d.promptBindings?.length&&f.push({level:"warning",message:"模板存在旧 promptBindings 字段残留,该字段已不参与生成,请清理模板历史数据。"});let q=L(d),r=(0,o.qp)(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[];let c=new Set(b.map(a=>a.relativePath)),d=[],e=new Set;for(let f of a){let a=f.materialRootPath.replace(/^\/+|\/+$/gu,"");for(let f 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))e.has(f)||(e.add(f),d.push(f))}return d}(r,t);0===r.length?f.push({level:"error",message:"模板未绑定项目资料包,请先选择需要参与生成的项目文件夹。"}):0===u.length&&f.push({level:"error",message:"模板绑定的项目资料包不存在或没有可用索引文件,请重新选择项目资料包。"});let v=new Map(t.map(a=>[a.relativePath,a])),w=u.map(a=>{let b=v.get(a);return b||f.push({level:"error",message:`知识库文件不存在:${a}`}),b&&("disk"===b.status||0===b.indexedAt)&&f.push({level:"warning",message:`知识库文件存在但尚未完成索引:${a}`}),b?.status==="error"&&f.push({level:"warning",message:`知识库文件索引失败:${a}${b.errorMessage?`,${b.errorMessage}`:""}`}),b&&0===b.chunkCount&&f.push({level:"warning",message:`知识库文件暂无可检索内容切片:${a}`}),{filePath:a,roleId:"project_material",roleName:"项目资料包",exists:!!b,indexed:!!(b&&b.indexedAt>0&&"disk"!==b.status),chunkCount:b?.chunkCount??0,vectorReady:!!(b&&b.chunkCount>0)}}),x=y(q),z=new Set(p?.promptRoles.map(a=>a.roleId)||[]);for(let a of p?.promptRoles||[]){let b=g.find(b=>b.id===a.roleId);if(!b){f.push({level:"error",message:`提示词角色不存在:${a.roleId}`});continue}0===(b.resourceIds?.length?b.resourceIds:b.resourceId?[b.resourceId]:[]).length&&f.push({level:"error",message:`提示词角色未绑定资源:${b.name}`})}let A=q.map(a=>{let b=g.find(b=>b.id===a.roleId),c=x.find(b=>b.id===a.promptId);return b||f.push({level:"error",message:`提示词角色不存在:${a.roleId}`}),z.has(a.roleId)||f.push({level:"error",message:`提示词绑定不属于当前项目角色配置:${a.roleId}`}),c||f.push({level:"error",message:`提示词不存在:${a.promptId}`}),c&&!c.content.trim()&&f.push({level:"warning",message:`提示词为空:${c.name}`}),{...a,roleName:b?.name,promptTitle:c?.name,promptSource:c?.source,contentLength:c?.content.length??0,contentHash:c?.contentHash,contentPreview:c?.contentPreview,exists:!!c}});if(d){let a=(0,l.P)(s,{boundFilePaths:u}),b=(0,m.h)(d,a);for(let e of(c=(0,n.$)({template:d,spec:(0,k.x)(d).spec,summary:a,resolvedRoles:b})).blockingIssues)f.push({level:"error",message:`生成准备度不足:${e}`});for(let a of c.warnings)f.push({level:"warning",message:a})}return{templateId:a,projectRoleConfigId:j,fileDiagnostics:w,promptDiagnostics:A,readiness:c,issues:f}}function E(a){if(new Set((0,j.V)().templates.map(a=>a.id)).has(a))throw Error("Configured template cannot be deleted");u(t().filter(b=>b.id!==a))}function F(a){let b=B(a);if(!b)throw Error("Document template not found");let c=Date.now(),d=s({...b,id:`${b.id}-copy-${c}`,name:`${b.name} Copy`,builtIn:!1,version:1,updatedAt:c,changeLog:[{version:1,timestamp:c,summary:`从 ${b.id} v${b.version||1} 复制`}]}),e=t();return e.push(d),u(e),d}function G(a,b){try{return RegExp(b,"iu").test(a)}catch{return a.includes(b)}}function H(a,b){return(function(a){let b=`${a.name} ${a.category} ${a.outputTitle} ${a.description}`;return(0,j.V)().chapterTitleFilters.filter(a=>a.templateMatchers.some(a=>G(b,a)))})(b).some(b=>!!b.minLength&&a.length<b.minLength||!!b.maxLength&&a.length>b.maxLength||b.forbiddenPatterns.some(b=>G(a,b)))}function I(a){return a.projectRoleConfigId||void 0}function J(a){let b=I(a);return b?(0,i.Mu)(b):void 0}function K(a){let b=new Set,c=[];for(let d of a){let a=`${d.roleId}:${d.promptId}`;!d.promptId||!d.roleId||b.has(a)||(b.add(a),c.push(d))}return c}function L(a){let b=J(a);if(!b)return[];let c=(0,i.XB)("prompt"),d=[];for(let a of[...b.promptRoles].sort((a,b)=>a.order-b.order)){let b=c.find(b=>b.id===a.roleId),e=b?b.resourceIds?.length?b.resourceIds:b.resourceId?[b.resourceId]:[]:[];b&&0!==e.length&&d.push(...e.map(a=>({promptId:a,roleId:b.id})))}return K(d)}},56942:(a,b,c)=>{c.d(b,{$:()=>h,R:()=>i});var d=c(81125),e=c(92808);function f(a){return[...new Set(a.filter(Boolean))]}function g(a){let b=(0,e.t0)(a,e.hW);return b.length>0?b:["project_overview"]}function h(a){var b,c,e;let h=a.resolvedRoles.filter(a=>a.required&&!a.satisfied).map(a=>a.role),i=a.resolvedRoles.filter(a=>a.weak).map(a=>a.role),j=(b=a.template,c=a.spec,e=a.summary,b.chapters.map(a=>{let b=function(a,b){let c=b.chapterRules.find(b=>b.id===a.id||b.title===a.title),d=(c?.requiredFactIds||[]).map(a=>b.factFields.find(b=>b.id===a)?.name).filter(Boolean);return f([...a.requiredFacts||[],...d])}(a,c),d=f([...g([a.title,a.purpose,...a.queries||[],...a.sections||[]].join("\n")),...b.flatMap(a=>g(a))]),h=d.filter(a=>(e.materialInventory[a]||[]).length>0),i=h.reduce((a,b)=>a+(e.materialInventory[b]||[]).length,0),j=b.filter(a=>g(a).some(a=>h.includes(a))),k=b.filter(a=>!j.includes(a)),l=b.length>0?j.length/b.length:1,m=d.length>0?h.length/d.length:1;return{chapterId:a.id,title:a.title,requiredFacts:b,coveredFacts:j,missingFacts:k,requiredRoles:d,satisfiedRoles:h,evidenceCount:i,readinessRate:Math.min(1,.5*l+.3*m+.2*(i>0))}})),k=[],l=[];0===a.template.chapters.length&&l.push("模板未配置章节,建议通过模板章节或显式 OUTLINE 提供文档结构"),a.template.chapters.some(a=>!a.purpose&&(!a.queries||0===a.queries.length)&&(!a.requiredFacts||0===a.requiredFacts.length))&&l.push("部分模板章节缺少 purpose、queries 或 requiredFacts,生成质量可能不稳定"),a.summary.source.ambiguous&&k.push(a.summary.source.selectionReason),a.summary.fingerprint.confidence<.34&&l.push("材料指纹置信度较低,建议绑定明确的材料文件"),0===a.summary.source.selectedFiles&&k.push("未绑定可用项目资料文件,无法支撑文档生成"),h.length>0&&0===a.summary.source.selectedFiles&&l.push("模板未绑定可用项目资料文件,请先绑定参与生成的资料"),i.length>0&&0===a.summary.source.selectedFiles&&l.push("绑定资料证据较弱,请确认资料已完成索引");let m=j.filter(a=>a.readinessRate<.5);m.length>0&&l.push(`章节级证据覆盖较弱:${m.slice(0,5).map(a=>`${a.title} ${Math.round(100*a.readinessRate)}%`).join("、")}`);let n=j.filter(a=>a.requiredFacts.length>0&&0===a.evidenceCount);n.length>0&&l.push(`部分章节缺少匹配证据:${n.slice(0,5).map(a=>a.title).join("、")}`);let o=a.summary.coverage.satisfiedRoles,p=a.resolvedRoles.filter(a=>!a.required&&!a.satisfied).map(a=>a.role),q=[`资料范围:${a.summary.source.selectionReason},可用文件 ${a.summary.source.selectedFiles}/${a.summary.source.totalFiles} 份`,`已识别资料类型:${o.join("、")||"无"}`,a.summary.coverage.missingRoles.length?`待补充必需资料类型:${a.summary.coverage.missingRoles.join("、")}`:"必需资料类型已满足",h.length?`模板强相关资料角色缺失:${h.join("、")}`:"模板强相关资料角色已满足",p.length?`可选资料角色未识别:${p.join("、")}`:"",i.length?`证据较弱资料角色:${i.join("、")}`:""].filter(Boolean),r=[a.spec.factFields.length>0,a.spec.chapterRules.length>0,a.spec.gateRules.length>0];return{ready:0===k.length,materialCoverageRate:a.summary.coverage.materialCompletenessRate,roleSatisfactionRate:(0,d.o)(a.resolvedRoles),specCompletenessRate:r.filter(Boolean).length/r.length,missingRoles:h,weakRoles:i,diagnostics:q,chapterDiagnostics:j,blockingIssues:k,warnings:l}}function i(a,b={}){let c=a.chapterDiagnostics.filter(a=>a.readinessRate<.7||a.missingFacts.length>0).slice(0,8).map(a=>`${a.title}:${Math.round(100*a.readinessRate)}%,证据 ${a.evidenceCount} 条${a.missingFacts.length?`,缺失 ${a.missingFacts.slice(0,6).join("、")}`:""}`);return b.publicSafe?["## 生成事实使用边界",`资料覆盖程度:${Math.round(100*a.materialCoverageRate)}%`,`资料角色满足程度:${Math.round(100*a.roleSatisfactionRate)}%`,c.length?`章节证据风险:
204
+ ${g}${h}`,a)}(d,X,bf));let bC=bB,bD=Q(bC),bE=bD.length>=Math.min(3,d.sections?.length||3)?{...d,sections:bD}:d,bF=cU(bC,bE),bH=0,bI=by?1:Math.min(6,Math.max(3,Math.ceil(bF.length/4))),bJ=bF.map(a=>`${a.sectionTitle}:${a.reason}:${a.bodyLength}`).join("|");for(;bF.length>0&&bH<bI;){bH+=1,C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} 存在 ${bF.length} 个小节缺口,正在按目标缺口强制补写`,details:bF.map(a=>a.message),progress:{current:h+1,total:bc.length,label:`小节补写第 ${bH} 轮`}},{subtitle:(0,t.GQ)(d.title),order:h}),x(v);let b=bC,c=await z(()=>bi(bu,`chapter-section-repair:${d.id}:${bH}`,()=>b3({template:p,chapter:d,content:b,evidence:X,missingFacts:$,promptTexts:ap,projectContext:be,requirement:a.requirement,roleContext:an,targetWords:a0,maxWords:a$,forbidDrawingImages:!1,factCoverageContext:aP,forcedSections:bF,signal:a.signal})));c?.trim()&&(bC=c);let e=(bF=cU(bC,bE)).map(a=>`${a.sectionTitle}:${a.reason}:${a.bodyLength}`).join("|"),f=e!==bJ;if(0===bF.length||!f)break;bJ=e}bF.length>0&&(C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"failed",message:`${(0,t.GQ)(d.title)} 小节补齐仍未完全达标,已标记为阻断问题`,details:bF.map(a=>a.message),progress:{current:h+1,total:bc.length,label:"小节未达标"}},{subtitle:(0,t.GQ)(d.title),order:h}),x(v));let bK=bl({chapter:d,content:bC,missingFacts:$,targetWords:a0}),bL=(0,aj.Ff)(bK);bu.quality.blockingCount+=bL.blocking,bu.quality.importantCount+=bL.important,bu.quality.minorCount+=bL.minor;let bM=bj(bK);if(bM.length>0){let b=bC;C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} 正在根据质量问题修复章节:${bM.length} 个阻断问题`,details:bM,progress:{current:h+1,total:bc.length,label:"章节修复"}},{subtitle:(0,t.GQ)(d.title),order:h}),x(v);let c=await z(()=>bi(bu,`chapter-repair:${d.id}`,()=>bm({template:p,chapter:{id:d.id,title:d.title,content:b,evidence:X,missingFacts:[...$,...aA.map(a=>`事实需求未确认:${a}`)],sections:d.sections||[]},issues:bM,promptTexts:ap,requirement:a.requirement,forbidDrawingImages:!1,diagnostics:bu,signal:a.signal})));bC=c.content,c.appliedCount>0&&(bu.quality.repairedCount+=1),(0,ay.Te)(a.signal)}if(!bC.trim())throw Error(`${(0,t.GQ)(d.title)} 首次生成失败,未获得可用于定稿的正文`);let bN=bC,bO=0,bP=bj(bl({chapter:d,content:bN,missingFacts:$,targetWords:a0})).filter(a=>!/正文篇幅明显低于目标/u.test(a)),bQ=(0,ai.V7)(bN)<Math.floor(.45*Math.min(a0,bo));if(bP.length>0&&!bQ){C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} 存在结构性质量问题,正在定向修复`,details:bP,progress:{current:h+1,total:bc.length,label:"结构修复"}},{subtitle:(0,t.GQ)(d.title),order:h}),x(v);let b=await z(()=>bi(bu,`chapter-structural-expand:${d.id}`,()=>b4({template:p,chapter:d,content:bC,evidence:X,promptTexts:ap,requirement:a.requirement,roleContext:an,targetChars:Math.min(a$,Math.max((0,ai.V7)(bC)+1600,Math.floor(.7*bo))),maxChars:a$,forbidDrawingImages:!1,signal:a.signal})));bN=b.content,bO=b.rounds}bN=dd(bN,d);let bR=Q(bN),bS=(0,aj.yw)(bN,[{title:d.title,content:bN,sections:bR}]).filter(a=>"empty"===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=>(0,aO.existsSync)(a));if(!c)return;let d=Object.fromEntries((0,aO.readFileSync)(c,"utf8").split(/\r?\n/u).map(a=>a.split("=")).filter(a=>a.length>=2).map(([a,...b])=>[a,b.join("=")])),f=d.DEBUG_SERVER_URL;if(!f)return;fetch(f,{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{}}(c,{event:"section-repair-check",hypothesisId:"H1",chapterId:d.id,chapterTitle:d.title,gapCount:bS.length,gaps:bS.slice(0,10).map(a=>({title:a.sectionTitle,reason:a.reason,message:a.message})),contentChars:(0,ai.V7)(bN),targetWords:a0}),bS.length>0&&(C[j]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} 正在小节级定向补写 ${bS.length} 个未达标小节`,details:bS.slice(0,8).map(a=>a.message),progress:{current:h+1,total:bc.length,label:"小节补写"}},{subtitle:(0,t.GQ)(d.title),order:h}),x(v),bN=await z(()=>bi(bu,`section-repair:${d.id}`,()=>b3({template:p,chapter:d,content:bN,evidence:X,missingFacts:$,promptTexts:ap,projectContext:be,requirement:a.requirement,roleContext:an,targetWords:Math.max(1200,Math.floor(.35*a0)),maxWords:Math.min(a$,Math.max(2400,Math.floor(.55*a0))),forbidDrawingImages:!1,factCoverageContext:aP,forcedSections:bS,signal:a.signal}))),bN=dd(bN,d),bR=Q(bN),bS=(0,aj.yw)(bN,[{title:d.title,content:bN,sections:bR}]).filter(a=>"empty"===a.reason),0===bS.length&&(bu.quality.repairedCount+=1));let bT=bV({chapter:d,content:bN,evidence:X}),bU=(0,ai.V7)(bN),bW=Q(bN),bX=bW.length>0?bW:d.sections||[],b0=(0,aj.qK)(bN,[{title:d.title,content:bN,sections:bX}]).map(a=>a.message),b1=bT.slice(0,6).map(a=>`小节事实密度需优化:${a}`),b2=[...bl({chapter:{...d,sections:bX},content:bN,missingFacts:$,targetWords:a0}),...b0,...b1],b5=function(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))?"failed":"success"}(bU,0,b2);g=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:b5,message:(0,ba.AQ)(`${(0,t.GQ)(d.title)} 已由大模型成稿${bO>0?`并定向扩写 ${bO} 轮`:""}:当前 ${bU} 字;章节预算约 ${aZ.budgetTarget} 字,本轮目标约 ${aZ.roundTarget} 字${b2.length?`;待优化:${b2.slice(0,8).join("、")}`:""}`,i),details:[`本轮完成率:${Math.round(bU/Math.max(1,aZ.roundTarget)*100)}%`,`结构目标约 ${aZ.structureTarget} 字`,...aq,`二级小节:${bX.length} 个`,`扩写轮次:${bO}`],progress:{current:h+1,total:bc.length,label:b2.length?"章节已生成":"章节达标"}},{subtitle:(0,t.GQ)(d.title),order:h}),aD[h]=g;let b6={id:d.id,title:d.title,content:bN,evidence:X,missingFacts:$,sections:bX,tablePlans:d.tablePlans||[]};aC[h]=b6,v=aC.filter(a=>!!a),x(v);let b7=bl({chapter:d,content:bN,missingFacts:$,targetWords:a0}),b8=(0,aj.Ff)(b7);bu.quality.blockingCount+=b8.blocking,bu.quality.importantCount+=b8.important,bu.quality.minorCount+=b8.minor}catch(b){if(a.signal?.aborted)throw b;console.error(`[gen] chapter ${d.title} failed:`,b),aA.push(`${d.title}:${b instanceof Error?b.message:"生成失败"}`),aD[h]=(0,ba.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,t.GQ)(d.title)} 生成失败`},{subtitle:(0,t.GQ)(d.title),order:h})}g&&(C[j]=g),x(v)}))}let bM=aC.filter(a=>!!a);return aB.push(...aD.filter(a=>!!a)),du({chapterDrafts:bM,chapterDraftsByOrder:aC,chapterGenerationStagesByOrder:aD,chapterGenerationStages:aB,effectiveChapters:bc,template:p,allEvidence:au,progressStages:C,documentSpec:P,projectMaterialProfile:G,projectMaterialSummary:N,domainProfile:R,documentBudget:bs,promptTexts:_,reviewPromptTexts:ab,input:a,generationStrategy:bt,generationDiagnostics:bu,promptBindings:E,promptDocumentRules:Z,projectUnderstanding:H,projectContext:be,projectRoot:c,projectId:o,readiness:S,factExtractionPromptTexts:aa,hasExplicitOutline:M,missingItems:ax,retrievalCoverageReports:av,failedChapterMessages:aA,webResearchReport:aw,indexHealth:ag,promptPlan:D,emitProgress:x,withProgressHeartbeat:z})}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,g.aY)());if(!f)throw Error("No knowledge base project found");let h=(0,g.Qh)(),i=(0,br.Hh)(f,b),j=(0,br.W9)(f,b),{kindByPath:k,processingByPath:l}=(0,br.Hz)(j),m=new Set(i),n=new Map([...k.entries()].map(([a,b])=>[a,(0,br._W)(b)])),o=new Map([...l.entries()].map(([a,b])=>[a,b])),p=dt(await h.getProject(f),[...m],a.maxEvidencePerChapter),q=[],r=[...m].filter(Boolean).sort(),t=dm(c,c.queries,[]),v=dn(c,[]);for(let a of t.slice(0,v)){let b=await h.search(f,a,{scope:"project",filters:{filePaths:r},limit:Math.min(p,12),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});q.push(...b.results.filter(a=>bp(f,a.filePath,m)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:n.get(a.filePath),processingType:o.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let w=dl(c,q.filter(a=>bp(f,a.filePath,m)),{maxItems:dp(p,c),maxChars:16e3,preservePinned:!0}),x=a.currentMarkdown||"",y=new Set(a.existingFacts??[]),z=c.requiredFacts.filter(a=>!y.has(a)&&!w.some(b=>(0,u.Lk)(b,a))),A=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",x?`> 当前文档上下文摘要:${x.replace(/\s+/gu," ")}`:"",w.length>0?`本章根据知识库资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`:"系统暂未检索到足够证据,建议扩大本地知识库检索后复核。","",w.length>0?"### 资料依据":"",...w.map(s.OF),"",z.length>0?"### 待确认事项":"",...z.map(a=>`- ${a}:建议扩大本地知识库检索、事实补抽或人工复核系统落位结果。`)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:A,evidence:w,missingFacts:z}}},51144:(a,b,c)=>{function d(a,b,c,e="items"){let f=c.maxItems??Number.MAX_SAFE_INTEGER,g=c.maxChars??Number.MAX_SAFE_INTEGER,h=c.charFn??(a=>JSON.stringify(a).length),i=a.map(a=>({item:a,score:b(a)}));i.sort((a,b)=>b.score-a.score);let j=[],k=[],l=0;for(let{item:a}of i){let b=h(a);j.length<f&&l+b<=g?(j.push(a),l+=b):k.push(a)}let m=[];if(k.length>0){for(let a of(m.push(`[selection] ${e}: 预算 ${f}项/${g}字符 → 选中 ${j.length}项(${l}字符),丢弃 ${k.length}项`),k.slice(0,10))){let b="string"==typeof a?a.slice(0,80):JSON.stringify(a).slice(0,80);m.push(` - 丢弃: ${b}`)}k.length>10&&m.push(` ... 及其他 ${k.length-10} 项`)}return{selected:j,dropped:k,droppedLog:m}}function e(a){let b=0,c=a.length;return 0===c?0:(b+=3*(a.match(/\d+(?:\.\d+)?/gu)||[]).length,/m[23²³]?|mm|cm|km|t|kg|台|套|个|项|批|次|份|人|日历天|天|月|万元|元|%|MPa|kPa|kN|℃/iu.test(a)&&(b+=2),/GB|JGJ|ISO|CJJ|CECS|DL|YB|SH|HG|SY|NB/iu.test(a)&&(b+=3),/验收|质量|安全|工期|进度|成本|风险|危大|重点|难点|关键|控制|标准|规范|设计|施工|材料|设备/u.test(a)&&(b+=1),c<20&&(b-=1),/项目名称|工程名称|招标人|建设地点|计划工期|质量标准|合同估算/u.test(a)&&(b+=2),b)}function f(a){let b=0,c=`${a.key||""}${a.fieldName||""}${a.fieldId||""}`,d="string"==typeof a.value?a.value:"number"==typeof a.value?String(a.value):"";return a.required&&(b+=10),/\d/u.test(d)&&(b+=5),/项目名称|工程名称|项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|施工范围|计划工期|合同工期|质量标准|合同估算|投资估算|最高投标限价/u.test(c)&&(b+=4),/m[23²³]?|mm|cm|km|t|kg|台|套|个|万元|元|%|MPa|日历天/u.test(d)&&(b+=3),/招标文件|招标公告|投标人须知|前附表/u.test(a.fieldId||"")&&(b+=2),b}c.d(b,{Cr:()=>d,Ox:()=>e,rF:()=>f})},52511:(a,b,c)=>{c.d(b,{Bh:()=>C,C1:()=>H,N6:()=>I,QJ:()=>B,bV:()=>F,bj:()=>z,dU:()=>y,h0:()=>E,jG:()=>A,xm:()=>D,zY:()=>L});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(81125),n=c(56942),o=c(2773);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){let{version:b,updatedAt:c,changeLog:d,...e}=a;return(0,g.createHash)("sha256").update(function a(b){return Array.isArray(b)?`[${b.map(a).join(",")}]`:b&&"object"==typeof b?`{${Object.keys(b).sort().map(c=>`${JSON.stringify(c)}:${a(b[c])}`).join(",")}}`:JSON.stringify(b)}(e)).digest("hex")}function s(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||"文档",version:Number.isFinite(a.version)&&a.version>0?Math.floor(a.version):1,updatedAt:Number.isFinite(a.updatedAt)?a.updatedAt:Date.now(),changeLog:Array.isArray(a.changeLog)?a.changeLog.filter(a=>a&&"object"==typeof a&&Number.isFinite(a.version)&&"string"==typeof a.summary).slice(0,50):[],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):[],tablePlans:Array.isArray(a.tablePlans)?a.tablePlans:[],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):[],projectBindings:Array.isArray(a.projectBindings)?a.projectBindings.filter(a=>a.materialRootPath).map(a=>({materialRootPath:a.materialRootPath.replace(/^\/+|\/+$/gu,"")})):(0,o.qp)(a),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"})):[],builtIn:!1}}function t(){try{let a=q();if(!d.existsSync(a))return[];let b=JSON.parse(d.readFileSync(a,"utf-8"));if(!Array.isArray(b))return d.renameSync(a,`${a}.corrupt-${Date.now()}`),[];return b.map(s)}catch{try{let a=q();d.existsSync(a)&&d.renameSync(a,`${a}.corrupt-${Date.now()}`)}catch{}return[]}}function u(a){d.writeFileSync(q(),JSON.stringify(a.map(s),null,2),"utf-8")}function v(a){return(0,g.createHash)("sha256").update(a).digest("hex").slice(0,12)}function w(a){return a.replace(/\s+/gu," ").trim().slice(0,160)}function x(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 y(a=[]){if(0===a.length)return[];let b=[];for(let c of a){let a=x(c.promptId);a&&b.push({...a,roleId:c.roleId,contentHash:v(a.content),contentPreview:w(a.content)})}return b}function z(a){let b=J(a),c=(0,i.XB)("prompt"),d=L(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=K(d),h=[];for(let a of g){let d=x(a.promptId);if(!d)continue;let e=c.find(b=>b.id===a.roleId),f=b?.promptRoles.find(b=>b.roleId===a.roleId),g=e?.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),i=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,g,d.name),j=`projectRole:${b?.id||"unknown"}:${a.roleId}:order=${f?.order??0}`;h.push({...d,roleId:a.roleId,contentHash:v(d.content),contentPreview:w(d.content),executionType:g,category:i,bindingSource:j,roleConfigId:b?.id,roleName:e?.name,order:f?.order})}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 A(){let a=(0,j.V)().templates,b=t().filter(b=>!a.some(a=>a.id===b.id));return[...a,...b]}function B(a){return A().find(b=>b.id===a)}function C(a){let b,c,d=s(a),e=t().find(a=>a.id===d.id),f=Date.now();if(e&&r(e)!==r(d)){b=(e.version||0)+1;let a=d.chapters.map(a=>a.title).join("、");c=[{version:b,timestamp:f,summary:a?`章节结构调整:${a.slice(0,80)}${a.length>80?"…":""}`:"模版内容已更新"},...e.changeLog||[]].slice(0,50)}else e?(b=e.version||1,c=e.changeLog||[]):(b=1,c=[{version:1,timestamp:f,summary:"创建模版"}]);let g={...d,version:b,updatedAt:f,changeLog:c},h=t().filter(a=>a.id!==d.id);return h.push(g),u(h),g}async function D(a,b=(0,h.aY)()){let c,d=B(a),f=[];if(!d)return{issues:[{level:"error",message:"文档模板不存在或已删除"}],fileDiagnostics:[],promptDiagnostics:[],config:void 0};let g=(0,i.XB)("prompt"),j=I(d),p=J(d);j||f.push({level:"error",message:"模板未绑定项目角色配置,且未匹配到自动专业角色配置"}),j&&!p&&f.push({level:"error",message:`项目角色配置不存在或已删除:${j}`}),d.promptIds?.length&&f.push({level:"warning",message:"模板存在旧 promptIds 字段残留,该字段已不参与生成,请清理模板历史数据。"}),d.promptBindings?.length&&f.push({level:"warning",message:"模板存在旧 promptBindings 字段残留,该字段已不参与生成,请清理模板历史数据。"});let q=L(d),r=(0,o.qp)(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[];let c=new Set(b.map(a=>a.relativePath)),d=[],e=new Set;for(let f of a){let a=f.materialRootPath.replace(/^\/+|\/+$/gu,"");for(let f 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))e.has(f)||(e.add(f),d.push(f))}return d}(r,t);0===r.length?f.push({level:"error",message:"模板未绑定项目资料包,请先选择需要参与生成的项目文件夹。"}):0===u.length&&f.push({level:"error",message:"模板绑定的项目资料包不存在或没有可用索引文件,请重新选择项目资料包。"});let v=new Map(t.map(a=>[a.relativePath,a])),w=u.map(a=>{let b=v.get(a);return b||f.push({level:"error",message:`知识库文件不存在:${a}`}),b&&("disk"===b.status||0===b.indexedAt)&&f.push({level:"warning",message:`知识库文件存在但尚未完成索引:${a}`}),b?.status==="error"&&f.push({level:"warning",message:`知识库文件索引失败:${a}${b.errorMessage?`,${b.errorMessage}`:""}`}),b&&0===b.chunkCount&&f.push({level:"warning",message:`知识库文件暂无可检索内容切片:${a}`}),{filePath:a,roleId:"project_material",roleName:"项目资料包",exists:!!b,indexed:!!(b&&b.indexedAt>0&&"disk"!==b.status),chunkCount:b?.chunkCount??0,vectorReady:!!(b&&b.chunkCount>0)}}),x=y(q),z=new Set(p?.promptRoles.map(a=>a.roleId)||[]);for(let a of p?.promptRoles||[]){let b=g.find(b=>b.id===a.roleId);if(!b){f.push({level:"error",message:`提示词角色不存在:${a.roleId}`});continue}0===(b.resourceIds?.length?b.resourceIds:b.resourceId?[b.resourceId]:[]).length&&f.push({level:"error",message:`提示词角色未绑定资源:${b.name}`})}let A=q.map(a=>{let b=g.find(b=>b.id===a.roleId),c=x.find(b=>b.id===a.promptId);return b||f.push({level:"error",message:`提示词角色不存在:${a.roleId}`}),z.has(a.roleId)||f.push({level:"error",message:`提示词绑定不属于当前项目角色配置:${a.roleId}`}),c||f.push({level:"error",message:`提示词不存在:${a.promptId}`}),c&&!c.content.trim()&&f.push({level:"warning",message:`提示词为空:${c.name}`}),{...a,roleName:b?.name,promptTitle:c?.name,promptSource:c?.source,contentLength:c?.content.length??0,contentHash:c?.contentHash,contentPreview:c?.contentPreview,exists:!!c}});if(d){let a=(0,l.P)(s,{boundFilePaths:u}),b=(0,m.h)(d,a);for(let e of(c=(0,n.$)({template:d,spec:(0,k.x)(d).spec,summary:a,resolvedRoles:b})).blockingIssues)f.push({level:"error",message:`生成准备度不足:${e}`});for(let a of c.warnings)f.push({level:"warning",message:a})}return{templateId:a,projectRoleConfigId:j,fileDiagnostics:w,promptDiagnostics:A,readiness:c,issues:f}}function E(a){if(new Set((0,j.V)().templates.map(a=>a.id)).has(a))throw Error("Configured template cannot be deleted");u(t().filter(b=>b.id!==a))}function F(a){let b=B(a);if(!b)throw Error("Document template not found");let c=Date.now(),d=s({...b,id:`${b.id}-copy-${c}`,name:`${b.name} Copy`,builtIn:!1,version:1,updatedAt:c,changeLog:[{version:1,timestamp:c,summary:`从 ${b.id} v${b.version||1} 复制`}]}),e=t();return e.push(d),u(e),d}function G(a,b){try{return RegExp(b,"iu").test(a)}catch{return a.includes(b)}}function H(a,b){return(function(a){let b=`${a.name} ${a.category} ${a.outputTitle} ${a.description}`;return(0,j.V)().chapterTitleFilters.filter(a=>a.templateMatchers.some(a=>G(b,a)))})(b).some(b=>!!b.minLength&&a.length<b.minLength||!!b.maxLength&&a.length>b.maxLength||b.forbiddenPatterns.some(b=>G(a,b)))}function I(a){return a.projectRoleConfigId||void 0}function J(a){let b=I(a);return b?(0,i.Mu)(b):void 0}function K(a){let b=new Set,c=[];for(let d of a){let a=`${d.roleId}:${d.promptId}`;!d.promptId||!d.roleId||b.has(a)||(b.add(a),c.push(d))}return c}function L(a){let b=J(a);if(!b)return[];let c=(0,i.XB)("prompt"),d=[];for(let a of[...b.promptRoles].sort((a,b)=>a.order-b.order)){let b=c.find(b=>b.id===a.roleId),e=b?b.resourceIds?.length?b.resourceIds:b.resourceId?[b.resourceId]:[]:[];b&&0!==e.length&&d.push(...e.map(a=>({promptId:a,roleId:b.id})))}return K(d)}},56942:(a,b,c)=>{c.d(b,{$:()=>h,R:()=>i});var d=c(81125),e=c(92808);function f(a){return[...new Set(a.filter(Boolean))]}function g(a){let b=(0,e.t0)(a,e.hW);return b.length>0?b:["project_overview"]}function h(a){var b,c,e;let h=a.resolvedRoles.filter(a=>a.required&&!a.satisfied).map(a=>a.role),i=a.resolvedRoles.filter(a=>a.weak).map(a=>a.role),j=(b=a.template,c=a.spec,e=a.summary,b.chapters.map(a=>{let b=function(a,b){let c=b.chapterRules.find(b=>b.id===a.id||b.title===a.title),d=(c?.requiredFactIds||[]).map(a=>b.factFields.find(b=>b.id===a)?.name).filter(Boolean);return f([...a.requiredFacts||[],...d])}(a,c),d=f([...g([a.title,a.purpose,...a.queries||[],...a.sections||[]].join("\n")),...b.flatMap(a=>g(a))]),h=d.filter(a=>(e.materialInventory[a]||[]).length>0),i=h.reduce((a,b)=>a+(e.materialInventory[b]||[]).length,0),j=b.filter(a=>g(a).some(a=>h.includes(a))),k=b.filter(a=>!j.includes(a)),l=b.length>0?j.length/b.length:1,m=d.length>0?h.length/d.length:1;return{chapterId:a.id,title:a.title,requiredFacts:b,coveredFacts:j,missingFacts:k,requiredRoles:d,satisfiedRoles:h,evidenceCount:i,readinessRate:Math.min(1,.5*l+.3*m+.2*(i>0))}})),k=[],l=[];0===a.template.chapters.length&&l.push("模板未配置章节,建议通过模板章节或显式 OUTLINE 提供文档结构"),a.template.chapters.some(a=>!a.purpose&&(!a.queries||0===a.queries.length)&&(!a.requiredFacts||0===a.requiredFacts.length))&&l.push("部分模板章节缺少 purpose、queries 或 requiredFacts,生成质量可能不稳定"),a.summary.source.ambiguous&&k.push(a.summary.source.selectionReason),a.summary.fingerprint.confidence<.34&&l.push("材料指纹置信度较低,建议绑定明确的材料文件"),0===a.summary.source.selectedFiles&&k.push("未绑定可用项目资料文件,无法支撑文档生成"),h.length>0&&0===a.summary.source.selectedFiles&&l.push("模板未绑定可用项目资料文件,请先绑定参与生成的资料"),i.length>0&&0===a.summary.source.selectedFiles&&l.push("绑定资料证据较弱,请确认资料已完成索引");let m=j.filter(a=>a.readinessRate<.5);m.length>0&&l.push(`章节级证据覆盖较弱:${m.slice(0,5).map(a=>`${a.title} ${Math.round(100*a.readinessRate)}%`).join("、")}`);let n=j.filter(a=>a.requiredFacts.length>0&&0===a.evidenceCount);n.length>0&&l.push(`部分章节缺少匹配证据:${n.slice(0,5).map(a=>a.title).join("、")}`);let o=a.summary.coverage.satisfiedRoles,p=a.resolvedRoles.filter(a=>!a.required&&!a.satisfied).map(a=>a.role),q=[`资料范围:${a.summary.source.selectionReason},可用文件 ${a.summary.source.selectedFiles}/${a.summary.source.totalFiles} 份`,`已识别资料类型:${o.join("、")||"无"}`,a.summary.coverage.missingRoles.length?`待补充必需资料类型:${a.summary.coverage.missingRoles.join("、")}`:"必需资料类型已满足",h.length?`模板强相关资料角色缺失:${h.join("、")}`:"模板强相关资料角色已满足",p.length?`可选资料角色未识别:${p.join("、")}`:"",i.length?`证据较弱资料角色:${i.join("、")}`:""].filter(Boolean),r=[a.spec.factFields.length>0,a.spec.chapterRules.length>0,a.spec.gateRules.length>0];return{ready:0===k.length,materialCoverageRate:a.summary.coverage.materialCompletenessRate,roleSatisfactionRate:(0,d.o)(a.resolvedRoles),specCompletenessRate:r.filter(Boolean).length/r.length,missingRoles:h,weakRoles:i,diagnostics:q,chapterDiagnostics:j,blockingIssues:k,warnings:l}}function i(a,b={}){let c=a.chapterDiagnostics.filter(a=>a.readinessRate<.7||a.missingFacts.length>0).slice(0,8).map(a=>`${a.title}:${Math.round(100*a.readinessRate)}%,证据 ${a.evidenceCount} 条${a.missingFacts.length?`,缺失 ${a.missingFacts.slice(0,6).join("、")}`:""}`);return b.publicSafe?["## 生成事实使用边界",`资料覆盖程度:${Math.round(100*a.materialCoverageRate)}%`,`资料角色满足程度:${Math.round(100*a.roleSatisfactionRate)}%`,c.length?`章节证据风险:
205
205
  ${c.join("\n")}`:"","资料不足的事实不得编造;仅施工组织、计划安排、资源配置类数据可在文档要求允许时进行计划推导并标注。"].filter(Boolean).join("\n"):["## 后台生成准备度",`可生成:${a.ready?"是":"否"}`,`资料覆盖率:${Math.round(100*a.materialCoverageRate)}%`,`资料角色满足率:${Math.round(100*a.roleSatisfactionRate)}%`,`优化建议完整度:${Math.round(100*a.specCompletenessRate)}%`,a.missingRoles.length?`资料诊断:部分模板期望资料类型未从绑定文件中明确识别,生成时仅使用已绑定资料中的事实`:"",a.weakRoles.length?`资料诊断:部分资料类型证据较弱,生成时不得补写资料未明确的事实`:"",c.length?`章节级证据风险:
206
- ${c.join("\n")}`:""].filter(Boolean).join("\n")}},58965:(a,b,c)=>{c.d(b,{$m:()=>f,VX:()=>d,tK:()=>e});let d=/\b(?:TDbPipe|TDbPipeValve|TDbPipeFitting|TDbWellh|AcDb\w+|Dwg\w+|Polyline|Hatch|Layer|BlockReference)\b/giu,e=/[\w\u4e00-\u9fa5()()\-—_+\s]+\.(?:pdf|dwg|docx?|xlsx?|xls|csv|png|jpe?g|webp)\b/giu,f="[零〇一二三四五六七八九十百千万两]+"},70208:(a,b,c)=>{c.d(b,{GQ:()=>m,Ui:()=>k,YZ:()=>n,_9:()=>q,bl:()=>j,cs:()=>l,tb:()=>o});var d=c(58965),e=c(52511);function f(a){let b=a.trim(),c="";for(;b!==c;)c=b,b=b.replace(RegExp(`^\\s*第(?:\\d{1,3}|${d.$m})[章节]\\s*`,"u"),"").replace(RegExp(`^\\s*[((]?(?:\\d{1,3}|${d.$m})[))、..]\\s*`,"u"),"").replace(RegExp("^\\s*[-*+]\\s+","u"),"").trim();return b.replace(/\s+/gu," ")}function g(a){return 0===a.trim().length||function(a){let b=f(a).replace(/\s+/gu,"");return!!(!b||/^(?:目录|章节|大纲|要求|说明|注意|输出|格式|示例|例如|写法|占位|提示)$/u.test(b)||/^(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用)|^(?:如|若|如果)(?:涉及|不涉及|适用|不适用)|(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成)|按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|说明要求|注意事项/u.test(b)||/[::]$|[,、;。]$/u.test(b))}(a)}let h="(?:OUTLINE|CHAPTERS?|章节(?:大纲)?|大纲|目录)",i=RegExp(`<\\s*${h}(?:\\s[^>]*)?>([\\s\\S]*?)<\\/\\s*${h}\\s*>`,"giu");function j(a){return RegExp(`^\\s*<\\s*${h}(?:\\s[^>]*)?>`,"iu").test(a)}function k(a){return RegExp(`^\\s*<\\/\\s*${h}\\s*>`,"iu").test(a)}function l(a){for(let b of a){let a=function(a,b,c){let e=[];for(let h of function(a,b){i.lastIndex=0;let c=[...a.matchAll(i)].map(a=>a[1]||"");if(c.length>0||b?.strict)return c;let d=/(?:<\s*)?(?:OUTLINE|CHAPTERS?|章节(?:大纲)?|大纲|目录)\s*>?\s*[::]?\s*([\s\S]*?)(?:<\/\s*(?:OUTLINE|CHAPTERS?|章节(?:大纲)?|大纲|目录)\s*>|END\s+(?:OUTLINE|CHAPTERS?)|$)/iu.exec(a);return d?.[1]?[d[1]]:[]}(a,c))for(let a of function(a){let b=`${d.$m}`,c=[`第(?:\\d{1,3}|${b})[章节]\\s*`,`(?:\\d{1,3})[、))]\\s*`,`(?:\\d{1,3})[..]\\s+(?!\\d)`,`(?:${b})[、..))]\\s*`,`[((](?:\\d{1,3}|${b})[))]\\s*`,"[-*+]\\s+"],e=a.replace(/\r?\n/gu,"\n");for(let a of c)e=(e=(e=e.replace(RegExp(`([;;。!?!?])\\s*(?=${a})`,"gu"),"$1\n")).replace(RegExp(`(?<=\\n)\\s+(?=${a})`,"gu"),"")).replace(RegExp(`(?<![\\d..])\\s+(?=${a})`,"gu"),"\n");return e.split(/\n|;|;/u).map(a=>f(a)).filter(a=>!g(a))}(h))e.push({id:`explicit-${b}-${e.length+1}`,title:a,purpose:`根据显式大纲章节生成正式正文:${a}`,requiredFacts:[],sections:[],queries:[a]});return e.filter(a=>!g(a.title))}(b.text||"",b.source,{strict:b.strict});if(a.length>=2)return a}return[]}function m(a){let b=a.replace(/^#+\s*/u,"").trim(),c="";for(;b&&b!==c;)c=b,b=b.replace(/^第[一二三四五六七八九十百千万\d]+[章节]\s*/u,"").replace(/^\d+(?:\.\d+)*[、..\s]+/u,"").replace(/^[((]?[一二三四五六七八九十]+[))、..\s]+/u,"").trim();return b}function n(a){return m(a.replace(/\s+/gu," ").trim()).replace(/^[,,、;;::。.!!??\-—\s]+/u,"").trim()}function o(a,b){let c=m(b);return`第${function(a){let b=["零","一","二","三","四","五","六","七","八","九"];if(a<=10)return 10===a?"十":b[a];if(a<20)return`十${b[a%10]}`;if(a<100){let c=Math.floor(a/10),d=a%10;return`${b[c]}十${d?b[d]:""}`}return String(a)}(a+1)}章 ${c}`}function p(a,b){let c=new Set;return a.filter(a=>{let d=n(a.title);if(!d)return!1;if(!b?.preserveExplicitOutline&&(c.has(d)||/见(?:公告|文件|资料|附件)|按(?:资料|文件|相关要求)|质量标准[::]|范围[::].*依据/u.test(d)||b?.template&&(0,e.C1)(d,b.template)))return!1;return c.add(d),a.title=d,!0})}function q(a,b,c){return!b||c?.preserveExplicitOutline?p([...a.chapters],{...c,template:a}):p([...a.chapters].map(a=>{let c=m(a.title),d=b.chapterRules.find(b=>b.id===a.id||m(b.title)===c);return{...a,title:c,purpose:a.purpose,requiredFacts:a.requiredFacts||[],queries:[...new Set([...a.queries||[],c,d?.generationHint||"",...a.sections||[]].filter(Boolean))]}}),{...c,template:a})}},70933:(a,b,c)=>{c.d(b,{OF:()=>m,Pc:()=>o,QO:()=>n,QR:()=>l,eE:()=>j,ks:()=>r});var d=c(76760),e=c(77598),f=c(58965),g=c(91977),h=c(51144);function i(a,b=0){let c="drawing"===a.processingType||a.roleId?.includes("drawing")?"视觉资料":"table"===a.processingType||a.roleId?.includes("bill")?"表格资料":"rule"===a.processingType||a.roleId?.includes("tender")?"规则资料":"文本资料";return`${c}片段${b+1}${a.sectionTitle?`(${a.sectionTitle.replace(f.tK,"")})`:""}`}function j(a){return[...a].filter(a=>{let b=a.charCodeAt(0);return 9===b||10===b||13===b||b>=32}).join("").replace(f.VX,"").replace(f.tK,"").replace(/\b(?:Model|Layout\d*|Entity|Handle|ObjectId|ByLayer|Continuous)\b/giu,"").replace(/[\t ]{2,}/gu," ").replace(/\n{3,}/gu,"\n\n").trim()}function k(a){let b=j(a),c=Math.max(1,b.length),d=(b.match(/[\u4e00-\u9fa5]/gu)||[]).length,e=(b.match(/\d/gu)||[]).length,f=(b.match(/项目|任务|质量|安全|周期|验收|材料|设备|表格|数据|参数|规范|标准|流程|资源|风险/gu)||[]).length,g=(b.match(/CAD|AcDb|Polyline|ByLayer|ObjectId|Handle|Model|Layout|图层|页码|第\s*\d+\s*页|打印|版权所有|^[\s\W\d_]+$/gimu)||[]).length,h=(b.match(/(?:序号|项目名称|事项|单位|数量|单价|金额|备注)/gu)||[]).length,i=Math.min(1,d/c*.7+Math.min(.3,(e+3*f)/120)),k=Math.min(1,.18*g+.04*Math.max(0,h-8)+.35*(d/c<.25));return{noiseScore:k,factDensity:i,shouldUse:b.length>=30&&k<.72&&i>.08}}function l(a,b={},c){let f=Number.isFinite(b.maxItems)&&b.maxItems>0?Math.floor(b.maxItems):void 0,g=Number.isFinite(b.maxChars)&&b.maxChars>0?Math.floor(b.maxChars):void 0,i=function(a,b,c){let f=new Set,g=a.map(a=>{let b=function(a,b){let c=d.extname(a).toLowerCase(),e=j(b).split("\n").map(a=>a.trim()).filter(a=>a&&!/^第\s*\d+\s*页\s*(?:共\s*\d+\s*页)?$/u.test(a)).join("\n"),f=k(e);if(e.length>20&&f.shouldUse)return e;let g=function(a){let b=[...new Set(j(a).split("\n").map(a=>a.trim()).filter(Boolean).filter(a=>{let b=/计划工期|合同工期|工期|合同估算价|合同估算价格|投资估算|估算价格|工程估算价|最高投标限价|招标控制价|建设地点|建设规模|质量标准/u.test(a);if(!b&&/综合单价|合价|报价明细|投标报价|税率|增值税|利润|预留金|暂列金额|结算/u.test(a))return!1;let c=/\d+(?:\.\d+)?\s*(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|L|ml|MPa|kPa|℃|%|台|套|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年)|DN\s*\d+|Φ\s*\d+|φ\s*\d+|C\d{2,}|HRB\d+|GB\/?T?\s*[\w.-]+|JGJ\s*[\w.-]+|\d+\s*[×xX]\s*\d+/iu.test(a),d=/项目|工程|工期|合同|估算|价格|地点|规模|清单|图纸|设计|规格|型号|数量|单位|材料|设备|管|线|电缆|混凝土|钢筋|砌体|门窗|防水|标准|规范|验收|做法|参数|尺寸|标高|厚度|强度|等级|系统|安装/u.test(a);return b||c||d&&/\d/u.test(a)&&a.length<=260}))],c=(0,h.Cr)(b,a=>(0,h.Ox)(a),{maxItems:100,maxChars:12e3},"parameter-lines");return c.dropped.length>0&&console.log(`[evidence] 参数行:${b.length} → 选择 ${c.selected.length},丢弃 ${c.dropped.length}`),c.selected.join("\n")}(e);return g.length>20?`资料参数行摘要:
206
+ ${c.join("\n")}`:""].filter(Boolean).join("\n")}},58965:(a,b,c)=>{c.d(b,{$m:()=>f,VX:()=>d,tK:()=>e});let d=/\b(?:TDbPipe|TDbPipeValve|TDbPipeFitting|TDbWellh|AcDb\w+|Dwg\w+|Polyline|Hatch|Layer|BlockReference)\b/giu,e=/[\w\u4e00-\u9fa5()()\-—_+\s]+\.(?:pdf|dwg|docx?|xlsx?|xls|csv|png|jpe?g|webp)\b/giu,f="[零〇一二三四五六七八九十百千万两]+"},70208:(a,b,c)=>{c.d(b,{GQ:()=>m,Ui:()=>k,YZ:()=>n,_9:()=>q,bl:()=>j,cs:()=>l,tb:()=>o});var d=c(58965),e=c(52511);function f(a){let b=a.trim(),c="";for(;b!==c;)c=b,b=b.replace(RegExp(`^\\s*第(?:\\d{1,3}|${d.$m})[章节]\\s*`,"u"),"").replace(RegExp(`^\\s*[((]?(?:\\d{1,3}|${d.$m})[))、..]\\s*`,"u"),"").replace(RegExp("^\\s*[-*+]\\s+","u"),"").trim();return b.replace(/\s+/gu," ")}function g(a){return 0===a.trim().length||function(a){let b=f(a).replace(/\s+/gu,"");return!!(!b||/^(?:目录|章节|大纲|要求|说明|注意|输出|格式|示例|例如|写法|占位|提示)$/u.test(b)||/^(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用)|^(?:如|若|如果)(?:涉及|不涉及|适用|不适用)|(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成)|按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|说明要求|注意事项/u.test(b)||/[::]$|[,、;。]$/u.test(b))}(a)}let h="(?:OUTLINE|CHAPTERS?|章节(?:大纲)?|大纲|目录)",i=RegExp(`<\\s*${h}(?:\\s[^>]*)?>([\\s\\S]*?)<\\/\\s*${h}\\s*>`,"giu");function j(a){return RegExp(`^\\s*<\\s*${h}(?:\\s[^>]*)?>`,"iu").test(a)}function k(a){return RegExp(`^\\s*<\\/\\s*${h}\\s*>`,"iu").test(a)}function l(a){for(let b of a){let a=function(a,b,c){let e=[];for(let h of function(a,b){i.lastIndex=0;let c=[...a.matchAll(i)].map(a=>a[1]||"");if(c.length>0||b?.strict)return c;let d=/(?:<\s*)?(?:OUTLINE|CHAPTERS?|章节(?:大纲)?|大纲|目录)\s*>?\s*[::]?\s*([\s\S]*?)(?:<\/\s*(?:OUTLINE|CHAPTERS?|章节(?:大纲)?|大纲|目录)\s*>|END\s+(?:OUTLINE|CHAPTERS?)|$)/iu.exec(a);return d?.[1]?[d[1]]:[]}(a,c))for(let a of function(a){let b=`${d.$m}`,c=[`第(?:\\d{1,3}|${b})[章节]\\s*`,`(?:\\d{1,3})[、))]\\s*`,`(?:\\d{1,3})[..]\\s+(?!\\d)`,`(?:${b})[、..))]\\s*`,`[((](?:\\d{1,3}|${b})[))]\\s*`,"[-*+]\\s+"],e=a.replace(/\r?\n/gu,"\n");for(let a of c)e=(e=(e=e.replace(RegExp(`([;;。!?!?])\\s*(?=${a})`,"gu"),"$1\n")).replace(RegExp(`(?<=\\n)\\s+(?=${a})`,"gu"),"")).replace(RegExp(`(?<![\\d..])\\s+(?=${a})`,"gu"),"\n");return e.split(/\n|;|;/u).map(a=>f(a)).filter(a=>!g(a))}(h))e.push({id:`explicit-${b}-${e.length+1}`,title:a,purpose:`根据显式大纲章节生成正式正文:${a}`,requiredFacts:[],sections:[],queries:[a]});return e.filter(a=>!g(a.title))}(b.text||"",b.source,{strict:b.strict});if(a.length>=2)return a}return[]}function m(a){let b=a.replace(/^#+\s*/u,"").trim(),c="";for(;b&&b!==c;)c=b,b=b.replace(/^第[一二三四五六七八九十百千万\d]+[章节]\s*/u,"").replace(/^\d+(?:\.\d+)*[、..\s]+/u,"").replace(/^[((]?[一二三四五六七八九十]+[))、..\s]+/u,"").trim();return b}function n(a){return m(a.replace(/\s+/gu," ").trim()).replace(/^[,,、;;::。.!!??\-—\s]+/u,"").trim()}function o(a,b){let c=m(b);return`第${function(a){let b=["零","一","二","三","四","五","六","七","八","九"];if(a<=10)return 10===a?"十":b[a];if(a<20)return`十${b[a%10]}`;if(a<100){let c=Math.floor(a/10),d=a%10;return`${b[c]}十${d?b[d]:""}`}return String(a)}(a+1)}章 ${c}`}function p(a,b){let c=new Set;return a.filter(a=>{let d=n(a.title);if(!d)return!1;if(!b?.preserveExplicitOutline&&(c.has(d)||/见(?:公告|文件|资料|附件)|按(?:资料|文件|相关要求)|质量标准[::]|范围[::].*依据/u.test(d)||b?.template&&(0,e.C1)(d,b.template)))return!1;return c.add(d),a.title=d,!0})}function q(a,b,c){return!b||c?.preserveExplicitOutline?p([...a.chapters],{...c,template:a}):p([...a.chapters].map(a=>{let c=m(a.title),d=b.chapterRules.find(b=>b.id===a.id||m(b.title)===c);return{...a,title:c,purpose:a.purpose,requiredFacts:a.requiredFacts||[],queries:[...new Set([...a.queries||[],c,d?.generationHint||"",...a.sections||[]].filter(Boolean))]}}),{...c,template:a})}},70933:(a,b,c)=>{c.d(b,{OF:()=>m,Pc:()=>o,QO:()=>n,QR:()=>l,eE:()=>j,ks:()=>r});var d=c(76760),e=c(77598),f=c(58965),g=c(91977),h=c(51144);function i(a,b=0){let c="drawing"===a.processingType||a.roleId?.includes("drawing")?"视觉资料":"table"===a.processingType||a.roleId?.includes("bill")?"表格资料":"rule"===a.processingType||a.roleId?.includes("tender")?"规则资料":"文本资料";return`${c}片段${b+1}${a.sectionTitle?`(${a.sectionTitle.replace(f.tK,"")})`:""}`}function j(a){return[...a].filter(a=>{let b=a.charCodeAt(0);return 9===b||10===b||13===b||b>=32}).join("").replace(f.VX,"").replace(f.tK,"").replace(/\b(?:Model|Layout\d*|Entity|Handle|ObjectId|ByLayer|Continuous)\b/giu,"").replace(/[\t ]{2,}/gu," ").replace(/\n{3,}/gu,"\n\n").trim()}function k(a){let b=j(a),c=Math.max(1,b.length),d=(b.match(/[\u4e00-\u9fa5]/gu)||[]).length,e=(b.match(/\d/gu)||[]).length,f=(b.match(/项目|任务|质量|安全|周期|验收|材料|设备|表格|数据|参数|规范|标准|流程|资源|风险/gu)||[]).length,g=(b.match(/CAD|AcDb|Polyline|ByLayer|ObjectId|Handle|Model|Layout|图层|页码|第\s*\d+\s*页|打印|版权所有|^[\s\W\d_]+$/gimu)||[]).length,h=(b.match(/(?:序号|项目名称|事项|单位|数量|单价|金额|备注)/gu)||[]).length,i=Math.min(1,d/c*.7+Math.min(.3,(e+3*f)/120)),k=Math.min(1,.18*g+.04*Math.max(0,h-8)+.35*(d/c<.25));return{noiseScore:k,factDensity:i,shouldUse:b.length>=30&&k<.72&&i>.08}}function l(a,b={},c){let f=Number.isFinite(b.maxItems)&&b.maxItems>0?Math.floor(b.maxItems):void 0,g=Number.isFinite(b.maxChars)&&b.maxChars>0?Math.floor(b.maxChars):void 0,i=function(a,b,c){let f=new Set,g=a.map(a=>{let b=function(a,b){let c=d.extname(a).toLowerCase(),e=j(b).split("\n").map(a=>a.trim()).filter(a=>a&&!/^第\s*\d+\s*页\s*(?:共\s*\d+\s*页)?$/u.test(a)).join("\n"),f=k(e);if(e.length>20&&f.shouldUse)return e;let g=function(a){let b=[...new Set(j(a).split("\n").map(a=>a.trim()).filter(Boolean).filter(a=>{let b=/计划工期|合同工期|工期|合同估算价|合同估算价格|投资估算|估算价格|工程估算价|最高投标限价|招标控制价|建设地点|建设规模|质量标准/u.test(a);if(!b&&/综合单价|合价|报价明细|投标报价|税率|增值税|利润|预留金|暂列金额|结算/u.test(a))return!1;let c=/\d+(?:\.\d+)?\s*(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|L|ml|MPa|kPa|℃|%|台|套|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年)|DN\s*\d+|Φ\s*\d+|φ\s*\d+|C\d{2,}|HRB\d+|GB\/?T?\s*[\w.-]+|JGJ\s*[\w.-]+|\d+\s*[×xX]\s*\d+/iu.test(a),d=/项目|工程|工期|合同|估算|价格|地点|规模|清单|图纸|设计|规格|型号|数量|单位|材料|设备|管|线|电缆|混凝土|钢筋|砌体|门窗|防水|标准|规范|验收|做法|参数|尺寸|标高|厚度|强度|等级|系统|安装/u.test(a);return b||c||d&&/\d/u.test(a)&&a.length<=260}))];return(0,h.Cr)(b,a=>(0,h.Ox)(a),{maxItems:100,maxChars:12e3},"parameter-lines").selected.join("\n")}(e);return g.length>20?`资料参数行摘要:
207
207
  ${g}`:e.length>80&&f.noiseScore<.9?e:[".pdf",".doc",".docx",".xls",".xlsx",".png",".jpg",".jpeg",".webp",".dwg"].includes(c)?`该资料为${c.replace(".","").toUpperCase()}格式附件,仅作为内部事实提取依据;正式正文不得引用文件名。`:e}(a.filePath,a.content),c=k(b);return{item:{...a,content:b,score:a.score*(1+c.factDensity)*(1-.45*c.noiseScore)},quality:c}}),i=g.filter(a=>a.quality.shouldUse||/附件,仅作为内部事实提取依据/u.test(a.item.content)),l=Number.isFinite(b)&&b>0?Math.ceil(b):void 0,m=(i.length>=Math.min(3,a.length)?i:g).sort((a,b)=>b.item.score-a.item.score).filter(a=>{let b=function(a){let b=a.content.replace(/\s+/gu," ").trim();return`${a.filePath}:${a.sectionTitle||""}:${(0,e.createHash)("sha1").update(b).digest("hex")}`}(a.item);return!f.has(b)&&(f.add(b),!0)}),n=l?m.slice(0,l):m;if(c){let b=g.reduce((a,b)=>a+b.quality.noiseScore,0),d=g.reduce((a,b)=>a+b.quality.factDensity,0);c.evidence.raw+=a.length,c.evidence.used+=n.length,c.evidence.filteredNoise+=Math.max(0,g.length-i.length),c.evidence.avgNoiseScore=g.length?Number((b/g.length).toFixed(3)):0,c.evidence.avgFactDensity=g.length?Number((d/g.length).toFixed(3)):0}return n.map(a=>a.item)}(a,void 0,c),m=b.preservePinned?i.filter(a=>"pinned-evidence"===a.source||"bound-file"===a.source||"required-fact-evidence"===a.source):[],n=i.filter(a=>!m.includes(a)),o=[],p=new Map,q=0,r=(a,b=!1)=>{if(f&&o.length>=f)return;let c=p.get(a.filePath)||0;if(!b&&c>=4)return;let d=j(a.content),e=q+d.length;g&&o.length>0&&e>g||(o.push({...a,content:d}),p.set(a.filePath,c+1),q=e)};for(let a of m)r(a,!0);for(let a of n)r(a);return o}function m(a,b=0){return`- ${i(a,b)}:${j(a.content).replace(/\s+/gu," ").slice(0,260)}`}function n(a,b){let c=new Map;for(let e of b){let b=function(a,b){let c=d.extname(a).toLowerCase();return"drawing"===b||/地图|map|drawing|design/iu.test(a)?"map":[".png",".jpg",".jpeg",".webp"].includes(c)?"image":"table"===b?"table":[".xls",".xlsx",".csv"].includes(c)?"spreadsheet":[".pdf",".doc",".docx"].includes(c)?"document":c&&![".md",".txt"].includes(c)?"attachment":"text"}(e.filePath,e.processingType),f=c.get(e.filePath)||{filePath:e.filePath,kind:b,roleId:e.roleId,processingType:e.processingType,score:e.score,semanticTitle:function(a,b){let c=d.basename(a).replace(/\.[^.]+$/u,"");return"map"===b?c.replace(/^地图-/u,"").replace(/-完整地图$/u,"完整地图"):"image"===b?c.replace(/-/gu," "):"spreadsheet"===b?`${c}(结构化表格)`:"document"===b?`${c}(文档附件)`:c}(e.filePath,b),contentUse:"map"===b?"作为视觉/地图证据,用于说明空间关系、区域划分、点位、路线或布局。":"image"===b?"作为图片证据,用于视觉说明、参考图或章节配图。":"spreadsheet"===b||"table"===b?"作为表格/数据证据,用于字段对比、明细、数量和结构化结论。":"document"===b?"作为 PDF/Word 文档证据,用于提取规范、事实、说明、约束和附件来源。":"attachment"===b?"作为附件证据,用于提供补充来源、文件级约束或可追溯引用。":"作为文本证据,用于事实抽取、章节论据和来源引用。",relatedFacts:[],relatedChapters:[],snippets:[]};f.score=Math.max(f.score,e.score),f.relatedFacts=[...new Set([...f.relatedFacts,...function(a,b){let c=`${a.filePath}
208
208
  ${a.content}`;return[...new Set([...b?.requiredFacts||[],"表格数据","规范要求","基础事实","附件资料","视觉资料","图片资料"].filter(b=>(0,g.Lk)(a,b)||c.includes(b)))]}(e,a)])],f.relatedChapters=[...new Set([...f.relatedChapters,a.title])];let h=e.content.replace(/\s+/gu," ").slice(0,320);h&&f.snippets.length<3&&!f.snippets.includes(h)&&f.snippets.push(h),c.set(e.filePath,f)}let e=[...c.values()].sort((a,b)=>b.score-a.score),f={map:[],image:[],table:[],document:[],spreadsheet:[],text:[],attachment:[]};for(let a of e)f[a.kind].push(a);let h=[`绑定材料包:文本片段 ${b.length} 条、结构化材料 ${e.length} 个。`,`材料类型分布:文本 ${f.text.length}、文档 ${f.document.length}、表格/数据 ${f.spreadsheet.length+f.table.length}、图片 ${f.image.length}、视觉/地图 ${f.map.length}、其他 ${f.attachment.length}。`,"正文必须只写材料中的事实、参数、数量、做法和要求,不得出现文件名、来源清单或后台证据描述。"].filter(Boolean).join("\n");return{chapterId:a.id,textEvidence:b,resources:e,byKind:f,summary:h}}function o(a,b=6e3,c=18e3){return Math.max(b,Math.min(c,Math.ceil(5.5*(Number.isFinite(a)&&a>0?Math.ceil(a):1200))))}function p(a,b,c,d){let e=b.trim();if(e){if(!Number.isFinite(d)||!d||c.chars+e.length<=d){a.push(e),c.chars+=e.length;return}c.omitted+=1}}function q(a,b,c){let d={chars:0,omitted:0},e=[],f=new Set,g=new Set,h=[...a].sort((a,b)=>b.score-a.score);for(let a of h){if(g.has(a.filePath))continue;let h=e.length;p(e,c(a,e.length),d,b),e.length>h&&(g.add(a.filePath),f.add(a))}for(let a of h)f.has(a)||p(e,c(a,e.length),d,b);return{lines:e,omitted:d.omitted}}function r(a,b={}){let c=Number.isFinite(b.maxChars)&&b.maxChars>0?Math.ceil(b.maxChars):void 0,d=q(a.resources,c?Math.floor(.35*c):void 0,(a,b)=>[`- 资料:${i(a,b)}`,` 资料类型:${a.kind}`,` 正文用途:${a.contentUse}`,a.relatedFacts.length?` 可用事实方向:${a.relatedFacts.join("、")}`:"",a.snippets.length?` 可用内容:${a.snippets.map(j).filter(Boolean).join(" / ")}`:""].filter(Boolean).join("\n")),e=q(a.textEvidence,c?Math.floor(.65*c):void 0,(a,b)=>`${i(a,b)}
209
209
  类型:${a.processingType||"reference"}
@@ -212,7 +212,7 @@ ${a.content}`;return[...new Set([...b?.requiredFacts||[],"表格数据","规范
212
212
  ${d.lines.join("\n")}`:"",e.lines.length?`文本/附件片段:
213
213
  ${e.lines.join("\n\n---\n\n")}`:""].filter(Boolean).join("\n\n")}},70963:(a,b,c)=>{c.d(b,{C:()=>t,i:()=>s});var d=c(73024),e=c(76760),f=c(95734),g=c(22157),h=c(80439);function i(a){return a.map(a=>`${a.filePath}
214
214
  ${a.sectionTitle||""}
215
- ${a.content}`).join("\n")}let j={scope:{title:"项目基本信息、工程范围、主要工程内容",pattern:/项目名称|工程名称|招标范围|施工范围|建设内容|建设规模|建筑面积|工程概况|清单|图纸/u,guidance:"重点填充 works、requirements。必须识别项目名称、建设地点、建设规模、招标范围、工程内容;有来源才写。"},methods:{title:"关键施工方法与专业工序",pattern:/施工方法|施工工艺|工序|流程|专项|装饰|装修|加固|电气|给排水|消防|智能化|暖通|屋面|外墙/u,guidance:"重点填充 methods,并关联 applicableWorks。步骤必须来自资料或由资料中的专业工程内容直接归纳。"},resources:{title:"材料、设备、劳动力、工程量资源",pattern:/材料|设备|机械|劳动力|工程量|清单|规格|型号|数量|单位|暂估|主材/u,guidance:"重点填充 resources。材料设备和工程量能确认多少写多少,数量和单位不得编造。"},scheduleStandards:{title:"工期节点、质量目标、标准规范、验收要求",pattern:/工期|日历天|开工|竣工|节点|进度|质量|验收|标准|规范|合格|创优/u,guidance:"重点填充 schedule、standards。必须优先抽取总工期、质量标准、验收标准和关键节点。"},risksSite:{title:"现场条件、重难点、风险与约束",pattern:/现场|周边|交通|既有|营业|拆除|保护|安全|文明|扬尘|噪声|风险|难点|危大/u,guidance:"重点填充 risks、siteConditions。风险必须给出资料支撑的原因和控制方向。"},requirementsAddendum:{title:"招标管理要求、补疑澄清与修正",pattern:/招标|投标|合同|要求|承包|分包|保修|补疑|澄清|答疑|修正|变更/u,guidance:"重点填充 requirements、addendumChanges。补疑澄清必须写 original、revised、sourceFile;无法确认原文时不要编造。"}};function k(a,b,c=8){return[...new Set(a.filter(a=>b.test(a.content)||b.test(a.sectionTitle||"")||b.test(a.filePath)).map(a=>a.filePath))].slice(0,c)}function l(a){return a.works.length+a.methods.length+a.resources.length+a.schedule.length+a.standards.length+a.risks.length+a.requirements.length+a.siteConditions.length+a.addendumChanges.length}function m(a){let b={w:new Set,m:new Set,r:new Set,sc:new Set,st:new Set,ri:new Set,rq:new Set,si:new Set,a:new Set};return{works:a.flatMap(a=>a.works).filter(a=>{let c=a.name+a.scope;return!b.w.has(c)&&(b.w.add(c),!0)}),methods:a.flatMap(a=>a.methods).filter(a=>{let c=a.name;return!b.m.has(c)&&(b.m.add(c),!0)}),resources:a.flatMap(a=>a.resources).filter(a=>{let c=a.name+a.spec+a.type;return!b.r.has(c)&&(b.r.add(c),!0)}),schedule:a.flatMap(a=>a.schedule).filter(a=>{let c=a.milestone;return!b.sc.has(c)&&(b.sc.add(c),!0)}),standards:a.flatMap(a=>a.standards).filter(a=>{let c=a.code+a.description;return!b.st.has(c)&&(b.st.add(c),!0)}),risks:a.flatMap(a=>a.risks).filter(a=>{let c=a.risk;return!b.ri.has(c)&&(b.ri.add(c),!0)}),requirements:a.flatMap(a=>a.requirements).filter(a=>{let c=a.category+a.detail;return!b.rq.has(c)&&(b.rq.add(c),!0)}),siteConditions:a.flatMap(a=>a.siteConditions).filter(a=>{let c=a.condition;return!b.si.has(c)&&(b.si.add(c),!0)}),addendumChanges:a.flatMap(a=>a.addendumChanges).filter(a=>{let c=a.original+a.revised;return!b.a.has(c)&&(b.a.add(c),!0)}),gaps:[...new Set(a.flatMap(a=>a.gaps))],generatedAt:Date.now()}}function n(a){let b=e.join(process.env.HOME||process.cwd(),".customize-agent","cache","document-workflow",(0,g.c6)(a||"default"));return d.mkdirSync(b,{recursive:!0}),b}function o(a,b,c){let f=n(a);f&&c&&d.writeFileSync(e.join(f,`project-graph-${b}.json`),JSON.stringify(c,null,2))}function p(a,b){if(!a)return{ok:!1,reasons:["LLM 未返回可解析的 ProjectGraph JSON"]};let c=[],d=l(a),e=i(b);0===d&&c.push("ProjectGraph 全部节点为空"),/招标范围|施工范围|建设内容|工程名称|项目名称|工程量|清单|图纸/u.test(e)&&0===a.works.length&&c.push("缺少工程范围/主要工程内容 works"),/工期|日历天|进度/u.test(e)&&0===a.schedule.length&&c.push("资料包含工期信息但 schedule 为空"),/质量|验收|标准|规范/u.test(e)&&0===a.standards.length&&c.push("资料包含质量/验收/标准信息但 standards 为空"),/材料|设备|机械|劳动力|工程量|清单/u.test(e)&&0===a.resources.length&&c.push("资料包含资源或工程量信息但 resources 为空");let f=[...a.works,...a.methods,...a.resources,...a.schedule,...a.standards,...a.risks,...a.requirements,...a.siteConditions].filter(a=>(a.sourceFiles||[]).length>0).length+a.addendumChanges.filter(a=>a.sourceFile).length;return d>0&&0===f&&c.push("图谱节点缺少来源文件"),{ok:0===c.length,reasons:c}}function q(a,b=!1){let c=a.works.length+a.methods.length+a.resources.length+a.schedule.length+a.standards.length+a.risks.length+a.requirements.length+a.siteConditions.length+a.addendumChanges.length;return(0,h.X5)({type:"file_understanding",roleId:"project-graph",status:"success",message:`${b?"复用缓存:":""}${a.works.length}工程 ${a.methods.length}工法 ${a.resources.length}资源 ${a.schedule.length}节点 ${a.standards.length}标准 ${a.risks.length}风险 ${a.requirements.length}要求 ${a.siteConditions.length}条件 ${a.addendumChanges.length}修正${a.gaps.length?` ${a.gaps.length}缺口`:""}(${c}项)`,details:[...a.works.slice(0,3).map(a=>a.name),...a.resources.slice(0,3).map(a=>a.name),...a.gaps.slice(0,3)]},{subtitle:"项目图谱分析"})}function r(a){return(0,h.X5)({type:"file_understanding",roleId:"project-graph",status:"failed",message:`项目图谱分析失败:${a.slice(0,3).join(";")}`,details:a.slice(0,8)},{subtitle:"项目图谱分析"})}async function s(a){var b;if((0,g.Te)(a.signal),0===a.evidence.length)return{stage:r(["未检索到项目证据,无法生成可信 LLM 项目图谱"])};let c=(b={evidence:a.evidence,requirement:a.requirement,templateId:a.templateId,projectRoot:a.projectRoot},(0,g.c6)({version:"project-graph-v4-llm-domain-validated",requirement:b.requirement||"",templateId:b.templateId||"",evidence:b.evidence.map(a=>({filePath:a.filePath,fileSig:function(a,b){if(!a)return;let c=e.isAbsolute(b)?b:e.join(a,b);try{let a=d.statSync(c);return{mtimeMs:a.mtimeMs,size:a.size}}catch{return}}(b.projectRoot,a.filePath),sectionTitle:a.sectionTitle,contentHash:(0,g.c6)(a.content.slice(0,8e3))})).sort((a,b)=>`${a.filePath}${a.sectionTitle}`.localeCompare(`${b.filePath}${b.sectionTitle}`))})),h=function(a,b){let c=n(a);if(c)try{let a=JSON.parse(d.readFileSync(e.join(c,`project-graph-${b}.json`),"utf8"));return a&&Array.isArray(a.works)?a:void 0}catch{return}}(a.projectRoot,c),s=h?p(h,a.evidence):void 0;if(h&&s?.ok)return{graph:h,stage:q(h,!0)};let t=[...a.evidence].sort((a,b)=>b.score-a.score),u=function(a){let b=i(a),c=(a,c)=>{let d=function(a,b){let c=a.match(b);return c?.[1]?.replace(/\s+/gu," ").trim().slice(0,500)||""}(b,c);return d?`${a}:${d}`:""};return[c("项目名称",/(?:招标项目名称|项目名称|工程名称)[::\s]*([^。;\n]{3,120})/u),c("建设地点",/(?:建设地点|项目地点|实施地点)[::\s]*([^。;\n]{3,160})/u),c("建设规模",/(?:建设规模|建筑面积|总建筑面积)[::\s]*([^。;\n]{3,120})/u),c("计划工期",/(?:计划工期|总工期|工期要求|工期总日历天数)[::\s]*([^。;\n]{2,80})/u),c("质量标准",/(?:质量标准|质量要求|质量目标)[::\s]*([^。;\n]{2,120})/u),c("招标范围",/(?:招标范围|工程承包范围|施工范围|建设内容)[::\s]*([\s\S]{20,700}?)(?=\n#{1,4}\s|\n\d+[.、]\s|质量|工期|$)/u),k(a,/补疑|澄清|答疑|修正/u).length?`补疑澄清文件:${k(a,/补疑|澄清|答疑|修正/u).join("、")}`:""].filter(Boolean)}(t),v=[];async function w(b,c=[]){let d=function(a,b,c=52e3){let d=j[b],e=[...a].sort((a,b)=>{let c=+!!d.pattern.test(`${a.filePath}${a.sectionTitle||""}${a.content}`);return!!d.pattern.test(`${b.filePath}${b.sectionTitle||""}${b.content}`)-c||b.score-a.score}),f=[],g=0;for(let a of e){let b={...a,content:a.content.replace(/\s+/gu," ").trim().slice(0,5e3)};if((!(g+b.content.length>c)||!(f.length>=8))&&(f.push(b),(g+=b.content.length)>=c||f.length>=18))break}return f}(t,b,c.length?64e3:52e3),e=await (0,f.bb)(`通读以下项目资料(招标文件、工程量清单、图纸设计说明、补疑文件等),
215
+ ${a.content}`).join("\n")}let j={scope:{title:"项目基本信息、工程范围、主要工程内容",pattern:/项目名称|工程名称|招标范围|施工范围|建设内容|建设规模|建筑面积|工程概况|清单|图纸/u,guidance:"重点填充 works、requirements。必须识别项目名称、建设地点、建设规模、招标范围、工程内容;有来源才写。"},methods:{title:"关键施工方法与专业工序",pattern:/施工方法|施工工艺|工序|流程|专项|装饰|装修|加固|电气|给排水|消防|智能化|暖通|屋面|外墙/u,guidance:"重点填充 methods,并关联 applicableWorks。步骤必须来自资料或由资料中的专业工程内容直接归纳。"},resources:{title:"材料、设备、劳动力、工程量资源",pattern:/材料|设备|机械|劳动力|工程量|清单|规格|型号|数量|单位|暂估|主材/u,guidance:"重点填充 resources。材料设备和工程量能确认多少写多少,数量和单位不得编造。"},scheduleStandards:{title:"工期节点、质量目标、标准规范、验收要求",pattern:/工期|日历天|开工|竣工|节点|进度|质量|验收|标准|规范|合格|创优/u,guidance:"重点填充 schedule、standards。必须优先抽取总工期、质量标准、验收标准和关键节点。"},risksSite:{title:"现场条件、重难点、风险与约束",pattern:/现场|周边|交通|既有|营业|拆除|保护|安全|文明|扬尘|噪声|风险|难点|危大/u,guidance:"重点填充 risks、siteConditions。风险必须给出资料支撑的原因和控制方向。"},requirementsAddendum:{title:"招标管理要求、补疑澄清与修正",pattern:/招标|投标|合同|要求|承包|分包|保修|补疑|澄清|答疑|修正|变更/u,guidance:"重点填充 requirements、addendumChanges。补疑澄清必须写 original、revised、sourceFile;无法确认原文时不要编造。"}};function k(a,b,c=8){return[...new Set(a.filter(a=>b.test(a.content)||b.test(a.sectionTitle||"")||b.test(a.filePath)).map(a=>a.filePath))].slice(0,c)}function l(a){return a.works.length+a.methods.length+a.resources.length+a.schedule.length+a.standards.length+a.risks.length+a.requirements.length+a.siteConditions.length+a.addendumChanges.length}function m(a){let b={w:new Set,m:new Set,r:new Set,sc:new Set,st:new Set,ri:new Set,rq:new Set,si:new Set,a:new Set};return{works:a.flatMap(a=>a.works).filter(a=>{let c=a.name+a.scope;return!b.w.has(c)&&(b.w.add(c),!0)}),methods:a.flatMap(a=>a.methods).filter(a=>{let c=a.name;return!b.m.has(c)&&(b.m.add(c),!0)}),resources:a.flatMap(a=>a.resources).filter(a=>{let c=a.name+a.spec+a.type;return!b.r.has(c)&&(b.r.add(c),!0)}),schedule:a.flatMap(a=>a.schedule).filter(a=>{let c=a.milestone;return!b.sc.has(c)&&(b.sc.add(c),!0)}),standards:a.flatMap(a=>a.standards).filter(a=>{let c=a.code+a.description;return!b.st.has(c)&&(b.st.add(c),!0)}),risks:a.flatMap(a=>a.risks).filter(a=>{let c=a.risk;return!b.ri.has(c)&&(b.ri.add(c),!0)}),requirements:a.flatMap(a=>a.requirements).filter(a=>{let c=a.category+a.detail;return!b.rq.has(c)&&(b.rq.add(c),!0)}),siteConditions:a.flatMap(a=>a.siteConditions).filter(a=>{let c=a.condition;return!b.si.has(c)&&(b.si.add(c),!0)}),addendumChanges:a.flatMap(a=>a.addendumChanges).filter(a=>{let c=a.original+a.revised;return!b.a.has(c)&&(b.a.add(c),!0)}),gaps:[...new Set(a.flatMap(a=>a.gaps))],generatedAt:Date.now()}}function n(a){let b=e.join(process.env.HOME||process.cwd(),".customize-agent","cache","document-workflow",(0,g.c6)(a||"default"));return d.mkdirSync(b,{recursive:!0}),b}function o(a,b,c){let f=n(a);f&&c&&d.writeFileSync(e.join(f,`project-graph-${b}.json`),JSON.stringify(c,null,2))}function p(a,b){if(!a)return{ok:!1,reasons:["LLM 未返回可解析的 ProjectGraph JSON"]};let c=[],d=l(a),e=i(b);0===d&&c.push("ProjectGraph 全部节点为空"),/招标范围|施工范围|建设内容|工程名称|项目名称|工程量|清单|图纸/u.test(e)&&0===a.works.length&&c.push("缺少工程范围/主要工程内容 works"),/工期|日历天|进度/u.test(e)&&0===a.schedule.length&&c.push("资料包含工期信息但 schedule 为空"),/质量|验收|标准|规范/u.test(e)&&0===a.standards.length&&c.push("资料包含质量/验收/标准信息但 standards 为空"),/材料|设备|机械|劳动力|工程量|清单/u.test(e)&&0===a.resources.length&&c.push("资料包含资源或工程量信息但 resources 为空");let f=[...a.works,...a.methods,...a.resources,...a.schedule,...a.standards,...a.risks,...a.requirements,...a.siteConditions].filter(a=>(a.sourceFiles||[]).length>0).length+a.addendumChanges.filter(a=>a.sourceFile).length;return d>0&&0===f&&c.push("图谱节点缺少来源文件"),{ok:0===c.length,reasons:c}}function q(a,b=!1){let c=a.works.length+a.methods.length+a.resources.length+a.schedule.length+a.standards.length+a.risks.length+a.requirements.length+a.siteConditions.length+a.addendumChanges.length;return(0,h.X5)({type:"file_understanding",roleId:"project-graph",status:"success",message:`${b?"复用缓存:":""}${a.works.length}工程 ${a.methods.length}工法 ${a.resources.length}资源 ${a.schedule.length}节点 ${a.standards.length}标准 ${a.risks.length}风险 ${a.requirements.length}要求 ${a.siteConditions.length}条件 ${a.addendumChanges.length}修正${a.gaps.length?` ${a.gaps.length}缺口`:""}(${c}项)`,details:[...a.works.slice(0,3).map(a=>a.name),...a.resources.slice(0,3).map(a=>a.name),...a.gaps.slice(0,3)]},{subtitle:"项目图谱分析"})}function r(a){return(0,h.X5)({type:"file_understanding",roleId:"project-graph",status:"failed",message:`项目图谱分析失败:${a.slice(0,3).join(";")}`,details:a.slice(0,8)},{subtitle:"项目图谱分析"})}async function s(a){var b;if((0,g.Te)(a.signal),0===a.evidence.length)return{stage:r(["未检索到项目证据,无法生成可信 LLM 项目图谱"])};let c=(b={evidence:a.evidence,requirement:a.requirement,templateId:a.templateId,projectRoot:a.projectRoot},(0,g.c6)({version:"project-graph-v4-llm-domain-validated",requirement:b.requirement||"",templateId:b.templateId||"",evidence:b.evidence.map(a=>({filePath:a.filePath,fileSig:function(a,b){if(!a)return;let c=e.isAbsolute(b)?b:e.join(a,b);try{let a=d.statSync(c);return{mtimeMs:a.mtimeMs,size:a.size}}catch{return}}(b.projectRoot,a.filePath),sectionTitle:a.sectionTitle,contentHash:(0,g.c6)({length:a.content.length,head:a.content.slice(0,8e3),tail:a.content.slice(-8e3)})})).sort((a,b)=>`${a.filePath}${a.sectionTitle}`.localeCompare(`${b.filePath}${b.sectionTitle}`))})),h=function(a,b){let c=n(a);if(c)try{let a=JSON.parse(d.readFileSync(e.join(c,`project-graph-${b}.json`),"utf8"));return a&&Array.isArray(a.works)?a:void 0}catch{return}}(a.projectRoot,c),s=h?p(h,a.evidence):void 0;if(h&&s?.ok)return{graph:h,stage:q(h,!0)};let t=[...a.evidence].sort((a,b)=>b.score-a.score),u=function(a){let b=i(a),c=(a,c)=>{let d=function(a,b){let c=a.match(b);return c?.[1]?.replace(/\s+/gu," ").trim().slice(0,500)||""}(b,c);return d?`${a}:${d}`:""};return[c("项目名称",/(?:招标项目名称|项目名称|工程名称)[::\s]*([^。;\n]{3,120})/u),c("建设地点",/(?:建设地点|项目地点|实施地点)[::\s]*([^。;\n]{3,160})/u),c("建设规模",/(?:建设规模|建筑面积|总建筑面积)[::\s]*([^。;\n]{3,120})/u),c("计划工期",/(?:计划工期|总工期|工期要求|工期总日历天数)[::\s]*([^。;\n]{2,80})/u),c("质量标准",/(?:质量标准|质量要求|质量目标)[::\s]*([^。;\n]{2,120})/u),c("招标范围",/(?:招标范围|工程承包范围|施工范围|建设内容)[::\s]*([\s\S]{20,700}?)(?=\n#{1,4}\s|\n\d+[.、]\s|质量|工期|$)/u),k(a,/补疑|澄清|答疑|修正/u).length?`补疑澄清文件:${k(a,/补疑|澄清|答疑|修正/u).join("、")}`:""].filter(Boolean)}(t),v=[];async function w(b,c=[]){let d=function(a,b,c=52e3){let d=j[b],e=[...a].sort((a,b)=>{let c=+!!d.pattern.test(`${a.filePath}${a.sectionTitle||""}${a.content}`);return!!d.pattern.test(`${b.filePath}${b.sectionTitle||""}${b.content}`)-c||b.score-a.score}),f=[],g=0;for(let a of e){let b={...a,content:a.content.replace(/\s+/gu," ").trim().slice(0,5e3)};if((!(g+b.content.length>c)||!(f.length>=8))&&(f.push(b),(g+=b.content.length)>=c||f.length>=18))break}return f}(t,b,c.length?64e3:52e3),e=await (0,f.bb)(`通读以下项目资料(招标文件、工程量清单、图纸设计说明、补疑文件等),
216
216
  输出一个 JSON 对象,描述你对该项目的完整理解。
217
217
 
218
218
  JSON 字段(全部为数组,无相关信息时返回空数组):
@@ -236,7 +236,7 @@ ${a.content.replace(/\s+/gu," ").trim()}`}).join("\n\n---\n\n");return`请从以
236
236
 
237
237
  ${b}
238
238
 
239
- 返回 JSON。`}(a)].filter(Boolean).join("\n\n")}(d,b,u),{temperature:.1*!c.length,signal:a.signal,timeoutMs:a.timeoutMs||18e4});(0,g.Te)(a.signal);if(!e)return;let h=new Set(d.map(a=>a.filePath)),i=a=>"string"==typeof a&&(h.has(a)||d.some(b=>b.filePath.includes(a)||a.includes(b.filePath))),k=(a,b)=>"string"==typeof a?a.slice(0,b):"number"==typeof a?String(a).slice(0,b):"",l=(a,b)=>(Array.isArray(a)?a.filter(a=>"string"==typeof a&&a.length>0):[]).slice(0,b);return{works:(e.works||[]).filter(a=>"string"==typeof a.name&&"string"==typeof a.scope).map(a=>({name:k(a.name,200),scope:k(a.scope,500),sourceFiles:l(a.sourceFiles,10).filter(i),relatedItems:l(a.relatedItems,20)})),methods:(e.methods||[]).filter(a=>"string"==typeof a.name).map(a=>({name:k(a.name,200),steps:l(a.steps,12),applicableWorks:l(a.applicableWorks,10),sourceFiles:l(a.sourceFiles,10).filter(i)})),resources:(e.resources||[]).filter(a=>"string"==typeof a.name).map(a=>({name:k(a.name,200),type:"material"===a.type||"equipment"===a.type||"labor"===a.type?a.type:"material",spec:k(a.spec,200),quantity:k(a.quantity,50),unit:k(a.unit,20),sourceFiles:l(a.sourceFiles,5).filter(i)})),schedule:(e.schedule||[]).filter(a=>"string"==typeof a.milestone).map(a=>({milestone:k(a.milestone,200),duration:k(a.duration,100),startDate:k(a.startDate,50),endDate:k(a.endDate,50),sourceFiles:l(a.sourceFiles,5).filter(i)})),standards:(e.standards||[]).filter(a=>"string"==typeof a.code||"string"==typeof a.description).map(a=>({code:k(a.code,100),description:k(a.description,300),sourceFiles:l(a.sourceFiles,5).filter(i)})),risks:(e.risks||[]).filter(a=>"string"==typeof a.risk).map(a=>({risk:k(a.risk,300),level:"high"===a.level||"medium"===a.level||"low"===a.level?a.level:"medium",mitigation:k(a.mitigation,500),sourceFiles:l(a.sourceFiles,5).filter(i)})),requirements:(e.requirements||[]).filter(a=>"string"==typeof a.category&&"string"==typeof a.detail).map(a=>({category:k(a.category,100),detail:k(a.detail,500),sourceFiles:l(a.sourceFiles,5).filter(i)})),siteConditions:(e.siteConditions||[]).filter(a=>"string"==typeof a.condition).map(a=>({condition:k(a.condition,300),impact:k(a.impact,500),sourceFiles:l(a.sourceFiles,5).filter(i)})),addendumChanges:(e.addendumChanges||[]).filter(a=>"string"==typeof a.original&&"string"==typeof a.revised).map(a=>({originalPath:k(a.originalPath,300),original:k(a.original,300),revised:k(a.revised,500),sourceFile:k(a.sourceFile,200)})),gaps:l(e.gaps,20),generatedAt:Date.now()}}async function x(b=[]){let c=[];for(let d of Object.keys(j))try{let a=await w(d,b);a&&l(a)>0?c.push(a):v.push(`${j[d].title} 未抽取到有效节点`)}catch(b){if(a.signal?.aborted)throw b;v.push(`${j[d].title} LLM 调用失败:${b instanceof Error?b.message:String(b)}`)}return c.length?m(c):void 0}try{let b=await x(),d=p(b,t);if(d.ok&&b)return o(a.projectRoot,c,b),{graph:b,stage:q(b)};let e=await x(d.reasons),f=m([...b?[b]:[],...e?[e]:[]]);if((d=p(f,t)).ok)return o(a.projectRoot,c,f),{graph:f,stage:q(f)};return{stage:r([...d.reasons,...v])}}catch(b){if(a.signal?.aborted)throw b;return console.error("[project-graph] failed:",b),{stage:r([b instanceof Error?b.message:String(b),...v])}}}function t(a){let b=["## 项目资料图谱分析结果",""];for(let c of a.works)2===b.length&&b.push("### 主要工程内容"),b.push(`- **${c.name}**:${c.scope}`);for(let c of(a.works.length&&b.push(""),a.methods))b.includes("### 关键施工方法与工艺")||b.push("### 关键施工方法与工艺"),b.push(`- **${c.name}**:${c.steps.filter(Boolean).join(" → ")}`);for(let c of(a.methods.length&&b.push(""),a.resources)){b.includes("### 资源需求")||b.push("### 资源需求");let a={material:"材料",equipment:"设备",labor:"劳动力"}[c.type]||"资源";b.push(`- [${a}] ${c.name}${c.spec?`(${c.spec})`:""}${c.quantity?` ${c.quantity}${c.unit}`:""}`)}for(let c of(a.resources.length&&b.push(""),a.schedule))b.includes("### 工期与关键节点")||b.push("### 工期与关键节点"),b.push(`- ${c.milestone}:${c.duration}(${c.startDate} ~ ${c.endDate})`);for(let c of(a.schedule.length&&b.push(""),a.standards))b.includes("### 技术标准与验收要求")||b.push("### 技术标准与验收要求"),b.push(`- **${c.code}**:${c.description}`);for(let c of(a.standards.length&&b.push(""),a.risks))b.includes("### 重点难点与风险")||b.push("### 重点难点与风险"),b.push(`- **[${c.level}] ${c.risk}**:${c.mitigation}`);for(let c of(a.risks.length&&b.push(""),a.requirements))b.includes("### 特定要求")||b.push("### 特定要求"),b.push(`- [${c.category}] ${c.detail}`);for(let c of(a.requirements.length&&b.push(""),a.siteConditions))b.includes("### 现场条件与约束")||b.push("### 现场条件与约束"),b.push(`- ${c.condition}:${c.impact}`);for(let c of(a.siteConditions.length&&b.push(""),a.addendumChanges))b.includes("### 补疑修正")||b.push("### 补疑修正"),b.push(`- "${c.original}" → "${c.revised}"`);for(let c of(a.addendumChanges.length&&b.push(""),a.gaps))b.includes("### 资料缺口")||b.push("### 资料缺口"),b.push(`- ${c}`);return a.gaps.length&&b.push(""),b.join("\n")}},78217:(a,b,c)=>{function d(a,b){return Math.ceil(e(a)/f(b))}function e(a){return a.replace(/<[^>]+>/gu,"").replace(/\s+/gu,"").length}function f(a){let b=Number(String(a&&"typography"in a&&a.typography?.bodySize||"").replace(/[^\d.]/gu,""))||14,c=Number(String(a&&"typography"in a&&a.typography?.lineHeight||"").replace(/[^\d.]/gu,""))||22;return b>=14&&c>=22?900:1050}function g(a){let b=a.trim();if(/^\d+(?:\.\d+)?$/u.test(b))return Number(b);let c={零:0,一:1,二:2,两:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};if("十"===b)return 10;let d=/^([一二两三四五六七八九])?十([一二三四五六七八九])?$/u.exec(b);if(d)return(d[1]?c[d[1]]:1)*10+(d[2]?c[d[2]]:0)}function h(a="",b=""){let c=`${a}${b}`;return/不少于|至少|不低于|以上|起码/u.test(c)?"minimum":/约|大概|左右|大约|约为|附近/u.test(c)?"approximate":"exact"}function i(a){let b=a.title+a.purpose;return/方法|技术|质量|安全|进度|资源|保障|措施|部署|方案|流程|执行/u.test(b)?1.3:/概况|结语|附录/u.test(b)?.75:1}function j(a){let b=a.template.generationSettings||a.template.exportSettings,c=f(a.template.exportSettings||a.template.generationSettings),d=function(a){let b=a.replace(/\s+/gu," "),c=[...b.matchAll(/(不少于|至少|不低于|约为|约|大概|大约|左右|生成|输出|达到|共)?\s*(\d+(?:\.\d+)?|[一二两三四五六七八九十]{1,3})\s*(?:页|頁)\s*(以上|左右|以内|以下)?/gu)],d=[...b.matchAll(/(不少于|至少|不低于|约为|约|大概|大约|左右|生成|输出|达到|共)?\s*(\d+(?:\.\d+)?|[一二两三四五六七八九十]{1,3})\s*(万)?\s*(?:字|字符)\s*(以上|左右|以内|以下)?/gu)],e=c.map(a=>{let b=g(a[2]||"");return Number.isFinite(b)?{value:b,mode:h(a[1],a[3])}:void 0}).filter(a=>!!a).at(-1),f=d.map(a=>{let b=g(a[2]||"");return b?{value:Math.round(b*(a[3]?1e4:1)),mode:h(a[1],a[4])}:void 0}).filter(a=>!!a).at(-1);return{targetPages:e?.value,pageMode:e?.mode,targetChars:f?.value,charMode:f?.mode}}([a.requirement||"",a.promptTexts].join("\n")),e=!!(d.targetChars||d.targetPages),j=e?void 0:b?.targetPages?.target||b?.targetPages?.min,k=d.targetPages?d.targetPages*c:void 0,l=d.targetPages||j,m=e?"explicit":j?"template":a.spec?.chapterRules.some(a=>a.minWords)||a.spec?.dynamicChapterRule.minWordsPerChapter?"spec":"default",n=e?Math.max(d.targetChars||0,k||0)||void 0:Math.max((j?j*c:void 0)||0)||void 0,o=d.pageMode||"exact",p=d.charMode||o,q=e&&"approximate"===p,r=e&&"minimum"===p,s=e?l?Math.floor(l*(r?1:.9)):void 0:b?.targetPages?.min||(l?Math.floor(.95*l):void 0),t=e&&l&&!r?Math.ceil(l*(q?1.15:1.08)):b?.targetPages?.max,u=n?Math.floor(n*(r?1:.9)):s?s*c:void 0,v=n&&!r?Math.ceil(n*(q?1.15:1.08)):t?t*c:void 0,w=a.chapters.length>0?a.chapters:a.template.chapters,x=w.reduce((a,b)=>a+i(b),0)||1,y=new Map,z=w.map(a=>({chapter:a,target:n?Math.round(n*i(a)/x):0})),A=w.reduce((b,c)=>b+Math.max(a.spec?.chapterRules.find(a=>a.id===c.id||a.title===c.title)?.minWords||0,a.spec?.dynamicChapterRule.minWordsPerChapter||0,n?Math.min(900,Math.max(450,Math.floor(n/Math.max(1,w.length)*.35))):1200),0),B=n&&A>.92*n?Math.max(.45,.92*n/A):1;for(let{chapter:b,target:c}of z){let d=Math.floor(Math.max(Math.max(a.spec?.chapterRules.find(a=>a.id===b.id||a.title===b.title)?.minWords||0,a.spec?.dynamicChapterRule.minWordsPerChapter||0),n?Math.min(900,Math.max(450,Math.floor(n/Math.max(1,w.length)*.35))):1200)*B);y.set(b.id,Math.max(d,c))}let C=!!(e&&(r||"exact"===p)&&(n||u||0)>=4e4);return{targetPages:l,minPages:s,maxPages:t,targetChars:n,minChars:u,maxChars:v,charsPerPage:c,chapterTargets:y,source:m,mode:p,longformStrict:C}}function k(a,b){let c=a?.targetPages;if(!c?.min&&!c?.target&&!c?.max)return[];let e=d(b,a),f=c.min||c.target,g=c.max||c.target,h=[];return f&&e<f&&h.push({level:"error",message:`正文篇幅低于目标页数:预计约 ${e} 页,目标不少于 ${f} 页`,suggestion:"请重新生成或增加章节正文深度后再导出正式文件。"}),g&&e>g+4&&h.push({level:"warning",message:`正文篇幅可能超过目标页数:预计约 ${e} 页,目标不超过 ${g} 页`,suggestion:"建议检查是否存在重复段落或过度展开。"}),h}function l(a,b){let{currentChars:c,estimatedPages:d}=m(a,b),e=[];return a.minChars&&c<a.minChars&&e.push({level:"error",message:`正文篇幅低于目标字数:当前 ${c} 字,目标不少于 ${a.minChars} 字`,suggestion:"请继续扩写缺口章节,或降低目标字数/页数后重新生成。"}),a.maxChars&&c>Math.ceil(1.12*a.maxChars)?e.push({level:"error",message:`正文篇幅超过目标字数区间:当前 ${c} 字,建议不超过 ${a.maxChars} 字`,suggestion:"请压缩重复段落、过细小节或过度展开内容后再导出。"}):a.maxChars&&c>a.maxChars&&e.push({level:"warning",message:`正文篇幅超过目标字数区间:当前 ${c} 字,建议不超过 ${a.maxChars} 字`,suggestion:"建议减少重复段落、过细小节或过度展开内容。"}),a.minPages&&d<a.minPages&&e.push({level:"error",message:`正文篇幅低于目标页数:预计约 ${d} 页,目标不少于 ${a.minPages} 页`,suggestion:"请继续扩写正文,或调整导出字号/行距后再导出。"}),a.maxPages&&d>a.maxPages&&e.push({level:"warning",message:`正文篇幅超过目标页数区间:预计约 ${d} 页,建议不超过 ${a.maxPages} 页`,suggestion:"建议压缩过度展开内容或调整目标页数。"}),e}function m(a,b){let c=e(b),d=Math.ceil(c/a.charsPerPage);return{currentChars:c,estimatedPages:d}}c.d(b,{Cv:()=>d,PE:()=>k,V7:()=>e,fW:()=>m,tF:()=>j,ty:()=>l})},80439:(a,b,c)=>{function d(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 e(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||d(c.roleId),subtitle:c.subtitle||c.roleName||d(c.roleId)}}function f(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 g(a,b){return`${a},耗时 ${Math.round((Date.now()-b)/1e3)} 秒`}c.d(b,{AQ:()=>g,X5:()=>e,fx:()=>f})},81125:(a,b,c)=>{c.d(b,{h:()=>e,o:()=>f});var d=c(92808);function e(a,b){let c=function(a,b){let c=[a.name,a.category,a.description,a.outputTitle,...a.chapters.flatMap(a=>[a.title,a.purpose])].join("\n"),d=new Set(["project_overview","scope_description"]);return/需求|规则|响应|方案|实施|专项|安全|质量|进度|合规|施工组织|技术标/iu.test(c)&&["requirement_document","structured_data"].forEach(a=>d.add(a)),(/安全|质量|进度|工期|文明|环保|验收/iu.test(c)||b.materialInventory.schedule_quality_safety.length>0)&&d.add("schedule_quality_safety"),(/设计|图纸|平面|立面|剖面|做法/iu.test(c)||b.materialInventory.design_specification.length>0)&&d.add("design_specification"),(/风险|重点|难点|约束|现场|危大/iu.test(c)||b.materialInventory.risk_constraints.length>0)&&d.add("risk_constraints"),d}(a,b);return[...new Set([...function(a){let b=[a.name,a.description,a.outputTitle,...a.chapters.flatMap(a=>[a.title,a.purpose,...a.requiredFacts||[],...a.queries||[]])].join("\n"),c=new Set((0,d.t0)(b,d.hW));return c.add("project_overview"),c.add("scope_description"),[...c]}(a),...c])].map(a=>{let d=b.materialInventory[a]||[],e=c.has(a),f=d.length>0,g=f&&d.length<(e?2:1);return{role:a,required:e,satisfied:f,weak:g,evidenceCount:d.length,filePaths:d.map(a=>a.filePath),reason:f?`已匹配 ${d.length} 个资料文件`:e?"必需资料角色缺失":"可选资料角色缺失"}})}function f(a){if(0===a.length)return 1;let b=a.filter(a=>a.required),c=a.filter(a=>!a.required),d=b.length?b.filter(a=>a.satisfied).length/b.length:1;return Math.max(0,Math.min(1,.75*d+.2*(c.length?c.filter(a=>a.satisfied).length/c.length:1)+.05-.05*!!b.some(a=>a.weak)))}},85441:(a,b,c)=>{c.d(b,{F:()=>u,P:()=>s});var d=c(76760),e=c(44533),f=c(92808);let g=["project_overview","requirement_document","structured_data","scope_description"],h=["project_overview","requirement_document","addendum","structured_data","budget_cost","design_specification","resource_recommendation","schedule_quality_safety","scope_description","technical_specification","risk_constraints"];function i(a){let b=[];for(let c of a)for(let a of c.relativePath.split(/[\\/]/gu))a&&b.push(a);return b}function j(a){return/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|\d{1,2}\.\d{1,2}/u.test(a)}function k(a){return m(a).replace(/^\d+(?:\.\d+)?[-_\s]*/u,"").replace(/^(?:延期到\d+(?:\.\d+)?[-_—–\s]*)+/u,"").trim()}function l(a){let b=new Set,c=[];for(let d of a)!d||b.has(d)||(b.add(d),c.push(d));return c}function m(a){return a.replace(/\.(?:pdf|docx?|xlsx?|xls|dwg)$/iu,"").trim()}function n(a){let b=new Set,c=[];for(let d of i(a)){let a=k(d);!(!/项目|任务|文档|合同|计划|方案|工程/iu.test(a)||a.length<6||b.has(a))&&(!j(a)||/\.\w+$/u.test(d))&&(b.add(a),c.push(a))}return c}function o(a,b){return 0===a.length?b:a.map(a=>m(a.fileName)).join("、")}function p(a,b,c){b.lastIndex=0;let d=new Set,e=[];for(let f of a.matchAll(b)){let a=(f[c]||"").trim();!a||d.has(a)||(d.add(a),e.push(a))}return b.lastIndex=0,e}function q(a){return a.replace(/\\/gu,"/").replace(/^\/+|\/+$/gu,"")}function r(a){let b=q(a).split("/").filter(Boolean);return b.length>1?b[0]:void 0}function s(a,b){let c=(0,e.Yy)(a),m=function(a,b){let c=a.filter(a=>"error"!==a.status),d=new Set((b?.boundFilePaths||[]).map(q)),e=c.filter(a=>d.has(q(a.relativePath)));if(e.length>0){let a=[...new Set(e.map(a=>r(a.relativePath)).filter(Boolean))],b=1===a.length?a[0]:void 0;return{files:e,reason:b?`模板绑定文件定位到资料组:${b}`:"使用模板显式绑定文件作为资料范围",ambiguous:!1}}let f=(b?.requirement||"").trim();if(f){let a=new Map;for(let b of c){let c=r(b.relativePath);if(!c)continue;let d=function(a,b){let c=0;for(let d of a.split(/(?:\s|_|-|—|(|)|\(|\)|【|】|\[|\]|、|,|,)+/u)){let a=d.trim();a.length>=2&&b.includes(a)&&(c+=1)}return c}(c,f);d>0&&a.set(c,(a.get(c)||0)+d)}let b=[...a.entries()].sort((a,b)=>b[1]-a[1])[0];if(b)return{files:c.filter(a=>r(a.relativePath)===b[0]),reason:`需求描述定位到资料组:${b[0]}`,ambiguous:!1}}let g=[...new Set(c.map(a=>r(a.relativePath)).filter(Boolean))];return 1===g.length?{files:c.filter(a=>r(a.relativePath)===g[0]),reason:`知识库单一资料组:${g[0]}`,ambiguous:!1}:{files:c,reason:g.length>1?`未指定资料组,检测到 ${g.length} 个资料组,已阻断生成避免跨项目污染`:"未检测到资料组,使用全部资料",ambiguous:g.length>1}}(c,b),s=m.files,t=function(){let a={};for(let b of h)a[b]=[];return a}(),u=new Map((b?.boundFileRoles||[]).map(a=>[q(a.filePath),a.roles]));for(let a of s){let b=q(a.relativePath),c=[...u.entries()].filter(([a])=>b.endsWith(a)||a.endsWith(b)).flatMap(([,a])=>a);for(let b of[...new Set([...function(a){let b=new Set((0,f.t0)(a,f.hW));return b.add("project_overview"),[...b]}(a.relativePath),...c])])t[b].push({filePath:a.relativePath,fileName:d.basename(a.relativePath),role:b,chunkCount:a.chunkCount})}let v=function(a){let b,c;for(let d of i(a)){let a=k(d);if(/项目|工程/iu.test(a)&&!(a.length<6)){if(/\.\w+$/u.test(d)){b||=a;continue}if(j(a)){c||=a.split(/--/u).filter(a=>/项目|工程/u.test(a)).sort((a,b)=>a.length-b.length)[0]||a;continue}return a}}return b||c||"当前知识库项目"}(s),w=function(a){for(let b of a){let a=b.relativePath.match(/\b\d{4}[A-Z]{2,}\d{4,}\b/u)?.[0];if(a)return a}}(s),x=function(a,b){let c=n(a),d=n(b),e=l(a.map(a=>a.relativePath).join("\n").match(/\b\d{4}[A-Z]{2,}\d{4,}\b/gu)||[]),f=l(a.map(a=>r(a.relativePath)).filter(Boolean)),g=[c.length>0,e.length>0,1===f.length];return{fingerprint:{projectNames:c,documentNos:e,fileGroups:f,confidence:g.filter(Boolean).length/g.length},contaminationCandidates:d.filter(a=>!c.includes(a))}}(s,c),y=function(a){let b=function(a){let b="";for(let c of a)b+=`${c.relativePath}
239
+ 返回 JSON。`}(a)].filter(Boolean).join("\n\n")}(d,b,u),{temperature:.1*!c.length,signal:a.signal,timeoutMs:a.timeoutMs||18e4});(0,g.Te)(a.signal);if(!e)return;let h=new Set(d.map(a=>a.filePath)),i=a=>"string"==typeof a&&(h.has(a)||d.some(b=>b.filePath.includes(a)||a.includes(b.filePath))),k=(a,b)=>"string"==typeof a?a.slice(0,b):"number"==typeof a?String(a).slice(0,b):"",l=(a,b)=>(Array.isArray(a)?a.filter(a=>"string"==typeof a&&a.length>0):[]).slice(0,b);return{works:(e.works||[]).filter(a=>"string"==typeof a.name&&"string"==typeof a.scope).map(a=>({name:k(a.name,200),scope:k(a.scope,500),sourceFiles:l(a.sourceFiles,10).filter(i),relatedItems:l(a.relatedItems,20)})),methods:(e.methods||[]).filter(a=>"string"==typeof a.name).map(a=>({name:k(a.name,200),steps:l(a.steps,12),applicableWorks:l(a.applicableWorks,10),sourceFiles:l(a.sourceFiles,10).filter(i)})),resources:(e.resources||[]).filter(a=>"string"==typeof a.name).map(a=>({name:k(a.name,200),type:"material"===a.type||"equipment"===a.type||"labor"===a.type?a.type:"material",spec:k(a.spec,200),quantity:k(a.quantity,50),unit:k(a.unit,20),sourceFiles:l(a.sourceFiles,5).filter(i)})),schedule:(e.schedule||[]).filter(a=>"string"==typeof a.milestone).map(a=>({milestone:k(a.milestone,200),duration:k(a.duration,100),startDate:k(a.startDate,50),endDate:k(a.endDate,50),sourceFiles:l(a.sourceFiles,5).filter(i)})),standards:(e.standards||[]).filter(a=>"string"==typeof a.code||"string"==typeof a.description).map(a=>({code:k(a.code,100),description:k(a.description,300),sourceFiles:l(a.sourceFiles,5).filter(i)})),risks:(e.risks||[]).filter(a=>"string"==typeof a.risk).map(a=>({risk:k(a.risk,300),level:"high"===a.level||"medium"===a.level||"low"===a.level?a.level:"medium",mitigation:k(a.mitigation,500),sourceFiles:l(a.sourceFiles,5).filter(i)})),requirements:(e.requirements||[]).filter(a=>"string"==typeof a.category&&"string"==typeof a.detail).map(a=>({category:k(a.category,100),detail:k(a.detail,500),sourceFiles:l(a.sourceFiles,5).filter(i)})),siteConditions:(e.siteConditions||[]).filter(a=>"string"==typeof a.condition).map(a=>({condition:k(a.condition,300),impact:k(a.impact,500),sourceFiles:l(a.sourceFiles,5).filter(i)})),addendumChanges:(e.addendumChanges||[]).filter(a=>"string"==typeof a.original&&"string"==typeof a.revised).map(a=>({originalPath:k(a.originalPath,300),original:k(a.original,300),revised:k(a.revised,500),sourceFile:k(a.sourceFile,200)})),gaps:l(e.gaps,20),generatedAt:Date.now()}}async function x(b=[]){let c=Object.keys(j),d=(await (0,g.l$)(c,async c=>{try{let a=await w(c,b);if(a&&l(a)>0)return a;v.push(`${j[c].title} 未抽取到有效节点`)}catch(b){if(a.signal?.aborted)throw b;v.push(`${j[c].title} LLM 调用失败:${b instanceof Error?b.message:String(b)}`)}},{kind:"llmRepair",targetWords:4e3,concurrency:Number(process.env.DOCUMENT_PROJECT_GRAPH_DOMAIN_CONCURRENCY||2)})).filter(a=>!!a);return d.length?m(d):void 0}try{let b=await x(),d=p(b,t);if(d.ok&&b)return o(a.projectRoot,c,b),{graph:b,stage:q(b)};let e=await x(d.reasons),f=m([...b?[b]:[],...e?[e]:[]]);if((d=p(f,t)).ok)return o(a.projectRoot,c,f),{graph:f,stage:q(f)};return{stage:r([...d.reasons,...v])}}catch(b){if(a.signal?.aborted)throw b;return console.error("[project-graph] failed:",b),{stage:r([b instanceof Error?b.message:String(b),...v])}}}function t(a){let b=["## 项目资料图谱分析结果",""];for(let c of a.works)2===b.length&&b.push("### 主要工程内容"),b.push(`- **${c.name}**:${c.scope}`);for(let c of(a.works.length&&b.push(""),a.methods))b.includes("### 关键施工方法与工艺")||b.push("### 关键施工方法与工艺"),b.push(`- **${c.name}**:${c.steps.filter(Boolean).join(" → ")}`);for(let c of(a.methods.length&&b.push(""),a.resources)){b.includes("### 资源需求")||b.push("### 资源需求");let a={material:"材料",equipment:"设备",labor:"劳动力"}[c.type]||"资源";b.push(`- [${a}] ${c.name}${c.spec?`(${c.spec})`:""}${c.quantity?` ${c.quantity}${c.unit}`:""}`)}for(let c of(a.resources.length&&b.push(""),a.schedule))b.includes("### 工期与关键节点")||b.push("### 工期与关键节点"),b.push(`- ${c.milestone}:${c.duration}(${c.startDate} ~ ${c.endDate})`);for(let c of(a.schedule.length&&b.push(""),a.standards))b.includes("### 技术标准与验收要求")||b.push("### 技术标准与验收要求"),b.push(`- **${c.code}**:${c.description}`);for(let c of(a.standards.length&&b.push(""),a.risks))b.includes("### 重点难点与风险")||b.push("### 重点难点与风险"),b.push(`- **[${c.level}] ${c.risk}**:${c.mitigation}`);for(let c of(a.risks.length&&b.push(""),a.requirements))b.includes("### 特定要求")||b.push("### 特定要求"),b.push(`- [${c.category}] ${c.detail}`);for(let c of(a.requirements.length&&b.push(""),a.siteConditions))b.includes("### 现场条件与约束")||b.push("### 现场条件与约束"),b.push(`- ${c.condition}:${c.impact}`);for(let c of(a.siteConditions.length&&b.push(""),a.addendumChanges))b.includes("### 补疑修正")||b.push("### 补疑修正"),b.push(`- "${c.original}" → "${c.revised}"`);for(let c of(a.addendumChanges.length&&b.push(""),a.gaps))b.includes("### 资料缺口")||b.push("### 资料缺口"),b.push(`- ${c}`);return a.gaps.length&&b.push(""),b.join("\n")}},78217:(a,b,c)=>{function d(a,b){return Math.ceil(e(a)/f(b))}function e(a){return a.replace(/<[^>]+>/gu,"").replace(/\s+/gu,"").length}function f(a){let b=Number(String(a&&"typography"in a&&a.typography?.bodySize||"").replace(/[^\d.]/gu,""))||14,c=Number(String(a&&"typography"in a&&a.typography?.lineHeight||"").replace(/[^\d.]/gu,""))||22;return b>=14&&c>=22?900:1050}function g(a){let b=a.trim();if(/^\d+(?:\.\d+)?$/u.test(b))return Number(b);let c={零:0,一:1,二:2,两:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};if("十"===b)return 10;let d=/^([一二两三四五六七八九])?十([一二三四五六七八九])?$/u.exec(b);if(d)return(d[1]?c[d[1]]:1)*10+(d[2]?c[d[2]]:0)}function h(a="",b=""){let c=`${a}${b}`;return/不少于|至少|不低于|以上|起码/u.test(c)?"minimum":/约|大概|左右|大约|约为|附近/u.test(c)?"approximate":"exact"}function i(a){let b=a.replace(/\s+/gu," "),c=[...b.matchAll(/(不少于|至少|不低于|约为|约|大概|大约|左右|生成|输出|达到|共)?\s*(\d+(?:\.\d+)?|[一二两三四五六七八九十]{1,3})\s*(?:页|頁)\s*(以上|左右|以内|以下)?/gu)],d=[...b.matchAll(/(不少于|至少|不低于|约为|约|大概|大约|左右|生成|输出|达到|共)?\s*(\d+(?:\.\d+)?|[一二两三四五六七八九十]{1,3})\s*(万)?\s*(?:字|字符)\s*(以上|左右|以内|以下)?/gu)],e=c.map(a=>{let b=g(a[2]||"");return Number.isFinite(b)?{value:b,mode:h(a[1],a[3])}:void 0}).filter(a=>!!a).at(-1),f=d.map(a=>{let b=g(a[2]||"");return b?{value:Math.round(b*(a[3]?1e4:1)),mode:h(a[1],a[4])}:void 0}).filter(a=>!!a).at(-1);return{targetPages:e?.value,pageMode:e?.mode,targetChars:f?.value,charMode:f?.mode}}function j(a){let b=a.title+a.purpose;return/方法|技术|质量|安全|进度|资源|保障|措施|部署|方案|流程|执行/u.test(b)?1.3:/概况|结语|附录/u.test(b)?.75:1}function k(a){let b=a.template.generationSettings||a.template.exportSettings,c=f(a.template.exportSettings||a.template.generationSettings),d=i(a.requirement||""),e=i(a.promptTexts||""),g=d.targetChars||d.targetPages?d:e,h=!!(g.targetChars||g.targetPages),k=h?void 0:b?.targetPages?.target||b?.targetPages?.min,l=g.targetPages?g.targetPages*c:void 0,m=g.targetPages||k,n=h?"explicit":k?"template":a.spec?.chapterRules.some(a=>a.minWords)||a.spec?.dynamicChapterRule.minWordsPerChapter?"spec":"default",o=h?Math.max(g.targetChars||0,l||0)||void 0:Math.max((k?k*c:void 0)||0)||void 0,p=g.pageMode||"exact",q=g.charMode||p,r=h&&"approximate"===q,s=h&&"minimum"===q,t=h?m?Math.floor(m*(s?1:.9)):void 0:b?.targetPages?.min||(m?Math.floor(.95*m):void 0),u=h&&m&&!s?Math.ceil(m*(r?1.15:1.08)):b?.targetPages?.max,v=o?Math.floor(o*(s?1:.9)):t?t*c:void 0,w=o&&!s?Math.ceil(o*(r?1.15:1.08)):u?u*c:void 0,x=a.chapters.length>0?a.chapters:a.template.chapters,y=x.reduce((a,b)=>a+j(b),0)||1,z=new Map,A=x.map(a=>({chapter:a,target:o?Math.round(o*j(a)/y):0})),B=x.reduce((b,c)=>b+Math.max(a.spec?.chapterRules.find(a=>a.id===c.id||a.title===c.title)?.minWords||0,a.spec?.dynamicChapterRule.minWordsPerChapter||0,o?Math.min(900,Math.max(450,Math.floor(o/Math.max(1,x.length)*.35))):1200),0),C=o&&B>.92*o?Math.max(.45,.92*o/B):1;for(let{chapter:b,target:c}of A){let d=Math.floor(Math.max(Math.max(a.spec?.chapterRules.find(a=>a.id===b.id||a.title===b.title)?.minWords||0,a.spec?.dynamicChapterRule.minWordsPerChapter||0),o?Math.min(900,Math.max(450,Math.floor(o/Math.max(1,x.length)*.35))):1200)*C);z.set(b.id,Math.max(d,c))}let D=!!(h&&(s||"exact"===q)&&(o||v||0)>=4e4);return{targetPages:m,minPages:t,maxPages:u,targetChars:o,minChars:v,maxChars:w,charsPerPage:c,chapterTargets:z,source:n,mode:q,longformStrict:D}}function l(a,b){let c=a?.targetPages;if(!c?.min&&!c?.target&&!c?.max)return[];let e=d(b,a),f=c.min||c.target,g=c.max||c.target,h=[];return f&&e<f&&h.push({level:"error",message:`正文篇幅低于目标页数:预计约 ${e} 页,目标不少于 ${f} 页`,suggestion:"请重新生成或增加章节正文深度后再导出正式文件。"}),g&&e>g+4&&h.push({level:"warning",message:`正文篇幅可能超过目标页数:预计约 ${e} 页,目标不超过 ${g} 页`,suggestion:"建议检查是否存在重复段落或过度展开。"}),h}function m(a,b){let{currentChars:c,estimatedPages:d}=n(a,b),e=[];return a.minChars&&c<a.minChars&&e.push({level:"error",message:`正文篇幅低于目标字数:当前 ${c} 字,目标不少于 ${a.minChars} 字`,suggestion:"请继续扩写缺口章节,或降低目标字数/页数后重新生成。"}),a.maxChars&&c>Math.ceil(1.12*a.maxChars)?e.push({level:"error",message:`正文篇幅超过目标字数区间:当前 ${c} 字,建议不超过 ${a.maxChars} 字`,suggestion:"请压缩重复段落、过细小节或过度展开内容后再导出。"}):a.maxChars&&c>a.maxChars&&e.push({level:"warning",message:`正文篇幅超过目标字数区间:当前 ${c} 字,建议不超过 ${a.maxChars} 字`,suggestion:"建议减少重复段落、过细小节或过度展开内容。"}),a.minPages&&d<a.minPages&&e.push({level:"error",message:`正文篇幅低于目标页数:预计约 ${d} 页,目标不少于 ${a.minPages} 页`,suggestion:"请继续扩写正文,或调整导出字号/行距后再导出。"}),a.maxPages&&d>a.maxPages&&e.push({level:"warning",message:`正文篇幅超过目标页数区间:预计约 ${d} 页,建议不超过 ${a.maxPages} 页`,suggestion:"建议压缩过度展开内容或调整目标页数。"}),e}function n(a,b){let c=e(b),d=Math.ceil(c/a.charsPerPage);return{currentChars:c,estimatedPages:d}}c.d(b,{Cv:()=>d,PE:()=>l,V7:()=>e,fW:()=>n,tF:()=>k,ty:()=>m})},80439:(a,b,c)=>{function d(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 e(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||d(c.roleId),subtitle:c.subtitle||c.roleName||d(c.roleId)}}function f(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 g(a,b){return`${a},耗时 ${Math.round((Date.now()-b)/1e3)} 秒`}c.d(b,{AQ:()=>g,X5:()=>e,fx:()=>f})},81125:(a,b,c)=>{c.d(b,{h:()=>e,o:()=>f});var d=c(92808);function e(a,b){let c=function(a,b){let c=[a.name,a.category,a.description,a.outputTitle,...a.chapters.flatMap(a=>[a.title,a.purpose])].join("\n"),d=new Set(["project_overview","scope_description"]);return/需求|规则|响应|方案|实施|专项|安全|质量|进度|合规|施工组织|技术标/iu.test(c)&&["requirement_document","structured_data"].forEach(a=>d.add(a)),(/安全|质量|进度|工期|文明|环保|验收/iu.test(c)||b.materialInventory.schedule_quality_safety.length>0)&&d.add("schedule_quality_safety"),(/设计|图纸|平面|立面|剖面|做法/iu.test(c)||b.materialInventory.design_specification.length>0)&&d.add("design_specification"),(/风险|重点|难点|约束|现场|危大/iu.test(c)||b.materialInventory.risk_constraints.length>0)&&d.add("risk_constraints"),d}(a,b);return[...new Set([...function(a){let b=[a.name,a.description,a.outputTitle,...a.chapters.flatMap(a=>[a.title,a.purpose,...a.requiredFacts||[],...a.queries||[]])].join("\n"),c=new Set((0,d.t0)(b,d.hW));return c.add("project_overview"),c.add("scope_description"),[...c]}(a),...c])].map(a=>{let d=b.materialInventory[a]||[],e=c.has(a),f=d.length>0,g=f&&d.length<(e?2:1);return{role:a,required:e,satisfied:f,weak:g,evidenceCount:d.length,filePaths:d.map(a=>a.filePath),reason:f?`已匹配 ${d.length} 个资料文件`:e?"必需资料角色缺失":"可选资料角色缺失"}})}function f(a){if(0===a.length)return 1;let b=a.filter(a=>a.required),c=a.filter(a=>!a.required),d=b.length?b.filter(a=>a.satisfied).length/b.length:1;return Math.max(0,Math.min(1,.75*d+.2*(c.length?c.filter(a=>a.satisfied).length/c.length:1)+.05-.05*!!b.some(a=>a.weak)))}},85441:(a,b,c)=>{c.d(b,{F:()=>u,P:()=>s});var d=c(76760),e=c(44533),f=c(92808);let g=["project_overview","requirement_document","structured_data","scope_description"],h=["project_overview","requirement_document","addendum","structured_data","budget_cost","design_specification","resource_recommendation","schedule_quality_safety","scope_description","technical_specification","risk_constraints"];function i(a){let b=[];for(let c of a)for(let a of c.relativePath.split(/[\\/]/gu))a&&b.push(a);return b}function j(a){return/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|\d{1,2}\.\d{1,2}/u.test(a)}function k(a){return m(a).replace(/^\d+(?:\.\d+)?[-_\s]*/u,"").replace(/^(?:延期到\d+(?:\.\d+)?[-_—–\s]*)+/u,"").trim()}function l(a){let b=new Set,c=[];for(let d of a)!d||b.has(d)||(b.add(d),c.push(d));return c}function m(a){return a.replace(/\.(?:pdf|docx?|xlsx?|xls|dwg)$/iu,"").trim()}function n(a){let b=new Set,c=[];for(let d of i(a)){let a=k(d);!(!/项目|任务|文档|合同|计划|方案|工程/iu.test(a)||a.length<6||b.has(a))&&(!j(a)||/\.\w+$/u.test(d))&&(b.add(a),c.push(a))}return c}function o(a,b){return 0===a.length?b:a.map(a=>m(a.fileName)).join("、")}function p(a,b,c){b.lastIndex=0;let d=new Set,e=[];for(let f of a.matchAll(b)){let a=(f[c]||"").trim();!a||d.has(a)||(d.add(a),e.push(a))}return b.lastIndex=0,e}function q(a){return a.replace(/\\/gu,"/").replace(/^\/+|\/+$/gu,"")}function r(a){let b=q(a).split("/").filter(Boolean);return b.length>1?b[0]:void 0}function s(a,b){let c=(0,e.Yy)(a),m=function(a,b){let c=a.filter(a=>"error"!==a.status),d=new Set((b?.boundFilePaths||[]).map(q)),e=c.filter(a=>d.has(q(a.relativePath)));if(e.length>0){let a=[...new Set(e.map(a=>r(a.relativePath)).filter(Boolean))],b=1===a.length?a[0]:void 0;return{files:e,reason:b?`模板绑定文件定位到资料组:${b}`:"使用模板显式绑定文件作为资料范围",ambiguous:!1}}let f=(b?.requirement||"").trim();if(f){let a=new Map;for(let b of c){let c=r(b.relativePath);if(!c)continue;let d=function(a,b){let c=0;for(let d of a.split(/(?:\s|_|-|—|(|)|\(|\)|【|】|\[|\]|、|,|,)+/u)){let a=d.trim();a.length>=2&&b.includes(a)&&(c+=1)}return c}(c,f);d>0&&a.set(c,(a.get(c)||0)+d)}let b=[...a.entries()].sort((a,b)=>b[1]-a[1])[0];if(b)return{files:c.filter(a=>r(a.relativePath)===b[0]),reason:`需求描述定位到资料组:${b[0]}`,ambiguous:!1}}let g=[...new Set(c.map(a=>r(a.relativePath)).filter(Boolean))];return 1===g.length?{files:c.filter(a=>r(a.relativePath)===g[0]),reason:`知识库单一资料组:${g[0]}`,ambiguous:!1}:{files:c,reason:g.length>1?`未指定资料组,检测到 ${g.length} 个资料组,已阻断生成避免跨项目污染`:"未检测到资料组,使用全部资料",ambiguous:g.length>1}}(c,b),s=m.files,t=function(){let a={};for(let b of h)a[b]=[];return a}(),u=new Map((b?.boundFileRoles||[]).map(a=>[q(a.filePath),a.roles]));for(let a of s){let b=q(a.relativePath),c=[...u.entries()].filter(([a])=>b.endsWith(a)||a.endsWith(b)).flatMap(([,a])=>a);for(let b of[...new Set([...function(a){let b=new Set((0,f.t0)(a,f.hW));return b.add("project_overview"),[...b]}(a.relativePath),...c])])t[b].push({filePath:a.relativePath,fileName:d.basename(a.relativePath),role:b,chunkCount:a.chunkCount})}let v=function(a){let b,c;for(let d of i(a)){let a=k(d);if(/项目|工程/iu.test(a)&&!(a.length<6)){if(/\.\w+$/u.test(d)){b||=a;continue}if(j(a)){c||=a.split(/--/u).filter(a=>/项目|工程/u.test(a)).sort((a,b)=>a.length-b.length)[0]||a;continue}return a}}return b||c||"当前知识库项目"}(s),w=function(a){for(let b of a){let a=b.relativePath.match(/\b\d{4}[A-Z]{2,}\d{4,}\b/u)?.[0];if(a)return a}}(s),x=function(a,b){let c=n(a),d=n(b),e=l(a.map(a=>a.relativePath).join("\n").match(/\b\d{4}[A-Z]{2,}\d{4,}\b/gu)||[]),f=l(a.map(a=>r(a.relativePath)).filter(Boolean)),g=[c.length>0,e.length>0,1===f.length];return{fingerprint:{projectNames:c,documentNos:e,fileGroups:f,confidence:g.filter(Boolean).length/g.length},contaminationCandidates:d.filter(a=>!c.includes(a))}}(s,c),y=function(a){let b=function(a){let b="";for(let c of a)b+=`${c.relativePath}
240
240
  `;return b}(a);return{ownerNames:p(b,/(?:责任主体|委托人|客户|甲方|乙方|需求方|服务方|执行方|负责人)[::]?([^\\/\n,,。;;]{2,40})/gu,1),locationNames:p(b,/(?:项目地点|实施地点|服务地点|交付地点|项目地址|执行地点)[::]?([^\\/\n,,。;;]{2,50})/gu,1),scheduleValues:p(b,/(\d+\s*(?:天|周|个月|月|年|小时)|(?:周期|期限|交付|完成)[^\\/\n,,。;;]{0,30})/gu,1),qualityTargets:p(b,/(?:质量(?:标准|目标|要求)?[::]?[^\\/\n,,。;;]{2,40}|合格|优良)/gu,0)}}(s),z=function(a){let b=new Set(g);for(let c of["design_specification","schedule_quality_safety","risk_constraints","resource_recommendation","technical_specification","budget_cost","addendum"])a[c].length>0&&b.add(c);return[...b]}(t),A=z.filter(a=>t[a].length>0),B=z.filter(a=>0===t[a].length);return{projectId:v.replace(/[^a-zA-Z0-9\u4e00-\u9fa5_-]/gu,"-").slice(0,80)||"current-project",projectName:v,generatedAt:Date.now(),fingerprint:x.fingerprint,contaminationCandidates:x.contaminationCandidates,source:{totalFiles:c.length,selectedFiles:s.length,selectionReason:m.reason,ambiguous:m.ambiguous},facts:{projectName:v,documentNo:w,scopeDescriptions:t.scope_description.map(a=>a.fileName.replace(/\.(?:pdf|docx?|xlsx?|xls|dwg)$/iu,"")),professionalScopes:[...new Set(t.scope_description.concat(t.design_specification,t.structured_data).map(a=>a.fileName.replace(/\.(?:pdf|docx?|xlsx?|xls|dwg)$/iu,"")))],scheduleRequirement:t.schedule_quality_safety.length?"已识别周期、质量、安全或合规相关资料,生成时应以需求文件、变更说明和技术要求为准。":void 0,qualityRequirement:t.schedule_quality_safety.length?"已识别质量或评价相关资料。":void 0,safetyRequirement:t.schedule_quality_safety.length?"已识别安全或合规相关资料。":void 0,materialBrandRequirement:t.resource_recommendation.length?"已识别资源、材料、设备或品牌相关资料。":void 0,ownerNames:y.ownerNames,locationNames:y.locationNames,scheduleValues:y.scheduleValues,qualityTargets:y.qualityTargets},materialInventory:t,extractedSections:{projectOverview:`绑定材料组:${v}${w?`,文档/任务编号:${w}`:""}。`,scopeSummary:`范围资料:${o(t.scope_description,"未识别到明确范围资料")}。`,designSummary:`设计/方案/说明资料:${o(t.design_specification,"未识别到设计、方案或说明资料")}。`,structuredDataSummary:`结构化数据资料:${o(t.structured_data,"未识别到表格、列表或明细资料")}。`,scheduleQualitySafetySummary:`周期质量安全资料:${o(t.schedule_quality_safety,"未识别到周期、质量或安全专项资料")}。`,constraintsAndRisks:`约束和风险资料:${o(t.risk_constraints,"未识别到重点难点或约束资料")}。`},coverage:{requiredRoles:z,satisfiedRoles:A,missingRoles:B,materialCompletenessRate:z.length?A.length/z.length:1}}}function t(a){return a.replace(/OCR|识别错误|乱码/giu,"资料文字不清").replace(/知识库|提示词|后台|绑定片段|兜底/gu,"项目资料").replace(/PDF|DWG|Excel|XLSX?|DOCX?/giu,"资料文件")}function u(a,b={}){return b.publicSafe?["## 项目资料事实边界",t(a.extractedSections.projectOverview),`明确事实:责任主体 ${a.facts.ownerNames?.join("、")||"资料未明确"};地点 ${a.facts.locationNames?.join("、")||"资料未明确"};周期 ${a.facts.scheduleValues?.join("、")||"资料未明确"};质量 ${a.facts.qualityTargets?.join("、")||"资料未明确"}。`,t(a.extractedSections.scopeSummary),t(a.extractedSections.structuredDataSummary),t(a.extractedSections.designSummary),t(a.extractedSections.scheduleQualitySafetySummary),t(a.extractedSections.constraintsAndRisks),"仅使用资料中明确、可信的事实;资料未明确的工程实体事实不得推导,允许推导的计划配置类数据须明确标注为计划配置值。"].filter(Boolean).join("\n"):["## 后台绑定材料摘要",a.extractedSections.projectOverview,`材料指纹:对象名候选 ${a.fingerprint.projectNames.join("、")||"无"};编号 ${a.fingerprint.documentNos.join("、")||"无"};资料组 ${a.fingerprint.fileGroups.join("、")||"无"};置信度 ${Math.round(100*a.fingerprint.confidence)}%。`,`内容级事实候选:责任主体 ${a.facts.ownerNames?.join("、")||"无"};地点 ${a.facts.locationNames?.join("、")||"无"};周期 ${a.facts.scheduleValues?.join("、")||"无"};质量 ${a.facts.qualityTargets?.join("、")||"无"}。`,a.extractedSections.scopeSummary,a.extractedSections.structuredDataSummary,a.extractedSections.designSummary,a.extractedSections.scheduleQualitySafetySummary,a.extractedSections.constraintsAndRisks,`资料满足率:${Math.round(100*a.coverage.materialCompletenessRate)}%`].join("\n")}},91977:(a,b,c)=>{c.d(b,{I2:()=>g,Lk:()=>e,Uy:()=>f});var d=c(70208);function e(a,b){let c=`${a.filePath}
241
241
  ${a.content}`;return(function(a){let b=a.replace(/要求|计划|目标|标准|内容|信息|事实|依据|参数|范围|要点/gu,"");return[a,b].filter(Boolean)})(b).some(a=>c.includes(a))}function f(a,b){let c=(0,d._9)(a,b).flatMap(a=>a.requiredFacts).map(a=>({id:a,name:a,required:!0,sourceRoleIds:[],extractionHint:""})),e=b?.factFields.map(a=>({id:a.id,name:a.name,required:a.required,sourceRoleIds:a.sourceRoleIds||[],extractionHint:a.extractionHint||""}))||[],f=new Map;for(let a of[...c,...e])f.set(a.id,{...f.get(a.id)||a,...a,required:a.required||f.get(a.id)?.required||!1});return[...f.values()]}function g(a,b){return(!b.sourceRoleIds?.length||!!(a.roleId&&b.sourceRoleIds.includes(a.roleId)))&&e(a,b.name)}},92808:(a,b,c)=>{c.d(b,{NT:()=>e,Ny:()=>f,hW:()=>g,nt:()=>d,rs:()=>i,t0:()=>h});let d=[{id:"report",label:"报告",patterns:[/报告|调研|分析|评估|研究|复盘|总结/iu],output:["报告"]},{id:"plan",label:"实施方案",patterns:[/方案|规划|计划|预案|路径|路线图/iu],output:["实施方案"]},{id:"standard",label:"规范说明",patterns:[/规范|标准|制度|规则|指南|手册/iu],output:["规范说明"]},{id:"proposal",label:"建议方案",patterns:[/建议|提案|需求|响应|说明书/iu],output:["建议方案"]}],e=[{id:"requirement",label:"需求规则资料",patterns:[/需求|要求|规则|条款|约束|响应|澄清|变更/iu],output:["需求约束","规则要求","变更说明"]},{id:"scope",label:"范围资料",patterns:[/范围|内容|任务|目标|边界|对象|工作内容/iu],output:["实施范围","对象范围"]},{id:"structured-data",label:"结构化数据资料",patterns:[/表格|列表|明细|数量|数据|字段|参数|规格|sheet|table|data/iu],output:["结构化数据范围","参数规格范围"]},{id:"quality",label:"质量评价资料",patterns:[/质量|验收|审核|评审|评价|标准|规范|指标/iu],output:["质量要求","评价标准"]},{id:"schedule",label:"时间进度资料",patterns:[/周期|期限|进度|计划|节点|里程碑|时间|日期/iu],output:["周期要求","进度节点要求"]},{id:"safety",label:"安全合规资料",patterns:[/安全|合规|风险|应急|环保|隐私|审计|控制/iu],output:["安全合规要求","风险控制要求"]},{id:"resource",label:"资源配置资料",patterns:[/资源|人员|设备|材料|品牌|采购|供应|配置/iu],output:["资源配置要求"]},{id:"analysis",label:"分析结论",patterns:[/报告|调研|分析|评估|研究|建议|结论/iu],output:["背景依据","分析结论","风险建议"]}],f=[{id:"overview",label:"概况章节",patterns:[/概况|背景|理解|说明|总则|摘要/iu],output:["对象名称","材料范围","实施范围"]},{id:"implementation",label:"实施章节",patterns:[/方法|部署|实施|范围|组织|流程|步骤/iu],output:["实施范围","对象范围","结构化数据范围"]},{id:"controls",label:"控制章节",patterns:[/质量|周期|进度|安全|合规|验收|审核|评价/iu],output:["质量要求","周期要求","安全合规要求"]},{id:"resources",label:"资源章节",patterns:[/资源|人员|设备|材料|品牌|采购|供应|配置/iu],output:["资源配置要求"]},{id:"risk",label:"风险章节",patterns:[/风险|重点|难点|约束|应急|合规/iu],output:["风险控制要求","风险建议"]}],g=[{id:"requirement",label:"需求规则资料",patterns:[/需求|要求|规则|条款|响应|requirement|rule/iu],output:["requirement_document"]},{id:"change",label:"变更澄清资料",patterns:[/补充|澄清|变更|修订|addendum|change/iu],output:["addendum"]},{id:"structured-data",label:"结构化数据资料",patterns:[/表格|列表|明细|数量|数据|字段|参数|规格|sheet|table|data/iu],output:["structured_data"]},{id:"budget",label:"预算费用资料",patterns:[/预算|费用|金额|报价|限价|成本|price|cost|budget/iu],output:["budget_cost"]},{id:"design",label:"设计方案资料",patterns:[/设计|方案|说明|图像|地图|附件|drawing|image|map|design/iu],output:["design_specification"]},{id:"resource",label:"资源配置资料",patterns:[/资源|人员|设备|材料|品牌|采购|供应|配置/iu],output:["resource_recommendation"]},{id:"schedule-quality-safety",label:"进度质量合规资料",patterns:[/质量|周期|进度|安全|合规|验收|审核|评价|环保|应急/iu],output:["schedule_quality_safety"]},{id:"scope",label:"范围任务资料",patterns:[/范围|内容|任务|目标|边界|对象|工作内容/iu],output:["scope_description"]},{id:"technical",label:"技术标准资料",patterns:[/技术|规范|标准|规程|指南|手册|参数|spec|standard/iu],output:["technical_specification"]},{id:"risk",label:"风险约束资料",patterns:[/风险|重点|难点|约束|限制|现场|条件|应急/iu],output:["risk_constraints"]}];function h(a,b){let c=new Set;for(let d of b)for(let b of d.patterns)if(b.lastIndex=0,b.test(a)){for(let a of d.output)c.add(a);break}return[...c]}function i(a,b){for(let c of b)for(let b of c.patterns)if(b.lastIndex=0,b.test(a))return c.output[0]}},95734:(a,b,c)=>{c.d(b,{$y:()=>j,bb:()=>m,od:()=>l,rI:()=>k});var d=c(95393),e=c(96770),f=c(29281),g=c(22157);let h=new Map,i=0;function j(){let a=(0,f.I)().load(),b=a.models.reasoning.active||a.models.action.active||a.models.reader.active,c=[...a.models.reasoning.list,...a.models.action.list,...a.models.reader.list].find(a=>a.name===b);if(!c)return;let d=a.providers[c.provider];if(d)return{model:c,provider:d}}async function k(a,b,c=!1,f={}){f.diagnostics&&(f.diagnostics.llm.calls+=1),i+=1,f.diagnostics&&(f.diagnostics.llm.maxActive=Math.max(f.diagnostics.llm.maxActive,i));try{let i,k=j();if(!k)return;let{model:l,provider:m}=k,n=(0,g.c6)({provider:l.provider,model:l.name,baseUrl:m.baseUrl,directEndpoint:m.directEndpoint,protocol:m.protocol,apiKeyHash:m.apiKey?(0,g.c6)(m.apiKey):""}),o=h.get(n);o||(o=(0,d.createProvider)(function(a,b){let c=(0,e.resolveProtocol)(a,b);return"anthropic"===c?"anthropic":"google"===c?"google":"ollama"===c?"ollama":"openrouter"===c?"openrouter":"openai"}(l.provider,m),{baseUrl:m.baseUrl,apiKey:m.apiKey,modelName:l.name,directEndpoint:m.directEndpoint}),h.set(n,o));let p=async()=>{let d,e,g=Math.max(3e4,Number(f.timeoutMs??process.env.DOCUMENT_LLM_CALL_TIMEOUT_MS??3e5)),h=new Promise((a,b)=>{d=setTimeout(()=>b(Error("LLM 调用超时")),g)}),i=[o.chat([{role:"system",content:c?`${a}
242
242
  只返回 JSON,不要返回 markdown。`:a},{role:"user",content:b}],{temperature:f.temperature??.3*!c,maxTokens:f.maxTokens,signal:f.signal}),h];return f.signal&&i.push(new Promise((a,b)=>{if(f.signal?.aborted)return void b(Error("用户中止"));e=()=>b(Error("用户中止")),f.signal?.addEventListener("abort",e,{once:!0})})),(await Promise.race(i).finally(()=>{d&&clearTimeout(d),e&&f.signal?.removeEventListener("abort",e)})).content.trim()};for(let a=0;a<=1;a+=1){if(f.signal?.aborted)throw Error("用户中止");try{return await p()}catch(b){if(i=b,f.signal?.aborted)throw Error("用户中止",{cause:b});if(!function(a){let b=a instanceof Error?`${a.name} ${a.message}`:String(a);return/connection error|econnrefused|econnreset|fetch failed|network|socket|eai_again|enotfound|etimedout|429|502|503|504|rate ?limit|too many requests|overloaded|服务繁忙|连接失败/iu.test(b)}(b)||a>=1)break;f.diagnostics&&(f.diagnostics.llm.retries+=1),await new Promise(a=>{setTimeout(a,1200)})}}f.diagnostics&&(f.diagnostics.llm.failures+=1,f.diagnostics.llm.lastError=i instanceof Error?i.message:String(i));return}finally{i=Math.max(0,i-1)}}async function l(a,b,c){let d,e=new AbortController;if(c?.aborted)throw Error("用户中止");let f=()=>e.abort();c?.addEventListener("abort",f,{once:!0});let g=new Promise(a=>{d=setTimeout(()=>{e.abort(),a(null)},b)}),h=[Promise.resolve().then(()=>a(e.signal)),g];c&&h.push(new Promise((a,b)=>{e.signal.addEventListener("abort",()=>{c.aborted&&b(Error("用户中止"))},{once:!0})}));try{let a=await Promise.race(h);if(c?.aborted)throw Error("用户中止");return a}finally{d&&clearTimeout(d),c?.removeEventListener("abort",f)}}async function m(a,b,c={}){let d=await k(a,b,!0,{maxTokens:c.maxTokens,temperature:c.temperature,signal:c.signal,diagnostics:c.diagnostics,timeoutMs:c.timeoutMs});if(d)try{return JSON.parse(function(a){let b=a.trim(),c=b.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/iu)?.[1]?.trim();if(c)return c;let d=b.indexOf("{"),e=b.lastIndexOf("}"),f=b.indexOf("["),g=b.lastIndexOf("]"),h=d>=0&&e>d?b.slice(d,e+1):"",i=f>=0&&g>f?b.slice(f,g+1):"";return h&&(!i||d<=f)?h:i||b}(d))}catch{return}}}};