@customize-agent/server 4.1.24 → 4.1.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/2026.js +21 -11
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/asset-library.html +1 -1
- package/.next/server/pages/document-roles.html +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/guide.html +1 -1
- package/.next/server/pages/index.html +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/overview.html +1 -1
- package/.next/server/pages/prompt.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages-manifest.json +25 -25
- package/package.json +1 -1
- /package/.next/static/{5Uc1YDXxXOAOWxHcu0W9L → nWaQ2KlBD30U19su4NMxB}/_buildManifest.js +0 -0
- /package/.next/static/{5Uc1YDXxXOAOWxHcu0W9L → nWaQ2KlBD30U19su4NMxB}/_ssgManifest.js +0 -0
|
@@ -12,9 +12,9 @@ ${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?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:()=>n,Ai:()=>q,BV:()=>t,Ff:()=>l,Fv:()=>B,K1:()=>z,M$:()=>W,N1:()=>Q,NS:()=>C,S2:()=>R,ST:()=>M,Ty:()=>u,bM:()=>T,f8:()=>x,gN:()=>v,i0:()=>O,iC:()=>s,ji:()=>P,k0:()=>A,kQ:()=>V,mR:()=>U,qK:()=>H,qm:()=>K,vY:()=>N,xX:()=>L,yd:()=>S,yw:()=>G});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){let b={blocking:0,important:0,minor:0};for(let c of a)b[function(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"}(c)]+=1;return b}function m(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 n(a,b=[]){let c=[],d=m(a,"全文");for(let a of(d&&c.push(d),b)){let b=m(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=m(e[1],`小节“${d}”`);f&&c.push(f)}}return c}function o(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 p(a){let b=o(a);return"blocker"===b.severity&&(!!("error"===b.level&&"blocker"===b.severity&&/placeholder|source|style|format|structure/u.test(String(b.category||""))||/提示词要求|疑似提示词指令标题|适用性自相矛盾|不得出现/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))&&(/跨章一致性|专业评分不足|专业缺口|泛化套话|缺少关键线路|缺少材料验收|缺少风险识别|缺少进场/u.test(a.message)?"error"===a.level&&!/证据使用覆盖率偏低|章节逻辑依赖不足|文档交付评分报告/u.test(a.message):!(!e.hc.test(a.message)||/章节审查|最终质量审查|正文篇幅明显低于目标|正文存在空泛占位表达|结构化事实读取不足|正文可能未显式覆盖|仅包含文件类型和占位符|不在本次招标范围内/u.test(a.message)))))))}function q(a,b,c){let d=[{key:"no_errors",label:"无阻断级校验错误",passed:!a.some(a=>"error"===a.level&&p(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)&&p(a))}],f=a.map(o).filter(a=>"error"===a.level&&p(a));return{passed:0===f.length,blockingIssues:f,checklist:d}}function r(a){let b=[];for(let c of a.split(e.AQ))e.w7.test(c)&&c.split(e.A5).some(a=>e.N3.test(a))&&b.push(c);return b}function s(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 t(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:"warning",message:`正文包含后台或资料处理话术:${[...new Set(d)].join("、")}`,suggestion:"建议改为正式文档语言,例如“资料文字不清”“资料口径不一致”“项目资料”,不得暴露后台处理过程。"}),b}function u(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 v(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 w(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 x(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=>w(a[1]||"")).filter(Boolean):[]}(a),c=[...a.matchAll(/^#{2,4}\s+(\d+\.\d+\s+.+)$/gmu)].map(a=>w(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:"warning",message:`目录与正文不一致,目录小节未在正文中找到:${[...new Set(g)].join("、")}`,suggestion:"建议以最终清洗后的正文二级标题为准重新生成目录。"}),h.length>0&&i.push({level:"warning",message:`目录与正文不一致,正文小节未进入目录:${[...new Set(h)].join("、")}`,suggestion:"建议重新生成目录,确保只收录正文二级小节,不收录三级小节。"}),i}function y(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 z(a){let b=[...a.matchAll(/^#{2,6}\s+(.+)$/gmu)].map(a=>(0,h.GQ)(a[1]||"")).filter(y);return b.length>0?[{level:"error",message:`正文存在疑似提示词指令标题:${[...new Set(b)].slice(0,8).join("、")}`,suggestion:"请删除或改写为正式施工组织设计小节标题,目录也不得收录该类标题。"}]:[]}function A(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=>w(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 B(a){let b=[],c=[...a.replace(/^##\s+目录[\s\S]*?(?=^##\s+第[一二三四五六七八九十百千万\d]+章\s+)/mu,"").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&&w(g[0])===w(i)&&b.push({level:"error",message:`章节只有一个且与章名同名的小节:${d[c][1]}`,suggestion:"应拆分为多个业务小节,不能用章标题重复作为唯一二级小节。"})}return b}function C(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:"请修复表格规范化逻辑,禁止把数据行拆成多个碎表。"}),r(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 D(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 E(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:w(i),level:e,body:a.slice(f,h)}}).filter(a=>a.title&&(3===a.level||4===a.level))}function F(a,b,c,d,f){let g=D(d),h=e.w7.test(d)&&d.split(e.A5).some(a=>e.N3.test(a)),i=D(d.split("\n").filter(a=>!e.w7.test(a)&&!e.N3.test(a)).join("\n").replace(/^#{1,6}\s+.+$/gmu,""));if(/\[WRITER_MISSING_SECTION\]|Writer 未完成/u.test(d))return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 小节内容补写未完成:${b}`};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 G(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=w(a),g=function(a,b){let c=E(a).filter(a=>(function(a,b){let c=w(a),d=w(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:F("",b,a.level,a.body,!0),textLength:D(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=F(e.title,a,g.level,g.body,!0);i&&c.push(i),d.add(h)}for(let a of E(b)){let b=`${e.title}|${a.title}|actual`,f=`${e.title}|${a.title}|planned`;if(d.has(b)||d.has(f))continue;let g=F(e.title,a.title,a.level,a.body,!1);g&&"empty"===g.reason&&c.push(g),d.add(b)}}return c}function H(a,b){return G(a,b).filter(a=>"empty"===a.reason||"missing_planned_section"===a.reason).map(a=>({level:"missing_planned_section"===a.reason?"warning":"error",message:a.message,suggestion:"missing_planned_section"===a.reason?"建议补充该规划小节或同步更新模板小节规划。":"必须补充与该小节相关的材料事实和必要内容,达到正文完整度要求。"}))}function I(a){return`${a.fieldName||a.key} ${(0,k.lG)(a.value)}`.replace(/\s+/gu," ").trim()}function J(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 K(a,b){let c=[],d=b.schedule.map(I).find(a=>/\d+\s*(?:日历天|天|个月|月)|计划工期|合同工期/u.test(a)),e=b.quality.map(I).find(a=>/质量|合格|优良/u.test(a));if(d){let b=J(d)[0],e=J(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 L(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 M(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 N(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(I).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:"warning",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 O(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 P(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 Q(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 R(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:"warning",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 S(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:"warning",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 T(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 U(a,b){let c=`${b.name} ${b.category} ${b.outputTitle} ${b.description}`,f=[];for(let a of(0,d.V)().autoSpecGates)(function(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})(c,a.templateMatchers)&&f.push(a);if(0===f.length)return[];let g=[],h=r(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 V(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=r(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 W(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?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:()=>n,Ai:()=>q,BV:()=>t,Ff:()=>l,Fv:()=>B,K1:()=>z,M$:()=>W,N1:()=>Q,NS:()=>C,S2:()=>R,ST:()=>M,Ty:()=>u,bM:()=>T,f8:()=>x,gN:()=>v,i0:()=>O,iC:()=>s,ji:()=>P,k0:()=>A,kQ:()=>V,mR:()=>U,qK:()=>H,qm:()=>K,vY:()=>N,xX:()=>L,yd:()=>S,yw:()=>G});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){let b={blocking:0,important:0,minor:0};for(let c of a)b[function(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"}(c)]+=1;return b}function m(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 n(a,b=[]){let c=[],d=m(a,"全文");for(let a of(d&&c.push(d),b)){let b=m(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=m(e[1],`小节“${d}”`);f&&c.push(f)}}return c}function o(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 p(a){let b=o(a);return"blocker"===b.severity&&(!!("error"===b.level&&"blocker"===b.severity&&/placeholder|source|style|format|structure/u.test(String(b.category||""))||/提示词要求|疑似提示词指令标题|适用性自相矛盾|不得出现/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))&&(/跨章一致性|专业评分不足|专业缺口|泛化套话|缺少关键线路|缺少材料验收|缺少风险识别|缺少进场/u.test(a.message)?"error"===a.level&&!/证据使用覆盖率偏低|章节逻辑依赖不足|文档交付评分报告/u.test(a.message):!(!e.hc.test(a.message)||/章节审查|最终质量审查|正文篇幅明显低于目标|正文存在空泛占位表达|结构化事实读取不足|正文可能未显式覆盖|仅包含文件类型和占位符|不在本次招标范围内/u.test(a.message)))))))}function q(a,b,c){let d=[{key:"no_errors",label:"无阻断级校验错误",passed:!a.some(a=>"error"===a.level&&p(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)&&p(a))}],f=a.map(o).filter(a=>"error"===a.level&&p(a));return{passed:0===f.length,blockingIssues:f,checklist:d}}function r(a){let b=[];for(let c of a.split(e.AQ))e.w7.test(c)&&c.split(e.A5).some(a=>e.N3.test(a))&&b.push(c);return b}function s(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 t(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:"warning",message:`正文包含后台或资料处理话术:${[...new Set(d)].join("、")}`,suggestion:"建议改为正式文档语言,例如“资料文字不清”“资料口径不一致”“项目资料”,不得暴露后台处理过程。"}),b}function u(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 v(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 w(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 x(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=>w(a[1]||"")).filter(Boolean):[]}(a),c=[...a.matchAll(/^#{2,4}\s+(\d+\.\d+\s+.+)$/gmu)].map(a=>w(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:"warning",message:`目录与正文不一致,目录小节未在正文中找到:${[...new Set(g)].join("、")}`,suggestion:"建议以最终清洗后的正文二级标题为准重新生成目录。"}),h.length>0&&i.push({level:"warning",message:`目录与正文不一致,正文小节未进入目录:${[...new Set(h)].join("、")}`,suggestion:"建议重新生成目录,确保只收录正文二级小节,不收录三级小节。"}),i}function y(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 z(a){let b=[...a.matchAll(/^#{2,6}\s+(.+)$/gmu)].map(a=>(0,h.GQ)(a[1]||"")).filter(y);return b.length>0?[{level:"error",message:`正文存在疑似提示词指令标题:${[...new Set(b)].slice(0,8).join("、")}`,suggestion:"请删除或改写为正式施工组织设计小节标题,目录也不得收录该类标题。"}]:[]}function A(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=>w(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 B(a){let b=[],c=[...a.replace(/^##\s+目录[\s\S]*?(?=^##\s+第[一二三四五六七八九十百千万\d]+章\s+)/mu,"").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&&w(g[0])===w(i)&&b.push({level:"error",message:`章节只有一个且与章名同名的小节:${d[c][1]}`,suggestion:"应拆分为多个业务小节,不能用章标题重复作为唯一二级小节。"})}return b}function C(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:"请修复表格规范化逻辑,禁止把数据行拆成多个碎表。"}),r(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.length!==h)&&b.push({level:"error",message:`表格列数不一致:${f.join("、")}`,suggestion:"请统一表头和数据行列数;不应通过自动填充兜底词修补表格。"})}return b}function D(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 E(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:w(i),level:e,body:a.slice(f,h)}}).filter(a=>a.title&&(3===a.level||4===a.level))}function F(a,b,c,d,f){let g=D(d),h=e.w7.test(d)&&d.split(e.A5).some(a=>e.N3.test(a)),i=D(d.split("\n").filter(a=>!e.w7.test(a)&&!e.N3.test(a)).join("\n").replace(/^#{1,6}\s+.+$/gmu,""));if(/\[WRITER_MISSING_SECTION\]|Writer 未完成/u.test(d))return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 小节内容补写未完成:${b}`};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 G(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=w(a),g=function(a,b){let c=E(a).filter(a=>(function(a,b){let c=w(a),d=w(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:F("",b,a.level,a.body,!0),textLength:D(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=F(e.title,a,g.level,g.body,!0);i&&c.push(i),d.add(h)}for(let a of E(b)){let b=`${e.title}|${a.title}|actual`,f=`${e.title}|${a.title}|planned`;if(d.has(b)||d.has(f))continue;let g=F(e.title,a.title,a.level,a.body,!1);g&&"empty"===g.reason&&c.push(g),d.add(b)}}return c}function H(a,b){return G(a,b).filter(a=>"empty"===a.reason||"missing_planned_section"===a.reason).map(a=>({level:"missing_planned_section"===a.reason?"warning":"error",message:a.message,suggestion:"missing_planned_section"===a.reason?"建议补充该规划小节或同步更新模板小节规划。":"必须补充与该小节相关的材料事实和必要内容,达到正文完整度要求。"}))}function I(a){return`${a.fieldName||a.key} ${(0,k.lG)(a.value)}`.replace(/\s+/gu," ").trim()}function J(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 K(a,b){let c=[],d=b.schedule.map(I).find(a=>/\d+\s*(?:日历天|天|个月|月)|计划工期|合同工期/u.test(a)),e=b.quality.map(I).find(a=>/质量|合格|优良/u.test(a));if(d){let b=J(d)[0],e=J(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 L(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 M(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 N(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(I).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:"warning",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 O(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 P(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 Q(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 R(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:"warning",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 S(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:"warning",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 T(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 U(a,b){let c=`${b.name} ${b.category} ${b.outputTitle} ${b.description}`,f=[];for(let a of(0,d.V)().autoSpecGates)(function(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})(c,a.templateMatchers)&&f.push(a);if(0===f.length)return[];let g=[],h=r(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 V(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=r(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 W(a,b){let c=function(a){let b="";for(let c of(0,j.dU)(a))c.content&&(b+=`${c.content}
|
|
16
16
|
|
|
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}},42026:(a,b,c)=>{c.d(b,{h0x:()=>d.h0,bVF:()=>d.bV,OXS:()=>dq,QJx:()=>d.QJ,jGg:()=>d.jG,R1O:()=>dr,Bhi:()=>d.Bh,xmB:()=>d.xm});var d=c(52511),e=c(76760),f=c(19898),g=c(44533),h=c(29281),i=c(25840),j=c(6444),k=c(85441);let l={id:"default_general_document",name:"通用文档",factFields:[{id:"document_identity",name:"对象名称",aliases:["项目名称","工程名称","文档名称","任务名称","招标项目名称","建设项目名称"],category:"identity",cardinality:"single",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.75,minForValidation:.85,allowPathOnly:!1},conflictPolicy:"strict"},{id:"schedule_requirement",name:"周期要求",aliases:["计划工期","工期","周期要求","进度节点要求","开工日期","竣工日期"],category:"schedule",cardinality:"single",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.7,minForValidation:.8,allowPathOnly:!1},conflictPolicy:"strict"},{id:"quality_requirement",name:"质量要求",aliases:["质量要求","质量标准","验收要求","评价标准"],category:"quality",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.65,minForValidation:.75,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"safety_requirement",name:"安全合规要求",aliases:["安全要求","安全合规要求","风险控制要求","合规要求"],category:"safety",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.65,minForValidation:.75,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"technical_parameter",name:"技术参数",aliases:["技术参数","参数规格范围","规格","型号","尺寸","标准编号","材料设备"],category:"technical",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.7,minForValidation:.8,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"resource_plan",name:"资源配置",aliases:["劳动力","机械","检测设备","应急物资","资源配置","人员配置"],category:"resource",cardinality:"multiple",derivationPolicy:"plan_inferable",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.45,minForValidation:.55,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"commercial_data",name:"商务数据",aliases:["报价","单价","合价","综合单价","预留金","税率","金额","利润"],category:"commercial",cardinality:"multiple",derivationPolicy:"forbidden",usagePolicy:"do_not_use",confidencePolicy:{minForGeneration:1,minForValidation:1,allowPathOnly:!1},conflictPolicy:"ignore"},{id:"rule_requirement",name:"规则要求",aliases:["规则要求","变更说明","实施范围","对象范围","结构化数据范围"],category:"compliance",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.6,minForValidation:.7,allowPathOnly:!1},conflictPolicy:"allow_multiple"}],forbiddenValuePatterns:[/投标报价|报价明细|单价|合价|综合单价|预留金|暂列金额|税率|增值税|利润|结算/u],diagnosticValuePatterns:[/OCR|识别错误|乱码|无法确认|疑似|不确定|绑定片段|兜底|知识库|提示词|后台|文件路径|PDF|DWG|Excel/u],lowConfidenceValuePatterns:[/无法确认|疑似|不确定|需复核|文字模糊|语义断裂|识别错误|乱码/u]},m={...l,id:"construction_organization_design",name:"施工组织设计"};function n(a,b){return a.factFields.find(a=>a.name===b||a.aliases.some(a=>b.includes(a)||a.includes(b)))}function o(a,b){return a.forbiddenValuePatterns.some(a=>a.test(b))}function p(a,b){return a.diagnosticValuePatterns.some(a=>a.test(b))}function q(a,b){return a.lowConfidenceValuePatterns.some(a=>a.test(b))}var r=c(56942),s=c(70933),t=c(70208),u=c(91977),v=c(58965);function w(a,b){return b?a.replace(/^!\[[^\]]*(?:图纸|drawing|cad|地图|平面|剖面|立面)[^\]]*\]\([^)]*\)\s*$/gimu,"").replace(/\n{3,}/gu,"\n\n"):a}let x=/.*(?:知识库证据|知识库已确认事实|资料类型|提示词角色|后台自动规范|规范包|事实字段|资料未提供|未检索到|待确认事项|证据来源|来源清单|校验结果|修复任务包|修复类型|修复对象|输出要求).*(?:\n|$)/gu,y=/^\s*(?:#{1,6}\s*)?(?:PDF\s*第\s*\d+\s*页|rule\b|文件[::]|片段[::]|来源[::]).*$/gimu,z=/^\s*(?:[│┃┆┊┌┐└┘├┤┬┴┼─━╭╮╰╯]|[↓↑→←⇒⇨➡])+\s*$/gmu,A=/^#{2,6}\s+(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用)|^#{2,6}\s+(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:如|若|如果)(?:涉及|不涉及|适用|不适用)|^#{2,6}\s+.*(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成)|^#{2,6}\s+.*(?:按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|说明要求|注意事项)\s*$/gmu,B=/^(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用).*|(?:如|若|如果)(?:涉及|不涉及|适用|不适用).*|.*(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成).*|.*(?:按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|说明要求|注意事项))\s*$/u;function C(a){let b=a.replace(/^#{1,6}\s+/u,"").replace(/^\s*\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").trim(),c=(0,t.GQ)(b);return B.test(b)||B.test(c)}function D(a){return a.replace(/PDF\s*第\s*\d+\s*页/giu,"相关资料").replace(/第\s*\d+\s*页\s*(?:\/|共)\s*\d+\s*页/gu,"").replace(/第\s*\d+\s*(?:[-—至到~~]\s*\d+)?\s*页/gu,"相关资料").replace(/(装饰工程|土建工程|加固工程|给排水工程|电气工程|智能化工程|消防工程|弱电智能化工程|室外道排工程|建筑结构加固工程)\s*(?:(?:施工)?图纸|资料|文件)?\s*[((]?\s*(?:(?:共|多达|约|合计)\s*)?\d+\s*页\s*[))]?/gu,"$1施工图纸").replace(/\d+\s*页\s*(装饰|土建|加固|给排水|电气|智能化|消防|弱电智能化|室外道排|建筑结构加固)\s*(?:专业)?\s*(?:(?:施工)?图纸)?/gu,"$1专业图纸").replace(/(装饰|土建|加固|给排水|电气|智能化|消防|弱电智能化|室外道排|建筑结构加固)\s*(?:专业)?\s*(?:[((]\s*)?\d+\s*页\s*(?:(?:施工)?图纸)?\s*[))]?/gu,"$1专业图纸").replace(/([\u4e00-\u9fa5A-Za-z0-9、及与和]{2,24})\s*(?:共|多达|约|合计)\s*\d+\s*页/gu,"$1相关专业图纸").replace(/([\u4e00-\u9fa5A-Za-z0-9()()、·-]{2,24}工程)\s*(?:图纸|资料|文件)?\s*[((]?\s*(?:(?:共|多达|约|合计)\s*)?\d+\s*页\s*[))]?/gu,"$1施工图纸").replace(/([\u4e00-\u9fa5A-Za-z0-9()()、·-]{2,24})(?<!施工)\s*(?:施工)?图纸\s*[((]?\s*(?:(?:共|多达|约|合计)\s*)?\d+\s*页\s*[))]?/gu,"$1施工图纸").replace(/(给排水|电气|智能化|消防|暖通|人防)\s*[((]\s*\d+\s*页\s*[))]/gu,"$1专业图纸").replace(/(?:依据|按照|结合)?\s*图纸\s*[((]\s*\d+\s*页\s*[))]/gu,"依据相关专业图纸").replace(/(?:依据|按照|结合)?\s*清单\s*[((]?\s*\d+\s*页\s*[))]?/gu,"依据工程量清单").replace(/资料\s*[((]?\s*\d+\s*页\s*[))]?/gu,"项目资料").replace(/[((]?[\u4e00-\u9fa5A-Za-z0-9、及与和]*(?:图纸|清单|资料|文件|工程)?[\u4e00-\u9fa5A-Za-z0-9、及与和]*(?:(?:共|多达|约|合计)\s*)?\d+\s*页[\u4e00-\u9fa5A-Za-z0-9、及与和]*(?:图纸|清单|资料|文件)?[))]?/gu,a=>/图纸|工程|装饰|土建|加固|给排水|电气|智能化|消防/u.test(a)?"相关专业图纸":/清单/u.test(a)?"工程量清单":"相关资料").replace(/(?:位于|详见|见|参见|依据|按照|结合)?\s*相关资料(?:\s*相关资料)+/gu,"相关资料")}let E=String.raw`(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)`;function F(a){return/^\s*\|/u.test(a)||/^\s*\|?\s*:?-{3,}:?/u.test(a)?a:a.replace(/([。;;])\s*(?=(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)\S)/gu,"$1\n").replace(/([^\n])\s+(?=(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)\*\*)/gu,"$1\n")}function G(a){return a.split(/\r?\n/u).map(F).join("\n").replace(/\n{3,}/gu,"\n\n")}function H(a){return/^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a)}function I(a){let b=a.trim();return/^\|.*\|$/u.test(b)&&b.split("|").length>=3}function J(a){return`| ${Array.from({length:Math.max(2,a)},()=>"---").join(" | ")} |`}function K(a){let b=a.split(/\r?\n/u),c=[],d=0;for(let a=0;a<b.length;a+=1){let e=b[a];if(!I(e)||H(e)){H(e)||(d=0),c.push(e);continue}let f=b[a+1]||"",g=d||e.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).length;if(c.push(function(a,b){let c=a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>a.trim());for(;c.length<b;)c.push("");return`| ${c.slice(0,b).join(" | ")} |`}(e,g)),H(f)){c.push(J(g)),d=g,a+=1;continue}!d&&I(f)&&function(a){let b=a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>a.replace(/\*\*/gu,"").trim());return!(b.length<2)&&b.filter(a=>/^(?:序号|信息项|内容|控制项目|控制内容|执行要求|责任主体|检查(?:与验收)?|验收标准|备注|名称|规格(?:型号)?|单位|数量|阶段|措施|风险|应急物资名称|资源类别|投入计划|管理要求)$/u.test(a)).length>=Math.min(2,b.length)}(e)&&(c.push(J(g)),d=g)}return c.join("\n").replace(/\n{3,}/gu,"\n\n")}RegExp(String.raw`\S.+(?:\s|[。;;])${E}\S.+(?:\s|[。;;])${E}\S`,"u");let L=/(?:项目部|本项目|本工程)?(?:根据|依据|结合|按照|以)?(?:本项目|项目|[^。;;\n]{0,30}?)?(?:招标文件|补疑澄清文件|补遗澄清文件|补疑补遗|答疑(?:回复)?文件|答疑修正口径|补充答疑修正口径|澄清文件|工程量清单|设计图纸|施工图纸|图纸资料|设计修改通知单)(?:[、,,及和与\s]*(?:招标文件|补疑澄清文件|补遗澄清文件|补疑补遗|答疑(?:回复)?文件|答疑修正口径|补充答疑修正口径|澄清文件|工程量清单|设计图纸|施工图纸|图纸资料|设计修改通知单|现行规范|规范)){1,}(?:[^。;;\n]{0,80})?[,,]/u;function M(a){return a.split(/\r?\n/u).map(a=>/^\s*\|/u.test(a.trim())?a:a.replace(L,"").replace(/(?:施工图设计说明|工程量清单项目特征|补充答疑修正口径|答疑修正口径)(?:[、,,及和与\s]*(?:施工图设计说明|工程量清单项目特征|补充答疑修正口径|答疑修正口径)){1,}/gu,"项目技术文件").replace(/(?:根据|依据|以)(?:[^。;;\n]{0,30})?(?:招标文件|补疑澄清文件|补遗澄清文件|补疑补遗|答疑(?:回复)?文件|答疑修正口径|补充答疑修正口径|澄清文件|工程量清单|设计图纸|施工图纸)(?:[^。;;\n]{0,40})(?:编制|确定|要求|为编制基础)[。;;]?/gu,"").replace(/\s{2,}/gu," ").trimEnd()).filter(a=>!/^(?:本节|本小节|本章)?(?:内容|措施)?(?:根据|依据)(?:招标文件|补疑澄清文件|补遗澄清文件|答疑(?:回复)?文件|澄清文件|工程量清单|设计图纸|施工图纸)[^。;;\n]*[。;;]?$/u.test(a.trim())).join("\n").replace(/\n{3,}/gu,"\n\n")}function N(a){return K(G(D(M(function(a){let b=a.trim(),c=/^```(?:markdown|md)?\s*\n([\s\S]*?)\n```\s*$/iu.exec(b);return c?c[1].trim():a}(a)).replace(/\b(m|㎡)\s*2\b/giu,"平方米").replace(/\bm\s*[²2]\b/giu,"平方米").replace(/\b(m|㎥)\s*3\b/giu,"立方米").replace(/\bm\s*[³3]\b/giu,"立方米").replace(/\bmm2\b/giu,"平方毫米").replace(/\bcm2\b/giu,"平方厘米").replace(/\bkm2\b/giu,"平方千米").replace(/\s*×\s*/gu,"\xd7").replace(/\s*≤\s*/gu,"≤").replace(/\s*≥\s*/gu,"≥").replace(/\s*±\s*/gu,"\xb1")))).split(/\r?\n/u).map(a=>/^\s*\|/u.test(a)?a.replace(/\s*不适用\s*(?=\|)/gu," "):a).join("\n").replace(/承包人案/gu,"方案").replace(x,"").replace(y,"").replace(z,"").replace(A,"").replace(v.tK,"").replace(/^#\s+/gmu,"").replace(v.VX,"").split(/\r?\n/u).filter((a,b,c)=>{let d=b>0?(0,t.GQ)((c[b-1]||"").trim().replace(/^#{1,6}\s+/u,"")):"",e=(0,t.GQ)(a.trim().replace(/^#{1,6}\s+/u,""));if(d&&C(d)&&e.length>0&&e.length<=12&&!/^#{1,6}\s/u.test(a.trim()))return!1;let f=a.trim();if(!f)return!0;if(/该小节围绕.+进行补充说明/u.test(f)||/仅作为内部事实提取依据|正式正文不得引用文件名|后台事实|内部事实/u.test(f))return!1;if(/^\s*\|/u.test(f)||/^\s*\|?\s*:?-{3,}:?/u.test(f))return!0;let g=(0,t.GQ)(f.replace(/^#{1,6}\s+/u,""));return!(/^(?:雨季|冬季|高温|台风|大风等特殊气候|雨季、冬季、高温、台风、大风等特殊气候)$/u.test(g)||g.length<=1||C(g))&&!(/[,、;:和与在为对将]$/u.test(g)||/(通过|包括|如下|主要包括)$/u.test(g))}).join("\n").replace(/\n{3,}/gu,"\n\n").trim()}let O="以下规则仅用于保障导出格式正确和事实安全,不得覆盖用户在提示词中已明确的要求。\n不得把”知识库、检索、资料类型、提示词角色、规范包、事实字段、缺失项、校验结果、资料未提供、未检索到”等后台流程话术写入正文。\n严禁使用“根据/依据招标文件、补疑澄清文件、工程量清单及设计图纸”等资料来源罗列开头;正文必须直接写项目事实、施工内容、控制措施、验收节点。\n【导出格式】章标题用 ## ,节标题用 ### 加数字编号(如 1.1),小节标题用 #### 加数字编号(如 1.1.1)。禁止用数字编号或粗体代替 ###/#### 标题。\nMarkdown 表格格式硬约束:凡是输出 Markdown 表格,必须使用标准 GFM 表格格式。\n表格必须包含表头行、分隔线和数据行;表头下一行必须是分隔线,例如 |---|---|。\n禁止只输出连续的“| 字段 | 值 |”裸表格行;两列键值信息表默认使用表头 | 信息项 | 内容 |。\n表头、分隔线和数据行必须连续,中间不得插入正文、说明、空行或补充段落。\n正文表格不得展示后台溯源列或系统过程列,如“资料来源/说明”“资料来源/证明”“知识库来源”等。\n项目名称、项目编号、招标人/业主/建设单位、建设地点、建设规模、计划工期、质量标准、合同估算价等项目基础信息,只能在项目基本信息表中集中输出一次;后续章节如需引用,应写入正文或专业表格的业务字段,不得重复生成项目基础信息键值表。\n【段落格式】段落之间必须空行(双换行)分隔,不得用单换行连续写大段文字。列表项逐行独占。步骤描述之间加空行。\n正文事实必须来自绑定材料;信息不足时保持审慎,不得编造精确数量。",P="只生成当前小节正文,不生成其他二级小节,不重复章节一级标题。\n优先使用当前模板、用户要求、绑定提示词和绑定材料中的事实;缺少依据时不得编造具体数值、名称、时间、规格或责任。\n小节应有实质正文;除非用户或模板明确要求纯表格,否则表格只能作为辅助表达,不能整节只有表格。\n不得用通用兜底段落、空泛管理话术或后台缺料说明冒充正文;信息不足时只写已有事实、适用边界和待复核口径。";function Q(a){return(0,t.GQ)(a.replace(/^#+\s*/u,"")).replace(/^(?:第)?[一二三四五六七八九十百千万\d]+章\s*/u,"").trim().replace(/\s+/gu,"")}function R(a,b){let c=Q(a),d=Q(b);return!!(c&&d&&c===d)}function S(a){return[...new Set([...a.matchAll(/^###\s+(.+)$/gmu)].map(a=>(0,t.GQ)(a[1]||"")).filter(a=>a.length>=2&&a.length<=80).filter(a=>!C(a)).filter(a=>!/^\d+(?:\.\d+){2,}\s+/u.test(a)))]}function T(a){let b=a.split(/\r?\n/u),c="",d=0;return b.map(a=>{let b=/^\*\*([^*]{2,40}表)\*\*\s*$/u.exec(a.trim());if(b&&c)return d+=1,`#### ${c}.${d} ${(0,t.GQ)(b[1]||"")}`;let e=/^###\s+(\d+\.\d+)\s+.+$/u.exec(a.trim());if(e)return c=e[1],d=0,a;if(/^##\s+/u.test(a.trim()))return c="",d=0,a;let f=/^(#{4,5})\s+(.+)$/u.exec(a.trim());if(f){if(!c)return"#####"===f[1]?a.replace(/^\s*#####/u,"####"):a;let b=(f[2]||"").trim(),e=(0,t.GQ)(b.replace(/^\d+\.\d+\.\d+\s+/u,""));return e?(d+=1,`#### ${c}.${d} ${e}`):a}return a}).join("\n").replace(/\n{3,}/gu,"\n\n").trim()}function U(a){let b=a.replace(/\*+/gu,"").trim();if(C(b))return"";let c=(0,t.GQ)(b).replace(/^[-—–]\s*/u,"").trim();return C(c)||/^(?:雨季|冬季|高温|台风|大风等特殊气候)$/u.test(c)?"":c}function V(a=[]){return[...new Set(a.map(U).filter(a=>a.length>=2))]}function W(a){return["## 目录","",...a.flatMap((a,b)=>{let c=V(a.sections||[]);return[(0,t.tb)(b,a.title),"",...c.flatMap((a,c)=>[` ${function(a,b,c){let d=(0,t.GQ)(c);return!function(a){let b=/^\s*(\d+)\.(\d+)[..、]?\s+(.+)$/u.exec(a);return!!b&&(0,t.GQ)(b[3]||"").trim()===(0,t.GQ)(a).trim()}(c)?`${a+1}.${b+1} ${d}`:d}(b,c,a)}`,""])]})].join("\n")}function X(a){return a.replace(/<div class="document-cover">[\s\S]*?<\/div>\s*(?:<div class="page-break"><\/div>\s*)?/giu,"").replace(/^#\s+.+\n{1,2}/u,"")}function Y(a){return a.replace(/^##\s+目录\s*$[\s\S]*?(?=\n<div class="page-break"><\/div>|\n##\s+第[一二三四五六七八九十百千万\d]+章|\n##\s+)/gmu,"").replace(/^<div class="page-break"><\/div>\s*(?=##\s+第[一二三四五六七八九十百千万\d]+章)/gmu,"")}function Z(a){let b=!1;return a.replace(/^##\s+目录\s*$[\s\S]*?(?=\n<div class="page-break"><\/div>|\n##\s+)/gmu,a=>b?"":(b=!0,a)).replace(/\n{3,}/gu,"\n\n").trim()}function $(a,b){let c=Z(a);b.forEach((a,b)=>{let d=(0,t.GQ)(a.title),e=RegExp(`^##\\s+(?:第[一二三四五六七八九十百千万\\d]+章\\s*)?${ab(d)}\\s*$`,"mu");c=e.test(c)?c.replace(e,`## ${(0,t.tb)(b,a.title)}`):c});let d=c.split(/\r?\n/u),e=-1,f=0,g=0,h="",i=new Set,j=a=>{let c=b[e]?.sections||[],d=ad(a);return c.findIndex(a=>ad(a)===d)},k=(a,c)=>{let d=U(a);if(!d||C(a)||C(d))return"";let k=j(d),l=b[e]?.sections||[],m=k>=0?k+1:f+1,n=k>=0?ad(l[k]):ad(d);return i.has(n)?(f=m,h=c||`${e+1}.${f}`,g+=1,`#### ${e+1}.${f}.${g} ${d}`):(f=m,g=0,h=c||`${e+1}.${f}`,i.add(n),`### ${e+1}.${f} ${k>=0?(0,t.GQ)(l[k]):d}`)},l=!1;return d.map(a=>{let c=a.trim();if(/^##\s+目录\s*$/u.test(c))return l=!0,a;if(l&&/^<div class="page-break"><\/div>$/u.test(c))return l=!1,a;if(l)return a;if(/^##\s+第[一二三四五六七八九十百千万\d]+章\s+/u.test(c))return e+=1,f=0,g=0,h="",i=new Set,a;let d=/^##\s+第[一二三四五六七八九十百千万\d]+节\s+(.+)$/u.exec(c);if(e>=0&&d)return k(d[1]||"");let m=/^##\s+\d+[..、]\s+(.+)$/u.exec(c);if(e>=0&&m)return k(m[1]||"");let n=/^##\s+(\d+)\.(\d+)\s+(.+)$/u.exec(c);if(e>=0&&n)return k(n[3]||"",`${n[1]}.${n[2]}`);let o=/^##\s+(.+)$/u.exec(c);if(e>=0&&o){let a=(0,t.GQ)(o[1]||"");return/^本章目录$/u.test(a)?"":k(a)}let p=/^###\s+(?:(\d+)\.(\d+)\s+)?(.+)$/u.exec(c);if(e>=0&&p)return k(p[3]||"",p[1]&&p[2]?`${p[1]}.${p[2]}`:void 0);let q=/^####\s+(\d+)\.(\d+)(?!\.)\s+(.+)$/u.exec(c);if(e>=0&&q)return k(q[3]||"",`${q[1]}.${q[2]}`);let r=/^####\s+(?:(\d+)\.(\d+)\.(\d+)\s+)?(.+)$/u.exec(c);if(e>=0&&r){let a=r[1]&&r[2]?`${r[1]}.${r[2]}`:h,c=(0,t.GQ)(r[4]||""),d=ad(c),l=j(c)>=0&&!i.has(d);return!f||a&&a!==h&&(0===(b[e]?.sections||[]).length||l)?k(c,a):(g+=1)<=4?`#### ${e+1}.${f}.${g} ${c}`:`**${c}**`}return a}).filter(a=>""!==a).join("\n")}function _(a,b){let c=a.replace(/施工方(?!法|案|式|针|向|面)/gu,"我公司").replace(/投标人/gu,"我公司").replace(/高度重视/gu,"严格落实").replace(/重中之重/gu,"关键控制事项");for(let a of b?.forbiddenTerms||[])a&&/^(?:报价明细表|最高投标限价|招标控制价)$/u.test(a)&&(c=c.split(/\r?\n/u).filter(b=>!RegExp(ab(a),"u").test(b)).join("\n"));return c}function aa(a,b){if(!b)return _(a);let c=function(a,b){let c=a;for(let a of b?.requiredTables||[])c=function(a,b){if(/项目基本信息/u.test(b)&&(/项目基本信息/u.test(a)||/\|\s*信息项\s*\|\s*内容\s*\|/u.test(a)||/\|\s*项目名称\s*\|[^\n]*(?:徽光阁|项目施工|工程)/u.test(a))||RegExp(ab(b),"u").test(a))return a;let c=/项目基本信息/u.test(b)?"":`**${b}**
|
|
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}},42026:(a,b,c)=>{c.d(b,{h0x:()=>d.h0,bVF:()=>d.bV,OXS:()=>dt,QJx:()=>d.QJ,jGg:()=>d.jG,R1O:()=>du,Bhi:()=>d.Bh,xmB:()=>d.xm});var d=c(52511),e=c(76760),f=c(19898),g=c(44533),h=c(29281),i=c(25840),j=c(6444),k=c(85441);let l={id:"default_general_document",name:"通用文档",factFields:[{id:"document_identity",name:"对象名称",aliases:["项目名称","工程名称","文档名称","任务名称","招标项目名称","建设项目名称"],category:"identity",cardinality:"single",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.75,minForValidation:.85,allowPathOnly:!1},conflictPolicy:"strict"},{id:"schedule_requirement",name:"周期要求",aliases:["计划工期","工期","周期要求","进度节点要求","开工日期","竣工日期"],category:"schedule",cardinality:"single",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.7,minForValidation:.8,allowPathOnly:!1},conflictPolicy:"strict"},{id:"quality_requirement",name:"质量要求",aliases:["质量要求","质量标准","验收要求","评价标准"],category:"quality",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.65,minForValidation:.75,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"safety_requirement",name:"安全合规要求",aliases:["安全要求","安全合规要求","风险控制要求","合规要求"],category:"safety",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.65,minForValidation:.75,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"technical_parameter",name:"技术参数",aliases:["技术参数","参数规格范围","规格","型号","尺寸","标准编号","材料设备"],category:"technical",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.7,minForValidation:.8,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"resource_plan",name:"资源配置",aliases:["劳动力","机械","检测设备","应急物资","资源配置","人员配置"],category:"resource",cardinality:"multiple",derivationPolicy:"plan_inferable",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.45,minForValidation:.55,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"commercial_data",name:"商务数据",aliases:["报价","单价","合价","综合单价","预留金","税率","金额","利润"],category:"commercial",cardinality:"multiple",derivationPolicy:"forbidden",usagePolicy:"do_not_use",confidencePolicy:{minForGeneration:1,minForValidation:1,allowPathOnly:!1},conflictPolicy:"ignore"},{id:"rule_requirement",name:"规则要求",aliases:["规则要求","变更说明","实施范围","对象范围","结构化数据范围"],category:"compliance",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.6,minForValidation:.7,allowPathOnly:!1},conflictPolicy:"allow_multiple"}],forbiddenValuePatterns:[/投标报价|报价明细|单价|合价|综合单价|预留金|暂列金额|税率|增值税|利润|结算/u],diagnosticValuePatterns:[/OCR|识别错误|乱码|无法确认|疑似|不确定|绑定片段|兜底|知识库|提示词|后台|文件路径|PDF|DWG|Excel/u],lowConfidenceValuePatterns:[/无法确认|疑似|不确定|需复核|文字模糊|语义断裂|识别错误|乱码/u]},m={...l,id:"construction_organization_design",name:"施工组织设计"};function n(a,b){return a.factFields.find(a=>a.name===b||a.aliases.some(a=>b.includes(a)||a.includes(b)))}function o(a,b){return a.forbiddenValuePatterns.some(a=>a.test(b))}function p(a,b){return a.diagnosticValuePatterns.some(a=>a.test(b))}function q(a,b){return a.lowConfidenceValuePatterns.some(a=>a.test(b))}var r=c(56942),s=c(70933),t=c(70208),u=c(91977),v=c(58965);function w(a,b){return b?a.replace(/^!\[[^\]]*(?:图纸|drawing|cad|地图|平面|剖面|立面)[^\]]*\]\([^)]*\)\s*$/gimu,"").replace(/\n{3,}/gu,"\n\n"):a}let x=/.*(?:知识库证据|知识库已确认事实|资料类型|提示词角色|后台自动规范|规范包|事实字段|资料未提供|未检索到|待确认事项|证据来源|来源清单|校验结果|修复任务包|修复类型|修复对象|输出要求).*(?:\n|$)/gu,y=/^\s*(?:#{1,6}\s*)?(?:PDF\s*第\s*\d+\s*页|rule\b|文件[::]|片段[::]|来源[::]).*$/gimu,z=/^\s*(?:[│┃┆┊┌┐└┘├┤┬┴┼─━╭╮╰╯]|[↓↑→←⇒⇨➡])+\s*$/gmu,A=/^#{2,6}\s+(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用)|^#{2,6}\s+(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:如|若|如果)(?:涉及|不涉及|适用|不适用)|^#{2,6}\s+.*(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成)|^#{2,6}\s+.*(?:按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|说明要求|注意事项)\s*$/gmu,B=/^(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用).*|(?:如|若|如果)(?:涉及|不涉及|适用|不适用).*|.*(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成).*|.*(?:按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|说明要求|注意事项))\s*$/u;function C(a){let b=a.replace(/^#{1,6}\s+/u,"").replace(/^\s*\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").trim(),c=(0,t.GQ)(b);return B.test(b)||B.test(c)}function D(a){return a.replace(/PDF\s*第\s*\d+\s*页/giu,"相关资料").replace(/第\s*\d+\s*页\s*(?:\/|共)\s*\d+\s*页/gu,"").replace(/第\s*\d+\s*(?:[-—至到~~]\s*\d+)?\s*页/gu,"相关资料").replace(/(装饰工程|土建工程|加固工程|给排水工程|电气工程|智能化工程|消防工程|弱电智能化工程|室外道排工程|建筑结构加固工程)\s*(?:(?:施工)?图纸|资料|文件)?\s*[((]?\s*(?:(?:共|多达|约|合计)\s*)?\d+\s*页\s*[))]?/gu,"$1施工图纸").replace(/\d+\s*页\s*(装饰|土建|加固|给排水|电气|智能化|消防|弱电智能化|室外道排|建筑结构加固)\s*(?:专业)?\s*(?:(?:施工)?图纸)?/gu,"$1专业图纸").replace(/(装饰|土建|加固|给排水|电气|智能化|消防|弱电智能化|室外道排|建筑结构加固)\s*(?:专业)?\s*(?:[((]\s*)?\d+\s*页\s*(?:(?:施工)?图纸)?\s*[))]?/gu,"$1专业图纸").replace(/([\u4e00-\u9fa5A-Za-z0-9、及与和]{2,24})\s*(?:共|多达|约|合计)\s*\d+\s*页/gu,"$1相关专业图纸").replace(/([\u4e00-\u9fa5A-Za-z0-9()()、·-]{2,24}工程)\s*(?:图纸|资料|文件)?\s*[((]?\s*(?:(?:共|多达|约|合计)\s*)?\d+\s*页\s*[))]?/gu,"$1施工图纸").replace(/([\u4e00-\u9fa5A-Za-z0-9()()、·-]{2,24})(?<!施工)\s*(?:施工)?图纸\s*[((]?\s*(?:(?:共|多达|约|合计)\s*)?\d+\s*页\s*[))]?/gu,"$1施工图纸").replace(/(给排水|电气|智能化|消防|暖通|人防)\s*[((]\s*\d+\s*页\s*[))]/gu,"$1专业图纸").replace(/(?:依据|按照|结合)?\s*图纸\s*[((]\s*\d+\s*页\s*[))]/gu,"依据相关专业图纸").replace(/(?:依据|按照|结合)?\s*清单\s*[((]?\s*\d+\s*页\s*[))]?/gu,"依据工程量清单").replace(/资料\s*[((]?\s*\d+\s*页\s*[))]?/gu,"项目资料").replace(/[((]?[\u4e00-\u9fa5A-Za-z0-9、及与和]*(?:图纸|清单|资料|文件|工程)?[\u4e00-\u9fa5A-Za-z0-9、及与和]*(?:(?:共|多达|约|合计)\s*)?\d+\s*页[\u4e00-\u9fa5A-Za-z0-9、及与和]*(?:图纸|清单|资料|文件)?[))]?/gu,a=>/图纸|工程|装饰|土建|加固|给排水|电气|智能化|消防/u.test(a)?"相关专业图纸":/清单/u.test(a)?"工程量清单":"相关资料").replace(/(?:位于|详见|见|参见|依据|按照|结合)?\s*相关资料(?:\s*相关资料)+/gu,"相关资料")}let E=String.raw`(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)`;function F(a){return/^\s*\|/u.test(a)||/^\s*\|?\s*:?-{3,}:?/u.test(a)?a:a.replace(/([。;;])\s*(?=(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)\S)/gu,"$1\n").replace(/([^\n])\s+(?=(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)\*\*)/gu,"$1\n")}function G(a){return a.split(/\r?\n/u).map(F).join("\n").replace(/\n{3,}/gu,"\n\n")}function H(a){return/^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a)}function I(a){let b=a.trim();return/^\|.*\|$/u.test(b)&&b.split("|").length>=3}function J(a){return`| ${Array.from({length:Math.max(2,a)},()=>"---").join(" | ")} |`}function K(a){let b=a.split(/\r?\n/u),c=[],d=0;for(let a=0;a<b.length;a+=1){let e=b[a];if(!I(e)||H(e)){H(e)||(d=0),c.push(e);continue}let f=b[a+1]||"",g=d||e.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).length;if(c.push(function(a,b){let c=a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>a.trim());for(;c.length<b;)c.push("");return`| ${c.slice(0,b).join(" | ")} |`}(e,g)),H(f)){c.push(J(g)),d=g,a+=1;continue}!d&&I(f)&&function(a){let b=a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>a.replace(/\*\*/gu,"").trim());return!(b.length<2)&&b.filter(a=>/^(?:序号|信息项|内容|控制项目|控制内容|执行要求|责任主体|检查(?:与验收)?|验收标准|备注|名称|规格(?:型号)?|单位|数量|阶段|措施|风险|应急物资名称|资源类别|投入计划|管理要求)$/u.test(a)).length>=Math.min(2,b.length)}(e)&&(c.push(J(g)),d=g)}return c.join("\n").replace(/\n{3,}/gu,"\n\n")}RegExp(String.raw`\S.+(?:\s|[。;;])${E}\S.+(?:\s|[。;;])${E}\S`,"u");let L=/(?:项目部|本项目|本工程)?(?:根据|依据|结合|按照|以)?(?:本项目|项目|[^。;;\n]{0,30}?)?(?:招标文件|补疑澄清文件|补遗澄清文件|补疑补遗|答疑(?:回复)?文件|答疑修正口径|补充答疑修正口径|澄清文件|工程量清单|设计图纸|施工图纸|图纸资料|设计修改通知单)(?:[、,,及和与\s]*(?:招标文件|补疑澄清文件|补遗澄清文件|补疑补遗|答疑(?:回复)?文件|答疑修正口径|补充答疑修正口径|澄清文件|工程量清单|设计图纸|施工图纸|图纸资料|设计修改通知单|现行规范|规范)){1,}(?:[^。;;\n]{0,80})?[,,]/u;function M(a){return a.split(/\r?\n/u).map(a=>/^\s*\|/u.test(a.trim())?a:a.replace(L,"").replace(/(?:施工图设计说明|工程量清单项目特征|补充答疑修正口径|答疑修正口径)(?:[、,,及和与\s]*(?:施工图设计说明|工程量清单项目特征|补充答疑修正口径|答疑修正口径)){1,}/gu,"项目技术文件").replace(/(?:根据|依据|以)(?:[^。;;\n]{0,30})?(?:招标文件|补疑澄清文件|补遗澄清文件|补疑补遗|答疑(?:回复)?文件|答疑修正口径|补充答疑修正口径|澄清文件|工程量清单|设计图纸|施工图纸)(?:[^。;;\n]{0,40})(?:编制|确定|要求|为编制基础)[。;;]?/gu,"").replace(/\s{2,}/gu," ").trimEnd()).filter(a=>!/^(?:本节|本小节|本章)?(?:内容|措施)?(?:根据|依据)(?:招标文件|补疑澄清文件|补遗澄清文件|答疑(?:回复)?文件|澄清文件|工程量清单|设计图纸|施工图纸)[^。;;\n]*[。;;]?$/u.test(a.trim())).join("\n").replace(/\n{3,}/gu,"\n\n")}function N(a){return K(G(D(M(function(a){let b=a.trim(),c=/^```(?:markdown|md)?\s*\n([\s\S]*?)\n```\s*$/iu.exec(b);return c?c[1].trim():a}(a)).replace(/\b(m|㎡)\s*2\b/giu,"平方米").replace(/\bm\s*[²2]\b/giu,"平方米").replace(/\b(m|㎥)\s*3\b/giu,"立方米").replace(/\bm\s*[³3]\b/giu,"立方米").replace(/\bmm2\b/giu,"平方毫米").replace(/\bcm2\b/giu,"平方厘米").replace(/\bkm2\b/giu,"平方千米").replace(/\s*×\s*/gu,"\xd7").replace(/\s*≤\s*/gu,"≤").replace(/\s*≥\s*/gu,"≥").replace(/\s*±\s*/gu,"\xb1")))).split(/\r?\n/u).map(a=>/^\s*\|/u.test(a)?a.replace(/\s*不适用\s*(?=\|)/gu," "):a).join("\n").replace(/承包人案/gu,"方案").replace(x,"").replace(y,"").replace(z,"").replace(A,"").replace(v.tK,"").replace(/^#\s+/gmu,"").replace(v.VX,"").split(/\r?\n/u).filter((a,b,c)=>{let d=b>0?(0,t.GQ)((c[b-1]||"").trim().replace(/^#{1,6}\s+/u,"")):"",e=(0,t.GQ)(a.trim().replace(/^#{1,6}\s+/u,""));if(d&&C(d)&&e.length>0&&e.length<=12&&!/^#{1,6}\s/u.test(a.trim()))return!1;let f=a.trim();if(!f)return!0;if(/该小节围绕.+进行补充说明/u.test(f)||/仅作为内部事实提取依据|正式正文不得引用文件名|后台事实|内部事实/u.test(f))return!1;if(/^\s*\|/u.test(f)||/^\s*\|?\s*:?-{3,}:?/u.test(f))return!0;let g=(0,t.GQ)(f.replace(/^#{1,6}\s+/u,""));return!(/^(?:雨季|冬季|高温|台风|大风等特殊气候|雨季、冬季、高温、台风、大风等特殊气候)$/u.test(g)||g.length<=1||C(g))&&!(/[,、;:和与在为对将]$/u.test(g)||/(通过|包括|如下|主要包括)$/u.test(g))}).join("\n").replace(/\n{3,}/gu,"\n\n").trim()}let O="以下规则仅用于保障导出格式正确和事实安全,不得覆盖用户在提示词中已明确的要求。\n不得把”知识库、检索、资料类型、提示词角色、规范包、事实字段、缺失项、校验结果、资料未提供、未检索到”等后台流程话术写入正文。\n严禁使用“根据/依据招标文件、补疑澄清文件、工程量清单及设计图纸”等资料来源罗列开头;正文必须直接写项目事实、施工内容、控制措施、验收节点。\n【导出格式】章标题用 ## ,节标题用 ### 加数字编号(如 1.1),小节标题用 #### 加数字编号(如 1.1.1)。禁止用数字编号或粗体代替 ###/#### 标题。\nMarkdown 表格格式硬约束:凡是输出 Markdown 表格,必须使用标准 GFM 表格格式。\n表格必须包含表头行、分隔线和数据行;表头下一行必须是分隔线,例如 |---|---|。\n禁止只输出连续的“| 字段 | 值 |”裸表格行;两列键值信息表默认使用表头 | 信息项 | 内容 |。\n表头、分隔线和数据行必须连续,中间不得插入正文、说明、空行或补充段落。\n正文表格不得展示后台溯源列或系统过程列,如“资料来源/说明”“资料来源/证明”“知识库来源”等。\n项目名称、项目编号、招标人/业主/建设单位、建设地点、建设规模、计划工期、质量标准、合同估算价等项目基础信息,只能在项目基本信息表中集中输出一次;后续章节如需引用,应写入正文或专业表格的业务字段,不得重复生成项目基础信息键值表。\n【段落格式】段落之间必须空行(双换行)分隔,不得用单换行连续写大段文字。列表项逐行独占。步骤描述之间加空行。\n正文事实必须来自绑定材料;信息不足时保持审慎,不得编造精确数量。",P="只生成当前小节正文,不生成其他二级小节,不重复章节一级标题。\n优先使用当前模板、用户要求、绑定提示词和绑定材料中的事实;缺少依据时不得编造具体数值、名称、时间、规格或责任。\n小节应有实质正文;除非用户或模板明确要求纯表格,否则表格只能作为辅助表达,不能整节只有表格。\n不得用通用兜底段落、空泛管理话术或后台缺料说明冒充正文;信息不足时只写已有事实、适用边界和待复核口径。";function Q(a){return(0,t.GQ)(a.replace(/^#+\s*/u,"")).replace(/^(?:第)?[一二三四五六七八九十百千万\d]+章\s*/u,"").trim().replace(/\s+/gu,"")}function R(a,b){let c=Q(a),d=Q(b);return!!(c&&d&&c===d)}function S(a){return[...new Set([...a.matchAll(/^###\s+(.+)$/gmu)].map(a=>(0,t.GQ)(a[1]||"")).filter(a=>a.length>=2&&a.length<=80).filter(a=>!C(a)).filter(a=>!/^\d+(?:\.\d+){2,}\s+/u.test(a)))]}function T(a){let b=a.split(/\r?\n/u),c="",d=0;return b.map(a=>{let b=/^\*\*([^*]{2,40}表)\*\*\s*$/u.exec(a.trim());if(b&&c)return d+=1,`#### ${c}.${d} ${(0,t.GQ)(b[1]||"")}`;let e=/^###\s+(\d+\.\d+)\s+.+$/u.exec(a.trim());if(e)return c=e[1],d=0,a;if(/^##\s+/u.test(a.trim()))return c="",d=0,a;let f=/^(#{4,5})\s+(.+)$/u.exec(a.trim());if(f){if(!c)return"#####"===f[1]?a.replace(/^\s*#####/u,"####"):a;let b=(f[2]||"").trim(),e=(0,t.GQ)(b.replace(/^\d+\.\d+\.\d+\s+/u,""));return e?(d+=1,`#### ${c}.${d} ${e}`):a}return a}).join("\n").replace(/\n{3,}/gu,"\n\n").trim()}function U(a){let b=a.replace(/\*+/gu,"").trim();if(C(b))return"";let c=(0,t.GQ)(b).replace(/^[-—–]\s*/u,"").trim();return C(c)||/^(?:雨季|冬季|高温|台风|大风等特殊气候)$/u.test(c)?"":c}function V(a=[]){return[...new Set(a.map(U).filter(a=>a.length>=2))]}function W(a){return["## 目录","",...a.flatMap((a,b)=>{let c=V(a.sections||[]);return[`- ${(0,t.tb)(b,a.title)}`,...c.map((a,c)=>` - ${function(a,b,c){let d=(0,t.GQ)(c);return!function(a){let b=/^\s*(\d+)\.(\d+)[..、]?\s+(.+)$/u.exec(a);return!!b&&(0,t.GQ)(b[3]||"").trim()===(0,t.GQ)(a).trim()}(c)?`${a+1}.${b+1} ${d}`:d}(b,c,a)}`)]})].join("\n")}function X(a){return a.replace(/<div class="document-cover">[\s\S]*?<\/div>\s*(?:<div class="page-break"><\/div>\s*)?/giu,"").replace(/^#\s+.+\n{1,2}/u,"")}function Y(a){return a.replace(/^##\s+目录\s*$[\s\S]*?(?=\n<div class="page-break"><\/div>|\n##\s+第[一二三四五六七八九十百千万\d]+章|\n##\s+)/gmu,"").replace(/^<div class="page-break"><\/div>\s*(?=##\s+第[一二三四五六七八九十百千万\d]+章)/gmu,"")}function Z(a){let b=!1;return a.replace(/^##\s+目录\s*$[\s\S]*?(?=\n<div class="page-break"><\/div>|\n##\s+)/gmu,a=>b?"":(b=!0,a)).replace(/\n{3,}/gu,"\n\n").trim()}function $(a,b){let c=Z(a);b.forEach((a,b)=>{let d=(0,t.GQ)(a.title),e=RegExp(`^##\\s+(?:第[一二三四五六七八九十百千万\\d]+章\\s*)?${ab(d)}\\s*$`,"mu");c=e.test(c)?c.replace(e,`## ${(0,t.tb)(b,a.title)}`):c});let d=c.split(/\r?\n/u),e=-1,f=0,g=0,h="",i=new Set,j=a=>{let c=b[e]?.sections||[],d=ad(a);return c.findIndex(a=>ad(a)===d)},k=(a,c)=>{let d=U(a);if(!d||C(a)||C(d))return"";let k=j(d),l=b[e]?.sections||[],m=k>=0?k+1:f+1,n=k>=0?ad(l[k]):ad(d);return i.has(n)?(f=m,h=c||`${e+1}.${f}`,g+=1,`#### ${e+1}.${f}.${g} ${d}`):(f=m,g=0,h=c||`${e+1}.${f}`,i.add(n),`### ${e+1}.${f} ${k>=0?(0,t.GQ)(l[k]):d}`)},l=!1;return d.map(a=>{let c=a.trim();if(/^##\s+目录\s*$/u.test(c))return l=!0,a;if(l&&/^<div class="page-break"><\/div>$/u.test(c))return l=!1,a;if(l)return a;if(/^##\s+第[一二三四五六七八九十百千万\d]+章\s+/u.test(c))return e+=1,f=0,g=0,h="",i=new Set,a;let d=/^##\s+第[一二三四五六七八九十百千万\d]+节\s+(.+)$/u.exec(c);if(e>=0&&d)return k(d[1]||"");let m=/^##\s+\d+[..、]\s+(.+)$/u.exec(c);if(e>=0&&m)return k(m[1]||"");let n=/^##\s+(\d+)\.(\d+)\s+(.+)$/u.exec(c);if(e>=0&&n)return k(n[3]||"",`${n[1]}.${n[2]}`);let o=/^##\s+(.+)$/u.exec(c);if(e>=0&&o){let a=(0,t.GQ)(o[1]||"");return/^本章目录$/u.test(a)?"":k(a)}let p=/^###\s+(?:(\d+)\.(\d+)\s+)?(.+)$/u.exec(c);if(e>=0&&p)return k(p[3]||"",p[1]&&p[2]?`${p[1]}.${p[2]}`:void 0);let q=/^####\s+(\d+)\.(\d+)(?!\.)\s+(.+)$/u.exec(c);if(e>=0&&q)return k(q[3]||"",`${q[1]}.${q[2]}`);let r=/^####\s+(?:(\d+)\.(\d+)\.(\d+)\s+)?(.+)$/u.exec(c);if(e>=0&&r){let a=r[1]&&r[2]?`${r[1]}.${r[2]}`:h,c=(0,t.GQ)(r[4]||""),d=ad(c),l=j(c)>=0&&!i.has(d);return!f||a&&a!==h&&(0===(b[e]?.sections||[]).length||l)?k(c,a):(g+=1)<=4?`#### ${e+1}.${f}.${g} ${c}`:`**${c}**`}return a}).filter(a=>""!==a).join("\n")}function _(a,b){let c=a.replace(/施工方(?!法|案|式|针|向|面)/gu,"我公司").replace(/投标人/gu,"我公司").replace(/高度重视/gu,"严格落实").replace(/重中之重/gu,"关键控制事项");for(let a of b?.forbiddenTerms||[])a&&/^(?:报价明细表|最高投标限价|招标控制价)$/u.test(a)&&(c=c.split(/\r?\n/u).filter(b=>!RegExp(ab(a),"u").test(b)).join("\n"));return c}function aa(a,b){if(!b)return _(a);let c=function(a,b){let c=a;for(let a of b?.requiredTables||[])c=function(a,b){if(/项目基本信息/u.test(b)&&(/项目基本信息/u.test(a)||/\|\s*信息项\s*\|\s*内容\s*\|/u.test(a)||/\|\s*项目名称\s*\|[^\n]*(?:徽光阁|项目施工|工程)/u.test(a))||RegExp(ab(b),"u").test(a))return a;let c=/项目基本信息/u.test(b)?"":`**${b}**
|
|
18
18
|
|
|
19
19
|
| 控制项目 | 控制内容 | 执行要求 | 复核要求 |
|
|
20
20
|
|---|---|---|---|
|
|
@@ -131,31 +131,41 @@ ${k}`:""}
|
|
|
131
131
|
`;return cU(cS(cT(`${a.slice(0,d)}${l}${a.slice(h).trimStart()}`)))}function cW(a,b){return 0!==cK(b).length&&/资料未明确|系统暂未从知识库确认|项目资料暂未明确/u.test(a)?["计划工期","合同工期","质量标准","合同估算价","合同估算价格","建设地点","建设规模"].filter(b=>RegExp(`${b}[^
|
|
132
132
|
|。;;]{0,40}(?:资料未明确|系统暂未从知识库确认|项目资料暂未明确)`,"u").test(a)).map(a=>({level:"error",message:`${a} 已抽取到项目资料事实但正文仍显示暂未明确`,suggestion:"请优先使用项目基础事实卡片中的资料原值,不得用占位表达覆盖已确认事实。"})):[]}function cX(a,b){return(function(a){let b=a;for(let[a,c]of[[/加强管理/gu,"明确责任岗位、执行动作、检查频次和整改闭环"],[/严格控制/gu,"按标准限值、检查频次和复查销项要求控制"],[/确保质量/gu,"通过样板引路、三检制度、隐蔽验收和质量问题闭环整改保证质量"],[/及时处理/gu,"发现问题后明确责任人、整改时限、复查人员和销项记录"],[/强化监督/gu,"由责任岗位按日巡查、周复核和问题台账闭环监督"]])b=b.replace(a,c);return b})(K(G(D(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().replace(/【修复任务包】[\s\S]*?(?=\n#{1,3}\s|\n\*\*|\n\|\s|$)/gu,"").replace(/^修复类型:.*$/gmu,"").replace(/^修复对象:.*$/gmu,"").replace(/^问题:【修复任务包】[\s\S]*?(?=\n#{1,3}\s|\n\*\*|\n\|\s|$)/gu,"").replace(/^输出要求:.*$/gmu,"").replace(/重新生成/gu,"补充完善").replace(/见招标公告|见投标人须知前附表/gu,"以本项目招标文件明确内容为准").replace(/见招标文件/gu,"按本项目招标文件已明确的相应条款执行").replace(/招标范围:/gu,"施工范围:").replace(/主要承包人案|承包人案/gu,a=>a.replace(/承包人案/gu,"施工方案")).replace(/施工方/gu,"承包人").replace(/由承包人/gu,"由承包人").replace(/按图纸/gu,"依据经确认的设计文件和图纸内容组织实施").replace(/按设计要求/gu,"依据设计文件明确的构造、材料、尺寸和验收要求执行").replace(/按(?:资料|文件|说明|方案|规范|标准|要求)/gu,"依据本项目已确认资料、技术文件和验收标准").replace(/满足(?:相关|有关)?要求/gu,"满足本项目已明确的质量、安全、技术和验收控制要求").replace(/本节(?:将|主要|重点)?/gu,"").replace(/本章将/gu,"").replace(/根据需要|视情况|结合实际情况/gu,"结合已确认资料、现场条件和审批后的施工组织安排").replace(/相关要求/gu,"本项目已明确的质量、安全、技术和验收要求").split(/\n{2,}/u).map(a=>{if(/^\s*(#{1,6}\s+|[-*+]\s+|\|)/u.test(a)||a.length<520)return a;let b=a.split(/(?<=[。;])/u).map(a=>a.trim()).filter(Boolean);if(b.length<4)return a;let c=[],d="";for(let a of b)d.length>260&&d.length+a.length>420?(c.push(d),d=a):d+=a;return d&&c.push(d),c.join("\n\n")}).join("\n\n"))))).replace(/\n{3,}/gu,"\n\n").trim()}function cY(a,b){let c=a.chapterPrompts.filter(a=>"writer"===a.category||"chapter"===a.category||"formatting"===a.category),d=[...a.writerPrompts,...c,...a.formattingPrompts],e=a.writerPrompts[0],f=d.map(a=>`${"writer"===a.category?"写作控制提示词":a.category}|${a.roleId}|${a.name}|${a.content.length} 字符`),g=bg(a.writerPrompts),h=bg([...c,...a.formattingPrompts]);return{primaryPromptId:e?.id,primaryWriter:e,prompts:d,promptTexts:[g?`【最高优先级:配置写作主控提示词】
|
|
133
133
|
${g}`:"",h?`【章节/格式提示词】
|
|
134
|
-
${h}`:""].filter(Boolean).join("\n\n"),promptDetails:f}}function cZ(a){return aX(a).replace(/[\s,,.。::;;||()()《》<>【】"“”'‘’]/gu,"").split("[").join("").split("]").join("").toLowerCase()}function c$(a){return/工程造价|造价|报价|投标报价|报价明细|综合单价|单价|合价|金额|税率|增值税|利润|预留金|暂列金额|最高投标限价|招标控制价|合同估算价|合同估算价格|投资估算|估算价/u.test(a)}function c_(a,b,c={}){return(function(a,b,c={}){let d=b.filter(a=>{let b=`${a.key||""}${a.fieldName||""}${a.fieldId||""}
|
|
134
|
+
${h}`:""].filter(Boolean).join("\n\n"),promptDetails:f}}function cZ(a){return aX(a).replace(/[\s,,.。::;;||()()《》<>【】"“”'‘’]/gu,"").split("[").join("").split("]").join("").toLowerCase()}function c$(a){return/工程造价|造价|报价|投标报价|报价明细|综合单价|单价|合价|金额|税率|增值税|利润|预留金|暂列金额|最高投标限价|招标控制价|合同估算价|合同估算价格|投资估算|估算价/u.test(a)}function c_(a){let b=cL((0,az.lG)(a));return!b||/资料未明确|系统暂未从知识库确认|未确认|待确认|无|暂无/u.test(b)||/###|第\s*\d+\s*页|共\s*\d+\s*页|新版交易系统|操作帮助|登录页面|见招标公告|未尽事宜|详见图纸|招标文件补疑|政府相关文件|规范等其它资料/u.test(b)||/^\d+(?:\.\d+)?\s*(?:mm|cm|m|㎡|m²|m3|m³|%|元|万元)?$/iu.test(b)||c$(b)||b.length>160?"":b}function c0(a,b,c={}){return(function(a,b,c={}){let d=b.filter(a=>{let b=`${a.key||""}${a.fieldName||""}${a.fieldId||""}`,c=(0,az.lG)(a.value);return!(c$(`${b}${c}`)||!c_(c)||/第\s*\d+\s*页|新版交易系统|操作帮助|见招标公告|未尽事宜|详见图纸|招标文件补疑|政府相关文件|规范等其它资料/u.test(`${b}${c}${a.sourceFile||""}`))&&(/项目名称|工程名称|项目编号|招标项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|计划工期|合同工期|质量标准|质量目标/u.test(b)||/危大|安全|资源|材料|机械|设备/u.test(b)&&!/^\d+(?:\.\d+)?\s*(?:mm|cm|m|㎡|m²|m3|m³|%|元|万元)?$/iu.test(c))}),e=new Set,f=[];for(let b of d){let d=c_(b.value);if(!d)continue;let g=b.fieldName||b.key||b.fieldId||"资料事实",h=`${g}:${d}`;if(!e.has(h)&&(e.add(h),!function(a,b){let c=cZ(a),d=cZ(b);if(!d||d.length<2||c.includes(d))return!0;let e=b.match(/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年|万元|元|平方米|㎡|m²|立方米|m³|米|m|mm|cm|台|套|人|项|%|MPa|kPa)?/giu)||[];return e.length>0&&e.some(a=>cZ(a).length>=2&&c.includes(cZ(a)))}(a,d)&&(f.push({fact:b,label:g,value:d}),c.maxItems&&f.length>=c.maxItems)))break}return f})(a,b,{maxItems:c.maxIssues}).map(a=>({level:"warning",message:`已确认事实未在正文中落位:${a.label}=${a.value}`,suggestion:"请将该事实自然写入对应章节或小节,不得改变原始数值和单位。"}))}function c1(a){return/概况|项目|工程|地点|规模|工期|质量|估算/u.test(a)?{keyword:.65,vector:.25,rewrite:.8,hybridBonus:.2}:/人|材|机|资源|材料|设备|机械|劳动力/u.test(a)?{keyword:.55,vector:.35,rewrite:.75,hybridBonus:.18}:/危大|安全|文明|风险/u.test(a)?{keyword:.5,vector:.4,rewrite:.8,hybridBonus:.2}:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}}function c2(a,b,c,d){let e=b.map(b=>({...b,score:b.score*function(a,b){let c=`${a.title} ${(a.sections||[]).join(" ")} ${a.requiredFacts.join(" ")}`;return"reference"===b?.55:"table"===b?/清单|工程量|数量|材料|设备|资源|费用|造价|范围|统计|表/u.test(c)?1.45:.95:"rule"===b?/要求|规则|招标|评审|响应|质量|安全|验收|标准|工期|进度|风险|约束/u.test(c)?1.35:.95:"drawing"===b?/图纸|设计|布置|位置|平面|剖面|立面|空间|施工方法|做法/u.test(c)?1.35:.85:"specification"===b&&/技术|规范|标准|参数|做法|质量|验收|施工方法/u.test(c)?1.3:1}(a,b.processingType)+function(a,b){let c=`${b.sectionTitle||""}
|
|
135
135
|
${b.filePath}
|
|
136
|
-
${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 c2(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 c3(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 c4(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 c5(a){if((0,az.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:c0(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 c6(a){let b=[],c=a.needs.slice(0,8),d=await Promise.all(c.map(async b=>{(0,az.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:c0(`${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 c7(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 c8(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)}function c9(a,b){let c=new Set([b?.projectName,...b?.fingerprint?.projectNames||[]].filter(Boolean));return(b?.contaminationCandidates||[]).reduce((a,b)=>!b||b.length<6||c.has(b)?a:a.replace(RegExp(b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"gu"),"本项目工程"),a)}function da(a){let b=[{title:"项目特点、重点、难点分析",minNumericFacts:5,minObjectFacts:8,objectPatterns:[/建筑面积|面积/u,/层|六层/u,/结构形式|框架结构|装配式/u,/基础|桩/u,/工期|日历天/u,/质量标准|合格/u,/校园|场地|校区/u,/管网|接驳/u,/智能化|电梯|消防|暖通|供配电/u]},{title:"项目主要施工内容",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/道路|道排|排水|雨污水|管网|检查井/u,/沟槽|开挖|回填|基层|面层/u,/路灯|照明|电力|通信|弱电/u,/交通|标志|标线|安全设施/u,/绿化|景观|室外|附属/u,/消防|给排水|水电|电气/u,/工艺流程|施工方法|施工顺序/u,/验收|检测|资料闭环/u]},{title:"主要分部分项工程施工方案",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/道路|道排|排水|雨污水|管网|检查井/u,/沟槽|开挖|回填|基层|面层/u,/路灯|照明|电力|通信|弱电/u,/交通|标志|标线|安全设施/u,/绿化|景观|室外|附属/u,/消防|给排水|水电|电气/u,/工艺流程|施工方法|施工顺序/u,/验收|检测|资料闭环/u]},{title:"主要施工方法",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/道路|道排|排水|雨污水|管网|检查井/u,/沟槽|开挖|回填|基层|面层/u,/路灯|照明|电力|通信|弱电/u,/交通|标志|标线|安全设施/u,/绿化|景观|室外|附属/u,/消防|给排水|水电|电气/u,/工艺流程|施工方法|施工顺序/u,/验收|检测|资料闭环/u]}];return a.flatMap(a=>b.flatMap(b=>{let c=((a,b)=>{let c=a.split("\n"),d=c.findIndex(a=>/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u.test(a.trim())&&a.includes(b));if(d<0)return"";let e=/^(#{2,6})\s+/u.exec(c[d].trim())?.[1].length||3,f=c.length;for(let a=d+1;a<c.length;a+=1){let b=/^(#{2,6})\s+/u.exec(c[a].trim());if(b&&b[1].length<=e){f=a;break}}return c.slice(d,f).join("\n")})(a.content,b.title);if(!c)return[];let d=new Set(c.match(/\d+(?:\.\d+)?\s*(?:m²|㎡|平方米|m|mm|层|栋|日历天|天|%|台|套|根|处|个|kg|t|吨)/giu)||[]).size,e=b.objectPatterns.filter(a=>a.test(c)).length,f=[];return d<b.minNumericFacts&&f.push({level:"error",severity:"blocker",message:`${a.title} ${b.title} 参数落位不足:当前 ${d} 个,要求不少于 ${b.minNumericFacts} 个`,suggestion:"关键小节必须写入项目规模、工期、层数、结构、专业工程或验收参数等具体数值。"}),e<b.minObjectFacts&&f.push({level:"error",severity:"blocker",message:`${a.title} ${b.title} 专业事实覆盖不足:当前 ${e} 类,要求不少于 ${b.minObjectFacts} 类`,suggestion:"关键小节必须覆盖工程对象、专业范围、重点难点和对应施工内容。"}),f}))}function db(a){let b=[{title:"项目特点、重点、难点分析",minChars:1800},{title:"项目主要施工内容",minChars:2200},{title:"主要分部分项工程施工方案",minChars:2200},{title:"主要施工方法",minChars:2200},{title:"危大工程专项施工方案审批流程",minChars:1200},{title:"原材料进场复试与见证取样",minChars:1200}];return a.flatMap(a=>b.flatMap(b=>{let c=((a,b)=>{let c=a.split("\n"),d=c.findIndex(a=>/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u.test(a.trim())&&a.includes(b));if(d<0)return"";let e=/^(#{2,6})\s+/u.exec(c[d].trim())?.[1].length||3,f=c.length;for(let a=d+1;a<c.length;a+=1){let b=/^(#{2,6})\s+/u.exec(c[a].trim());if(b&&b[1].length<=e){f=a;break}}return c.slice(d,f).join("\n")})(a.content,b.title);return!c||(0,aj.V7)(c)>=b.minChars?[]:[{level:"error",severity:"blocker",message:`${a.title} ${b.title} 正文不足:当前 ${(0,aj.V7)(c)} 字,要求不少于 ${b.minChars} 字`,suggestion:"关键小节必须补足项目数据、重点难点与施工内容对应关系后方可导出。"}]}))}async function dc(a){var b,c,e;let{chapterDraftsByOrder:f,chapterGenerationStagesByOrder:g,chapterGenerationStages:h,effectiveChapters:i,template:j,allEvidence:k,progressStages:l,documentSpec:m,projectMaterialSummary:n,domainProfile:o,documentBudget:p,input:q,generationDiagnostics:r,promptTexts:t,promptBindings:v,promptDocumentRules:w,projectRoot:x,projectId:y,readiness:z,factExtractionPromptTexts:A,hasExplicitOutline:B,missingItems:C,retrievalCoverageReports:D,failedChapterMessages:E,webResearchReport:F,indexHealth:G,agentWorkflow:H,emitProgress:I,withProgressHeartbeat:J}=a,{signal:K,requirement:L}=q,O=f.filter(a=>!!a);if(h.push(...g.filter(a=>!!a)),0===O.length)throw Error(`章节生成未完成:${E.join(";")||"没有生成任何有效章节"}`);if(B&&O.length<i.length)throw Error(`OUTLINE 指定 ${i.length} 章,实际只生成 ${O.length} 章:${E.join(";")||"部分章节未生成"}`);let P=O.flatMap(a=>a.evidence||[]);if(P.length>0){k.push(...P);let a=(0,s.QR)(k,{maxChars:Math.max(5e4,9e3*i.length),preservePinned:!0});k.splice(0,k.length,...a)}(0,az.Te)(K),(0,bb.fx)(l,(0,bb.X5)({type:"file_understanding",roleId:"multimodal-files",status:"running",message:"正在理解多模态参考文件"},{subtitle:"多模态参考文件"})),I(O);let Q={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{Q=await bV(x,k,K)}catch(a){if(K?.aborted)throw a;console.error("[gen] fileUnderstanding failed:",a)}for(let a of((0,bb.fx)(l,Q.stage),Q.notes))k.push({chapterId:"multimodal-file-understanding",filePath:"多模态模型文件理解结果",score:1,content:a,roleId:"multimodal-files",processingType:"reference",source:"multimodal"});let R=(0,s.QR)(k,{maxItems:Math.max(48,10*i.length),maxChars:Math.max(52e3,9e3*i.length),preservePinned:!0});k.splice(0,k.length,...R);let S=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}(j,k,m),U=aU(k,j,m),V=a$(k),W=a_(k,o),X={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,az.lG)(a.value).trim().length>=2).length<12:d.filter(b=>a.some(a=>(function(a,b){let c=(0,az.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}([...U,...V,...W],j,m)){let a=(0,s.QR)(k,{maxItems:48,maxChars:45e3,preservePinned:!0});try{X=await aV(a,A,j,m,K)}catch(a){if(K?.aborted)throw a;console.error("[gen] fact extraction failed:",a)}}for(let a of X.stages)(0,bb.fx)(l,a);let Y=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}([...U,...V,...W,...X.facts],k);for(let a of Y)S[a.key]=`${(0,az.lG)(a.value)}(来源:${a.sourceFile},角色:${a.roleId})`;let Z=ba(Y,aT(k),C,m,o),$=O.map(a=>{let b=m.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=(b?.requiredFactIds||[]).map(a=>m.factFields.find(b=>b.id===a)?.name).filter(Boolean),d=[...new Set([...a.missingFacts||[],...c].filter(Boolean))],e=d.filter(b=>!a.missingFacts.includes(b)),f=d.filter(b=>a.missingFacts.includes(b)),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)}}),_=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}}(O,Y,j);_.warnings=[..._.warnings,...z.warnings],_.errors=[..._.errors,...z.blockingIssues];let aa=[...k.reduce((a,b)=>a.set(b.filePath,(a.get(b.filePath)??0)+1),new Map).entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),ab=new Map;for(let a of k)ab.set(a.source||"unknown",(ab.get(a.source||"unknown")??0)+1);let ac=cp(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}(_,Z,O),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}($)),ad=O.map(a=>a.content).join("\n\n");ac=cp(ac,c_(ad,Y).map(a=>({...a,level:"error",severity:"blocker",suggestion:"Agent Writer 必须在章节生成阶段完成事实落位;导出阶段不再自动补写正文。"})));let ag=Math.max(0,i.length-O.length);ac=cp(ac,[...ag>0?[{level:"error",severity:"blocker",message:`部分章节生成失败:${ag} 章`,suggestion:E.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。"}]:[]]),ac=cp(ac,O.flatMap(a=>{let b=i.find(b=>b.id===a.id);if(!b)return[];let c=bO({chapter:b,content:a.content,evidence:a.evidence||[]});return c.length>0?[{level:"warning",message:`${a.title} 小节事实或量化参数落位可继续优化:${c.slice(0,5).join(";")}`,suggestion:"建议在 Agent Writer 阶段扩大定向证据,不得在导出阶段补写。"}]:[]}));let al=[],am=[...l,...h];(0,bb.fx)(am,(0,bb.X5)({type:"reference",roleId:"knowledge-usage-report",status:"success",message:`资料使用报告:证据 ${k.length} 条,来源文件 ${aa.length} 份,结构化事实 ${Y.length} 条`,details:[`证据类型:${[...ab.entries()].map(([a,b])=>`${a} ${b}`).join(",")||"无"}`,`索引健康:可用切片 ${G.usableChunkCount} 条,待索引 ${G.pendingJobs} 个,向量 ${G.vectorStatus?.status||"unknown"}`]},{subtitle:"资料使用报告"})),(0,bb.fx)(am,(0,bb.X5)({type:"reference",roleId:"web-research-report",status:F.enabled?"success":"skipped",message:F.enabled?`联网增强:检索章节 ${new Set(F.chapters).size} 个,查询 ${F.queries.length} 个,使用公开资料 ${F.evidenceCount} 条`:"联网增强未开启",details:F.enabled?[`检索主题:${[...new Set(F.queries)].join(";")||"无"}`,`过滤结果:${F.filteredCount} 条`,"公开资料仅用于通用规范、政策、工艺和措施补充,不作为项目事实来源"]:["可在模型配置中开启联网增强"]},{subtitle:"联网增强报告"}));let an=ah(ai({templateId:j.id,templateName:j.name,title:j.outputTitle,requirement:L||"",projectRoot:x,projectId:y,exportSettings:j.exportSettings,generationSettings:j.generationSettings,facts:S,structuredFacts:Y,factsModel:Z,chapters:O,sources:aa,missingItems:[...new Set(C)],validation:_,validationIssues:ac,executionStages:am,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:al,partialChapters:O.map(a=>({id:a.id,title:a.title,chars:(0,aj.V7)(a.content),status:cG(a,p.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:O,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:w}),O,{forbidDrawingImages:!1,promptRules:w}).chapters.map(a=>{let b=i.find(b=>b.id===a.id)||a;return{...a,sections:a.sections||[],content:cX(a.content,b)}}),ao=ah(ai({templateId:j.id,templateName:j.name,title:j.outputTitle,requirement:L||"",projectRoot:x,projectId:y,exportSettings:j.exportSettings,generationSettings:j.generationSettings,facts:S,structuredFacts:Y,factsModel:Z,chapters:an,sources:aa,missingItems:[...new Set(C)],validation:_,validationIssues:ac,executionStages:am,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:al,partialChapters:[],checkpointChapters:an,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:w}),an,{forbidDrawingImages:!1,promptRules:w}).markdown;ao=T(N(M(c9(cV(ao,Y),n))));let ap=cu({facts:Y,markdown:ao});ap.size>0&&am.push({type:"fact_extraction",roleId:"canonical-facts",status:"success",message:`已决策可信基础事实 ${ap.size} 项`,details:[...ap.values()].map(a=>`${a.label}=${a.value}(${a.source},confidence=${a.confidence})`).slice(0,12)}),ac=(ac=cp((0,ak.kQ)(m,ac,Z,an,ao,j.projectBindings||[],v),b5({markdown:ao,spec:m,summary:n}),b9({markdown:ao,facts:Y,summary:n,profile:o}),b6(ao,n),cW(ao,Y),ci({markdown:ao,chapters:an,factsModel:Z,template:j,promptBindings:v,promptDocumentRules:w}),c_(ao,[...Y,...Z.preciseFacts],{maxIssues:30}).map(a=>({...a,level:"error",severity:"blocker"})),(0,aj.PE)(j.generationSettings||j.exportSettings,ao).filter(a=>!(p.minPages&&/低于目标页数/u.test(a.message))),(0,aj.ty)(p,ao),af(ao,j),(0,ak.qK)(ao,an),ae(ao,w),cF(ao),ao.includes("WRITER_MISSING_SECTION")||ao.includes("Writer 未完成")?[{level:"error",severity:"blocker",category:"structure",owner:"system",message:"最终正文仍包含未完成小节标记",suggestion:"必须重新补写对应小节并删除 WRITER_MISSING_SECTION/Writer 未完成。"}]:[],db(an),da(an))).map(a=>"error"===a.level?{...a,severity:a.severity||"blocker"}:a);let aq=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(cj[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:an,templateChapters:i,factsModel:Z,evidence:k}),ar=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,az.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=ca(a),d=ca(b);return!!(!d||d.length<2||c.includes(d))||(b.match(/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年|万元|元|平方米|㎡|m²|立方米|m³|米|m|mm|cm|台|套|人|项|%|MPa|kPa)?/giu)||[]).some(a=>ca(a).length>=2&&c.includes(ca(a)))}(a,b)?"unplaced":"used",confidence:e.confidence}))}return d}(ao,Z),as=(b={chapters:an,templateChapters:i,factsModel:Z}).chapters.map(a=>{let c=b.templateChapters.find(b=>b.id===a.id||b.title===a.title),d=function(a,b){let c=`${a.title} ${(b?.sections||a.sections||[]).join(" ")}`;return[{key:"structure",label:"结构完整",passed:(a.sections||b?.sections||[]).length>=2||/###\s+/u.test(a.content)},{key:"depth",label:"内容深度",passed:(0,aj.V7)(a.content)>=600},{key:"evidence",label:"证据绑定",passed:(a.evidence||[]).length>0},{key:"professional",label:"专业控制点",passed:/验收|复核|检查|交底|控制点|整改|闭环|台账|进场|工序/u.test(a.content)},{key:"schedule",label:"工期支撑",passed:!/进度|工期|节点/u.test(c)||/工期|节点|计划|纠偏|资源|穿插/u.test(a.content)},{key:"quality",label:"质量验收",passed:!/质量|验收/u.test(c)||/质量|验收|复验|隐蔽|检验批|整改/u.test(a.content)},{key:"safety",label:"安全闭环",passed:!/安全|文明|风险|危大/u.test(c)||/风险|检查|整改|应急|培训|交底/u.test(a.content)}]}(a,c),e=d.filter(a=>a.passed).length;return{chapterId:a.id,title:a.title,score:d.length?Math.round(e/d.length*100):100,checks:d,action:e===d.length?"章节覆盖完整。":"系统需补齐章节结构、证据绑定、专业控制点和跨章依赖。"}}),at=cl({markdown:ao,chapters:an,issues:ac=cp(ac,aq.score>=85?[]:[{level:"warning",message:`系统知识库覆盖确认率偏低:${aq.score}%`,suggestion:`${aq.remediation} 未确认事实域:${aq.unconfirmedDomains.map(a=>cj[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}个)`:""}`}))}(ar,{maxIssues:20}),as.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("、")}`})),D.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}。`}))),knowledgeCoverage:aq,factTraces:ar,chapterCoverage:as}),au=cn({issues:ac,qualityReport:at,knowledgeCoverage:aq,factTraces:ar,chapterCoverage:as});ac=cp(ac,cm(at),co(au));let av=(0,ak.Ai)(ac,Z,an),aw=[],ax=Array.from(new Map(av.blockingIssues.map(a=>/^(.*?)\s+(?:空小节|小节内容补写未完成):(.+)$/u.exec(a.message)).filter(a=>!!a).map(a=>[`${a[1].trim()}::${a[2].trim()}`,a])).values()).slice(0,3);if(ax.length>0){let b=[];for(let c of ax){let d=c[1].trim(),e=c[2].trim(),f=an.findIndex(a=>a.title===d||d.includes(a.title)||a.title.includes(d)),g=an[f],h=i.find(a=>a.id===g?.id||a.title===g?.title);if(f<0||!g||!h){b.push(`失败:${d}/${e} 未定位到章节`);continue}let m=(0,bb.X5)({type:"llm_review",roleId:`agent-final-gate-repair-${g.id}`,status:"running",message:`Final Gate 正在补写空小节:${d} / ${e}`,details:b},{subtitle:"Final Gate Repair"});(0,bb.fx)(l,m),(0,bb.fx)(aw,m),I(an,l);let n=await J(()=>bI({template:j,chapter:h,sectionTitle:e,evidence:g.evidence?.length?g.evidence:k,missingFacts:[],promptTexts:t,projectContext:a.projectContext,requirement:L,roleContext:"Final Gate 空小节定向修复",targetWords:620,maxWords:820,forbidDrawingImages:!1,qualityFeedback:`Final Gate 发现“${e}”为空小节。请基于证据补写该小节正式正文,包含检查责任、验收节点、资料闭环、整改复验要求,不得输出占位或解释。`,diagnostics:r,timeoutMs:3e5,signal:K})),o=!1;if(n&&(0,aj.V7)(n)>=80){let a=function(a,b,c){let d=a=>a.replace(/[\u00a0\u3000]/gu," ").replace(/^\d+(?:\.\d+)*\s+/u,"").trim(),e=a=>a.trim().replace(/^#{2,6}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]+\n+/u,"").trim(),f=a.split("\n"),g=0;for(let h=0;h<f.length;h+=1){let i=f[h],j=g;g+=i.length+1;let k=/^(#{3,4})\s+(.+)$/u.exec(i.trim());if(!k)continue;let l=d(k[2]);if(l!==b&&!l.includes(b)&&!b.includes(l))continue;let m=f.length;for(let a=h+1;a<f.length;a+=1)if(/^#{2,4}\s+/u.test(f[a].trim())){m=a;break}let n=m<f.length?f.slice(0,m).join("\n").length:a.length,o=e(c);return`${a.slice(0,j)}${i.trim()}
|
|
136
|
+
${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 c3(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 c4(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 c5(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 c6(a){if((0,az.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:c1(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 c7(a){let b=[],c=a.needs.slice(0,8),d=await Promise.all(c.map(async b=>{(0,az.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:c1(`${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 c8(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 c9(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)}function da(a,b){let c=new Set([b?.projectName,...b?.fingerprint?.projectNames||[]].filter(Boolean));return(b?.contaminationCandidates||[]).reduce((a,b)=>!b||b.length<6||c.has(b)?a:a.replace(RegExp(b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"gu"),"本项目工程"),a)}function db(a){let b=[{title:"项目特点、重点、难点分析",minNumericFacts:5,minObjectFacts:8,objectPatterns:[/建筑面积|面积/u,/层|六层/u,/结构形式|框架结构|装配式/u,/基础|桩/u,/工期|日历天/u,/质量标准|合格/u,/校园|场地|校区/u,/管网|接驳/u,/智能化|电梯|消防|暖通|供配电/u]},{title:"项目主要施工内容",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/道路|道排|排水|雨污水|管网|检查井/u,/沟槽|开挖|回填|基层|面层/u,/路灯|照明|电力|通信|弱电/u,/交通|标志|标线|安全设施/u,/绿化|景观|室外|附属/u,/消防|给排水|水电|电气/u,/工艺流程|施工方法|施工顺序/u,/验收|检测|资料闭环/u]},{title:"主要分部分项工程施工方案",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/道路|道排|排水|雨污水|管网|检查井/u,/沟槽|开挖|回填|基层|面层/u,/路灯|照明|电力|通信|弱电/u,/交通|标志|标线|安全设施/u,/绿化|景观|室外|附属/u,/消防|给排水|水电|电气/u,/工艺流程|施工方法|施工顺序/u,/验收|检测|资料闭环/u]},{title:"主要施工方法",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/道路|道排|排水|雨污水|管网|检查井/u,/沟槽|开挖|回填|基层|面层/u,/路灯|照明|电力|通信|弱电/u,/交通|标志|标线|安全设施/u,/绿化|景观|室外|附属/u,/消防|给排水|水电|电气/u,/工艺流程|施工方法|施工顺序/u,/验收|检测|资料闭环/u]}];return a.flatMap(a=>b.flatMap(b=>{let c=((a,b)=>{let c=a.split("\n"),d=c.findIndex(a=>/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u.test(a.trim())&&a.includes(b));if(d<0)return"";let e=/^(#{2,6})\s+/u.exec(c[d].trim())?.[1].length||3,f=c.length;for(let a=d+1;a<c.length;a+=1){let b=/^(#{2,6})\s+/u.exec(c[a].trim());if(b&&b[1].length<=e){f=a;break}}return c.slice(d,f).join("\n")})(a.content,b.title);if(!c)return[];let d=new Set(c.match(/\d+(?:\.\d+)?\s*(?:m²|㎡|平方米|m|mm|层|栋|日历天|天|%|台|套|根|处|个|kg|t|吨)/giu)||[]).size,e=b.objectPatterns.filter(a=>a.test(c)).length,f=[];return d<b.minNumericFacts&&f.push({level:"error",severity:"blocker",message:`${a.title} ${b.title} 参数落位不足:当前 ${d} 个,要求不少于 ${b.minNumericFacts} 个`,suggestion:"关键小节必须写入项目规模、工期、层数、结构、专业工程或验收参数等具体数值。"}),e<b.minObjectFacts&&f.push({level:"error",severity:"blocker",message:`${a.title} ${b.title} 专业事实覆盖不足:当前 ${e} 类,要求不少于 ${b.minObjectFacts} 类`,suggestion:"关键小节必须覆盖工程对象、专业范围、重点难点和对应施工内容。"}),f}))}function dc(a){let b=[{title:"项目特点、重点、难点分析",minChars:1800},{title:"项目主要施工内容",minChars:2200},{title:"主要分部分项工程施工方案",minChars:2200},{title:"主要施工方法",minChars:2200},{title:"危大工程专项施工方案审批流程",minChars:1200},{title:"原材料进场复试与见证取样",minChars:1200}];return a.flatMap(a=>b.flatMap(b=>{let c=((a,b)=>{let c=a.split("\n"),d=c.findIndex(a=>/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u.test(a.trim())&&a.includes(b));if(d<0)return"";let e=/^(#{2,6})\s+/u.exec(c[d].trim())?.[1].length||3,f=c.length;for(let a=d+1;a<c.length;a+=1){let b=/^(#{2,6})\s+/u.exec(c[a].trim());if(b&&b[1].length<=e){f=a;break}}return c.slice(d,f).join("\n")})(a.content,b.title);return!c||(0,aj.V7)(c)>=b.minChars?[]:[{level:"error",severity:"blocker",message:`${a.title} ${b.title} 正文不足:当前 ${(0,aj.V7)(c)} 字,要求不少于 ${b.minChars} 字`,suggestion:"关键小节必须补足项目数据、重点难点与施工内容对应关系后方可导出。"}]}))}async function dd(a){var b,c,e;let{chapterDraftsByOrder:f,chapterGenerationStagesByOrder:g,chapterGenerationStages:h,effectiveChapters:i,template:j,allEvidence:k,progressStages:l,documentSpec:m,projectMaterialSummary:n,domainProfile:o,documentBudget:p,input:q,generationDiagnostics:r,promptTexts:t,promptBindings:v,promptDocumentRules:w,projectRoot:x,projectId:y,readiness:z,factExtractionPromptTexts:A,hasExplicitOutline:B,missingItems:C,retrievalCoverageReports:D,failedChapterMessages:E,webResearchReport:F,indexHealth:G,agentWorkflow:H,emitProgress:I,withProgressHeartbeat:J}=a,{signal:K,requirement:L}=q,O=f.filter(a=>!!a);if(h.push(...g.filter(a=>!!a)),0===O.length)throw Error(`章节生成未完成:${E.join(";")||"没有生成任何有效章节"}`);if(B&&O.length<i.length)throw Error(`OUTLINE 指定 ${i.length} 章,实际只生成 ${O.length} 章:${E.join(";")||"部分章节未生成"}`);let P=O.flatMap(a=>a.evidence||[]);if(P.length>0){k.push(...P);let a=(0,s.QR)(k,{maxChars:Math.max(5e4,9e3*i.length),preservePinned:!0});k.splice(0,k.length,...a)}(0,az.Te)(K),(0,bb.fx)(l,(0,bb.X5)({type:"file_understanding",roleId:"multimodal-files",status:"running",message:"正在理解多模态参考文件"},{subtitle:"多模态参考文件"})),I(O);let Q={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{Q=await bV(x,k,K)}catch(a){if(K?.aborted)throw a;console.error("[gen] fileUnderstanding failed:",a)}for(let a of((0,bb.fx)(l,Q.stage),Q.notes))k.push({chapterId:"multimodal-file-understanding",filePath:"多模态模型文件理解结果",score:1,content:a,roleId:"multimodal-files",processingType:"reference",source:"multimodal"});let R=(0,s.QR)(k,{maxItems:Math.max(48,10*i.length),maxChars:Math.max(52e3,9e3*i.length),preservePinned:!0});k.splice(0,k.length,...R);let S=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}(j,k,m),U=aU(k,j,m),V=a$(k),W=a_(k,o),X={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,az.lG)(a.value).trim().length>=2).length<12:d.filter(b=>a.some(a=>(function(a,b){let c=(0,az.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}([...U,...V,...W],j,m)){let a=(0,s.QR)(k,{maxItems:48,maxChars:45e3,preservePinned:!0});try{X=await aV(a,A,j,m,K)}catch(a){if(K?.aborted)throw a;console.error("[gen] fact extraction failed:",a)}}for(let a of X.stages)(0,bb.fx)(l,a);let Y=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}([...U,...V,...W,...X.facts],k);for(let a of Y)S[a.key]=`${(0,az.lG)(a.value)}(来源:${a.sourceFile},角色:${a.roleId})`;let Z=ba(Y,aT(k),C,m,o),$=O.map(a=>{let b=m.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=(b?.requiredFactIds||[]).map(a=>m.factFields.find(b=>b.id===a)?.name).filter(Boolean),d=[...new Set([...a.missingFacts||[],...c].filter(Boolean))],e=d.filter(b=>!a.missingFacts.includes(b)),f=d.filter(b=>a.missingFacts.includes(b)),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)}}),_=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}}(O,Y,j);_.warnings=[..._.warnings,...z.warnings],_.errors=[..._.errors,...z.blockingIssues];let aa=[...k.reduce((a,b)=>a.set(b.filePath,(a.get(b.filePath)??0)+1),new Map).entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),ab=new Map;for(let a of k)ab.set(a.source||"unknown",(ab.get(a.source||"unknown")??0)+1);let ac=cp(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}(_,Z,O),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}($)),ad=O.map(a=>a.content).join("\n\n");ac=cp(ac,c0(ad,Y,{maxIssues:20}).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议 Agent Writer 在章节生成阶段优先落位可信基础事实;导出阶段不因未落位的低置信或泛化事实阻断。"})));let ag=Math.max(0,i.length-O.length);ac=cp(ac,[...ag>0?[{level:"error",severity:"blocker",message:`部分章节生成失败:${ag} 章`,suggestion:E.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。"}]:[]]),ac=cp(ac,O.flatMap(a=>{let b=i.find(b=>b.id===a.id);if(!b)return[];let c=bO({chapter:b,content:a.content,evidence:a.evidence||[]});return c.length>0?[{level:"warning",message:`${a.title} 小节事实或量化参数落位可继续优化:${c.slice(0,5).join(";")}`,suggestion:"建议在 Agent Writer 阶段扩大定向证据,不得在导出阶段补写。"}]:[]}));let al=[],am=[...l,...h];(0,bb.fx)(am,(0,bb.X5)({type:"reference",roleId:"knowledge-usage-report",status:"success",message:`资料使用报告:证据 ${k.length} 条,来源文件 ${aa.length} 份,结构化事实 ${Y.length} 条`,details:[`证据类型:${[...ab.entries()].map(([a,b])=>`${a} ${b}`).join(",")||"无"}`,`索引健康:可用切片 ${G.usableChunkCount} 条,待索引 ${G.pendingJobs} 个,向量 ${G.vectorStatus?.status||"unknown"}`]},{subtitle:"资料使用报告"})),(0,bb.fx)(am,(0,bb.X5)({type:"reference",roleId:"web-research-report",status:F.enabled?"success":"skipped",message:F.enabled?`联网增强:检索章节 ${new Set(F.chapters).size} 个,查询 ${F.queries.length} 个,使用公开资料 ${F.evidenceCount} 条`:"联网增强未开启",details:F.enabled?[`检索主题:${[...new Set(F.queries)].join(";")||"无"}`,`过滤结果:${F.filteredCount} 条`,"公开资料仅用于通用规范、政策、工艺和措施补充,不作为项目事实来源"]:["可在模型配置中开启联网增强"]},{subtitle:"联网增强报告"}));let an=ah(ai({templateId:j.id,templateName:j.name,title:j.outputTitle,requirement:L||"",projectRoot:x,projectId:y,exportSettings:j.exportSettings,generationSettings:j.generationSettings,facts:S,structuredFacts:Y,factsModel:Z,chapters:O,sources:aa,missingItems:[...new Set(C)],validation:_,validationIssues:ac,executionStages:am,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:al,partialChapters:O.map(a=>({id:a.id,title:a.title,chars:(0,aj.V7)(a.content),status:cG(a,p.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:O,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:w}),O,{forbidDrawingImages:!1,promptRules:w}).chapters.map(a=>{let b=i.find(b=>b.id===a.id)||a;return{...a,sections:a.sections||[],content:cX(a.content,b)}}),ao=ah(ai({templateId:j.id,templateName:j.name,title:j.outputTitle,requirement:L||"",projectRoot:x,projectId:y,exportSettings:j.exportSettings,generationSettings:j.generationSettings,facts:S,structuredFacts:Y,factsModel:Z,chapters:an,sources:aa,missingItems:[...new Set(C)],validation:_,validationIssues:ac,executionStages:am,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:al,partialChapters:[],checkpointChapters:an,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:w}),an,{forbidDrawingImages:!1,promptRules:w}).markdown;ao=T(N(M(da(cV(ao,Y),n))));let ap=cu({facts:Y,markdown:ao});ap.size>0&&am.push({type:"fact_extraction",roleId:"canonical-facts",status:"success",message:`已决策可信基础事实 ${ap.size} 项`,details:[...ap.values()].map(a=>`${a.label}=${a.value}(${a.source},confidence=${a.confidence})`).slice(0,12)}),ac=(ac=cp((0,ak.kQ)(m,ac,Z,an,ao,j.projectBindings||[],v),b5({markdown:ao,spec:m,summary:n}),b9({markdown:ao,facts:Y,summary:n,profile:o}),b6(ao,n),cW(ao,Y),ci({markdown:ao,chapters:an,factsModel:Z,template:j,promptBindings:v,promptDocumentRules:w}),c0(ao,[...Y,...Z.preciseFacts],{maxIssues:30}).map(a=>({...a,level:"error",severity:"blocker"})),(0,aj.PE)(j.generationSettings||j.exportSettings,ao).filter(a=>!(p.minPages&&/低于目标页数/u.test(a.message))),(0,aj.ty)(p,ao),af(ao,j),(0,ak.qK)(ao,an),ae(ao,w),cF(ao),ao.includes("WRITER_MISSING_SECTION")||ao.includes("Writer 未完成")?[{level:"error",severity:"blocker",category:"structure",owner:"system",message:"最终正文仍包含未完成小节标记",suggestion:"必须重新补写对应小节并删除 WRITER_MISSING_SECTION/Writer 未完成。"}]:[],dc(an),db(an))).map(a=>"error"===a.level?{...a,severity:a.severity||"blocker"}:a);let aq=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(cj[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:an,templateChapters:i,factsModel:Z,evidence:k}),ar=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,az.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=ca(a),d=ca(b);return!!(!d||d.length<2||c.includes(d))||(b.match(/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年|万元|元|平方米|㎡|m²|立方米|m³|米|m|mm|cm|台|套|人|项|%|MPa|kPa)?/giu)||[]).some(a=>ca(a).length>=2&&c.includes(ca(a)))}(a,b)?"unplaced":"used",confidence:e.confidence}))}return d}(ao,Z),as=(b={chapters:an,templateChapters:i,factsModel:Z}).chapters.map(a=>{let c=b.templateChapters.find(b=>b.id===a.id||b.title===a.title),d=function(a,b){let c=`${a.title} ${(b?.sections||a.sections||[]).join(" ")}`;return[{key:"structure",label:"结构完整",passed:(a.sections||b?.sections||[]).length>=2||/###\s+/u.test(a.content)},{key:"depth",label:"内容深度",passed:(0,aj.V7)(a.content)>=600},{key:"evidence",label:"证据绑定",passed:(a.evidence||[]).length>0},{key:"professional",label:"专业控制点",passed:/验收|复核|检查|交底|控制点|整改|闭环|台账|进场|工序/u.test(a.content)},{key:"schedule",label:"工期支撑",passed:!/进度|工期|节点/u.test(c)||/工期|节点|计划|纠偏|资源|穿插/u.test(a.content)},{key:"quality",label:"质量验收",passed:!/质量|验收/u.test(c)||/质量|验收|复验|隐蔽|检验批|整改/u.test(a.content)},{key:"safety",label:"安全闭环",passed:!/安全|文明|风险|危大/u.test(c)||/风险|检查|整改|应急|培训|交底/u.test(a.content)}]}(a,c),e=d.filter(a=>a.passed).length;return{chapterId:a.id,title:a.title,score:d.length?Math.round(e/d.length*100):100,checks:d,action:e===d.length?"章节覆盖完整。":"系统需补齐章节结构、证据绑定、专业控制点和跨章依赖。"}}),at=cl({markdown:ao,chapters:an,issues:ac=cp(ac,aq.score>=85?[]:[{level:"warning",message:`系统知识库覆盖确认率偏低:${aq.score}%`,suggestion:`${aq.remediation} 未确认事实域:${aq.unconfirmedDomains.map(a=>cj[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}个)`:""}`}))}(ar,{maxIssues:20}),as.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("、")}`})),D.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}。`}))),knowledgeCoverage:aq,factTraces:ar,chapterCoverage:as}),au=cn({issues:ac,qualityReport:at,knowledgeCoverage:aq,factTraces:ar,chapterCoverage:as});ac=cp(ac,cm(at),co(au));let av=(0,ak.Ai)(ac,Z,an),aw=[],ax=Array.from(new Map(av.blockingIssues.map(a=>/^(.*?)\s+(?:空小节|小节内容补写未完成):(.+)$/u.exec(a.message)).filter(a=>!!a).map(a=>[`${a[1].trim()}::${a[2].trim()}`,a])).values()).slice(0,3);if(ax.length>0){let b=[];for(let c of ax){let d=c[1].trim(),e=c[2].trim(),f=an.findIndex(a=>a.title===d||d.includes(a.title)||a.title.includes(d)),g=an[f],h=i.find(a=>a.id===g?.id||a.title===g?.title);if(f<0||!g||!h){b.push(`失败:${d}/${e} 未定位到章节`);continue}let m=(0,bb.X5)({type:"llm_review",roleId:`agent-final-gate-repair-${g.id}`,status:"running",message:`Final Gate 正在补写空小节:${d} / ${e}`,details:b},{subtitle:"Final Gate Repair"});(0,bb.fx)(l,m),(0,bb.fx)(aw,m),I(an,l);let n=await J(()=>bI({template:j,chapter:h,sectionTitle:e,evidence:g.evidence?.length?g.evidence:k,missingFacts:[],promptTexts:t,projectContext:a.projectContext,requirement:L,roleContext:"Final Gate 空小节定向修复",targetWords:620,maxWords:820,forbidDrawingImages:!1,qualityFeedback:`Final Gate 发现“${e}”为空小节。请基于证据补写该小节正式正文,包含检查责任、验收节点、资料闭环、整改复验要求,不得输出占位或解释。`,diagnostics:r,timeoutMs:3e5,signal:K})),o=!1;if(n&&(0,aj.V7)(n)>=80){let a=function(a,b,c){let d=a=>a.replace(/[\u00a0\u3000]/gu," ").replace(/^\d+(?:\.\d+)*\s+/u,"").trim(),e=a=>a.trim().replace(/^#{2,6}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]+\n+/u,"").trim(),f=a.split("\n"),g=0;for(let h=0;h<f.length;h+=1){let i=f[h],j=g;g+=i.length+1;let k=/^(#{3,4})\s+(.+)$/u.exec(i.trim());if(!k)continue;let l=d(k[2]);if(l!==b&&!l.includes(b)&&!b.includes(l))continue;let m=f.length;for(let a=h+1;a<f.length;a+=1)if(/^#{2,4}\s+/u.test(f[a].trim())){m=a;break}let n=m<f.length?f.slice(0,m).join("\n").length:a.length,o=e(c);return`${a.slice(0,j)}${i.trim()}
|
|
137
137
|
|
|
138
|
-
${o}${a.slice(n)}`}return a}(g.content,e,n);(o=a!==g.content)&&(an[f]={...g,content:cX(a,h)}),b.push(o?`成功:${d}/${e}(${(0,aj.V7)(n)}字)`:`失败:${d}/${e}(未定位到原小节块)`)}else b.push(`失败:${d}/${e}(${r.llm.lastError||"空响应"})`);let p=(0,bb.X5)({type:"llm_review",roleId:`agent-final-gate-repair-${g.id}`,status:o?"success":"failed",message:o?`Final Gate 空小节修复完成:${d} / ${e}`:`Final Gate 空小节修复失败:${d} / ${e}`,details:b},{subtitle:"Final Gate Repair"});(0,bb.fx)(l,p),(0,bb.fx)(aw,p),I(an,l)}ao=T(N(M(c9(cV((c={template:j,requirement:L,projectRoot:x,projectId:y,facts:S,structuredFacts:Y,factsModel:Z,chapters:an,sources:aa,missingItems:C,validation:_,validationIssues:ac,executionStages:am,assets:al,promptDocumentRules:w},ah(ai({templateId:c.template.id,templateName:c.template.name,title:c.template.outputTitle,requirement:c.requirement||"",projectRoot:c.projectRoot,projectId:c.projectId,exportSettings:c.template.exportSettings,generationSettings:c.template.generationSettings,facts:c.facts,structuredFacts:c.structuredFacts,factsModel:c.factsModel,chapters:c.chapters,sources:c.sources,missingItems:[...new Set(c.missingItems)],validation:c.validation,validationIssues:c.validationIssues,executionStages:c.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:c.assets,partialChapters:[],checkpointChapters:c.chapters,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:c.promptDocumentRules}),c.chapters,{forbidDrawingImages:!1,promptRules:c.promptDocumentRules}).markdown),Y),n))));let d=ac.filter(a=>!ax.some(b=>{let c=b[1].trim(),d=b[2].trim();return a.message.includes(c)&&a.message.includes(d)&&/空小节|小节内容补写未完成|正文小节正文过短|规划小节正文过短|缺少规划小节/u.test(a.message)}));ac=cp((0,ak.kQ)(m,d,Z,an,ao,j.projectBindings||[],v),b5({markdown:ao,spec:m,summary:n}),b9({markdown:ao,facts:Y,summary:n,profile:o}),b6(ao,n),cW(ao,Y),ci({markdown:ao,chapters:an,factsModel:Z,template:j,promptBindings:v,promptDocumentRules:w}),c_(ao,[...Y,...Z.preciseFacts],{maxIssues:30}).map(a=>({...a,level:"error",severity:"blocker"})),(0,aj.PE)(j.generationSettings||j.exportSettings,ao).filter(a=>!(p.minPages&&/低于目标页数/u.test(a.message))),(0,aj.ty)(p,ao),af(ao,j),(0,ak.qK)(ao,an),ae(ao,w),cF(ao),ao.includes("WRITER_MISSING_SECTION")||ao.includes("Writer 未完成")?[{level:"error",severity:"blocker",category:"structure",owner:"system",message:"最终正文仍包含未完成小节标记",suggestion:"必须重新补写对应小节并删除 WRITER_MISSING_SECTION/Writer 未完成。"}]:[],db(an),da(an)).map(a=>"error"===a.level?{...a,severity:a.severity||"blocker"}:a),av=(0,ak.Ai)(ac,Z,an)}at=cl({markdown:ao,chapters:an,issues:ac,knowledgeCoverage:aq,factTraces:ar,chapterCoverage:as}),au=cn({issues:ac,qualityReport:at,knowledgeCoverage:aq,factTraces:ar,chapterCoverage:as}),ac=cp(ac,cm(at),co(au)),av=(0,ak.Ai)(ac,Z,an),at=cl({markdown:ao,chapters:an,issues:ac,knowledgeCoverage:aq,factTraces:ar,chapterCoverage:as});let ay=[{key:"export-gate",label:"导出门禁",passed:(e={exportGate:av,qualityReport:at,repairStrategies:au}).exportGate.passed,message:e.exportGate.passed?"导出门禁通过":`仍有 ${e.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:e.qualityReport.passed,message:`${e.qualityReport.deliveryProbability}% / ${e.qualityReport.target}%`},{key:"factuality",label:"事实准确性",passed:e.qualityReport.scores.factuality>=85,message:`${e.qualityReport.scores.factuality}/100`},{key:"evidence-coverage",label:"知识库证据覆盖",passed:e.qualityReport.scores.evidenceCoverage>=85,message:`${e.qualityReport.scores.evidenceCoverage}/100`},{key:"professional-depth",label:"专业深度",passed:e.qualityReport.scores.professionalDepth>=80,message:`${e.qualityReport.scores.professionalDepth}/100`},{key:"repair-strategies",label:"修复策略",passed:0===e.repairStrategies.filter(a=>"high"===a.priority).length,message:e.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}],aA=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:r}),aB=(0,ak.Ff)(ac);r.quality.blockingCount+=aB.blocking,r.quality.importantCount+=aB.important,r.quality.minorCount+=aB.minor;let aC=av.blockingIssues.length,aD=[...am,...aw].map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:aC>0?"failed":"success",message:`阻断 ${aC},问题 ${ac.length}`}:"export_ready"===a.type?{...a,status:av.passed?"success":"failed",message:av.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:a);aD.push((0,bb.X5)({type:"validation",roleId:"agent-final-gate",status:av.passed?"success":"failed",message:av.passed?"Agent 最终门禁通过":`Agent 最终门禁阻断 ${aC} 个问题`,details:av.blockingIssues.slice(0,12).map(a=>a.message)},{subtitle:"Agent 最终门禁"})),aD.push((0,bb.X5)({type:"validation",roleId:"document-delivery-score",status:at.passed?"success":"failed",message:at.summary,details:at.actions},{subtitle:"交付评分"})),aD.push((0,bb.X5)({type:"reference",roleId:"knowledge-coverage",status:aq.score>=85?"success":"failed",message:`资料确认覆盖率:${aq.score}%(证据 ${aq.evidenceCount} 条,文件 ${aq.confirmedFiles} 份)`,details:[aq.remediation]},{subtitle:"资料覆盖"})),aD.push((0,bb.X5)({type:"validation",roleId:"document-review-checklist",status:ay.every(a=>a.passed)?"success":"failed",message:`交付复核清单:通过 ${ay.filter(a=>a.passed).length}/${ay.length}`,details:ay.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let aE=[...r.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(",");aD.push((0,bb.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${r.llm.calls} 次,失败 ${r.llm.failures} 次,瞬态重试 ${r.llm.retries} 次,峰值并行 ${r.llm.maxActive},检索 ${r.evidence.searchQueries} 次/${Math.round(r.evidence.searchMs/1e3)} 秒,证据上下文 ${r.evidence.contextChars} 字,噪声过滤 ${r.evidence.filteredNoise} 条,质量问题 阻断${r.quality.blockingCount}/重要${r.quality.importantCount}/轻微${r.quality.minorCount}${aE?`,Top耗时:${aE}`:""}`},{subtitle:"后台诊断"}));let aF=an.map(a=>({...a,evidence:(0,s.QR)(a.evidence||[],{maxItems:12,maxChars:9e3,preservePinned:!0})}));return an=aF,{templateId:j.id,templateName:j.name,title:j.outputTitle,requirement:L||"",projectRoot:x,projectId:y,exportSettings:j.exportSettings,generationSettings:j.generationSettings,facts:S,structuredFacts:Y,factsModel:Z,chapters:aF,sources:aa,missingItems:[...new Set(C)],validation:_,validationIssues:ac,exportGate:av,executionStages:aD,assets:al,partialChapters:an.map(a=>({id:a.id,title:a.title,chars:(0,aj.V7)(a.content),status:cG(a,p.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:aF,agentWorkflow:H,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:r,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:j,chapters:i,requirement:L}),knowledgeCoverage:aq,factTraces:ar,chapterCoverage:as,retrievalCoverage:D,qualityReport:at,repairStrategies:au,reviewChecklist:ay,workflowVersion:cq,telemetry:aA},generatedAt:Date.now(),markdown:ao}}var dd=c(70963);let de=["知识库","系统暂未","项目资料暂未","资料未明确","暂未明确","待确认","待资料复核","待系统","兜底","未检索到","资料不足","无法确认","建议补充","不适用","COL","可核验信息","围绕"];function df(a){return a.replace(/\s+/gu,"").toLowerCase()}function dg(a){return(0,az.lG)(a.value).replace(/\s+/gu," ").trim()}function dh(a,b){let c=df(`${a.fieldId||""} ${a.fieldName||""} ${a.key} ${(0,az.lG)(a.value)}`.replace(/\s+/gu," ").trim());return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(df(a)))}function di(a,b){let c=[...a.works.map(a=>`工程:${a.name} ${a.scope}`),...a.methods.map(a=>`工法:${a.name} ${(a.applicableWorks||[]).join("、")}`),...a.resources.map(a=>`资源:${a.name} ${a.spec} ${a.quantity}${a.unit}`),...a.schedule.map(a=>`工期:${a.milestone} ${a.duration}`),...a.standards.map(a=>`标准:${a.code} ${a.description}`),...a.risks.map(a=>`风险:${a.risk} ${a.mitigation}`),...a.requirements.map(a=>`要求:${a.category} ${a.detail}`),...a.siteConditions.map(a=>`现场:${a.condition} ${a.impact}`)],d=df(b);return c.filter(a=>df(a).includes(d)||b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(b=>df(a).includes(df(b))))}function dj(a){let b=[];return/重点|难点|危大|风险|安全|应急/u.test(a)&&b.push("安全 文明 危大 风险 应急 临边 洞口 消防 临电 高处 起重 吊装 基坑 脚手架 模板 支护 图纸 施工说明 审查意见"),/工期|进度|节点|计划/u.test(a)&&b.push("工期 日历天 节点 进度 计划 开工 竣工 关键线路"),/质量|验收|标准|实测|通病/u.test(a)&&b.push("质量 验收 合格 标准 规范 检验批 隐蔽 复试 样板"),/资源|材料|机械|人材机|设备/u.test(a)&&b.push("清单 工程量 材料 设备 机械 劳动力 规格 型号 数量 单位"),/概况|说明|依据|范围/u.test(a)&&b.push("工程名称 项目名称 建设地点 建筑面积 建设规模 招标范围 施工范围"),/部署|施工|流水|区段|组织/u.test(a)&&b.push("施工 组织 部署 区段 流水 作业面 工序 穿插 图纸 清单"),b}function dk(a){return/项目特点.*重点.*难点|重点.*难点.*分析/u.test(a)?"系统识别本项目特点、施工重点、施工难点、形成原因、影响范围和应对措施,必须落位项目规模、结构形式、工期、专业范围、现场约束等具体事实,并为“项目主要施工内容”提供逐项对应依据。":/项目主要施工内容/u.test(a)?"按专业工程和关键工序展开施工内容,必须逐项响应“项目特点、重点、难点分析”中的重点难点,说明施工范围、实施内容、控制措施、验收节点和资料闭环。":/工期|进度|节点|计划/u.test(a)?"使用项目工期、节点和资源事实说明进度组织要求。":/质量|验收|标准|实测/u.test(a)?"使用项目质量目标、验收标准和工序事实说明质量控制要求。":/安全|危大|风险|应急/u.test(a)?"使用项目风险、危大工程和安全文明事实说明安全管控要求。":/资源|材料|机械|人材机/u.test(a)?"使用清单、材料、设备和劳动力事实说明资源配置要求。":/概况|说明|依据/u.test(a)?"使用项目基础事实说明编制边界和工程概况。":"使用已确认项目事实形成正式施工组织内容。"}function dl(a){let b=a.facts.slice(0,18).map(a=>`- ${a.key}:${dg(a)}${a.sourceFile?`(来源:${a.sourceFile})`:""}`).join("\n"),c=a.sections.map((a,b)=>`${b+1}. 必须输出三级标题:### ${a.title}
|
|
138
|
+
${o}${a.slice(n)}`}return a}(g.content,e,n);(o=a!==g.content)&&(an[f]={...g,content:cX(a,h)}),b.push(o?`成功:${d}/${e}(${(0,aj.V7)(n)}字)`:`失败:${d}/${e}(未定位到原小节块)`)}else b.push(`失败:${d}/${e}(${r.llm.lastError||"空响应"})`);let p=(0,bb.X5)({type:"llm_review",roleId:`agent-final-gate-repair-${g.id}`,status:o?"success":"failed",message:o?`Final Gate 空小节修复完成:${d} / ${e}`:`Final Gate 空小节修复失败:${d} / ${e}`,details:b},{subtitle:"Final Gate Repair"});(0,bb.fx)(l,p),(0,bb.fx)(aw,p),I(an,l)}ao=T(N(M(da(cV((c={template:j,requirement:L,projectRoot:x,projectId:y,facts:S,structuredFacts:Y,factsModel:Z,chapters:an,sources:aa,missingItems:C,validation:_,validationIssues:ac,executionStages:am,assets:al,promptDocumentRules:w},ah(ai({templateId:c.template.id,templateName:c.template.name,title:c.template.outputTitle,requirement:c.requirement||"",projectRoot:c.projectRoot,projectId:c.projectId,exportSettings:c.template.exportSettings,generationSettings:c.template.generationSettings,facts:c.facts,structuredFacts:c.structuredFacts,factsModel:c.factsModel,chapters:c.chapters,sources:c.sources,missingItems:[...new Set(c.missingItems)],validation:c.validation,validationIssues:c.validationIssues,executionStages:c.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:c.assets,partialChapters:[],checkpointChapters:c.chapters,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:c.promptDocumentRules}),c.chapters,{forbidDrawingImages:!1,promptRules:c.promptDocumentRules}).markdown),Y),n))));let d=ac.filter(a=>!ax.some(b=>{let c=b[1].trim(),d=b[2].trim();return a.message.includes(c)&&a.message.includes(d)&&/空小节|小节内容补写未完成|正文小节正文过短|规划小节正文过短|缺少规划小节/u.test(a.message)}));ac=cp((0,ak.kQ)(m,d,Z,an,ao,j.projectBindings||[],v),b5({markdown:ao,spec:m,summary:n}),b9({markdown:ao,facts:Y,summary:n,profile:o}),b6(ao,n),cW(ao,Y),ci({markdown:ao,chapters:an,factsModel:Z,template:j,promptBindings:v,promptDocumentRules:w}),c0(ao,[...Y,...Z.preciseFacts],{maxIssues:30}).map(a=>({...a,level:"error",severity:"blocker"})),(0,aj.PE)(j.generationSettings||j.exportSettings,ao).filter(a=>!(p.minPages&&/低于目标页数/u.test(a.message))),(0,aj.ty)(p,ao),af(ao,j),(0,ak.qK)(ao,an),ae(ao,w),cF(ao),ao.includes("WRITER_MISSING_SECTION")||ao.includes("Writer 未完成")?[{level:"error",severity:"blocker",category:"structure",owner:"system",message:"最终正文仍包含未完成小节标记",suggestion:"必须重新补写对应小节并删除 WRITER_MISSING_SECTION/Writer 未完成。"}]:[],dc(an),db(an)).map(a=>"error"===a.level?{...a,severity:a.severity||"blocker"}:a),av=(0,ak.Ai)(ac,Z,an)}at=cl({markdown:ao,chapters:an,issues:ac,knowledgeCoverage:aq,factTraces:ar,chapterCoverage:as}),au=cn({issues:ac,qualityReport:at,knowledgeCoverage:aq,factTraces:ar,chapterCoverage:as}),ac=cp(ac,cm(at),co(au)),av=(0,ak.Ai)(ac,Z,an),at=cl({markdown:ao,chapters:an,issues:ac,knowledgeCoverage:aq,factTraces:ar,chapterCoverage:as});let ay=[{key:"export-gate",label:"导出门禁",passed:(e={exportGate:av,qualityReport:at,repairStrategies:au}).exportGate.passed,message:e.exportGate.passed?"导出门禁通过":`仍有 ${e.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:e.qualityReport.passed,message:`${e.qualityReport.deliveryProbability}% / ${e.qualityReport.target}%`},{key:"factuality",label:"事实准确性",passed:e.qualityReport.scores.factuality>=85,message:`${e.qualityReport.scores.factuality}/100`},{key:"evidence-coverage",label:"知识库证据覆盖",passed:e.qualityReport.scores.evidenceCoverage>=85,message:`${e.qualityReport.scores.evidenceCoverage}/100`},{key:"professional-depth",label:"专业深度",passed:e.qualityReport.scores.professionalDepth>=80,message:`${e.qualityReport.scores.professionalDepth}/100`},{key:"repair-strategies",label:"修复策略",passed:0===e.repairStrategies.filter(a=>"high"===a.priority).length,message:e.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}],aA=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:r}),aB=(0,ak.Ff)(ac);r.quality.blockingCount+=aB.blocking,r.quality.importantCount+=aB.important,r.quality.minorCount+=aB.minor;let aC=av.blockingIssues.length,aD=[...am,...aw].map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:aC>0?"failed":"success",message:`阻断 ${aC},问题 ${ac.length}`}:"export_ready"===a.type?{...a,status:av.passed?"success":"failed",message:av.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:a);aD.push((0,bb.X5)({type:"validation",roleId:"agent-final-gate",status:av.passed?"success":"failed",message:av.passed?"Agent 最终门禁通过":`Agent 最终门禁阻断 ${aC} 个问题`,details:av.blockingIssues.slice(0,12).map(a=>a.message)},{subtitle:"Agent 最终门禁"})),aD.push((0,bb.X5)({type:"validation",roleId:"document-delivery-score",status:at.passed?"success":"failed",message:at.summary,details:at.actions},{subtitle:"交付评分"})),aD.push((0,bb.X5)({type:"reference",roleId:"knowledge-coverage",status:aq.score>=85?"success":"failed",message:`资料确认覆盖率:${aq.score}%(证据 ${aq.evidenceCount} 条,文件 ${aq.confirmedFiles} 份)`,details:[aq.remediation]},{subtitle:"资料覆盖"})),aD.push((0,bb.X5)({type:"validation",roleId:"document-review-checklist",status:ay.every(a=>a.passed)?"success":"failed",message:`交付复核清单:通过 ${ay.filter(a=>a.passed).length}/${ay.length}`,details:ay.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let aE=[...r.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(",");aD.push((0,bb.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${r.llm.calls} 次,失败 ${r.llm.failures} 次,瞬态重试 ${r.llm.retries} 次,峰值并行 ${r.llm.maxActive},检索 ${r.evidence.searchQueries} 次/${Math.round(r.evidence.searchMs/1e3)} 秒,证据上下文 ${r.evidence.contextChars} 字,噪声过滤 ${r.evidence.filteredNoise} 条,质量问题 阻断${r.quality.blockingCount}/重要${r.quality.importantCount}/轻微${r.quality.minorCount}${aE?`,Top耗时:${aE}`:""}`},{subtitle:"后台诊断"}));let aF=an.map(a=>({...a,evidence:(0,s.QR)(a.evidence||[],{maxItems:12,maxChars:9e3,preservePinned:!0})}));return an=aF,{templateId:j.id,templateName:j.name,title:j.outputTitle,requirement:L||"",projectRoot:x,projectId:y,exportSettings:j.exportSettings,generationSettings:j.generationSettings,facts:S,structuredFacts:Y,factsModel:Z,chapters:aF,sources:aa,missingItems:[...new Set(C)],validation:_,validationIssues:ac,exportGate:av,executionStages:aD,assets:al,partialChapters:an.map(a=>({id:a.id,title:a.title,chars:(0,aj.V7)(a.content),status:cG(a,p.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:aF,agentWorkflow:H,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:r,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:j,chapters:i,requirement:L}),knowledgeCoverage:aq,factTraces:ar,chapterCoverage:as,retrievalCoverage:D,qualityReport:at,repairStrategies:au,reviewChecklist:ay,workflowVersion:cq,telemetry:aA},generatedAt:Date.now(),markdown:ao}}var de=c(70963);let df=["知识库","系统暂未","项目资料暂未","资料未明确","暂未明确","待确认","待资料复核","待系统","兜底","未检索到","资料不足","无法确认","建议补充","不适用","COL","可核验信息","围绕"];function dg(a){return a.replace(/\s+/gu,"").toLowerCase()}function dh(a){return(0,az.lG)(a.value).replace(/\s+/gu," ").trim()}function di(a,b){let c=dg(`${a.fieldId||""} ${a.fieldName||""} ${a.key} ${(0,az.lG)(a.value)}`.replace(/\s+/gu," ").trim());return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(dg(a)))}function dj(a,b){let c=[...a.works.map(a=>`工程:${a.name} ${a.scope}`),...a.methods.map(a=>`工法:${a.name} ${(a.applicableWorks||[]).join("、")}`),...a.resources.map(a=>`资源:${a.name} ${a.spec} ${a.quantity}${a.unit}`),...a.schedule.map(a=>`工期:${a.milestone} ${a.duration}`),...a.standards.map(a=>`标准:${a.code} ${a.description}`),...a.risks.map(a=>`风险:${a.risk} ${a.mitigation}`),...a.requirements.map(a=>`要求:${a.category} ${a.detail}`),...a.siteConditions.map(a=>`现场:${a.condition} ${a.impact}`)],d=dg(b);return c.filter(a=>dg(a).includes(d)||b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(b=>dg(a).includes(dg(b))))}function dk(a){let b=[];return/重点|难点|危大|风险|安全|应急/u.test(a)&&b.push("安全 文明 危大 风险 应急 临边 洞口 消防 临电 高处 起重 吊装 基坑 脚手架 模板 支护 图纸 施工说明 审查意见"),/工期|进度|节点|计划/u.test(a)&&b.push("工期 日历天 节点 进度 计划 开工 竣工 关键线路"),/质量|验收|标准|实测|通病/u.test(a)&&b.push("质量 验收 合格 标准 规范 检验批 隐蔽 复试 样板"),/资源|材料|机械|人材机|设备/u.test(a)&&b.push("清单 工程量 材料 设备 机械 劳动力 规格 型号 数量 单位"),/概况|说明|依据|范围/u.test(a)&&b.push("工程名称 项目名称 建设地点 建筑面积 建设规模 招标范围 施工范围"),/部署|施工|流水|区段|组织/u.test(a)&&b.push("施工 组织 部署 区段 流水 作业面 工序 穿插 图纸 清单"),b}function dl(a){return/项目特点.*重点.*难点|重点.*难点.*分析/u.test(a)?"系统识别本项目特点、施工重点、施工难点、形成原因、影响范围和应对措施,必须落位项目规模、结构形式、工期、专业范围、现场约束等具体事实,并为“项目主要施工内容”提供逐项对应依据。":/项目主要施工内容/u.test(a)?"按专业工程和关键工序展开施工内容,必须逐项响应“项目特点、重点、难点分析”中的重点难点,说明施工范围、实施内容、控制措施、验收节点和资料闭环。":/工期|进度|节点|计划/u.test(a)?"使用项目工期、节点和资源事实说明进度组织要求。":/质量|验收|标准|实测/u.test(a)?"使用项目质量目标、验收标准和工序事实说明质量控制要求。":/安全|危大|风险|应急/u.test(a)?"使用项目风险、危大工程和安全文明事实说明安全管控要求。":/资源|材料|机械|人材机/u.test(a)?"使用清单、材料、设备和劳动力事实说明资源配置要求。":/概况|说明|依据/u.test(a)?"使用项目基础事实说明编制边界和工程概况。":"使用已确认项目事实形成正式施工组织内容。"}function dm(a){let b=a.facts.slice(0,18).map(a=>`- ${a.key}:${dh(a)}${a.sourceFile?`(来源:${a.sourceFile})`:""}`).join("\n"),c=a.sections.map((a,b)=>`${b+1}. 必须输出三级标题:### ${a.title}
|
|
139
139
|
写作目标:${a.objective}
|
|
140
140
|
支撑情况:证据 ${a.evidenceIds.length},事实 ${a.factIds.length},图谱 ${a.graphNodeIds.length}
|
|
141
141
|
最小正文深度:${a.minChars} 字`).join("\n");return["【Agent 章节任务】",`任务ID:${a.taskId}`,`章节:${a.title}`,a.graphContext?`图谱上下文:
|
|
142
142
|
${a.graphContext}`:"",b?`事实卡:
|
|
143
143
|
${b}`:"",`小节任务:
|
|
144
|
-
${c}`,"写作要求:必须严格按“小节任务”逐项输出,每个任务都必须保留完全一致的三级标题“### 小节标题”;不得合并小节、不得改写小节标题、不得省略小节;只使用事实卡、图谱上下文和绑定证据;不得输出后台话术、兜底措辞、待确认、不适用;缺少事实的小节不得编造。"].filter(Boolean).join("\n\n")}function dm(a){let b=[],c=a.draft.content||"";for(let d of de)"围绕"!==d&&c.includes(d)&&b.push({level:"error",severity:"blocker",category:"style",owner:"system",message:`${a.draft.title} 正文包含禁止话术:${d}`,suggestion:"改为事实支撑的正式表达;缺失事实不得占位。"});for(let d of a.task.sections){let a=function(a,b){let c=a.split("\n"),d=df(b),e=-1;for(let a=0;a<c.length;a+=1){if(!/^\s*#{2,4}\s+/u.test(c[a]))continue;let b=df(c[a].replace(/^\s*#{2,4}\s*/u,"").replace(/^\s*(?:\d+(?:\.\d+)*|[一二三四五六七八九十]+)[、..]\s*/u,"").trim());if(b===d||b.includes(d)||d.includes(b)){e=a+1;break}}if(e<0)return"";let f=c.length;for(let a=e;a<c.length;a+=1)if(/^\s*#{2,4}\s+/u.test(c[a])){f=a;break}return c.slice(e,f).join("\n").trim()}(c,d.title);if(a.includes("[WRITER_MISSING_SECTION]"))b.push({level:"error",severity:"blocker",category:"structure",owner:"system",message:`${d.title} Writer 未完成`,suggestion:"Repairer 必须基于该小节事实卡和证据生成正式正文,并删除 WRITER_MISSING_SECTION 标记。"});else if((0,aj.V7)(a)<d.minChars){let a=/项目特点.*重点.*难点|重点.*难点.*分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试|见证取样/u.test(d.title);b.push({level:a?"error":"warning",severity:a?"blocker":"warning",category:"structure",owner:"system",message:`${d.title} 正文不足,未达到任务最小深度`,suggestion:a?"关键小节必须基于项目事实和对应关系重写补足;不得仅保留概述性文字。":"应基于该小节事实卡和证据重新生成,不得使用标题占位。"})}d.ready||b.push(...d.issues)}let d=a.context.materialScope.selectedRoots;for(let e of a.context.materialScope.rejectedRoots)e&&!d.includes(e)&&c.includes(e)&&b.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 混入非当前资料组名称:${e}`,suggestion:"必须删除跨项目内容并重新检索当前资料组证据。"});let e=a.task.facts.filter(a=>{let b=dg(a);return b.length>=2&&c.includes(b.slice(0,Math.min(18,b.length)))}).length;a.task.facts.length>0&&0===e&&b.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 未落位章节事实卡`,suggestion:"必须将章节事实卡中的关键事实写入对应小节。"});let f=b.filter(a=>"error"===a.level||"blocker"===a.severity),g=b.filter(a=>/正文不足|未落位章节事实卡/u.test(a.message));return{issues:b,supportedFacts:e,unsupportedSignals:b.map(a=>a.message),repairable:b.length>0&&(b.length<=6||g.length===b.length||0===f.length)}}function dn(a){return a.replace(/\s+/gu,"").toLowerCase()}var dp=c(14070);async function dq(a){let b;(0,az.Te)(a.signal);let c=(0,d.QJ)(a.templateId);if(!c)throw Error("Document template not found");let o=e.resolve(a.projectRoot||(0,g.aY)());if(!o)throw Error("No knowledge base project found");let p=(0,f.computeProjectId)(o),q=c,v=(0,g.Qh)(),w=[],x=[],y=(b,c=D)=>{let d=b?[...b].sort((a,b)=>{let c=x.indexOf(a.id),d=x.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)},z=Math.max(15e3,Math.min(6e4,Number(process.env.DOCUMENT_GENERATION_HEARTBEAT_MS??3e4))),A=async(b,c=D)=>{let d=setInterval(()=>{a.signal?.aborted||y(w,c)},z);try{return await b()}finally{clearInterval(d)}},B=(0,d.N6)(q)||"none",C=(0,i.Mu)(B)?.name||B,D=[(0,bb.X5)({type:"role_binding",roleId:B,status:"running",message:`生成任务已创建,正在读取模板与角色配置:${q.name}`,details:[`当前项目:${p}`,`资料目录:${e.join(o,"knowledgeBase")}`,"正在读取项目资料包和提示词配置"],progress:{current:1,total:4,label:"初始化配置"}},{subtitle:C,roleName:C,order:0})];y();let E=(0,d.bj)(q),F=E.bindings;(0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在分析模板规范、用户要求与项目资料包",details:["解析 OUTLINE 与模板章节","读取项目资料包","自动识别资料类型并构建项目理解"],progress:{current:1,total:3,label:"准备分析"}},{subtitle:"生成准备",order:D.length})),y();let G=cE({template:q,requirement:a.requirement,projectRoot:o,facts:[]}).materialScope.selectedFiles;if(0===G.length)throw Error("模板未绑定可用项目资料包,请先在模板中绑定需要参与生成的项目文件夹。");let H=(0,bh.W9)(o,q,{requirement:a.requirement}),I=(0,bh._n)(q,H),{kindByPath:J,processingByPath:K}=(0,bh.Hz)(H),L=bg([...E.writerPrompts,...E.chapterPrompts]),M=(0,t.cs)([{text:a.requirement,source:"用户需求",strict:!0},{text:L,source:"提示词角色",strict:!0}]),N=M.length>=2;N&&(q={...c,chapters:M});let O=await A(()=>Promise.resolve((0,k.P)(o,{requirement:a.requirement,boundFilePaths:G})));(0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在生成自动文档规格并评估生成准备度",details:[`项目资料:${G.length} 份`,`资料类型:${Object.values(H.groups).filter(a=>a.length>0).length} 类`,"生成事实字段与章节约束"],progress:{current:2,total:3,label:"规格评估"}},{subtitle:"生成准备",order:D.length})),y();let P=await A(()=>Promise.resolve((0,j.x)(q,a.requirement||""))),Q=P.spec,R=function(a,b=""){let c=`${a?.id||""} ${a?.name||""} ${a?.category||""} ${a?.description||""} ${a?.outputTitle||""} ${b}`;return/施工组织设计|施工方案|危大工程|人、材、机|安全文明施工/u.test(c)?m:l}(q,a.requirement||""),T=(0,r.$)({template:q,spec:Q,summary:O,resolvedRoles:[]});if(!T.ready)throw Error(`生成准备度不足:${T.blockingIssues.join(";")}`);let U=[I.prompt,(0,k.F)(O,{publicSafe:!0}),(0,j.N)(Q,P.sourceHash,{publicSafe:!0}),(0,r.R)(T,{publicSafe:!0})].filter(Boolean).join("\n\n"),V=[I.prompt,(0,k.F)(O),(0,j.N)(Q,P.sourceHash),(0,r.R)(T)].filter(Boolean).join("\n\n"),W=bg([...E.writerPrompts,...E.formattingPrompts]),X=bg([...E.writerPrompts,...E.chapterPrompts,...E.formattingPrompts]),Y=bg(E.prompts),Z=(0,h.I)().load().webAccess||{enabled:!1,allowProjectFacts:!1,maxQueriesPerChapter:2,maxResultsPerQuery:3,trustedDomains:[]},$=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=bt(b,"封面"),f=bt(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:bq(b),forbiddenPatterns:br(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=bq(c),g=br(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&&!bl(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:bs(c,RegExp(`${a.title.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}|${a.title.slice(0,6).replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}`,"u")).slice(0,8),mustNotInclude:bs(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:bs(a.content,/重点|关注|围绕|响应|体系|措施|质量|安全|工期|资源/u).slice(0,8),mustDo:bs(a.content,/必须|应当|需要|确保|严格/u).slice(0,10),mustNotDo:bs(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:[U,Y].filter(Boolean).join("\n\n"),requirement:a.requirement,template:q,rolePrompts:E.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`以下规则由系统运行时从用户绑定指令中自动抽取,不作为用户可编辑内容。生成、检查和修复必须共同遵守:
|
|
144
|
+
${c}`,"写作要求:必须严格按“小节任务”逐项输出,每个任务都必须保留完全一致的三级标题“### 小节标题”;不得合并小节、不得改写小节标题、不得省略小节;只使用事实卡、图谱上下文和绑定证据;不得输出后台话术、兜底措辞、待确认、不适用;缺少事实的小节不得编造。"].filter(Boolean).join("\n\n")}function dn(a){return a.replace(/^\s*#{2,4}\s*/u,"").replace(/^\s*(?:\d+(?:\.\d+)*|[一二三四五六七八九十]+)[、..]\s*/u,"").trim()}function dp(a){return dg(dn(a)).replace(/施工(?=方案|流程|方法)/gu,"").replace(/专项(?=方案)/gu,"").replace(/项目|工程|主要|重点|技术/gu,"").replace(/\s/gu,"")}function dq(a){let b=[],c=a.draft.content||"";for(let d of df)"围绕"!==d&&c.includes(d)&&b.push({level:"error",severity:"blocker",category:"style",owner:"system",message:`${a.draft.title} 正文包含禁止话术:${d}`,suggestion:"改为事实支撑的正式表达;缺失事实不得占位。"});for(let d of a.task.sections){let a=function(a,b){let c=a.split("\n"),d=dg(dn(b)),e=dp(b),f=[],g=-1,h=a=>{if(g<0)return;let b=c.slice(g,a).join("\n").trim();b&&f.push(b),g=-1};for(let a=0;a<c.length;a+=1){var i;if(!/^\s*#{2,4}\s+/u.test(c[a]))continue;h(a);let b=(i=dn(c[a]),dg(dn(i))),f=dp(dn(c[a]));(b===d||b.includes(d)||d.includes(b)||f===e||f.includes(e)||e.includes(f))&&(g=a+1)}return h(c.length),f.sort((a,b)=>(0,aj.V7)(b)-(0,aj.V7)(a))[0]||""}(c,d.title);if(a.includes("[WRITER_MISSING_SECTION]"))b.push({level:"error",severity:"blocker",category:"structure",owner:"system",message:`${d.title} Writer 未完成`,suggestion:"Repairer 必须基于该小节事实卡和证据生成正式正文,并删除 WRITER_MISSING_SECTION 标记。"});else if((0,aj.V7)(a)<d.minChars){let a=/项目特点.*重点.*难点|重点.*难点.*分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试|见证取样/u.test(d.title);b.push({level:a?"error":"warning",severity:a?"blocker":"warning",category:"structure",owner:"system",message:`${d.title} 正文不足,未达到任务最小深度`,suggestion:a?"关键小节必须基于项目事实和对应关系重写补足;不得仅保留概述性文字。":"应基于该小节事实卡和证据重新生成,不得使用标题占位。"})}d.ready||b.push(...d.issues)}let d=a.context.materialScope.selectedRoots;for(let e of a.context.materialScope.rejectedRoots)e&&!d.includes(e)&&c.includes(e)&&b.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 混入非当前资料组名称:${e}`,suggestion:"必须删除跨项目内容并重新检索当前资料组证据。"});let e=a.task.facts.filter(a=>{let b=dh(a);return b.length>=2&&c.includes(b.slice(0,Math.min(18,b.length)))}).length;a.task.facts.length>0&&0===e&&b.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 未落位章节事实卡`,suggestion:"必须将章节事实卡中的关键事实写入对应小节。"});let f=b.filter(a=>"error"===a.level||"blocker"===a.severity),g=b.filter(a=>/正文不足|未落位章节事实卡/u.test(a.message));return{issues:b,supportedFacts:e,unsupportedSignals:b.map(a=>a.message),repairable:b.length>0&&(b.length<=6||g.length===b.length||0===f.length)}}function dr(a){return a.replace(/\s+/gu,"").toLowerCase()}var ds=c(14070);async function dt(a){let b;(0,az.Te)(a.signal);let c=(0,d.QJ)(a.templateId);if(!c)throw Error("Document template not found");let o=e.resolve(a.projectRoot||(0,g.aY)());if(!o)throw Error("No knowledge base project found");let p=(0,f.computeProjectId)(o),q=c,v=(0,g.Qh)(),w=[],x=[],y=(b,c=D)=>{let d=b?[...b].sort((a,b)=>{let c=x.indexOf(a.id),d=x.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)},z=Math.max(15e3,Math.min(6e4,Number(process.env.DOCUMENT_GENERATION_HEARTBEAT_MS??3e4))),A=async(b,c=D)=>{let d=setInterval(()=>{a.signal?.aborted||y(w,c)},z);try{return await b()}finally{clearInterval(d)}},B=(0,d.N6)(q)||"none",C=(0,i.Mu)(B)?.name||B,D=[(0,bb.X5)({type:"role_binding",roleId:B,status:"running",message:`生成任务已创建,正在读取模板与角色配置:${q.name}`,details:[`当前项目:${p}`,`资料目录:${e.join(o,"knowledgeBase")}`,"正在读取项目资料包和提示词配置"],progress:{current:1,total:4,label:"初始化配置"}},{subtitle:C,roleName:C,order:0})];y();let E=(0,d.bj)(q),F=E.bindings;(0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在分析模板规范、用户要求与项目资料包",details:["解析 OUTLINE 与模板章节","读取项目资料包","自动识别资料类型并构建项目理解"],progress:{current:1,total:3,label:"准备分析"}},{subtitle:"生成准备",order:D.length})),y();let G=cE({template:q,requirement:a.requirement,projectRoot:o,facts:[]}).materialScope.selectedFiles;if(0===G.length)throw Error("模板未绑定可用项目资料包,请先在模板中绑定需要参与生成的项目文件夹。");let H=(0,bh.W9)(o,q,{requirement:a.requirement}),I=(0,bh._n)(q,H),{kindByPath:J,processingByPath:K}=(0,bh.Hz)(H),L=bg([...E.writerPrompts,...E.chapterPrompts]),M=(0,t.cs)([{text:a.requirement,source:"用户需求",strict:!0},{text:L,source:"提示词角色",strict:!0}]),N=M.length>=2;N&&(q={...c,chapters:M});let O=await A(()=>Promise.resolve((0,k.P)(o,{requirement:a.requirement,boundFilePaths:G})));(0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在生成自动文档规格并评估生成准备度",details:[`项目资料:${G.length} 份`,`资料类型:${Object.values(H.groups).filter(a=>a.length>0).length} 类`,"生成事实字段与章节约束"],progress:{current:2,total:3,label:"规格评估"}},{subtitle:"生成准备",order:D.length})),y();let P=await A(()=>Promise.resolve((0,j.x)(q,a.requirement||""))),Q=P.spec,R=function(a,b=""){let c=`${a?.id||""} ${a?.name||""} ${a?.category||""} ${a?.description||""} ${a?.outputTitle||""} ${b}`;return/施工组织设计|施工方案|危大工程|人、材、机|安全文明施工/u.test(c)?m:l}(q,a.requirement||""),T=(0,r.$)({template:q,spec:Q,summary:O,resolvedRoles:[]});if(!T.ready)throw Error(`生成准备度不足:${T.blockingIssues.join(";")}`);let U=[I.prompt,(0,k.F)(O,{publicSafe:!0}),(0,j.N)(Q,P.sourceHash,{publicSafe:!0}),(0,r.R)(T,{publicSafe:!0})].filter(Boolean).join("\n\n"),V=[I.prompt,(0,k.F)(O),(0,j.N)(Q,P.sourceHash),(0,r.R)(T)].filter(Boolean).join("\n\n"),W=bg([...E.writerPrompts,...E.formattingPrompts]),X=bg([...E.writerPrompts,...E.chapterPrompts,...E.formattingPrompts]),Y=bg(E.prompts),Z=(0,h.I)().load().webAccess||{enabled:!1,allowProjectFacts:!1,maxQueriesPerChapter:2,maxResultsPerQuery:3,trustedDomains:[]},$=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=bt(b,"封面"),f=bt(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:bq(b),forbiddenPatterns:br(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=bq(c),g=br(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&&!bl(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:bs(c,RegExp(`${a.title.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}|${a.title.slice(0,6).replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}`,"u")).slice(0,8),mustNotInclude:bs(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:bs(a.content,/重点|关注|围绕|响应|体系|措施|质量|安全|工期|资源/u).slice(0,8),mustDo:bs(a.content,/必须|应当|需要|确保|严格/u).slice(0,10),mustNotDo:bs(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:[U,Y].filter(Boolean).join("\n\n"),requirement:a.requirement,template:q,rolePrompts:E.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`以下规则由系统运行时从用户绑定指令中自动抽取,不作为用户可编辑内容。生成、检查和修复必须共同遵守:
|
|
145
145
|
${b.map((a,b)=>`${b+1}. ${a}`).join("\n")}`}($),!Z.enabled?"":"公开资料补充使用规则:\n1. 公开资料只可用于补充通用规范、政策、工艺和措施。\n2. 不得使用公开资料新增或修改项目名称、建设地点、建设规模、工期、质量标准、工程量、材料规格、图纸参数、商务数据。\n3. 本地项目资料与公开资料冲突时,必须以本地项目资料为准。\n4. 不得在正文中出现任何检索过程、外部页面、工具调用或系统内部过程性表述。\n5. 不得把公开资料中的其他项目案例参数写入本项目正文。"].filter(Boolean).join("\n\n"),aa=[U,_,`生成前规划章节结构:
|
|
146
|
-
${q.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")}`,W||X].filter(Boolean).join("\n\n"),ab=[V,_,bg([...E.extractionPrompts,...E.referencePrompts])].filter(Boolean).join("\n\n"),ac=[U,_,bg([...E.writerPrompts,...E.chapterPrompts,...E.formattingPrompts])].filter(Boolean).join("\n\n");(0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"document-preparation",status:"success",message:`模板规范与项目资料理解完成,识别 ${G.length} 份项目资料`,details:[`提示词绑定:${F.length} 个`,`项目资料包:${H.materialRoots.join("、")||"当前知识库"}`,N?`识别 OUTLINE 章节:${M.length} 个`:"未识别显式 OUTLINE,使用模板章节"],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备",order:D.length})),y();let ad=new Set(G),ae=new Map([...J.entries()].map(([a,b])=>[a,(0,bh._W)(b)])),af=new Map([...K.entries()].map(([a,b])=>[a,b]));(0,bb.fx)(D,(0,bb.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:"running",message:"正在读取项目资料包索引",details:["使用上传阶段已完成的解析、切片和索引结果","不在生成流程中重新解析或入库","准备按资料类型召回章节证据"],progress:{current:1,total:3,label:"读取索引"}},{subtitle:"知识库检索",order:D.length})),y();let ag=await A(()=>v.getProject(o)),ah=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=[...c7("部分绑定文件未完成索引,已自动跳过",f),...c7("部分绑定文件没有可用切片,已自动跳过",g),...c7("部分绑定文件索引失败,已自动跳过",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}}(ag,[...ad]);if(ah.blockingIssues.length>0)throw Error(`生成前知识索引不可用:${ah.blockingIssues.join(";")}`);let ai=new Set(ah.usablePaths),al=c8(ag,[...ai],a.maxEvidencePerChapter),at=ah.pendingJobs>0||ah.vectorStatus&&"ready"!==ah.vectorStatus.status||0===ah.usableChunkCount,au=function(a){let b=Math.max(0,Math.ceil(a.totalChunks||0)),c=Math.max(0,Math.ceil(a.loadedChunks||0)),d=Math.max(0,b-c),e=b>0?c/b:1,f=[...b>=1e3&&e<.35?["切片未完全预加载"]:[],...!1===a.vectorReady?["向量索引未就绪"]:[]];return{totalChunks:b,loadedChunks:c,omittedChunks:d,loadedRatio:e,highRisk:f.length>0,riskReason:f.join("、")||void 0}}({totalChunks:Math.min(ah.usableChunkCount,20*G.length),loadedChunks:Math.min(ah.usableChunkCount,20*G.length),vectorReady:ah.vectorStatus?"ready"===ah.vectorStatus.status:void 0});(0,bb.fx)(D,(0,bb.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:at?"failed":"success",message:`已读取知识索引:项目资料 ${ah.scopedRecords.length} 份,可用切片 ${ah.usableChunkCount} 条`,details:[`项目资料:${ad.size} 份`,`可用证据文件:${ai.size} 份`,`向量状态:${ah.vectorStatus?.status||"unknown"}`,...ah.warnings,"后续将按招标正文/清单/图纸/补疑等资料类型召回"],progress:{current:3,total:3,label:"索引已就绪"}},{subtitle:"知识库检索",order:D.length})),y(),(0,az.Te)(a.signal);let av=[],aw=[],ax={enabled:Z.enabled,queries:[],evidenceCount:0,filteredCount:0,chapters:[]},ay=[],aB=[],aC=[],aD=[],aE=[],aG=-1,aH=new Map,aI=new Map,aJ=(a,b)=>{let c=`${a}::${b.maxChunkContentChars}`;if(!aI.has(c))try{aI.set(c,ag.getFileDetail?.(a,b))}catch{aI.set(c,void 0)}return aI.get(c)},aK=async(a,b,c,d)=>{let e=c0(d),f=(0,az.c6)({query:a,scopedFilePaths:b,limit:c,weights:e,generationMode:!1}),g=aH.get(f);if(g)return g;let h=await v.search(o,a,{scope:"project",filters:{filePaths:b},limit:c,weights:e,generationMode:!1});return aH.set(f,h.results),h.results},aL={stage:(0,bb.X5)({type:"file_understanding",roleId:"project-understanding",status:"success",message:`已完成项目资料理解:${H.files.length} 份资料,${Object.values(H.groups).filter(a=>a.length>0).length} 类资料类型`,details:I.prompt.split("\n").slice(0,16)},{subtitle:"项目资料理解",order:D.length})};(0,bb.fx)(D,aL.stage),y();let aM=await cJ({manager:v,project:ag,projectRoot:o,scopedFilePaths:[...ad].filter(Boolean).sort(),fileRoleByPath:ae,fileProcessingByPath:af,signal:a.signal});aM.length>0&&(av.push(...aM),(0,bb.fx)(D,(0,bb.X5)({type:"knowledge_retrieval",roleId:"project-basic-evidence",status:"success",message:`已锁定项目基础事实证据 ${aM.length} 条`,details:aM.slice(0,8).map(a=>`${e.basename(a.filePath)}|${a.sectionTitle||"正文片段"}|score=${a.score.toFixed(2)}`)},{subtitle:"基础事实召回",order:D.length})),y());let aQ=aU(av,q,Q),aR=a$(av),aV=a_(av,R),aW=[...aQ,...aR,...aV],aY=ba(aW,aT(av),ay,Q,R),aZ=cE({template:q,requirement:a.requirement,projectRoot:o,facts:aW});for(let a of[(0,bb.X5)({type:"validation",roleId:"agent-material-scope",status:"success",message:`资料范围已锁定:${aZ.materialScope.selectedRoots.join("、")}`,details:[`${aZ.materialScope.reason}`,`入选资料:${aZ.materialScope.selectedFiles.length}/${aZ.materialScope.totalAvailableFiles}`,`已排除资料组:${aZ.materialScope.rejectedRoots.slice(0,8).join("、")||"无"}`]},{subtitle:"Agent 资料范围锁定"}),(0,bb.X5)({type:"knowledge_retrieval",roleId:"agent-material-snapshot",status:"success",message:`资料快照已固定:${aZ.materialSnapshot.totalFiles} 份资料、${aZ.materialSnapshot.totalChunks} 个切片`,details:aZ.materialSnapshot.files.slice(0,10).map(a=>`${a.root}|${a.fileName}|${a.chunkCount}切片`)},{subtitle:"Agent 资料快照"}),(0,bb.X5)({type:"file_understanding",roleId:"agent-base-project-graph",status:"success",message:`基础项目图谱已生成:${aZ.baseProjectGraph.works.length}工程 ${aZ.baseProjectGraph.resources.length}资源 ${aZ.baseProjectGraph.schedule.length}工期 ${aZ.baseProjectGraph.standards.length}标准`,details:[`基础图谱来自确定性事实层,不依赖 LLM`,`事实数:${aZ.facts.length}`]},{subtitle:"Agent 基础图谱"})])(0,bb.fx)(D,a);y(),"0"!==process.env.DOCUMENT_PROJECT_GRAPH_ENHANCED?((0,bb.fx)(D,(0,bb.X5)({type:"file_understanding",roleId:"project-graph",status:"running",message:`正在进行项目资料图谱分析:${av.length} 条证据 → LLM 结构化提取`,details:["提取:工程内容、施工方法、材料设备、技术标准、重点难点"],progress:{current:2,total:3,label:"图谱分析"}},{subtitle:"项目资料图谱分析",order:D.length})),y(),b=await A(()=>(0,dd.i)({evidence:av,signal:a.signal,projectRoot:o,requirement:a.requirement,templateId:q.id}),D)):b={graph:aZ.baseProjectGraph,stage:(0,bb.X5)({type:"file_understanding",roleId:"project-graph",status:"success",message:"已使用确定性基础项目图谱,LLM 增强图谱按配置关闭",details:["基础图谱来自事实记忆和资料快照",`事实数:${aW.length}`],progress:{current:3,total:3,label:"基础图谱"}},{subtitle:"项目资料图谱分析",order:D.length})};let a0=b.graph||aZ.baseProjectGraph;b.graph||(b={graph:a0,stage:(0,bb.X5)({type:"file_understanding",roleId:"project-graph",status:"success",message:"确定性基础项目图谱已完成,LLM 增强图谱未通过",details:["基础图谱为必跑结果,继续作为 Planner/Writer 图谱上下文",`增强阶段:${b.stage.message||b.stage.status}`]},{subtitle:"项目资料图谱分析",order:D.length})}),(0,bb.fx)(D,b.stage),y(),a0&&(I=(0,bh._n)(q,H,a0));let a1=function(a){var b;let c=(0,az.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,az.c6)(a.projectGraph):"",markdownHash:a.markdown?(0,az.c6)(a.markdown.slice(0,2e4)):""}),d=function(a,b){let c=cw(a);if(c)try{let a=JSON.parse(aP.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=cu({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:aX(a.value),sourceType:b,sourceFile:a.source,confidence:a.confidence,priority:cv(b),locked:cv(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,az.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:aX(d),sourceType:e,sourceFile:a.sourceFile,sourceRef:a.sourceRef?.sectionTitle,confidence:Math.round(100*(a.confidence||.5)),priority:cv(e),locked:cv(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:aX([a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:cv("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:aX([a.risk,a.level,a.mitigation].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:cv("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:cr.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=cw(a.projectRoot);return o&&aP.writeFileSync(e.join(o,`canonical-facts-${c}.json`),JSON.stringify(n,null,2)),n}({facts:[...aQ,...aR,...aV],projectGraph:a0,requiredKeys:cr.map(a=>a.key),projectRoot:o,requirement:a.requirement,templateId:q.id});aY.canonical=a1;let a2=(0,t._9)(q,Q,{preserveExplicitOutline:N}),bc=aN({chapters:function(a){if(!function(a){let b=an(`${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=ap(a),c=an(`${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=am.filter(a=>aq(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:ar(b.title,a),chapter:b})).filter(d=>(function(a,b,c,d){var e;if(!aq(a,c,d))return!1;let f=an(b.title);if(a.aliases.some(a=>f.includes(an(a)))||a.sectionItems.some(a=>f.includes(an(a))))return!0;if(e=b.title,/雨季|冬季|高温|防汛|扬尘|噪声|工资|劳务|实名|应急|BIM|智慧|管线|交通导改|垃圾分类|多塔|成品保护/u.test(e))return!1;let g=ar(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(an(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)?as(a,g):-1);if(h<0)continue;let i=g[h],j=function(a,b){let c=an(b.title);return a.aliases.some(a=>c.includes(an(a)))||c.includes(an(a.title)),a.title}(a,i);i.sections=ao(i.sections,[j,...a.sectionItems],50),i.queries=ao(i.queries,[a.title,...a.queries],30),i.requiredFacts=ao(i.requiredFacts,a.facts,30),i.tableSections=ao(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=as(a,g),c=g[b];c.sections=ao(c.sections,[a.title,...a.sectionItems],50),c.queries=ao(c.queries,[a.title,...a.queries],30),c.requiredFacts=ao(c.requiredFacts,a.facts,30),c.tableSections=ao(c.tableSections,a.tableSections||[],20),c.purpose=`${c.purpose};系统已补足施工组织设计必备模块“${a.title}”,需以合理挂靠方式呈现,不改变用户一级章节。`}return g}({template:q,chapters:a2,requirement:a.requirement}),projectGraph:a0,canonicalFacts:a1});q={...q,chapters:bc};let bi=new Map;if(a0){let a=new Set;for(let b of[...a0.works,...a0.methods,...a0.resources,...a0.schedule,...a0.standards,...a0.risks,...a0.requirements,...a0.siteConditions])(b.sourceFiles||[]).forEach(b=>a.add(b));for(let b of bc){let c=[b.title,b.purpose,...b.sections||[],...b.requiredFacts||[],...b.queries||[]].join(" "),d=a=>a&&((0,dp.C1)(a,c,.18)||(0,dp.C1)(a,b.title,.12)),e=/概况|总体|部署|施工|进度|工期|质量|安全|资源|人材机|材料|机械|劳动力|风险|危大|绿色|环保/u.test(c),f=a0.works.filter(a=>a.name&&(d(a.name)||e)),g=a0.methods.filter(a=>a.name&&(d(a.name)||(a.applicableWorks||[]).some(d)||e)),h=a0.resources.filter(a=>a.name&&(d(a.name)||/资源|人材机|材料|机械|劳动力/u.test(c)&&/material|equipment|labor/u.test(a.type))),i=a0.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)),bi.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,bb.fx)(D,(0,bb.X5)({type:"file_understanding",roleId:"project-graph-match",status:"success",message:`图谱→章节映射完成:${a0.works.length}工程 ${a0.methods.length}工法 ${a0.resources.length}资源 → ${bc.length}章`,details:bc.map(a=>{let b=bi.get(a.id);return`${(0,t.GQ)(a.title)}:图谱文件${b?.graphFiles.size||0}个,BOQ项${b?.graphBoqItems.length||0}个`})},{subtitle:"图谱章节映射"})),y()}let bj=bc,bk=I.prompt,bm=[bk,aF({template:{...q,chapters:bj},chapters:bj,factsModel:aY,requirement:a.requirement})].filter(Boolean).join("\n\n"),bx={...q,chapters:bj},by=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(bo(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=bp([...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 bp(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=>bn(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)}))}})}([aa,a.requirement||""].filter(Boolean).join("\n\n"),bj),bz=(0,aj.tF)({requirement:a.requirement,promptTexts:aa,template:bx,chapters:bj,spec:Q}),bA=0,bB=0;bj=aN({chapters:await (0,az.l$)(bj.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b,chapterIndex:c})=>{if(b.sections?.length){bA+=1;let a=bu([...by.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:bu(b.sections,b.title)}}bB+=1;let d=(0,s.QR)(av.filter(a=>a.chapterId===b.id||(0,u.Lk)(a,b.title)),{maxChars:(0,s.Pc)(bz.chapterTargets.get(b.id)||1200),preservePinned:!0}),e=I.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",f=cY(E,b),g=await bv({template:bx,chapter:b,chapterIndex:c,evidence:d,promptTexts:f.promptTexts,projectContext:bm,requirement:a.requirement,roleContext:e,targetWords:bz.chapterTargets.get(b.id)||1200,structuralRules:by,signal:a.signal}),h=by.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,t.GQ)(a.chapterTitle)===(0,t.GQ)(b.title)).flatMap(a=>a.requiredSections.map(a=>`强制小节:${a.title}`));if((0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"section-planning",promptId:f.primaryPromptId,status:g.length?"success":"failed",message:`${(0,t.GQ)(b.title)} 小节规划${g.length?`生成 ${g.length} 个小节`:"未生成可用小节"}`,details:[...f.promptDetails,...h,...g.length?g.map(a=>`规划小节:${a}`):["规划结果为空或被污染过滤"]]},{subtitle:"小节规划"})),!g.length)throw Error(`${(0,t.GQ)(b.title)} 小节规划未生成可用小节`);return{...b,sections:g}},{kind:"llmRepair",targetWords:bz.targetChars||4e3,concurrency:2}),projectGraph:a0,canonicalFacts:a1});let bC=aF({template:q={...q,chapters:bj},chapters:bj,factsModel:aY,requirement:a.requirement});bm=[bk,bC].filter(Boolean).join("\n\n"),(0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"document-blueprint",status:"success",message:"已生成全局事实主表与文档蓝图,后续章节和小节将共用同一套专业约束",details:bC.split("\n").slice(0,12)},{subtitle:"全局蓝图"}));let bD=(0,aj.tF)({requirement:a.requirement,promptTexts:aa,template:q,chapters:bj,spec:Q}),bE=function(a){let b=Date.now(),c=a.template.chapters.map(a=>{let b=a.sections?.length?a.sections:[a.title];return{chapterId:a.id,title:a.title,purpose:a.purpose||dk(a.title),requiredFacts:[...new Set([...a.requiredFacts||[],a.title])],requiredGraphNodes:[a.title],evidenceQueries:[...new Set([a.title,...a.queries||[],...a.requiredFacts||[]])],qualityRules:["事实必须来自锁定资料范围","不得出现后台话术和兜底措辞","不得混入其他项目名称","章节必须覆盖规划小节"],forbiddenPhrases:de,sections:b.map(b=>({title:b,objective:dk(b),requiredFacts:[...new Set([b,...a.requiredFacts||[]])],requiredGraphNodes:[b],evidenceQueries:[...new Set([a.title,b,...dj(a.title),...dj(b),...a.queries||[],...a.requiredFacts||[]].filter(Boolean))],forbiddenPhrases:de,minChars:/项目特点.*重点.*难点|重点.*难点.*分析/u.test(b)?1800:/项目主要施工内容|主要分部分项工程施工方案|主要施工方法/u.test(b)?2200:/原材料进场复试|见证取样|危大工程专项施工方案审批流程/u.test(b)?1200:/施工部署|施工流水|主要施工机械|劳动力|材料进场|资源动态|质量控制点|危大工程|安全隐患|临时用水|临时用电/u.test(b)?760:/概况|说明|依据/u.test(b)?260:420}))}});return{plan:{planId:`plan-${(0,az.c6)({templateId:a.template.id,scope:a.context.materialScope.scopeHash,chapters:c.map(a=>a.title)}).slice(0,10)}`,title:a.title||a.template.name,chapters:c,requiredGlobalFacts:["项目名称","工期","质量标准","招标范围"],forbiddenPhrases:de,qualityRules:["资料范围先锁定","基础图谱必跑","章节任务先于正文","Reviewer 通过后才能导出"]},node:{id:"document-planner",type:"document_planner",status:"completed",startedAt:b,completedAt:Date.now(),outputSummary:`${c.length} 章、${c.reduce((a,b)=>a+b.sections.length,0)} 个小节任务`,metrics:{chapters:c.length}}}}({template:q,context:aZ,title:q.name});aZ.documentPlan=bE.plan,aZ.nodes.push(bE.node),(0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:bE.node.outputSummary||"Agent 文档规划完成",details:bE.plan.chapters.map(a=>`${a.title}:${a.sections.length} 个小节任务`)},{subtitle:"Agent Document Planner",order:D.length})),x=bj.map(a=>a.id);let bF=function(a){let b=a.template.chapters.length,c=b>0?a.targetWords/b:a.targetWords,d=`${a.template.name}
|
|
146
|
+
${q.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")}`,W||X].filter(Boolean).join("\n\n"),ab=[V,_,bg([...E.extractionPrompts,...E.referencePrompts])].filter(Boolean).join("\n\n"),ac=[U,_,bg([...E.writerPrompts,...E.chapterPrompts,...E.formattingPrompts])].filter(Boolean).join("\n\n");(0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"document-preparation",status:"success",message:`模板规范与项目资料理解完成,识别 ${G.length} 份项目资料`,details:[`提示词绑定:${F.length} 个`,`项目资料包:${H.materialRoots.join("、")||"当前知识库"}`,N?`识别 OUTLINE 章节:${M.length} 个`:"未识别显式 OUTLINE,使用模板章节"],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备",order:D.length})),y();let ad=new Set(G),ae=new Map([...J.entries()].map(([a,b])=>[a,(0,bh._W)(b)])),af=new Map([...K.entries()].map(([a,b])=>[a,b]));(0,bb.fx)(D,(0,bb.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:"running",message:"正在读取项目资料包索引",details:["使用上传阶段已完成的解析、切片和索引结果","不在生成流程中重新解析或入库","准备按资料类型召回章节证据"],progress:{current:1,total:3,label:"读取索引"}},{subtitle:"知识库检索",order:D.length})),y();let ag=await A(()=>v.getProject(o)),ah=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=[...c8("部分绑定文件未完成索引,已自动跳过",f),...c8("部分绑定文件没有可用切片,已自动跳过",g),...c8("部分绑定文件索引失败,已自动跳过",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}}(ag,[...ad]);if(ah.blockingIssues.length>0)throw Error(`生成前知识索引不可用:${ah.blockingIssues.join(";")}`);let ai=new Set(ah.usablePaths),al=c9(ag,[...ai],a.maxEvidencePerChapter),at=ah.pendingJobs>0||ah.vectorStatus&&"ready"!==ah.vectorStatus.status||0===ah.usableChunkCount,au=function(a){let b=Math.max(0,Math.ceil(a.totalChunks||0)),c=Math.max(0,Math.ceil(a.loadedChunks||0)),d=Math.max(0,b-c),e=b>0?c/b:1,f=[...b>=1e3&&e<.35?["切片未完全预加载"]:[],...!1===a.vectorReady?["向量索引未就绪"]:[]];return{totalChunks:b,loadedChunks:c,omittedChunks:d,loadedRatio:e,highRisk:f.length>0,riskReason:f.join("、")||void 0}}({totalChunks:Math.min(ah.usableChunkCount,20*G.length),loadedChunks:Math.min(ah.usableChunkCount,20*G.length),vectorReady:ah.vectorStatus?"ready"===ah.vectorStatus.status:void 0});(0,bb.fx)(D,(0,bb.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:at?"failed":"success",message:`已读取知识索引:项目资料 ${ah.scopedRecords.length} 份,可用切片 ${ah.usableChunkCount} 条`,details:[`项目资料:${ad.size} 份`,`可用证据文件:${ai.size} 份`,`向量状态:${ah.vectorStatus?.status||"unknown"}`,...ah.warnings,"后续将按招标正文/清单/图纸/补疑等资料类型召回"],progress:{current:3,total:3,label:"索引已就绪"}},{subtitle:"知识库检索",order:D.length})),y(),(0,az.Te)(a.signal);let av=[],aw=[],ax={enabled:Z.enabled,queries:[],evidenceCount:0,filteredCount:0,chapters:[]},ay=[],aB=[],aC=[],aD=[],aE=[],aG=-1,aH=new Map,aI=new Map,aJ=(a,b)=>{let c=`${a}::${b.maxChunkContentChars}`;if(!aI.has(c))try{aI.set(c,ag.getFileDetail?.(a,b))}catch{aI.set(c,void 0)}return aI.get(c)},aK=async(a,b,c,d)=>{let e=c1(d),f=(0,az.c6)({query:a,scopedFilePaths:b,limit:c,weights:e,generationMode:!1}),g=aH.get(f);if(g)return g;let h=await v.search(o,a,{scope:"project",filters:{filePaths:b},limit:c,weights:e,generationMode:!1});return aH.set(f,h.results),h.results},aL={stage:(0,bb.X5)({type:"file_understanding",roleId:"project-understanding",status:"success",message:`已完成项目资料理解:${H.files.length} 份资料,${Object.values(H.groups).filter(a=>a.length>0).length} 类资料类型`,details:I.prompt.split("\n").slice(0,16)},{subtitle:"项目资料理解",order:D.length})};(0,bb.fx)(D,aL.stage),y();let aM=await cJ({manager:v,project:ag,projectRoot:o,scopedFilePaths:[...ad].filter(Boolean).sort(),fileRoleByPath:ae,fileProcessingByPath:af,signal:a.signal});aM.length>0&&(av.push(...aM),(0,bb.fx)(D,(0,bb.X5)({type:"knowledge_retrieval",roleId:"project-basic-evidence",status:"success",message:`已锁定项目基础事实证据 ${aM.length} 条`,details:aM.slice(0,8).map(a=>`${e.basename(a.filePath)}|${a.sectionTitle||"正文片段"}|score=${a.score.toFixed(2)}`)},{subtitle:"基础事实召回",order:D.length})),y());let aQ=aU(av,q,Q),aR=a$(av),aV=a_(av,R),aW=[...aQ,...aR,...aV],aY=ba(aW,aT(av),ay,Q,R),aZ=cE({template:q,requirement:a.requirement,projectRoot:o,facts:aW});for(let a of[(0,bb.X5)({type:"validation",roleId:"agent-material-scope",status:"success",message:`资料范围已锁定:${aZ.materialScope.selectedRoots.join("、")}`,details:[`${aZ.materialScope.reason}`,`入选资料:${aZ.materialScope.selectedFiles.length}/${aZ.materialScope.totalAvailableFiles}`,`已排除资料组:${aZ.materialScope.rejectedRoots.slice(0,8).join("、")||"无"}`]},{subtitle:"Agent 资料范围锁定"}),(0,bb.X5)({type:"knowledge_retrieval",roleId:"agent-material-snapshot",status:"success",message:`资料快照已固定:${aZ.materialSnapshot.totalFiles} 份资料、${aZ.materialSnapshot.totalChunks} 个切片`,details:aZ.materialSnapshot.files.slice(0,10).map(a=>`${a.root}|${a.fileName}|${a.chunkCount}切片`)},{subtitle:"Agent 资料快照"}),(0,bb.X5)({type:"file_understanding",roleId:"agent-base-project-graph",status:"success",message:`基础项目图谱已生成:${aZ.baseProjectGraph.works.length}工程 ${aZ.baseProjectGraph.resources.length}资源 ${aZ.baseProjectGraph.schedule.length}工期 ${aZ.baseProjectGraph.standards.length}标准`,details:[`基础图谱来自确定性事实层,不依赖 LLM`,`事实数:${aZ.facts.length}`]},{subtitle:"Agent 基础图谱"})])(0,bb.fx)(D,a);y(),"0"!==process.env.DOCUMENT_PROJECT_GRAPH_ENHANCED?((0,bb.fx)(D,(0,bb.X5)({type:"file_understanding",roleId:"project-graph",status:"running",message:`正在进行项目资料图谱分析:${av.length} 条证据 → LLM 结构化提取`,details:["提取:工程内容、施工方法、材料设备、技术标准、重点难点"],progress:{current:2,total:3,label:"图谱分析"}},{subtitle:"项目资料图谱分析",order:D.length})),y(),b=await A(()=>(0,de.i)({evidence:av,signal:a.signal,projectRoot:o,requirement:a.requirement,templateId:q.id}),D)):b={graph:aZ.baseProjectGraph,stage:(0,bb.X5)({type:"file_understanding",roleId:"project-graph",status:"success",message:"已使用确定性基础项目图谱,LLM 增强图谱按配置关闭",details:["基础图谱来自事实记忆和资料快照",`事实数:${aW.length}`],progress:{current:3,total:3,label:"基础图谱"}},{subtitle:"项目资料图谱分析",order:D.length})};let a0=b.graph||aZ.baseProjectGraph;b.graph||(b={graph:a0,stage:(0,bb.X5)({type:"file_understanding",roleId:"project-graph",status:"success",message:"确定性基础项目图谱已完成,LLM 增强图谱未通过",details:["基础图谱为必跑结果,继续作为 Planner/Writer 图谱上下文",`增强阶段:${b.stage.message||b.stage.status}`]},{subtitle:"项目资料图谱分析",order:D.length})}),(0,bb.fx)(D,b.stage),y(),a0&&(I=(0,bh._n)(q,H,a0));let a1=function(a){var b;let c=(0,az.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,az.c6)(a.projectGraph):"",markdownHash:a.markdown?(0,az.c6)(a.markdown.slice(0,2e4)):""}),d=function(a,b){let c=cw(a);if(c)try{let a=JSON.parse(aP.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=cu({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:aX(a.value),sourceType:b,sourceFile:a.source,confidence:a.confidence,priority:cv(b),locked:cv(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,az.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:aX(d),sourceType:e,sourceFile:a.sourceFile,sourceRef:a.sourceRef?.sectionTitle,confidence:Math.round(100*(a.confidence||.5)),priority:cv(e),locked:cv(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:aX([a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:cv("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:aX([a.risk,a.level,a.mitigation].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:cv("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:cr.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=cw(a.projectRoot);return o&&aP.writeFileSync(e.join(o,`canonical-facts-${c}.json`),JSON.stringify(n,null,2)),n}({facts:[...aQ,...aR,...aV],projectGraph:a0,requiredKeys:cr.map(a=>a.key),projectRoot:o,requirement:a.requirement,templateId:q.id});aY.canonical=a1;let a2=(0,t._9)(q,Q,{preserveExplicitOutline:N}),bc=aN({chapters:function(a){if(!function(a){let b=an(`${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=ap(a),c=an(`${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=am.filter(a=>aq(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:ar(b.title,a),chapter:b})).filter(d=>(function(a,b,c,d){var e;if(!aq(a,c,d))return!1;let f=an(b.title);if(a.aliases.some(a=>f.includes(an(a)))||a.sectionItems.some(a=>f.includes(an(a))))return!0;if(e=b.title,/雨季|冬季|高温|防汛|扬尘|噪声|工资|劳务|实名|应急|BIM|智慧|管线|交通导改|垃圾分类|多塔|成品保护/u.test(e))return!1;let g=ar(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(an(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)?as(a,g):-1);if(h<0)continue;let i=g[h],j=function(a,b){let c=an(b.title);return a.aliases.some(a=>c.includes(an(a)))||c.includes(an(a.title)),a.title}(a,i);i.sections=ao(i.sections,[j,...a.sectionItems],50),i.queries=ao(i.queries,[a.title,...a.queries],30),i.requiredFacts=ao(i.requiredFacts,a.facts,30),i.tableSections=ao(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=as(a,g),c=g[b];c.sections=ao(c.sections,[a.title,...a.sectionItems],50),c.queries=ao(c.queries,[a.title,...a.queries],30),c.requiredFacts=ao(c.requiredFacts,a.facts,30),c.tableSections=ao(c.tableSections,a.tableSections||[],20),c.purpose=`${c.purpose};系统已补足施工组织设计必备模块“${a.title}”,需以合理挂靠方式呈现,不改变用户一级章节。`}return g}({template:q,chapters:a2,requirement:a.requirement}),projectGraph:a0,canonicalFacts:a1});q={...q,chapters:bc};let bi=new Map;if(a0){let a=new Set;for(let b of[...a0.works,...a0.methods,...a0.resources,...a0.schedule,...a0.standards,...a0.risks,...a0.requirements,...a0.siteConditions])(b.sourceFiles||[]).forEach(b=>a.add(b));for(let b of bc){let c=[b.title,b.purpose,...b.sections||[],...b.requiredFacts||[],...b.queries||[]].join(" "),d=a=>a&&((0,ds.C1)(a,c,.18)||(0,ds.C1)(a,b.title,.12)),e=/概况|总体|部署|施工|进度|工期|质量|安全|资源|人材机|材料|机械|劳动力|风险|危大|绿色|环保/u.test(c),f=a0.works.filter(a=>a.name&&(d(a.name)||e)),g=a0.methods.filter(a=>a.name&&(d(a.name)||(a.applicableWorks||[]).some(d)||e)),h=a0.resources.filter(a=>a.name&&(d(a.name)||/资源|人材机|材料|机械|劳动力/u.test(c)&&/material|equipment|labor/u.test(a.type))),i=a0.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)),bi.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,bb.fx)(D,(0,bb.X5)({type:"file_understanding",roleId:"project-graph-match",status:"success",message:`图谱→章节映射完成:${a0.works.length}工程 ${a0.methods.length}工法 ${a0.resources.length}资源 → ${bc.length}章`,details:bc.map(a=>{let b=bi.get(a.id);return`${(0,t.GQ)(a.title)}:图谱文件${b?.graphFiles.size||0}个,BOQ项${b?.graphBoqItems.length||0}个`})},{subtitle:"图谱章节映射"})),y()}let bj=bc,bk=I.prompt,bm=[bk,aF({template:{...q,chapters:bj},chapters:bj,factsModel:aY,requirement:a.requirement})].filter(Boolean).join("\n\n"),bx={...q,chapters:bj},by=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(bo(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=bp([...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 bp(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=>bn(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)}))}})}([aa,a.requirement||""].filter(Boolean).join("\n\n"),bj),bz=(0,aj.tF)({requirement:a.requirement,promptTexts:aa,template:bx,chapters:bj,spec:Q}),bA=0,bB=0;bj=aN({chapters:await (0,az.l$)(bj.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b,chapterIndex:c})=>{if(b.sections?.length){bA+=1;let a=bu([...by.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:bu(b.sections,b.title)}}bB+=1;let d=(0,s.QR)(av.filter(a=>a.chapterId===b.id||(0,u.Lk)(a,b.title)),{maxChars:(0,s.Pc)(bz.chapterTargets.get(b.id)||1200),preservePinned:!0}),e=I.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",f=cY(E,b),g=await bv({template:bx,chapter:b,chapterIndex:c,evidence:d,promptTexts:f.promptTexts,projectContext:bm,requirement:a.requirement,roleContext:e,targetWords:bz.chapterTargets.get(b.id)||1200,structuralRules:by,signal:a.signal}),h=by.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,t.GQ)(a.chapterTitle)===(0,t.GQ)(b.title)).flatMap(a=>a.requiredSections.map(a=>`强制小节:${a.title}`));if((0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"section-planning",promptId:f.primaryPromptId,status:g.length?"success":"failed",message:`${(0,t.GQ)(b.title)} 小节规划${g.length?`生成 ${g.length} 个小节`:"未生成可用小节"}`,details:[...f.promptDetails,...h,...g.length?g.map(a=>`规划小节:${a}`):["规划结果为空或被污染过滤"]]},{subtitle:"小节规划"})),!g.length)throw Error(`${(0,t.GQ)(b.title)} 小节规划未生成可用小节`);return{...b,sections:g}},{kind:"llmRepair",targetWords:bz.targetChars||4e3,concurrency:2}),projectGraph:a0,canonicalFacts:a1});let bC=aF({template:q={...q,chapters:bj},chapters:bj,factsModel:aY,requirement:a.requirement});bm=[bk,bC].filter(Boolean).join("\n\n"),(0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"document-blueprint",status:"success",message:"已生成全局事实主表与文档蓝图,后续章节和小节将共用同一套专业约束",details:bC.split("\n").slice(0,12)},{subtitle:"全局蓝图"}));let bD=(0,aj.tF)({requirement:a.requirement,promptTexts:aa,template:q,chapters:bj,spec:Q}),bE=function(a){let b=Date.now(),c=a.template.chapters.map(a=>{let b=a.sections?.length?a.sections:[a.title];return{chapterId:a.id,title:a.title,purpose:a.purpose||dl(a.title),requiredFacts:[...new Set([...a.requiredFacts||[],a.title])],requiredGraphNodes:[a.title],evidenceQueries:[...new Set([a.title,...a.queries||[],...a.requiredFacts||[]])],qualityRules:["事实必须来自锁定资料范围","不得出现后台话术和兜底措辞","不得混入其他项目名称","章节必须覆盖规划小节"],forbiddenPhrases:df,sections:b.map(b=>({title:b,objective:dl(b),requiredFacts:[...new Set([b,...a.requiredFacts||[]])],requiredGraphNodes:[b],evidenceQueries:[...new Set([a.title,b,...dk(a.title),...dk(b),...a.queries||[],...a.requiredFacts||[]].filter(Boolean))],forbiddenPhrases:df,minChars:/项目特点.*重点.*难点|重点.*难点.*分析/u.test(b)?1800:/项目主要施工内容|主要分部分项工程施工方案|主要施工方法/u.test(b)?2200:/原材料进场复试|见证取样|危大工程专项施工方案审批流程/u.test(b)?1200:/施工部署|施工流水|主要施工机械|劳动力|材料进场|资源动态|质量控制点|危大工程|安全隐患|临时用水|临时用电/u.test(b)?760:/概况|说明|依据/u.test(b)?260:420}))}});return{plan:{planId:`plan-${(0,az.c6)({templateId:a.template.id,scope:a.context.materialScope.scopeHash,chapters:c.map(a=>a.title)}).slice(0,10)}`,title:a.title||a.template.name,chapters:c,requiredGlobalFacts:["项目名称","工期","质量标准","招标范围"],forbiddenPhrases:df,qualityRules:["资料范围先锁定","基础图谱必跑","章节任务先于正文","Reviewer 通过后才能导出"]},node:{id:"document-planner",type:"document_planner",status:"completed",startedAt:b,completedAt:Date.now(),outputSummary:`${c.length} 章、${c.reduce((a,b)=>a+b.sections.length,0)} 个小节任务`,metrics:{chapters:c.length}}}}({template:q,context:aZ,title:q.name});aZ.documentPlan=bE.plan,aZ.nodes.push(bE.node),(0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:bE.node.outputSummary||"Agent 文档规划完成",details:bE.plan.chapters.map(a=>`${a.title}:${a.sections.length} 个小节任务`)},{subtitle:"Agent Document Planner",order:D.length})),x=bj.map(a=>a.id);let bF=function(a){let b=a.template.chapters.length,c=b>0?a.targetWords/b:a.targetWords,d=`${a.template.name}
|
|
147
147
|
${a.template.category||""}
|
|
148
|
-
${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:q,targetWords:bD.targetChars||[...bD.chapterTargets.values()].reduce((a,b)=>a+b,0),requirement:a.requirement}),bG={strategy:bF,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,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${bF.mode} 生成策略:章节审查 ${bF.enableChapterReview?"启用":"跳过"}、全局审查 ${bF.enableGlobalReview?"启用":"跳过"}、最终质量审查 ${bF.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${bF.enableDocumentBudgetExpansion?"启用":"跳过"};LLM 调用按工作流任务自然并行`},{subtitle:"后台自动策略"}));let bH=N?"OUTLINE 章节":"模板章节",bJ=(0,bb.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${bB} 章由 LLM 基于${bH}、项目资料理解和证据规划小节,${bA} 章已由模板显式提供小节并跳过规划`},{subtitle:"小节规划策略"}),bK=N?`;识别到 OUTLINE 章节 ${M.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",bL=[...E.prompts.map(a=>`${a.category}|${a.roleId}|${a.id}|${a.name}|${a.bindingSource}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`),...E.unresolvedRoles.map(a=>`unresolved|${a}|项目角色配置中的提示词角色不存在`),...E.missingResourceRoles.map(a=>`missingResource|${a}|提示词角色未显式绑定资源`)];(0,bb.fx)(D,(0,bb.X5)({type:"role_binding",roleId:B,status:"success",message:`已绑定项目资料 ${G.length} 份、${E.prompts.length} 个有效提示词;写作 ${E.writerPrompts.length}、章节 ${E.chapterPrompts.length}、抽取 ${E.extractionPrompts.length};已自动抽取运行时规则 ${$.executionSummary.length} 条;语义资料覆盖 ${Math.round(100*T.materialCoverageRate)}%${bK}`,details:[...bL,...$.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:C,roleName:C})),(0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${$.executionSummary.length} 条,版本 ${$.sourceHash}`,details:$.executionSummary.length?[...$.executionSummary,`必需表格:${$.requiredTables.join("、")||"无"}`,`必含关键词:${$.requiredKeywords?.join("、")||"无"}`,`禁含内容:${$.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})),(0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"document-readiness",status:T.ready?"success":"failed",message:`生成准备度:绑定资料已就绪,语义覆盖 ${Math.round(100*T.materialCoverageRate)}%,角色匹配 ${Math.round(100*T.roleSatisfactionRate)}%,优化建议 ${Math.round(100*T.specCompletenessRate)}%`,details:T.diagnostics},{subtitle:"生成准备度检查"})),(0,bb.fx)(D,bJ),y();let bM=Math.round(([...bD.chapterTargets.values()].reduce((a,b)=>a+b,0)||bD.targetChars||0)/Math.max(1,bj.length)),bN=Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),bP=Math.max(1,Math.min(bj.length||1,Number.isFinite(bN)&&bN>0?Math.floor(bN):(0,az._3)({total:bj.length||1,kind:"chapter",targetWords:bM})));(0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节自适应调度:本轮 ${bP}/${bj.length} 章并发`,details:[`有效章节数:${bj.length}`,`平均章节目标:${bM} 字`,Number.isFinite(bN)&&bN>0?`章节并发来自 DOCUMENT_CHAPTER_CONCURRENCY=${Math.floor(bN)}`:"章节并发按章节数量自适应"]},{subtitle:"章节并发策略"})),y();for(let b=0;b<bj.length;b+=bP){let c=bj.slice(b,b+bP);await Promise.all(c.map(async(c,d)=>{let f,g=b+d;(0,az.Te)(a.signal);let h=Date.now(),i=D.length;try{var j,k;let b;D.push((0,bb.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:E.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(c.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${g+1}/${bj.length}`,`二级小节:${c.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:g+1,total:bj.length,label:"章节生成"}},{subtitle:(0,t.GQ)(c.title),order:g})),y();let d=a.resumeChapters?.find(a=>a.id===c.id||a.title===c.title),m=d?.content?.trim(),p=d?.evidence?.length?[...d.evidence]:[],r=I.chapterPlans.find(a=>a.chapterId===c.id||a.chapterTitle===c.title),x=r?Object.values(r.evidenceQueries).flat().filter(Boolean):[],z=c.queries.length>0?c.queries:[q.name,q.outputTitle,c.title],B=bi.get(c.id);if(a0&&B&&B.graphFiles.size>0){let a=[...ai],b=b=>a.includes(b)?b:a.find(a=>a.endsWith(b)||a.includes(b));for(let a of[...B.graphFiles].map(a=>b(a)||a).filter(a=>bf(o,a,ai)).slice(0,12)){let b=aJ(a,{maxChunkContentChars:8e3});if(b?.chunks?.length)for(let d of b.chunks)p.push({chapterId:c.id,filePath:b.file?.relativePath||a,score:5+(B.graphWorks.length+B.graphMethods.length)*.5,content:d.content,roleId:ae.get(a),processingType:af.get(a),sectionTitle:d.sectionTitle,source:"graph-evidence"})}}let C=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(c.title)?cH:[],F=c2(c,[...z,...x],C),J=c3(c,C),K=Date.now();D[i]=(0,bb.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:E.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(c.title)} 正在执行质量优先的章节检索${B?.graphFiles.size?`(图谱匹配 ${B.graphFiles.size} 个文件)`:""}`,details:F.slice(0,J).map(a=>`检索:${a.slice(0,42)}`),progress:{current:g+1,total:bj.length,label:"证据检索"}},{subtitle:(0,t.GQ)(c.title),order:g}),y();let L=m?[]:[...ai].filter(Boolean).sort(),M=[],N=F.slice(0,J);if(L.length>0&&N.length>0){(0,az.Te)(a.signal);let b=await (0,az.l$)(N,async a=>aK(a,L,Math.min(al,12),c.title),{kind:"search"});M.push(...b)}for(let a of(bG.evidence.searchQueries+=Math.min(F.length,J),bG.evidence.searchMs+=Date.now()-K,M))p.push(...a.filter(a=>bf(o,a.filePath,ad)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:ae.get(a.filePath),processingType:af.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));let O=m?[]:await (0,bh.$b)({manager:v,projectRoot:o,chapter:c,plan:r,profile:H,scopedFilePaths:L,limitPerQuery:Math.min(al,10),signal:a.signal});p.push(...O);let P=new Set((c.pinnedEvidenceFilePaths||[]).filter(Boolean)),T=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(c.title)&&p.push(...aM.map(a=>({...a,chapterId:c.id,source:"pinned-evidence"})));let V=new Set([...P]),W=bD.chapterTargets.get(c.id)||1200,X=(0,s.Pc)(W,6e3,12e3);for(let a of V){if(!bf(o,a,ad))continue;let b=P.has(a),d=aJ(a,{maxChunkContentChars:X});d&&p.push(...d.chunks.map(a=>({chapterId:c.id,filePath:d.file.relativePath,score:1,content:a.content,roleId:ae.get(d.file.relativePath),processingType:af.get(d.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let Y=p.filter(a=>bf(o,a.filePath,ai));if(!m&&Z.enabled){let b=await b1({config:Z,chapterId:c.id,chapterTitle:c.title,sectionTitles:c.sections||[],runtimeRules:$,localFacts:[...aY.project,...aY.schedule,...aY.quality,...aY.safety,...aY.resources,...aY.preciseFacts],signal:a.signal});b.evidence.length>0&&(Y.push(...b.evidence),ax.chapters.push(c.title),ax.evidenceCount+=b.evidence.length),ax.queries.push(...b.queries),ax.filteredCount+=b.filtered}let _=(0,s.Pc)(W,7e3,26e3),aa=m?[]:(0,bh.SK)({project:ag,chapter:c,plan:r,profile:H,scopedFilePaths:L,highRisk:au.highRisk});aa.length>0&&Y.push(...aa);let ab=c1(c,Y,{maxItems:c4(al,c,au.highRisk),maxChars:_+(au.highRisk?14e3:4e3),preservePinned:!0},bG),ac=c.requiredFacts.filter(a=>!ab.some(b=>(0,u.Lk)(b,a))),ah=0,am=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>dn(`${a.sectionTitle||""}${a.content||""}`).includes(dn(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:c,evidence:ab}),an=new Set(ab.map(a=>a.filePath)).size,ao=!!B&&(B?.graphFiles.size||0)>=8&&an>=6&&0===ac.length&&"low"===am.riskLevel,ap=L.length<=80&&("evidence_first"===am.suggestedStrategy||au.highRisk||ac.length>0||ab.length<8&&"low"!==am.riskLevel);if(!ao&&ap&&L.length>0){let b=await aO({manager:v,projectRoot:o,chapter:c,scopedFilePaths:L,fileRoleByPath:ae,fileProcessingByPath:af,requiredNeeds:ac,highRisk:au.highRisk,signal:a.signal});ah=b.length,b.length>0&&(Y=c1(c,[...Y,...b],{maxItems:c4(al+12,c,au.highRisk),maxChars:_+(au.highRisk?36e3:16e3),preservePinned:!0},bG),ab=c1(c,Y,{maxItems:c4(al+8,c,au.highRisk),maxChars:_+(au.highRisk?28e3:12e3),preservePinned:!0},bG),ac=c.requiredFacts.filter(a=>!ab.some(b=>(0,u.Lk)(b,a))))}for(let a of(0===ab.length&&ay.push(`${c.title}:缺少可支撑正文的项目资料证据`),ac))ay.push(`${c.title}:事实需求未满足 ${a}`);let aq=(0,bb.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:av.length>0?"success":"failed",message:`已检索/绑定 ${av.length} 条证据`});aG<0?aG=(0,bb.fx)(D,aq):D[aG]={...aq,order:D[aG]?.order??aq.order},y(),(0,az.Te)(a.signal);let ar=[B?[B.graphWorks.length?`图谱识别本章工程内容:${B.graphWorks.join("、")}`:"",B.graphMethods.length?`图谱识别本章施工方法:${B.graphMethods.join("、")}`:"",B.graphBoqItems.length?`图谱识别本章BOQ清单项(${B.graphBoqItems.length}项):${B.graphBoqItems.slice(0,30).map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",B.gaps.length?`图谱识别本章资料缺口:${B.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",r?.writingGoal,r?.mustCover?.length?`本章必须覆盖:${r.mustCover.join("、")}`:"",r?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${r.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),as=cY(E,c);if(E.writerPrompts.length>0&&!as.primaryWriter)throw Error(`${(0,t.GQ)(c.title)} 写作主控提示词未进入章节生成阶段`);let at=[as.promptTexts,U].filter(Boolean).join("\n\n"),aC=as.promptDetails.length?as.promptDetails:["未绑定章节写作提示词"],aF=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||[])a5(c,b,{label:d,category:n(b,d)?.category||"required",required:!0,source:"template"});for(let d of a.chapter.sections||[])a5(c,b,{label:d,category:"section",required:!1,source:"section",queries:a4(d,[a.chapter.title])});for(let d of a.plan?.requiredContents||[])a5(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of a.plan?.evidenceNeeds||[])a5(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&&a5(c,b,{label:e.name,category:n(b,e.name)?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:a4(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)||a4(e.name,f?.aliases||[]).some(a=>d.includes(a))||a.chapter.requiredFacts.some(a=>a.includes(e.name)||e.name.includes(a)))&&a5(c,b,{label:e.name,category:f?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:a4(e.name,[g])})}for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&d.includes(a))&&a6(c,b,a,"profile","must_use"===a.usagePolicy,[d]);let f=a3(a.requirement||"");if(f)for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&f.includes(a))&&a6(c,b,a,"requirement",!0,[f]);let g=a3(a.promptTexts||"");if(g)for(let d of b.factFields)[d.name,...d.aliases].some(a=>a.length>=2&&g.includes(a))&&a6(c,b,d,"prompt","must_use"===d.usagePolicy,[a.chapter.title]);return c}({template:q,chapter:c,spec:Q,profile:R,promptTexts:at,requirement:a.requirement,plan:r?{requiredContents:r.mustCover,evidenceNeeds:Object.values(r.evidenceQueries).flat()}:void 0}),aH=a8({needs:aF,factsModel:aY,evidence:Y,profile:R}),aI=aH.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label);if(aI.length>0&&L.length>0){let b=await c6({manager:v,projectRoot:o,chapter:c,needs:aI,scopedFilePaths:L,fileRoleByPath:ae,fileProcessingByPath:af,signal:a.signal}),d=await aO({manager:v,projectRoot:o,chapter:c,scopedFilePaths:L,fileRoleByPath:ae,fileProcessingByPath:af,requiredNeeds:aI,highRisk:!0,signal:a.signal}),e=[...b,...d];e.length>0&&(Y=c1(c,[...Y,...e],{maxItems:c4(al+16,c,!0),maxChars:_+42e3,preservePinned:!0},bG),ab=c1(c,Y,{maxItems:c4(al+12,c,!0),maxChars:_+32e3,preservePinned:!0},bG),ac=c.requiredFacts.filter(a=>!ab.some(b=>(0,u.Lk)(b,a))),aI=(aH=a8({needs:aF,factsModel:aY,evidence:Y,profile:R})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}let aL=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:c,evidence:ab,risk:au});aw.push(aL);let aN=new Set(ab.map(a=>a.filePath)),aP=ab.reduce((a,b)=>a+b.content.length,0),aQ=[...au.highRisk?[`召回覆盖风险(${au.riskReason||"切片未完全预加载"}):已加载 ${au.loadedChunks}/${au.totalChunks},已启用深召回`]:[],`深召回证据:${ah} 条`,`事实覆盖:${aL.requiredFactCovered}/${aL.requiredFactTotal}`,`小节覆盖:${aL.sectionCovered}/${aL.sectionTotal}`];D[i]=(0,bb.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:E.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(c.title)} 已选取 ${ab.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aN.size} 份`,`上下文字符:${aP}`,`检索查询:${Math.min(F.length,J)} 组`,...aQ],progress:{current:g+1,total:bj.length,label:"正文生成"}},{subtitle:(0,t.GQ)(c.title),order:g}),y(),bG.evidence.contextChars+=aP;let aT=(j=aH,a7(j.flatMap(a=>a.facts))),aU=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(c.title)?aR:[],aV=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,az.lG)(a.value))}`),f=(a.resolvedFactNeeds||[]).flatMap(a=>a.facts),g=a.indexedFacts||[],h=(0,aA.Cr)(g,a=>(0,aA.rF)(a),{maxItems:48,maxChars:12e3},"indexedFacts"),i=f.length>0?[]:h.selected.map(a=>`- ${a.key||a.fieldName||"资料事实"}:${(0,s.eE)((0,az.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,az.lG)(b.value)}`==`${a.key||a.fieldName}:${(0,az.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,az.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,az.lG)(a.value)).filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|JGJ|ISO|台|套|个|项|批|次|份|人|㎡|日历天|万元|元/iu.test(a)),...g.map(a=>(0,az.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?`必须优先覆盖的事实/要求:
|
|
148
|
+
${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:q,targetWords:bD.targetChars||[...bD.chapterTargets.values()].reduce((a,b)=>a+b,0),requirement:a.requirement}),bG={strategy:bF,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,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${bF.mode} 生成策略:章节审查 ${bF.enableChapterReview?"启用":"跳过"}、全局审查 ${bF.enableGlobalReview?"启用":"跳过"}、最终质量审查 ${bF.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${bF.enableDocumentBudgetExpansion?"启用":"跳过"};LLM 调用按工作流任务自然并行`},{subtitle:"后台自动策略"}));let bH=N?"OUTLINE 章节":"模板章节",bJ=(0,bb.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${bB} 章由 LLM 基于${bH}、项目资料理解和证据规划小节,${bA} 章已由模板显式提供小节并跳过规划`},{subtitle:"小节规划策略"}),bK=N?`;识别到 OUTLINE 章节 ${M.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",bL=[...E.prompts.map(a=>`${a.category}|${a.roleId}|${a.id}|${a.name}|${a.bindingSource}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`),...E.unresolvedRoles.map(a=>`unresolved|${a}|项目角色配置中的提示词角色不存在`),...E.missingResourceRoles.map(a=>`missingResource|${a}|提示词角色未显式绑定资源`)];(0,bb.fx)(D,(0,bb.X5)({type:"role_binding",roleId:B,status:"success",message:`已绑定项目资料 ${G.length} 份、${E.prompts.length} 个有效提示词;写作 ${E.writerPrompts.length}、章节 ${E.chapterPrompts.length}、抽取 ${E.extractionPrompts.length};已自动抽取运行时规则 ${$.executionSummary.length} 条;语义资料覆盖 ${Math.round(100*T.materialCoverageRate)}%${bK}`,details:[...bL,...$.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:C,roleName:C})),(0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${$.executionSummary.length} 条,版本 ${$.sourceHash}`,details:$.executionSummary.length?[...$.executionSummary,`必需表格:${$.requiredTables.join("、")||"无"}`,`必含关键词:${$.requiredKeywords?.join("、")||"无"}`,`禁含内容:${$.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})),(0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"document-readiness",status:T.ready?"success":"failed",message:`生成准备度:绑定资料已就绪,语义覆盖 ${Math.round(100*T.materialCoverageRate)}%,角色匹配 ${Math.round(100*T.roleSatisfactionRate)}%,优化建议 ${Math.round(100*T.specCompletenessRate)}%`,details:T.diagnostics},{subtitle:"生成准备度检查"})),(0,bb.fx)(D,bJ),y();let bM=Math.round(([...bD.chapterTargets.values()].reduce((a,b)=>a+b,0)||bD.targetChars||0)/Math.max(1,bj.length)),bN=Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),bP=Math.max(1,Math.min(bj.length||1,Number.isFinite(bN)&&bN>0?Math.floor(bN):(0,az._3)({total:bj.length||1,kind:"chapter",targetWords:bM})));(0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节自适应调度:本轮 ${bP}/${bj.length} 章并发`,details:[`有效章节数:${bj.length}`,`平均章节目标:${bM} 字`,Number.isFinite(bN)&&bN>0?`章节并发来自 DOCUMENT_CHAPTER_CONCURRENCY=${Math.floor(bN)}`:"章节并发按章节数量自适应"]},{subtitle:"章节并发策略"})),y();for(let b=0;b<bj.length;b+=bP){let c=bj.slice(b,b+bP);await Promise.all(c.map(async(c,d)=>{let f,g=b+d;(0,az.Te)(a.signal);let h=Date.now(),i=D.length;try{var j,k;let b;D.push((0,bb.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:E.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(c.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${g+1}/${bj.length}`,`二级小节:${c.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:g+1,total:bj.length,label:"章节生成"}},{subtitle:(0,t.GQ)(c.title),order:g})),y();let d=a.resumeChapters?.find(a=>a.id===c.id||a.title===c.title),m=d?.content?.trim(),p=d?.evidence?.length?[...d.evidence]:[],r=I.chapterPlans.find(a=>a.chapterId===c.id||a.chapterTitle===c.title),x=r?Object.values(r.evidenceQueries).flat().filter(Boolean):[],z=c.queries.length>0?c.queries:[q.name,q.outputTitle,c.title],B=bi.get(c.id);if(a0&&B&&B.graphFiles.size>0){let a=[...ai],b=b=>a.includes(b)?b:a.find(a=>a.endsWith(b)||a.includes(b));for(let a of[...B.graphFiles].map(a=>b(a)||a).filter(a=>bf(o,a,ai)).slice(0,12)){let b=aJ(a,{maxChunkContentChars:8e3});if(b?.chunks?.length)for(let d of b.chunks)p.push({chapterId:c.id,filePath:b.file?.relativePath||a,score:5+(B.graphWorks.length+B.graphMethods.length)*.5,content:d.content,roleId:ae.get(a),processingType:af.get(a),sectionTitle:d.sectionTitle,source:"graph-evidence"})}}let C=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(c.title)?cH:[],F=c3(c,[...z,...x],C),J=c4(c,C),K=Date.now();D[i]=(0,bb.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:E.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(c.title)} 正在执行质量优先的章节检索${B?.graphFiles.size?`(图谱匹配 ${B.graphFiles.size} 个文件)`:""}`,details:F.slice(0,J).map(a=>`检索:${a.slice(0,42)}`),progress:{current:g+1,total:bj.length,label:"证据检索"}},{subtitle:(0,t.GQ)(c.title),order:g}),y();let L=m?[]:[...ai].filter(Boolean).sort(),M=[],N=F.slice(0,J);if(L.length>0&&N.length>0){(0,az.Te)(a.signal);let b=await (0,az.l$)(N,async a=>aK(a,L,Math.min(al,12),c.title),{kind:"search"});M.push(...b)}for(let a of(bG.evidence.searchQueries+=Math.min(F.length,J),bG.evidence.searchMs+=Date.now()-K,M))p.push(...a.filter(a=>bf(o,a.filePath,ad)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:ae.get(a.filePath),processingType:af.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));let O=m?[]:await (0,bh.$b)({manager:v,projectRoot:o,chapter:c,plan:r,profile:H,scopedFilePaths:L,limitPerQuery:Math.min(al,10),signal:a.signal});p.push(...O);let P=new Set((c.pinnedEvidenceFilePaths||[]).filter(Boolean)),T=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(c.title)&&p.push(...aM.map(a=>({...a,chapterId:c.id,source:"pinned-evidence"})));let V=new Set([...P]),W=bD.chapterTargets.get(c.id)||1200,X=(0,s.Pc)(W,6e3,12e3);for(let a of V){if(!bf(o,a,ad))continue;let b=P.has(a),d=aJ(a,{maxChunkContentChars:X});d&&p.push(...d.chunks.map(a=>({chapterId:c.id,filePath:d.file.relativePath,score:1,content:a.content,roleId:ae.get(d.file.relativePath),processingType:af.get(d.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let Y=p.filter(a=>bf(o,a.filePath,ai));if(!m&&Z.enabled){let b=await b1({config:Z,chapterId:c.id,chapterTitle:c.title,sectionTitles:c.sections||[],runtimeRules:$,localFacts:[...aY.project,...aY.schedule,...aY.quality,...aY.safety,...aY.resources,...aY.preciseFacts],signal:a.signal});b.evidence.length>0&&(Y.push(...b.evidence),ax.chapters.push(c.title),ax.evidenceCount+=b.evidence.length),ax.queries.push(...b.queries),ax.filteredCount+=b.filtered}let _=(0,s.Pc)(W,7e3,26e3),aa=m?[]:(0,bh.SK)({project:ag,chapter:c,plan:r,profile:H,scopedFilePaths:L,highRisk:au.highRisk});aa.length>0&&Y.push(...aa);let ab=c2(c,Y,{maxItems:c5(al,c,au.highRisk),maxChars:_+(au.highRisk?14e3:4e3),preservePinned:!0},bG),ac=c.requiredFacts.filter(a=>!ab.some(b=>(0,u.Lk)(b,a))),ah=0,am=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>dr(`${a.sectionTitle||""}${a.content||""}`).includes(dr(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:c,evidence:ab}),an=new Set(ab.map(a=>a.filePath)).size,ao=!!B&&(B?.graphFiles.size||0)>=8&&an>=6&&0===ac.length&&"low"===am.riskLevel,ap=L.length<=80&&("evidence_first"===am.suggestedStrategy||au.highRisk||ac.length>0||ab.length<8&&"low"!==am.riskLevel);if(!ao&&ap&&L.length>0){let b=await aO({manager:v,projectRoot:o,chapter:c,scopedFilePaths:L,fileRoleByPath:ae,fileProcessingByPath:af,requiredNeeds:ac,highRisk:au.highRisk,signal:a.signal});ah=b.length,b.length>0&&(Y=c2(c,[...Y,...b],{maxItems:c5(al+12,c,au.highRisk),maxChars:_+(au.highRisk?36e3:16e3),preservePinned:!0},bG),ab=c2(c,Y,{maxItems:c5(al+8,c,au.highRisk),maxChars:_+(au.highRisk?28e3:12e3),preservePinned:!0},bG),ac=c.requiredFacts.filter(a=>!ab.some(b=>(0,u.Lk)(b,a))))}for(let a of(0===ab.length&&ay.push(`${c.title}:缺少可支撑正文的项目资料证据`),ac))ay.push(`${c.title}:事实需求未满足 ${a}`);let aq=(0,bb.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:av.length>0?"success":"failed",message:`已检索/绑定 ${av.length} 条证据`});aG<0?aG=(0,bb.fx)(D,aq):D[aG]={...aq,order:D[aG]?.order??aq.order},y(),(0,az.Te)(a.signal);let ar=[B?[B.graphWorks.length?`图谱识别本章工程内容:${B.graphWorks.join("、")}`:"",B.graphMethods.length?`图谱识别本章施工方法:${B.graphMethods.join("、")}`:"",B.graphBoqItems.length?`图谱识别本章BOQ清单项(${B.graphBoqItems.length}项):${B.graphBoqItems.slice(0,30).map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",B.gaps.length?`图谱识别本章资料缺口:${B.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",r?.writingGoal,r?.mustCover?.length?`本章必须覆盖:${r.mustCover.join("、")}`:"",r?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${r.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),as=cY(E,c);if(E.writerPrompts.length>0&&!as.primaryWriter)throw Error(`${(0,t.GQ)(c.title)} 写作主控提示词未进入章节生成阶段`);let at=[as.promptTexts,U].filter(Boolean).join("\n\n"),aC=as.promptDetails.length?as.promptDetails:["未绑定章节写作提示词"],aF=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||[])a5(c,b,{label:d,category:n(b,d)?.category||"required",required:!0,source:"template"});for(let d of a.chapter.sections||[])a5(c,b,{label:d,category:"section",required:!1,source:"section",queries:a4(d,[a.chapter.title])});for(let d of a.plan?.requiredContents||[])a5(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of a.plan?.evidenceNeeds||[])a5(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&&a5(c,b,{label:e.name,category:n(b,e.name)?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:a4(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)||a4(e.name,f?.aliases||[]).some(a=>d.includes(a))||a.chapter.requiredFacts.some(a=>a.includes(e.name)||e.name.includes(a)))&&a5(c,b,{label:e.name,category:f?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:a4(e.name,[g])})}for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&d.includes(a))&&a6(c,b,a,"profile","must_use"===a.usagePolicy,[d]);let f=a3(a.requirement||"");if(f)for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&f.includes(a))&&a6(c,b,a,"requirement",!0,[f]);let g=a3(a.promptTexts||"");if(g)for(let d of b.factFields)[d.name,...d.aliases].some(a=>a.length>=2&&g.includes(a))&&a6(c,b,d,"prompt","must_use"===d.usagePolicy,[a.chapter.title]);return c}({template:q,chapter:c,spec:Q,profile:R,promptTexts:at,requirement:a.requirement,plan:r?{requiredContents:r.mustCover,evidenceNeeds:Object.values(r.evidenceQueries).flat()}:void 0}),aH=a8({needs:aF,factsModel:aY,evidence:Y,profile:R}),aI=aH.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label);if(aI.length>0&&L.length>0){let b=await c7({manager:v,projectRoot:o,chapter:c,needs:aI,scopedFilePaths:L,fileRoleByPath:ae,fileProcessingByPath:af,signal:a.signal}),d=await aO({manager:v,projectRoot:o,chapter:c,scopedFilePaths:L,fileRoleByPath:ae,fileProcessingByPath:af,requiredNeeds:aI,highRisk:!0,signal:a.signal}),e=[...b,...d];e.length>0&&(Y=c2(c,[...Y,...e],{maxItems:c5(al+16,c,!0),maxChars:_+42e3,preservePinned:!0},bG),ab=c2(c,Y,{maxItems:c5(al+12,c,!0),maxChars:_+32e3,preservePinned:!0},bG),ac=c.requiredFacts.filter(a=>!ab.some(b=>(0,u.Lk)(b,a))),aI=(aH=a8({needs:aF,factsModel:aY,evidence:Y,profile:R})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}let aL=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:c,evidence:ab,risk:au});aw.push(aL);let aN=new Set(ab.map(a=>a.filePath)),aP=ab.reduce((a,b)=>a+b.content.length,0),aQ=[...au.highRisk?[`召回覆盖风险(${au.riskReason||"切片未完全预加载"}):已加载 ${au.loadedChunks}/${au.totalChunks},已启用深召回`]:[],`深召回证据:${ah} 条`,`事实覆盖:${aL.requiredFactCovered}/${aL.requiredFactTotal}`,`小节覆盖:${aL.sectionCovered}/${aL.sectionTotal}`];D[i]=(0,bb.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:E.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(c.title)} 已选取 ${ab.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aN.size} 份`,`上下文字符:${aP}`,`检索查询:${Math.min(F.length,J)} 组`,...aQ],progress:{current:g+1,total:bj.length,label:"正文生成"}},{subtitle:(0,t.GQ)(c.title),order:g}),y(),bG.evidence.contextChars+=aP;let aT=(j=aH,a7(j.flatMap(a=>a.facts))),aU=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(c.title)?aR:[],aV=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,az.lG)(a.value))}`),f=(a.resolvedFactNeeds||[]).flatMap(a=>a.facts),g=a.indexedFacts||[],h=(0,aA.Cr)(g,a=>(0,aA.rF)(a),{maxItems:48,maxChars:12e3},"indexedFacts"),i=f.length>0?[]:h.selected.map(a=>`- ${a.key||a.fieldName||"资料事实"}:${(0,s.eE)((0,az.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,az.lG)(b.value)}`==`${a.key||a.fieldName}:${(0,az.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,az.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,az.lG)(a.value)).filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|JGJ|ISO|台|套|个|项|批|次|份|人|㎡|日历天|万元|元/iu.test(a)),...g.map(a=>(0,az.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?`必须优先覆盖的事实/要求:
|
|
149
149
|
${d.map(a=>`- ${a}`).join("\n")}`:"",e.length?`角色节点已抽取事实:
|
|
150
150
|
${e.join("\n")}`:"",k.length?`项目基础事实卡片(资料已明确,项目概况、项目基本信息表、进度和质量相关内容必须优先使用,不得输出任何占位话术):
|
|
151
151
|
${k.map(a=>`- ${a.key||a.fieldName}:${(0,s.eE)((0,az.lG)(a.value)).slice(0,220)}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`).join("\n")}
|
|
152
152
|
项目基本信息表必须使用固定表头:| 信息项 | 内容 |,不得使用“序号|项目名称|内容参数”表头,不得输出后台溯源列。`:"",a.factNeedsPrompt||"",i.length?`全局资料事实索引匹配到的本章可写事实:
|
|
153
153
|
${i.join("\n")}`:"",n.length?`本章资料中可直接使用的可靠精确参数/编号:${n.join("、")}。这些参数来自绑定资料,不属于编造;涉及对应对象、部位、工序、材料、设备、项目概况、质量验收或安全控制时必须自然写入正文,并保持原样或等价专业表达。项目基础事实中的合同估算价、计划工期可用于项目概况;不得写入报价明细、单价、税率、预留金。`:"",p.length?`当前事实需求仍未充分确认:${p.join("、")}。未确认项不得编造;但已满足事实需求中的资料事实必须写入对应小节。`:"",a.missingFacts.length?`模板显式要求中当前检索未充分命中的项:${a.missingFacts.join("、")}。未命中项不得编造,但不得因此省略上方已经明确的可靠参数。`:"",`本章可用材料来源约 ${o} 个文件,正文必须按事实需求把可用事实内化到对应小节,不得单列后台资料清单。`,...j].filter(Boolean).join("\n")}({chapter:c,plan:void 0,spec:Q,roleFacts:T,evidence:ab,missingFacts:ac,indexedFacts:[...aU,...aT],resolvedFactNeeds:aH,factNeedsPrompt:function(a){let b=a.map(a=>{let b=a.facts.slice(0,5).map(b=>`${b.key||b.fieldName||a.need.label}=${a9(b.value)}${b.sourceFile?`(${e.basename(b.sourceFile)})`:""}`),c=a.facts.length?[]:(a.evidence||[]).slice(0,2).map(a=>`证据片段:${a9(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?`事实需求覆盖卡片:
|
|
154
|
-
${b.join("\n")}`:""}(aH)}),aW=function(a){let b=Date.now(),c=a.plan.chapters.find(b=>b.chapterId===a.chapter.id)||a.plan.chapters.find(b=>b.title===a.chapter.title);if(!c)throw Error(`缺少章节计划:${a.chapter.title}`);let d=a.context.facts.filter(a=>c.evidenceQueries.some(b=>dh(a,b))||c.requiredFacts.some(b=>dh(a,b))),e=c.sections.map(b=>{let c=a.context.facts.filter(a=>b.evidenceQueries.some(b=>dh(a,b))||b.requiredFacts.some(b=>dh(a,b))).slice(0,24),d=a.evidence.filter(a=>b.evidenceQueries.some(b=>(function(a,b){let c=df(`${a.sectionTitle||""} ${a.content||""} ${a.filePath||""}`);return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(df(a)))})(a,b))).slice(0,24),e=b.requiredGraphNodes.flatMap(b=>di(a.context.baseProjectGraph,b)).slice(0,12),f=[];return 0===d.length&&0===c.length&&0===e.length&&f.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${b.title} 缺少事实、图谱或证据支撑`,suggestion:"应先定向检索和抽取事实,不能生成占位正文。"}),{...b,factIds:c.map(a=>(0,az.c6)({key:a.key,value:(0,az.lG)(a.value),sourceFile:a.sourceFile}).slice(0,12)),evidenceIds:d.map(a=>(0,az.c6)({filePath:a.filePath,content:a.content.slice(0,160),score:a.score}).slice(0,12)),graphNodeIds:e.map(a=>(0,az.c6)(a).slice(0,12)),ready:0===f.length,issues:f}}),f=e.flatMap(a=>a.issues),g={taskId:`chapter-task-${(0,az.c6)({plan:a.plan.planId,chapter:a.chapter.id,evidence:a.evidence.map(a=>(0,az.c6)({filePath:a.filePath,content:a.content.slice(0,120),score:a.score}))}).slice(0,10)}`,chapterId:a.chapter.id,title:a.chapter.title,facts:d.slice(0,48),evidence:a.evidence.slice(0,48),graphContext:di(a.context.baseProjectGraph,a.chapter.title).slice(0,20).join("\n"),sections:e,ready:0===f.length,issues:f};return{task:g,node:{id:`chapter-task-${a.chapter.id}`,type:"chapter_task_planner",status:g.ready?"completed":"failed",startedAt:b,completedAt:Date.now(),outputSummary:`${g.sections.filter(a=>a.ready).length}/${g.sections.length} 个小节任务就绪`,metrics:{facts:g.facts.length,evidence:g.evidence.length,issues:f.length},issues:f}}}({plan:bE.plan,chapter:c,context:aZ,evidence:ab});if(aZ.chapterTasks=[...(aZ.chapterTasks||[]).filter(a=>a.chapterId!==c.id),aW.task],aZ.nodes.push(aW.node),(0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:`agent-chapter-task-${c.id}`,status:aW.task.ready||m?"success":"failed",message:aW.task.ready?aW.node.outputSummary||`${(0,t.GQ)(c.title)} 章节任务规划完成`:m?`${(0,t.GQ)(c.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:aW.node.outputSummary||`${(0,t.GQ)(c.title)} 章节任务规划完成`,details:aW.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:D.length})),y(w),!aW.task.ready&&!m)throw Error(`${(0,t.GQ)(c.title)} 章节任务未就绪:${aW.task.issues.map(a=>a.message).join(";")}`);let aX=[at,dl(aW.task)].filter(Boolean).join("\n\n"),a$={total:aH.length,satisfied:aH.filter(a=>"satisfied"===a.status).length,missing:aH.filter(a=>"missing"===a.status).length,lowConfidence:aH.filter(a=>"low_confidence"===a.status).length};for(let a of aI)ay.push(`${c.title}:事实需求未确认 ${a}`);let a_=Q?.chapterRules.find(a=>a.id===c.id||a.title===c.title),a1=bD.chapterTargets.get(c.id)||1200,a2=c.sections?.filter(Boolean).length||0,ba=/[、,,;;]/u.test(c.title),bc=function(a){let{budgetTarget:b,sectionCount:c,title:d,longformStrict:e}=a,f=/[、,,;;]/u.test(d),g=/工期|进度|质量|安全|危大|资源|人材机|保障|措施|重难点/u.test(d),h=/概况|结语|附录|说明/u.test(d),i=c>0?c*(f?720:g?900:780):g?5200:3600,j=e?h?2600:g?5200:3600:Math.min(1200,b),k=e?Math.min(Math.max(4200,b),c>=30?9800:f?8800:g?9200:7200):b,l=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:a1,sectionCount:a2,title:c.title,longformStrict:bD.longformStrict}),bg=Math.ceil(bc.maxWords*(bD.maxChars?1.05:1)),bk=bD.targetChars?Math.min(1800,Math.max(600,Math.floor(.45*bc.roundTarget))):1200,bl=bc.roundTarget,bn=Math.max(Math.min(a_?.minWords||0,bl),Math.min(Q?.dynamicChapterRule.minWordsPerChapter||0,bl),Math.floor(.68*bl),bk),bo=bS(bn,bl),bp=a2>0?Math.min(bl,Math.max(1800,bc.structureTarget)):bl,bq=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),br=process.env.DOCUMENT_SECTION_FIRST_GENERATION,bs=void 0!==br&&0===Number(br),bt=void 0!==br&&0!==Number(br),bu=bl>=6e3&&a2>=4&&a2<=bq&&!ba,bv=!bs&&a2>=2&&(a2>bq||ba||bD.longformStrict&&a2>=6),bx=!bs&&!bv&&a2>=2&&a2<=bq&&(bt||bu||bD.longformStrict);if(m)b=cX(m,c),f=(0,bb.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:as.primaryPromptId,status:"success",message:`${(0,t.GQ)(c.title)} 已复用已有章节正文:当前 ${(0,aj.V7)(b)} 字,跳过 Writer,直接进入 Reviewer/Repairer/Final Gate`,details:[`有效证据:${ab.length} 条`,`事实需求:${a$.satisfied}/${a$.total} 已满足,缺失 ${a$.missing},低置信 ${a$.lowConfidence}`,"来源:resumeChapters/checkpointChapters"],progress:{current:g+1,total:bj.length,label:"复用章节"}},{subtitle:(0,t.GQ)(c.title),order:g}),D[i]=f,y(w);else{D[i]=(0,bb.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:as.primaryPromptId,status:"running",message:bv?`${(0,t.GQ)(c.title)} 正在按语义小节组并发成稿`:bx?`${(0,t.GQ)(c.title)} 正在按小节并发成稿`:`${(0,t.GQ)(c.title)} 正在整章一次成稿`,details:bv||bx?[...aC,`有效证据:${ab.length} 条`,`事实需求:${a$.satisfied}/${a$.total} 已满足,缺失 ${a$.missing},低置信 ${a$.lowConfidence}`,bc.label,`生成上限约 ${bg} 字`,`规划小节:${c.sections?.length||0} 个`,bv?"小节较多,按工期/质量/安全/资源等语义组并发生成,避免整章长调用低产":"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...aC,`有效证据:${ab.length} 条`,`事实需求:${a$.satisfied}/${a$.total} 已满足,缺失 ${a$.missing},低置信 ${a$.lowConfidence}`,bc.label,`生成上限约 ${bg} 字`,`规划小节:${a2} 个`,"首次生成必须覆盖章节结构、小节和事实,篇幅目标仅作为规划参考"],progress:{current:g+1,total:bj.length,label:bv?"小节分组":bx?"小节并发":"整章成稿"}},{subtitle:(0,t.GQ)(c.title),order:g}),y();let d=bv?Math.min(bT(bl)+42e4,9e5):bx?Math.min(bT(bl)+18e4,6e5):Math.min(bT(bl),18e4),e=bv?await A(()=>bd(bG,`chapter-section-group-draft:${c.id}`,()=>bQ({template:q,chapter:c,evidence:ab,missingFacts:ac,promptTexts:aX,projectContext:bm,requirement:a.requirement,roleContext:ar,targetWords:bp,maxWords:bg,forbidDrawingImages:!1,factCoverageContext:aV,sectionEvidenceProvider:b=>c5({manager:v,projectRoot:o,chapter:c,sectionTitle:b,scopedFilePaths:L,fileRoleByPath:ae,fileProcessingByPath:af,signal:a.signal}),diagnostics:bG,signal:a.signal}))):bx?await A(()=>bd(bG,`chapter-section-draft:${c.id}`,()=>(0,aS.od)(b=>bR({template:q,chapter:c,evidence:ab,missingFacts:ac,promptTexts:aX,projectContext:bm,requirement:a.requirement,roleContext:ar,targetWords:bp,maxWords:bg,forbidDrawingImages:!1,factCoverageContext:aV,projectRoot:o,modelName:(0,aS.$y)()?.model.name,materialContextHash:(0,az.c6)({materialFilePaths:G,promptTexts:at}),allowPartialResult:!1,sectionEvidenceProvider:a=>c5({manager:v,projectRoot:o,chapter:c,sectionTitle:a,scopedFilePaths:L,fileRoleByPath:ae,fileProcessingByPath:af,signal:b}),diagnostics:bG,signal:b}),d,a.signal))):await A(()=>bd(bG,`chapter-draft:${c.id}`,()=>(0,aS.od)(b=>bw(q,c,ab,ac,aX,bm,a.requirement,ar,{forbidDrawingImages:!1,minWords:bn,targetWords:bl,maxWords:bg,maxTokens:bo,factCoverageContext:aV,signal:b}),bT(bl),a.signal)));if((0,az.Te)(a.signal),!e){let a=`${(0,t.GQ)(c.title)} 大模型未返回有效正文,已阻断生成`;throw D[i]=(0,bb.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:as.primaryPromptId,status:"failed",message:a,details:[`LLM 最近错误:${bG.llm.lastError||"空响应或超时"}`,`证据条数:${ab.length}`],progress:{current:g+1,total:bj.length,label:"章节阻断"}},{subtitle:(0,t.GQ)(c.title),order:g}),y(w),Error(a)}if(!e.trim())throw Error(`${(0,t.GQ)(c.title)} 首次生成失败,未获得可用于定稿的正文`);b=cX(e,c)}let by=bO({chapter:c,content:b,evidence:ab}),bz=(0,aj.V7)(b),bA=S(b),bB=bA.length>0?bA:c.sections||[],bC=(0,ak.qK)(b,[{title:c.title,content:b,sections:bB}]).map(a=>a.message),bF=by.slice(0,6).map(a=>`小节事实密度需优化:${a}`),bH=[...bC,...bF],bJ=function(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))?"failed":"success"}(bz,0,bH);f=(0,bb.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:as.primaryPromptId,status:bJ,message:(0,bb.AQ)(`${(0,t.GQ)(c.title)} 已由大模型成稿:当前 ${bz} 字;章节预算约 ${bc.budgetTarget} 字,本轮目标约 ${bc.roundTarget} 字${bH.length?`;待优化:${bH.slice(0,8).join("、")}`:""}`,h),details:[`本轮完成率:${Math.round(bz/Math.max(1,bc.roundTarget)*100)}%`,`结构目标约 ${bc.structureTarget} 字`,...aC,`二级小节:${bB.length} 个`,`扩写轮次:0`],progress:{current:g+1,total:bj.length,label:bH.length?"章节已生成":"章节达标"}},{subtitle:(0,t.GQ)(c.title),order:g}),aE[g]=f;let bK={id:c.id,title:c.title,content:b,evidence:ab,missingFacts:ac,sections:bB,tablePlans:c.tablePlans||[]},bL=dm({task:aW.task,draft:bK,context:aZ});aZ.reviewResults={...aZ.reviewResults||{},[c.id]:bL},aZ.nodes.push({id:`chapter-reviewer-${c.id}`,type:"chapter_reviewer",status:bL.issues.length?"failed":"completed",startedAt:Date.now(),completedAt:Date.now(),outputSummary:bL.issues.length?`${bL.issues.length} 个 Reviewer 问题`:"Reviewer 通过",metrics:{supportedFacts:bL.supportedFacts},issues:bL.issues}),(0,bb.fx)(D,(0,bb.X5)({type:"llm_review",roleId:`agent-reviewer-${c.id}`,status:bL.issues.length?"failed":"success",message:bL.issues.length?`${(0,t.GQ)(c.title)} Reviewer 发现 ${bL.issues.length} 个问题`:`${(0,t.GQ)(c.title)} Reviewer 通过`,details:bL.issues.map(a=>a.message)},{subtitle:"Agent Reviewer",order:D.length})),y(w);let bM=bL.issues.some(a=>/Writer 未完成/u.test(a.message));if(bL.issues.length>0&&(bL.repairable||bM)){let b=bL.repairable?(k={task:aW.task,review:bL}).review.repairable?["【Agent 定向修复任务】",`章节:${k.task.title}`,"只修复下列问题,不重写无关内容;如果问题是小节正文不足,必须按原小节标题完整补足该小节正式正文,每个小节不得少于任务最小深度:",...k.review.issues.map(a=>`- ${a.message};${a.suggestion||""}`),dl(k.task)].join("\n"):"":["【Agent 定向修复任务】",`章节:${aW.task.title}`,"Reviewer 发现 Writer 未完成小节。必须基于对应小节事实卡和证据生成正式正文,替换并删除 WRITER_MISSING_SECTION 标记;不得跳过这些小节,不得保留占位说明。",...bL.issues.map(a=>`- ${a.message};${a.suggestion||""}`)].join("\n"),d=D.length,e=bL.issues.filter(a=>/Writer 未完成/u.test(a.message)),f=bL.issues.filter(a=>/正文不足,未达到任务最小深度/u.test(a.message)),g=[...e,...f.filter(a=>!e.some(b=>b.message===a.message))],h=[];for(let[e,f]of((0,bb.fx)(D,(0,bb.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:"running",message:`${(0,t.GQ)(c.title)} Reviewer 发现 ${bL.issues.length} 个问题,正在定向修复`,details:bL.issues.map(a=>a.message)},{subtitle:"Agent Repairer",order:d})),y(w),g.entries())){let i=f.message.replace(/\s*Writer 未完成.*$/u,"").replace(/\s*正文不足,未达到任务最小深度.*$/u,"").trim(),j=/Writer 未完成/u.test(f.message)?"缺失小节":"深度不足小节";(0,bb.fx)(D,(0,bb.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:"running",message:`${(0,t.GQ)(c.title)} 正在补写${j} ${e+1}/${g.length}:${i}`,details:[...h,`当前:${i}`]},{subtitle:"Agent Repairer",order:d})),y(w);let k=aW.task.sections.find(a=>a.title===i),l=(a,b,c)=>{let d=a=>a.replace(/[\u00a0\u3000]/gu," ").replace(/^\d+(?:\.\d+)*\s+/u,"").trim(),e=a=>d(a).replace(/施工(?=方案|流程|方法)/gu,"").replace(/专项(?=方案)/gu,"").replace(/\s/gu,""),f=a=>a.trim().replace(/^#{2,6}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]+\n+/u,"").trim(),g=a.split("\n"),h=0;for(let i=0;i<g.length;i+=1){let j=g[i],k=h;h+=j.length+1;let l=/^(#{3,4})\s+(.+)$/u.exec(j.trim());if(!l)continue;let m=d(l[2]),n=e(m),o=e(b);if(m!==b&&!m.includes(b)&&!b.includes(m)&&n!==o&&!n.includes(o)&&!o.includes(n))continue;let p=g.length;for(let a=i+1;a<g.length;a+=1)if(/^#{2,4}\s+/u.test(g[a].trim())){p=a;break}let q=p<g.length?g.slice(0,p).join("\n").length:a.length,r=f(c);return`${a.slice(0,k)}${j.trim()}
|
|
154
|
+
${b.join("\n")}`:""}(aH)}),aW=function(a){let b=Date.now(),c=a.plan.chapters.find(b=>b.chapterId===a.chapter.id)||a.plan.chapters.find(b=>b.title===a.chapter.title);if(!c)throw Error(`缺少章节计划:${a.chapter.title}`);let d=a.context.facts.filter(a=>c.evidenceQueries.some(b=>di(a,b))||c.requiredFacts.some(b=>di(a,b))),e=c.sections.map(b=>{let c=a.context.facts.filter(a=>b.evidenceQueries.some(b=>di(a,b))||b.requiredFacts.some(b=>di(a,b))).slice(0,24),d=a.evidence.filter(a=>b.evidenceQueries.some(b=>(function(a,b){let c=dg(`${a.sectionTitle||""} ${a.content||""} ${a.filePath||""}`);return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(dg(a)))})(a,b))).slice(0,24),e=b.requiredGraphNodes.flatMap(b=>dj(a.context.baseProjectGraph,b)).slice(0,12),f=[];return 0===d.length&&0===c.length&&0===e.length&&f.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${b.title} 缺少事实、图谱或证据支撑`,suggestion:"应先定向检索和抽取事实,不能生成占位正文。"}),{...b,factIds:c.map(a=>(0,az.c6)({key:a.key,value:(0,az.lG)(a.value),sourceFile:a.sourceFile}).slice(0,12)),evidenceIds:d.map(a=>(0,az.c6)({filePath:a.filePath,content:a.content.slice(0,160),score:a.score}).slice(0,12)),graphNodeIds:e.map(a=>(0,az.c6)(a).slice(0,12)),ready:0===f.length,issues:f}}),f=e.flatMap(a=>a.issues),g={taskId:`chapter-task-${(0,az.c6)({plan:a.plan.planId,chapter:a.chapter.id,evidence:a.evidence.map(a=>(0,az.c6)({filePath:a.filePath,content:a.content.slice(0,120),score:a.score}))}).slice(0,10)}`,chapterId:a.chapter.id,title:a.chapter.title,facts:d.slice(0,48),evidence:a.evidence.slice(0,48),graphContext:dj(a.context.baseProjectGraph,a.chapter.title).slice(0,20).join("\n"),sections:e,ready:0===f.length,issues:f};return{task:g,node:{id:`chapter-task-${a.chapter.id}`,type:"chapter_task_planner",status:g.ready?"completed":"failed",startedAt:b,completedAt:Date.now(),outputSummary:`${g.sections.filter(a=>a.ready).length}/${g.sections.length} 个小节任务就绪`,metrics:{facts:g.facts.length,evidence:g.evidence.length,issues:f.length},issues:f}}}({plan:bE.plan,chapter:c,context:aZ,evidence:ab});if(aZ.chapterTasks=[...(aZ.chapterTasks||[]).filter(a=>a.chapterId!==c.id),aW.task],aZ.nodes.push(aW.node),(0,bb.fx)(D,(0,bb.X5)({type:"validation",roleId:`agent-chapter-task-${c.id}`,status:aW.task.ready||m?"success":"failed",message:aW.task.ready?aW.node.outputSummary||`${(0,t.GQ)(c.title)} 章节任务规划完成`:m?`${(0,t.GQ)(c.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:aW.node.outputSummary||`${(0,t.GQ)(c.title)} 章节任务规划完成`,details:aW.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:D.length})),y(w),!aW.task.ready&&!m)throw Error(`${(0,t.GQ)(c.title)} 章节任务未就绪:${aW.task.issues.map(a=>a.message).join(";")}`);let aX=[at,dm(aW.task)].filter(Boolean).join("\n\n"),a$={total:aH.length,satisfied:aH.filter(a=>"satisfied"===a.status).length,missing:aH.filter(a=>"missing"===a.status).length,lowConfidence:aH.filter(a=>"low_confidence"===a.status).length};for(let a of aI)ay.push(`${c.title}:事实需求未确认 ${a}`);let a_=Q?.chapterRules.find(a=>a.id===c.id||a.title===c.title),a1=bD.chapterTargets.get(c.id)||1200,a2=c.sections?.filter(Boolean).length||0,ba=/[、,,;;]/u.test(c.title),bc=function(a){let{budgetTarget:b,sectionCount:c,title:d,longformStrict:e}=a,f=/[、,,;;]/u.test(d),g=/工期|进度|质量|安全|危大|资源|人材机|保障|措施|重难点/u.test(d),h=/概况|结语|附录|说明/u.test(d),i=c>0?c*(f?720:g?900:780):g?5200:3600,j=e?h?2600:g?5200:3600:Math.min(1200,b),k=e?Math.min(Math.max(4200,b),c>=30?9800:f?8800:g?9200:7200):b,l=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:a1,sectionCount:a2,title:c.title,longformStrict:bD.longformStrict}),bg=Math.ceil(bc.maxWords*(bD.maxChars?1.05:1)),bk=bD.targetChars?Math.min(1800,Math.max(600,Math.floor(.45*bc.roundTarget))):1200,bl=bc.roundTarget,bn=Math.max(Math.min(a_?.minWords||0,bl),Math.min(Q?.dynamicChapterRule.minWordsPerChapter||0,bl),Math.floor(.68*bl),bk),bo=bS(bn,bl),bp=a2>0?Math.min(bl,Math.max(1800,bc.structureTarget)):bl,bq=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),br=process.env.DOCUMENT_SECTION_FIRST_GENERATION,bs=void 0!==br&&0===Number(br),bt=void 0!==br&&0!==Number(br),bu=bl>=6e3&&a2>=4&&a2<=bq&&!ba,bv=!bs&&a2>=2&&(a2>bq||ba||bD.longformStrict&&a2>=6),bx=!bs&&!bv&&a2>=2&&a2<=bq&&(bt||bu||bD.longformStrict);if(m)b=cX(m,c),f=(0,bb.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:as.primaryPromptId,status:"success",message:`${(0,t.GQ)(c.title)} 已复用已有章节正文:当前 ${(0,aj.V7)(b)} 字,跳过 Writer,直接进入 Reviewer/Repairer/Final Gate`,details:[`有效证据:${ab.length} 条`,`事实需求:${a$.satisfied}/${a$.total} 已满足,缺失 ${a$.missing},低置信 ${a$.lowConfidence}`,"来源:resumeChapters/checkpointChapters"],progress:{current:g+1,total:bj.length,label:"复用章节"}},{subtitle:(0,t.GQ)(c.title),order:g}),D[i]=f,y(w);else{D[i]=(0,bb.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:as.primaryPromptId,status:"running",message:bv?`${(0,t.GQ)(c.title)} 正在按语义小节组并发成稿`:bx?`${(0,t.GQ)(c.title)} 正在按小节并发成稿`:`${(0,t.GQ)(c.title)} 正在整章一次成稿`,details:bv||bx?[...aC,`有效证据:${ab.length} 条`,`事实需求:${a$.satisfied}/${a$.total} 已满足,缺失 ${a$.missing},低置信 ${a$.lowConfidence}`,bc.label,`生成上限约 ${bg} 字`,`规划小节:${c.sections?.length||0} 个`,bv?"小节较多,按工期/质量/安全/资源等语义组并发生成,避免整章长调用低产":"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...aC,`有效证据:${ab.length} 条`,`事实需求:${a$.satisfied}/${a$.total} 已满足,缺失 ${a$.missing},低置信 ${a$.lowConfidence}`,bc.label,`生成上限约 ${bg} 字`,`规划小节:${a2} 个`,"首次生成必须覆盖章节结构、小节和事实,篇幅目标仅作为规划参考"],progress:{current:g+1,total:bj.length,label:bv?"小节分组":bx?"小节并发":"整章成稿"}},{subtitle:(0,t.GQ)(c.title),order:g}),y();let d=bv?Math.min(bT(bl)+42e4,9e5):bx?Math.min(bT(bl)+18e4,6e5):Math.min(bT(bl),18e4),e=bv?await A(()=>bd(bG,`chapter-section-group-draft:${c.id}`,()=>bQ({template:q,chapter:c,evidence:ab,missingFacts:ac,promptTexts:aX,projectContext:bm,requirement:a.requirement,roleContext:ar,targetWords:bp,maxWords:bg,forbidDrawingImages:!1,factCoverageContext:aV,sectionEvidenceProvider:b=>c6({manager:v,projectRoot:o,chapter:c,sectionTitle:b,scopedFilePaths:L,fileRoleByPath:ae,fileProcessingByPath:af,signal:a.signal}),diagnostics:bG,signal:a.signal}))):bx?await A(()=>bd(bG,`chapter-section-draft:${c.id}`,()=>(0,aS.od)(b=>bR({template:q,chapter:c,evidence:ab,missingFacts:ac,promptTexts:aX,projectContext:bm,requirement:a.requirement,roleContext:ar,targetWords:bp,maxWords:bg,forbidDrawingImages:!1,factCoverageContext:aV,projectRoot:o,modelName:(0,aS.$y)()?.model.name,materialContextHash:(0,az.c6)({materialFilePaths:G,promptTexts:at}),allowPartialResult:!1,sectionEvidenceProvider:a=>c6({manager:v,projectRoot:o,chapter:c,sectionTitle:a,scopedFilePaths:L,fileRoleByPath:ae,fileProcessingByPath:af,signal:b}),diagnostics:bG,signal:b}),d,a.signal))):await A(()=>bd(bG,`chapter-draft:${c.id}`,()=>(0,aS.od)(b=>bw(q,c,ab,ac,aX,bm,a.requirement,ar,{forbidDrawingImages:!1,minWords:bn,targetWords:bl,maxWords:bg,maxTokens:bo,factCoverageContext:aV,signal:b}),bT(bl),a.signal)));if((0,az.Te)(a.signal),!e){let a=`${(0,t.GQ)(c.title)} 大模型未返回有效正文,已阻断生成`;throw D[i]=(0,bb.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:as.primaryPromptId,status:"failed",message:a,details:[`LLM 最近错误:${bG.llm.lastError||"空响应或超时"}`,`证据条数:${ab.length}`],progress:{current:g+1,total:bj.length,label:"章节阻断"}},{subtitle:(0,t.GQ)(c.title),order:g}),y(w),Error(a)}if(!e.trim())throw Error(`${(0,t.GQ)(c.title)} 首次生成失败,未获得可用于定稿的正文`);b=cX(e,c)}let by=bO({chapter:c,content:b,evidence:ab}),bz=(0,aj.V7)(b),bA=S(b),bB=bA.length>0?bA:c.sections||[],bC=(0,ak.qK)(b,[{title:c.title,content:b,sections:bB}]).map(a=>a.message),bF=by.slice(0,6).map(a=>`小节事实密度需优化:${a}`),bH=[...bC,...bF],bJ=function(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))?"failed":"success"}(bz,0,bH);f=(0,bb.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:as.primaryPromptId,status:bJ,message:(0,bb.AQ)(`${(0,t.GQ)(c.title)} 已由大模型成稿:当前 ${bz} 字;章节预算约 ${bc.budgetTarget} 字,本轮目标约 ${bc.roundTarget} 字${bH.length?`;待优化:${bH.slice(0,8).join("、")}`:""}`,h),details:[`本轮完成率:${Math.round(bz/Math.max(1,bc.roundTarget)*100)}%`,`结构目标约 ${bc.structureTarget} 字`,...aC,`二级小节:${bB.length} 个`,`扩写轮次:0`],progress:{current:g+1,total:bj.length,label:bH.length?"章节已生成":"章节达标"}},{subtitle:(0,t.GQ)(c.title),order:g}),aE[g]=f;let bK={id:c.id,title:c.title,content:b,evidence:ab,missingFacts:ac,sections:bB,tablePlans:c.tablePlans||[]},bL=dq({task:aW.task,draft:bK,context:aZ});aZ.reviewResults={...aZ.reviewResults||{},[c.id]:bL},aZ.nodes.push({id:`chapter-reviewer-${c.id}`,type:"chapter_reviewer",status:bL.issues.length?"failed":"completed",startedAt:Date.now(),completedAt:Date.now(),outputSummary:bL.issues.length?`${bL.issues.length} 个 Reviewer 问题`:"Reviewer 通过",metrics:{supportedFacts:bL.supportedFacts},issues:bL.issues}),(0,bb.fx)(D,(0,bb.X5)({type:"llm_review",roleId:`agent-reviewer-${c.id}`,status:bL.issues.length?"failed":"success",message:bL.issues.length?`${(0,t.GQ)(c.title)} Reviewer 发现 ${bL.issues.length} 个问题`:`${(0,t.GQ)(c.title)} Reviewer 通过`,details:bL.issues.map(a=>a.message)},{subtitle:"Agent Reviewer",order:D.length})),y(w);let bM=bL.issues.some(a=>/Writer 未完成/u.test(a.message));if(bL.issues.length>0&&(bL.repairable||bM)){let b=bL.repairable?(k={task:aW.task,review:bL}).review.repairable?["【Agent 定向修复任务】",`章节:${k.task.title}`,"只修复下列问题,不重写无关内容;如果问题是小节正文不足,必须按原小节标题完整补足该小节正式正文,每个小节不得少于任务最小深度:",...k.review.issues.map(a=>`- ${a.message};${a.suggestion||""}`),dm(k.task)].join("\n"):"":["【Agent 定向修复任务】",`章节:${aW.task.title}`,"Reviewer 发现 Writer 未完成小节。必须基于对应小节事实卡和证据生成正式正文,替换并删除 WRITER_MISSING_SECTION 标记;不得跳过这些小节,不得保留占位说明。",...bL.issues.map(a=>`- ${a.message};${a.suggestion||""}`)].join("\n"),d=D.length,e=bL.issues.filter(a=>/Writer 未完成/u.test(a.message)),f=bL.issues.filter(a=>/正文不足,未达到任务最小深度/u.test(a.message)),g=[...e,...f.filter(a=>!e.some(b=>b.message===a.message))],h=[];for(let[e,f]of((0,bb.fx)(D,(0,bb.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:"running",message:`${(0,t.GQ)(c.title)} Reviewer 发现 ${bL.issues.length} 个问题,正在定向修复`,details:bL.issues.map(a=>a.message)},{subtitle:"Agent Repairer",order:d})),y(w),g.entries())){let i=f.message.replace(/\s*Writer 未完成.*$/u,"").replace(/\s*正文不足,未达到任务最小深度.*$/u,"").trim(),j=/Writer 未完成/u.test(f.message)?"缺失小节":"深度不足小节";(0,bb.fx)(D,(0,bb.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:"running",message:`${(0,t.GQ)(c.title)} 正在补写${j} ${e+1}/${g.length}:${i}`,details:[...h,`当前:${i}`]},{subtitle:"Agent Repairer",order:d})),y(w);let k=aW.task.sections.find(a=>a.title===i),l=(a,b,c)=>{let d=a=>a.replace(/[\u00a0\u3000]/gu," ").replace(/^\d+(?:\.\d+)*\s+/u,"").trim(),e=a=>d(a).replace(/施工(?=方案|流程|方法)/gu,"").replace(/专项(?=方案)/gu,"").replace(/\s/gu,""),f=a=>a.trim().replace(/^#{2,6}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]+\n+/u,"").trim(),g=a.split("\n"),h=0;for(let i=0;i<g.length;i+=1){let j=g[i],k=h;h+=j.length+1;let l=/^(#{3,4})\s+(.+)$/u.exec(j.trim());if(!l)continue;let m=d(l[2]),n=e(m),o=e(b);if(m!==b&&!m.includes(b)&&!b.includes(m)&&n!==o&&!n.includes(o)&&!o.includes(n))continue;let p=g.length;for(let a=i+1;a<g.length;a+=1)if(/^#{2,4}\s+/u.test(g[a].trim())){p=a;break}let q=p<g.length?g.slice(0,p).join("\n").length:a.length,r=f(c);return`${a.slice(0,k)}${j.trim()}
|
|
155
155
|
|
|
156
|
-
${r}${a.slice(q)}`}
|
|
156
|
+
${r}${a.slice(q)}`}let i=aW.task.sections.findIndex(a=>e(a.title)===e(b));if(i>=0){let d=aW.task.sections.slice(i+1).map(a=>e(a.title));for(let h=0;h<g.length;h+=1){let i=/^(#{3,4})\s+(.+)$/u.exec(g[h].trim());if(!i||!d.includes(e(i[2])))continue;let j=g.slice(0,h).join("\n").length+ +(h>0),k=f(c);return k?`${a.slice(0,j).trimEnd()}
|
|
157
157
|
|
|
158
|
-
|
|
158
|
+
### ${b}
|
|
159
|
+
|
|
160
|
+
${k}
|
|
161
|
+
|
|
162
|
+
${a.slice(j).trimStart()}`:a}}let j=f(c);return j?`${a.trimEnd()}
|
|
163
|
+
|
|
164
|
+
### ${b}
|
|
165
|
+
|
|
166
|
+
${j}`:a},m=await c6({manager:v,projectRoot:o,chapter:c,sectionTitle:i,scopedFilePaths:L,fileRoleByPath:ae,fileProcessingByPath:af,signal:a.signal}).catch(()=>[]),n=Math.max(k?.minChars||0,/项目主要施工内容|主要分部分项工程施工方案|主要施工方法/u.test(i)?2200:/项目特点.*重点.*难点|重点.*难点.*分析/u.test(i)?1800:/原材料进场复试|见证取样|危大工程专项施工方案审批流程/u.test(i)?1200:760),p=/正文不足,未达到任务最小深度/u.test(f.message);bG.llm.lastError=void 0;let r=await A(()=>bd(bG,`agent-repairer-section:${c.id}:${i}`,()=>bI({template:q,chapter:c,sectionTitle:i,evidence:m.length?m:ab,missingFacts:ac,promptTexts:[aX,b].filter(Boolean).join("\n\n"),projectContext:bm,requirement:a.requirement,roleContext:ar,targetWords:n,maxWords:1.25*n,forbidDrawingImages:!1,factCoverageContext:aV,qualityFeedback:`Repairer 定向补写“${i}”。必须输出该小节正式正文并彻底删除 WRITER_MISSING_SECTION 标记。`,timeoutMs:3e5,diagnostics:bG,signal:a.signal})));if((!r||r.includes("WRITER_MISSING_SECTION"))&&(bG.llm.lastError=void 0,(0,bb.fx)(D,(0,bb.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:"running",message:`${(0,t.GQ)(c.title)} 正在二次补写${j} ${e+1}/${g.length}:${i}`,details:[...h,`重试:${i}`]},{subtitle:"Agent Repairer",order:d})),y(w),r=await A(()=>bd(bG,`agent-repairer-section-retry:${c.id}:${i}`,()=>bI({template:q,chapter:c,sectionTitle:i,evidence:m.length?m:ab,missingFacts:ac,promptTexts:b,projectContext:bm,requirement:a.requirement,roleContext:ar,targetWords:n,maxWords:1.15*n,forbidDrawingImages:!1,factCoverageContext:aV,qualityFeedback:`第二次定向补写“${i}”:只写该小节正式正文,不写解释,不保留 WRITER_MISSING_SECTION。`,timeoutMs:36e4,diagnostics:bG,signal:a.signal})))),r&&!r.includes("WRITER_MISSING_SECTION")){let a=/^#{3,4}\s+/u.test(r.trim())?r.trim():`### ${i}
|
|
167
|
+
|
|
168
|
+
${r.trim()}`,b=(0,aj.V7)(a),c=!p||b>=Math.floor(.85*n),d=c?l(bK.content,i,a):bK.content,e=d!==bK.content;e&&(bK={...bK,content:d}),h.push(e?`成功:${i}(${b}字,证据 ${m.length||ab.length} 条)`:`失败:${i}(${c?"未定位到原小节块":`补写不足 ${b}/${n} 字`})`)}else h.push(`失败:${i}(${!r?bG.llm.lastError||"空响应":"仍包含 WRITER_MISSING_SECTION"})`);(0,bb.fx)(D,(0,bb.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:"running",message:`${(0,t.GQ)(c.title)} 已补写${j} ${e+1}/${g.length}`,details:h},{subtitle:"Agent Repairer",order:d})),y(w)}let i={content:bK.content,appliedCount:0};bL.issues.some(a=>!/Writer 未完成|正文不足,未达到任务最小深度/u.test(a.message))&&(i=await A(()=>bd(bG,`agent-repairer:${c.id}`,()=>be({template:q,chapter:{id:c.id,title:c.title,content:bK.content,evidence:ab,missingFacts:ac,sections:bB},issues:bL.issues.map(a=>`${a.message};${a.suggestion||""}`),promptTexts:[aX,b].filter(Boolean).join("\n\n"),requirement:a.requirement,forbidDrawingImages:!1,diagnostics:bG,signal:a.signal})))),bK={...bK,content:cX(i.content||bK.content,c)},bL=dq({task:aW.task,draft:bK,context:aZ}),aZ.reviewResults={...aZ.reviewResults||{},[c.id]:bL},aZ.nodes.push({id:`chapter-repairer-${c.id}`,type:"chapter_repairer",status:bL.issues.length?"failed":"completed",startedAt:Date.now(),completedAt:Date.now(),outputSummary:bL.issues.length?`修复后仍有 ${bL.issues.length} 个问题`:"定向修复通过",metrics:{supportedFacts:bL.supportedFacts},issues:bL.issues}),(0,bb.fx)(D,(0,bb.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:bL.issues.some(a=>"blocker"===a.severity||"error"===a.level)?"failed":"success",message:bL.issues.length?`${(0,t.GQ)(c.title)} 定向修复后仍有 ${bL.issues.length} 个问题`:`${(0,t.GQ)(c.title)} 定向修复通过`,details:[...h,...bL.issues.map(a=>`剩余:${a.message}`)]},{subtitle:"Agent Repairer",order:d})),y(w)}bL.issues.some(a=>"blocker"===a.severity||"error"===a.level)&&aB.push(`${(0,t.GQ)(c.title)} Reviewer 未通过:${bL.issues.map(a=>a.message).join(";")}`),aD[g]=bK,w=aD.filter(a=>!!a),y(w),bG.quality.blockingCount+=bL.issues.filter(a=>"error"===a.level).length,bG.quality.importantCount+=bL.issues.filter(a=>"warning"===a.level).length}catch(d){if(a.signal?.aborted)throw d;console.error(`[gen] chapter ${c.title} failed:`,d);let b=`${c.title}:${d instanceof Error?d.message:"生成失败"}`;aB.push(b),f=(0,bb.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,t.GQ)(c.title)} 生成失败:${b}`},{subtitle:(0,t.GQ)(c.title),order:g}),aE[g]=f}f&&(D[i]=f),y(w)}))}let bU=aD.filter(a=>!!a);return aC.push(...aE.filter(a=>!!a)),dd({chapterDrafts:bU,chapterDraftsByOrder:aD,chapterGenerationStagesByOrder:aE,chapterGenerationStages:aC,effectiveChapters:bj,template:q,allEvidence:av,progressStages:D,documentSpec:Q,projectMaterialProfile:H,projectMaterialSummary:O,domainProfile:R,documentBudget:bD,promptTexts:aa,reviewPromptTexts:ac,input:a,generationStrategy:bF,generationDiagnostics:bG,promptBindings:F,promptDocumentRules:$,projectUnderstanding:I,projectContext:bm,projectRoot:o,projectId:p,readiness:T,factExtractionPromptTexts:ab,hasExplicitOutline:N,missingItems:ay,retrievalCoverageReports:aw,failedChapterMessages:aB,webResearchReport:ax,indexHealth:ah,promptPlan:E,agentWorkflow:aZ,emitProgress:y,withProgressHeartbeat:A})}async function du(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,bh.Hh)(f,b,{requirement:a.requirement}),j=(0,bh.W9)(f,b,{requirement:a.requirement}),{kindByPath:k,processingByPath:l}=(0,bh.Hz)(j),m=new Set(i),n=new Map([...k.entries()].map(([a,b])=>[a,(0,bh._W)(b)])),o=new Map([...l.entries()].map(([a,b])=>[a,b])),p=c9(await h.getProject(f),[...m],a.maxEvidencePerChapter),q=[],r=[...m].filter(Boolean).sort(),v=c3(c,c.queries,[]),w=c4(c,[]);for(let a of v.slice(0,w)){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=>bf(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 x=c2(c,q.filter(a=>bf(f,a.filePath,m)),{maxItems:c5(p,c),maxChars:16e3,preservePinned:!0}),y=a.currentMarkdown||"",z=new Set(a.existingFacts??[]),A=c.requiredFacts.filter(a=>!z.has(a)&&!x.some(b=>(0,u.Lk)(b,a)));if(0===x.length)throw Error(`${(0,t.GQ)(c.title)} 缺少可支撑正文的项目资料证据`);let B=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",y?`> 当前文档上下文摘要:${y.replace(/\s+/gu," ")}`:"",`本章依据已锁定项目资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`,"","### 资料依据",...x.map(s.OF)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:B,evidence:x,missingFacts:A}}},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}
|
|
159
169
|
${a.category}
|
|
160
170
|
${a.format}
|
|
161
171
|
${a.status}`.toLowerCase().includes(c.toLowerCase()))&&e.set(a.relativePath,{...a,matchedBy:c?"path":a.matchedBy});if(c&&!1!==b.includeContent)try{for(let b of(await l().search(a,c,{limit:Math.max(20,d)})).results){let a=b.filePath,c=e.get(a)||f.find(b=>b.relativePath===a);e.set(a,{...c||{relativePath:a,category:"content",format:"knowledge",fileSize:0,mtime:0,chunkCount:0,indexedAt:0,lastVerifiedAt:0,status:"active"},matchedBy:"content",score:b.score})}}catch{}let g=Array.from(e.values()).sort((a,b)=>{let c=a=>"content"===a.matchedBy?3:"path"===a.matchedBy?2:+("metadata"===a.matchedBy);return c(b)-c(a)||(b.score??0)-(a.score??0)||b.mtime-a.mtime||a.relativePath.localeCompare(b.relativePath,"zh-CN")});return{files:g.slice(0,d),total:g.length}}},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)(),c={}){let d,f,g=B(a),j=[];if(!g)return{issues:[{level:"error",message:"文档模板不存在或已删除"}],fileDiagnostics:[],promptDiagnostics:[],config:void 0};let p=(0,i.XB)("prompt"),q=I(g),r=J(g);q||j.push({level:"error",message:"模板未绑定项目角色配置,且未匹配到自动专业角色配置"}),q&&!r&&j.push({level:"error",message:`项目角色配置不存在或已删除:${q}`}),g.promptIds?.length&&j.push({level:"warning",message:"模板存在旧 promptIds 字段残留,该字段已不参与生成,请清理模板历史数据。"}),g.promptBindings?.length&&j.push({level:"warning",message:"模板存在旧 promptBindings 字段残留,该字段已不参与生成,请清理模板历史数据。"});let s=L(g),t=(0,o.qp)(g);r&&0===r.promptRoles.length&&j.push({level:"error",message:"项目角色配置未配置提示词角色。"}),r&&r.promptRoles.length>0&&0===s.length&&j.push({level:"error",message:"项目角色配置中的提示词角色未绑定任何有效提示词资源。"});let u=e.resolve(b),v=(0,h.Yy)(u),w=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}(t,v);if(0===t.length?j.push({level:"error",message:"模板未绑定项目资料包,请先选择需要参与生成的项目文件夹。"}):0===w.length&&j.push({level:"error",message:"模板绑定的项目资料包不存在或没有可用索引文件,请重新选择项目资料包。"}),g&&(d=(0,l.P)(u,{requirement:c.requirement,boundFilePaths:w}),0===t.length&&!d.source.ambiguous&&d.source.selectedFiles>0)){let a=j.findIndex(a=>"error"===a.level&&"模板未绑定项目资料包,请先选择需要参与生成的项目文件夹。"===a.message);a>=0&&j.splice(a,1)}let x=new Map(v.map(a=>[a.relativePath,a])),z=w.map(a=>{let b=x.get(a);return b||j.push({level:"error",message:`知识库文件不存在:${a}`}),b&&("disk"===b.status||0===b.indexedAt)&&j.push({level:"warning",message:`知识库文件存在但尚未完成索引:${a}`}),b?.status==="error"&&j.push({level:"warning",message:`知识库文件索引失败:${a}${b.errorMessage?`,${b.errorMessage}`:""}`}),b&&0===b.chunkCount&&j.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)}}),A=y(s),C=new Set(r?.promptRoles.map(a=>a.roleId)||[]);for(let a of r?.promptRoles||[]){let b=p.find(b=>b.id===a.roleId);if(!b){j.push({level:"error",message:`提示词角色不存在:${a.roleId}`});continue}0===(b.resourceIds?.length?b.resourceIds:b.resourceId?[b.resourceId]:[]).length&&j.push({level:"error",message:`提示词角色未绑定资源:${b.name}`})}let E=s.map(a=>{let b=p.find(b=>b.id===a.roleId),c=A.find(b=>b.id===a.promptId);return b||j.push({level:"error",message:`提示词角色不存在:${a.roleId}`}),C.has(a.roleId)||j.push({level:"error",message:`提示词绑定不属于当前项目角色配置:${a.roleId}`}),c||j.push({level:"error",message:`提示词不存在:${a.promptId}`}),c&&!c.content.trim()&&j.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(g){let a=d||(0,l.P)(u,{requirement:c.requirement,boundFilePaths:w}),b=(0,m.h)(g,a);for(let c of(f=(0,n.$)({template:g,spec:(0,k.x)(g).spec,summary:a,resolvedRoles:b})).blockingIssues)j.push({level:"error",message:`生成准备度不足:${c}`});for(let a of f.warnings)j.push({level:"warning",message:a})}return{templateId:a,projectRoleConfigId:q,fileDiagnostics:z,promptDiagnostics:E,readiness:f,issues:j}}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?`章节证据风险:
|