@customize-agent/server 4.1.17 → 4.1.19
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 +0 -10
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/1924.js +11 -5
- package/.next/server/middleware-build-manifest.js +0 -10
- 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 +2 -2
- package/.next/static/{Gfve26qzGPXnbN8biy6Ea → 95avgtdDG74eXn-c5OAwf}/_buildManifest.js +1 -1
- package/.next/static/chunks/209-5117020514c2bd0c.js +4 -0
- package/.next/static/chunks/{289-12dfcb3abec1c4b4.js → 289-35ac595388bbd018.js} +1 -1
- package/.next/static/chunks/788-3afeb069ed706ac0.js +1 -0
- package/.next/static/chunks/pages/documents-b59eba36e96a5621.js +1 -0
- package/.next/static/chunks/pages/knowledge/files-3b5d049efb076e4b.js +1 -0
- package/.next/static/chunks/pages/knowledge/manage-67b5c7fe257f37c5.js +1 -0
- package/.next/static/chunks/pages/prompt-08ecf369f65abdfd.js +1 -0
- package/.next/static/chunks/pages/system/logs-a76f9e3131e0cd79.js +1 -0
- package/.next/static/chunks/webpack.js +2 -2
- package/.next/static/development/_buildManifest.js +1 -1
- package/package.json +1 -1
- package/.next/static/chunks/209-2ef60844949feb7c.js +0 -4
- package/.next/static/chunks/788-961761f5858f9189.js +0 -1
- package/.next/static/chunks/pages/documents-35851fdd6dca8aa0.js +0 -1
- package/.next/static/chunks/pages/knowledge/files-56846319c77d2330.js +0 -1
- package/.next/static/chunks/pages/knowledge/manage-ac9af12007e4a706.js +0 -1
- package/.next/static/chunks/pages/prompt-62659a5cdd1f904b.js +0 -1
- package/.next/static/chunks/pages/system/logs-43d2bb827c42e529.js +0 -1
- /package/.next/static/{Gfve26qzGPXnbN8biy6Ea → 95avgtdDG74eXn-c5OAwf}/_ssgManifest.js +0 -0
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
说明:以下内容仅用于事实覆盖、检索命中和质量检查,不得新增、删除、重排用户或模板章节。
|
|
8
8
|
建议关注事实:${a.factFields.map(a=>a.name).join("、")}
|
|
9
9
|
章节内容建议:${a.chapterRules.map(a=>`${a.title}${a.generationHint?`:${a.generationHint.replace(/\s+/gu," ")}`:""}`).join(";")||"以当前模板章节为准"}
|
|
10
|
-
质量提醒:${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]}},22157:(a,b,c)=>{c.d(b,{Dx:()=>f,SH:()=>h,Te:()=>j,c6:()=>e,lG:()=>i,ph:()=>g});var d=c(77598);function e(a){return(0,d.createHash)("sha1").update(JSON.stringify(a)).digest("hex")}function f(a){return Array.isArray(a)?a.map(a=>String(a||"").trim()).filter(Boolean):"string"==typeof a&&a.trim()?[a.trim()]:[]}function g(a){return Array.isArray(a)?a.filter(a=>a&&"object"==typeof a):a&&"object"==typeof a?[a]:[]}function h(a,b){return a.toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/giu,"-").replace(/^-|-$/gu,"").slice(0,48)||b}function i(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 j(a){if(a?.aborted)throw Error("用户中止")}},23760:(a,b,c)=>{c.d(b,{AC:()=>p,Ai:()=>r,BV:()=>u,Ff:()=>n,Fv:()=>C,K1:()=>A,M$:()=>V,N1:()=>R,NS:()=>D,Nz:()=>l,ST:()=>N,Ty:()=>v,bM:()=>S,f8:()=>y,gN:()=>w,i0:()=>P,iC:()=>t,ji:()=>Q,k0:()=>B,kQ:()=>U,mR:()=>T,qK:()=>I,qm:()=>L,vY:()=>O,xX:()=>M,yw:()=>H,z0:()=>m});var d=c(8753),e=c(74329),f=c(78217),g=c(11248),h=c(70208),i=c(91977),j=c(52511),k=c(22157);function l(a){return e.hc.test(a.message)}function m(a){let b="string"==typeof a?a:a.message;if("error"===("string"==typeof a?void 0:a.level))return"blocking";for(let a of e.gr)if(a.pattern.test(b))return a.severity;return"minor"}function n(a){let b={blocking:0,important:0,minor:0};for(let c of a)b[m(c)]+=1;return b}function o(a,b){let c=a.replace(/[\][()`*_>#|{},。、“”‘’:;!?,.!?:;-]+/gu," ").replace(e.ug," ").trim();if(c.length<120)return;let d=c.match(/[A-Za-z][A-Za-z-]{2,}|[\p{Script=Han}]{2,}/gu)||[];if(d.length<30)return;let f=1,g=new Map;for(let a=0;a<d.length;a+=1){let c=d[a].toLowerCase();if(g.set(c,(g.get(c)||0)+1),a>0&&c===d[a-1].toLowerCase()?f+=1:f=1,f>=12)return{level:"error",message:`${b} 存在重复 token 退化输出`,suggestion:"请重新生成该小节,禁止保留连续重复的英文单词或无意义片段。"}}let h=[...g.entries()].sort((a,b)=>b[1]-a[1])[0];if(h&&h[1]>=25&&h[1]/d.length>=.42)return{level:"error",message:`${b} 存在重复 token 退化输出`,suggestion:`检测到“${h[0]}”异常高频重复,请重新生成该小节。`}}function p(a,b=[]){let c=[],d=o(a,"全文");for(let a of(d&&c.push(d),b)){let b=o(a.content,`章节“${a.title}”`);for(let d of(b&&c.push(b),a.sections||[])){let b=d.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=a.content.match(RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${b}\\s*\\n([\\s\\S]*?)(?=^#{3,4}\\s+|^##\\s+|$)`,"mu"));if(!e)continue;let f=o(e[1],`小节“${d}”`);f&&c.push(f)}}return c}function q(a){return!!/提示词要求|疑似提示词指令标题|适用性自相矛盾|正式表格不足|不得出现/u.test(a.message)||!/目录与正文/u.test(a.message)&&(/配置要求缺少必要内容/u.test(a.message)?"error"===a.level:!/正文缺少规划小节|缺少规划小节/u.test(a.message)&&(!!/小节内容补写未完成|空小节|小节只有标题|只有标题或表格无正文|生成未完成/u.test(a.message)||!(/生成后事实反查失败/u.test(a.message)||/规划小节正文过短|小节生成未达标/u.test(a.message)||/事实一致性冲突:项目名称/u.test(a.message))&&(/跨章一致性|专业评分不足|专业缺口|泛化套话|缺少关键线路|缺少材料验收|缺少风险识别|缺少进场/u.test(a.message)?"error"===a.level&&!/证据使用覆盖率偏低|章节逻辑依赖不足|文档交付评分报告/u.test(a.message):!(!l(a)||/章节审查|最终质量审查|正文篇幅明显低于目标|正文存在空泛占位表达|结构化事实读取不足|正文可能未显式覆盖|仅包含文件类型和占位符|不在本次招标范围内/u.test(a.message)))))}function r(a,b,c){let d=[{key:"no_errors",label:"无阻断级校验错误",passed:!a.some(a=>"error"===a.level&&q(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)&&q(a))}],f=a.filter(a=>"error"===a.level&&q(a));return{passed:0===f.length,blockingIssues:f,checklist:d}}function s(a){let b=[];for(let c of a.split(e.AQ))e.w7.test(c)&&e.N3.test(c)&&b.push(c);return b}function t(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 u(a){let b=[],c=[];for(let b of e.ZH)a.includes(b)&&c.push(b);c.length>0&&b.push({level:"warning",message:`存在模板化前缀或套话:${c.join("、")}`,suggestion:"请删除“本节/本章将/以下从”等前缀,标题后直接进入对象、动作、措施、检查和闭环。"});let d=a.match(/OCR|知识库|提示词|绑定片段|兜底|后台|文件路径|识别错误/giu);return d?.length&&b.push({level:"error",message:`正文包含后台或资料处理话术:${[...new Set(d)].join("、")}`,suggestion:"请改为正式文档语言,例如“资料文字不清”“资料口径不一致”“项目资料”,不得暴露后台处理过程。"}),b}function v(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 w(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 x(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 y(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=>x(a[1]||"")).filter(Boolean):[]}(a),c=[...a.matchAll(/^###\s+(\d+\.\d+\s+.+)$/gmu)].map(a=>x(a[1]||"")).filter(Boolean);if(0===b.length||0===c.length)return[];let d=new Set(c),f=new Set(b),g=b.filter(a=>!d.has(a)),h=c.filter(a=>!f.has(a)),i=[];return g.length>0&&i.push({level:"error",message:`目录与正文不一致,目录小节未在正文中找到:${[...new Set(g)].join("、")}`,suggestion:"请以最终清洗后的正文二级标题为准重新生成目录。"}),h.length>0&&i.push({level:"error",message:`目录与正文不一致,正文小节未进入目录:${[...new Set(h)].join("、")}`,suggestion:"请重新生成目录,确保只收录正文二级小节,不收录三级小节。"}),i}function z(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 A(a){let b=[...a.matchAll(/^#{2,6}\s+(.+)$/gmu)].map(a=>(0,h.GQ)(a[1]||"")).filter(z);return b.length>0?[{level:"error",message:`正文存在疑似提示词指令标题:${[...new Set(b)].slice(0,8).join("、")}`,suggestion:"请删除或改写为正式施工组织设计小节标题,目录也不得收录该类标题。"}]:[]}function B(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=>x(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 C(a){let b=[],c=[...a.matchAll(/^##\s+(.+)$/gmu)].map(a=>(0,h.GQ)(a[1]||"")).filter(a=>"目录"!==a&&!/^第[一二三四五六七八九十百千万\d]+章\s+/u.test(a));c.length>0&&b.push({level:"error",message:`正文存在非正式章二级标题:${[...new Set(c)].slice(0,8).join("、")}`,suggestion:"正文 ## 只允许用于“第X章”正式章标题;章内小节必须使用 ### X.Y。"});let d=[...a.matchAll(/^##\s+(第[一二三四五六七八九十百千万\d]+章\s+.+)$/gmu)];for(let c=0;c<d.length;c+=1){let e=d[c].index||0,f=d[c+1]?.index??a.length,g=[...a.slice(e,f).matchAll(/^###\s+\d+\.\d+\s+(.+)$/gmu)].map(a=>(0,h.GQ)(a[1]||"")),i=(0,h.GQ)((d[c][1]||"").replace(/^第[一二三四五六七八九十百千万\d]+章\s*/u,""));1===g.length&&x(g[0])===x(i)&&b.push({level:"error",message:`章节只有一个且与章名同名的小节:${d[c][1]}`,suggestion:"应拆分为多个业务小节,不能用章标题重复作为唯一二级小节。"})}return b}function D(a){let b=[];/按审批确认执行/u.test(a)&&b.push({level:"error",message:"表格存在自动兜底污染内容:按审批确认执行",suggestion:"正式投标表格不得使用通用兜底短语,应保留真实业务内容或删除该行。"});let c=a.match(/^\|\s*---\s*\|\s*---\s*\|\s*$/gmu)||[];for(let d of(c.length>20&&b.push({level:"error",message:`表格分隔线异常重复:${c.length} 行`,suggestion:"请修复表格规范化逻辑,禁止把数据行拆成多个碎表。"}),s(a))){let a=d.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 c=a.map(a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>a.trim())),f=c[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;c.find((a,b)=>1!==b&&a.some(a=>!a)||a.length!==h)&&b.push({level:"error",message:`表格存在空单元格或列数不一致:${f.join("、")}`,suggestion:"请补齐每个单元格内容并统一列数;无适用内容时写明“不适用原因”或调整表格结构。"})}return b}function E(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 F(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:x(i),level:e,body:a.slice(f,h)}}).filter(a=>a.title&&(3===a.level||4===a.level))}function G(a,b,c,d,f){let g=E(d),h=e.w7.test(d)&&e.N3.test(d),i=E(d.split("\n").filter(a=>!e.w7.test(a)&&!e.N3.test(a)).join("\n").replace(/^#{1,6}\s+.+$/gmu,""));if(/【本小节生成未达标,需重新生成】/u.test(d))return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 小节生成未达标:${b}`};if(!/项目基本信息|基本信息|工程概况表|项目概况表/u.test(b)||!h&&!(g>=40)){if(h&&i<20)return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"table_only",planned:f,message:`${a} 小节只有标题或表格无正文:${b}`};if(!(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 H(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=x(a),g=function(a,b){let c=F(a).filter(a=>(function(a,b){let c=x(a),d=x(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:G("",b,a.level,a.body,!0),textLength:E(a.body)})).sort((a,b)=>{let c=a.gap&&("empty"===a.gap.reason||"table_only"===a.gap.reason)?1:0,d=b.gap&&("empty"===b.gap.reason||"table_only"===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=G(e.title,a,g.level,g.body,!0);i&&c.push(i),d.add(h)}for(let a of F(b)){let b=`${e.title}|${a.title}|actual`,f=`${e.title}|${a.title}|planned`;if(d.has(b)||d.has(f))continue;let g=G(e.title,a.title,a.level,a.body,!1);g&&("empty"===g.reason||"table_only"===g.reason)&&c.push(g),d.add(b)}}return c}function I(a,b){return H(a,b).filter(a=>"empty"===a.reason||"table_only"===a.reason).map(a=>({level:"error",message:a.message,suggestion:"table_only"===a.reason?"必须在表格前后补充来源、适用范围、结论和执行要求。":"必须补充与该小节相关的材料事实、适用边界和必要说明,达到正文完整度要求。"}))}function J(a){return`${a.fieldName||a.key} ${(0,k.lG)(a.value)}`.replace(/\s+/gu," ").trim()}function K(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 L(a,b){let c=[],d=b.schedule.map(J).find(a=>/\d+\s*(?:日历天|天|个月|月)|计划工期|合同工期/u.test(a)),e=b.quality.map(J).find(a=>/质量|合格|优良/u.test(a));if(d){let b=K(d)[0],e=K(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 M(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 N(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 O(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(J).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)||/标准|规范|编号|GB|JGJ|CJJ|DB\d+/u.test(c)?"hard":"soft"}(b,f);"hard"!==j||e.includes(c)||h.push(b),"soft"!==j||e.includes(c)||i.push(b)}let j=[...new Set(h)],l=[...new Set(i)];return j.length>=2&&d.push({level:"error",message:`生成后事实反查失败:正文出现资料事实主表中未找到的关键数字 ${j.slice(0,8).join("、")}`,suggestion:"请删除无法在资料中反查的关键数字,或改写为资料已明确的事实口径。"}),l.length>=6&&d.push({level:"warning",message:`生成后事实反查提示:正文出现较多未在资料事实主表中反查到的管理数字 ${l.slice(0,10).join("、")}`,suggestion:"请确认这些管理数字属于通用制度、规范要求或项目资料事实;如无依据,建议改为定性管理要求。"}),/质量目标|质量标准/u.test(a)&&b.quality.length>0&&!b.quality.some(b=>a.includes((0,k.lG)(b.value).slice(0,18)))&&d.push({level:"warning",message:"生成后事实反查提示:正文质量目标表述未明显匹配质量事实主表",suggestion:"请使用资料中的质量目标原文或等价表述。"}),d}function P(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 Q(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 R(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 S(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 T(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=s(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:"error",message:`配置要求正式表格不足:${h}/${i}`,suggestion:"请按当前模板匹配的专业规则补充必要表格。"}),g}function U(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=s(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,fileBindings:h,promptBindings:j});s&&k.push(s)}return k}function V(a,b){let c=function(a){let b="";for(let c of(0,j.dU)(a))c.content&&(b+=`${c.content}
|
|
10
|
+
质量提醒:${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]}},22157:(a,b,c)=>{c.d(b,{Dx:()=>f,SH:()=>h,Te:()=>j,c6:()=>e,lG:()=>i,ph:()=>g});var d=c(77598);function e(a){return(0,d.createHash)("sha1").update(JSON.stringify(a)).digest("hex")}function f(a){return Array.isArray(a)?a.map(a=>String(a||"").trim()).filter(Boolean):"string"==typeof a&&a.trim()?[a.trim()]:[]}function g(a){return Array.isArray(a)?a.filter(a=>a&&"object"==typeof a):a&&"object"==typeof a?[a]:[]}function h(a,b){return a.toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/giu,"-").replace(/^-|-$/gu,"").slice(0,48)||b}function i(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 j(a){if(a?.aborted)throw Error("用户中止")}},23760:(a,b,c)=>{c.d(b,{AC:()=>p,Ai:()=>r,BV:()=>u,Ff:()=>n,Fv:()=>C,K1:()=>A,M$:()=>V,N1:()=>R,NS:()=>D,Nz:()=>l,ST:()=>N,Ty:()=>v,bM:()=>S,f8:()=>y,gN:()=>w,i0:()=>P,iC:()=>t,ji:()=>Q,k0:()=>B,kQ:()=>U,mR:()=>T,qK:()=>I,qm:()=>L,vY:()=>O,xX:()=>M,yw:()=>H,z0:()=>m});var d=c(8753),e=c(74329),f=c(78217),g=c(11248),h=c(70208),i=c(91977),j=c(52511),k=c(22157);function l(a){return e.hc.test(a.message)}function m(a){let b="string"==typeof a?a:a.message;if("error"===("string"==typeof a?void 0:a.level))return"blocking";for(let a of e.gr)if(a.pattern.test(b))return a.severity;return"minor"}function n(a){let b={blocking:0,important:0,minor:0};for(let c of a)b[m(c)]+=1;return b}function o(a,b){let c=a.replace(/[\][()`*_>#|{},。、“”‘’:;!?,.!?:;-]+/gu," ").replace(e.ug," ").trim();if(c.length<120)return;let d=c.match(/[A-Za-z][A-Za-z-]{2,}|[\p{Script=Han}]{2,}/gu)||[];if(d.length<30)return;let f=1,g=new Map;for(let a=0;a<d.length;a+=1){let c=d[a].toLowerCase();if(g.set(c,(g.get(c)||0)+1),a>0&&c===d[a-1].toLowerCase()?f+=1:f=1,f>=12)return{level:"error",message:`${b} 存在重复 token 退化输出`,suggestion:"请重新生成该小节,禁止保留连续重复的英文单词或无意义片段。"}}let h=[...g.entries()].sort((a,b)=>b[1]-a[1])[0];if(h&&h[1]>=25&&h[1]/d.length>=.42)return{level:"error",message:`${b} 存在重复 token 退化输出`,suggestion:`检测到“${h[0]}”异常高频重复,请重新生成该小节。`}}function p(a,b=[]){let c=[],d=o(a,"全文");for(let a of(d&&c.push(d),b)){let b=o(a.content,`章节“${a.title}”`);for(let d of(b&&c.push(b),a.sections||[])){let b=d.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=a.content.match(RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${b}\\s*\\n([\\s\\S]*?)(?=^#{3,4}\\s+|^##\\s+|$)`,"mu"));if(!e)continue;let f=o(e[1],`小节“${d}”`);f&&c.push(f)}}return c}function q(a){return!!/提示词要求|疑似提示词指令标题|适用性自相矛盾|正式表格不足|不得出现/u.test(a.message)||!/目录与正文/u.test(a.message)&&(/配置要求缺少必要内容/u.test(a.message)?"error"===a.level:!/正文缺少规划小节|缺少规划小节/u.test(a.message)&&(!!/小节内容补写未完成|空小节|小节只有标题|只有标题或表格无正文|生成未完成/u.test(a.message)||!(/生成后事实反查失败/u.test(a.message)||/规划小节正文过短|小节生成未达标/u.test(a.message)||/事实一致性冲突:项目名称/u.test(a.message))&&(/跨章一致性|专业评分不足|专业缺口|泛化套话|缺少关键线路|缺少材料验收|缺少风险识别|缺少进场/u.test(a.message)?"error"===a.level&&!/证据使用覆盖率偏低|章节逻辑依赖不足|文档交付评分报告/u.test(a.message):!(!l(a)||/章节审查|最终质量审查|正文篇幅明显低于目标|正文存在空泛占位表达|结构化事实读取不足|正文可能未显式覆盖|仅包含文件类型和占位符|不在本次招标范围内/u.test(a.message)))))}function r(a,b,c){let d=[{key:"no_errors",label:"无阻断级校验错误",passed:!a.some(a=>"error"===a.level&&q(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)&&q(a))}],f=a.filter(a=>"error"===a.level&&q(a));return{passed:0===f.length,blockingIssues:f,checklist:d}}function s(a){let b=[];for(let c of a.split(e.AQ))e.w7.test(c)&&e.N3.test(c)&&b.push(c);return b}function t(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 u(a){let b=[],c=[];for(let b of e.ZH)a.includes(b)&&c.push(b);c.length>0&&b.push({level:"warning",message:`存在模板化前缀或套话:${c.join("、")}`,suggestion:"请删除“本节/本章将/以下从”等前缀,标题后直接进入对象、动作、措施、检查和闭环。"});let d=a.match(/OCR|知识库|提示词|绑定片段|兜底|后台|文件路径|识别错误/giu);return d?.length&&b.push({level:"error",message:`正文包含后台或资料处理话术:${[...new Set(d)].join("、")}`,suggestion:"请改为正式文档语言,例如“资料文字不清”“资料口径不一致”“项目资料”,不得暴露后台处理过程。"}),b}function v(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 w(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 x(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 y(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=>x(a[1]||"")).filter(Boolean):[]}(a),c=[...a.matchAll(/^###\s+(\d+\.\d+\s+.+)$/gmu)].map(a=>x(a[1]||"")).filter(Boolean);if(0===b.length||0===c.length)return[];let d=new Set(c),f=new Set(b),g=b.filter(a=>!d.has(a)),h=c.filter(a=>!f.has(a)),i=[];return g.length>0&&i.push({level:"error",message:`目录与正文不一致,目录小节未在正文中找到:${[...new Set(g)].join("、")}`,suggestion:"请以最终清洗后的正文二级标题为准重新生成目录。"}),h.length>0&&i.push({level:"error",message:`目录与正文不一致,正文小节未进入目录:${[...new Set(h)].join("、")}`,suggestion:"请重新生成目录,确保只收录正文二级小节,不收录三级小节。"}),i}function z(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 A(a){let b=[...a.matchAll(/^#{2,6}\s+(.+)$/gmu)].map(a=>(0,h.GQ)(a[1]||"")).filter(z);return b.length>0?[{level:"error",message:`正文存在疑似提示词指令标题:${[...new Set(b)].slice(0,8).join("、")}`,suggestion:"请删除或改写为正式施工组织设计小节标题,目录也不得收录该类标题。"}]:[]}function B(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=>x(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 C(a){let b=[],c=[...a.matchAll(/^##\s+(.+)$/gmu)].map(a=>(0,h.GQ)(a[1]||"")).filter(a=>"目录"!==a&&!/^第[一二三四五六七八九十百千万\d]+章\s+/u.test(a));c.length>0&&b.push({level:"error",message:`正文存在非正式章二级标题:${[...new Set(c)].slice(0,8).join("、")}`,suggestion:"正文 ## 只允许用于“第X章”正式章标题;章内小节必须使用 ### X.Y。"});let d=[...a.matchAll(/^##\s+(第[一二三四五六七八九十百千万\d]+章\s+.+)$/gmu)];for(let c=0;c<d.length;c+=1){let e=d[c].index||0,f=d[c+1]?.index??a.length,g=[...a.slice(e,f).matchAll(/^###\s+\d+\.\d+\s+(.+)$/gmu)].map(a=>(0,h.GQ)(a[1]||"")),i=(0,h.GQ)((d[c][1]||"").replace(/^第[一二三四五六七八九十百千万\d]+章\s*/u,""));1===g.length&&x(g[0])===x(i)&&b.push({level:"error",message:`章节只有一个且与章名同名的小节:${d[c][1]}`,suggestion:"应拆分为多个业务小节,不能用章标题重复作为唯一二级小节。"})}return b}function D(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:"请修复表格规范化逻辑,禁止把数据行拆成多个碎表。"}),s(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 E(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 F(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:x(i),level:e,body:a.slice(f,h)}}).filter(a=>a.title&&(3===a.level||4===a.level))}function G(a,b,c,d,f){let g=E(d),h=e.w7.test(d)&&e.N3.test(d),i=E(d.split("\n").filter(a=>!e.w7.test(a)&&!e.N3.test(a)).join("\n").replace(/^#{1,6}\s+.+$/gmu,""));if(/【本小节生成未达标,需重新生成】/u.test(d))return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 小节生成未达标:${b}`};if(!/项目基本信息|基本信息|工程概况表|项目概况表/u.test(b)||!h&&!(g>=40)){if(h&&i<20)return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"table_only",planned:f,message:`${a} 小节只有标题或表格无正文:${b}`};if(!(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 H(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=x(a),g=function(a,b){let c=F(a).filter(a=>(function(a,b){let c=x(a),d=x(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:G("",b,a.level,a.body,!0),textLength:E(a.body)})).sort((a,b)=>{let c=a.gap&&("empty"===a.gap.reason||"table_only"===a.gap.reason)?1:0,d=b.gap&&("empty"===b.gap.reason||"table_only"===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=G(e.title,a,g.level,g.body,!0);i&&c.push(i),d.add(h)}for(let a of F(b)){let b=`${e.title}|${a.title}|actual`,f=`${e.title}|${a.title}|planned`;if(d.has(b)||d.has(f))continue;let g=G(e.title,a.title,a.level,a.body,!1);g&&("empty"===g.reason||"table_only"===g.reason)&&c.push(g),d.add(b)}}return c}function I(a,b){return H(a,b).filter(a=>"empty"===a.reason||"table_only"===a.reason).map(a=>({level:"error",message:a.message,suggestion:"table_only"===a.reason?"必须在表格前后补充来源、适用范围、结论和执行要求。":"必须补充与该小节相关的材料事实、适用边界和必要说明,达到正文完整度要求。"}))}function J(a){return`${a.fieldName||a.key} ${(0,k.lG)(a.value)}`.replace(/\s+/gu," ").trim()}function K(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 L(a,b){let c=[],d=b.schedule.map(J).find(a=>/\d+\s*(?:日历天|天|个月|月)|计划工期|合同工期/u.test(a)),e=b.quality.map(J).find(a=>/质量|合格|优良/u.test(a));if(d){let b=K(d)[0],e=K(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 M(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 N(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 O(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(J).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)||/标准|规范|编号|GB|JGJ|CJJ|DB\d+/u.test(c)?"hard":"soft"}(b,f);"hard"!==j||e.includes(c)||h.push(b),"soft"!==j||e.includes(c)||i.push(b)}let j=[...new Set(h)],l=[...new Set(i)];return j.length>=2&&d.push({level:"error",message:`生成后事实反查失败:正文出现资料事实主表中未找到的关键数字 ${j.slice(0,8).join("、")}`,suggestion:"请删除无法在资料中反查的关键数字,或改写为资料已明确的事实口径。"}),l.length>=6&&d.push({level:"warning",message:`生成后事实反查提示:正文出现较多未在资料事实主表中反查到的管理数字 ${l.slice(0,10).join("、")}`,suggestion:"请确认这些管理数字属于通用制度、规范要求或项目资料事实;如无依据,建议改为定性管理要求。"}),/质量目标|质量标准/u.test(a)&&b.quality.length>0&&!b.quality.some(b=>a.includes((0,k.lG)(b.value).slice(0,18)))&&d.push({level:"warning",message:"生成后事实反查提示:正文质量目标表述未明显匹配质量事实主表",suggestion:"请使用资料中的质量目标原文或等价表述。"}),d}function P(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 Q(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 R(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 S(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 T(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=s(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:"error",message:`配置要求正式表格不足:${h}/${i}`,suggestion:"请按当前模板匹配的专业规则补充必要表格。"}),g}function U(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=s(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,fileBindings:h,promptBindings:j});s&&k.push(s)}return k}function V(a,b){let c=function(a){let b="";for(let c of(0,j.dU)(a))c.content&&(b+=`${c.content}
|
|
11
11
|
|
|
12
12
|
`);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}},31924:(a,b,c)=>{c.d(b,{h0x:()=>d.h0,bVF:()=>d.bV,OXS:()=>dy,jGg:()=>d.jG,R1O:()=>dz,Bhi:()=>d.Bh,xmB:()=>d.xm});var d=c(52511),e=c(76760),f=c(73024),g=c(19898),h=c(44533),i=c(29281),j=c(25840),k=c(6444),l=c(85441);let m={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]},n={...m,id:"construction_organization_design",name:"施工组织设计"};function o(a,b){return a.factFields.find(a=>a.name===b||a.aliases.some(a=>b.includes(a)||a.includes(b)))}function p(a,b){return a.forbiddenValuePatterns.some(a=>a.test(b))}function q(a,b){return a.diagnosticValuePatterns.some(a=>a.test(b))}function r(a,b){return a.lowConfidenceValuePatterns.some(a=>a.test(b))}var s=c(81125),t=c(56942);function u(a){return/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|\d{1,2}\.\d{1,2}/u.test(a)}function v(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/[\s,。,.;;::《》“”‘’()()_-]+/gu,"").toLowerCase()}function w(a,b){let c=v(b);if(!c||c.length<4)return!0;let d=v(a);return!!d.includes(c)||c.length>=12&&d.includes(c.slice(0,Math.max(8,Math.floor(.72*c.length))))}function x(a){let b=[],c=a.markdown||"";for(let e of a.spec.factFields.filter(a=>a.required)){var d;!((d=e.name).length<4||u(d))&&/\d|GB|JGJ|C\d|HRB|DN|mm|MPa|kPa|工期|质量|安全|项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数/u.test(d)&&!w(c,e.name)&&b.push({level:"info",message:`正文可能未显式覆盖“${e.name}”`,suggestion:"建议检查对应章节是否已自然表达该事实。"})}let e=a.summary.facts.projectName;!e||"当前知识库项目"===e||u(e)||w(c,e)||b.push({level:"warning",message:"正文未明显体现关键对象名称",suggestion:"建议在概况、背景或首页标题中体现当前文档的关键对象名称。"});let f=a.summary.facts.documentNo;for(let a of(f&&!c.includes(f)&&b.push({level:"info",message:"正文未体现文档/任务编号",suggestion:"如文档需要编号,请在概况、背景或首页信息中补充。"}),["知识库证据","文件角色","提示词角色","文档规范包","规范包","后台自动规范","后台优化建议","基础事实候选","材料未提供","未检索到"]))c.includes(a)&&b.push({level:"error",message:`正文包含后台流程话术:${a}`,suggestion:"请重新生成或在审查阶段删除后台流程描述。"});return b}function y(a,b){let c=[],d=new Set([b.projectName,...b.fingerprint.projectNames].filter(Boolean));for(let e of b.contaminationCandidates)e.length>=6&&!d.has(e)&&a.replace(/\s+/gu,"").includes(e.replace(/\s+/gu,""))&&c.push({level:"error",message:`正文疑似混入其他对象名称:${e}`,suggestion:"请检查绑定材料选择、模板绑定文件和知识库证据范围。"});let e=b.fingerprint.documentNos,f=a.match(/\b\d{4}[A-Z]{2,}\d{4,}\b/gu)?.find(a=>!e.includes(a));return f&&e.length>0&&c.push({level:"error",message:`正文疑似混入其他文档编号:${f}`,suggestion:"请重新生成并检查是否召回了其他绑定材料。"}),c}function z(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/\s+/gu,"").replace(/[,。,.;;::《》“”‘’()()_-]/gu,"").toLowerCase()}function A(a,b){let c=a.trim();if(q(b,c)||p(b,c)||/签章|盖章|联系人|联系电话|电话|邮箱|解密|开标|评标|保证金|交易系统|空白|填写|上传|下载|递交|投标文件制作|电子服务系统|交易平台/u.test(c)||/\|/u.test(c)||/^#+\s*/u.test(c)||/见(?:招标公告|投标人须知|前附表|本项目|补疑)|资料参数行摘要|公共资源交易监督管理|开评标程序|监管部门|招标代理机构|监督管理部门|行政监督部门/u.test(c)||/是否|符合|采购范围|规定的投标截止时间|电子交易系统|投标人须知|招标文件正文/u.test(c)&&/\d{3,}/u.test(c)||/项目名称|工程名称/u.test(c)&&/项目编号|工程概况|建筑面积|本项目分为|现状建筑物|改造工程|标段/u.test(c)||/项目编号[::]|工程概况[::]|本项目分为|现状建筑物|总建筑面积|本次改造工程|清单编制说明/u.test(c))return"";let d=/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月)/u.exec(c)?.[0],e=z(d&&/工期|总工期|合同工期|计划工期|施工周期/u.test(c)?d:c);return!e||e.length>80?"":e}function B(a){let b=a.profile||m,c=[],d=new Map;for(let c of a.facts){let a=c.fieldName||c.key;a&&function(a,b){let c=o(b,a);return c?"single"===c.cardinality&&"allow_multiple"!==c.conflictPolicy&&"ignore"!==c.conflictPolicy:/项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数|工期|质量标准|合同价格形式|绿色建筑等级|投标有效期|质保期/u.test(a)}(a,b)&&A(String(c.value),b)&&d.set(a,[...d.get(a)||[],{value:String(c.value),source:c.sourceFile}])}for(let[a,e]of d){let d=new Map;for(let a of e){let c=A(a.value,b);c&&d.set(c,[...d.get(c)||[],a])}if(d.size>1){let b=[...d.values()].map(a=>`${a[0].value}(${a.map(a=>a.source).filter(Boolean).join("、")||"未知来源"})`).join(" vs ");c.push({level:"error",message:`事实一致性冲突:${a} 存在多个值:${b}`,suggestion:"请确认当前绑定材料组,或在模板绑定中只绑定当前文档所需材料。"})}}let e=a.summary.facts.projectName;if(e&&"当前知识库项目"!==e&&!/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|招标工程量清单封面|招标工程量清单扉页|工程量清单表|清单封面|清单扉页|\d{1,2}\.\d{1,2}/u.test(e)){let b=z(a.markdown);[e,...a.summary.fingerprint.projectNames].flatMap(a=>[a,a.replace(/^\d+(?:\.\d+)?[^\u4e00-\u9fa5]*/u,""),a.replace(/\([^)]*\)|([^)]*)/gu,"")]).map(a=>z(a)).filter(a=>a.length>=8).some(a=>b.includes(a)||a.length>=12&&b.includes(a.slice(0,Math.max(8,Math.floor(.72*a.length)))))||c.push({level:"warning",message:`正文未包含当前对象名称:${e}`,suggestion:"请确认标题、概况或背景信息是否已体现当前对象名称。"})}return c}var C=c(77598),D=c(58965),E=c(91977);function F(a,b=0){let c="drawing"===a.processingType||a.roleId?.includes("drawing")?"视觉资料":"table"===a.processingType||a.roleId?.includes("bill")?"表格资料":"rule"===a.processingType||a.roleId?.includes("tender")?"规则资料":"文本资料";return`${c}片段${b+1}${a.sectionTitle?`(${a.sectionTitle.replace(D.tK,"")})`:""}`}function G(a){return[...a].filter(a=>{let b=a.charCodeAt(0);return 9===b||10===b||13===b||b>=32}).join("").replace(D.VX,"").replace(D.tK,"").replace(/\b(?:Model|Layout\d*|Entity|Handle|ObjectId|ByLayer|Continuous)\b/giu,"").replace(/[\t ]{2,}/gu," ").replace(/\n{3,}/gu,"\n\n").trim()}function H(a){let b=G(a),c=Math.max(1,b.length),d=(b.match(/[\u4e00-\u9fa5]/gu)||[]).length,e=(b.match(/\d/gu)||[]).length,f=(b.match(/项目|任务|质量|安全|周期|验收|材料|设备|表格|数据|参数|规范|标准|流程|资源|风险/gu)||[]).length,g=(b.match(/CAD|AcDb|Polyline|ByLayer|ObjectId|Handle|Model|Layout|图层|页码|第\s*\d+\s*页|打印|版权所有|^[\s\W\d_]+$/gimu)||[]).length,h=(b.match(/(?:序号|项目名称|事项|单位|数量|单价|金额|备注)/gu)||[]).length,i=Math.min(1,d/c*.7+Math.min(.3,(e+3*f)/120)),j=Math.min(1,.18*g+.04*Math.max(0,h-8)+.35*(d/c<.25));return{noiseScore:j,factDensity:i,shouldUse:b.length>=30&&j<.72&&i>.08}}function I(a,b,c){let d=new Set,f=a.map(a=>{let b=function(a,b){let c=e.extname(a).toLowerCase(),d=G(b).split("\n").map(a=>a.trim()).filter(a=>a&&!/^第\s*\d+\s*页\s*(?:共\s*\d+\s*页)?$/u.test(a)).join("\n"),f=H(d);if(d.length>20&&f.shouldUse)return d;let g=[...new Set(G(d).split("\n").map(a=>a.trim()).filter(Boolean).filter(a=>{let b=/计划工期|合同工期|工期|合同估算价|合同估算价格|投资估算|估算价格|工程估算价|最高投标限价|招标控制价|建设地点|建设规模|质量标准/u.test(a);if(!b&&/综合单价|合价|报价明细|投标报价|税率|增值税|利润|预留金|暂列金额|结算/u.test(a))return!1;let c=/\d+(?:\.\d+)?\s*(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|L|ml|MPa|kPa|℃|%|台|套|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年)|DN\s*\d+|Φ\s*\d+|φ\s*\d+|C\d{2,}|HRB\d+|GB\/?T?\s*[\w.-]+|JGJ\s*[\w.-]+|\d+\s*[×xX]\s*\d+/iu.test(a),d=/项目|工程|工期|合同|估算|价格|地点|规模|清单|图纸|设计|规格|型号|数量|单位|材料|设备|管|线|电缆|混凝土|钢筋|砌体|门窗|防水|标准|规范|验收|做法|参数|尺寸|标高|厚度|强度|等级|系统|安装/u.test(a);return b||c||d&&/\d/u.test(a)&&a.length<=260}))].slice(0,80).join("\n");return g.length>20?`资料参数行摘要:
|
|
13
13
|
${g}`:d.length>80&&f.noiseScore<.9?d:[".pdf",".doc",".docx",".xls",".xlsx",".png",".jpg",".jpeg",".webp",".dwg"].includes(c)?`该资料为${c.replace(".","").toUpperCase()}格式附件,仅作为内部事实提取依据;正式正文不得引用文件名。`:d}(a.filePath,a.content),c=H(b);return{item:{...a,content:b,score:a.score*(1+c.factDensity)*(1-.45*c.noiseScore)},quality:c}}),g=f.filter(a=>a.quality.shouldUse||/附件,仅作为内部事实提取依据/u.test(a.item.content)),h=Number.isFinite(b)&&b>0?Math.ceil(b):void 0,i=(g.length>=Math.min(3,a.length)?g:f).sort((a,b)=>b.item.score-a.item.score).filter(a=>{let b=function(a){let b=a.content.replace(/\s+/gu," ").trim();return`${a.filePath}:${a.sectionTitle||""}:${(0,C.createHash)("sha1").update(b).digest("hex")}`}(a.item);return!d.has(b)&&(d.add(b),!0)}),j=h?i.slice(0,h):i;if(c){let b=f.reduce((a,b)=>a+b.quality.noiseScore,0),d=f.reduce((a,b)=>a+b.quality.factDensity,0);c.evidence.raw+=a.length,c.evidence.used+=j.length,c.evidence.filteredNoise+=Math.max(0,f.length-g.length),c.evidence.avgNoiseScore=f.length?Number((b/f.length).toFixed(3)):0,c.evidence.avgFactDensity=f.length?Number((d/f.length).toFixed(3)):0}return j.map(a=>a.item)}function J(a,b={},c){let d=Number.isFinite(b.maxItems)&&b.maxItems>0?Math.floor(b.maxItems):void 0,e=Number.isFinite(b.maxChars)&&b.maxChars>0?Math.floor(b.maxChars):void 0,f=I(a,void 0,c),g=b.preservePinned?f.filter(a=>"pinned-evidence"===a.source||"bound-file"===a.source||"required-fact-evidence"===a.source):[],h=f.filter(a=>!g.includes(a)),i=[],j=new Map,k=0,l=(a,b=!1)=>{if(d&&i.length>=d)return;let c=j.get(a.filePath)||0;if(!b&&c>=4)return;let f=G(a.content),g=k+f.length;e&&i.length>0&&g>e||(i.push({...a,content:f}),j.set(a.filePath,c+1),k=g)};for(let a of g)l(a,!0);for(let a of h)l(a);return i}function K(a,b=0){return`- ${F(a,b)}:${G(a.content).replace(/\s+/gu," ").slice(0,260)}`}function L(a,b){let c=new Map;for(let d of b){let b=function(a,b){let c=e.extname(a).toLowerCase();return"drawing"===b||/地图|map|drawing|design/iu.test(a)?"map":[".png",".jpg",".jpeg",".webp"].includes(c)?"image":"table"===b?"table":[".xls",".xlsx",".csv"].includes(c)?"spreadsheet":[".pdf",".doc",".docx"].includes(c)?"document":c&&![".md",".txt"].includes(c)?"attachment":"text"}(d.filePath,d.processingType),f=c.get(d.filePath)||{filePath:d.filePath,kind:b,roleId:d.roleId,processingType:d.processingType,score:d.score,semanticTitle:function(a,b){let c=e.basename(a).replace(/\.[^.]+$/u,"");return"map"===b?c.replace(/^地图-/u,"").replace(/-完整地图$/u,"完整地图"):"image"===b?c.replace(/-/gu," "):"spreadsheet"===b?`${c}(结构化表格)`:"document"===b?`${c}(文档附件)`:c}(d.filePath,b),contentUse:"map"===b?"作为视觉/地图证据,用于说明空间关系、区域划分、点位、路线或布局。":"image"===b?"作为图片证据,用于视觉说明、参考图或章节配图。":"spreadsheet"===b||"table"===b?"作为表格/数据证据,用于字段对比、明细、数量和结构化结论。":"document"===b?"作为 PDF/Word 文档证据,用于提取规范、事实、说明、约束和附件来源。":"attachment"===b?"作为附件证据,用于提供补充来源、文件级约束或可追溯引用。":"作为文本证据,用于事实抽取、章节论据和来源引用。",relatedFacts:[],relatedChapters:[],snippets:[]};f.score=Math.max(f.score,d.score),f.relatedFacts=[...new Set([...f.relatedFacts,...function(a,b){let c=`${a.filePath}
|
|
@@ -16,7 +16,7 @@ ${a.content}`;return[...new Set([...b?.requiredFacts||[],"表格数据","规范
|
|
|
16
16
|
章节/片段:${a.sectionTitle?.replace(D.tK,"")||"资料片段"}
|
|
17
17
|
内容:${G(a.content).replace(/\s+/gu," ")}`),f=d.omitted+e.omitted>0?`提示:完整证据池仍保留 ${a.textEvidence.length} 条文本片段、${a.resources.length} 个结构化材料;为控制单次模型输入,本次只发送预算内高相关且覆盖多来源的证据,未发送片段将在章节/小节相关检索和质量校验中继续参与。`:"";return[a.summary,f,d.lines.length?`结构化资料:
|
|
18
18
|
${d.lines.join("\n")}`:"",e.lines.length?`文本/附件片段:
|
|
19
|
-
${e.lines.join("\n\n---\n\n")}`:""].filter(Boolean).join("\n\n")}var Q=c(70208);function R(a,b){return b?a.replace(/^!\[[^\]]*(?:图纸|drawing|cad|地图|平面|剖面|立面)[^\]]*\]\([^)]*\)\s*$/gimu,"").replace(/\n{3,}/gu,"\n\n"):a}let S=/.*(?:知识库证据|知识库已确认事实|文件角色|提示词角色|后台自动规范|规范包|事实字段|资料未提供|未检索到|待确认事项|证据来源|来源清单|校验结果|修复任务包|修复类型|修复对象|输出要求).*(?:\n|$)/gu,T=/^\s*(?:#{1,6}\s*)?(?:PDF\s*第\s*\d+\s*页|rule\b|文件[::]|片段[::]|来源[::]).*$/gimu,U=/^\s*(?:[│┃┆┊┌┐└┘├┤┬┴┼─━╭╮╰╯]|[↓↑→←⇒⇨➡])+\s*$/gmu,V=/^#{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,W=/^(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用).*|(?:如|若|如果)(?:涉及|不涉及|适用|不适用).*|.*(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成).*|.*(?:按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|说明要求|注意事项))\s*$/u;function X(a){let b=a.replace(/^#{1,6}\s+/u,"").replace(/^\s*\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").trim(),c=(0,Q.GQ)(b);return W.test(b)||W.test(c)}function Y(a){return a.replace(/PDF\s*第\s*\d+\s*页/giu,"相关资料").replace(/第\s*\d+\s*页\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 Z=String.raw`(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)`;function $(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 _(a){return a.split(/\r?\n/u).map($).join("\n").replace(/\n{3,}/gu,"\n\n")}function aa(a){return/^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a)}function ab(a){let b=a.trim();return/^\|.*\|$/u.test(b)&&b.split("|").length>=3}function ac(a){return`| ${Array.from({length:Math.max(2,a)},()=>"---").join(" | ")} |`}function ad(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(!ab(e)||aa(e)){aa(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)),aa(f)){c.push(ac(g)),d=g,a+=1;continue}!d&&ab(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)||b.every(a=>a.length>0&&a.length<=12&&!/[。;,、]/u.test(a))&&!/项目名称|工程名称|项目编号|招标人|建设单位|建设地点|计划工期|质量标准|合同估算价/u.test(b[0]||""))}(e)&&(c.push(ac(g)),d=g)}return c.join("\n").replace(/\n{3,}/gu,"\n\n")}function ae(a){return ad(_(Y((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")))).replace(S,"").replace(T,"").replace(U,"").replace(V,"").replace(D.tK,"").replace(/^#\s+/gmu,"").replace(D.VX,"").split(/\r?\n/u).filter((a,b,c)=>{let d=b>0?(0,Q.GQ)((c[b-1]||"").trim().replace(/^#{1,6}\s+/u,"")):"",e=(0,Q.GQ)(a.trim().replace(/^#{1,6}\s+/u,""));if(d&&X(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,Q.GQ)(f.replace(/^#{1,6}\s+/u,""));return!(/^(?:雨季|冬季|高温|台风|大风等特殊气候|雨季、冬季、高温、台风、大风等特殊气候)$/u.test(g)||g.length<=1||X(g))&&!(/[,、;:和与在为对将]$/u.test(g)||/(通过|包括|如下|主要包括)$/u.test(g))}).join("\n").replace(/\n{3,}/gu,"\n\n").trim()}RegExp(String.raw`\S.+(?:\s|[。;;])${Z}\S.+(?:\s|[。;;])${Z}\S`,"u");let af="你正在生成可直接交付的专业文档,不是系统调试报告。\n通用质量约束只用于补充用户要求、模板章节和绑定提示词;除事实安全、结构边界和导出格式要求外,不得覆盖用户明确要求。\n不得把“知识库、检索、文件角色、提示词角色、规范包、事实字段、动态章节、缺失项、校验结果、资料未提供、未检索到”等后台流程话术写入正文。\n用户提供的信息和绑定材料应内化为正文表达;除非用户要求来源追溯章节,否则不要单列系统证据清单。\n表格、标题和公式必须使用 Markdown/导出友好的写法,避免 ASCII 流程图和容易导致导出异常的符号组合。\nMarkdown 表格格式硬约束:凡是输出 Markdown 表格,必须使用标准 GFM 表格格式。\n表格必须包含表头行、分隔线和数据行;表头下一行必须是分隔线,例如 |---|---|。\n禁止只输出连续的“| 字段 | 值 |”裸表格行;两列键值信息表默认使用表头 | 信息项 | 内容 |。\n表头、分隔线和数据行必须连续,中间不得插入正文、说明、空行或补充段落。\n正文表格不得展示后台溯源列或系统过程列,如“资料来源/说明”“资料来源/证明”“知识库来源”等。\n项目名称、项目编号、招标人/业主/建设单位、建设地点、建设规模、计划工期、质量标准、合同估算价等项目基础信息,只能在项目基本信息表中集中输出一次;后续章节如需引用,应写入正文或专业表格的业务字段,不得重复生成项目基础信息键值表。\n正文不得把原始文件条款、说明性附件或系统过程内容误作为章节标题或目录项。\n正文事实必须来自当前模板、用户要求、绑定提示词和绑定材料;信息不足或来源冲突时应保持审慎并提示复核口径,不得编造精确数量。\n语言应正式、专业、克制,适合直接导出。",ag="只生成当前小节正文,不生成其他二级小节,不重复章节一级标题。\n优先使用当前模板、用户要求、绑定提示词和绑定材料中的事实;缺少依据时不得编造具体数值、名称、时间、规格或责任。\n小节应有实质正文;除非用户或模板明确要求纯表格,否则表格只能作为辅助表达,不能整节只有表格。\n不得用通用兜底段落、空泛管理话术或后台缺料说明冒充正文;信息不足时只写已有事实、适用边界和待复核口径。";function ah(a){return(0,Q.GQ)(a.replace(/^#+\s*/u,"")).replace(/^(?:第)?[一二三四五六七八九十百千万\d]+章\s*/u,"").trim().replace(/\s+/gu,"")}function ai(a,b){let c=ah(a),d=ah(b);return!!(c&&d&&c===d)}function aj(a){return[...new Set([...a.matchAll(/^###\s+(.+)$/gmu)].map(a=>(0,Q.GQ)(a[1]||"")).filter(a=>a.length>=2&&a.length<=80).filter(a=>!X(a)).filter(a=>!/^\d+(?:\.\d+){2,}\s+/u.test(a)))]}function ak(a){let b=a.split(/\r?\n/u),c="",d=0;return b.map(a=>{let b=/^###\s+(\d+\.\d+)\s+.+$/u.exec(a.trim());if(b)return c=b[1],d=0,a;if(/^##\s+/u.test(a.trim()))return c="",d=0,a;let e=/^(#{4,5})\s+(.+)$/u.exec(a.trim());if(e){if(!c)return"#####"===e[1]?a.replace(/^\s*#####/u,"####"):a;let b=(e[2]||"").trim(),f=(0,Q.GQ)(b.replace(/^\d+\.\d+\.\d+\s+/u,""));return f?(d+=1,`#### ${c}.${d} ${f}`):a}return a}).join("\n").replace(/\n{3,}/gu,"\n\n").trim()}function al(a){let b=[],c="";for(let d of a.split(/\r?\n/u)){let a=d.trim(),e=/^###\s+(\d+\.\d+)\s+.+$/u.exec(a);if(e){c=e[1];continue}if(/^##\s+/u.test(a)&&(c=""),!c)continue;let f=/^####\s+(.+)$/u.exec(a);if(f){let a=(f[1]||"").trim();RegExp(`^${av(c)}\\.\\d+\\s+\\S`,"u").test(a)||b.push({level:"warning",message:`三级小节缺少 ${c}.x 编号:${(0,Q.GQ)(a)}`,suggestion:"三级小节必须使用“#### 章号.节号.序号 标题”,且不纳入目录。"})}}return b}function am(a){let b=a.replace(/\*+/gu,"").trim();if(X(b))return"";let c=(0,Q.GQ)(b).replace(/^[-—–]\s*/u,"").trim();return X(c)||/^(?:雨季|冬季|高温|台风|大风等特殊气候)$/u.test(c)?"":c}function an(a=[]){return[...new Set(a.map(am).filter(a=>a.length>=2))]}function ao(a){return["## 目录","",...a.flatMap((a,b)=>{let c=an(a.sections||[]);return[(0,Q.tb)(b,a.title),"",...c.flatMap((a,c)=>[` ${function(a,b,c){let d=(0,Q.GQ)(c);return!function(a){let b=/^\s*(\d+)\.(\d+)[..、]?\s+(.+)$/u.exec(a);return!!b&&(0,Q.GQ)(b[3]||"").trim()===(0,Q.GQ)(a).trim()}(c)?`${a+1}.${b+1} ${d}`:d}(b,c,a)}`,""])]})].join("\n")}function ap(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 aq(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 ar(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 as(a,b){let c=ar(a);b.forEach((a,b)=>{let d=(0,Q.GQ)(a.title),e=RegExp(`^##\\s+(?:第[一二三四五六七八九十百千万\\d]+章\\s*)?${av(d)}\\s*$`,"mu");c=e.test(c)?c.replace(e,`## ${(0,Q.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=ax(a);return c.findIndex(a=>ax(a)===d)},k=(a,c)=>{let d=am(a);if(!d||X(a)||X(d))return"";let k=j(d),l=b[e]?.sections||[],m=k>=0?k+1:f+1,n=k>=0?ax(l[k]):ax(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,Q.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,Q.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,Q.GQ)(r[4]||""),d=ax(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 at(a,b){let c=a.replace(/知识库|提示词|绑定片段|后台|资料库|OCR|联网增强|联网检索|网页资料|搜索结果|根据网页|互联网资料|在线资料|浏览器|搜索引擎/giu,"项目资料").replace(/建议补充/gu,"需完善").replace(/\b兜底\b|兜底生成|兜底片段/gu,"补充完善").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(av(a),"u").test(b)).join("\n"));return c}function au(a,b){if(!b)return at(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(av(b),"u").test(a))return a;let c=/项目基本信息/u.test(b)?"":`**${b}**
|
|
19
|
+
${e.lines.join("\n\n---\n\n")}`:""].filter(Boolean).join("\n\n")}var Q=c(70208);function R(a,b){return b?a.replace(/^!\[[^\]]*(?:图纸|drawing|cad|地图|平面|剖面|立面)[^\]]*\]\([^)]*\)\s*$/gimu,"").replace(/\n{3,}/gu,"\n\n"):a}let S=/.*(?:知识库证据|知识库已确认事实|文件角色|提示词角色|后台自动规范|规范包|事实字段|资料未提供|未检索到|待确认事项|证据来源|来源清单|校验结果|修复任务包|修复类型|修复对象|输出要求).*(?:\n|$)/gu,T=/^\s*(?:#{1,6}\s*)?(?:PDF\s*第\s*\d+\s*页|rule\b|文件[::]|片段[::]|来源[::]).*$/gimu,U=/^\s*(?:[│┃┆┊┌┐└┘├┤┬┴┼─━╭╮╰╯]|[↓↑→←⇒⇨➡])+\s*$/gmu,V=/^#{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,W=/^(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用).*|(?:如|若|如果)(?:涉及|不涉及|适用|不适用).*|.*(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成).*|.*(?:按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|说明要求|注意事项))\s*$/u;function X(a){let b=a.replace(/^#{1,6}\s+/u,"").replace(/^\s*\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").trim(),c=(0,Q.GQ)(b);return W.test(b)||W.test(c)}function Y(a){return a.replace(/PDF\s*第\s*\d+\s*页/giu,"相关资料").replace(/第\s*\d+\s*页\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 Z=String.raw`(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)`;function $(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 _(a){return a.split(/\r?\n/u).map($).join("\n").replace(/\n{3,}/gu,"\n\n")}function aa(a){return/^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a)}function ab(a){let b=a.trim();return/^\|.*\|$/u.test(b)&&b.split("|").length>=3}function ac(a){return`| ${Array.from({length:Math.max(2,a)},()=>"---").join(" | ")} |`}function ad(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(!ab(e)||aa(e)){aa(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)),aa(f)){c.push(ac(g)),d=g,a+=1;continue}!d&&ab(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(ac(g)),d=g)}return c.join("\n").replace(/\n{3,}/gu,"\n\n")}function ae(a){return ad(_(Y((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")))).replace(S,"").replace(T,"").replace(U,"").replace(V,"").replace(D.tK,"").replace(/^#\s+/gmu,"").replace(D.VX,"").split(/\r?\n/u).filter((a,b,c)=>{let d=b>0?(0,Q.GQ)((c[b-1]||"").trim().replace(/^#{1,6}\s+/u,"")):"",e=(0,Q.GQ)(a.trim().replace(/^#{1,6}\s+/u,""));if(d&&X(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,Q.GQ)(f.replace(/^#{1,6}\s+/u,""));return!(/^(?:雨季|冬季|高温|台风|大风等特殊气候|雨季、冬季、高温、台风、大风等特殊气候)$/u.test(g)||g.length<=1||X(g))&&!(/[,、;:和与在为对将]$/u.test(g)||/(通过|包括|如下|主要包括)$/u.test(g))}).join("\n").replace(/\n{3,}/gu,"\n\n").trim()}RegExp(String.raw`\S.+(?:\s|[。;;])${Z}\S.+(?:\s|[。;;])${Z}\S`,"u");let af="你正在生成可直接交付的专业文档,不是系统调试报告。\n通用质量约束只用于补充用户要求、模板章节和绑定提示词;除事实安全、结构边界和导出格式要求外,不得覆盖用户明确要求。\n不得把“知识库、检索、文件角色、提示词角色、规范包、事实字段、动态章节、缺失项、校验结果、资料未提供、未检索到”等后台流程话术写入正文。\n用户提供的信息和绑定材料应内化为正文表达;除非用户要求来源追溯章节,否则不要单列系统证据清单。\n表格、标题和公式必须使用 Markdown/导出友好的写法,避免 ASCII 流程图和容易导致导出异常的符号组合。\nMarkdown 表格格式硬约束:凡是输出 Markdown 表格,必须使用标准 GFM 表格格式。\n表格必须包含表头行、分隔线和数据行;表头下一行必须是分隔线,例如 |---|---|。\n禁止只输出连续的“| 字段 | 值 |”裸表格行;两列键值信息表默认使用表头 | 信息项 | 内容 |。\n表头、分隔线和数据行必须连续,中间不得插入正文、说明、空行或补充段落。\n正文表格不得展示后台溯源列或系统过程列,如“资料来源/说明”“资料来源/证明”“知识库来源”等。\n项目名称、项目编号、招标人/业主/建设单位、建设地点、建设规模、计划工期、质量标准、合同估算价等项目基础信息,只能在项目基本信息表中集中输出一次;后续章节如需引用,应写入正文或专业表格的业务字段,不得重复生成项目基础信息键值表。\n正文不得把原始文件条款、说明性附件或系统过程内容误作为章节标题或目录项。\n正文事实必须来自当前模板、用户要求、绑定提示词和绑定材料;信息不足或来源冲突时应保持审慎并提示复核口径,不得编造精确数量。\n语言应正式、专业、克制,适合直接导出。",ag="只生成当前小节正文,不生成其他二级小节,不重复章节一级标题。\n优先使用当前模板、用户要求、绑定提示词和绑定材料中的事实;缺少依据时不得编造具体数值、名称、时间、规格或责任。\n小节应有实质正文;除非用户或模板明确要求纯表格,否则表格只能作为辅助表达,不能整节只有表格。\n不得用通用兜底段落、空泛管理话术或后台缺料说明冒充正文;信息不足时只写已有事实、适用边界和待复核口径。";function ah(a){return(0,Q.GQ)(a.replace(/^#+\s*/u,"")).replace(/^(?:第)?[一二三四五六七八九十百千万\d]+章\s*/u,"").trim().replace(/\s+/gu,"")}function ai(a,b){let c=ah(a),d=ah(b);return!!(c&&d&&c===d)}function aj(a){return[...new Set([...a.matchAll(/^###\s+(.+)$/gmu)].map(a=>(0,Q.GQ)(a[1]||"")).filter(a=>a.length>=2&&a.length<=80).filter(a=>!X(a)).filter(a=>!/^\d+(?:\.\d+){2,}\s+/u.test(a)))]}function ak(a){let b=a.split(/\r?\n/u),c="",d=0;return b.map(a=>{let b=/^###\s+(\d+\.\d+)\s+.+$/u.exec(a.trim());if(b)return c=b[1],d=0,a;if(/^##\s+/u.test(a.trim()))return c="",d=0,a;let e=/^(#{4,5})\s+(.+)$/u.exec(a.trim());if(e){if(!c)return"#####"===e[1]?a.replace(/^\s*#####/u,"####"):a;let b=(e[2]||"").trim(),f=(0,Q.GQ)(b.replace(/^\d+\.\d+\.\d+\s+/u,""));return f?(d+=1,`#### ${c}.${d} ${f}`):a}return a}).join("\n").replace(/\n{3,}/gu,"\n\n").trim()}function al(a){let b=[],c="";for(let d of a.split(/\r?\n/u)){let a=d.trim(),e=/^###\s+(\d+\.\d+)\s+.+$/u.exec(a);if(e){c=e[1];continue}if(/^##\s+/u.test(a)&&(c=""),!c)continue;let f=/^####\s+(.+)$/u.exec(a);if(f){let a=(f[1]||"").trim();RegExp(`^${av(c)}\\.\\d+\\s+\\S`,"u").test(a)||b.push({level:"warning",message:`三级小节缺少 ${c}.x 编号:${(0,Q.GQ)(a)}`,suggestion:"三级小节必须使用“#### 章号.节号.序号 标题”,且不纳入目录。"})}}return b}function am(a){let b=a.replace(/\*+/gu,"").trim();if(X(b))return"";let c=(0,Q.GQ)(b).replace(/^[-—–]\s*/u,"").trim();return X(c)||/^(?:雨季|冬季|高温|台风|大风等特殊气候)$/u.test(c)?"":c}function an(a=[]){return[...new Set(a.map(am).filter(a=>a.length>=2))]}function ao(a){return["## 目录","",...a.flatMap((a,b)=>{let c=an(a.sections||[]);return[(0,Q.tb)(b,a.title),"",...c.flatMap((a,c)=>[` ${function(a,b,c){let d=(0,Q.GQ)(c);return!function(a){let b=/^\s*(\d+)\.(\d+)[..、]?\s+(.+)$/u.exec(a);return!!b&&(0,Q.GQ)(b[3]||"").trim()===(0,Q.GQ)(a).trim()}(c)?`${a+1}.${b+1} ${d}`:d}(b,c,a)}`,""])]})].join("\n")}function ap(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 aq(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 ar(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 as(a,b){let c=ar(a);b.forEach((a,b)=>{let d=(0,Q.GQ)(a.title),e=RegExp(`^##\\s+(?:第[一二三四五六七八九十百千万\\d]+章\\s*)?${av(d)}\\s*$`,"mu");c=e.test(c)?c.replace(e,`## ${(0,Q.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=ax(a);return c.findIndex(a=>ax(a)===d)},k=(a,c)=>{let d=am(a);if(!d||X(a)||X(d))return"";let k=j(d),l=b[e]?.sections||[],m=k>=0?k+1:f+1,n=k>=0?ax(l[k]):ax(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,Q.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,Q.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,Q.GQ)(r[4]||""),d=ax(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 at(a,b){let c=a.replace(/知识库|提示词|绑定片段|后台|资料库|OCR|联网增强|联网检索|网页资料|搜索结果|根据网页|互联网资料|在线资料|浏览器|搜索引擎/giu,"项目资料").replace(/建议补充/gu,"需完善").replace(/\b兜底\b|兜底生成|兜底片段/gu,"补充完善").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(av(a),"u").test(b)).join("\n"));return c}function au(a,b){if(!b)return at(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(av(b),"u").test(a))return a;let c=/项目基本信息/u.test(b)?"":`**${b}**
|
|
20
20
|
|
|
21
21
|
| 控制项目 | 控制内容 | 执行要求 | 复核要求 |
|
|
22
22
|
|---|---|---|---|
|
|
@@ -62,7 +62,7 @@ ${h.join("\n")}`,`章节实施方案:
|
|
|
62
62
|
${i.join("\n")}`].filter(Boolean).join("\n")}let aW=/安全|文明|质量|绿色施工|环保|扬尘|消防|应急|危大|风险|规范|标准|管理要求|施工工艺|技术措施|验收/u,aX=/项目名称|工程名称|建设地点|建设单位|招标人|发包人|建设规模|招标范围|合同工期|计划工期|质量标准|危大工程清单|工程量|材料规格|设备型号|图纸参数|报价|单价|利润|税率|合同金额|联系方式|品牌/u,aY=/报价|单价|合价|金额|利润|税率|增值税|招标控制价|最高投标限价|中标价|合同价|暂列金额/u,aZ=/联网增强|联网检索|网页资料|搜索结果|根据网页|互联网资料|在线资料|浏览器|搜索引擎/u,a$=["项目名称","工程名称","建设地点","建设单位","招标人","发包人","建设规模","招标范围","合同工期","计划工期","工程量","报价","单价"];function a_(a){return a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,'"').replace(/'/gu,"'").replace(/<[^>]+>/gu,"").replace(/\s+/gu," ").trim()}async function a0(a,b,c,d,e){let f=`https://duckduckgo.com/html/?q=${encodeURIComponent(a)}`,g=new AbortController,h=setTimeout(()=>g.abort(),8e3),i=()=>g.abort();e?.addEventListener("abort",i,{once:!0});let j=await fetch(f,{headers:{"User-Agent":"Mozilla/5.0 compatible; customize-agent web research"},signal:g.signal}).finally(()=>{clearTimeout(h),e?.removeEventListener("abort",i)});return j.ok?[...(await j.text()).matchAll(/<a[^>]+class="result__a"[^>]+href="([^"]+)"[^>]*>([\s\S]*?)<\/a>[\s\S]*?<a[^>]+class="result__snippet"[^>]*>([\s\S]*?)<\/a>/giu)].map(a=>{let b=a_(a[1]||""),c=a_(a[2]||""),d=a_(a[3]||""),e=/uddg=([^&]+)/u.exec(b)?.[1];return{url:e?decodeURIComponent(e):b,title:c,snippet:d}}).filter(a=>{let b=`${a.title} ${a.snippet} ${a.url}`;return!(!a.url||!a.snippet||aX.test(b)||aY.test(b)||aZ.test(b)||d.some(a=>a&&b.includes(a)))&&(0===c.length||c.some(b=>a.url.includes(b)))}).slice(0,b):[]}async function a1(a){if(!a.config.enabled||!function(a,b){let c=`${a} ${b.join(" ")}`;return!(!aW.test(c)||/项目概况|工程概况|建设地点|建设规模|招标范围|工程量|报价|造价/u.test(c)&&!/安全|文明|质量|危大|环保|工艺|措施/u.test(c))}(a.chapterTitle,a.sectionTitles))return{evidence:[],queries:[],filtered:0};let b=function(a,b,c){let d=`${a} ${b.join(" ")}`,e=[/危大/u.test(d)?"危大工程 专项施工方案 管理规定 安全措施":"",/安全|文明/u.test(d)?"建筑工程 安全文明施工 管理要求":"",/质量|验收/u.test(d)?"建筑工程 质量控制 质量验收 通用要求":"",/扬尘|环保|绿色/u.test(d)?"施工现场 扬尘治理 绿色施工 环保要求":"",/消防|应急/u.test(d)?"施工现场 消防 应急管理 要求":"",/工艺|技术措施/u.test(d)?"建筑工程 施工工艺 技术措施 通用要求":""].filter(Boolean),f=`${a.replace(aX,"")} 公开规范 通用要求`.trim();return[...new Set(e.length?e:[f])].slice(0,c)}(a.chapterTitle,a.sectionTitles,a.config.maxQueriesPerChapter),c=[],d=0;for(let e of b)try{for(let b of(await a0(e,a.config.maxResultsPerQuery,a.config.trustedDomains,a.runtimeRules.forbiddenTerms||[],a.signal))){let e=function(a,b){let c=a;for(let a of a$)c=c.replace(RegExp(`${a}[^。;;
|
|
63
63
|
]{0,80}`,"gu"),"");for(let a of b.map(a=>{var b;return null==(b=a.value)?"":"string"==typeof b||"number"==typeof b||"boolean"==typeof b?String(b).trim():""}).filter(a=>a.length>=3&&a.length<=80))c=c.replace(RegExp(a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"gu"),"");return c.replace(aY,"").trim()}(b.snippet,a.localFacts);if(!e||e.length<20){d+=1;continue}c.push({chapterId:a.chapterId,filePath:b.url,score:.42,content:`参考依据:${b.title}
|
|
64
64
|
${e}`,source:function(a){let b=a.toLowerCase();return b.includes(".gov.cn")||b.includes("mohurd")||b.includes("zjt")||a.includes("住建")?"web-policy":"web-evidence"}(b.url),sectionTitle:a.chapterTitle})}}catch{d+=1}return{evidence:c,queries:b,filtered:d}}function a2(a){return[...a.promptDocumentRules?.forbidToc?[]:[...(0,aE.gN)(a.markdown),...(0,aE.f8)(a.markdown)],...(0,aE.K1)(a.markdown),...(0,aE.Fv)(a.markdown),...(0,aE.k0)(a.markdown),...(0,aE.NS)(a.markdown),...(0,aE.qK)(a.markdown,a.chapters),...(0,aE.ji)(a.chapters),...(0,aE.i0)(a.chapters),...(0,aE.ST)(a.chapters),...(0,aE.xX)(a.chapters),...(0,aE.qm)(a.markdown,a.factsModel),...aJ(a.markdown,a.factsModel),...aK(a.markdown),...aL(a.chapters),...function(a,b,c){let d={factuality:2*!(0,aE.vY)(a,c).some(a=>"error"===a.level),structure:b.length>0&&b.every(b=>a.includes(b.title)&&(0,aD.V7)(b.content)>=600)?2:1,depth:0===(0,aE.i0)(b).length?2:1,executable:0===aL(b).length?2:1,evidence:0===aJ(a,c).length?2:1},e=d.factuality+d.structure+d.depth+d.executable+d.evidence;return[{level:"warning",message:`文档交付评分报告:总分 ${e}/10,事实${d.factuality},结构${d.structure},专业${d.depth},可执行${d.executable},证据${d.evidence}`,suggestion:e>=8?"可交付,但建议继续优化证据使用覆盖率和章节依赖链路。":"建议优先修复低分维度后再导出。"}]}(a.markdown,a.chapters,a.factsModel),...(0,aE.vY)(a.markdown,a.factsModel),...(0,aE.iC)(a.markdown),...(0,aE.BV)(a.markdown),...al(a.markdown),...(0,aE.Ty)(a.chapters),...(0,aE.N1)(a.markdown,a.factsModel),...function(a){let b=[];return aZ.test(a)&&b.push({level:"warning",message:"正文包含联网增强过程性表述",suggestion:"请删除联网检索、网页资料、搜索结果等过程性话术,改为正式交付语言。"}),b}(a.markdown),...(0,aE.bM)(a.markdown),...(0,aE.M$)(a.markdown,a.promptBindings),...(0,aE.AC)(a.markdown,a.chapters),...(0,aE.mR)(a.markdown,a.template),...az(a.markdown,a.template),...ay(a.markdown,a.promptDocumentRules)]}let a3={project:"项目基础事实",schedule:"工期与节点",quality:"质量目标与验收",safety:"安全文明要求",resources:"资源投入依据",quantities:"清单/图纸/工程量事实",rules:"规范规则与验收要求"};function a4(a){return a.replace(/[\s,,.。::;;||()()《》<>【】"“”'‘’]/gu,"").toLowerCase()}function a5(a){return 0===a.length?100:Math.round(a.reduce((a,b)=>a+b,0)/a.length)}function a6(a){let b=Math.max(0,100-a.issues.reduce((a,b)=>a+("error"===b.level?10:"warning"===b.level?4:1),0)),c=a5(a.chapterCoverage.map(a=>a.score)),d=a.factTraces.filter(a=>"used"===a.status).length,e={factuality:Math.min(100,Math.round(.65*(a.factTraces.length?Math.round(d/a.factTraces.length*100):100)+.35*b)),structure:Math.min(100,Math.round(.7*(a.chapters.length>0&&a.chapters.every(b=>a.markdown.includes(b.title)&&(0,aD.V7)(b.content)>=600)?95:78)+.3*c)),professionalDepth:c,executable:a5(a.chapterCoverage.map(a=>a.checks.some(a=>"professional"===a.key&&a.passed)?95:75)),evidenceCoverage:a.knowledgeCoverage.score,consistency:b},f=Math.round(.22*e.factuality+.16*e.structure+.18*e.professionalDepth+.16*e.executable+.18*e.evidenceCoverage+.1*e.consistency),g=a.issues.filter(a=>"error"===a.level).length,h=Math.max(0,Math.min(99,Math.round(f-8*g))),i=a.knowledgeCoverage.score>=95?95:85;return{overall:f,deliveryProbability:h,target:i,passed:h>=i&&0===g,scores:e,summary:`交付置信度 ${h}% / 目标 ${i}%,综合评分 ${f}/100`,actions:h>=i&&0===g?["已达到当前质量目标,建议保持事实口径和导出前复核。"]:["系统需优先修复阻断问题、扩大本地知识库检索、补抽结构化事实,并将未落位事实写入对应章节。","对低分章节执行结构补齐、专业控制点补写、跨章一致性复核和证据引用覆盖修复。"]}}let a7={version:"professional-document-workflow-v3",rules:["complete-local-knowledge-assumption","knowledge-coverage-recovery","fact-trace-placement","chapter-coverage-gate","structured-quality-report","post-repair-verification"]};function a8(a){return[...new Set(a.flatMap(a=>a.split(/[\s、,,。;;::()()《》【】\-/]+/u)).map(a=>a.trim()).filter(a=>a.length>=2))]}async function a9(a){let b=[];if(0===a.scopedFilePaths.length)return b;let c=(function(a,b=[]){let c=a.sections||[],d=[...a.requiredFacts,...b],e=[a.title,...c.slice(0,12),...d.slice(0,12)],f=/进度|工期|节点/u.test(a.title)?["合同工期","计划工期","日历天","开工","竣工","关键线路"]:/质量|验收/u.test(a.title)?["质量标准","验收规范","检验批","复验","合格"]:/安全|危大|风险/u.test(a.title)?["安全措施","风险源","危大工程","应急","检查整改"]:/资源|人|材|机|材料|设备/u.test(a.title)?["劳动力","材料","机械设备","进场计划","资源保障"]:["工程范围","施工方法","控制要点","验收要求"],g=a8([...e,...f]);return[...new Set([`${a.title} ${c.slice(0,8).join(" ")}`.trim(),...d.map(b=>`${a.title} ${b}`.trim()),...c.slice(0,10).map(b=>`${a.title} ${b} ${d.slice(0,4).join(" ")}`.trim()),`${a.title} ${f.join(" ")}`.trim(),g.slice(0,18).join(" ")].filter(Boolean))]})(a.chapter,a.requiredNeeds).slice(0,a.highRisk?18:10),d=a.highRisk?24:14;for(let e of c){(0,aG.Te)(a.signal);let c=await a.manager.search(a.projectRoot,e,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:d,weights:{keyword:.62,vector:.32,rewrite:.9,hybridBonus:.28},generationMode:!1});b.push(...function(a){return a.results.map(b=>({chapterId:a.chapter.id,filePath:b.filePath,score:b.score+a.boost,content:b.content,roleId:a.fileRoleByPath.get(b.filePath),processingType:a.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:a.source}))}({chapter:a.chapter,results:c.results.filter(b=>a.scopedFilePaths.includes(b.filePath)),fileRoleByPath:a.fileRoleByPath,fileProcessingByPath:a.fileProcessingByPath,boost:2.4,source:"deep-retrieval"}))}return J(b,{maxItems:a.highRisk?72:42,maxChars:a.highRisk?72e3:42e3,preservePinned:!0})}var ba=c(15751),bb=c(95393),bc=c(96770);let bd=new Map,be=0;function bf(a,b){let c=(0,bc.resolveProtocol)(a,b);return"anthropic"===c?"anthropic":"google"===c?"google":"ollama"===c?"ollama":"openrouter"===c?"openrouter":"openai"}function bg(){let a=(0,i.I)().load(),b=a.models.reasoning.active||a.models.action.active||a.models.reader.active,c=[...a.models.reasoning.list,...a.models.action.list,...a.models.reader.list].find(a=>a.name===b);if(!c)return;let d=a.providers[c.provider];if(d)return{model:c,provider:d}}async function bh(a,b,c=!1,d={}){d.diagnostics&&(d.diagnostics.llm.calls+=1),be+=1,d.diagnostics&&(d.diagnostics.llm.maxActive=Math.max(d.diagnostics.llm.maxActive,be));try{let e,f,g=bg();if(!g)return;let{model:h,provider:i}=g,j=(0,aG.c6)({provider:h.provider,model:h.name,baseUrl:i.baseUrl,directEndpoint:i.directEndpoint,protocol:i.protocol,apiKeyHash:i.apiKey?(0,aG.c6)(i.apiKey):""}),k=bd.get(j);k||(k=(0,bb.createProvider)(bf(h.provider,i),{baseUrl:i.baseUrl,apiKey:i.apiKey,modelName:h.name,directEndpoint:i.directEndpoint}),bd.set(j,k));let l=Math.max(3e4,Number(d.timeoutMs??process.env.DOCUMENT_LLM_CALL_TIMEOUT_MS??3e5)),m=new Promise((a,b)=>{e=setTimeout(()=>b(Error("LLM 调用超时")),l)}),n=[k.chat([{role:"system",content:c?`${a}
|
|
65
|
-
只返回 JSON,不要返回 markdown。`:a},{role:"user",content:b}],{temperature:d.temperature??.3*!c,maxTokens:d.maxTokens,signal:d.signal}),m];return d.signal&&n.push(new Promise((a,b)=>{if(d.signal?.aborted)return void b(Error("用户中止"));f=()=>b(Error("用户中止")),d.signal?.addEventListener("abort",f,{once:!0})})),(await Promise.race(n).finally(()=>{e&&clearTimeout(e),f&&d.signal?.removeEventListener("abort",f)})).content.trim()}catch(a){if(d.diagnostics&&(d.diagnostics.llm.failures+=1),d.signal?.aborted)throw Error("用户中止",{cause:a});return}finally{be=Math.max(0,be-1)}}async function bi(a,b,c){let d,e=new AbortController;if(c?.aborted)throw Error("用户中止");let f=()=>e.abort();c?.addEventListener("abort",f,{once:!0});let g=new Promise(a=>{d=setTimeout(()=>{e.abort(),a(null)},b)}),h=[Promise.resolve().then(()=>a(e.signal)),g];c&&h.push(new Promise((a,b)=>{e.signal.addEventListener("abort",()=>{c.aborted&&b(Error("用户中止"))},{once:!0})}));try{let a=await Promise.race(h);if(c?.aborted)throw Error("用户中止");return a}finally{d&&clearTimeout(d),c?.removeEventListener("abort",f)}}async function bj(a,b,c={}){let d=await bh(a,b,!0,{maxTokens:c.maxTokens,temperature:c.temperature,signal:c.signal,diagnostics:c.diagnostics,timeoutMs:c.timeoutMs});if(d)try{return JSON.parse(function(a){let b=a.trim(),c=b.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/iu)?.[1]?.trim();if(c)return c;let d=b.indexOf("{"),e=b.lastIndexOf("}"),f=b.indexOf("["),g=b.lastIndexOf("]"),h=d>=0&&e>d?b.slice(d,e+1):"",i=f>=0&&g>f?b.slice(f,g+1):"";return h&&(!i||d<=f)?h:i||b}(d))}catch{return}}function bk(a){let b=[],c=new Set;for(let d of a.filter(a=>"table"===a.processingType)){if(c.has(d.filePath))continue;c.add(d.filePath);let a=(0,h.aY)(),g=e.isAbsolute(d.filePath)?d.filePath:f.existsSync(e.join(a,"knowledgeBase",d.filePath))?e.join(a,"knowledgeBase",d.filePath):e.join(a,d.filePath),i=e.extname(d.filePath).toLowerCase();if(f.existsSync(g)&&[".xlsx",".xls",".csv"].includes(i))try{let a=ba.readFile(g,{cellDates:!0,sheetStubs:!1});for(let c of a.SheetNames){let e=a.Sheets[c],f=ba.utils.sheet_to_json(e,{header:1,raw:!1,defval:""}).map(a=>a.map(a=>String(a).trim())).filter(a=>a.some(Boolean));if(f.length<2)continue;let g=f.findIndex(a=>a.filter(Boolean).length>=2);if(g<0)continue;let h=f[g].filter(Boolean),i=f.slice(g+1).map(a=>a.slice(0,h.length)).filter(a=>a.some(Boolean));0!==i.length&&b.push({tableType:d.roleId||"table",sheet:c,headers:h,rows:i,sourceFile:d.filePath,sourceRange:e["!ref"]})}continue}catch{}let j=d.content.split("\n").map(a=>a.trim()).filter(Boolean).filter(a=>a.includes("|")||a.includes(" ")||a.includes(","));if(j.length<2)continue;let k=j[0].includes("|")?"|":j[0].includes(" ")?" ":",",l=j.map(a=>a.split(k).map(a=>a.trim()).filter(Boolean)).filter(a=>a.length>1);l.length<2||b.push({tableType:d.roleId||"table",headers:l[0],rows:l.slice(1),sourceFile:d.filePath,sourceRange:d.sectionTitle})}return b}function bl(a,b,c){let d=(0,E.Uy)(b,c).map(a=>({field:a,pattern:function(a){let b=a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");return RegExp(`${b}[::\\s]+([^\\n,。;;]+)`,"u")}(a.name)})),e=[];for(let b of a)for(let{field:a,pattern:c}of d){if(!(0,E.I2)(b,a))continue;let d=b.content.match(c)||[void 0,b.content.replace(/\s+/gu," ")],f=d?.[1]?.trim();f&&!e.some(b=>b.fieldId===a.id&&b.value===f)&&e.push({key:a.name,fieldId:a.id,fieldName:a.name,value:f,sourceFile:b.filePath,roleId:b.roleId||"unknown",processingType:b.processingType,confidence:b.score,sourceRef:{filePath:b.filePath,roleId:b.roleId||"unknown",processingType:b.processingType,sectionTitle:b.sectionTitle}})}return e}async function bm(a,b,c,d,e){let f=[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"LLM JSON 抽取未启用或无可用模型"}],g=Math.max(12e3,Math.floor(Number(process.env.DOCUMENT_FACT_EXTRACTION_MAX_CHARS??45e3))),h=Math.max(8,Math.floor(Number(process.env.DOCUMENT_FACT_EXTRACTION_MAX_ITEMS??48))),i=0,j=[];for(let b of a.slice(0,h)){let a=(0,aG.lG)(b.content).replace(/\s+/gu," ").slice(0,Math.max(800,Math.floor(g/h))),c=`文件:${b.filePath}
|
|
65
|
+
只返回 JSON,不要返回 markdown。`:a},{role:"user",content:b}],{temperature:d.temperature??.3*!c,maxTokens:d.maxTokens,signal:d.signal}),m];return d.signal&&n.push(new Promise((a,b)=>{if(d.signal?.aborted)return void b(Error("用户中止"));f=()=>b(Error("用户中止")),d.signal?.addEventListener("abort",f,{once:!0})})),(await Promise.race(n).finally(()=>{e&&clearTimeout(e),f&&d.signal?.removeEventListener("abort",f)})).content.trim()}catch(a){if(d.diagnostics&&(d.diagnostics.llm.failures+=1,d.diagnostics.llm.lastError=a instanceof Error?a.message:String(a)),d.signal?.aborted)throw Error("用户中止",{cause:a});return}finally{be=Math.max(0,be-1)}}async function bi(a,b,c){let d,e=new AbortController;if(c?.aborted)throw Error("用户中止");let f=()=>e.abort();c?.addEventListener("abort",f,{once:!0});let g=new Promise(a=>{d=setTimeout(()=>{e.abort(),a(null)},b)}),h=[Promise.resolve().then(()=>a(e.signal)),g];c&&h.push(new Promise((a,b)=>{e.signal.addEventListener("abort",()=>{c.aborted&&b(Error("用户中止"))},{once:!0})}));try{let a=await Promise.race(h);if(c?.aborted)throw Error("用户中止");return a}finally{d&&clearTimeout(d),c?.removeEventListener("abort",f)}}async function bj(a,b,c={}){let d=await bh(a,b,!0,{maxTokens:c.maxTokens,temperature:c.temperature,signal:c.signal,diagnostics:c.diagnostics,timeoutMs:c.timeoutMs});if(d)try{return JSON.parse(function(a){let b=a.trim(),c=b.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/iu)?.[1]?.trim();if(c)return c;let d=b.indexOf("{"),e=b.lastIndexOf("}"),f=b.indexOf("["),g=b.lastIndexOf("]"),h=d>=0&&e>d?b.slice(d,e+1):"",i=f>=0&&g>f?b.slice(f,g+1):"";return h&&(!i||d<=f)?h:i||b}(d))}catch{return}}function bk(a){let b=[],c=new Set;for(let d of a.filter(a=>"table"===a.processingType)){if(c.has(d.filePath))continue;c.add(d.filePath);let a=(0,h.aY)(),g=e.isAbsolute(d.filePath)?d.filePath:f.existsSync(e.join(a,"knowledgeBase",d.filePath))?e.join(a,"knowledgeBase",d.filePath):e.join(a,d.filePath),i=e.extname(d.filePath).toLowerCase();if(f.existsSync(g)&&[".xlsx",".xls",".csv"].includes(i))try{let a=ba.readFile(g,{cellDates:!0,sheetStubs:!1});for(let c of a.SheetNames){let e=a.Sheets[c],f=ba.utils.sheet_to_json(e,{header:1,raw:!1,defval:""}).map(a=>a.map(a=>String(a).trim())).filter(a=>a.some(Boolean));if(f.length<2)continue;let g=f.findIndex(a=>a.filter(Boolean).length>=2);if(g<0)continue;let h=f[g].filter(Boolean),i=f.slice(g+1).map(a=>a.slice(0,h.length)).filter(a=>a.some(Boolean));0!==i.length&&b.push({tableType:d.roleId||"table",sheet:c,headers:h,rows:i,sourceFile:d.filePath,sourceRange:e["!ref"]})}continue}catch{}let j=d.content.split("\n").map(a=>a.trim()).filter(Boolean).filter(a=>a.includes("|")||a.includes(" ")||a.includes(","));if(j.length<2)continue;let k=j[0].includes("|")?"|":j[0].includes(" ")?" ":",",l=j.map(a=>a.split(k).map(a=>a.trim()).filter(Boolean)).filter(a=>a.length>1);l.length<2||b.push({tableType:d.roleId||"table",headers:l[0],rows:l.slice(1),sourceFile:d.filePath,sourceRange:d.sectionTitle})}return b}function bl(a,b,c){let d=(0,E.Uy)(b,c).map(a=>({field:a,pattern:function(a){let b=a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");return RegExp(`${b}[::\\s]+([^\\n,。;;]+)`,"u")}(a.name)})),e=[];for(let b of a)for(let{field:a,pattern:c}of d){if(!(0,E.I2)(b,a))continue;let d=b.content.match(c)||[void 0,b.content.replace(/\s+/gu," ")],f=d?.[1]?.trim();f&&!e.some(b=>b.fieldId===a.id&&b.value===f)&&e.push({key:a.name,fieldId:a.id,fieldName:a.name,value:f,sourceFile:b.filePath,roleId:b.roleId||"unknown",processingType:b.processingType,confidence:b.score,sourceRef:{filePath:b.filePath,roleId:b.roleId||"unknown",processingType:b.processingType,sectionTitle:b.sectionTitle}})}return e}async function bm(a,b,c,d,e){let f=[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"LLM JSON 抽取未启用或无可用模型"}],g=Math.max(12e3,Math.floor(Number(process.env.DOCUMENT_FACT_EXTRACTION_MAX_CHARS??45e3))),h=Math.max(8,Math.floor(Number(process.env.DOCUMENT_FACT_EXTRACTION_MAX_ITEMS??48))),i=0,j=[];for(let b of a.slice(0,h)){let a=(0,aG.lG)(b.content).replace(/\s+/gu," ").slice(0,Math.max(800,Math.floor(g/h))),c=`文件:${b.filePath}
|
|
66
66
|
角色:${b.roleId||""}
|
|
67
67
|
处理:${b.processingType||""}
|
|
68
68
|
内容:${a}`;if(j.length>0&&i+c.length>g)break;i+=c.length,j.push(c)}let k=j.join("\n\n---\n\n");if(!k.trim())return{facts:[],stages:f};(0,aG.Te)(e);let l=(0,E.Uy)(c,d),m=l.map(a=>`- id=${a.id} name=${a.name} type=auto required=${a.required} sourceRoleIds=${a.sourceRoleIds.join(",")||"不限"} hint=${a.extractionHint||"无"}`).join("\n"),n=await bj(b||"你是文档事实抽取器。",`请严格按下面的动态事实 schema 从资料中抽取事实。只抽取资料明确支持的内容;如果字段限定 sourceRoleIds,必须优先来自对应文件角色;事实取舍和冲突处理遵循规范包字段说明、文件角色和提示词角色配置。
|
|
@@ -162,7 +162,7 @@ ${a.projectContext}`:"","章节审查摘要:",d,"章节内容摘要(用于
|
|
|
162
162
|
${a.projectContext}`:"",g,"知识库证据摘要:",f,`待审查初稿片段 ${c+1}/${h.length}(必须检查该片段章节完整性、空小节和事实冲突):`,b7(b,c,h.length),"请只返回 JSON 审查结果,不要返回全文。"].filter(Boolean).join("\n"),{maxTokens:1600,temperature:0,signal:a.signal,diagnostics:a.diagnostics,timeoutMs:Math.max(3e4,Number(process.env.DOCUMENT_REVIEW_LLM_CALL_TIMEOUT_MS??9e4))}))}(0,aG.Te)(a.signal);let j=i.flatMap(a=>Array.isArray(a?.issues)?a.issues.filter(a=>a?.message):[]).slice(0,e),k=Date.now()-b>d,l=j.filter(a=>"high"===a.severity).length,m=i.map(a=>Number(a?.score)).filter(Number.isFinite),n=m.length?Math.round(m.reduce((a,b)=>a+b,0)/m.length):void 0,o=function(a,b){if(0===a.length)return b;let c=[],d=0;for(let b of a){if(d+b.length>420&&c.length>0)break;c.push(b),d+=b.length}return c.join(";")}(j.map(a=>`${a.severity||"medium"}:${a.location||a.type||"全文"}-${a.message}`),"未发现明显质量问题");return{markdown:a.markdown,stage:{type:"llm_review",roleId:"llm-review",status:l>0||k?"fallback":i.length>0?"success":"skipped",message:i.length>0?`已完成预算化结构化非重写式质量审查${void 0!==n?`,评分 ${n}`:""}${k?",已达到审查预算":""}:${o}`:"无可用模型或审查结果不可用,保留生成初稿"}}}function cW(a,b){return 0>=(0,aD.V7)(a.content)?"failed":"completed"}let cX=["项目名称 项目编号 招标人 项目概况与招标范围 建设地点 建设规模 计划工期 质量标准 合同估算价","计划工期 合同工期 总工期 日历天","合同估算价 合同估算价格 投资估算 最高投标限价 招标控制价","质量标准 质量目标 合格","建设地点 建设规模 招标范围"];function cY(a){let b=bo(a),c=0;return/项目名称|工程名称|招标项目名称|项目编号|招标项目编号|招标人|建设单位|发包人/u.test(b)&&(c+=4),/计划工期|合同工期|总工期|\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年)/u.test(b)&&(c+=6),/合同估算价|投资估算|最高投标限价|招标控制价|\d+(?:\.\d+)?\s*(?:万元|元)/u.test(b)&&(c+=5),/质量标准|质量目标|合格|优良/u.test(b)&&(c+=4),/建设地点|建设规模|招标范围|项目概况与招标范围/u.test(b)&&(c+=4),/招标文件|招标公告|投标人须知|前附表|合同协议/u.test(b)&&(c+=2),c}async function cZ(a){let b=[],c=new Set(a.scopedFilePaths);for(let d of cX){(0,aG.Te)(a.signal);let e=await a.manager.search(a.projectRoot,d,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:10,weights:{keyword:.65,vector:.25,rewrite:.8,hybridBonus:.2},generationMode:!1});b.push(...e.results.filter(a=>c.has(a.filePath)&&cY(`${a.sectionTitle||""}
|
|
163
163
|
${a.content}`)>0).map(b=>({chapterId:"project-basic",filePath:b.filePath,score:Math.max(b.score,1)+cY(`${b.sectionTitle||""}
|
|
164
164
|
${b.content}`),content:b.content,roleId:a.fileRoleByPath.get(b.filePath),processingType:a.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"pinned-evidence"})))}for(let c of a.scopedFilePaths){(0,aG.Te)(a.signal);let d=a.project.getFileDetail?.(c,{maxChunkContentChars:12e3});if(d?.chunks?.length)for(let e of d.chunks){let f=cY(`${e.sectionTitle||""}
|
|
165
|
-
${e.content||""}`);if(f<=0)continue;let g=d.file?.relativePath||c;b.push({chapterId:"project-basic",filePath:g,score:1+f,content:e.content,roleId:a.fileRoleByPath.get(g),processingType:a.fileProcessingByPath.get(g),sectionTitle:e.sectionTitle,source:"pinned-evidence"})}}let d=new Set;return b.sort((a,b)=>b.score-a.score).filter(a=>{let b=`${a.filePath}|${a.sectionTitle||""}|${bo(a.content).slice(0,180)}`;return!d.has(b)&&(d.add(b),!0)}).slice(0,24)}function c$(a,b){let c=aj(a);return(0,aE.yw)(a,[{title:b.title,content:a,sections:c}]).filter(a=>"empty"===a.reason||"table_only"===a.reason)}function c_(a){return a.filter(a=>/项目名称|工程名称|项目编号|招标项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`))}function c0(a,b){if(0===c_(b).length)return a;let c=a,d=a=>c_(b).filter(b=>a.some(a=>a.test(`${b.key||""}${b.fieldName||""}${b.fieldId||""}`))).filter(a=>bq(a.fieldId,a.value)).sort((a,b)=>{let c=(0,aG.lG)(a.value),d=(0,aG.lG)(b.value),e=3*!!a.sourceFile?.includes("招标文件")+(a.sourceRef?.sectionTitle&&/项目概况|招标公告|前附表|招标范围/u.test(a.sourceRef.sectionTitle)?2:0)-Math.floor(c.length/80);return 3*!!b.sourceFile?.includes("招标文件")+(b.sourceRef?.sectionTitle&&/项目概况|招标公告|前附表|招标范围/u.test(b.sourceRef.sectionTitle)?2:0)-Math.floor(d.length/80)-e})[0]?.value;for(let a of[{label:/计划工期|合同工期|周期要求/u,value:d([/计划工期|合同工期|周期要求|schedule_requirement/u])},{label:/质量标准|质量目标/u,value:d([/质量标准|quality_standard/u])},{label:/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u,value:d([/合同估算|投资估算|最高投标限价|招标控制价|project_investment_estimate/u])},{label:/建设地点/u,value:d([/建设地点|project_location/u])},{label:/建设规模/u,value:d([/建设规模|project_scale/u])}]){let b=c1((0,aG.lG)(a.value||""));b&&(c=c.replace(RegExp(`(${a.label.source})(\\s*[|::]\\s*)(?:资料未明确|系统暂未从知识库确认)[^|\\n。;;]*`,"gu"),`$1$2${b}`))}return c}function c1(a){return bo(a).replace(/[。;;]$/u,"").trim()}function c2(a,b="",c=b){let d=function(a){let b=new Map;for(let c of a.split(/\r?\n/u)){if(!/^\|.*\|\s*$/u.test(c)||/^\|\s*:?-{3,}:?/u.test(c))continue;let a=c.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.replace(/\*\*/gu,"").trim());if(a.length<2)continue;let d="序号"===a[0]&&a.length>=3?a[1]:a[0],e="序号"===a[0]&&a.length>=3?a[2]:a[1],f="序号"===a[0]&&a.length>=4?a[3]:a[2],g=d.replace(/\/|:|:/gu,"").trim();if(!/项目名称|工程名称|项目编号|招标项目编号|招标人|项目业主|建设单位|发包人|建设地点|建设规模|施工范围|招标范围|计划工期|合同工期|质量标准|合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(g))continue;let h=/计划工期|合同工期/u.test(g)?"schedule_requirement":/质量标准/u.test(g)?"quality_standard":/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(g)?"project_investment_estimate":/招标人|项目业主|建设单位|发包人/u.test(g)?"owner":/建设地点/u.test(g)?"project_location":/项目编号|招标项目编号/u.test(g)?"project_code":void 0;!(!e||/内容|参数|资料未明确|系统暂未从知识库确认/u.test(e))&&bq(h||"project_name",e)&&b.set(g,[c1(e),c1(f||"项目资料")||"项目资料"])}return b}(b),e=bH({facts:a,markdown:c}),f=(a,b)=>{let c=e.get(a);return c?[c.value,c.source||"项目资料"]:function(a,b){for(let[c,d]of a.entries())if(b.some(a=>a.test(c)))return d}(d,b)||["",""]};return[["项目名称",...f("project_name",[/项目名称|工程名称|project_name/u])],["项目编号",...f("project_code",[/项目编号|招标项目编号|project_code/u])],["招标人",...f("owner",[/招标人|项目业主|建设单位|发包人|owner/u])],["建设地点",...f("project_location",[/建设地点|project_location/u])],["建设规模",...f("project_scale",[/建设规模|project_scale/u])],["计划工期",...f("schedule_requirement",[/计划工期|合同工期|周期要求|schedule_requirement/u])],["质量标准",...f("quality_standard",[/质量标准|quality_standard/u])],["合同估算价",...f("project_investment_estimate",[/合同估算|投资估算|最高投标限价|招标控制价|project_investment_estimate/u])]].map(([a,b,c])=>[a,b||"系统暂未从知识库确认",b?c||"项目资料":"待系统补抽确认"])}function c3(a,b="",c=b){return["**项目基本信息表**","","| 信息项 | 内容 |","|---|---|",...c2(a,b,c).map(a=>`| ${a[0]} | ${a[1]} |`)].join("\n")}function c4(a){return/^\s*\|?\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a.trim())}function c5(a){let b=a.trim();if(!b||/^#{1,6}\s+/u.test(b)||c4(b))return!1;let c=(b.match(/\|/gu)||[]).length;return c>=2||c>=1&&/^\s*\|/u.test(b)||c>=1&&/\|\s*$/u.test(b)}function c6(a){return a.trim().replace(/^\|/u,"").replace(/\|$/u,"").trim().split("|").map(a=>a.trim())}function c7(a,b){let c=a.slice(0,b);for(;c.length<b;)c.push("");return`| ${c.join(" | ")} |`}function c8(a){let b=a.replace(/\r?\n/gu,"\n").split("\n"),c=[];for(let a=0;a<b.length;){let d=b[a]||"",e=b[a+1]?.trim()===""?a+2:a+1,f=b[e]||"";if(c5(d)&&c4(f)){for(c.push(d),e!==a+1&&c.push(b[a+1]||""),c.push(f),a=e+1;a<b.length&&c5(b[a]||"");)c.push(b[a]||""),a+=1;continue}if(!c5(d)){c.push(d),a+=1;continue}let g=[],h=a;for(;h<b.length&&c5(b[h]||"");)g.push(b[h]||""),h+=1;let i=g.map(a=>c6(a).length),j
|
|
165
|
+
${e.content||""}`);if(f<=0)continue;let g=d.file?.relativePath||c;b.push({chapterId:"project-basic",filePath:g,score:1+f,content:e.content,roleId:a.fileRoleByPath.get(g),processingType:a.fileProcessingByPath.get(g),sectionTitle:e.sectionTitle,source:"pinned-evidence"})}}let d=new Set;return b.sort((a,b)=>b.score-a.score).filter(a=>{let b=`${a.filePath}|${a.sectionTitle||""}|${bo(a.content).slice(0,180)}`;return!d.has(b)&&(d.add(b),!0)}).slice(0,24)}function c$(a,b){let c=aj(a);return(0,aE.yw)(a,[{title:b.title,content:a,sections:c}]).filter(a=>"empty"===a.reason||"table_only"===a.reason)}function c_(a){return a.filter(a=>/项目名称|工程名称|项目编号|招标项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`))}function c0(a,b){if(0===c_(b).length)return a;let c=a,d=a=>c_(b).filter(b=>a.some(a=>a.test(`${b.key||""}${b.fieldName||""}${b.fieldId||""}`))).filter(a=>bq(a.fieldId,a.value)).sort((a,b)=>{let c=(0,aG.lG)(a.value),d=(0,aG.lG)(b.value),e=3*!!a.sourceFile?.includes("招标文件")+(a.sourceRef?.sectionTitle&&/项目概况|招标公告|前附表|招标范围/u.test(a.sourceRef.sectionTitle)?2:0)-Math.floor(c.length/80);return 3*!!b.sourceFile?.includes("招标文件")+(b.sourceRef?.sectionTitle&&/项目概况|招标公告|前附表|招标范围/u.test(b.sourceRef.sectionTitle)?2:0)-Math.floor(d.length/80)-e})[0]?.value;for(let a of[{label:/计划工期|合同工期|周期要求/u,value:d([/计划工期|合同工期|周期要求|schedule_requirement/u])},{label:/质量标准|质量目标/u,value:d([/质量标准|quality_standard/u])},{label:/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u,value:d([/合同估算|投资估算|最高投标限价|招标控制价|project_investment_estimate/u])},{label:/建设地点/u,value:d([/建设地点|project_location/u])},{label:/建设规模/u,value:d([/建设规模|project_scale/u])}]){let b=c1((0,aG.lG)(a.value||""));b&&(c=c.replace(RegExp(`(${a.label.source})(\\s*[|::]\\s*)(?:资料未明确|系统暂未从知识库确认)[^|\\n。;;]*`,"gu"),`$1$2${b}`))}return c}function c1(a){return bo(a).replace(/[。;;]$/u,"").trim()}function c2(a,b="",c=b){let d=function(a){let b=new Map;for(let c of a.split(/\r?\n/u)){if(!/^\|.*\|\s*$/u.test(c)||/^\|\s*:?-{3,}:?/u.test(c))continue;let a=c.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.replace(/\*\*/gu,"").trim());if(a.length<2)continue;let d="序号"===a[0]&&a.length>=3?a[1]:a[0],e="序号"===a[0]&&a.length>=3?a[2]:a[1],f="序号"===a[0]&&a.length>=4?a[3]:a[2],g=d.replace(/\/|:|:/gu,"").trim();if(!/项目名称|工程名称|项目编号|招标项目编号|招标人|项目业主|建设单位|发包人|建设地点|建设规模|施工范围|招标范围|计划工期|合同工期|质量标准|合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(g))continue;let h=/计划工期|合同工期/u.test(g)?"schedule_requirement":/质量标准/u.test(g)?"quality_standard":/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(g)?"project_investment_estimate":/招标人|项目业主|建设单位|发包人/u.test(g)?"owner":/建设地点/u.test(g)?"project_location":/项目编号|招标项目编号/u.test(g)?"project_code":void 0;!(!e||/内容|参数|资料未明确|系统暂未从知识库确认/u.test(e))&&bq(h||"project_name",e)&&b.set(g,[c1(e),c1(f||"项目资料")||"项目资料"])}return b}(b),e=bH({facts:a,markdown:c}),f=(a,b)=>{let c=e.get(a);return c?[c.value,c.source||"项目资料"]:function(a,b){for(let[c,d]of a.entries())if(b.some(a=>a.test(c)))return d}(d,b)||["",""]};return[["项目名称",...f("project_name",[/项目名称|工程名称|project_name/u])],["项目编号",...f("project_code",[/项目编号|招标项目编号|project_code/u])],["招标人",...f("owner",[/招标人|项目业主|建设单位|发包人|owner/u])],["建设地点",...f("project_location",[/建设地点|project_location/u])],["建设规模",...f("project_scale",[/建设规模|project_scale/u])],["计划工期",...f("schedule_requirement",[/计划工期|合同工期|周期要求|schedule_requirement/u])],["质量标准",...f("quality_standard",[/质量标准|quality_standard/u])],["合同估算价",...f("project_investment_estimate",[/合同估算|投资估算|最高投标限价|招标控制价|project_investment_estimate/u])]].map(([a,b,c])=>[a,b||"系统暂未从知识库确认",b?c||"项目资料":"待系统补抽确认"])}function c3(a,b="",c=b){return["**项目基本信息表**","","| 信息项 | 内容 |","|---|---|",...c2(a,b,c).map(a=>`| ${a[0]} | ${a[1]} |`)].join("\n")}function c4(a){return/^\s*\|?\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a.trim())}function c5(a){let b=a.trim();if(!b||/^#{1,6}\s+/u.test(b)||c4(b))return!1;let c=(b.match(/\|/gu)||[]).length;return c>=2||c>=1&&/^\s*\|/u.test(b)||c>=1&&/\|\s*$/u.test(b)}function c6(a){return a.trim().replace(/^\|/u,"").replace(/\|$/u,"").trim().split("|").map(a=>a.trim())}function c7(a,b){let c=a.slice(0,b);for(;c.length<b;)c.push("");return`| ${c.join(" | ")} |`}function c8(a){let b=a.replace(/\r?\n/gu,"\n").split("\n"),c=[];for(let a=0;a<b.length;){let d=b[a]||"",e=b[a+1]?.trim()===""?a+2:a+1,f=b[e]||"";if(c5(d)&&c4(f)){for(c.push(d),e!==a+1&&c.push(b[a+1]||""),c.push(f),a=e+1;a<b.length&&c5(b[a]||"");)c.push(b[a]||""),a+=1;continue}if(!c5(d)){c.push(d),a+=1;continue}let g=[],h=a;for(;h<b.length&&c5(b[h]||"");)g.push(b[h]||""),h+=1;let i=g.map(a=>c6(a)),j=i.map(a=>a.length),k=j[0]||0,l=/^(?:项目名称|工程名称|项目编号|招标人|建设单位|建设地点|建设规模|计划工期|质量标准|合同估算价|招标范围)$/u;if(g.length<2||k<2||j.some(a=>a!==k)||i.some(a=>l.test(a[0]||""))){c.push(...g),a=h;continue}for(let a of(c.length>0&&c[c.length-1]?.trim()&&c.push(""),c.push(c7(function(a){if(2===a)return["信息项","内容"];let b=["项目","内容","备注","说明"];return Array.from({length:a},(a,c)=>b[c]||`列${c+1}`)}(k),k)),c.push(c7(Array.from({length:k},()=>"---"),k)),g))c.push(c7(c6(a),k));(a=h)<b.length&&b[a]?.trim()&&c.push("")}return c.join("\n").replace(/\n{3,}/gu,"\n\n")}function c9(a){let b=a.replace(/\r?\n/gu,"\n").split("\n"),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>/^\s*\|.*\|\s*$/u.test(a),f=a=>/^\s*\|\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a),g=a=>`| ${a.join(" | ")} |`;for(let a=0;a<b.length;){let h=b[a]||"",i=b[a+1]||"";if(!e(h)||!f(i)){c.push(h),a+=1;continue}let j=d(h),k=j.map((a,b)=>/^(?:资料来源|资料来源\/(?:说明|证明)|来源|证明)$/u.test(a)?b:-1).filter(a=>a>=0);if(0===k.length){c.push(h),a+=1;continue}let l=a=>a.filter((a,b)=>!k.includes(b));for(c.push(g(l(j))),c.push(g(l(d(i)).map(a=>a||"---"))),a+=2;a<b.length&&e(b[a]||"");)c.push(g(l(d(b[a]||"")))),a+=1}return c.join("\n").replace(/资料来源\/(?:说明|证明)/gu,"")}function da(a){let b=[/^项目名称$/u,/^工程名称$/u,/^项目编号$/u,/^招标项目编号$/u,/^招标人$/u,/^项目业主$/u,/^建设单位$/u,/^发包人$/u,/^建设地点$/u,/^实施地点$/u,/^建设规模$/u,/^工程规模$/u,/^计划工期$/u,/^合同工期$/u,/^总工期$/u,/^质量标准$/u,/^质量目标$/u,/^合同估算价$/u,/^投资估算$/u,/^最高投标限价$/u,/^招标控制价$/u],c=a.replace(/\r?\n/gu,"\n").split("\n"),d=[],e=!1,f=a=>c6(a).map(a=>a.replace(/\*\*/gu,"").trim()),g=a=>b.some(b=>b.test(a)),h=a=>{let b=a.slice(2).map(f).filter(a=>a.length>=2).map(a=>a[0]||""),c=b.filter(g).length;return c>=3&&c>=Math.ceil(.45*b.length)};for(let a=0;a<c.length;){let b=c[a]||"",f=c[a+1]||"";if(/(?:\*\*[^\n]*项目基本信息表[^\n]*\*\*|####\s+[^\n]*项目基本信息表[^\n]*|###\s+[^\n]*项目基本信息表[^\n]*)/u.test(b)){let f=[b];for(a+=1;a<c.length&&!(c5(c[a]||"")&&c4(c[a+1]||""))&&""===(c[a]||"").trim();)f.push(c[a]||""),a+=1;if(a<c.length&&c5(c[a]||"")&&c4(c[a+1]||""))for(f.push(c[a]||"",c[a+1]||""),a+=2;a<c.length&&c5(c[a]||"");)f.push(c[a]||""),a+=1;e||(e=!0,d.push(...f));continue}if(/^###\s+(?:\d+\.\d+\s+)?(?:项目基本信息|工程概况|项目概况)\s*$/u.test(b)){let f=[b];for(a+=1;a<c.length&&!(c5(c[a]||"")&&c4(c[a+1]||""))&&!/^###\s+/u.test(c[a]||"");)f.push(c[a]||""),a+=1;if(a<c.length&&c5(c[a]||"")&&c4(c[a+1]||"")){let g=[c[a]||"",c[a+1]||""];for(a+=2;a<c.length&&c5(c[a]||"");)g.push(c[a]||""),a+=1;if(h(g)){if(e){let a=f.filter(a=>a.trim()&&!/^###\s+/u.test(a));a.length&&d.push(b,...a)}else e=!0,d.push(...f,...g);continue}d.push(...f,...g);continue}d.push(...f);continue}if(c5(b)&&c4(f)){let g=[b,f];for(a+=2;a<c.length&&c5(c[a]||"");)g.push(c[a]||""),a+=1;if(h(g)){e||(e=!0,d.push(...g));continue}d.push(...g);continue}d.push(b),a+=1}return d.join("\n").replace(/\n{3,}/gu,"\n\n").replace(/\n{1,2}\|\s*信息项\s*\|\s*内容\s*\|\s*\n+(?:该小节围绕[^\n]*\n+)+\|\s*:?-{3,}:?\s*\|\s*:?-{3,}:?\s*\|\s*/gu,"\n\n")}function db(a,b){if(!/项目基本信息|项目概况|工程概况|招标范围/u.test(a))return da(c8(c9(a)));if(!/\|\s*信息项\s*\|\s*内容\s*\|/u.test(a)&&c_(b).length>0){let c=/^(###\s+(?:\d+\.\d+\s+)?[^\n]*(?:项目概况|工程概况|项目基本信息|招标范围)[^\n]*\n)/mu.exec(a);if(c?.index||c?.index===0){let d=c.index+c[0].length,e=`${c3(b,"",a)}
|
|
166
166
|
|
|
167
167
|
`;a=`${a.slice(0,d)}
|
|
168
168
|
${e}${a.slice(d).trimStart()}`}}let c=/^(###\s+(?:\d+\.\d+\s+)?[^\n]*(?:项目概况|工程概况|项目基本信息|招标范围)[^\n]*\n)/mu.exec(a);if(!c?.index&&c?.index!==0)return a;let d=c.index,e=d+c[0].length,f=/^###\s+/gmu;f.lastIndex=e;let g=f.exec(a),h=g?.index??a.length,i=a.slice(e,h),j=c3(b,i,a);if(!c2(b,i,a).some(a=>!/资料未明确|系统暂未从知识库确认/u.test(a[1])))return a;let k=i.replace(/\*\*项目基本信息表\*\*[\s\S]*?(?=\n\n(?:[^|\n]|$)|$)/u,"").replace(/\|\s*(?:序号\s*\|\s*项目名称\s*\|\s*内容参数|信息项\s*\|\s*内容\s*(?:\|\s*资料来源\/(?:说明|证明))?)\s*\|[\s\S]*?(?=\n\n(?:[^|\n]|$)|$)/u,"").replace(/^\|\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|\s*\n(?:^\|.*\|\s*\n?)*/gmu,"").replace(/该小节围绕“[^”]+”进行补充说明[^\n]*(?:\n\n该小节围绕“[^”]+”进行补充说明[^\n]*)*/gu,"").replace(/\n{3,}/gu,"\n\n").trim(),l=`${c[0].trimEnd()}
|
|
@@ -196,7 +196,13 @@ ${e.join("\n")}`:"",h.length?`项目基础事实卡片(资料已明确,项
|
|
|
196
196
|
${h.map(a=>`- ${a.key||a.fieldName}:${G((0,aG.lG)(a.value)).slice(0,220)}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`).join("\n")}
|
|
197
197
|
项目基本信息表必须使用固定表头:| 信息项 | 内容 |,不得使用“序号|项目名称|内容参数”表头,不得输出后台溯源列。`:"",a.factNeedsPrompt||"",g.length?`全局资料事实索引匹配到的本章可写事实:
|
|
198
198
|
${g.join("\n")}`:"",i.length?`本章资料中可直接使用的可靠精确参数/编号:${i.join("、")}。这些参数来自绑定资料,不属于编造;涉及对应对象、部位、工序、材料、设备、项目概况、质量验收或安全控制时必须自然写入正文,并保持原样或等价专业表达。项目基础事实中的合同估算价、计划工期可用于项目概况;不得写入报价明细、单价、税率、预留金。`:"",k.length?`当前事实需求仍未充分确认:${k.join("、")}。未确认项不得编造;但已满足事实需求中的资料事实必须写入对应小节。`:"",a.missingFacts.length?`模板显式要求中当前检索未充分命中的项:${a.missingFacts.join("、")}。未命中项不得编造,但不得因此省略上方已经明确的可靠参数。`:"",`本章可用材料来源约 ${j} 个文件,正文必须按事实需求把可用事实内化到对应小节,不得单列后台资料清单。`].filter(Boolean).join("\n")}({chapter:c,plan:d,spec:Y,roleFacts:x,evidence:P,missingFacts:R,indexedFacts:[...al,...ak],resolvedFactNeeds:ab,factNeedsPrompt:function(a){let b=a.map(a=>{let b=a.facts.slice(0,5).map(b=>`${b.key||b.fieldName||a.need.label}=${bC(b.value)}${b.sourceFile?`(${e.basename(b.sourceFile)})`:""}`),c=a.facts.length?[]:(a.evidence||[]).slice(0,2).map(a=>`证据片段:${bC(a.content).slice(0,160)}${a.filePath?`(${e.basename(a.filePath)})`:""}`);return`- ${a.need.required?"必须":"相关"}|${a.need.label}|${a.status}${b.length||c.length?`:${[...b,...c].join(";")}`:":未在已解析资料中确认"}`});return b.length?`事实需求覆盖卡片:
|
|
199
|
-
${b.join("\n")}`:""}(ab)}),ao={total:ab.length,satisfied:ab.filter(a=>"satisfied"===a.status).length,missing:ab.filter(a=>"missing"===a.status).length,lowConfidence:ab.filter(a=>"low_confidence"===a.status).length};for(let a of ac)aA.push(`${c.title}:事实需求未确认 ${a}`);let as=Y?.chapterRules.find(a=>a.id===c.id||a.title===c.title),ay=bE.chapterTargets.get(c.id)||1200,az=Math.max(3500,Number(process.env.DOCUMENT_LONGFORM_INITIAL_CHAPTER_CAP||8e3)),aB=bE.longformStrict?Math.min(ay,az):ay,aC=Math.ceil(aB*(bE.maxChars?1.1:1.18)),aF=bE.targetChars?Math.min(1800,Math.max(600,Math.floor(.5*aB))):1200,aH=Math.max(Math.min(d?.minWords||0,aB),Math.min(as?.minWords||0,aB),Math.min(Y?.dynamicChapterRule.minWordsPerChapter||0,aB),Math.floor(.78*aB),aF),aJ=cK(aH,aB),aK=Math.min(aB,6e3),aL=Math.max(900,Math.min(aB,Math.ceil(.55*aB),aK)),aM=Math.max(450,Math.min(aH,Math.floor(.72*aL))),aN=Math.max(aL+300,Math.min(aC,Math.ceil(1.25*aL))),aO=cK(aM,aL),aP=Math.min(cL(aL),18e4),aQ=Math.max(900,Math.min(aL,3600)),aT=Math.max(450,Math.min(aM,Math.floor(.72*aQ))),aU=Math.max(aQ+300,Math.min(aC,Math.ceil(1.2*aQ))),aV=cK(aT,aQ),aX=Math.min(cL(aQ),15e4),a$=c.sections?.filter(Boolean).length||0,a0=/[、,,;;]/u.test(c.title),a2=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),a3=0!==Number(process.env.DOCUMENT_SECTION_FIRST_GENERATION??0)&&a$>=2&&a$<=a2&&(bE.longformStrict||!a0);N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:a3?`${(0,Q.GQ)(c.title)} 正在按小节并发成稿`:`${(0,Q.GQ)(c.title)} 正在整章一次成稿`,details:a3?[...$,`有效证据:${P.length} 条`,`事实需求:${ao.satisfied}/${ao.total} 已满足,缺失 ${ao.missing},低置信 ${ao.lowConfidence}`,`首轮质量目标:约 ${aB} 字${ay!==aB?`,总预算分配约 ${ay} 字`:""},上限约 ${aC} 字`,`规划小节:${c.sections?.length||0} 个`,"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...$,`有效证据:${P.length} 条`,`事实需求:${ao.satisfied}/${ao.total} 已满足,缺失 ${ao.missing},低置信 ${ao.lowConfidence}`,`目标字数:约 ${aB} 字,上限约 ${aC} 字`,`规划小节:${a$} 个${a$>a2?",超过小节并发上限,改用整章稳定成稿":""}`,"首次生成必须覆盖章节结构、小节、事实和目标篇幅,后置修复仅兜底"],progress:{current:h+1,total:bh.length,label:a3?"小节并发":"整章成稿"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F();let a4=a3?Math.min(cL(aB)+3e4,33e4):Math.min(cL(aB),18e4),a6=a3?await I(()=>bN(bG,`chapter-section-draft:${c.id}`,()=>bi(b=>cJ({template:z,chapter:c,evidence:P,missingFacts:R,promptTexts:X,projectContext:bn,requirement:a.requirement,roleContext:V,targetWords:aB,maxWords:aC,forbidDrawingImages:U,factCoverageContext:am,projectRoot:v,modelName:a_,fileRolesHash:a5,allowPartialResult:!1,sectionEvidenceProvider:a=>du({manager:A,projectRoot:v,chapter:c,sectionTitle:a,scopedFilePaths:t,fileRoleByPath:ap,fileProcessingByPath:aq,signal:b}),diagnostics:bG,signal:b}),a4,a.signal))):await I(()=>bN(bG,`chapter-draft:${c.id}`,()=>bi(b=>cf(z,c,P,R,X,bn,a.requirement,V,{forbidDrawingImages:U,minWords:aH,targetWords:aB,maxWords:aC,maxTokens:aJ,factCoverageContext:am,signal:b}),cL(aB),a.signal)));if(!a6&&a3)throw N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"failed",message:`${(0,Q.GQ)(c.title)} 小节并发未在限定时间内返回,已跳过整章重试并标记为章节阻断`,details:["小节优先模式不再执行整章重试,避免单章长时间空等;请优先重试失败小节或降低目标篇幅。"],progress:{current:h+1,total:bh.length,label:"小节超时"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),Error(`${c.title} 小节并发超时,已跳过整章重试`);if(a6||(N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 整章成稿未完整返回,正在执行整章重试生成`,details:[`目标字数:约 ${aB} 字`,`有效证据:${P.length} 条`],progress:{current:h+1,total:bh.length,label:"整章重试"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),a6=await I(()=>bN(bG,`chapter-draft-fallback:${c.id}`,()=>bi(b=>cf(z,c,P,R,X,bn,a.requirement,V,{forbidDrawingImages:U,minWords:aM,targetWords:aL,maxWords:aN,maxTokens:aO,factCoverageContext:am,signal:b}),aP,a.signal)))),(0,aG.Te)(a.signal),a6||(N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 正在压缩上下文后重试生成`,details:["已压缩证据与上下文后重新请求模型生成",`目标字数:约 ${aB} 字`],progress:{current:h+1,total:bh.length,label:"紧凑重试"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),a6=await I(()=>bN(bG,`chapter-draft-compact-fallback:${c.id}`,()=>bi(b=>cf(z,c,P,R,X,bn,a.requirement,V,{forbidDrawingImages:U,minWords:aT,targetWords:aQ,maxWords:aU,maxTokens:aV,factCoverageContext:am,signal:b}),aX,a.signal)))),(0,aG.Te)(a.signal),!a6)throw Error(`${c.title} 大模型未返回有效章节正文`);let a7=a6,ba=aj(a7),bb=ba.length>=Math.min(3,c.sections?.length||3)?{...c,sections:ba}:c,bd=c$(a7,bb),bg=0,bj=bd.map(a=>`${a.sectionTitle}:${a.reason}:${a.bodyLength}`).join("|");for(;bd.length>0;){bg+=1,N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 存在 ${bd.length} 个小节缺口,正在按目标缺口强制补写`,details:bd.map(a=>a.message),progress:{current:h+1,total:bh.length,label:`小节补写第 ${bg} 轮`}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C);let b=a7,d=await I(()=>bN(bG,`chapter-section-repair:${c.id}:${bg}`,()=>cQ({template:z,chapter:c,content:b,evidence:P,missingFacts:R,promptTexts:X,projectContext:bn,requirement:a.requirement,roleContext:V,targetWords:aB,maxWords:aC,forbidDrawingImages:U,factCoverageContext:am,forcedSections:bd,signal:a.signal})));d?.trim()&&(a7=d);let e=(bd=c$(a7,bb)).map(a=>`${a.sectionTitle}:${a.reason}:${a.bodyLength}`).join("|"),f=e!==bj;if(0===bd.length||!f)break;bj=e}bd.length>0&&(N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"failed",message:`${(0,Q.GQ)(c.title)} 小节补齐仍未完全达标,已标记为阻断问题`,details:bd.map(a=>a.message),progress:{current:h+1,total:bh.length,label:"小节未达标"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C));let bk=bY({chapter:c,content:a7,missingFacts:R,targetWords:aB}),bl=(0,aE.Ff)(bk);bG.quality.blockingCount+=bl.blocking,bG.quality.importantCount+=bl.important,bG.quality.minorCount+=bl.minor;let bm=bQ(bk);if(bm.length>0){let b=a7;N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 正在根据质量问题修复章节:${bm.length} 个阻断问题`,details:bm,progress:{current:h+1,total:bh.length,label:"章节修复"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C);let d=await I(()=>bN(bG,`chapter-repair:${c.id}`,()=>bZ({template:z,chapter:{id:c.id,title:c.title,content:b,evidence:P,missingFacts:[...R,...ac.map(a=>`事实需求未确认:${a}`)],sections:c.sections||[]},issues:bm,promptTexts:X,requirement:a.requirement,forbidDrawingImages:U,diagnostics:bG,signal:a.signal})));a7=d.content,d.appliedCount>0&&(bG.quality.repairedCount+=1),(0,aG.Te)(a.signal)}if(!a7.trim())throw Error(`${(0,Q.GQ)(c.title)} 首次生成失败,未获得可用于定稿的正文`);let bo=a7,bp=0;if((0,aD.V7)(bo)<Math.floor(.82*aB)||bQ(bY({chapter:c,content:bo,missingFacts:R,targetWords:aB})).length>0){N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 首次成稿未达定稿门槛,正在定向扩写`,details:[`当前 ${(0,aD.V7)(bo)} 字 / 目标 ${Math.floor(.95*aB)} 字`,`章节并发:${b5}`],progress:{current:h+1,total:bh.length,label:"章节扩写"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C);let b=await I(()=>bN(bG,`chapter-expand:${c.id}`,()=>cR({template:z,chapter:c,content:a7,evidence:P,promptTexts:X,requirement:a.requirement,roleContext:V,targetChars:Math.floor(.95*aB),maxChars:aC,forbidDrawingImages:U,maxTokens:Math.min(aJ,aO),signal:a.signal})));bo=b.content,bp=b.rounds}bo=dh(bo,c);let bq=aj(bo),br=(0,aE.yw)(bo,[{title:c.title,content:bo,sections:bq}]).filter(a=>"empty"===a.reason||"table_only"===a.reason);!function(a,b){try{let c=["chapter-generation-failure.env","document-generation-timeout.env"].map(b=>e.join(a,".dbg",b)).find(a=>f.existsSync(a));if(!c)return;let d=Object.fromEntries(f.readFileSync(c,"utf8").split(/\r?\n/u).map(a=>a.split("=")).filter(a=>a.length>=2).map(([a,...b])=>[a,b.join("=")])),g=d.DEBUG_SERVER_URL;if(!g)return;fetch(g,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({sessionId:d.DEBUG_SESSION_ID||"chapter-generation-failure",runId:"pre",ts:Date.now(),...b})}).catch(()=>void 0)}catch{}}(v,{event:"section-repair-check",hypothesisId:"H1",chapterId:c.id,chapterTitle:c.title,gapCount:br.length,gaps:br.slice(0,10).map(a=>({title:a.sectionTitle,reason:a.reason,message:a.message})),contentChars:(0,aD.V7)(bo),targetWords:aB}),br.length>0&&(N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 正在小节级定向补写 ${br.length} 个未达标小节`,details:br.slice(0,8).map(a=>a.message),progress:{current:h+1,total:bh.length,label:"小节补写"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),bo=await I(()=>bN(bG,`section-repair:${c.id}`,()=>cQ({template:z,chapter:c,content:bo,evidence:P,missingFacts:R,promptTexts:X,projectContext:bn,requirement:a.requirement,roleContext:V,targetWords:Math.max(1200,Math.floor(.35*aB)),maxWords:Math.min(aC,Math.max(2400,Math.floor(.55*aB))),forbidDrawingImages:U,factCoverageContext:am,forcedSections:br,signal:a.signal}))),bo=dh(bo,c),bq=aj(bo),br=(0,aE.yw)(bo,[{title:c.title,content:bo,sections:bq}]).filter(a=>"empty"===a.reason||"table_only"===a.reason),0===br.length&&(bG.quality.repairedCount+=1));let bs=cG({chapter:c,content:bo,evidence:P}),bt=(0,aD.V7)(bo),bu=aj(bo),bv=bu.length>0?bu:c.sections||[],bD=(0,aE.qK)(bo,[{title:c.title,content:bo,sections:bv}]).map(a=>a.message),bF=bs.slice(0,6).map(a=>`小节事实密度需优化:${a}`),bH=[...bY({chapter:{...c,sections:bv},content:bo,missingFacts:R,targetWords:aB}),...bD,...bF],bI=function(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))?"failed":c.length>0?"fallback":"success"}(bt,0,bH);g=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:bI,message:bL(`${(0,Q.GQ)(c.title)} 已由大模型首轮成稿${bp>0?`并定向扩写 ${bp} 轮`:""}:当前 ${bt} 字 / 目标 ${Math.floor(.95*aB)} 字${"success"!==bI?`;风险:${bH.join("、")||"篇幅未达标"}`:""}`,i),details:[`达标率:${Math.round(bt/Math.max(1,Math.floor(.95*aB))*100)}%`,...$,`二级小节:${bv.length} 个`,`扩写轮次:${bp}`],progress:{current:h+1,total:bh.length,label:"success"===bI?"章节达标":"章节风险"}},{subtitle:(0,Q.GQ)(c.title),order:h}),aR[h]=g;let bM={id:c.id,title:c.title,content:bo,evidence:P,missingFacts:R,sections:bv};aI[h]=bM,C=aI.filter(a=>!!a),F(C);let bO=bY({chapter:c,content:bo,missingFacts:R,targetWords:aB}),bP=(0,aE.Ff)(bO);bG.quality.blockingCount+=bP.blocking,bG.quality.importantCount+=bP.important,bG.quality.minorCount+=bP.minor}catch(b){if(a.signal?.aborted)throw b;console.error(`[gen] chapter ${c.title} failed:`,b),aF.push(`${c.title}:${b instanceof Error?b.message:"生成失败"}`),aR[h]=bJ({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,Q.GQ)(c.title)} 生成失败`},{subtitle:(0,Q.GQ)(c.title),order:h})}g&&(N[j]=g),F(C)}))}C=aI.filter(a=>!!a),aH.push(...aR.filter(a=>!!a));let b6=C.flatMap(a=>a.evidence||[]);if(b6.length>0){av.push(...b6);let a=J(av,{maxChars:Math.max(5e4,9e3*bh.length),preservePinned:!0});av.splice(0,av.length,...a)}if(0===C.length)throw Error(`章节生成未完成:${aF.join(";")||"没有生成任何有效章节"}`);if(U&&C.length<bh.length)throw Error(`OUTLINE 指定 ${bh.length} 章,实际只生成 ${C.length} 章:${aF.join(";")||"部分章节未生成"}`);(0,aG.Te)(a.signal),bK(N,bJ({type:"file_understanding",roleId:"multimodal-files",status:"running",message:"正在理解多模态参考文件"},{subtitle:"多模态参考文件"})),F(C);let b7={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{b7=await ce(v,av,a.signal)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fileUnderstanding failed:",b)}for(let b of(bK(N,b7.stage),F(C),(0,aG.Te)(a.signal),b7.notes))av.push({chapterId:"multimodal-file-understanding",filePath:"多模态模型文件理解结果",score:1,content:b,roleId:"multimodal-files",processingType:"reference",source:"multimodal"});let b8=J(av,{maxItems:Math.max(48,10*bh.length),maxChars:Math.max(52e3,9e3*bh.length),preservePinned:!0});av.splice(0,av.length,...b8);let b9=function(a,b,c){let d={};for(let e of(0,E.Uy)(a,c)){let a=b.find(a=>(0,E.I2)(a,e));a&&(d[e.name]=`${a.content.replace(/\s+/gu," ")}(来源:${a.filePath},角色:${a.roleId||"未标注"})`)}return d}(z,av,Y);for(let a of aZ)for(let b of a.facts)b9[b.key]=`${(0,aG.lG)(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let ca=bl(av,z,Y),cb=br(av),cc=bs(av,Z),cd=aZ.flatMap(a=>a.facts.map(a=>({key:a.key,value:(0,aG.lG)(a.value),sourceFile:a.sourceFile,roleId:a.roleId,confidence:.9}))),cg={facts:[],stages:[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"已有本地/角色事实覆盖主要必需字段,跳过 LLM 全量事实抽取"}]};if(function(a,b,c){let d=(0,E.Uy)(b,c).filter(a=>a.required);return 0===d.length?a.filter(a=>a.confidence>=.75&&(0,aG.lG)(a.value).trim().length>=2).length<12:d.filter(b=>a.some(a=>(function(a,b){let c=(0,aG.lG)(a.value).trim();if(!c||c.length<2||c.length>220&&a.confidence<.8)return!1;let d=`${a.fieldId||""} ${a.fieldName||""} ${a.key}`.toLowerCase();return!!(d.includes(b.id.toLowerCase())||d.includes(b.name.toLowerCase()))&&("project_basic_fact"===a.roleId||a.roleId?.startsWith("role-")||a.sourceRef?.filePath?a.confidence>=.55:a.confidence>=.75)})(a,b))).length/d.length<.9}([...cd,...ca,...cb,...cc],z,Y)){let b=J(av,{maxItems:48,maxChars:45e3,preservePinned:!0});try{cg=await bm(b,ak,z,Y,a.signal)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fact extraction failed:",b)}}(0,aG.Te)(a.signal);let ch=function(a,b){let c=b.find(a=>a.filePath)?.filePath||"";return c?a.map(a=>a.sourceFile?a:{...a,sourceFile:c,sourceRef:{filePath:c,roleId:a.sourceRef?.roleId||a.roleId,processingType:a.sourceRef?.processingType||a.processingType,sectionTitle:a.sourceRef?.sectionTitle,chunkIndex:a.sourceRef?.chunkIndex,cellRange:a.sourceRef?.cellRange}}):a}([...cd,...ca,...cb,...cc,...cg.facts],av);for(let a of(bK(N,b7.stage),cg.stages))bK(N,a);F();let ci=bk(av),cj=av.filter(a=>"pinned-evidence"===a.source).length,cl=av.filter(a=>"pinned-evidence"!==a.source&&"bound-file"!==a.source).length,cv=bJ({type:"reference",roleId:"quality-enhancement",status:av.length>0?"success":"skipped",message:`增强贡献:知识库证据 ${av.length} 条,人工确认/固定证据 ${cj} 条,自动检索证据 ${cl} 条`},{subtitle:"证据与上下文增强"});for(let a of(N.push(cv),F(),ch))b9[a.key]=`${(0,aG.lG)(a.value)}(来源:${a.sourceFile},角色:${a.roleId})`;let cw=new Map;for(let a of av)cw.set(a.filePath,(cw.get(a.filePath)??0)+1);let cx=new Map;for(let a of av)cx.set(a.source||"unknown",(cx.get(a.source||"unknown")??0)+1);let cy=[...cw.entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),cz=bD(ch,ci,aA,Y,Z),cA=C.map(a=>{let b=Y.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=(b?.requiredFactIds||[]).map(a=>Y.factFields.find(b=>b.id===a)?.name).filter(Boolean),d=[...new Set([...a.missingFacts||[],...c].filter(Boolean))],e=d.filter(b=>!a.missingFacts.includes(b)),f=d.filter(b=>a.missingFacts.includes(b)),g=+(a.evidence.length>0),h=d.length?e.length/d.length:1;return{chapterId:a.id,title:a.title,requiredFacts:d,coveredFacts:e,missingFacts:f,evidenceCount:a.evidence.length,readinessRate:Math.min(1,.7*h+.3*g)}}),cB=function(a,b=[],c){let e=[],f=[];for(let b of a)0===b.evidence.length&&e.push(`${b.title} 未检索到资料证据`),b.content.length<80&&e.push(`${b.title} 内容较短,建议人工补充或重新生成`);c&&a.length<c.chapters.length&&f.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===(0,d.zY)(c).length&&f.push("模板未绑定任何提示词");let g=new Set(b.map(a=>a.roleId));return c?.fileBindings?.some(a=>"rule"===a.roleId)&&!g.has("rule")&&e.push("rule 角色未抽取到结构化事实"),{passed:0===f.length,warnings:e,errors:f}}(C,ch,z);cB.warnings=[...cB.warnings,..._.warnings],cB.errors=[...cB.errors,..._.blockingIssues];let cC=aZ.flatMap(a=>a.warnings.map(a=>({level:/结构化事实读取不足|结构化章节读取不足|兜底|片段/u.test(a)?"info":"warning",message:a,suggestion:"这是资料抽取诊断,不代表已抽取到的可靠参数不可用;生成时仍应优先使用绑定资料中的可靠参数。"}))).filter(a=>!de(a)),cD=aM(function(a,b,c){let d=[...a.errors.map(a=>({level:"error",message:a,suggestion:"请补充配置或资料后重新生成。"})),...a.warnings.map(a=>({level:"warning",message:a,suggestion:"建议人工确认或补充对应资料。"}))];return c.some(a=>/资料未提供|系统暂未从知识库确认/u.test(a.content))&&d.push({level:"warning",message:"存在系统暂未从知识库确认的章节内容",suggestion:"请检查项目角色配置、文件绑定顺序和事实抽取落位结果。"}),b.conflicts.length>0&&d.push(...b.conflicts.map(a=>({level:"warning",message:a,suggestion:"请根据当前模板绑定的角色、文件证据和用户要求复核取值口径。"}))),d}(cB,cz,C),function(a){let b=[];for(let c of a)0===c.evidenceCount?b.push({level:"error",message:`章节缺少证据:${c.title}`,suggestion:"请补充对应绑定材料或调整模板章节检索词。"}):c.readinessRate<.5&&b.push({level:"warning",message:`章节事实覆盖率较低:${c.title} ${Math.round(100*c.readinessRate)}%`,suggestion:"建议补充章节 requiredFacts 或绑定材料证据。"});return b}(cA),cC),cE=bW(aZ,z),cF=Date.now(),cH=(0,aD.V7)(C.map(a=>a.content).join("\n\n"));bK(N,bJ({type:"validation",roleId:"document-budget",status:"running",message:`正在进行全文预算校准:当前 ${cH} 字`,details:[`章节数:${C.length}`,`目标:${bE.targetChars||bE.targetPages||"按章节深度"}`],progress:{current:1,total:2,label:"预算校准"}},{subtitle:"文档预算"})),F(C);let cI=bF.enableDocumentBudgetExpansion?await I(()=>cS({template:z,chapters:C,budget:bE,promptTexts:ai,requirement:a.requirement,forbidDrawingImages:cE,signal:a.signal,onRoundProgress:(a,b)=>{C.splice(0,C.length,...a),bK(N,bJ({type:"validation",roleId:"document-budget",status:"running",message:`正在进行全文预算校准:第 ${b.round}/${b.maxRounds} 轮,当前 ${b.totalChars} 字,新增 ${b.addedChars} 字`,details:[`章节数:${a.length}`,`目标:${bE.targetChars||bE.targetPages||"按章节深度"}`],progress:{current:Math.min(b.round+1,b.maxRounds),total:b.maxRounds+1,label:"预算校准"}},{subtitle:"文档预算"})),F(C)}})):C;C.splice(0,C.length,...cI);let cM=C.map(a=>a.content).join("\n\n"),cN=dn(C,ch,cM);cN.patchedCount>0&&(C.splice(0,C.length,...cN.chapters),cD=[...cD,{level:"info",message:`已自动补写未落位事实 ${cN.patchedCount} 项`,suggestion:"补写仅使用本项目资料明确事实,未补写商务敏感信息或系统暂未确认内容。"}]);let cO=(0,aD.fW)(bE,C.map(a=>a.content).join("\n\n")),cP=[bE.targetChars?`目标 ${bE.targetChars} 字${bE.minChars||bE.maxChars?`(区间 ${bE.minChars||0}-${bE.maxChars||"∞"} 字)`:""}`:void 0,bE.targetPages?`目标 ${bE.targetPages} 页${bE.minPages||bE.maxPages?`(区间 ${bE.minPages||0}-${bE.maxPages||"∞"} 页)`:""}`:void 0].filter(Boolean).join(" / ")||"默认章节深度";bK(N,bJ({type:"validation",roleId:"document-budget",status:bE.maxChars&&cO.currentChars>bE.maxChars||bE.minChars&&cO.currentChars<bE.minChars?"fallback":"success",message:bL(`文档预算:当前 ${cO.currentChars} 字,新增 ${Math.max(0,cO.currentChars-cH)} 字,预计 ${cO.estimatedPages} 页;${cP}`,cF)},{subtitle:"文档预算"})),F(C);let cY=aH.filter(a=>"chapter_generation"===a.type&&"fallback"===a.status).length,c_=Math.max(0,bh.length-C.length),c1=[...cY>0?[{level:"info",message:`章节生成存在补充完善:${cY} 章`,suggestion:"已保留章节成果;如需更高质量可复核对应章节,但不阻断导出。"}]:[],...c_>0?[{level:"error",message:`部分章节生成失败:${c_} 章`,suggestion:aF.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。"}]:[]],c2=C.flatMap(a=>{let b=bh.find(b=>b.id===a.id);if(!b)return[];let c=cG({chapter:b,content:a.content,evidence:a.evidence||[]});return c.length>0?[{level:"warning",message:`${(0,Q.GQ)(a.title)} 小节知识库事实或量化参数落位可继续优化:${c.slice(0,5).join(";")}`,suggestion:"建议扩大本地知识库检索并定向补写对应小节,优先使用清单、图纸、招标要求中的原始事实、规格、数量、标准和工期参数。"}]:[]}),c3=(cD=aM(cD,c1,c2)).filter(a=>"error"===a.level&&(0,aE.Nz)(a)).length,c4=[...N];bK(c4,bJ({type:"reference",roleId:"knowledge-usage-report",status:"success",message:`资料使用报告:证据 ${av.length} 条,来源文件 ${cy.length} 份,结构化事实 ${ch.length} 条`,details:[`证据类型:${[...cx.entries()].map(([a,b])=>`${a} ${b}`).join(",")||"无"}`,`索引健康:可用切片 ${as.usableChunkCount} 条,待索引 ${as.pendingJobs} 个,向量 ${as.vectorStatus?.status||"unknown"}`,cN.patchedCount>0?`自动补写事实:${cN.patchedCount}/${cN.missingCount}`:`事实落位补写:0/${cN.missingCount}`]},{subtitle:"资料使用报告"})),bK(c4,bJ({type:"reference",roleId:"web-research-report",status:ax.enabled?"success":"skipped",message:ax.enabled?`联网增强:检索章节 ${new Set(ax.chapters).size} 个,查询 ${ax.queries.length} 个,使用公开资料 ${ax.evidenceCount} 条`:"联网增强未开启",details:ax.enabled?[`检索主题:${[...new Set(ax.queries)].join(";")||"无"}`,`过滤结果:${ax.filteredCount} 条`,"公开资料仅用于通用规范、政策、工艺和措施补充,不作为项目事实来源"]:["可在模型配置中开启联网增强"]},{subtitle:"联网增强报告"})),bK(c4,bJ({type:"validation",roleId:"document-workflow",status:c3>0?"failed":"success",message:`阻断 ${c3},错误 ${cB.errors.length},警告 ${cB.warnings.length}`},{subtitle:"最终规范校验"})),bK(c4,bJ({type:"formatting",roleId:"document-workflow",status:"success",message:"已生成正式排版 Markdown"})),bK(c4,bJ({type:"export_ready",roleId:"document-workflow",status:c3>0?"failed":"success",message:c3>0?"导出门禁未通过,请完成阻断问题修复后再导出":"已准备好导出 Markdown/HTML/DOCX/PDF"}));let c5={templateId:z.id,templateName:z.name,title:z.outputTitle,requirement:a.requirement||"",projectRoot:v,projectId:w,exportSettings:z.exportSettings,generationSettings:z.generationSettings,facts:b9,structuredFacts:ch,factsModel:cz,chapters:C,sources:cy,missingItems:[...new Set(aA)],validation:cB,validationIssues:cD,executionStages:c4,exportGate:{passed:0===c3,blockingIssues:cD.filter(a=>"error"===a.level&&(0,aE.Nz)(a)),checklist:[]},assets:[],partialChapters:C.map(a=>({id:a.id,title:a.title,chars:(0,aD.V7)(a.content),status:cW(a,bE.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:C,generatedAt:Date.now()},c6=aC(c5,{forbidDrawingImages:cE,promptRules:ag});if("1"!==process.env.DOCUMENT_ENABLE_POST_EXPORT_REVIEW){let b=aB(c6,C,{forbidDrawingImages:cE,promptRules:ag}).chapters.map(a=>{let b=bh.find(b=>b.id===a.id)||a;return{...a,content:dh(a.content,b)}}),c="",d=(a,b)=>aM(cD.filter(a=>!de(a)&&"error"!==a.level&&!/目录与正文不一致|表格分隔线位置不规范|正文存在过长段落|正文存在非正式章二级标题|正文残留资料页码|小节只有标题或表格无正文/u.test(a.message)),x({markdown:a,spec:Y,summary:W}),B({markdown:a,facts:ch,summary:W,profile:Z}),y(a,W),dc(a,ch),a2({markdown:a,chapters:b,factsModel:cz,template:z,promptBindings:P,promptDocumentRules:ag}),(0,aD.PE)(z.generationSettings||z.exportSettings,a).filter(a=>!(bE.minPages&&/低于目标页数/u.test(a.message))),(0,aD.ty)(bE,a)),e=[],f=()=>{var a;e=aN(d(c=db(c0(dd(aB(aC({...c5,chapters:b},{forbidDrawingImages:cE,promptRules:ag}),b,{forbidDrawingImages:cE,promptRules:ag}).markdown),ch),ch),b)),e=aN(d(c=dg(c,e).replace(/^##\s+(.+)$/gmu,(a,b)=>{let c=String(b||"").trim();return"目录"===c||/^第[一二三四五六七八九十百千万\d]+章\s+/u.test(c)?a:`### ${c}`}),b)),a=c,e=aN(d(c=e.some(a=>/小节内容补写未完成|小节只有标题或表格无正文|空小节/u.test(a.message))?`${a.trim()}
|
|
199
|
+
${b.join("\n")}`:""}(ab)}),ao={total:ab.length,satisfied:ab.filter(a=>"satisfied"===a.status).length,missing:ab.filter(a=>"missing"===a.status).length,lowConfidence:ab.filter(a=>"low_confidence"===a.status).length};for(let a of ac)aA.push(`${c.title}:事实需求未确认 ${a}`);let as=Y?.chapterRules.find(a=>a.id===c.id||a.title===c.title),ay=bE.chapterTargets.get(c.id)||1200,az=Math.max(3500,Number(process.env.DOCUMENT_LONGFORM_INITIAL_CHAPTER_CAP||8e3)),aB=bE.longformStrict?Math.min(ay,az):ay,aC=Math.ceil(aB*(bE.maxChars?1.1:1.18)),aF=bE.targetChars?Math.min(1800,Math.max(600,Math.floor(.5*aB))):1200,aH=Math.max(Math.min(d?.minWords||0,aB),Math.min(as?.minWords||0,aB),Math.min(Y?.dynamicChapterRule.minWordsPerChapter||0,aB),Math.floor(.78*aB),aF),aJ=cK(aH,aB),aK=Math.min(aB,6e3),aL=Math.max(900,Math.min(aB,Math.ceil(.55*aB),aK)),aM=Math.max(450,Math.min(aH,Math.floor(.72*aL))),aN=Math.max(aL+300,Math.min(aC,Math.ceil(1.25*aL))),aO=cK(aM,aL),aP=Math.min(cL(aL),18e4),aQ=Math.max(900,Math.min(aL,3600)),aT=Math.max(450,Math.min(aM,Math.floor(.72*aQ))),aU=Math.max(aQ+300,Math.min(aC,Math.ceil(1.2*aQ))),aV=cK(aT,aQ),aX=Math.min(cL(aQ),15e4),a$=c.sections?.filter(Boolean).length||0,a0=/[、,,;;]/u.test(c.title),a2=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),a3=0!==Number(process.env.DOCUMENT_SECTION_FIRST_GENERATION??0)&&a$>=2&&a$<=a2&&(bE.longformStrict||!a0);N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:a3?`${(0,Q.GQ)(c.title)} 正在按小节并发成稿`:`${(0,Q.GQ)(c.title)} 正在整章一次成稿`,details:a3?[...$,`有效证据:${P.length} 条`,`事实需求:${ao.satisfied}/${ao.total} 已满足,缺失 ${ao.missing},低置信 ${ao.lowConfidence}`,`首轮质量目标:约 ${aB} 字${ay!==aB?`,总预算分配约 ${ay} 字`:""},上限约 ${aC} 字`,`规划小节:${c.sections?.length||0} 个`,"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...$,`有效证据:${P.length} 条`,`事实需求:${ao.satisfied}/${ao.total} 已满足,缺失 ${ao.missing},低置信 ${ao.lowConfidence}`,`目标字数:约 ${aB} 字,上限约 ${aC} 字`,`规划小节:${a$} 个${a$>a2?",超过小节并发上限,改用整章稳定成稿":""}`,"首次生成必须覆盖章节结构、小节、事实和目标篇幅,后置修复仅兜底"],progress:{current:h+1,total:bh.length,label:a3?"小节并发":"整章成稿"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F();let a4=a3?Math.min(cL(aB)+3e4,33e4):Math.min(cL(aB),18e4),a6=a3?await I(()=>bN(bG,`chapter-section-draft:${c.id}`,()=>bi(b=>cJ({template:z,chapter:c,evidence:P,missingFacts:R,promptTexts:X,projectContext:bn,requirement:a.requirement,roleContext:V,targetWords:aB,maxWords:aC,forbidDrawingImages:U,factCoverageContext:am,projectRoot:v,modelName:a_,fileRolesHash:a5,allowPartialResult:!1,sectionEvidenceProvider:a=>du({manager:A,projectRoot:v,chapter:c,sectionTitle:a,scopedFilePaths:t,fileRoleByPath:ap,fileProcessingByPath:aq,signal:b}),diagnostics:bG,signal:b}),a4,a.signal))):await I(()=>bN(bG,`chapter-draft:${c.id}`,()=>bi(b=>cf(z,c,P,R,X,bn,a.requirement,V,{forbidDrawingImages:U,minWords:aH,targetWords:aB,maxWords:aC,maxTokens:aJ,factCoverageContext:am,signal:b}),cL(aB),a.signal)));if(!a6&&a3)throw N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"failed",message:`${(0,Q.GQ)(c.title)} 小节并发未在限定时间内返回,已跳过整章重试并标记为章节阻断`,details:["小节优先模式不再执行整章重试,避免单章长时间空等;请优先重试失败小节或降低目标篇幅。"],progress:{current:h+1,total:bh.length,label:"小节超时"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),Error(`${c.title} 小节并发超时,已跳过整章重试`);a6||(N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 整章成稿未完整返回,正在执行整章重试生成`,details:[`目标字数:约 ${aB} 字`,`有效证据:${P.length} 条`],progress:{current:h+1,total:bh.length,label:"整章重试"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),a6=await I(()=>bN(bG,`chapter-draft-fallback:${c.id}`,()=>bi(b=>cf(z,c,P,R,X,bn,a.requirement,V,{forbidDrawingImages:U,minWords:aM,targetWords:aL,maxWords:aN,maxTokens:aO,factCoverageContext:am,signal:b}),aP,a.signal)))),(0,aG.Te)(a.signal),a6||(N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 正在压缩上下文后重试生成`,details:["已压缩证据与上下文后重新请求模型生成",`目标字数:约 ${aB} 字`],progress:{current:h+1,total:bh.length,label:"紧凑重试"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),a6=await I(()=>bN(bG,`chapter-draft-compact-fallback:${c.id}`,()=>bi(b=>cf(z,c,P,R,X,bn,a.requirement,V,{forbidDrawingImages:U,minWords:aT,targetWords:aQ,maxWords:aU,maxTokens:aV,factCoverageContext:am,signal:b}),aX,a.signal)))),(0,aG.Te)(a.signal),a6||(N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"fallback",message:`${(0,Q.GQ)(c.title)} 大模型未返回有效正文,已使用真实证据构建可审查草稿`,details:[`LLM 最近错误:${bG.llm.lastError||"空响应或超时"}`,`证据条数:${P.length}`],progress:{current:h+1,total:bh.length,label:"证据兜底草稿"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),a6=function(a,b,c){var d;let e=(a.sections&&a.sections.length?a.sections:(d=a.title,/工期|质量|安全/u.test(d)?["工期目标与进度控制","质量管理体系与验收控制","安全生产责任体系","关键工序穿插协调","检查整改与闭环管理","资料归档与交付保障"]:/人、材、机|人材机|劳动力|材料|机械/u.test(d)?["劳动力组织与动态调配","材料采购进场与验收","机械设备配置与调度","资源供应风险控制","现场协调与保障措施","资料记录与闭环管理"]:/重点难点|危大/u.test(d)?["工程重点难点识别","危大工程管理体系","专项方案与技术交底","现场风险控制措施","监测检查与应急处置","验收销项与资料闭合"]:["总体部署与责任分工","实施流程与关键控制","资源配置与资料依据","质量安全与风险控制","检查验收与闭环管理","资料记录与成果移交"])).slice(0,7),f=b.flatMap(a=>a.content.split(/\r?\n/u).map(a=>a.trim()).filter(Boolean)).filter(a=>a.length>=8&&a.length<=180&&!/^(?:资料类型|PDF\s*第|第\d+页|OCR|识别错误|乱码)/iu.test(a)).slice(0,36),g=e.map((a,b)=>{let c=f.slice(4*b,4*b+4),d=c.length?`结合资料明确的${c.join("、")}等内容,`:"结合招标文件、图纸设计说明、工程量清单和现场实施条件,";return`### ${a}
|
|
200
|
+
|
|
201
|
+
${d}项目部应围绕本节管理目标建立责任分工、技术交底、资源投入、过程检查和验收复核机制。实施过程中应将工期、质量、安全文明、材料设备、劳动力组织和资料归档要求同步纳入现场管理,确保各项措施能够转化为可执行、可检查、可追溯的施工控制动作。
|
|
202
|
+
|
|
203
|
+
对涉及专业穿插、作业面移交、材料进场、机械设备使用、隐蔽验收和成品保护的事项,应在施工前明确控制标准,在施工中落实旁站检查和问题整改,在完成后形成复核记录。各岗位应按项目总体目标开展协调,避免因信息传递、资源供应或工序衔接不及时影响施工组织设计的实施效果。`}).join("\n\n"),h=(0,aD.V7)(g)<Math.min(c,5200)?"\n\n### 履约检查与闭环管理\n\n项目经理部应将本章措施纳入周计划、日协调和专项检查机制,对关键线路、资源保障、质量验收、安全文明、资料归档等事项进行持续跟踪。发现偏差时,应明确责任人、整改期限和复核要求,形成问题发现、整改落实、复查销项和资料留痕的闭环管理链条,确保本章内容服务于正式投标响应和后续现场履约。":"";return dh(`## ${a.title}
|
|
204
|
+
|
|
205
|
+
${g}${h}`,a)}(c,P,aL));let a7=a6,ba=aj(a7),bb=ba.length>=Math.min(3,c.sections?.length||3)?{...c,sections:ba}:c,bd=c$(a7,bb),bg=0,bj=bd.map(a=>`${a.sectionTitle}:${a.reason}:${a.bodyLength}`).join("|");for(;bd.length>0;){bg+=1,N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 存在 ${bd.length} 个小节缺口,正在按目标缺口强制补写`,details:bd.map(a=>a.message),progress:{current:h+1,total:bh.length,label:`小节补写第 ${bg} 轮`}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C);let b=a7,d=await I(()=>bN(bG,`chapter-section-repair:${c.id}:${bg}`,()=>cQ({template:z,chapter:c,content:b,evidence:P,missingFacts:R,promptTexts:X,projectContext:bn,requirement:a.requirement,roleContext:V,targetWords:aB,maxWords:aC,forbidDrawingImages:U,factCoverageContext:am,forcedSections:bd,signal:a.signal})));d?.trim()&&(a7=d);let e=(bd=c$(a7,bb)).map(a=>`${a.sectionTitle}:${a.reason}:${a.bodyLength}`).join("|"),f=e!==bj;if(0===bd.length||!f)break;bj=e}bd.length>0&&(N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"failed",message:`${(0,Q.GQ)(c.title)} 小节补齐仍未完全达标,已标记为阻断问题`,details:bd.map(a=>a.message),progress:{current:h+1,total:bh.length,label:"小节未达标"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C));let bk=bY({chapter:c,content:a7,missingFacts:R,targetWords:aB}),bl=(0,aE.Ff)(bk);bG.quality.blockingCount+=bl.blocking,bG.quality.importantCount+=bl.important,bG.quality.minorCount+=bl.minor;let bm=bQ(bk);if(bm.length>0){let b=a7;N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 正在根据质量问题修复章节:${bm.length} 个阻断问题`,details:bm,progress:{current:h+1,total:bh.length,label:"章节修复"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C);let d=await I(()=>bN(bG,`chapter-repair:${c.id}`,()=>bZ({template:z,chapter:{id:c.id,title:c.title,content:b,evidence:P,missingFacts:[...R,...ac.map(a=>`事实需求未确认:${a}`)],sections:c.sections||[]},issues:bm,promptTexts:X,requirement:a.requirement,forbidDrawingImages:U,diagnostics:bG,signal:a.signal})));a7=d.content,d.appliedCount>0&&(bG.quality.repairedCount+=1),(0,aG.Te)(a.signal)}if(!a7.trim())throw Error(`${(0,Q.GQ)(c.title)} 首次生成失败,未获得可用于定稿的正文`);let bo=a7,bp=0;if((0,aD.V7)(bo)<Math.floor(.82*aB)||bQ(bY({chapter:c,content:bo,missingFacts:R,targetWords:aB})).length>0){N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 首次成稿未达定稿门槛,正在定向扩写`,details:[`当前 ${(0,aD.V7)(bo)} 字 / 目标 ${Math.floor(.95*aB)} 字`,`章节并发:${b5}`],progress:{current:h+1,total:bh.length,label:"章节扩写"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C);let b=await I(()=>bN(bG,`chapter-expand:${c.id}`,()=>cR({template:z,chapter:c,content:a7,evidence:P,promptTexts:X,requirement:a.requirement,roleContext:V,targetChars:Math.floor(.95*aB),maxChars:aC,forbidDrawingImages:U,maxTokens:Math.min(aJ,aO),signal:a.signal})));bo=b.content,bp=b.rounds}bo=dh(bo,c);let bq=aj(bo),br=(0,aE.yw)(bo,[{title:c.title,content:bo,sections:bq}]).filter(a=>"empty"===a.reason||"table_only"===a.reason);!function(a,b){try{let c=["chapter-generation-failure.env","document-generation-timeout.env"].map(b=>e.join(a,".dbg",b)).find(a=>f.existsSync(a));if(!c)return;let d=Object.fromEntries(f.readFileSync(c,"utf8").split(/\r?\n/u).map(a=>a.split("=")).filter(a=>a.length>=2).map(([a,...b])=>[a,b.join("=")])),g=d.DEBUG_SERVER_URL;if(!g)return;fetch(g,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({sessionId:d.DEBUG_SESSION_ID||"chapter-generation-failure",runId:"pre",ts:Date.now(),...b})}).catch(()=>void 0)}catch{}}(v,{event:"section-repair-check",hypothesisId:"H1",chapterId:c.id,chapterTitle:c.title,gapCount:br.length,gaps:br.slice(0,10).map(a=>({title:a.sectionTitle,reason:a.reason,message:a.message})),contentChars:(0,aD.V7)(bo),targetWords:aB}),br.length>0&&(N[j]=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 正在小节级定向补写 ${br.length} 个未达标小节`,details:br.slice(0,8).map(a=>a.message),progress:{current:h+1,total:bh.length,label:"小节补写"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),bo=await I(()=>bN(bG,`section-repair:${c.id}`,()=>cQ({template:z,chapter:c,content:bo,evidence:P,missingFacts:R,promptTexts:X,projectContext:bn,requirement:a.requirement,roleContext:V,targetWords:Math.max(1200,Math.floor(.35*aB)),maxWords:Math.min(aC,Math.max(2400,Math.floor(.55*aB))),forbidDrawingImages:U,factCoverageContext:am,forcedSections:br,signal:a.signal}))),bo=dh(bo,c),bq=aj(bo),br=(0,aE.yw)(bo,[{title:c.title,content:bo,sections:bq}]).filter(a=>"empty"===a.reason||"table_only"===a.reason),0===br.length&&(bG.quality.repairedCount+=1));let bs=cG({chapter:c,content:bo,evidence:P}),bt=(0,aD.V7)(bo),bu=aj(bo),bv=bu.length>0?bu:c.sections||[],bD=(0,aE.qK)(bo,[{title:c.title,content:bo,sections:bv}]).map(a=>a.message),bF=bs.slice(0,6).map(a=>`小节事实密度需优化:${a}`),bH=[...bY({chapter:{...c,sections:bv},content:bo,missingFacts:R,targetWords:aB}),...bD,...bF],bI=function(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))?"failed":c.length>0?"fallback":"success"}(bt,0,bH);g=bJ({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:bI,message:bL(`${(0,Q.GQ)(c.title)} 已由大模型首轮成稿${bp>0?`并定向扩写 ${bp} 轮`:""}:当前 ${bt} 字 / 目标 ${Math.floor(.95*aB)} 字${"success"!==bI?`;风险:${bH.join("、")||"篇幅未达标"}`:""}`,i),details:[`达标率:${Math.round(bt/Math.max(1,Math.floor(.95*aB))*100)}%`,...$,`二级小节:${bv.length} 个`,`扩写轮次:${bp}`],progress:{current:h+1,total:bh.length,label:"success"===bI?"章节达标":"章节风险"}},{subtitle:(0,Q.GQ)(c.title),order:h}),aR[h]=g;let bM={id:c.id,title:c.title,content:bo,evidence:P,missingFacts:R,sections:bv};aI[h]=bM,C=aI.filter(a=>!!a),F(C);let bO=bY({chapter:c,content:bo,missingFacts:R,targetWords:aB}),bP=(0,aE.Ff)(bO);bG.quality.blockingCount+=bP.blocking,bG.quality.importantCount+=bP.important,bG.quality.minorCount+=bP.minor}catch(b){if(a.signal?.aborted)throw b;console.error(`[gen] chapter ${c.title} failed:`,b),aF.push(`${c.title}:${b instanceof Error?b.message:"生成失败"}`),aR[h]=bJ({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,Q.GQ)(c.title)} 生成失败`},{subtitle:(0,Q.GQ)(c.title),order:h})}g&&(N[j]=g),F(C)}))}C=aI.filter(a=>!!a),aH.push(...aR.filter(a=>!!a));let b6=C.flatMap(a=>a.evidence||[]);if(b6.length>0){av.push(...b6);let a=J(av,{maxChars:Math.max(5e4,9e3*bh.length),preservePinned:!0});av.splice(0,av.length,...a)}if(0===C.length)throw Error(`章节生成未完成:${aF.join(";")||"没有生成任何有效章节"}`);if(U&&C.length<bh.length)throw Error(`OUTLINE 指定 ${bh.length} 章,实际只生成 ${C.length} 章:${aF.join(";")||"部分章节未生成"}`);(0,aG.Te)(a.signal),bK(N,bJ({type:"file_understanding",roleId:"multimodal-files",status:"running",message:"正在理解多模态参考文件"},{subtitle:"多模态参考文件"})),F(C);let b7={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{b7=await ce(v,av,a.signal)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fileUnderstanding failed:",b)}for(let b of(bK(N,b7.stage),F(C),(0,aG.Te)(a.signal),b7.notes))av.push({chapterId:"multimodal-file-understanding",filePath:"多模态模型文件理解结果",score:1,content:b,roleId:"multimodal-files",processingType:"reference",source:"multimodal"});let b8=J(av,{maxItems:Math.max(48,10*bh.length),maxChars:Math.max(52e3,9e3*bh.length),preservePinned:!0});av.splice(0,av.length,...b8);let b9=function(a,b,c){let d={};for(let e of(0,E.Uy)(a,c)){let a=b.find(a=>(0,E.I2)(a,e));a&&(d[e.name]=`${a.content.replace(/\s+/gu," ")}(来源:${a.filePath},角色:${a.roleId||"未标注"})`)}return d}(z,av,Y);for(let a of aZ)for(let b of a.facts)b9[b.key]=`${(0,aG.lG)(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let ca=bl(av,z,Y),cb=br(av),cc=bs(av,Z),cd=aZ.flatMap(a=>a.facts.map(a=>({key:a.key,value:(0,aG.lG)(a.value),sourceFile:a.sourceFile,roleId:a.roleId,confidence:.9}))),cg={facts:[],stages:[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"已有本地/角色事实覆盖主要必需字段,跳过 LLM 全量事实抽取"}]};if(function(a,b,c){let d=(0,E.Uy)(b,c).filter(a=>a.required);return 0===d.length?a.filter(a=>a.confidence>=.75&&(0,aG.lG)(a.value).trim().length>=2).length<12:d.filter(b=>a.some(a=>(function(a,b){let c=(0,aG.lG)(a.value).trim();if(!c||c.length<2||c.length>220&&a.confidence<.8)return!1;let d=`${a.fieldId||""} ${a.fieldName||""} ${a.key}`.toLowerCase();return!!(d.includes(b.id.toLowerCase())||d.includes(b.name.toLowerCase()))&&("project_basic_fact"===a.roleId||a.roleId?.startsWith("role-")||a.sourceRef?.filePath?a.confidence>=.55:a.confidence>=.75)})(a,b))).length/d.length<.9}([...cd,...ca,...cb,...cc],z,Y)){let b=J(av,{maxItems:48,maxChars:45e3,preservePinned:!0});try{cg=await bm(b,ak,z,Y,a.signal)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fact extraction failed:",b)}}(0,aG.Te)(a.signal);let ch=function(a,b){let c=b.find(a=>a.filePath)?.filePath||"";return c?a.map(a=>a.sourceFile?a:{...a,sourceFile:c,sourceRef:{filePath:c,roleId:a.sourceRef?.roleId||a.roleId,processingType:a.sourceRef?.processingType||a.processingType,sectionTitle:a.sourceRef?.sectionTitle,chunkIndex:a.sourceRef?.chunkIndex,cellRange:a.sourceRef?.cellRange}}):a}([...cd,...ca,...cb,...cc,...cg.facts],av);for(let a of(bK(N,b7.stage),cg.stages))bK(N,a);F();let ci=bk(av),cj=av.filter(a=>"pinned-evidence"===a.source).length,cl=av.filter(a=>"pinned-evidence"!==a.source&&"bound-file"!==a.source).length,cv=bJ({type:"reference",roleId:"quality-enhancement",status:av.length>0?"success":"skipped",message:`增强贡献:知识库证据 ${av.length} 条,人工确认/固定证据 ${cj} 条,自动检索证据 ${cl} 条`},{subtitle:"证据与上下文增强"});for(let a of(N.push(cv),F(),ch))b9[a.key]=`${(0,aG.lG)(a.value)}(来源:${a.sourceFile},角色:${a.roleId})`;let cw=new Map;for(let a of av)cw.set(a.filePath,(cw.get(a.filePath)??0)+1);let cx=new Map;for(let a of av)cx.set(a.source||"unknown",(cx.get(a.source||"unknown")??0)+1);let cy=[...cw.entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),cz=bD(ch,ci,aA,Y,Z),cA=C.map(a=>{let b=Y.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=(b?.requiredFactIds||[]).map(a=>Y.factFields.find(b=>b.id===a)?.name).filter(Boolean),d=[...new Set([...a.missingFacts||[],...c].filter(Boolean))],e=d.filter(b=>!a.missingFacts.includes(b)),f=d.filter(b=>a.missingFacts.includes(b)),g=+(a.evidence.length>0),h=d.length?e.length/d.length:1;return{chapterId:a.id,title:a.title,requiredFacts:d,coveredFacts:e,missingFacts:f,evidenceCount:a.evidence.length,readinessRate:Math.min(1,.7*h+.3*g)}}),cB=function(a,b=[],c){let e=[],f=[];for(let b of a)0===b.evidence.length&&e.push(`${b.title} 未检索到资料证据`),b.content.length<80&&e.push(`${b.title} 内容较短,建议人工补充或重新生成`);c&&a.length<c.chapters.length&&f.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===(0,d.zY)(c).length&&f.push("模板未绑定任何提示词");let g=new Set(b.map(a=>a.roleId));return c?.fileBindings?.some(a=>"rule"===a.roleId)&&!g.has("rule")&&e.push("rule 角色未抽取到结构化事实"),{passed:0===f.length,warnings:e,errors:f}}(C,ch,z);cB.warnings=[...cB.warnings,..._.warnings],cB.errors=[...cB.errors,..._.blockingIssues];let cC=aZ.flatMap(a=>a.warnings.map(a=>({level:/结构化事实读取不足|结构化章节读取不足|兜底|片段/u.test(a)?"info":"warning",message:a,suggestion:"这是资料抽取诊断,不代表已抽取到的可靠参数不可用;生成时仍应优先使用绑定资料中的可靠参数。"}))).filter(a=>!de(a)),cD=aM(function(a,b,c){let d=[...a.errors.map(a=>({level:"error",message:a,suggestion:"请补充配置或资料后重新生成。"})),...a.warnings.map(a=>({level:"warning",message:a,suggestion:"建议人工确认或补充对应资料。"}))];return c.some(a=>/资料未提供|系统暂未从知识库确认/u.test(a.content))&&d.push({level:"warning",message:"存在系统暂未从知识库确认的章节内容",suggestion:"请检查项目角色配置、文件绑定顺序和事实抽取落位结果。"}),b.conflicts.length>0&&d.push(...b.conflicts.map(a=>({level:"warning",message:a,suggestion:"请根据当前模板绑定的角色、文件证据和用户要求复核取值口径。"}))),d}(cB,cz,C),function(a){let b=[];for(let c of a)0===c.evidenceCount?b.push({level:"error",message:`章节缺少证据:${c.title}`,suggestion:"请补充对应绑定材料或调整模板章节检索词。"}):c.readinessRate<.5&&b.push({level:"warning",message:`章节事实覆盖率较低:${c.title} ${Math.round(100*c.readinessRate)}%`,suggestion:"建议补充章节 requiredFacts 或绑定材料证据。"});return b}(cA),cC),cE=bW(aZ,z),cF=Date.now(),cH=(0,aD.V7)(C.map(a=>a.content).join("\n\n"));bK(N,bJ({type:"validation",roleId:"document-budget",status:"running",message:`正在进行全文预算校准:当前 ${cH} 字`,details:[`章节数:${C.length}`,`目标:${bE.targetChars||bE.targetPages||"按章节深度"}`],progress:{current:1,total:2,label:"预算校准"}},{subtitle:"文档预算"})),F(C);let cI=bF.enableDocumentBudgetExpansion?await I(()=>cS({template:z,chapters:C,budget:bE,promptTexts:ai,requirement:a.requirement,forbidDrawingImages:cE,signal:a.signal,onRoundProgress:(a,b)=>{C.splice(0,C.length,...a),bK(N,bJ({type:"validation",roleId:"document-budget",status:"running",message:`正在进行全文预算校准:第 ${b.round}/${b.maxRounds} 轮,当前 ${b.totalChars} 字,新增 ${b.addedChars} 字`,details:[`章节数:${a.length}`,`目标:${bE.targetChars||bE.targetPages||"按章节深度"}`],progress:{current:Math.min(b.round+1,b.maxRounds),total:b.maxRounds+1,label:"预算校准"}},{subtitle:"文档预算"})),F(C)}})):C;C.splice(0,C.length,...cI);let cM=C.map(a=>a.content).join("\n\n"),cN=dn(C,ch,cM);cN.patchedCount>0&&(C.splice(0,C.length,...cN.chapters),cD=[...cD,{level:"info",message:`已自动补写未落位事实 ${cN.patchedCount} 项`,suggestion:"补写仅使用本项目资料明确事实,未补写商务敏感信息或系统暂未确认内容。"}]);let cO=(0,aD.fW)(bE,C.map(a=>a.content).join("\n\n")),cP=[bE.targetChars?`目标 ${bE.targetChars} 字${bE.minChars||bE.maxChars?`(区间 ${bE.minChars||0}-${bE.maxChars||"∞"} 字)`:""}`:void 0,bE.targetPages?`目标 ${bE.targetPages} 页${bE.minPages||bE.maxPages?`(区间 ${bE.minPages||0}-${bE.maxPages||"∞"} 页)`:""}`:void 0].filter(Boolean).join(" / ")||"默认章节深度";bK(N,bJ({type:"validation",roleId:"document-budget",status:bE.maxChars&&cO.currentChars>bE.maxChars||bE.minChars&&cO.currentChars<bE.minChars?"fallback":"success",message:bL(`文档预算:当前 ${cO.currentChars} 字,新增 ${Math.max(0,cO.currentChars-cH)} 字,预计 ${cO.estimatedPages} 页;${cP}`,cF)},{subtitle:"文档预算"})),F(C);let cY=aH.filter(a=>"chapter_generation"===a.type&&"fallback"===a.status).length,c_=Math.max(0,bh.length-C.length),c1=[...cY>0?[{level:"info",message:`章节生成存在补充完善:${cY} 章`,suggestion:"已保留章节成果;如需更高质量可复核对应章节,但不阻断导出。"}]:[],...c_>0?[{level:"error",message:`部分章节生成失败:${c_} 章`,suggestion:aF.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。"}]:[]],c2=C.flatMap(a=>{let b=bh.find(b=>b.id===a.id);if(!b)return[];let c=cG({chapter:b,content:a.content,evidence:a.evidence||[]});return c.length>0?[{level:"warning",message:`${(0,Q.GQ)(a.title)} 小节知识库事实或量化参数落位可继续优化:${c.slice(0,5).join(";")}`,suggestion:"建议扩大本地知识库检索并定向补写对应小节,优先使用清单、图纸、招标要求中的原始事实、规格、数量、标准和工期参数。"}]:[]}),c3=(cD=aM(cD,c1,c2)).filter(a=>"error"===a.level&&(0,aE.Nz)(a)).length,c4=[...N];bK(c4,bJ({type:"reference",roleId:"knowledge-usage-report",status:"success",message:`资料使用报告:证据 ${av.length} 条,来源文件 ${cy.length} 份,结构化事实 ${ch.length} 条`,details:[`证据类型:${[...cx.entries()].map(([a,b])=>`${a} ${b}`).join(",")||"无"}`,`索引健康:可用切片 ${as.usableChunkCount} 条,待索引 ${as.pendingJobs} 个,向量 ${as.vectorStatus?.status||"unknown"}`,cN.patchedCount>0?`自动补写事实:${cN.patchedCount}/${cN.missingCount}`:`事实落位补写:0/${cN.missingCount}`]},{subtitle:"资料使用报告"})),bK(c4,bJ({type:"reference",roleId:"web-research-report",status:ax.enabled?"success":"skipped",message:ax.enabled?`联网增强:检索章节 ${new Set(ax.chapters).size} 个,查询 ${ax.queries.length} 个,使用公开资料 ${ax.evidenceCount} 条`:"联网增强未开启",details:ax.enabled?[`检索主题:${[...new Set(ax.queries)].join(";")||"无"}`,`过滤结果:${ax.filteredCount} 条`,"公开资料仅用于通用规范、政策、工艺和措施补充,不作为项目事实来源"]:["可在模型配置中开启联网增强"]},{subtitle:"联网增强报告"})),bK(c4,bJ({type:"validation",roleId:"document-workflow",status:c3>0?"failed":"success",message:`阻断 ${c3},错误 ${cB.errors.length},警告 ${cB.warnings.length}`},{subtitle:"最终规范校验"})),bK(c4,bJ({type:"formatting",roleId:"document-workflow",status:"success",message:"已生成正式排版 Markdown"})),bK(c4,bJ({type:"export_ready",roleId:"document-workflow",status:c3>0?"failed":"success",message:c3>0?"导出门禁未通过,请完成阻断问题修复后再导出":"已准备好导出 Markdown/HTML/DOCX/PDF"}));let c5={templateId:z.id,templateName:z.name,title:z.outputTitle,requirement:a.requirement||"",projectRoot:v,projectId:w,exportSettings:z.exportSettings,generationSettings:z.generationSettings,facts:b9,structuredFacts:ch,factsModel:cz,chapters:C,sources:cy,missingItems:[...new Set(aA)],validation:cB,validationIssues:cD,executionStages:c4,exportGate:{passed:0===c3,blockingIssues:cD.filter(a=>"error"===a.level&&(0,aE.Nz)(a)),checklist:[]},assets:[],partialChapters:C.map(a=>({id:a.id,title:a.title,chars:(0,aD.V7)(a.content),status:cW(a,bE.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:C,generatedAt:Date.now()},c6=aC(c5,{forbidDrawingImages:cE,promptRules:ag});if("1"!==process.env.DOCUMENT_ENABLE_POST_EXPORT_REVIEW){let b=aB(c6,C,{forbidDrawingImages:cE,promptRules:ag}).chapters.map(a=>{let b=bh.find(b=>b.id===a.id)||a;return{...a,content:dh(a.content,b)}}),c="",d=(a,b)=>aM(cD.filter(a=>!de(a)&&"error"!==a.level&&!/目录与正文不一致|表格分隔线位置不规范|正文存在过长段落|正文存在非正式章二级标题|正文残留资料页码|小节只有标题或表格无正文/u.test(a.message)),x({markdown:a,spec:Y,summary:W}),B({markdown:a,facts:ch,summary:W,profile:Z}),y(a,W),dc(a,ch),a2({markdown:a,chapters:b,factsModel:cz,template:z,promptBindings:P,promptDocumentRules:ag}),(0,aD.PE)(z.generationSettings||z.exportSettings,a).filter(a=>!(bE.minPages&&/低于目标页数/u.test(a.message))),(0,aD.ty)(bE,a)),e=[],f=()=>{var a;e=aN(d(c=db(c0(dd(aB(aC({...c5,chapters:b},{forbidDrawingImages:cE,promptRules:ag}),b,{forbidDrawingImages:cE,promptRules:ag}).markdown),ch),ch),b)),e=aN(d(c=dg(c,e).replace(/^##\s+(.+)$/gmu,(a,b)=>{let c=String(b||"").trim();return"目录"===c||/^第[一二三四五六七八九十百千万\d]+章\s+/u.test(c)?a:`### ${c}`}),b)),a=c,e=aN(d(c=e.some(a=>/小节内容补写未完成|小节只有标题或表格无正文|空小节/u.test(a.message))?`${a.trim()}
|
|
200
206
|
|
|
201
207
|
**小节执行说明补充**
|
|
202
208
|
|