@customize-agent/server 4.1.45 → 4.2.0
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 +21 -21
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/5284.js +25 -22
- package/.next/server/chunks/8204.js +1 -1
- package/.next/server/chunks/8325.js +153 -0
- package/.next/server/chunks/8661.js +3 -3
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/api/assets/generated/preview.js +1 -1
- package/.next/server/pages/api/assets/generated/preview.js.nft.json +1 -1
- package/.next/server/pages/api/assets/generated.js +1 -1
- package/.next/server/pages/api/assets/generated.js.nft.json +1 -1
- package/.next/server/pages/api/documents/chapter/regenerate.js +1 -1
- package/.next/server/pages/api/documents/chapter/regenerate.js.nft.json +1 -1
- package/.next/server/pages/api/documents/export.js +2 -2
- package/.next/server/pages/api/documents/export.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generate.js +2 -2
- package/.next/server/pages/api/documents/generate.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id].js +2 -2
- package/.next/server/pages/api/documents/generated/[id].js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated.js +1 -1
- package/.next/server/pages/api/documents/generated.js.nft.json +1 -1
- package/.next/server/pages/api/documents/templates.js +1 -1
- package/.next/server/pages/api/documents/templates.js.nft.json +1 -1
- package/.next/server/pages/api/jobs/[id].js +2 -2
- package/.next/server/pages/api/jobs.js +2 -2
- package/.next/server/pages/api/kb/files/reindex.js +1 -1
- package/.next/server/pages/api/kb/files.js +2 -2
- package/.next/server/pages/api/kb/operations.js +2 -2
- package/.next/server/pages/api/kb/reindex.js +1 -1
- package/.next/server/pages/api/kb/upload/complete.js +1 -5
- package/.next/server/pages/api/kb/upload/complete.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload/progress.js +3 -2
- package/.next/server/pages/api/kb/upload.js +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 +27 -27
- package/.next/static/{nlZPrjR74ZeIc_w3yxatL → TqFYzwhnh14RaAWPjaZum}/_buildManifest.js +1 -1
- package/.next/static/chunks/{289-12dfcb3abec1c4b4.js → 289-35ac595388bbd018.js} +1 -1
- package/.next/static/chunks/563-b12f299d34bb9e44.js +1 -0
- package/.next/static/chunks/788-3afeb069ed706ac0.js +1 -0
- package/.next/static/chunks/pages/{_app-01a59698bc68d8ca.js → _app-1511aa64f9299003.js} +1 -1
- package/.next/static/chunks/pages/documents-a2ccb31a69a78d98.js +1 -0
- package/.next/static/chunks/pages/knowledge/files-0d9a0d407b38a0a3.js +1 -0
- package/.next/static/chunks/pages/knowledge/manage-a00bb7fc6a76f820.js +1 -0
- package/.next/static/chunks/pages/prompt-224af05519ef8304.js +1 -0
- package/.next/static/chunks/pages/system/logs-6f45ef8d862759a2.js +1 -0
- package/package.json +2 -2
- package/scripts/kb-index-worker.cjs +5 -1
- package/.next/server/chunks/1985.js +0 -134
- package/.next/static/chunks/563-2b116a2500a97dba.js +0 -1
- package/.next/static/chunks/788-961761f5858f9189.js +0 -1
- package/.next/static/chunks/pages/documents-4d295412f0371924.js +0 -1
- package/.next/static/chunks/pages/knowledge/files-dcc806117e92dc9d.js +0 -1
- package/.next/static/chunks/pages/knowledge/manage-ca9bafc8b0f4a76b.js +0 -1
- package/.next/static/chunks/pages/prompt-200241126dbfb31a.js +0 -1
- package/.next/static/chunks/pages/system/logs-c5a8920c6506a7e8.js +0 -1
- /package/.next/static/{nlZPrjR74ZeIc_w3yxatL → TqFYzwhnh14RaAWPjaZum}/_ssgManifest.js +0 -0
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=1985,exports.ids=[1985],exports.modules={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]}},23760:(a,b,c)=>{c.d(b,{AC:()=>n,Ai:()=>q,BV:()=>t,Ff:()=>l,Fv:()=>B,K1:()=>z,M$:()=>W,N1:()=>Q,NS:()=>C,S2:()=>R,ST:()=>M,Ty:()=>u,bM:()=>T,f8:()=>x,gN:()=>v,i0:()=>O,iC:()=>s,ji:()=>P,k0:()=>A,kQ:()=>V,mR:()=>U,qK:()=>H,qm:()=>K,vY:()=>N,xX:()=>L,yd:()=>S,yw:()=>G});var d=c(8753),e=c(74329),f=c(78217),g=c(11248),h=c(70208),i=c(91977),j=c(52511),k=c(22157);function l(a){let b={blocking:0,important:0,minor:0};for(let c of a)b[function(a){let b="string"==typeof a?a:a.message;if("error"===("string"==typeof a?void 0:a.level))return"blocking";for(let a of e.gr)if(a.pattern.test(b))return a.severity;return"minor"}(c)]+=1;return b}function m(a,b){let c=a.replace(/[\][()`*_>#|{},。、“”‘’:;!?,.!?:;-]+/gu," ").replace(e.ug," ").trim();if(c.length<120)return;let d=c.match(/[A-Za-z][A-Za-z-]{2,}|[\p{Script=Han}]{2,}/gu)||[];if(d.length<30)return;let f=1,g=new Map;for(let a=0;a<d.length;a+=1){let c=d[a].toLowerCase();if(g.set(c,(g.get(c)||0)+1),a>0&&c===d[a-1].toLowerCase()?f+=1:f=1,f>=12)return{level:"error",message:`${b} 存在重复 token 退化输出`,suggestion:"请重新生成该小节,禁止保留连续重复的英文单词或无意义片段。"}}let h=[...g.entries()].sort((a,b)=>b[1]-a[1])[0];if(h&&h[1]>=25&&h[1]/d.length>=.42)return{level:"error",message:`${b} 存在重复 token 退化输出`,suggestion:`检测到“${h[0]}”异常高频重复,请重新生成该小节。`}}function n(a,b=[]){let c=[],d=m(a,"全文");for(let a of(d&&c.push(d),b)){let b=m(a.content,`章节“${a.title}”`);for(let d of(b&&c.push(b),a.sections||[])){let b=d.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=a.content.match(RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${b}\\s*\\n([\\s\\S]*?)(?=^#{3,4}\\s+|^##\\s+|$)`,"mu"));if(!e)continue;let f=m(e[1],`小节“${d}”`);f&&c.push(f)}}return c}function o(a){return a.severity&&a.repairability?a:/小节只有标题|空小节|小节内容补写未完成/u.test(a.message)?{...a,severity:"blocker",repairability:"local_deterministic",category:"structure",owner:"system"}:/不得出现|提示词要求|疑似提示词指令标题|项目污染|生成未完成/u.test(a.message)?{...a,severity:"blocker",repairability:"llm_repairable",category:"structure",owner:"system"}:/事实一致性冲突|projectFactOnly|核心事实/u.test(a.message)?{...a,severity:"error"===a.level?"blocker":"warning",repairability:"manual_review",category:"fact_consistency",owner:"user"}:/证据使用覆盖率偏低|BOQ|落位|高分模块|专业链|闭环/u.test(a.message)?{...a,severity:"warning",repairability:"not_repair_needed",category:"evidence_coverage",owner:"system"}:"error"===a.level?{...a,severity:"blocker",repairability:"llm_repairable",category:"structure",owner:"system"}:"warning"===a.level?{...a,severity:"warning",repairability:"not_repair_needed",category:"style",owner:"system"}:{...a,severity:"suggestion",repairability:"not_repair_needed",category:"style",owner:"system"}}function p(a){let b=o(a);return"blocker"===b.severity&&(!!("error"===b.level&&"blocker"===b.severity&&/placeholder|source|style|format|structure/u.test(String(b.category||""))||/提示词要求|疑似提示词指令标题|适用性自相矛盾|不得出现/u.test(a.message))||!/目录与正文/u.test(a.message)&&(/配置要求缺少必要内容/u.test(a.message)?"error"===a.level:!/正文缺少规划小节|缺少规划小节/u.test(a.message)&&(!!/小节内容补写未完成|空小节|小节只有标题|生成未完成/u.test(a.message)||!/生成后事实反查失败/u.test(a.message)&&(!!/项目特点、重点、难点分析 正文不足|项目主要施工内容 正文不足/u.test(a.message)||!(/规划小节正文过短|小节生成未达标/u.test(a.message)||/事实一致性冲突:项目名称/u.test(a.message))&&(/跨章一致性|专业评分不足|专业缺口|泛化套话|缺少关键线路|缺少材料验收|缺少风险识别|缺少进场/u.test(a.message)?"error"===a.level&&!/证据使用覆盖率偏低|章节逻辑依赖不足|文档交付评分报告/u.test(a.message):!(!e.hc.test(a.message)||/章节审查|最终质量审查|正文篇幅明显低于目标|正文存在空泛占位表达|结构化事实读取不足|正文可能未显式覆盖|仅包含文件类型和占位符|不在本次招标范围内/u.test(a.message)))))))}function q(a,b,c){let d=[{key:"no_errors",label:"无阻断级校验错误",passed:!a.some(a=>"error"===a.level&&p(a))},{key:"basic_facts",label:"基础事实齐全",passed:b.project.length>0},{key:"source_traceability",label:"事实具备来源追踪",passed:[...b.project,...b.schedule,...b.quality,...b.safety].every(a=>!!a.sourceFile)},{key:"structured_precision",label:"结构化精确参数已使用",passed:b.preciseFacts.length<e.mu||a.every(a=>"error"!==a.level||!e.Ab.test(a.message))},{key:"chapter_evidence",label:"章节均具备证据",passed:c.every(a=>a.evidence.length>0)},{key:"no_missing_content",label:"无资料未提供章节",passed:c.every(a=>!a.content.includes("资料未提供"))},{key:"no_project_contamination",label:"无项目污染和事实一致性阻断",passed:!a.some(a=>"error"===a.level&&e.Uv.test(a.message)&&p(a))}],f=a.map(o).filter(a=>"error"===a.level&&p(a));return{passed:0===f.length,blockingIssues:f,checklist:d}}function r(a){let b=[],c=a.split(e.A5);for(let a=0;a<c.length;a+=1){if(!e.w7.test(c[a]))continue;let d=[];for(;a<c.length&&e.w7.test(c[a]);)d.push(c[a]),a+=1;a-=1,d.some(a=>e.N3.test(a))&&b.push(d.join("\n"))}return b}function s(a){let b=[...a.matchAll(e.DB)],c=[];for(let d=1;d<b.length;d+=1){let f=b[d].index||0,g=b[d+1]?.index??a.length,h=a.slice(f,g);e.Ks.test(h)&&c.push({level:"warning",message:`第 ${d+1} 章可能重复出现基础信息`,suggestion:"如该信息与本章主题无关,建议合并到更合适的概况类章节,避免重复铺陈。"})}if(0===b.length)return c;let d=b[0].index||0,f=b[1]?.index??a.length,g=a.slice(d,f),h=g.search(e.jM);if(h<=0)return c;let i=g.slice(0,h).replace(e.Dc,""),j=[];for(let a of e.Y8)RegExp(`${a}\\s*[::]`,"u").test(i)&&j.push(a);return j.length>=3&&c.push({level:"warning",message:`基础信息表前重复叙述字段:${j.join("、")}`,suggestion:"基础信息已表格化时,表格前只保留一句引导语,不要重复逐项叙述名称、编号、范围、周期、质量等字段。"}),c}function t(a){let b=[],c=[];for(let b of e.ZH)a.includes(b)&&c.push(b);c.length>0&&b.push({level:"warning",message:`存在模板化前缀或套话:${c.join("、")}`,suggestion:"请删除“本节/本章将/以下从”等前缀,标题后直接进入对象、动作、措施、检查和闭环。"});let d=a.match(/OCR|提示词|绑定片段|后台|文件路径|识别错误|知识库证据|知识库已确认事实|通用兜底段落|兜底占位|兜底模板/giu);return d?.length&&b.push({level:"warning",message:`正文包含后台或资料处理话术:${[...new Set(d)].join("、")}`,suggestion:"建议改为正式文档语言,例如“资料文字不清”“资料口径不一致”“项目资料”,不得暴露后台处理过程。"}),b}function u(a){let b=[];for(let c of a){let a=(c.sections||[]).filter(Boolean),d=a.filter((b,c)=>a.indexOf(b)!==c);d.length>0&&b.push({level:"warning",message:`${c.title} 存在重复小节:${[...new Set(d)].join("、")}`,suggestion:"请保留用户需求、模板或显式大纲中真实需要的小节,删除重复项。"});let e=new Map;for(let b of a){let a=/劳动力|人员|工种/u.test(b)?"劳动力计划":/机械|设备|机具/u.test(b)?"机械设备计划":/材料|物资/u.test(b)?"材料物资计划":/冬季|雨季|高温|台风|大风/u.test(b)?"特殊气候措施":"";a&&e.set(a,[...e.get(a)||[],b])}for(let[a,d]of e)d.length>1&&b.push({level:"warning",message:`${c.title} 存在重复主题小节:${a}(${d.join("、")})`,suggestion:"请合并同类小节,只保留一个主表或主方案,其他位置采用引用或执行说明。"})}return b}function v(a){let b=e.HX.exec(a);if(!b)return[{level:"error",message:"缺少目录页",suggestion:"请在封面后生成“## 目录”,并按一级章父级、二级小节子级组织。"}];let c=0,d=0;for(let a of b[1].split(e.A5))e.ZT.test(a)&&e.EB.test(a)&&(c+=1,e.sr.test(a)&&(d+=1));return c>0&&0===d?[{level:"error",message:"目录二级小节未作为子级缩进",suggestion:"目录应为父子级导航:一级章单独成行,二级小节至少缩进两个空格列在所属章下方。"}]:[]}function w(a){return a.replace(/^#+\s*/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").replace(/^\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/[()]/gu,a=>"("===a?"(":")").replace(/[\s::.。;;,,、]+$/gu,"").replace(/的(?=保障体系|管理体系|控制体系|措施|方案|计划|要求)/gu,"").replace(/[\s()()::.。;;,,、-]/gu,"").trim()}function x(a){let b=function(a){let b=e.HX.exec(a);return b?b[1].split(e.A5).map(a=>/^\s*\d+\.\d+\s+(.+)$/u.exec(a.trim())).filter(a=>!!a).map(a=>w(a[1]||"")).filter(Boolean):[]}(a),c=[...a.matchAll(/^#{2,4}\s+(\d+\.\d+\s+.+)$/gmu)].map(a=>w(a[1]||"")).filter(Boolean);if(0===b.length||0===c.length)return[];let d=new Set(c),f=new Set(b),g=b.filter(a=>!d.has(a)),h=c.filter(a=>!f.has(a)),i=[];return g.length>0&&i.push({level:"warning",message:`目录与正文不一致,目录小节未在正文中找到:${[...new Set(g)].join("、")}`,suggestion:"建议以最终清洗后的正文二级标题为准重新生成目录。"}),h.length>0&&i.push({level:"warning",message:`目录与正文不一致,正文小节未进入目录:${[...new Set(h)].join("、")}`,suggestion:"建议重新生成目录,确保只收录正文二级小节,不收录三级小节。"}),i}function y(a){let b=a.replace(/^#{1,6}\s+/u,"").replace(/^\s*\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").trim(),c=(0,h.GQ)(b),d=/^(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用).*|(?:如|若|如果)(?:涉及|不涉及|适用|不适用).*|.*(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成).*|.*(?:按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|注意事项))\s*$/u;return d.test(b)||d.test(c)}function z(a){let b=[...a.matchAll(/^#{2,6}\s+(.+)$/gmu)].map(a=>(0,h.GQ)(a[1]||"")).filter(y);return b.length>0?[{level:"error",message:`正文存在疑似提示词指令标题:${[...new Set(b)].slice(0,8).join("、")}`,suggestion:"请删除或改写为正式施工组织设计小节标题,目录也不得收录该类标题。"}]:[]}function A(a){let b=[],c=a.split(e.A5).map(a=>a.trim()).filter(a=>a&&!/^#{1,6}\s+/u.test(a)&&!/^\s*\|/u.test(a)&&!/^<div\b/iu.test(a)),d=c.find(a=>w(a).length<=1);d&&b.push({level:"warning",message:`正文存在孤立字或残缺段落:${d}`,suggestion:"请删除残缺行或重新生成所在小节。"});let f=c.find(a=>/[,、;:和与在为对将]$/u.test(a)||/(通过|包括|如下|主要包括)$/u.test(a));f&&b.push({level:"warning",message:`正文存在疑似截断句:${f}`,suggestion:"请补完整该段落,避免以连接词、逗号或冒号结尾。"});let g=c.find(a=>a.length>380);g&&b.push({level:"warning",message:`正文存在过长段落:${g}`,suggestion:"请拆分为多段或表格,改善导出版式和可读性。"});let h=c.find(a=>/\S.+(?:\s|[。;;])(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)\S.+(?:\s|[。;;])(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)\S/u.test(a)&&!/\b\d+\.\d+\s*(?:mm|cm|m|㎡|m2|kg|t|MPa|kPa|V|KV|kV|A)\b/iu.test(a));h&&b.push({level:"error",message:`正文存在列表项粘连同一行:${h.slice(0,120)}`,suggestion:"有序列表和无序列表必须逐项独占一行,确保 Markdown/PDF/DOCX 正确排版。"});let i=a.match(/(?:PDF\s*)?第\s*\d+\s*(?:[-—至到~~]\s*\d+)?\s*页|(?:图纸|清单|资料|文件|[\u4e00-\u9fa5A-Za-z0-9()()、·-]{2,24}(?:工程)?)\s*(?:[((]?\s*|(?:共|多达|约|合计)\s*)\d+\s*页|[\u4e00-\u9fa5A-Za-z0-9、及与和]{2,24}\s*(?:共|多达|约|合计)\s*\d+\s*页|\d+\s*页\s*(?:图纸|资料|文件|装饰|土建|加固|给排水|电气|智能化|消防)|\d+\s*页/iu)?.[0];i&&b.push({level:"error",message:`正文残留资料页码元信息:${i}`,suggestion:"正式投标正文应引用招标文件、施工图设计文件、工程量清单和相关专业图纸,不写 PDF 页码或资料页数。"});let j=c.find(a=>/仅作为内部事实提取依据|正式正文不得引用文件名|后台事实|内部事实/u.test(a));return j&&b.push({level:"error",message:`正文残留内部处理说明:${j.slice(0,120)}`,suggestion:"正式投标正文不得出现内部事实抽取、后台处理或文件名引用限制说明。"}),b}function B(a){let b=[],c=a.search(/^##\s+第[一二三四五六七八九十百千万\d]+章\s+/mu),d=[...(c>=0?a.slice(c):a.replace(/^##\s+目录[\s\S]*?(?=^##\s+第[一二三四五六七八九十百千万\d]+章\s+)/mu,"")).matchAll(/^##\s+(.+)$/gmu)].map(a=>(a[1]||"").trim()).filter(a=>"目录"!==a&&!/^第[一二三四五六七八九十百千万\d]+章\s+/u.test(a)).map(a=>(0,h.GQ)(a));d.length>0&&b.push({level:"error",message:`正文存在非正式章二级标题:${[...new Set(d)].slice(0,8).join("、")}`,suggestion:"正文 ## 只允许用于“第X章”正式章标题;章内小节必须使用 ### X.Y。"});let e=[...a.matchAll(/^##\s+(第[一二三四五六七八九十百千万\d]+章\s+.+)$/gmu)];for(let c=0;c<e.length;c+=1){let d=e[c].index||0,f=e[c+1]?.index??a.length,g=[...a.slice(d,f).matchAll(/^###\s+\d+\.\d+\s+(.+)$/gmu)].map(a=>(0,h.GQ)(a[1]||"")),i=(0,h.GQ)((e[c][1]||"").replace(/^第[一二三四五六七八九十百千万\d]+章\s*/u,""));1===g.length&&w(g[0])===w(i)&&b.push({level:"error",message:`章节只有一个且与章名同名的小节:${e[c][1]}`,suggestion:"应拆分为多个业务小节,不能用章标题重复作为唯一二级小节。"})}return b}function C(a){let b=[];/按审批确认执行/u.test(a)&&b.push({level:"error",message:"表格存在自动兜底污染内容:按审批确认执行",suggestion:"正式投标表格不得使用通用兜底短语,应保留真实业务内容或删除该行。"});let c=(a.match(/\|\s*信息项\s*\|\s*内容\s*\|/gu)||[]).length;c>1&&b.push({level:"error",message:`项目基础信息类表格重复:${c} 处`,suggestion:"项目名称、招标人、建设地点、工期、质量等基础信息只能集中输出一次。"});let d=a.match(/^\|\s*---\s*\|\s*---\s*\|\s*$/gmu)||[];for(let c of(d.length>20&&b.push({level:"error",message:`表格分隔线异常重复:${d.length} 行`,suggestion:"请修复表格规范化逻辑,禁止把数据行拆成多个碎表。"}),r(a))){let a=c.split(e.A5).filter(a=>e.w7.test(a));if(a.length<2)continue;if(!e.N3.test(a[1]||"")){b.push({level:"error",message:`表格分隔线位置不规范:${a[0]||""}`,suggestion:"Markdown 表格必须紧跟表头输出分隔线,例如 |---|---|,中间不得插入正文或其他管道行。"});continue}let d=a.map(a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>a.trim())),f=d[0]||[],g=f.filter(a=>/^(?:列|字段|内容|备注)\d+$/u.test(a));g.length>0&&b.push({level:"error",message:`表格存在泛化表头:${g.join("、")}`,suggestion:"正式投标表格必须使用业务字段表头,不得出现“列5/字段1/内容2”等临时表头。"});let h=f.length;d.find((a,b)=>1!==b&&a.length!==h)&&b.push({level:"error",message:`表格列数不一致:${f.join("、")}`,suggestion:"请统一表头和数据行列数;不应通过自动填充兜底词修补表格。"})}return b}function D(a){return a.split(e.A5).filter(a=>!/^#{1,6}\s+/u.test(a.trim())).filter(a=>!/^\s*\|/u.test(a)).filter(a=>!/^\s*:?-{3,}:?/u.test(a)).filter(a=>!/^<\/?div\b/iu.test(a.trim())).join("\n").replace(/[|*_`<>-]/gu,"").replace(e.ug,"").length}function E(a){let b=[...a.matchAll(/^(#{3,4})\s+(.+)$/gmu)];return b.map((c,d)=>{let e=c[1].length,f=(c.index||0)+c[0].length,g=b.slice(d+1).find(a=>a[1].length<=e),h=g?.index??a.length,i=(c[2]||"").trim();return{rawTitle:i,title:w(i),level:e,body:a.slice(f,h)}}).filter(a=>a.title&&(3===a.level||4===a.level))}function F(a,b,c,d,f){let g=D(d),h=e.w7.test(d)&&d.split(e.A5).some(a=>e.N3.test(a)),i=D(d.split("\n").filter(a=>!e.w7.test(a)&&!e.N3.test(a)).join("\n").replace(/^#{1,6}\s+.+$/gmu,""));if(/\[WRITER_MISSING_SECTION\]|Writer 未完成/u.test(d))return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 小节内容补写未完成:${b}`};if(/【本小节生成未达标,需重新生成】/u.test(d))return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 小节生成未达标:${b}`};if((!/项目基本信息|基本信息|工程概况表|项目概况表/u.test(b)||!h&&!(g>=40))&&(!h||!(i<20))&&(!(g>=80)||!(i>=20))){if(0===g)return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 空小节:${b}`};if(g<180)return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"too_short",planned:f,message:`${a} ${f?"规划小节":"正文小节"}正文过短:${b}`}}}function G(a,b){let c=[],d=new Set;for(let e of b){let b=e.content?.trim()?e.content:a;for(let a of e.sections||[]){let f=w(a),g=function(a,b){let c=E(a).filter(a=>(function(a,b){let c=w(a),d=w(b);if(!c||!d)return!1;if(c===d||c.includes(d)||d.includes(c))return!0;let e=/项目概况|主要施工方案|新技术新材料|工程重点难点|重点难点|危大工程|保障体系|安全保障|工期|质量|安全生产|应急预案|资源|人材机|材料|机械|劳动力|进度|关键线路|交通疏导|成品保护|深化设计|验收/gu,f=new Set(c.match(e)||[]),g=new Set(d.match(e)||[]),h=[...f].filter(a=>g.has(a)).length;return h>=2||1===Math.min(f.size,g.size)&&1===h&&16>=Math.max(c.length,d.length)})(a.rawTitle,b));return c.length<=1?c[0]:c.map(a=>({item:a,gap:F("",b,a.level,a.body,!0),textLength:D(a.body)})).sort((a,b)=>{let c=a.gap&&"empty"===a.gap.reason?1:0,d=b.gap&&"empty"===b.gap.reason?1:0;return c!==d?c-d:b.textLength-a.textLength})[0]?.item}(b,a),h=`${e.title}|${f}|planned`;if(!g){c.push({chapterTitle:e.title,sectionTitle:a,level:3,bodyLength:0,reason:"missing_planned_section",planned:!0,message:`${e.title} 缺少规划小节:${a}`}),d.add(h);continue}let i=F(e.title,a,g.level,g.body,!0);i&&c.push(i),d.add(h)}for(let a of E(b)){let b=`${e.title}|${a.title}|actual`,f=`${e.title}|${a.title}|planned`;if(d.has(b)||d.has(f))continue;let g=F(e.title,a.title,a.level,a.body,!1);g&&"empty"===g.reason&&c.push(g),d.add(b)}}return c}function H(a,b){return G(a,b).filter(a=>"empty"===a.reason||"missing_planned_section"===a.reason).map(a=>({level:"missing_planned_section"===a.reason?"warning":"error",message:a.message,suggestion:"missing_planned_section"===a.reason?"建议补充该规划小节或同步更新模板小节规划。":"必须补充与该小节相关的材料事实和必要内容,达到正文完整度要求。"}))}function I(a){return`${a.fieldName||a.key} ${(0,k.lG)(a.value)}`.replace(/\s+/gu," ").trim()}function J(a){let b=new Set;for(let c of[/\d+\s*日历天/gu,/(?:计划工期|合同工期|总工期|工期|施工周期)[^\n。;;]{0,12}\d+\s*天/gu,/(?:计划工期|合同工期|总工期|工期|施工周期)[^\n。;;]{0,12}\d+\s*(?:个月|月)/gu])for(let d of a.matchAll(c)){let a=d[0].match(/\d+\s*(?:日历天|天|个月|月)/u)?.[0]?.replace(/\s+/gu,"");a&&b.add(a)}return[...b]}function K(a,b){let c=[],d=b.schedule.map(I).find(a=>/\d+\s*(?:日历天|天|个月|月)|计划工期|合同工期/u.test(a)),e=b.quality.map(I).find(a=>/质量|合格|优良/u.test(a));if(d){let b=J(d)[0],e=J(a),f=b?e.filter(a=>a!==b&&/日历天/u.test(a)):[];b&&f.length>=2&&c.push({level:"warning",message:`跨章一致性冲突:正文出现与资料工期不一致的表述 ${f.slice(0,6).join("、")}`,suggestion:`请统一使用资料中的工期口径:${d}`})}return e&&!/质量标准|质量目标|合格|优良/u.test(a)&&c.push({level:"error",message:"跨章一致性缺口:正文未稳定体现资料中的质量目标",suggestion:`请在工程概况、质量保证和验收相关章节统一体现:${e}`}),c}function L(a){let b=[],c=/(?:三检制|三级教育|三级管理|5S|24\s*小时|每日|每周|每月|一次|两次)/gu;for(let d of a){let a=[...new Set(d.content.match(c)||[])];a.length>=3&&!/责任人|检查记录|整改|复查|验收|台账|交底|巡查|闭环/u.test(d.content)&&b.push({level:"warning",message:`${d.title} 管理措施数字较多但缺少执行闭环:${a.slice(0,8).join("、")}`,suggestion:"这些管理数字可以保留,但需要补充责任主体、检查频次、记录台账、整改复查和闭环要求。"})}return b}function M(a){let b=/(?:加强组织领导|严格执行规范|落实责任制度|确保工程质量|强化过程管理|提高思想认识|完善管理体系|形成闭环管理)/gu,c=[];for(let d of a)(d.content.match(b)||[]).length>=6&&!/材料|工序|验收|复验|节点|风险|交底|隐蔽|检验批|进场/u.test(d.content)&&c.push({level:"error",message:`${d.title} 存在较多未绑定项目事实和工序控制点的泛化套话`,suggestion:"请替换为结合资料事实、施工对象、工序控制、验收资料和整改闭环的专业内容。"});return c}function N(a,b){let c=[...b.project,...b.schedule,...b.quality,...b.safety,...b.resources,...b.preciseFacts,...b.bills,...b.drawings,...b.rules,...b.specifications].map(I).join("\n");if(80>(0,f.V7)(c))return[];let d=[],e=(0,g.K3)(c),h=[],i=[];for(let b of(0,g.zn)(a)){let c=(0,g.K3)(b),d=a.indexOf(b),f=d>=0?a.slice(Math.max(0,d-36),Math.min(a.length,d+b.length+36)):a,j=function(a,b){let c=`${a} ${b}`;return/三检制|三级|5S|24\s*小时|每日|每周|每月|一次|两次|责任制|制度/u.test(c)?"soft":/总工期|计划工期|合同工期|日历天/u.test(c)||/最高投标限价|招标控制价|合同估算价|投资估算|报价|金额|万元|元/u.test(c)||/(?:工程量|清单|建设规模|建筑面积|长度|材料|设备|规格|型号).{0,24}(?:m²|㎡|m3|m³|米|吨|套|台|个|项|%)/u.test(c)?"hard":/GB\s*\d|JGJ\s*\d|CJJ\s*\d|ISO\s*\d|GB\/T|CECS\s*\d|DL\s*\d|YB\s*\d|SH\s*\d|SJ\/T\s*\d|CJJ\/T\s*\d/u.test(c)?"soft":/标准|规范|编号/u.test(c)?"hard":"soft"}(b,f);"hard"!==j||e.includes(c)||h.push(b),"soft"!==j||e.includes(c)||i.push(b)}let j=[...new Set(h)],l=[...new Set(i)];return j.length>=2&&d.push({level:"warning",message:`生成后事实反查提示:正文出现资料事实主表中未找到的关键数字 ${j.slice(0,8).join("、")}`,suggestion:"建议复核这些数字是否来自管理制度、规范要求或资料事实;如无依据,改为定性管理要求。"}),l.length>=6&&d.push({level:"warning",message:`生成后事实反查提示:正文出现较多未在资料事实主表中反查到的管理数字 ${l.slice(0,10).join("、")}`,suggestion:"请确认这些管理数字属于通用制度、规范要求或项目资料事实;如无依据,建议改为定性管理要求。"}),/质量目标|质量标准/u.test(a)&&b.quality.length>0&&!b.quality.some(b=>a.includes((0,k.lG)(b.value).slice(0,18)))&&d.push({level:"warning",message:"生成后事实反查提示:正文质量目标表述未明显匹配质量事实主表",suggestion:"请使用资料中的质量目标原文或等价表述。"}),d}function O(a){let b=[];for(let d of a){var c;let a=d.content;if(800>(0,f.V7)(a))continue;let e=/资料|招标|清单|图纸|标准|范围|工期|质量|验收/u.test(a)?2:+!!/项目|工程|要求/u.test(a),g=/首先|其次|同时|最后|一是|二是|流程|步骤|阶段|组织顺序/u.test(a)?2:+!!/并且|同时|然后|因此/u.test(a),h=/控制点|关键线路|复验|隐蔽验收|风险|交底|检验批|整改|闭环/u.test(a)?2:+!!/措施|要求|管理|检查/u.test(a),i=/责任人|检查|记录|验收|整改|复查|进场|调配|应急/u.test(a)?2:+!!/落实|执行|安排|组织/u.test(a),j=/本项目|本工程|招标范围|工程量|建设地点|计划工期|质量目标/u.test(a)?2:+!!/项目|工程/u.test(a),k=/工期|质量|安全|资源|验收/u.test(a)?2:+!!/目标|要求/u.test(a),l={factuality:e,structure:g,depth:h,executable:i,specificity:j,consistency:k},m=e+g+h+i+j+k,n=(c=d.title,/概况|工程|项目/u.test(c)?{min:5,focus:"事实依据、项目特异性"}:/部署|总体|组织/u.test(c)?{min:6,focus:"组织结构、可执行闭环、跨章一致性"}:/进度|工期/u.test(c)?{min:6,focus:"进度结构、工期一致性、纠偏机制"}:/质量/u.test(c)?{min:6,focus:"质量深度、验收复验、资料闭环"}:/安全|文明|危大|风险/u.test(c)?{min:6,focus:"风险覆盖、应急响应、检查整改"}:/资源|材料|设备|劳动力/u.test(c)?{min:5,focus:"资源依据、进场调配、进度支撑"}:{min:4,focus:"事实依据、专业深度、可执行性"});if(m<n.min){let a=Object.entries(l).filter(([,a])=>a<1).map(([a])=>a).join("、")||n.focus;b.push({level:"error",message:`${d.title} 专业评分不足:${m}/12,薄弱维度:${a}`,suggestion:`请按章节任务卡补齐${n.focus},并写出资料依据、实施流程、专业控制点和检查整改闭环。`})}}return b}function P(a){let b=[{re:/进度|工期/u,need:/关键线路|穿插|纠偏|资源保障|节点|动态调整/u,message:"进度工期章节缺少关键线路、穿插施工或纠偏保障内容"},{re:/质量/u,need:/材料.*验收|复验|隐蔽验收|整改.*复验|质量.*资料|检验批/u,message:"质量章节缺少材料验收复验、隐蔽验收或整改复验闭环"},{re:/安全|文明|危大|风险/u,need:/风险|临电|消防|应急|检查.*整改|文明施工|人员|设备/u,message:"安全文明章节缺少风险识别、现场控制或应急检查闭环"},{re:/资源|材料|设备|劳动力/u,need:/进场|验收|调配|保管|供应|投入计划/u,message:"资源章节缺少进场、验收、调配或保管计划"},{re:/施工|工艺|技术|方案/u,need:/准备|流程|工艺|控制点|验收|交底/u,message:"施工技术章节缺少施工准备、工艺流程、控制点或验收要求"}],c=[];for(let d of a){let a=d.content;for(let e of b)e.re.test(d.title)&&(0,f.V7)(a)>=600&&!e.need.test(a)&&c.push({level:"error",message:`${d.title}:${e.message}`,suggestion:"请按专业任务卡定向补写该章节,补齐可实施的控制措施、资料依据和闭环要求。"})}return c}function Q(a,b){let c=[],d=a.replace(e.ug,""),f=function(a){let b=new Set;for(let c of a.preciseFacts){let a=`${c.processingType||""} ${c.roleId} ${c.sourceFile}`;if(!e.FM.test(a)&&"precise_fact"!==c.roleId)continue;let d=`${c.key} ${c.fieldName||""} ${c.value}`;for(let a of d.matchAll(e.No)){let c=a[0].trim();/万元|元|报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(`${c} ${d}`)||/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂|页码|目录/u.test(d)||/^\d+$/.test(c)&&10>Number(c)||b.add(c)}}return[...b]}(b),g=function(a,b){let c=0;for(let d of a)b.includes(d.replace(e.ug,""))&&(c+=1);return c}(f,d);return f.length>=e.mu&&g/f.length<e.tg&&c.push({level:"warning",message:`可靠精确参数使用不足:${g}/${f.length}`,suggestion:"请将资料中可靠的规格、参数、数量、时间、比例和标准编号写入对应章节;商务金额、单价、税率、预留金不得写入正文。"}),b.bills.length>0&&!e.pP.test(a)&&c.push({level:"error",message:"正文未体现结构化数据资料",suggestion:"请从表格、列表或明细中提取对象、单位、数量、规格和关键参数补入对应章节。"}),b.drawings.length>0&&!e._U.test(a)&&c.push({level:"error",message:"正文未体现设计/方案/说明类资料",suggestion:"请从设计、方案或说明资料中提取对象、流程、节点、做法、配置、规则和标准要求。"}),c}function R(a,b,c){let d=[],e=c.tables||[];if(0===e.length)return d;let f=a.replace(/\s+/gu,"").toLowerCase(),g=0,h=0,i=[];for(let a of e){let b=a.headers.map(a=>a.replace(/\s+/gu,"").toLowerCase()),c=b.findIndex(a=>/项目名称|^名称$|清单项|分部分项|项目特征/u.test(a)),d=b.findIndex(a=>/项目编码|编码|编号/u.test(a)),e=b.findIndex(a=>/^工程量$|^数量$/u.test(a));for(let b of a.rows){g+=1;let a=c>=0?(b[c]||"").replace(/\s+/gu,""):"",j=d>=0?(b[d]||"").replace(/\s+/gu,""):"",k=e>=0?(b[e]||"").replace(/\s+/gu,""):"",l=a.length>=3?a.slice(0,Math.min(a.length,16)):"",m=j.length>=3?j.slice(0,Math.min(j.length,12)):"",n=l&&f.includes(l),o=m&&f.includes(m);n||o?h+=1:a.length>=3&&i.push(`${a.slice(0,40)}${k?` ${k}`:""}(未落位)`)}}if(g>0){let a=h/g,b=i.length>0?`未落位项(共${i.length}项):${i.slice(0,12).join(";")}${i.length>12?` 及其他${i.length-12}项`:""}`:"";a<.3?d.push({level:"warning",message:`清单项落位严重不足:${h}/${g} 项(${Math.round(100*a)}%)`,suggestion:`清单明细数量较大,建议优先补充主要分部分项、关键规格和大额工程量。${b}`}):a<.6&&d.push({level:"warning",message:`清单项落位不足:${h}/${g} 项(${Math.round(100*a)}%)`,suggestion:`建议补充落位以下清单项:${b}`})}return d}function S(a,b){let c=[],d=b.drawings||[];if(0===d.length)return c;let e=a.replace(/\s+/gu,"").toLowerCase(),f=[...new Set(d.map(a=>a.sourceFile||"").filter(Boolean))],g=0,h=[];for(let a of f){let b=a.replace(/\.[^.]+$/u,"").replace(/[/\\]/gu,"").toLowerCase(),c=a.split("/").pop()||a;(b.length>=3?e.includes(b.slice(0,Math.min(b.length,12))):/图纸|设计|说明|节点|做法|构造/u.test(e))?g+=1:h.push(c)}if(f.length>0){let a=g/f.length;a<.25?c.push({level:"warning",message:`图纸引用严重不足:${g}/${f.length} 份图纸被正文引用(${Math.round(100*a)}%)`,suggestion:`建议将图纸中的设计说明、构造做法、材料规格和设备参数写入对应章节。未引用图纸:${h.slice(0,5).join("、")}`}):a<.5&&c.push({level:"warning",message:`图纸引用不足:${g}/${f.length} 份(${Math.round(100*a)}%)`,suggestion:`建议补充引用:${h.slice(0,5).join("、")}`})}return c}function T(a){let b=[];for(let c of(/【本小节生成未达标,需重新生成】/u.test(a)&&b.push({level:"error",message:"生成未完成:存在未达标小节,需要重新生成或补写后才能导出",suggestion:"请重新生成未达标小节,禁止将占位内容作为正式正文。"}),e.IA))c.test(a)&&b.push({level:"warning",message:`存在占位式表达:${c.source}`,suggestion:"请改写为来自资料的准确事实;资料确实未提供时,改写为正式管理措施,不留空值或“见资料/按文件”。"});return b}function U(a,b){let c=`${b.name} ${b.category} ${b.outputTitle} ${b.description}`,f=[];for(let a of(0,d.V)().autoSpecGates)(function(a,b){for(let c of b)try{if(RegExp(c,"iu").test(a))return!0}catch{if(a.includes(c))return!0}return!1})(c,a.templateMatchers)&&f.push(a);if(0===f.length)return[];let g=[],h=r(a).length,i=0;for(let b of f){for(let c of(i=Math.max(i,b.minTables||0),b.requiredTexts))a.includes(c)||g.push({level:"warning",message:`配置要求缺少必要内容:${c}`,suggestion:"请按当前模板匹配的专业规则补齐必要内容。"});for(let c of b.forbiddenTexts)a.includes(c)&&g.push({level:"error",message:`配置要求不得出现:${c}`,suggestion:"请根据当前模板匹配的专业规则清理正文污染内容。"})}return e.bu.test(a)&&g.push({level:"error",message:"正式正文存在 Markdown 标题符号 #",suggestion:"导出正文应去除 Markdown 标题符号,保留正式标题文字。"}),i&&h<i&&g.push({level:"warning",message:`配置要求正式表格不足:${h}/${i}`,suggestion:"如用户提示词或章节内容要求表格,应按项目资料补充对应表格本体。"}),g}function V(a,b,c,d,g,h,j){if(!a)return b;let k=[...b],l=function(a){let b=[...a.project,...a.schedule,...a.quality,...a.safety,...a.resources];for(let c of Object.values(a.schemaFacts))b.push(...c);return b}(c),m=function(a,b){let c=new Set;for(let a of b)c.add(a.key),a.fieldName&&c.add(a.fieldName);for(let b of a.tables){for(let a of b.headers)c.add(a);for(let a of b.rows)for(let b of a)c.add(b)}return c}(c,l),n=new Set(d.map(a=>a.title));for(let b of a.factFields){if(!b.required)continue;let a=c.schemaFacts[b.id]||[],e=!1,f=!b.sourceRoleIds?.length||a.some(a=>b.sourceRoleIds?.includes(a.roleId));for(let a of d){if(e&&f)break;for(let c of a.evidence)!e&&!a.missingFacts.includes(b.name)&&(0,i.I2)(c,b)&&(e=!0),!f&&(0,i.I2)(c,b)&&(f=!0)}0!==a.length||m.has(b.name)||e||k.push({level:"warning",message:`系统暂未从知识库确认必需事实:${b.name}`,suggestion:b.extractionHint||"请扩大本地知识库检索、执行事实补抽,或调整事实字段配置。"}),f||k.push({level:"warning",message:`必需事实来源角色不匹配:${b.name}`,suggestion:`请确认该事实来自角色:${b.sourceRoleIds?.join("、")}`})}for(let b of a.chapterRules){let a=d.find(a=>a.title===b.title);a&&b.minWords&&a.content.length<b.minWords&&k.push({level:"warning",message:`章节内容深度建议:${b.title}`,suggestion:`可扩展到约 ${b.minWords} 字,但不要改变模板章节结构。`})}let o=r(g),p=function(a){let b=[];for(let c of a.matchAll(e.gW))b.push({alt:c[1]||"",url:c[2]||"",index:c.index??0});return b}(g),q=(0,f.Cv)(g);for(let b of a.gateRules){let a=b.evaluator?b.evaluator:e.cA[b.type]?.(b)??{subject:"document",operator:"contains",value:b.value||b.target},f=a.target||b.target||"",i=a.value||b.value||f,r=d.find(a=>a.title===f),s=function(a){for(let c of e.Lp){let d=c(a);if(d){var b;return{level:a.rule.level,message:(b=a.rule,`${b.name}:${d}`)}}}}({rule:b,evaluator:a,target:f,value:i,min:a.min||Number(b.value)||1,markdown:g,textScope:"chapter"===a.subject&&r?r.content:g,regex:i?function(a){try{return RegExp(a,"iu")}catch{return}}(i):void 0,chapter:r,factNames:m,chapterTitles:n,tableBlocks:o,imageRefs:p,estimatedPages:q,allFacts:l,factsModel:c,projectBindings:h,promptBindings:j});s&&k.push(s)}return k}function W(a,b){let c=function(a){let b="";for(let c of(0,j.dU)(a))c.content&&(b+=`${c.content}
|
|
2
|
-
|
|
3
|
-
`);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[]}},78217:(a,b,c)=>{function d(a,b){return Math.ceil(e(a)/f(b))}function e(a){return a.replace(/<[^>]+>/gu,"").replace(/\s+/gu,"").length}function f(a){let b=Number(String(a&&"typography"in a&&a.typography?.bodySize||"").replace(/[^\d.]/gu,""))||14,c=Number(String(a&&"typography"in a&&a.typography?.lineHeight||"").replace(/[^\d.]/gu,""))||22;return b>=14&&c>=22?900:1050}function g(a){let b=a.trim();if(/^\d+(?:\.\d+)?$/u.test(b))return Number(b);let c={零:0,一:1,二:2,两:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};if("十"===b)return 10;let d=/^([一二两三四五六七八九])?十([一二三四五六七八九])?$/u.exec(b);if(d)return(d[1]?c[d[1]]:1)*10+(d[2]?c[d[2]]:0)}function h(a="",b=""){let c=`${a}${b}`;return/不少于|至少|不低于|以上|起码/u.test(c)?"minimum":/约|大概|左右|大约|约为|附近/u.test(c)?"approximate":"exact"}function i(a){let b=a.replace(/\s+/gu," "),c=[...b.matchAll(/(不少于|至少|不低于|约为|约|大概|大约|左右|生成|输出|达到|共)?\s*(\d+(?:\.\d+)?|[一二两三四五六七八九十]{1,3})\s*(?:页|頁)\s*(以上|左右|以内|以下)?/gu)],d=[...b.matchAll(/(不少于|至少|不低于|约为|约|大概|大约|左右|生成|输出|达到|共)?\s*(\d+(?:\.\d+)?|[一二两三四五六七八九十]{1,3})\s*(万)?\s*(?:字|字符)\s*(以上|左右|以内|以下)?/gu)],e=c.map(a=>{let b=g(a[2]||"");return Number.isFinite(b)?{value:b,mode:h(a[1],a[3])}:void 0}).filter(a=>!!a).at(-1),f=d.map(a=>{let b=g(a[2]||"");return b?{value:Math.round(b*(a[3]?1e4:1)),mode:h(a[1],a[4])}:void 0}).filter(a=>!!a).at(-1);return{targetPages:e?.value,pageMode:e?.mode,targetChars:f?.value,charMode:f?.mode}}function j(a){let b=a.title+a.purpose;return/方法|技术|质量|安全|进度|资源|保障|措施|部署|方案|流程|执行/u.test(b)?1.3:/概况|结语|附录/u.test(b)?.75:1}function k(a){let b=a.template.generationSettings||a.template.exportSettings,c=f(a.template.exportSettings||a.template.generationSettings),d=i(a.requirement||""),e=i(a.promptTexts||""),g=d.targetChars||d.targetPages?d:e,h=!!(g.targetChars||g.targetPages),k=h?void 0:b?.targetPages?.target||b?.targetPages?.min,l=g.targetPages?g.targetPages*c:void 0,m=g.targetPages||k,n=h?"explicit":k?"template":a.spec?.chapterRules.some(a=>a.minWords)||a.spec?.dynamicChapterRule.minWordsPerChapter?"spec":"default",o=h?Math.max(g.targetChars||0,l||0)||void 0:Math.max((k?k*c:void 0)||0)||void 0,p=g.pageMode||"exact",q=g.charMode||p,r=h&&"approximate"===q,s=h&&"minimum"===q,t=h?m?Math.floor(m*(s?1:.9)):void 0:b?.targetPages?.min||(m?Math.floor(.95*m):void 0),u=h&&m&&!s?Math.ceil(m*(r?1.15:1.08)):b?.targetPages?.max,v=o?Math.floor(o*(s?1:.9)):t?t*c:void 0,w=o&&!s?Math.ceil(o*(r?1.15:1.08)):u?u*c:void 0,x=a.chapters.length>0?a.chapters:a.template.chapters,y=x.reduce((a,b)=>a+j(b),0)||1,z=new Map,A=x.map(a=>({chapter:a,target:o?Math.round(o*j(a)/y):0})),B=x.reduce((b,c)=>b+Math.max(a.spec?.chapterRules.find(a=>a.id===c.id||a.title===c.title)?.minWords||0,a.spec?.dynamicChapterRule.minWordsPerChapter||0,o?Math.min(900,Math.max(450,Math.floor(o/Math.max(1,x.length)*.35))):1200),0),C=o&&B>.92*o?Math.max(.45,.92*o/B):1;for(let{chapter:b,target:c}of A){let d=Math.floor(Math.max(Math.max(a.spec?.chapterRules.find(a=>a.id===b.id||a.title===b.title)?.minWords||0,a.spec?.dynamicChapterRule.minWordsPerChapter||0),o?Math.min(900,Math.max(450,Math.floor(o/Math.max(1,x.length)*.35))):1200)*C);z.set(b.id,Math.max(d,c))}let D=!!(h&&(s||"exact"===q)&&(o||v||0)>=4e4);return{targetPages:m,minPages:t,maxPages:u,targetChars:o,minChars:v,maxChars:w,charsPerPage:c,chapterTargets:z,source:n,mode:q,longformStrict:D}}function l(a,b){let c=a?.targetPages;if(!c?.min&&!c?.target&&!c?.max)return[];let e=d(b,a),f=c.min||c.target,g=c.max||c.target,h=[];return f&&e<f&&h.push({level:"warning",message:`正文篇幅低于目标页数:预计约 ${e} 页,目标不少于 ${f} 页`,suggestion:"建议增加章节正文深度,或根据实际需求调整目标页数。"}),g&&e>g+4&&h.push({level:"warning",message:`正文篇幅可能超过目标页数:预计约 ${e} 页,目标不超过 ${g} 页`,suggestion:"建议检查是否存在重复段落或过度展开。"}),h}function m(a,b){let{currentChars:c,estimatedPages:d}=function(a,b){let c=e(b),d=Math.ceil(c/a.charsPerPage);return{currentChars:c,estimatedPages:d}}(a,b),f=[];return a.minChars&&c<a.minChars&&f.push({level:"warning",message:`正文篇幅低于目标字数:当前 ${c} 字,目标不少于 ${a.minChars} 字`,suggestion:"建议继续扩写缺口章节,或根据实际需求调整目标字数/页数。"}),a.maxChars&&c>Math.ceil(1.12*a.maxChars)?f.push({level:"error",message:`正文篇幅超过目标字数区间:当前 ${c} 字,建议不超过 ${a.maxChars} 字`,suggestion:"请压缩重复段落、过细小节或过度展开内容后再导出。"}):a.maxChars&&c>a.maxChars&&f.push({level:"warning",message:`正文篇幅超过目标字数区间:当前 ${c} 字,建议不超过 ${a.maxChars} 字`,suggestion:"建议减少重复段落、过细小节或过度展开内容。"}),a.minPages&&d<a.minPages&&f.push({level:"warning",message:`正文篇幅低于目标页数:预计约 ${d} 页,目标不少于 ${a.minPages} 页`,suggestion:"建议继续扩写正文,或根据实际导出版式调整目标页数。"}),a.maxPages&&d>a.maxPages&&f.push({level:"warning",message:`正文篇幅超过目标页数区间:预计约 ${d} 页,建议不超过 ${a.maxPages} 页`,suggestion:"建议压缩过度展开内容或调整目标页数。"}),f}c.d(b,{Cv:()=>d,PE:()=>l,V7:()=>e,tF:()=>k,ty:()=>m})},87942:(a,b,c)=>{c.d(b,{x:()=>d});let d={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"]}},91985:(a,b,c)=>{c.d(b,{h0x:()=>d.h0,bVF:()=>d.bV,OXS:()=>c0,QJx:()=>d.QJ,jGg:()=>d.jG,R1O:()=>c1,Bhi:()=>d.Bh,xmB:()=>d.xm});var d=c(52511),e=c(76760),f=c(19898),g=c(44533),h=c(29281),i=c(25840),j=c(6444),k=c(85441);let l={id:"default_general_document",name:"通用文档",factFields:[{id:"document_identity",name:"对象名称",aliases:["项目名称","工程名称","文档名称","任务名称","招标项目名称","建设项目名称"],category:"identity",cardinality:"single",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.75,minForValidation:.85,allowPathOnly:!1},conflictPolicy:"strict"},{id:"schedule_requirement",name:"周期要求",aliases:["计划工期","工期","周期要求","进度节点要求","开工日期","竣工日期"],category:"schedule",cardinality:"single",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.7,minForValidation:.8,allowPathOnly:!1},conflictPolicy:"strict"},{id:"quality_requirement",name:"质量要求",aliases:["质量要求","质量标准","验收要求","评价标准"],category:"quality",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.65,minForValidation:.75,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"safety_requirement",name:"安全合规要求",aliases:["安全要求","安全合规要求","风险控制要求","合规要求"],category:"safety",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.65,minForValidation:.75,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"technical_parameter",name:"技术参数",aliases:["技术参数","参数规格范围","规格","型号","尺寸","标准编号","材料设备"],category:"technical",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.7,minForValidation:.8,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"resource_plan",name:"资源配置",aliases:["劳动力","机械","检测设备","应急物资","资源配置","人员配置"],category:"resource",cardinality:"multiple",derivationPolicy:"plan_inferable",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.45,minForValidation:.55,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"commercial_data",name:"商务数据",aliases:["报价","单价","合价","综合单价","预留金","税率","金额","利润"],category:"commercial",cardinality:"multiple",derivationPolicy:"forbidden",usagePolicy:"do_not_use",confidencePolicy:{minForGeneration:1,minForValidation:1,allowPathOnly:!1},conflictPolicy:"ignore"},{id:"rule_requirement",name:"规则要求",aliases:["规则要求","变更说明","实施范围","对象范围","结构化数据范围"],category:"compliance",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.6,minForValidation:.7,allowPathOnly:!1},conflictPolicy:"allow_multiple"}],forbiddenValuePatterns:[/投标报价|报价明细|单价|合价|综合单价|预留金|暂列金额|税率|增值税|利润|结算/u],diagnosticValuePatterns:[/OCR|识别错误|乱码|无法确认|疑似|不确定|绑定片段|兜底|知识库|提示词|后台|文件路径|PDF|DWG|Excel/u],lowConfidenceValuePatterns:[/无法确认|疑似|不确定|需复核|文字模糊|语义断裂|识别错误|乱码/u]},m={...l,id:"construction_organization_design",name:"施工组织设计"};function n(a,b){return a.factFields.find(a=>a.name===b||a.aliases.some(a=>b.includes(a)||a.includes(b)))}function o(a,b){return a.forbiddenValuePatterns.some(a=>a.test(b))}function p(a,b){return a.diagnosticValuePatterns.some(a=>a.test(b))}function q(a,b){return a.lowConfidenceValuePatterns.some(a=>a.test(b))}var r=c(56942),s=c(70933),t=c(70208),u=c(91977),v=c(40299),w=c(78217),x=c(23760);let y={building:[{id:"building-methods",title:"房建工程专项施工工艺",aliases:["房建","基础主体","主体结构","二次结构","屋面防水","多塔吊"],category:"technical",level:"conditional",projectTypes:["building"],sectionItems:["基坑开挖及支护","基坑降水及沉降监测","钢筋模板混凝土施工","砌体及二次结构施工","屋面与厨卫防水闭水试验","机电预留预埋","多塔吊作业防碰撞"],queries:["房建工程施工","主体结构","二次结构","屋面防水","多塔防碰撞"],facts:["建筑结构","层数高度","基础形式","主体结构","防水做法"],tableSections:["多塔防碰撞管控表","隐蔽工程验收清单表"],attachHints:["方案","施工","技术","工艺","房建","主体"]}],municipal:[{id:"municipal-methods",title:"市政工程专项施工工艺",aliases:["市政","道路","管网","沟槽","交通导改","雨污水"],category:"technical",level:"conditional",projectTypes:["municipal"],sectionItems:["全线现场踏勘与地下管线探测","交通导改与占道施工","沟槽开挖支护与降排水","雨污水管道铺设与闭水试验","路基分层碾压与压实度检测","水稳基层与沥青面层施工","新旧管网道路接驳与竣工移交"],queries:["市政工程","交通导改","地下管线","沟槽开挖","管道闭水","沥青摊铺"],facts:["道路长度","管线类型","交通条件","沟槽深度","路面结构"],tableSections:["既有管线保护管控表","交通导改组织计划表"],attachHints:["方案","施工","技术","工艺","市政","道路","管网"]}],renovation:[{id:"renovation-methods",title:"老旧小区改造专项施工组织",aliases:["老旧小区","小区改造","改造工程","飞线整治","雨污分流"],category:"technical",level:"conditional",projectTypes:["renovation"],sectionItems:["居民沟通协调机制","楼栋单元分区分段施工","原有建构筑物与既有设施保护","外墙空鼓铲除加固与屋面翻新防水","雨污管网分流与飞线整治","降噪防尘与不中断通行保障"],queries:["老旧小区改造","居民沟通","分区施工","既有保护","飞线整治","雨污分流"],facts:["小区现状","居民通行","改造范围","既有设施","外墙屋面"],tableSections:["居民沟通协调计划表","既有成品保护清单表"],attachHints:["方案","施工","技术","工艺","改造","小区","居民"]}],decoration:[{id:"decoration-methods",title:"装饰装修工程专项施工工艺",aliases:["装饰装修","装修","精装修","吊顶","墙地面","成品保护"],category:"technical",level:"conditional",projectTypes:["decoration"],sectionItems:["墙地面基层处理与挂网防开裂","厨卫阳台分层防水与48小时闭水试验","吊顶龙骨加固与木构件防火防腐","墙地面铺装空鼓防控与阴阳角收口","交叉施工工序优化","室内空气质量管控与成品保护"],queries:["装饰装修","基层处理","闭水试验","吊顶龙骨","成品保护","室内空气质量"],facts:["装修范围","材料做法","防水部位","吊顶做法","环保要求"],tableSections:["成品保护管控清单表","交叉施工工序优化表"],attachHints:["方案","施工","技术","工艺","装饰","装修"]}]},z=[{id:"basis-overview",title:"编制说明与工程概况",aliases:["编制说明","工程概况","项目概况","项目基本情况","工程基本信息"],category:"setup",level:"core",sectionItems:["编制依据","项目主要施工内容","项目特点、重点、难点分析"],queries:["工程概况","编制依据","招标范围","建设地点","建设规模","工期质量目标"],facts:["工程名称","建设地点","建设规模","招标范围","计划工期","质量目标"],tableSections:["项目重难点识别表"],attachHints:["概况","项目","工程","说明","总纲","部署"]},{id:"organization",title:"项目管理组织机构与职责",aliases:["组织机构","项目管理","岗位职责","管理机构","管理人员"],category:"setup",level:"core",sectionItems:["项目管理组织架构","管理人员岗位职责","内外部协调机制","劳务实名制与人员管理"],queries:["项目管理组织机构","岗位职责","项目经理","技术负责人","劳资员"],facts:["项目管理人员","岗位职责","持证人员","管理组织"],tableSections:["项目管理人员岗位职责配置表","内外协调沟通计划表"],attachHints:["组织","管理","部署","概况","保障"]},{id:"deployment",title:"施工部署与施工流水组织",aliases:["施工部署","总体部署","流水组织","施工组织","流水段"],category:"setup",level:"core",sectionItems:["施工总体部署","施工区段与流水段划分","各阶段施工顺序","多工序穿插与交叉作业管理","资源动态调配机制"],queries:["施工部署","流水段划分","施工顺序","工序穿插","资源调配"],facts:["施工范围","施工阶段","流水段","工期节点","资源配置"],tableSections:["施工流水段划分一览表","交叉作业安全管控清单"],attachHints:["部署","组织","总体","概况","方案"]},{id:"site-layout",title:"施工现场平面布置与临设管理",aliases:["总平面布置","现场平面","平面布置","临设","临水临电","人车分流"],category:"setup",level:"core",sectionItems:["施工现场总平面布置","办公区生活区加工区材料堆放区布置","现场交通组织与人车分流","临时用水布置","临时用电三级配电两级保护","材料场内转运路线"],queries:["施工总平面","临时用电","临时用水","材料堆放","场内交通"],facts:["施工现场条件","临设布置","临水临电","材料堆场","交通组织"],tableSections:["现场总平面分区布置表","场内交通导改组织计划表","临时用电负荷统计表","临时用水布置统计表","材料场内转运路线规划表"],attachHints:["部署","平面","现场","临设","组织"]},{id:"progress",title:"进度计划与工期保障",aliases:["进度计划","工期保障","工期计划","节点控制","进度控制"],category:"setup",level:"core",sectionItems:["总进度计划","关键节点控制计划","周计划日计划分解机制","进度偏差分析与纠偏措施","工期风险预警机制"],queries:["总工期","进度计划","关键节点","工期保障","进度纠偏"],facts:["计划工期","开竣工时间","关键节点","资源保障"],tableSections:["关键施工节点控制计划表"],attachHints:["进度","工期","部署","资源","保障"]},{id:"resources",title:"资源配置计划",aliases:["资源配置","机械设备","劳动力","材料计划","人材机"],category:"setup",level:"core",sectionItems:["主要施工机械设备投入计划","分阶段劳动力投入计划","主要材料进场计划","周转材料配置计划","资源动态调配机制"],queries:["机械设备投入","劳动力计划","材料进场计划","周转材料","资源配置"],facts:["机械设备","劳动力","材料","工程量","施工阶段"],tableSections:["主要施工机械设备投入计划表","分阶段劳动力动态投入计划表","主要材料进场验收管控表"],attachHints:["资源","部署","进度","保障","组织"]},{id:"main-methods",title:"主要分部分项工程施工方案",aliases:["主要施工方案","施工方案","施工方法","分部分项","工艺方案","技术措施"],category:"technical",level:"core",sectionItems:["主要分部分项工程施工流程","关键工序施工工艺","质量控制点与验收要求","施工重难点专项措施"],queries:["分部分项工程","施工工艺","施工方法","验收要求","技术措施"],facts:["施工内容","工程量","图纸做法","技术标准","验收规范"],tableSections:["分项工程施工控制要点表","主要工程量一览表"],attachHints:["方案","施工","技术","工艺","措施"]},{id:"quality",title:"质量管理体系与质量保证措施",aliases:["质量管理","质量保证","质量控制","质量措施","验收管理"],category:"assurance",level:"core",sectionItems:["质量管理目标","三检制度","样板引路制度","隐蔽工程验收","原材料进场复试与见证取样","实测实量与质量通病治理","成品保护专项措施","质量问题闭环整改机制"],queries:["质量保证措施","三检制度","样板引路","隐蔽验收","质量通病","成品保护"],facts:["质量目标","验收标准","材料复试","质量控制点"],tableSections:["隐蔽工程验收清单表","分项工程质量控制要点表","质量通病防治清单表","样板引路实施计划表","成品保护管控清单表"],attachHints:["质量","保障","保证","措施","管理","验收"]},{id:"safety-risk",title:"安全管理、风险分级与危大工程管控",aliases:["安全管理","安全措施","风险分级","危大工程","安全生产","隐患排查"],category:"assurance",level:"core",sectionItems:["安全管理目标","危险源辨识与风险分级管控","危大工程辨识清单","危大工程专项施工方案审批流程","安全技术逐级交底","临边洞口高处作业起重吊装消防临电管理","安全隐患排查与闭环整改","应急救援组织与应急演练"],queries:["安全管理","风险分级管控","危大工程","安全技术交底","临时用电","消防安全"],facts:["安全目标","危大工程","风险源","安全标准","应急要求"],tableSections:["危险源辨识与风险分级管控清单","危大工程全流程闭环管控表","安全防护设施验收计划表","交叉作业安全管控清单","消防设施布置表"],attachHints:["安全","风险","危大","保障","措施","管理"]},{id:"environment-green",title:"文明施工、扬尘、噪声与绿色施工",aliases:["文明施工","扬尘治理","噪声管控","绿色施工","环保措施","四节一环保","建筑垃圾"],category:"environment",level:"core",sectionItems:["文明施工目标","扬尘污染专项管控","噪声分时段管控","施工废水沉淀处理","建筑垃圾分类回收","四节一环保措施","智慧工地与在线监测"],queries:["文明施工","扬尘治理","噪声管控","绿色施工","建筑垃圾分类","四节一环保"],facts:["文明施工目标","扬尘要求","噪声要求","环保标准","垃圾处置"],tableSections:["环境污染物管控指标一览表","建筑垃圾分类管理表","噪声分级管控表"],attachHints:["文明","环保","绿色","扬尘","噪声","保障","措施"]},{id:"labor-wage",title:"农民工工资保障与劳务管理",aliases:["农民工工资","工资保障","劳务管理","实名制","银行代发","工资专户"],category:"labor",level:"mandatory",sectionItems:["劳务实名制管理","农民工工资专用账户","银行代发制度","工资按月足额发放","考勤台账与工资支付台账","工资保证金与劳资纠纷处置"],queries:["农民工工资保障","劳务实名制","工资专用账户","银行代发","工资支付台账"],facts:["劳务管理要求","工资支付要求","实名制要求"],tableSections:["农民工工资管控台账表","劳务实名制管理台账表"],attachHints:["工资","劳务","实名","保障","措施","管理"]},{id:"external-protection",title:"周边环境、管线与既有建构筑物保护",aliases:["周边环境","管线保护","地下管线","既有建筑","交通导行","居民沟通"],category:"external",level:"conditional",sectionItems:["周边道路居民区学校医院商业区识别","既有地下管线探测与保护","临近建构筑物沉降监测","交通导行与公众安全保障","居民沟通与投诉响应机制"],queries:["地下管线保护","周边环境保护","交通导行","居民沟通","临近建筑沉降监测"],facts:["周边环境","地下管线","交通条件","居民区","既有建筑"],tableSections:["临近建筑地下管线保护清单表","交通导改组织计划表"],attachHints:["周边","管线","交通","居民","市政","改造","保护","环境","方案"]},{id:"seasonal",title:"季节性施工保障",aliases:["季节性施工","雨季施工","夏季高温","冬季施工","防汛","大风天气"],category:"seasonal",level:"core",sectionItems:["雨季施工措施","夏季高温施工措施","冬季施工措施","防汛防雷大风天气应急措施"],queries:["季节性施工","雨季施工","高温施工","冬季施工","防汛措施"],facts:["施工季节","当地气候","工期节点","防汛要求"],tableSections:["季节性施工资源配置表"],attachHints:["季节","雨季","高温","冬季","防汛","保障","措施"]},{id:"emergency",title:"应急管理体系",aliases:["应急管理","应急预案","应急救援","事故处置","演练计划"],category:"emergency",level:"core",sectionItems:["应急组织架构","应急物资储备","高处坠落物体打击坍塌触电火灾暴雨大风高温中暑专项预案","应急响应流程","应急演练计划","事故上报与复盘整改"],queries:["应急预案","应急组织","应急物资","应急演练","事故上报"],facts:["应急要求","安全风险","应急物资","演练计划"],tableSections:["应急物资储备清单表","应急演练计划表"],attachHints:["应急","预案","救援","安全","保障","措施"]},{id:"digital-bim",title:"BIM、智慧工地与创新加分模块",aliases:["BIM","智慧工地","数字化","智能监测","创新加分","AI视频识别"],category:"digital",level:"optional",sectionItems:["BIM场地布置优化","BIM管线综合深化","4D进度模拟","智慧工地视频监控","扬尘噪声实名制塔机黑匣子监测","AI视频识别与风险预警"],queries:["BIM应用","智慧工地","数字化管控","扬尘在线监测","实名制管理"],facts:["智慧工地要求","BIM要求","监测设备","信息化管理"],tableSections:["BIM智慧工地应用点表","智慧工地监测点位清单"],attachHints:["BIM","智慧","数字","创新","加分","保障","措施"]},{id:"delivery",title:"竣工清理、验收移交与保修",aliases:["竣工验收","竣工清理","验收移交","资料归档","保修","分户验收"],category:"delivery",level:"conditional",sectionItems:["竣工清理与垃圾外运","缺陷修补与复查销项","竣工资料归档","验收移交与保修响应"],queries:["竣工验收","资料归档","验收移交","保修响应","竣工清理"],facts:["竣工要求","验收标准","移交要求","保修要求"],tableSections:["竣工清理与移交计划表"],attachHints:["竣工","验收","移交","保修","收尾"]},...y.building,...y.municipal,...y.renovation,...y.decoration];function A(a){return(0,t.GQ)(a).replace(/\s+/gu,"").toLowerCase()}function B(a,b,c){let d=new Set,e=[...a||[],...b].map(a=>a.trim()).filter(a=>a&&!d.has(a)&&(d.add(a),!0));return"number"==typeof c?e.slice(0,c):e}function C(a){let b=A(`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`),c=[];return/市政|道路|管网|雨污|污水|给水|沟槽|交通导|沥青|水稳|检查井/u.test(b)&&c.push("municipal"),/老旧小区|小区改造|改造|修缮|飞线|居民|雨污分流/u.test(b)&&c.push("renovation"),/装饰|装修|精装|吊顶|墙地面|乳胶漆|瓷砖|石材|室内/u.test(b)&&c.push("decoration"),/房建|住宅|办公楼|厂房|主体结构|基础|屋面|二次结构|塔吊|建筑/u.test(b)&&c.push("building"),c.length?[...new Set(c)]:["general"]}function D(a,b,c){return!!(!a.projectTypes?.length||a.projectTypes.some(a=>b.includes(a)))||a.aliases.some(a=>c.includes(A(a)))||a.sectionItems.some(a=>c.includes(A(a)))}function E(a,b){let c=A(a),d=0;for(let a of b.attachHints)c.includes(A(a))&&(d+=5);for(let a of b.aliases){let b=A(a);(c.includes(b)||b.includes(c))&&(d+=12)}return/概况|部署|组织|平面|资源|进度/u.test(c)&&"setup"===b.category&&(d+=6),/方案|施工|技术|工艺|分部分项|方法/u.test(c)&&"technical"===b.category&&(d+=8),/保障|保证|措施|管理/u.test(c)&&["assurance","environment","labor","seasonal","emergency","digital"].includes(b.category)&&(d+=6),/质量/u.test(c)&&"quality"===b.id&&(d+=15),/安全|危大|风险/u.test(c)&&"safety-risk"===b.id&&(d+=15),/文明|环保|扬尘|噪声|绿色/u.test(c)&&"environment-green"===b.id&&(d+=15),/工资|劳务|实名/u.test(c)&&"labor-wage"===b.id&&(d+=15),/应急|预案/u.test(c)&&"emergency"===b.id&&(d+=15),/季节|雨季|冬季|高温|防汛/u.test(c)&&"seasonal"===b.id&&(d+=15),/周边|管线|交通|居民|保护/u.test(c)&&"external-protection"===b.id&&(d+=12),/BIM|智慧|数字|创新/iu.test(a)&&"digital-bim"===b.id&&(d+=15),/竣工|验收|移交|保修/u.test(c)&&"delivery"===b.id&&(d+=15),d}function F(a,b){let c={index:0,score:-1};if(b.forEach((b,d)=>{let e=E(b.title,a);e>c.score&&(c={index:d,score:e})}),c.score>0)return c.index;let d={setup:/概况|部署|组织|资源|进度|总体/u,technical:/方案|施工|技术|工艺|措施/u,assurance:/保障|保证|措施|管理|质量|安全/u,environment:/保障|措施|文明|环保|绿色/u,labor:/保障|措施|劳务|工资/u,external:/方案|施工|周边|保护|交通/u,seasonal:/保障|措施|季节|雨季/u,emergency:/保障|措施|应急|安全/u,digital:/保障|措施|智慧|BIM|创新/u,delivery:/竣工|验收|移交|收尾/u},e=b.findIndex(b=>d[a.category].test(b.title));return e>=0?e:Math.max(0,b.length-1)}let G=["精心组织","科学管理","精益求精","全力保障","高效推进","力争一流","完善体系","最大限度","显著提升","大力落实","充分确保","严格把控","加强管理","提高意识","强化监督","持续完善","定期检查","及时处理"],H=[{pattern:/质量|验收|隐蔽|样板|通病/u,label:"质量闭环",required:["自检","互检","交接检","整改","复查","归档"],prompt:"质量类内容必须形成“自检—互检—交接检—整改—复查—资料归档”闭环。"},{pattern:/安全|风险|危大|临电|消防|吊装|高处/u,label:"安全闭环",required:["辨识","交底","检查","整改","复查","销项"],prompt:"安全类内容必须形成“风险辨识—专项交底—现场检查—隐患整改—复查销项”闭环。"},{pattern:/进度|工期|节点|计划/u,label:"进度闭环",required:["计划","检查","偏差","纠偏","复核"],prompt:"进度类内容必须形成“计划分解—日/周检查—偏差识别—资源纠偏—节点复核”闭环。"},{pattern:/文明|扬尘|噪声|绿色|环保|垃圾/u,label:"环保闭环",required:["监测","预警","处置","台账"],prompt:"文明环保类内容必须形成“监测—预警—联动处置—台账记录”闭环。"},{pattern:/工资|劳务|实名/u,label:"工资闭环",required:["实名","考勤","核算","公示","代发","归档"],prompt:"工资保障类内容必须形成“实名登记—考勤—核算—公示—银行代发—归档”闭环。"},{pattern:/应急|预案|救援|事故/u,label:"应急闭环",required:["发现","警戒","疏散","处置","上报","复盘"],prompt:"应急类内容必须形成“发现险情—警戒疏散—初期处置—救援上报—复盘整改”闭环。"}],I={building:{label:"房建工程",chain:["施工准备","土方/基础","主体结构","二次结构","防水","机电安装","装饰装修","室外工程","竣工验收"],forbidden:["管道闭水试验","沥青摊铺","水稳层","交通导改"],prompt:"房建类章节应按“施工准备—基础—主体—二次结构—防水—机电—装饰—室外—验收”组织,不得混入市政道路工序。"},municipal:{label:"市政工程",chain:["测量放线","管线探测","围挡导行","沟槽/路基","管道/结构","回填","水稳/沥青/铺装","标线设施","验收移交"],forbidden:["主体结构","二次结构","塔吊","外脚手架","屋面防水"],prompt:"市政类章节应按“测量放线—管线探测—围挡导行—沟槽/路基—管道/结构—回填—路面恢复—验收移交”组织,不得写成房建主体结构逻辑。"},renovation:{label:"老旧小区改造",chain:["居民沟通","分区施工","既有保护","外墙/屋面/管网改造","扰民控制","竣工恢复"],forbidden:["大面积深基坑","高支模","大体量主体结构","长距离交通导改"],prompt:"老旧小区改造类章节必须体现“居民沟通—分区施工—既有保护—改造作业—扰民控制—竣工恢复”,不得忽略居民通行和既有设施保护。"},decoration:{label:"装饰装修工程",chain:["基层处理","防水闭水","吊顶龙骨","墙地面铺装","细部收口","成品保护","空气质量验收"],forbidden:["深基坑","路基压实","水稳层","沥青摊铺","大体量土方"],prompt:"装饰装修类章节应按“基层处理—防水闭水—吊顶墙面—地面铺装—细部收口—成品保护—空气质量验收”组织,不得混入基坑、路基等无关内容。"}},J=[{title:"招标评分项响应索引",pattern:/技术标|施工组织设计|评分|响应/u,prompt:"设置招标评分项响应索引,逐项对应章节、响应内容和位置。"},{title:"主要工程量一览表",pattern:/工程量|清单|土方|钢筋|混凝土|管道|路面/u,prompt:"将主要工程量表格化,关联资源配置和进度节点。"},{title:"影像资料留存",pattern:/隐蔽|危大|整改|验收|样板/u,prompt:"隐蔽、危大、材料验收、样板和整改前后对比必须留存影像资料。"},{title:"变更签证管理",pattern:/改造|市政|工期紧|变更|签证/u,prompt:"改造、市政或工期紧项目应补充变更识别、技术核定、签证资料和影响跟踪。"},{title:"危险品专项管理",pattern:/装修|装饰|动火|油漆|稀释剂|氧气|乙炔/u,prompt:"涉及动火、油漆、稀释剂、氧气乙炔时应补充危险品分区存放与动火审批。"},{title:"材料损耗与周转控制",pattern:/钢筋|模板|周转|材料|大体量/u,prompt:"体量大或材料占比高时应补充钢筋翻样、模板周转、余料回收和限额领料。"},{title:"分户验收",pattern:/住宅|住户|交付|分户/u,prompt:"住宅项目应补充分户实测、问题清单、整改销项和交付资料。"}];function K(a){return a.replace(/\s+/gu,"").toLowerCase()}function L(a){let b=`${a.title} ${(a.sections||[]).join(" ")}`;return/施工组织设计|施工组织|施组|技术标|施工方案|质量|安全|文明施工/u.test(b)?["【施工组织设计专项写作规则】","- 禁止空话套话:不要只写“加强管理、严格控制、确保质量、精心组织、科学管理”,必须写成“责任岗位+执行动作+量化标准+检查频次+整改时限+复查销项”。","- 每项措施至少包含责任主体、执行标准、检查频次、整改闭环;项目特有数据必须来自资料或图谱。",...H.filter(a=>a.pattern.test(b)).map(a=>`- ${a.prompt}`),...J.filter(a=>a.pattern.test(b)).map(a=>`- 高分补充:${a.prompt}`)].join("\n"):""}var M=c(22157),N=c(51144);function O(a){let b=["project"];return/概况|工程|项目|部署|总体|施工|方案|资源/u.test(a)&&b.push("scope"),/进度|工期|部署|资源/u.test(a)&&b.push("schedule"),/质量|验收|材料/u.test(a)&&b.push("quality"),/安全|文明|风险|危大/u.test(a)&&b.push("safety"),/资源|材料|设备|劳动力|进度/u.test(a)&&b.push("resources"),/施工|工艺|技术|方案|清单|工程量/u.test(a)&&b.push("quantities"),[...new Set(b)]}function P(a,b){let c=O(a.title),d=c.filter(a=>"project"===a||"scope"===a?b.project.length>0||b.drawings.length>0:"schedule"===a?b.schedule.length>0:"quality"===a?b.quality.length>0||b.specifications.length>0:"safety"===a?b.safety.length>0||b.rules.length>0:"resources"===a?b.resources.length>0||b.bills.length>0:"quantities"===a&&(b.bills.length>0||b.drawings.length>0)),e=c.filter(a=>!d.includes(a)),f=c.length?d.length/c.length:1,g=f>=.75?"strong":f>=.4?"medium":"weak";return{level:g,mode:"strong"===g?"project-specific":"medium"===g?"standard-based":"restricted-general",supported:d,missing:e}}function Q(a){return/概况|工程|项目/u.test(a)?["工程基础信息必须与资料一致","突出招标范围、建设地点、规模、工期、质量目标","说明施工组织编制边界"]:/部署|总体|组织/u.test(a)?["明确施工组织逻辑、专业接口和施工段划分","说明资源、进度、质量、安全之间的统筹关系","形成可执行的管理闭环"]:/进度|工期/u.test(a)?["围绕总工期和关键线路组织","说明资源保障、穿插施工、纠偏机制","不得编造系统暂未从知识库确认的日期节点"]:/质量/u.test(a)?["覆盖材料进场验收、复验、过程检查、隐蔽验收和资料归档","把资料中的质量标准落入控制点","明确整改复验闭环"]:/安全|文明|风险|危大/u.test(a)?["识别作业风险和现场管理边界","覆盖人员、设备、临电、消防、文明施工措施","明确检查整改和应急响应"]:/资源|材料|设备|劳动力/u.test(a)?["依据工程范围和进度组织资源配置","说明材料设备进场、验收、保管和调配","资源安排必须支撑工期和质量目标"]:/施工|工艺|技术|方案/u.test(a)?["明确施工准备、工艺流程、关键参数和验收要求","关联图纸、清单、说明资料中的对象和边界","突出重点难点和过程控制"]:["结合资料事实说明对象范围、实施方法、控制要点和验收闭环","避免泛化表述,必须体现本项目特征"]}function R(a){return[`章节任务卡:${a.title}`,` - 必须覆盖事实域:${O(a.title).join("、")}`,...Q(a.title).map(a=>` - ${a}`),...(a.sections||[]).slice(0,10).map(a=>` - 小节任务:${a}|${Q(a).join(";")}`),...function(a){let b=a.tablePlans||[];return 0===b.length?[]:[" - 本章必须按项目图谱生成以下表格/清单:",...b.map(a=>` * ${a.required?"必写":"按需"}《${a.title}》:字段=${a.fields.map(a=>a.name).join("、")};来源域=${a.sourceDomains.join("、")};${a.reason}`)]}(a),...function(a){let b=L(a);return b?b.split("\n").map(a=>` - ${a}`):[]}(a)].join("\n")}function S(a){let b=[...a.factsModel.project,...a.factsModel.schedule,...a.factsModel.quality,...a.factsModel.safety,...a.factsModel.resources,...a.factsModel.preciseFacts].filter((a,b,c)=>{let d=(0,M.lG)(a.value).replace(/\s+/gu," ").trim();return d.length>0&&c.findIndex(b=>`${b.key}:${(0,M.lG)(b.value).replace(/\s+/gu," ").trim()}`==`${a.key}:${d}`)===b}),c=(0,N.Cr)(b,a=>(0,N.rF)(a),{maxItems:48,maxChars:18e3},"coreFacts"),d=c.selected,f=c.dropped.length>0?[`⚠️ 因 LLM 上下文预算限制,${c.dropped.length} 个低优先级事实未纳入蓝图;完整事实主表可在生成后的事实覆盖报告查看。`]:[],g=function(a){let b=`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`;return/专项施工|危大|专项方案/u.test(b)?{type:"专项施工方案",focus:["专项对象边界","工艺参数","风险控制","验收要求","应急措施"]}:/投标|技术标|响应|招标/u.test(b)?{type:"投标技术方案",focus:["招标响应","技术优势","工期质量安全承诺","资源保障","履约可实施性"]}:/监理|旁站|巡视|平行检验/u.test(b)?{type:"监理规划/细则",focus:["监理目标","旁站巡视","平行检验","验收程序","资料签认"]}:/可研|可行性|项目建议书|投资估算/u.test(b)?{type:"可研/项目建议类文档",focus:["建设必要性","方案比选","投资估算","风险分析","实施效益"]}:/运维|维护|保养|巡检/u.test(b)?{type:"运维维护方案",focus:["巡检频次","维护流程","故障响应","备品备件","记录闭环"]}:{type:"施工组织设计/施工技术方案",focus:["工程概况","施工部署","进度质量安全","资源配置","施工工艺和验收闭环"]}}(a),h=d.map((a,b)=>`${b+1}. ${a.fieldName||a.key||"资料事实"}|${(0,M.lG)(a.value).replace(/\s+/gu," ").slice(0,90)}|来源:${a.sourceFile?e.basename(a.sourceFile):"结构化事实主表"}`),i=function(a){let b={project:"项目基础事实",scope:"招标范围/施工边界",schedule:"工期与节点",quality:"质量目标与验收",safety:"安全文明要求",resources:"资源投入依据",quantities:"清单/图纸/工程量事实"};return a.map((a,c)=>`${c+1}. ${a.title}:${O(a.title).map(a=>b[a]||a).join("、")}`)}(a.chapters),j=a.chapters.map((b,c)=>{let d=P(b,a.factsModel);return`${c+1}. ${b.title}:${d.level}/${d.mode};缺失 ${d.missing.join("、")||"无"}`}),k=a.chapters.map(R),l=a.chapters.map(b=>(function(a,b){let c=P(a,b);return`章节实施方案:${a.title}
|
|
4
|
-
- 写作模式:${c.mode};资料支撑度:${c.level}
|
|
5
|
-
- 已支撑事实域:${c.supported.join("、")||"暂无"}
|
|
6
|
-
- 系统暂未确认事实域:${c.missing.join("、")||"无"}
|
|
7
|
-
- 章节目标:${Q(a.title).join(";")}
|
|
8
|
-
- 组织顺序:${(a.sections||[]).slice(0,10).join(" → ")||"按模板章节目标展开"}
|
|
9
|
-
- 禁止内容:系统暂未从知识库确认的项目特有数字、日期、金额、工程量或材料规格不得编造;应触发扩大检索、事实补抽或事实落位修复。`})(b,a.factsModel)),m=function(a){let b=C({template:{id:"runtime",name:a.templateName,outputTitle:a.outputTitle||"",description:"",category:"",chapters:a.chapters},chapters:a.chapters,requirement:a.requirement}).filter(a=>"general"!==a).map(a=>I[a].prompt);return b.length?`【专业工序链约束】
|
|
10
|
-
${b.map(a=>`- ${a}`).join("\n")}`:""}({templateName:a.template.name,outputTitle:a.template.outputTitle,requirement:a.requirement,chapters:a.chapters});return["【全局文档蓝图与一致性约束】",`文档类型画像:${g.type};评分重点:${g.focus.join("、")}`,`文档目标:${a.template.outputTitle||a.template.name}`,a.requirement?`用户目标:${a.requirement}`:"",d.length?`可信基础事实主表:
|
|
11
|
-
${d.map(a=>`- ${function(a){let b=a.fieldName||a.key||"资料事实",c=(0,M.lG)(a.value).replace(/\s+/gu," ").trim();return`${b}:${c}${a.sourceFile?`(来源:${e.basename(a.sourceFile)})`:""}`}(a)}`).join("\n")}`:"可信基础事实主表:系统当前结构化事实确认不足,应扩大本地知识库检索、补抽事实并修复事实落位;正文只能使用已确认事实,不得编造参数。",h.length?`关键事实证据追踪清单:
|
|
12
|
-
${h.join("\n")}`:"",`事实覆盖矩阵:
|
|
13
|
-
${i.join("\n")}`,`知识库确认覆盖矩阵:
|
|
14
|
-
${j.join("\n")}`,m,"证据引用约束:工期、质量目标、招标范围、金额、工程量、标准规范、验收要求等关键事实必须来自可信基础事实主表或绑定材料;系统暂未从知识库确认的数字和参数不得编造。","跨章一致性要求:所有章节必须共用同一套工期、质量、范围、资源和验收口径;不得在不同章节写出相互矛盾的项目基础信息。",`章节专业任务卡:
|
|
15
|
-
${k.join("\n")}`,`章节实施方案:
|
|
16
|
-
${l.join("\n")}`,...f].filter(Boolean).join("\n")}function T(a,b,c,d,e=!0){return{name:a,sourceDomain:b,sourceHint:c,fallbackPolicy:d,required:e}}let U=[{id:"project-difficulty",title:"项目重难点识别表",moduleTitles:["编制说明与工程概况"],required:!0,triggerKeywords:["重点","难点","重难点","风险"],fields:[T("重难点","risks","从图谱风险、现场条件、项目要求中提取","deriveFromContext"),T("形成原因","siteConditions","结合现场条件、工期、周边环境、施工范围说明","deriveFromContext"),T("影响范围","works","关联受影响的分部分项、区域、工序或周边对象","deriveFromContext"),T("专项措施","methods","结合工艺方法、风险 mitigation 和标准措施填写","standardAllowed"),T("责任岗位","standard","按项目经理、技术负责人、施工员、安全员、质量员等职责填写","standardAllowed")]},{id:"site-layout-zones",title:"现场总平面分区布置表",moduleTitles:["施工现场平面布置与临设管理"],required:!0,triggerKeywords:["总平面","平面布置","临设","材料堆场"],fields:[T("区域名称","siteConditions","从现场条件、临设、加工区、办公生活区等识别","deriveFromContext"),T("位置","siteConditions","从现场平面、道路、场地条件或资料描述提取","projectFactOnly",!1),T("功能","standard","按办公、生活、加工、堆放、通行等功能填写","standardAllowed"),T("面积","project","仅资料明确时填写,不得编造","projectFactOnly",!1),T("搭设标准","standards","按临设、安全文明、消防、环保标准填写","standardAllowed"),T("拆除时间","schedule","结合施工阶段或竣工清理阶段填写","deriveFromContext",!1)]},{id:"temporary-electric-load",title:"临时用电负荷统计表",moduleTitles:["施工现场平面布置与临设管理"],required:!0,triggerKeywords:["临时用电","临电","三级配电","设备功率"],fields:[T("设备名称","resources","从设备资源、机械投入计划中提取","deriveFromContext"),T("功率","resources","仅资料或设备参数明确时填写","projectFactOnly",!1),T("数量","resources","从设备数量或资源计划提取","projectFactOnly",!1),T("总功率","resources","仅功率和数量明确时计算,否则不编造","projectFactOnly",!1),T("负荷等级","standard","按临电管理和设备重要性判断","standardAllowed",!1),T("检查频次","standards","按临电巡查制度填写","standardAllowed")]},{id:"progress-milestones",title:"关键施工节点控制计划表",moduleTitles:["进度计划与工期保障"],required:!0,triggerKeywords:["进度","工期","节点","计划"],fields:[T("关键节点","schedule","从工期节点、里程碑、施工阶段提取","projectFactOnly"),T("计划完成时间","schedule","仅资料明确时填写日期或工期节点","projectFactOnly",!1),T("责任岗位","standard","按施工组织管理职责填写","standardAllowed"),T("投入资源","resources","关联劳动力、机械、材料资源","deriveFromContext"),T("检查频次","standard","按日计划、周计划、月计划检查机制填写","standardAllowed"),T("滞后纠偏措施","methods","结合资源调配、穿插施工和备用资源填写","standardAllowed")]},{id:"equipment-plan",title:"主要施工机械设备投入计划表",moduleTitles:["资源配置计划"],required:!0,triggerKeywords:["机械设备","设备投入","资源配置"],fields:[T("设备名称","resources","从 equipment 类型资源提取","deriveFromContext"),T("规格型号","resources","从资源规格型号提取","projectFactOnly",!1),T("数量","resources","从资源数量提取","projectFactOnly",!1),T("使用阶段","schedule","结合施工阶段和适用工程内容填写","deriveFromContext"),T("用途","works","关联适用分部分项或工序","deriveFromContext"),T("进退场时间","schedule","仅资料明确时填写,否则按施工阶段表达","deriveFromContext",!1)]},{id:"labor-plan",title:"分阶段劳动力动态投入计划表",moduleTitles:["资源配置计划"],required:!0,triggerKeywords:["劳动力","人员投入","班组"],fields:[T("施工阶段","schedule","从施工阶段和进度节点提取","deriveFromContext"),T("工种","resources","从 labor 类型资源、工序需求推导","deriveFromContext"),T("人数","resources","仅资料明确时填写","projectFactOnly",!1),T("主要工作内容","works","关联对应分部分项工程","deriveFromContext"),T("调配原则","standard","按工期节点、穿插施工和资源动态调配填写","standardAllowed")]},{id:"quality-hidden-acceptance",title:"隐蔽工程验收清单表",moduleTitles:["质量管理体系与质量保证措施"],required:!0,triggerKeywords:["隐蔽工程","隐蔽验收","质量验收"],fields:[T("隐蔽部位","works","从分部分项工程、图纸做法和工序识别","deriveFromContext"),T("验收内容","methods","结合工艺步骤和质量控制点填写","deriveFromContext"),T("验收时机","schedule","按工序完成、覆盖前、下道工序前填写","standardAllowed"),T("验收要点","standards","从验收规范、质量标准和材料要求提取","standardAllowed"),T("影像留存","standard","按隐蔽验收资料归档要求填写","standardAllowed")]},{id:"quality-common-defects",title:"质量通病防治清单表",moduleTitles:["质量管理体系与质量保证措施"],required:!0,triggerKeywords:["质量通病","防治","质量控制"],fields:[T("通病问题","risks","从质量风险、常见工序问题和项目类型推导","deriveFromContext"),T("产生原因","methods","结合施工工艺、材料、环境和操作因素填写","deriveFromContext"),T("预防措施","methods","按工艺控制、样板引路、材料复试等填写","standardAllowed"),T("整改标准","standards","从验收规范和质量标准提取","standardAllowed"),T("复查频次","standard","按质量检查制度填写","standardAllowed")]},{id:"risk-grade-control",title:"危险源辨识与风险分级管控清单",moduleTitles:["安全管理、风险分级与危大工程管控"],required:!0,triggerKeywords:["安全","风险","危险源","危大"],fields:[T("危险源","risks","从项目图谱 risks 和施工工序识别","deriveFromContext"),T("风险等级","risks","使用图谱风险等级或按影响程度判断","deriveFromContext"),T("存在部位","works","关联风险所在工程部位、区域或工序","deriveFromContext"),T("管控措施","risks","优先使用 mitigation,必要时按标准安全措施补充","standardAllowed"),T("监测频次","standards","按安全巡查和专项监测制度填写","standardAllowed"),T("闭环要求","standard","按隐患整改、复查、销项、归档填写","standardAllowed")]},{id:"dangerous-workflow",title:"危大工程全流程闭环管控表",moduleTitles:["安全管理、风险分级与危大工程管控"],required:!0,triggerKeywords:["危大工程","专项施工方案","专家论证"],fields:[T("危大项目","risks","从危大工程、深基坑、高支模、起重吊装等风险识别","deriveFromContext"),T("方案编制","standard","按专项方案编制要求填写","standardAllowed"),T("审批交底","standard","按审核审批、专家论证、技术交底流程填写","standardAllowed"),T("旁站监测","standard","按实施过程旁站、监测、验收要求填写","standardAllowed"),T("验收闭环","standard","按联合验收、挂牌使用、整改销项填写","standardAllowed")]},{id:"environment-control",title:"环境污染物管控指标一览表",moduleTitles:["文明施工、扬尘、噪声与绿色施工"],required:!0,triggerKeywords:["文明施工","扬尘","噪声","绿色施工","环保"],fields:[T("污染源","siteConditions","从扬尘、噪声、废水、垃圾等施工影响识别","deriveFromContext"),T("控制指标","requirements","从招标环保要求、地方监管或标准要求提取","standardAllowed"),T("监测方式","standard","按在线监测、巡查、台账记录填写","standardAllowed"),T("管控措施","methods","按湿法作业、覆盖、冲洗、封闭、沉淀处理填写","standardAllowed"),T("责任岗位","standard","按文明施工管理员、安全员、施工员等填写","standardAllowed")]},{id:"construction-waste",title:"建筑垃圾分类管理表",moduleTitles:["文明施工、扬尘、噪声与绿色施工"],required:!0,triggerKeywords:["建筑垃圾","垃圾分类","绿色施工"],fields:[T("垃圾类别","standard","按可回收材料、建筑垃圾、生活垃圾、危险废弃物分类","standardAllowed"),T("堆放区域","siteConditions","结合现场平面和堆放分区填写","deriveFromContext"),T("处理方式","standard","按回收利用、外运消纳、资质单位处置填写","standardAllowed"),T("清运频次","standard","按现场保洁和垃圾日产日清要求填写","standardAllowed"),T("责任人","standard","按材料员、施工员、安全员、保洁员等填写","standardAllowed")]},{id:"wage-control",title:"农民工工资管控台账表",moduleTitles:["农民工工资保障与劳务管理"],required:!0,triggerKeywords:["农民工工资","工资保障","劳务实名制"],fields:[T("管理环节","requirements","按实名登记、考勤、核算、公示、代发、归档填写","standardAllowed"),T("执行要求","requirements","从工资支付、实名制和专户要求提取","standardAllowed"),T("责任岗位","standard","按劳资员、项目经理、班组长等填写","standardAllowed"),T("形成资料","standard","按考勤表、工资表、银行流水、公示记录等填写","standardAllowed"),T("闭环要求","standard","按争议受理、核查、整改、销项归档填写","standardAllowed")]},{id:"pipeline-protection",title:"临近建筑地下管线保护清单表",moduleTitles:["周边环境、管线与既有建构筑物保护"],required:!1,triggerKeywords:["地下管线","管线保护","既有建筑","周边环境"],fields:[T("保护对象","siteConditions","从地下管线、临近建筑、道路、居民区等识别","deriveFromContext"),T("位置关系","siteConditions","从现场条件、图纸或踏勘资料提取","projectFactOnly",!1),T("风险影响","risks","结合开挖、振动、沉降、交通等影响填写","deriveFromContext"),T("保护措施","methods","按探测、标识、支护、监测、应急抢修填写","standardAllowed"),T("监测频次","standards","按风险等级和施工阶段填写","standardAllowed"),T("应急处置","risks","按停工警戒、抢修联络、复查恢复填写","standardAllowed")]},{id:"seasonal-resource",title:"季节性施工资源配置表",moduleTitles:["季节性施工保障"],required:!0,triggerKeywords:["季节性施工","雨季","冬季","高温","防汛"],fields:[T("季节/天气类型","siteConditions","结合施工季节、当地气候和工期节点填写","deriveFromContext"),T("影响工序","works","关联受雨季、高温、冬季影响的工序","deriveFromContext"),T("配置资源","resources","结合排水、防暑、防冻、防风等物资设备填写","standardAllowed"),T("检查频次","standard","按天气预警、班前检查、雨后复查填写","standardAllowed"),T("应急措施","risks","按防汛、排水、防雷、大风停工等填写","standardAllowed")]},{id:"emergency-materials",title:"应急物资储备清单表",moduleTitles:["应急管理体系"],required:!0,triggerKeywords:["应急","应急物资","应急救援"],fields:[T("物资名称","resources","从应急物资或按风险场景配置","standardAllowed"),T("规格型号","resources","资料明确时填写,否则按通用应急物资表达","standardAllowed",!1),T("数量","resources","仅资料明确时填写","projectFactOnly",!1),T("存放位置","siteConditions","结合现场平面和应急点位填写","deriveFromContext",!1),T("用途","risks","关联火灾、触电、坍塌、暴雨、高温等风险场景","deriveFromContext"),T("检查周期","standard","按应急物资定期检查制度填写","standardAllowed")]},{id:"bim-smart-site",title:"BIM智慧工地应用点表",moduleTitles:["BIM、智慧工地与创新加分模块"],required:!1,triggerKeywords:["BIM","智慧工地","在线监测","数字化"],fields:[T("应用点","requirements","从 BIM、智慧工地、监测要求或加分点识别","deriveFromContext"),T("应用内容","methods","按管线综合、4D模拟、视频监控、扬尘监测等填写","standardAllowed"),T("实施阶段","schedule","结合深化设计、施工准备、全过程管控等阶段填写","deriveFromContext"),T("输出成果","standard","按模型、图纸、台账、预警记录等填写","standardAllowed"),T("作用","standard","按减少返工、校核工期、联动喷淋、风险预警等填写","standardAllowed")]}];function V(a){return a.replace(/\s+/gu,"").toLowerCase()}function W(a){return[...new Set(a)]}function X(a){return V([a.title,a.purpose,...a.sections||[],...a.tableSections||[],...a.requiredFacts||[],...a.queries||[]].join(" "))}function Y(a,b,c){return c?!!a.triggerKeywords.some(a=>b.includes(V(a)))||("equipment-plan"===a.id?c.resources.some(a=>"equipment"===a.type):"labor-plan"===a.id?c.resources.some(a=>"labor"===a.type):"progress-milestones"===a.id?c.schedule.length>0:"risk-grade-control"===a.id?c.risks.length>0:"pipeline-protection"===a.id?c.siteConditions.some(a=>/管线|道路|居民|学校|医院|商业|既有|周边/u.test(`${a.condition}${a.impact}`)):"bim-smart-site"===a.id?c.requirements.some(a=>/BIM|智慧|数字|监测|视频|实名制/u.test(`${a.category}${a.detail}`)):a.required):a.required}function Z(a,b,c){return"factsModel"===a?!!(c&&Object.keys(c.byKey||{}).length>0):!!b&&("project"===a?Object.keys(c?.byKey||{}).length>0||b.requirements.length>0:"works"===a?b.works.length>0:"methods"===a?b.methods.length>0:"resources"===a?b.resources.length>0:"schedule"===a?b.schedule.length>0||!!c?.schedule.duration:"standards"===a?b.standards.length>0:"risks"===a?b.risks.length>0:"requirements"===a?b.requirements.length>0:"siteConditions"!==a||b.siteConditions.length>0)}function $(a){var b;let c=(b=a.projectGraph)?V([...b.works.flatMap(a=>[a.name,a.scope,...a.relatedItems]),...b.methods.flatMap(a=>[a.name,...a.steps,...a.applicableWorks]),...b.resources.flatMap(a=>[a.name,a.type,a.spec,a.quantity,a.unit]),...b.schedule.flatMap(a=>[a.milestone,a.duration,a.startDate,a.endDate]),...b.standards.flatMap(a=>[a.code,a.description]),...b.risks.flatMap(a=>[a.risk,a.level,a.mitigation]),...b.requirements.flatMap(a=>[a.category,a.detail]),...b.siteConditions.flatMap(a=>[a.condition,a.impact]),...b.addendumChanges.flatMap(a=>[a.originalPath,a.original,a.revised]),...b.gaps].join(" ")):"";return a.chapters.map(b=>{var d;let e=`${c} ${!(d=a.canonicalFacts)?"":V(Object.values(d.byKey||{}).map(a=>`${a.label} ${a.value}`).join(" "))}`,f=U.filter(c=>(function(a,b){let c=X(b);return!!((b.tableSections||[]).some(b=>b===a.title||a.title.includes(b)||b.includes(a.title))||a.moduleTitles.some(a=>c.includes(V(a)))||a.triggerKeywords.some(a=>c.includes(V(a))))})(c,b)&&Y(c,e,a.projectGraph)).map(c=>{let d=W(c.fields.map(a=>a.sourceDomain)),f=function(a,b,c,d){let e=X(b);if(a.required||(b.tableSections||[]).some(b=>b===a.title||a.title.includes(b)))return"must";let f=Y(a,c,d);return/危大|安全|进度|工期|质量|资源|人材机|机械|劳动力|材料/u.test(e)&&f?"should":f?"conditional":"reference"}(c,b,e,a.projectGraph),g=function(a,b,c){let d=a.fields.filter(a=>a.required),e=a.fields.filter(a=>a.required&&"projectFactOnly"===a.fallbackPolicy&&!Z(a.sourceDomain,b,c)).map(a=>a.name),f=a.fields.filter(a=>"projectFactOnly"!==a.fallbackPolicy||Z(a.sourceDomain,b,c)).length,g="generate_with_confirmed_facts";return e.length>0&&f>0&&(g="generate_with_review_notes"),e.length===d.length&&d.length>0&&(g="convert_to_text"),0===f&&(g="skip_with_reason"),{requiredFieldCount:d.length,confirmedFieldCount:f,missingProjectFactFields:e,canGenerate:"skip_with_reason"!==g,fallbackPolicy:g}}(c,a.projectGraph,a.canonicalFacts),h="must"===f?{shouldOutput:!0,outputType:"convert_to_text"===g.fallbackPolicy?"checklist":"markdown_table",decisionReason:"章节必要管控表,按项目资料和图谱事实输出。"}:"should"===f?{shouldOutput:!0,outputType:"convert_to_text"===g.fallbackPolicy?"checklist":"markdown_table",decisionReason:"项目图谱和章节语义均触发,按资料内容输出。"}:"conditional"===f&&g.confirmedFieldCount>0?{shouldOutput:!0,outputType:"checklist",decisionReason:"资料已触发该结构,按已有事实表达。"}:{shouldOutput:!1,outputType:"skip",decisionReason:"非本章核心输出。"};return{id:c.id,title:c.title,chapterTitle:b.title,moduleTitle:c.moduleTitles[0]||b.title,required:h.shouldOutput&&("must"===f||c.required),reason:function(a,b){let c=[];return b?.schedule.length&&a.fields.some(a=>"schedule"===a.sourceDomain)&&c.push("项目图谱包含工期与关键节点"),b?.resources.length&&a.fields.some(a=>"resources"===a.sourceDomain)&&c.push("项目图谱包含资源投入信息"),b?.risks.length&&a.fields.some(a=>"risks"===a.sourceDomain)&&c.push("项目图谱包含风险与管控要求"),b?.requirements.length&&a.fields.some(a=>"requirements"===a.sourceDomain)&&c.push("项目图谱包含招标/管理要求"),b?.siteConditions.length&&a.fields.some(a=>"siteConditions"===a.sourceDomain)&&c.push("项目图谱包含现场条件约束"),c.length?c.join(";"):`章节包含“${a.moduleTitles.join("、")}”模块,按施工组织设计标准表格库生成。`}(c,a.projectGraph),fields:c.fields,sourceDomains:d,necessity:f,belongsToChapter:!0,scopeExplanation:`表格归属于“${b.title}”中“${c.moduleTitles.join("、")}”相关管理对象。`,triggerFacts:Object.values(a.canonicalFacts?.byKey||{}).filter(a=>c.triggerKeywords.some(b=>V(`${a.label}${a.value}`).includes(V(b)))).map(a=>`${a.label}=${a.value}`),triggerGraphNodes:c.triggerKeywords.filter(a=>e.includes(V(a))),fillability:g,outputDecision:h,rowSeeds:function(a,b,c){let d=[],e=(b,c,e,f)=>{if(!V(`${b}${e}`)||d.some(a=>V(a.rowLabel)===V(b)))return;let g=a.fields.filter(a=>V(e).includes(V(a.name))||"projectFactOnly"!==a.fallbackPolicy).map(a=>a.name),h=a.fields.filter(a=>a.required&&!g.includes(a.name)&&"projectFactOnly"===a.fallbackPolicy).map(a=>a.name);d.push({rowLabel:b,source:c,confirmedFields:g,missingFields:h,sourceRef:f})};for(let b of Object.values(c?.byKey||{}))a.triggerKeywords.some(a=>V(`${b.label}${b.value}`).includes(V(a)))&&e(b.label,"canonicalFact",b.value,b.sourceFile);for(let c of b?.resources||[])(a.fields.some(a=>"resources"===a.sourceDomain)||a.triggerKeywords.some(a=>V(`${c.name}${c.type}`).includes(V(a))))&&e(c.name,"equipment"===c.type||"material"===c.type||"labor"===c.type?"projectGraph":"standard",[c.spec,c.quantity,c.unit].filter(Boolean).join(" "),c.sourceFiles?.[0]);for(let c of b?.risks||[])(a.fields.some(a=>"risks"===a.sourceDomain)||a.triggerKeywords.some(a=>V(c.risk).includes(V(a))))&&e(c.risk,"projectGraph",[c.level,c.mitigation].filter(Boolean).join(" "),c.sourceFiles?.[0]);for(let c of b?.schedule||[])a.fields.some(a=>"schedule"===a.sourceDomain)&&e(c.milestone,"projectGraph",[c.duration,c.startDate,c.endDate].filter(Boolean).join(" "),c.sourceFiles?.[0]);return d.slice(0,24)}(c,a.projectGraph,a.canonicalFacts)}}),g=new Map((b.tablePlans||[]).map(a=>[a.id,a]));for(let a of f)g.set(a.id,a);let h=[...g.values()],i=W([...b.tableSections||[],...h.map(a=>a.title)]),j=W([...b.tableRequirements||[],...h.map(a=>`${a.title}:表头必须为“${a.fields.map(a=>a.name).join("、")}”;${a.fields.some(a=>"projectFactOnly"===a.fallbackPolicy)?"项目特有数字、日期、工程量、规格必须来自资料或项目图谱,不得编造。":"可按施工组织设计标准流程填写。"}`)]);return{...b,tableSections:i,tableRequirements:j,tablePlans:h}})}async function _(a){(0,M.Te)(a.signal);let b=[];if(0===a.scopedFilePaths.length)return b;let c=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.chapter.title),d=(c?1.6:1)*(/[、,,与和及]/.test(a.chapter.title)?1.4:1),e=Math.ceil((a.highRisk?18:10)*d),f=(function(a,b=[]){let c=a.sections||[],d=[...a.requiredFacts,...b],e=(0,N.Cr)(c,a=>(0,N.Ox)(a),{maxItems:16,maxChars:1200},"retrieval-sections").selected,f=(0,N.Cr)(d,a=>(0,N.Ox)(a),{maxItems:16,maxChars:1200},"retrieval-facts").selected,g=/[、,,与和及]/.test(a.title),h=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.title),i=/进度|工期|节点/u.test(a.title)?["合同工期","计划工期","日历天","开工","竣工","关键线路","进度计划","施工进度"]:/质量|验收/u.test(a.title)?["质量标准","验收规范","检验批","复验","合格","质量保证","隐蔽验收"]:/安全|危大|风险/u.test(a.title)?["安全措施","风险源","危大工程","应急","检查整改","安全防护","应急预案"]:h?["工程量清单","项目特征","材料设备","规格型号","数量单位","劳动力","机械设备","进场计划","资源保障","主要材料","施工机具","材料供应","设备配置"]:/施工|方案|方法|技术|工艺/u.test(a.title)?["施工方法","工艺流程","技术标准","构造做法","控制要点","施工准备"]:["工程范围","施工方法","控制要点","验收要求"],j=g?[...i,...a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4)]:i,k=[...new Set([a.title,...e,...f,...j].flatMap(a=>a.split(/[\s、,,。;;::()()《》【】\-/]+/u)).map(a=>a.trim()).filter(a=>a.length>=2))],l=(0,N.Cr)(k,a=>(0,N.Ox)(a),{maxItems:36,maxChars:1200},"retrieval-tokens").selected,m=g?a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4).map(a=>`${a} ${e.slice(0,6).join(" ")} ${f.slice(0,4).join(" ")}`.trim()):[];return[...new Set([`${a.title} ${e.join(" ")}`.trim(),...f.map(b=>`${a.title} ${b}`.trim()),...e.map(b=>`${a.title} ${b} ${f.slice(0,6).join(" ")}`.trim()),`${a.title} ${j.join(" ")}`.trim(),...m,l.join(" ")].filter(Boolean))]})(a.chapter,a.requiredNeeds).slice(0,e),g=Math.ceil((a.highRisk?24:14)*(c?1.4:1)),h=Math.ceil((a.highRisk?72:42)*d),i=Math.ceil((a.highRisk?72e3:42e3)*d),j=await (0,M.l$)(f,async b=>{var c;(0,M.Te)(a.signal);let d=await a.manager.search(a.projectRoot,b,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:g,weights:{keyword:.62,vector:.32,rewrite:.9,hybridBonus:.28},generationMode:!1});return(c={chapter:a.chapter,results:d.results.filter(b=>a.scopedFilePaths.includes(b.filePath)),fileRoleByPath:a.fileRoleByPath,fileProcessingByPath:a.fileProcessingByPath,boost:2.4,source:"deep-retrieval"}).results.map(a=>{let b=c.fileProcessingByPath.get(a.filePath);return{chapterId:c.chapter.id,filePath:a.filePath,score:a.score+c.boost+("table"===b?3:"structured_data"===b?2.6:3.2*("bill_of_quantities"===b)),content:a.content,roleId:c.fileRoleByPath.get(a.filePath),processingType:b,sectionTitle:a.sectionTitle,source:c.source}})},{kind:"deepRetrieval",highRisk:a.highRisk});return b.push(...j.flat()),(0,s.QR)(b,{maxItems:h,maxChars:i,preservePinned:!0})}var aa=c(73024),ab=c(15751),ac=c(11248),ad=c(95734);function ae(a){let b=[],c=new Set;for(let d of a.filter(a=>"table"===a.processingType||"structured_data"===a.processingType||"bill_of_quantities"===a.processingType)){if(c.has(d.filePath))continue;c.add(d.filePath);let a=(0,g.aY)(),f=e.isAbsolute(d.filePath)?d.filePath:aa.existsSync(e.join(a,"knowledgeBase",d.filePath))?e.join(a,"knowledgeBase",d.filePath):e.join(a,d.filePath),h=e.extname(d.filePath).toLowerCase();if(aa.existsSync(f)&&[".xlsx",".xls",".csv"].includes(h))try{let a=ab.readFile(f,{cellDates:!0,sheetStubs:!1});for(let c of a.SheetNames){let e=a.Sheets[c],f=ab.utils.sheet_to_json(e,{header:1,raw:!1,defval:""}).map(a=>a.map(a=>String(a).trim())).filter(a=>a.some(Boolean));if(f.length<2)continue;let g=f.findIndex(a=>a.filter(Boolean).length>=2);if(g<0)continue;let h=f[g].filter(Boolean),i=f.slice(g+1).map(a=>a.slice(0,h.length)).filter(a=>a.some(Boolean));0!==i.length&&b.push({tableType:d.roleId||"table",sheet:c,headers:h,rows:i,sourceFile:d.filePath,sourceRange:e["!ref"]})}continue}catch{}let i=d.content.split("\n").map(a=>a.trim()).filter(Boolean).filter(a=>a.includes("|")||a.includes(" ")||a.includes(","));if(i.length<2)continue;let j=i[0].includes("|")?"|":i[0].includes(" ")?" ":",",k=i.map(a=>a.split(j).map(a=>a.trim()).filter(Boolean)).filter(a=>a.length>1);k.length<2||b.push({tableType:d.roleId||"table",headers:k[0],rows:k.slice(1),sourceFile:d.filePath,sourceRange:d.sectionTitle})}return b}function af(a,b,c){let d=(0,u.Uy)(b,c).map(a=>({field:a,pattern:function(a){let b=a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");return RegExp(`${b}[::\\s]+([^\\n,。;;]+)`,"u")}(a.name)})),e=[];for(let b of a)for(let{field:a,pattern:c}of d){if(!(0,u.I2)(b,a))continue;let d=b.content.match(c),f=d?.[1]?.trim();!f||!(f.length<=220)||o(l,f)||p(l,f)||e.some(b=>b.fieldId===a.id&&b.value===f)||e.push({key:a.name,fieldId:a.id,fieldName:a.name,value:f,sourceFile:b.filePath,roleId:b.roleId||"unknown",processingType:b.processingType,confidence:b.score,sourceRef:{filePath:b.filePath,roleId:b.roleId||"unknown",processingType:b.processingType,sectionTitle:b.sectionTitle}})}return e}async function ag(a,b,c,d,e){let f=[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"LLM JSON 抽取未启用或无可用模型"}],g=Math.max(12e3,Math.floor(Number(process.env.DOCUMENT_FACT_EXTRACTION_MAX_CHARS??45e3))),h=Math.max(8,Math.floor(Number(process.env.DOCUMENT_FACT_EXTRACTION_MAX_ITEMS??48))),i=0,j=[];for(let b of[...a].sort((a,b)=>b.score-a.score).slice(0,h)){let a=(0,M.lG)(b.content).replace(/\s+/gu," ").slice(0,Math.max(800,Math.floor(g/h))),c=`文件:${b.filePath}
|
|
17
|
-
角色:${b.roleId||""}
|
|
18
|
-
处理:${b.processingType||""}
|
|
19
|
-
内容:${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,M.Te)(e);let l=(0,u.Uy)(c,d),m=l.map(a=>`- id=${a.id} name=${a.name} type=auto required=${a.required} sourceRoleIds=${a.sourceRoleIds.join(",")||"不限"} hint=${a.extractionHint||"无"}`).join("\n"),n=await (0,ad.bb)(b||"你是文档事实抽取器。",`请严格按下面的动态事实 schema 从资料中抽取事实。只抽取资料明确支持的内容;如果字段限定 sourceRoleIds,必须优先来自对应文件角色;事实取舍和冲突处理遵循规范包字段说明、文件角色和提示词角色配置。
|
|
20
|
-
返回 {"facts":[{"fieldId":"...","fieldName":"...","key":"...","value":"...","sourceFile":"...","roleId":"...","processingType":"reference","confidence":0.8}]}。
|
|
21
|
-
|
|
22
|
-
动态事实 schema:
|
|
23
|
-
${m}
|
|
24
|
-
|
|
25
|
-
资料:
|
|
26
|
-
${k}`,{signal:e,maxTokens:1800,temperature:.1});return((0,M.Te)(e),n?.facts?.length)?{facts:n.facts.filter(a=>a.key&&a.value).map(a=>{let b=l.find(b=>b.id===a.fieldId||b.name===a.fieldName||b.name===a.key);return{key:b?.name||a.key,fieldId:b?.id||a.fieldId,fieldName:b?.name||a.fieldName,value:(0,M.lG)(a.value),sourceFile:a.sourceFile||"",roleId:a.roleId||"llm",processingType:a.processingType,confidence:a.confidence??.8,sourceRef:{filePath:a.sourceFile||"",roleId:a.roleId||"llm",processingType:a.processingType}}}),stages:[{type:"fact_extraction",roleId:"llm-json",status:"success",message:`LLM 按动态 schema 抽取 ${n.facts.length} 条事实`}]}:{facts:[],stages:f}}let ah=/(?:\b[A-Z]{1,8}[\w./-]*\d[\w./-]*\b|\b\d+(?:\.\d+)?\s*(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|L|ml|MPa|kPa|℃|%|台|套|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年|万元|元)\b|\b\d+\s*[×xX]\s*\d+(?:\s*[×xX]\s*\d+)?\b|\b(?:GB|GB\/T|ISO|IEC|IEEE|RFC|API|DB\d*|T\/[A-Z]+)\s*[\w.-]+\b)/giu;function ai(a){return(0,M.lG)(a).replace(/[\u00A0\u2002-\u200B\u3000]/gu," ").replace(/([\p{Script=Han}])\s+([\p{Script=Han}])/gu,"$1$2").replace(/(\d)\s+(日历天|天|个月|月|年|万元|元|㎡|平方米|米|m|mm|MPa|kPa|%)/giu,"$1$2").replace(/(合同|投资|工程|项目)\s*估\s*算\s*(?:价格|价)/gu,"$1估算价").replace(/计划\s*工\s*期/gu,"计划工期").replace(/合同\s*工\s*期/gu,"合同工期").replace(/质量\s*标\s*准/gu,"质量标准").replace(/建设\s*地\s*点/gu,"建设地点").replace(/建设\s*规\s*模/gu,"建设规模").replace(/招标\s*范\s*围/gu,"招标范围").replace(/最高\s*投\s*标\s*限\s*价/gu,"最高投标限价").replace(/招标\s*控\s*制\s*价/gu,"招标控制价").replace(/[::]\s*/gu,":").replace(/\s+/gu," ").trim()}let aj=[{fieldId:"project_name",key:"项目名称",fieldName:"项目名称",pattern:/(?:项目名称|工程名称|招标项目名称)[::\s为是]+([^\n。;;]{2,120})/u},{fieldId:"project_code",key:"项目编号",fieldName:"项目编号",pattern:/(?:项目编号|招标项目编号|工程编号)[::\s为是]+([A-Za-z0-9\-_.()()]{4,80})/u},{fieldId:"owner",key:"招标人",fieldName:"招标人",pattern:/(?:招标人|建设单位|发包人)[::\s为是]+([^\n。;;]{2,120})/u},{fieldId:"project_location",key:"建设地点",fieldName:"建设地点",pattern:/建设地点[::\s为是]+([^\n。;;]{2,100})/u},{fieldId:"project_scale",key:"建设规模",fieldName:"建设规模",pattern:/建设规模[::\s为是]+([^\n。;;]{2,220})/u},{fieldId:"project_scope",key:"招标范围",fieldName:"招标范围",pattern:/招标范围[::\s为是]+([^\n。;;]{2,220})/u},{fieldId:"schedule_requirement",key:"计划工期",fieldName:"周期要求",pattern:/(?:(?:计划工期|合同工期|总工期)[::\s为是约]*|工期[::\s为是约]+)([^\n。;;]{0,40}?\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年)(?:[^\n。;;]{0,30})?)/u},{fieldId:"quality_standard",key:"质量标准",fieldName:"质量标准",pattern:/质量标准[::\s为是]+([^\n。;;]{1,60})/u},{fieldId:"project_investment_estimate",key:"合同估算价格",fieldName:"项目投资估算",pattern:/(?:合同估算价格|合同估算价|投资估算|估算价格|工程估算价|项目估算价|最高投标限价|招标控制价)[::\s为是约]+([^\n。;;]{0,80}?\d+(?:\.\d+)?\s*(?:万元|元))/u}];function ak(a,b){let c=ai((0,M.lG)(b));return!(!a||!c||c.length>260||/###|第\s*\d+\s*页|共\s*\d+\s*页|律师代理费|投标文件的编制|备选投标方案|投标将被否决|投标人提供|投标有效期|电子交易系统|公共资源交易监督管理部门|中标候选|评标委员会|实质性内容作出响应/u.test(c)||/签章|盖章|联系人|联系电话|电话|邮箱|解密|开标|评标|保证金|交易系统|空白|填写|上传|下载|递交/u.test(c))&&("schedule_requirement"===a?c.length<=90&&/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年)/u.test(c):"quality_standard"===a?c.length<=40&&/合格|优良|一次性验收|国家.*验收|达到/u.test(c)&&!/工期|投标|技术标准/u.test(c):"owner"===a?c.length>=4&&c.length<=80&&/公司|局|委员会|中心|处|院|所|校|集团|有限|股份|责任|管理/u.test(c)&&!/将报|监督管理部门|投标人|中标|负责解释|见招标|详见|空白|填写/u.test(c):"project_location"===a?c.length<=120&&!/见招标公告|详见|投标/u.test(c):"project_code"===a?/^[A-Za-z0-9\-_.()()]+$/u.test(c):"project_investment_estimate"===a?c.length<=100&&/\d+(?:\.\d+)?\s*(?:万元|元)/u.test(c):c.length<=220)}function al(a){let b=[],c=new Set;for(let d of a)for(let a of ai(d.content).split(/\r?\n/u).flatMap(a=>{let b=a.replace(/\s+/gu," ").trim();return b.length>260?b.split(/(?=\d+(?:\.\d+)?\s*[^\s::]{2,12}[::])/u):[b]}).filter(Boolean))if(!/报价明细|综合单价|税率|增值税|利润|结算/u.test(a)||/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(a))for(let e of aj){let f=e.pattern.exec(a),g=f?.[1]?.trim();if(!g||!ak(e.fieldId,g))continue;let h=`${d.filePath}:${e.fieldId}:${g}`;c.has(h)||(c.add(h),b.push({key:e.key,fieldName:e.fieldName,fieldId:e.fieldId,value:g,sourceFile:d.filePath,roleId:d.roleId||"project_basic_fact",processingType:d.processingType||"reference",confidence:Math.max(.82,d.score||.82),sourceRef:{filePath:d.filePath,roleId:d.roleId||"project_basic_fact",processingType:d.processingType||"reference",sectionTitle:d.sectionTitle}}))}return b.slice(0,80)}function am(a,b=l){let c=[],d=new Set;for(let e of a){let a=`${e.roleId||""} ${e.processingType||""} ${e.filePath} ${e.sectionTitle||""}`;if(!/drawing|table|bill|boq|draw|data|sheet|spec|standard|record|report|表格|数据|规格|参数|标准|记录|报告|清单|图纸|说明/u.test(a)&&e.score<.75)continue;let f=(0,M.lG)(e.content).replace(/\s+/gu," ");for(let a of f.matchAll(ah)){let g=a[0].trim();if(!g||o(b,g))continue;let h=Math.max(0,(a.index||0)-40),i=Math.min(f.length,(a.index||0)+g.length+40),j=f.slice(h,i);if(p(b,j)||q(b,j))continue;let k=`${e.filePath}:${g}`;d.has(k)||(d.add(k),c.push({key:"精确参数",fieldName:"技术参数",fieldId:"technical_parameter",value:g,sourceFile:e.filePath,roleId:e.roleId||"precise_fact",processingType:e.processingType||"precise",confidence:Math.max(.7,e.score||.7),sourceRef:{filePath:e.filePath,roleId:e.roleId||"precise_fact",processingType:e.processingType||"precise",sectionTitle:e.sectionTitle}}))}}return c.slice(0,240)}function an(a){return`${a.key} ${a.fieldName||""} ${a.value} ${a.roleId} ${a.processingType||""} ${a.sourceFile}`}function ao(a){return/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|项目估算价|最高投标限价|招标控制价/u.test(a)}function ap(a){let b=an(a);return!ao(b)&&/投标保证金|发票类型|开标时间|公共资源交易监督管理|不良行为记录|投诉举报|资质投诉|投标承诺|违约金|中标服务费|交易平台|保证金账户|投标有效期|报价明细|投标报价|单价|合价|税率|增值税|利润|结算/u.test(b)}function aq(a){return(0,M.lG)(a).replace(/\s+/gu," ").trim()}function ar(a,b=[]){return[...new Set([a,...b,...a.split(/[\s、,。;;::/\\_-]+/u)].map(aq).filter(a=>a.length>=2))]}function as(a,b,c){var d,e;let f=aq(c.label);if(!f||o(b,f)||p(b,f))return;let g=c.id||(d=c.source,e=c.fieldId,`${d}:${e||f}`.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-|-$/gu,"")||`${d}-${Math.random().toString(36).slice(2,8)}`),h=c.queries?.length?c.queries.map(aq).filter(Boolean):ar(f),i=a.find(a=>a.id===g||a.label===f);if(i){i.required=i.required||c.required,i.queries=[...new Set([...i.queries,...h])];return}a.push({...c,id:g,label:f,queries:h})}function at(a,b,c,d,e,f=[]){"do_not_use"!==c.usagePolicy&&"diagnostic_only"!==c.usagePolicy&&"forbidden"!==c.derivationPolicy&&as(a,b,{label:c.name,category:c.category,required:e,source:d,fieldId:c.id,queries:ar(c.name,[...c.aliases,...f])})}function au(a){let b=new Set;return a.filter(a=>{let c=`${a.sourceFile}:${a.key}:${a.value}`;return!b.has(c)&&(b.add(c),!0)})}function av(a){let b=a.profile||l,c=au([...a.factsModel.factIndex.parameterFacts,...a.factsModel.factIndex.tableFacts,...a.factsModel.factIndex.drawingFacts,...a.factsModel.factIndex.billFacts,...a.factsModel.factIndex.reliableFacts]);return a.needs.map(d=>{let e=au(c.filter(a=>(function(a,b,c){let d=an(a);if(ap(a)||o(c,d)||p(c,d))return!1;if(b.fieldId&&a.fieldId===b.fieldId||n(c,a.fieldName||a.key)?.id===b.fieldId||b.queries.filter(a=>a.length>=2).some(a=>d.includes(a)))return!0;let e=n(c,b.label);return!!(e&&[e.name,...e.aliases].some(a=>a.length>=2&&d.includes(a)))})(a,d,b))).sort((a,b)=>(b.confidence||0)-(a.confidence||0)),f=(a.evidence||[]).filter(a=>(function(a,b,c){let d=`${a.filePath} ${a.roleId||""} ${a.processingType||""} ${a.sectionTitle||""} ${a.content}`;return!(o(c,d)||p(c,d))&&b.queries.some(a=>a.length>=2&&d.includes(a))})(a,d,b)),g=Math.max(0,...e.map(a=>a.confidence||0)),h=0===e.length&&0===f.length?"missing":g>0&&g<.58?"low_confidence":"satisfied";return{need:d,facts:e,evidence:f,status:h}})}function aw(a){return(0,M.lG)(a).replace(/\s+/gu," ").trim().slice(0,220)}function ax(a,b=[],c=[],d,e=l){let f=b=>a.filter(a=>b.some(b=>`${a.key} ${a.fieldName||""}`.includes(b))),g=b=>a.filter(a=>a.processingType===b||a.roleId.includes(b)),h=a.filter(a=>{let b=`${a.key} ${a.fieldName||""} ${a.value}`;return/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|ISO|IEC|IEEE|RFC|API|台|套|个|项|批|次|份|人|㎡/iu.test(b)&&(!o(e,b)||ao(b))&&!p(e,b)}),i=a.filter(a=>"table"===a.processingType||"structured_data"===a.processingType||"bill_of_quantities"===a.processingType||/bill|boq|table|sheet|data|表格|列表|明细|数据/u.test(`${a.roleId} ${a.sourceFile}`)),j=a.filter(a=>/项目名称|工程名称|项目编号|招标项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`)).slice(0,80),k=function(a,b,c,d){let e=a.filter(a=>p(d,an(a))||q(d,an(a))),f=a.filter(a=>{let b=an(a);return a.confidence>=.58&&!ap(a)&&!o(d,b)&&!p(d,b)&&!q(d,b)}),g=[...b.filter(a=>!ap(a)),...f.filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|JGJ|ISO|IEC|台|套|个|项|批|次|份|人|㎡|型号|规格|数量|单位/iu.test(an(a)))].filter((a,b,c)=>c.findIndex(b=>b.sourceFile===a.sourceFile&&b.value===a.value&&b.key===a.key)===b).slice(0,360),h=f.filter(a=>"table"===a.processingType||/table|sheet|表格|清单|明细|数据|参数行摘要/u.test(an(a))),i=f.filter(a=>"drawing"===a.processingType||/drawing|draw|dwg|图纸|设计|尺寸|标高|管径|做法/u.test(an(a)));return{reliableFacts:f.slice(0,500),parameterFacts:g,tableFacts:h.slice(0,240),drawingFacts:i.slice(0,240),billFacts:c.slice(0,240),diagnostics:e.slice(0,120)}}(a,h,i,e);return{project:j,schedule:f(["工期","开工","竣工","节点","周期"]),quality:f(["质量","验收"]),safety:f(["安全","风险"]),resources:f(["劳动力","材料","机械","设备","资源"]),tables:b,drawings:g("drawing"),bills:i,preciseFacts:h,rules:g("rule"),specifications:g("specification"),schemaFacts:function(a,b){let c={};for(let d of b?.factFields||[])c[d.id]=a.filter(a=>a.fieldId===d.id||a.key===d.name||a.fieldName===d.name);return c}(a,d),factIndex:k,missing:[...new Set(c)],conflicts:function(a,b,c=l){let d=(b?.factFields.map(a=>a.name)||[...new Set(a.map(a=>a.fieldName||a.key))]).filter(a=>(function(a,b){let c=n(b,a);return c?"single"===c.cardinality&&"ignore"!==c.conflictPolicy&&"allow_multiple"!==c.conflictPolicy:/项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数|工期|质量标准|合同价格形式|绿色建筑等级|投标有效期|质保期/u.test(a)})(a,c)),e=[];for(let b of d){let d=a.filter(a=>a.key===b||a.fieldName===b||n(c,a.fieldName||a.key)?.name===b),f=new Map;for(let a of d){let b=function(a,b){let c=(0,M.lG)(a).trim();if(p(b,c)||o(b,c)||(c.match(/�|/gu)?.length||0)>=2||Array.from(c).some(a=>{let b=a.charCodeAt(0);return 65533===b||b<32&&9!==b&&10!==b&&13!==b})||/签章|盖章|联系人|联系电话|电话|邮箱|解密|开标|评标|保证金|交易系统|空白|填写|上传|下载|递交/u.test(c)||/\|/u.test(c)||/^#+\s*/u.test(c)||/见(?:招标公告|投标人须知|前附表|本项目|补疑)|资料参数行摘要|公共资源交易监督管理|开评标程序|监管部门/u.test(c)||/是否|符合|采购范围|规定的投标截止时间|电子交易系统/u.test(c)&&/\d{3,}/u.test(c))return"";let d=c.match(/\d+\s*日历天/u)?.[0]?.replace(/\s+/gu,"");if(d&&/工期|日历天|开工日期|竣工/u.test(c))return d;let e=(0,ac.K3)((0,M.lG)(c));return e&&!(e.length>80)&&/[\d年月日%]|合格|一星|二星|三星|总价合同|单价合同|承台|框架|装配式/u.test(c)?e:""}(a.value,c);b&&f.set(b,[...f.get(b)||[],a])}if(f.size>1){let a=[...f.values()].slice(0,4).map(a=>`${(0,M.lG)(a[0].value).slice(0,120)}(${[...new Set(a.map(a=>a.sourceFile))].slice(0,3).join("、")})`).join(" vs ");e.push(`事实冲突:${b} 存在多个来源值:${a}`)}}return e.slice(0,8)}(a,d,e)}}var ay=c(80439),az=c(74329);async function aA(a,b,c,d){let e=Date.now();try{return await c()}finally{let c=Date.now();a.metrics.push({name:b,startedAt:e,endedAt:c,durationMs:c-e,meta:d})}}async function aB(a){(0,M.Te)(a.signal);let b=a.repairType||function(a){let b=a.join("\n");for(let a of az.NP)if(a.pattern.lastIndex=0,a.pattern.test(b))return a.type;return"generic"}(a.issues),c=a.contextChapters?.length?`
|
|
27
|
-
|
|
28
|
-
周边章节上下文(仅用于衔接,禁止改动其中内容):
|
|
29
|
-
${a.contextChapters.map(a=>`【${a.title}】
|
|
30
|
-
${a.content.slice(0,2500)}`).join("\n\n")}`:"",d=await (0,ad.bb)(["你是章节局部修复专家。只返回 JSON patch,不返回完整章节,不重写无问题内容。",az._$[b]||az._$.generic,v.rd,a.forbidDrawingImages?"图片类资料只作为文本事实来源,禁止插入图片或 Markdown 图片语法。":"","每个 patch 必须能通过 originalText 或 targetStart/targetEnd 在原章节中唯一定位;replacement 只替换该局部片段。","只修复列出的问题,不得整章重写,不得删除无问题小节,不得改变一级/二级章节结构。","如问题涉及缺少正式表格,replacement 必须包含 Markdown 表名、表头、分隔线和至少一行数据;不得只写“见下表”或空表。","如问题涉及提示词要求的关键词或禁用内容,只在相关段落自然补齐或替换,不得堆砌关键词。","禁止新增证据摘要中没有的信息;无法安全定位的问题不要生成 patch。",'返回 JSON:{"patches":[{"originalText":"原局部文本","targetStart":"定位起始文本","targetEnd":"定位结束文本","replacement":"替换后的局部文本","reason":"修复原因"}]}',a.promptTexts].filter(Boolean).join("\n\n"),[`模板:${a.template.name}`,`章节:${a.chapter.title}`,a.requirement?`用户要求:${a.requirement}`:"",`需要局部修复的问题:
|
|
31
|
-
${a.issues.map(a=>`- ${a}`).join("\n")}`,a.chapter.evidence.length?`本章证据摘要:
|
|
32
|
-
${(0,s.ks)((0,s.QO)({id:a.chapter.id,title:a.chapter.title,purpose:a.chapter.title,queries:[],requiredFacts:[]},a.chapter.evidence),{maxChars:(0,s.Pc)((0,w.V7)(a.chapter.content),5e3,14e3)})}`:"","当前章节 Markdown:",a.chapter.content,c].filter(Boolean).join("\n\n"),{maxTokens:2200,temperature:0,signal:a.signal,diagnostics:a.diagnostics});(0,M.Te)(a.signal);let e=a.chapter.content,f=0;for(let b of Array.isArray(d?.patches)?d.patches:[]){let c=function(a){var b;let c=a.patch.replacement?.trim(),d=(b=a.content,Math.max(2600,Math.min(16e3,Math.ceil(.45*(0,w.V7)(b)))));if(!c||c.length>d||a.forbidDrawingImages&&/!\[[^\]]*\]\([^)]*\)/iu.test(c))return{content:a.content,applied:!1};let e=function(a,b){let c=b.originalText?.trim();if(c&&a.indexOf(c)===a.lastIndexOf(c))return c;let d=b.targetStart?.trim(),e=b.targetEnd?.trim();if(!d||!e)return;let f=a.indexOf(d),g=a.indexOf(e,f+d.length);if(f<0||g<0)return;let h=g+e.length,i=a.slice(f,h);return a.indexOf(i)===a.lastIndexOf(i)?i:void 0}(a.content,a.patch);if(!e||e.length>d)return{content:a.content,applied:!1};let f=(0,v.kT)((0,v.FD)(a.content.replace(e,c),a.forbidDrawingImages));return!function(a,b){let c=(a.match(/```/gu)||[]).length,d=b.replace(/^第[一二三四五六七八九十百千万]+章\s*/u,"").trim();return c%2==0&&(!d||a.includes(d))&&!/^\s*$/u.test(a)}(f,a.title)||(0,w.V7)(f)<Math.floor(.65*(0,w.V7)(a.content))?{content:a.content,applied:!1}:{content:f,applied:f!==a.content}}({content:e,patch:b,title:a.chapter.title,forbidDrawingImages:a.forbidDrawingImages});e=c.content,c.applied&&(f+=1)}return{content:e,appliedCount:f,repairType:b}}function aC(a,b,c){return function(a,b){let c=e.resolve(a),d=function(a,b){let c=e.resolve(a);if(e.isAbsolute(b))return e.resolve(b);let d=e.resolve(c,"knowledgeBase",b);return aa.existsSync(d)?d:e.resolve(c,b)}(c,b);return d===c||d.startsWith(`${c}${e.sep}`)}(a,b)&&c.size>0&&(function(a,b){let c=e.isAbsolute(b)?b:e.join(a,b),d=e.isAbsolute(b)?e.relative(a,b):b;return[b,c,d,e.join(a,d)]})(a,b).some(a=>c.has(a))}function aD(a){return a.map(a=>`## [${a.roleId}/${a.category}] ${a.name}
|
|
33
|
-
${function(a){let b=a.replace(/```([\s\S]*?)```/gu,(a,b)=>/<OUTLINE>|\|\s*[^\n]+\s*\||#{1,6}\s+|必须|禁止|不得|应当|要求|规则|格式|输出|表格|章节|小节|正文/u.test(b)?`
|
|
34
|
-
${b.trim()}
|
|
35
|
-
`:"\n【示例代码块已省略:仅作为格式参考,不作为当前文档事实】\n").split(/\r?\n/u),c=[],d=!1,e=!1;for(let a of b){let b=a.trim();if((0,t.bl)(b)&&(e=!0),e){c.push(a),(0,t.Ui)(b)&&(e=!1);continue}let f=/^(?:#+\s*)?(?:示例|样例|范例|例如|参考示例|示例数据|示例正文|示例目录|example|sample)\s*[::]?/iu.test(b),g=/(?:不得|禁止|必须|应当|要求|规则|格式|输出|保留|只返回|不要|表格|章节|小节|正文|目录|封面)/u.test(b);if(f&&!g){c.at(-1)?.includes("示例内容已省略")||c.push("【示例内容已省略:仅作为格式参考,不作为当前文档事实】"),d=!0;continue}if(d){if(!b){d=!1;continue}if(!(/^(?:#+\s*)?(?:规则|要求|输出|格式|禁止|注意|正文|章节|小节|表格|风格|校验)/u.test(b)||/\|\s*[^\n]+\s*\|/u.test(b)))continue;d=!1}c.push(a)}return c.join("\n").replace(/\n{3,}/gu,"\n\n").trim()}(a.content)}`).join("\n\n")}var aE=c(2773),aF=c(95393);function aG(a,b){let c=`${a} ${b}`,d=[/概况|工程|项目/u.test(c)?"必须落入项目名称、范围、地点、规模、工期、质量目标等资料事实;说明编制边界。":"",/部署|总体|组织/u.test(c)?"必须说明施工组织逻辑、施工段/专业接口、资源进场和管理闭环。":"",/进度|工期/u.test(c)?"必须围绕总工期、关键线路、资源保障、穿插施工和纠偏机制展开。":"",/质量/u.test(c)?"必须覆盖材料验收复验、过程检查、隐蔽验收、整改复验和质量资料归档。":"",/安全|文明|风险|危大/u.test(c)?"必须覆盖风险识别、人员设备、临电消防、现场文明、检查整改和应急响应。":"",/资源|材料|设备|劳动力/u.test(c)?"必须说明资源配置依据、进场验收、保管调配,并与工期和质量目标一致。":"",/施工|工艺|技术|方案/u.test(c)?"必须写清施工准备、工艺流程、关键控制点、验收要求和资料依据。":""].filter(Boolean);return["【小节专业任务卡】",`任务对象:${b}`,...d.length?d:["必须结合本项目资料明确事实说明对象范围、实施方法、控制要点、验收要求和资料闭环,避免泛化套话。"]].join("\n")}function aH(a){return(0,t.GQ)(a.replace(/\*+/gu,"")).replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分、..\s-]*/u,"").replace(/^\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^[-—–]\s*/u,"").replace(/[<>]/gu,"").replace(/[::。;;,.,]+$/gu,"").trim()}function aI(a){let b=aH(a).replace(/\s+/gu,"");return!!(!b||/^(?:目录|章节|大纲|要求|说明|注意|输出|格式|示例|例如|写法|占位|提示)$/u.test(b))||/^(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用)|^(?:如|若|如果)(?:涉及|不涉及|适用|不适用)|(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成)|按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|说明要求|注意事项/u.test(b)}function aJ(a,b){let c=aH(a),d=aH(b);if(c.length<4||c.length>60||c===d||aI(c)||/^(?:目标与范围|资料依据|实施内容|质量控制|概述|总体要求)$/u.test(c)||/^(?:雨季|冬季|高温|台风|大风等特殊气候|雨季、冬季、高温、台风、大风等特殊气候)$/u.test(c)||/如需|应由|大模型|提示词|上下文|动态规划|OUTLINE|章节生成|按照.*明确指定|需求和资料|JSON|小节标题/u.test(c)||/(.)\1/u.test(c))return!0;let e=d.match(/[\p{L}\p{N}]{2,6}$/u)?.[0]||"";return!(!(e.length>=2&&/^.{2,8}\p{L}$/u.test(c)&&c.endsWith(e.slice(-1)))||c.includes(e))}function aK(a,b){let c=aH(a).replace(/[\s()()::.。;;,,、-]/gu,""),d=aH(b).replace(/[\s()()::.。;;,,、-]/gu,"");return!!c&&!!d&&(c===d||c.includes(d)||d.includes(c))}function aL(a){return/判断是否涉及|若涉及|若不涉及|如果涉及|如果不涉及|不涉及.*如实说明|根据项目所在地气候特征|根据计划施工周期|根据.*施工周期|按需|视情况|可设置|专项小节/u.test(a)}function aM(a,b=""){let c=aL(b);return Array.from(new Set(a.map(aH).filter(a=>!(a.length<2||a.length>30||aI(a)||/必须|强制|排序|设置|输出|独立|之后|之前|小节|其他必要/u.test(a)||c&&/^(?:雨季|冬季|高温|台风|大风等特殊气候|雨季、冬季、高温、台风、大风等特殊气候)$/u.test(a)))))}function aN(a){return a.split(/[、,,//]/u).map(a=>a.trim().replace(/["“”'‘’《》<>]/gu,"")).filter(a=>a.length>=2&&a.length<=24&&!/[。;;::]/u.test(a))}function aO(a){let b=new Set;for(let c of[/(?:关键词|核心要点|必含关键词|必须包含的关键词)[::]\s*([^。;;\n]+)/gu,/(?:必须|应当|需要|全文必须)包含(?:以下|如下)?(?:关键词|核心词|术语)[::]\s*([^。;;\n]+)/gu])for(let d of a.matchAll(c))for(let a of aN(d[1]||""))/表格|章节|小节|正文|目录|封面/u.test(a)||b.add(a);return[...b].slice(0,24)}function aP(a){let b=new Set;for(let c of[/(?:禁用词|禁止词|不得使用词|禁用表达|禁止表达)[::]\s*([^。;;\n]+)/gu,/(?:禁止|不得|严禁|杜绝)出现(?:以下|如下)?(?:词语|用词|表达|话术)[::]\s*([^。;;\n]+)/gu])for(let d of a.matchAll(c))for(let a of aN(d[1]||""))b.add(a);return[...b].slice(0,40)}function aQ(a,b){return a.split(/[。;;\n]/u).map(a=>a.trim()).filter(a=>a.length>=4&&b.test(a)).slice(0,24)}function aR(a,b){let c=RegExp(`(?:生成|包含|输出|需要|保留|设置|编制|制作)[^。;;\\n]{0,12}${b}|${b}[^。;;\\n]{0,12}(?:必须|应当|需要|保留|生成|输出|包含)`,"u").test(a);return RegExp(`(?:不要|不需要|不允许|不得|禁止|严禁|不输出|不生成|无需)[^。;;\\n]{0,12}${b}|${b}[^。;;\\n]{0,12}(?:不要|不需要|不允许|不得|禁止|严禁|不输出|不生成|无需)`,"u").test(a)?"forbidden":c?"required":"unspecified"}function aS(a=[],b){let c=[];for(let d of a){let a=aH(d);!(!a||aJ(a,b))&&(c.some(b=>aK(b,a))||c.push(a))}return c}async function aT(a){var b,c,d,e;let f=(0,s.ks)((0,s.QO)(a.chapter,a.evidence),{maxChars:(0,s.Pc)(a.targetWords,5e3,12e3)}),g=(b=a.structuralRules,c=a.chapter,d=a.chapterIndex,(b||[]).filter(a=>!!(void 0!==a.chapterIndex&&void 0!==d&&a.chapterIndex===d||a.chapterTitle&&aK(a.chapterTitle,c.title)))),h=g.flatMap(a=>a.requiredSections).sort((a,b)=>(a.order||0)-(b.order||0)).map(a=>a.title),i=function(a,b,c,d){let e=a.title,f=/质量|安全|工期|进度|物资|材料|机械|设备|劳动力|危大|专项|文明|总平面|施工方法|施工方案/u.test(e),g=b>=14e3?6:b>=8e3?5:b>=5e3||b>=3e3?4:3;f&&(g=Math.max(g,4));let h=new Set((c.map(a=>`${a.sectionTitle||""}
|
|
36
|
-
${a.content}`).join("\n").slice(0,3e4).match(/\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.-]+/giu)||[]).map(a=>a.replace(/\s+/gu,""))).size;return h>=20?g=Math.max(g,5):h>=10&&(g=Math.max(g,4)),Math.max(g,d)}(a.chapter,a.targetWords,a.evidence,h.length),j=Math.max(i,Math.min(7,a.targetWords>=8e3?7:6)),k=await (0,ad.bb)('你是专业文档结构规划专家。\n只根据用户提示词、章节标题和真实绑定资料规划本章二级小节;不得使用"目标与范围、资料依据、实施内容、质量控制"等通用占位小节凑数。\n施工组织、技术措施、资源配置、质量、安全、工期、材料、设备、劳动力、危大工程等核心章节必须拆成足够的专业工作面,不得只输出两个泛化小节。\n不得把提示词条件句或短语碎片作为小节标题,例如"判断是否涉、是否涉及、如涉及、雨季、冬季、高温、台风、大风等特殊气候"。\n只返回 JSON。',[`文档模板:${a.template.name}`,`章节标题:${a.chapter.title}`,a.chapter.purpose&&!aJ(a.chapter.purpose,a.chapter.title)?`章节目的:${a.chapter.purpose}`:"",a.requirement?`用户要求:${a.requirement}`:"",a.projectContext?`上下文:
|
|
37
|
-
${a.projectContext}`:"",a.roleContext,a.promptTexts?`配置写作主控提示词:
|
|
38
|
-
${a.promptTexts}`:"",h.length?`系统已从提示词解析出本章强制二级小节,必须按此顺序置于本章小节最前,不得删除、改名或重排:${h.join("、")}`:"",f?`真实绑定资料:
|
|
39
|
-
${f}`:"",`请输出 ${i}-${j} 个适合直接成稿的二级小节标题。标题必须具体、业务相关、能承载真实资料;每个标题控制在 16 个汉字以内,避免多个小节表达同一内容。核心章节不得只输出"总体部署与责任分工、实施流程与关键控制"两个泛化小节。`,'JSON 格式:{"sections":["小节标题1","小节标题2"]}'].filter(Boolean).join("\n\n"),{maxTokens:1600,temperature:.1,signal:a.signal,diagnostics:a.diagnostics}),l=Array.from(new Set(function(a){let b=aH(a),c=[],d=/体系|措施|管理|保障|方案|要求|计划|控制|配置/u,e=a=>{let b=/^(.*?)([^与和及、,,;;]+(?:[与和及][^与和及、,,;;]+)+)(的.+)$/u.exec(a);if(!b)return!1;let d=b[1]||"",e=b[3]||"";for(let a of b[2].split(/[与和及]/u))c.push(aH(`${d}${a}${e}`));return!0},f=a=>{let b=a.split(/[、,,]/u).map(aH).filter(Boolean);if(b.length>1&&b.every(a=>a.length>=4&&d.test(a))){for(let a of b)e(a)||c.push(a);return!0}let f=/^(.*?)([^、,,;;]+(?:[、,,][^、,,;;]+)+)(的.+)$/u.exec(a);if(!f)return!1;let g=f[1]||"",h=f[3]||"";for(let a of f[2].split(/[、,,]/u))c.push(aH(`${g}${a}${h}`));return!0};for(let a of b.split(/[;;]/u)){if(f(a)||e(a))continue;let d=aH(a);d&&d!==b&&c.push(d)}return Array.from(new Set(c)).filter(c=>c.length>=4&&c.length<=60&&c!==b&&!aJ(c,a))}(a.chapter.title)));for(let b of(k?.sections||[]).map(aH).filter(b=>!aJ(b,a.chapter.title)))l.some(a=>a.includes(b)||b.includes(a))||l.push(b);for(let b of[...[a.chapter.title,...a.chapter.requiredFacts||[],...a.chapter.queries||[]].flatMap(a=>String(a||"").split(/[;;。\n]/u)).map(aH).filter(b=>!aJ(b,a.chapter.title)),...(e=a.chapter.title,/质量/u.test(e)?["质量目标与质量管理体系","关键工序质量控制措施","材料设备进场验收与检验","质量检查试验与验收程序","质量通病防治与整改闭环","成品保护与资料管理"]:/安全/u.test(e)?["安全生产管理体系","危险源辨识与分级管控","现场安全防护措施","临时用电与机械设备安全管理","应急处置与安全检查整改","安全教育培训与交底"]:/工期|进度/u.test(e)?["总工期目标与节点安排","施工进度计划编制原则","关键线路与工序穿插安排","资源投入与工期保障措施","进度偏差纠偏与动态调整","工期风险识别与应对措施"]:/物资|材料/u.test(e)?["主要材料设备需求分析","材料采购与进场计划","材料验收复试与保管","周转材料配置与使用管理","材料供应风险与保障措施"]:/机械|设备/u.test(e)?["主要机械设备配置原则","机械设备进退场计划","机械设备调度与运行管理","机械设备维护保养与安全检查","关键设备保障措施"]:/劳动力/u.test(e)?["劳动力配置原则","各阶段劳动力投入计划","专业工种与特种作业人员配置","劳动力动态调配措施","劳务管理与教育交底"]:/文明|环保/u.test(e)?["现场封闭与场容场貌管理","环境保护与污染防治措施","材料设备定置化管理","职业健康与消防文明管理","文明施工检查与整改"]:/总平面|平面布置/u.test(e)?["施工总平面布置原则","临时道路与材料堆场布置","临时用水用电及排水布置","办公生活与加工区域布置","总平面动态调整与管理"]:/危大|专项/u.test(e)?["危大工程识别与清单管理","专项施工方案编制与审批","专家论证与技术交底","现场实施监测与旁站管理","应急处置与验收销项"]:/施工方法|施工方案|主要/u.test(e)?["总体施工部署与流程安排","主要分部分项施工方法","关键工序技术控制要点","资源配置与穿插组织","质量安全与成品保护措施"]:["总体部署与责任分工","实施流程与关键控制","资源配置与资料依据","质量安全与风险控制","检查验收与闭环管理","资料记录与成果移交"]).filter(b=>!aJ(b,a.chapter.title))]){if(l.length>=i)break;l.some(a=>a.includes(b)||b.includes(a))||l.push(b)}return(function(a,b,c){let d=aS(c.flatMap(a=>a.requiredSections).sort((a,b)=>(a.order||0)-(b.order||0)).map(a=>a.title),b);for(let c of aS(a,b))d.some(a=>aK(a,c))||d.push(c);return d})(l,a.chapter.title,g).slice(0,Math.max(j,h.length))}async function aU(a,b,c,d,e,f,g,h="",i={}){let j=(0,s.QO)(b,c),k=(0,s.ks)(j,{maxChars:(0,s.Pc)(i.targetWords||i.minWords)}),l=b.sections?.length?`本章小节由生成前规划得到,请完整包含并展开以下小节:
|
|
40
|
-
${b.sections.map(a=>`- ${a}`).join("\n")}`:"本章没有预设小节;请按用户提示词、模板章节、角色要求和绑定材料自然组织正文。",m=function(a,b){let c=aV(a,b);return 0===c.length?"":["本章小节篇幅计划(首轮生成应尽量一次达成,避免后续补写):",...c.map(a=>`- ${a.title}:约 ${a.targetWords} 字,至少达到 ${Math.floor(.8*a.targetWords)} 字,并写入与该小节相关的材料事实、适用边界和必要说明。`)].join("\n")}(b,i.targetWords||i.minWords||0),n=function(a){let b=a.tablePlans||[];return 0===b.length?"":["【本章表格/清单结构化生成要求】","以下表格来自项目图谱、事实主权模型与施工组织设计标准表格库的治理决策;不得按数量机械增减,必须按必要性、章节归属、证据可填性和输出形态执行。","只输出表格/清单本体和用户提示词明确要求的文字;不得输出系统来源说明、后台溯源列、固定表前后说明或占位话术。",...b.map((b,c)=>[`${c+1}. ${b.required?"必写":b.outputDecision?.shouldOutput?"应写":"参考"}:${b.title}`,` - 必要性:${b.necessity||(b.required?"must":"conditional")};输出形态:${b.outputDecision?.outputType||"markdown_table"};决策:${b.outputDecision?.decisionReason||"按章节内容需要输出。"}`,` - 适用模块:${b.moduleTitle}`,` - 章节归属:${b.scopeExplanation||`归属于${a.title}`}`,` - 生成原因:${b.reason}`,` - 表头字段:${b.fields.map(a=>a.name).join(" | ")}`,` - 字段来源:${b.fields.map(a=>`${a.name}←${a.sourceDomain}(${a.sourceHint})`).join(";")}`,b.fillability?.missingProjectFactFields.length?` - 字段约束:${b.fillability.missingProjectFactFields.join("、")} 必须继续从项目图谱、可信事实和绑定资料中取值;不得写固定占位话术。`:` - 可填性:已确认字段 ${b.fillability?.confirmedFieldCount??b.fields.length}/${b.fields.length}。`,b.rowSeeds?.length?` - 行级填充计划:${b.rowSeeds.slice(0,8).map(a=>`${a.rowLabel}(${a.source}${a.missingFields.length?`,字段待从资料补齐:${a.missingFields.join("/")}`:""})`).join(";")}`:"",` - 约束:${b.fields.some(a=>"projectFactOnly"===a.fallbackPolicy)?"projectFactOnly 字段必须来自项目资料、项目图谱或可信事实;不得编造,不得写占位话术。":"按项目资料、图谱事实和本章场景填写,不得输出固定套话。"}`].filter(Boolean).join("\n"))].join("\n")}(b),o=L(b),p=function(a){let b=`${a.title} ${(a.sections||[]).join(" ")} ${(a.queries||[]).join(" ")}`,c=J.filter(a=>a.pattern.test(b));return 0===c.length?"":["【隐藏高分模块触发】",...c.map(a=>`- ${a.title}:${a.prompt}`)].join("\n")}(b),q=[v.rd,i.forbidDrawingImages?"图片类材料只作为文本事实依据;禁止插入图片或 Markdown 图片语法。":"",e].filter(Boolean).join("\n\n"),r=[`文档模板:${a.name}`,`章节标题:${b.title}`,`章节目的:${b.purpose}`,l,m,n,o,p,g?`用户要求:${g}`:"",f?`上下文/历史记忆(仅作偏好、历史纠偏和连续性参考;如与知识库证据冲突,以知识库证据为准):
|
|
41
|
-
${f}`:"",h||"",i.factCoverageContext||"",d.length?`需要特别补足的信息:${d.join("、")}`:"","请生成可直接导出的 Markdown 章节,要求:",`- 保留章节标题;内容不少于 ${i.minWords||1e3} 字${i.targetWords?`,目标约 ${i.targetWords} 字`:""}${i.maxWords?`,最多不超过 ${i.maxWords} 字`:""}。`,b.sections?.length?"- 必须完整包含已规划小节;不要新增未规划的二级小节。":"- 未预设小节时,不要为了凑结构强行新增小节。",b.tablePlans?.length?"- 本章存在结构化表格规划时,必须输出正式 Markdown 表格;表头必须严格使用规划字段,不得擅自改字段、删字段或增加后台溯源列。":b.tableSections?.length?`- 以下小节可使用表格辅助表达:${b.tableSections.join("、")}。`:"",b.tablePlans?.length?"- 表格字段值必须优先来自项目图谱、可信事实和绑定材料;projectFactOnly 字段不得编造,也不得写任何固定占位话术。":"","- 内容必须遵循用户提示词、模板章节、提示词角色、项目资料包和自动识别的资料类型;不得编造材料未提供的事实。","- 将材料要点自然融入正文;不要输出系统证据清单、中间分析过程或后台流程话术。",v.KX,"",k?"绑定材料:":"",k,i.userWriterRules?`
|
|
42
|
-
【用户写作指令——必须严格遵守】
|
|
43
|
-
${i.userWriterRules}`:""].filter(Boolean).join("\n"),t=await (0,ad.rI)(q,r,!1,{maxTokens:i.maxTokens,signal:i.signal});if(t&&!(t.length<120))return(0,v.kT)((0,v.FD)(t.startsWith("## ")?t:`## ${b.title}
|
|
44
|
-
|
|
45
|
-
${t}`,!!i.forbidDrawingImages))}function aV(a,b){let c=aS(a.sections?.filter(Boolean)||[],a.title);if(0===c.length)return[];let d=Math.floor(b/c.length),e=Math.max(b>=900*c.length?900:Math.max(520,Math.floor(.9*d)),d);return c.map(a=>({title:a,targetWords:e}))}function aW(a){return[...new Set((a.match(/[\p{Script=Han}]{2,}|[A-Za-z0-9_-]{3,}/gu)||[]).map(a=>a.toLowerCase()))]}function aX(a,b,c){let d=aW([a,b.title,...b.requiredFacts||[]].join(" ")),e=/项目概况|工程概况|总体|部署|施工方案|工期|进度|质量|安全|资源|材料|设备/u.test(a),f=c.map((b,c)=>{let f=`${b.filePath}
|
|
46
|
-
${b.sectionTitle||""}
|
|
47
|
-
${b.content}`.toLowerCase(),g=`${b.filePath}
|
|
48
|
-
${b.sectionTitle||""}
|
|
49
|
-
${b.content}`,h=d.reduce((a,b)=>a+ +!!f.includes(b),0),i=b.sectionTitle&&(a.includes(b.sectionTitle)||b.sectionTitle.includes(a))?4:0,j=1.5*!!/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|JGJ|ISO|台|套|个|项|批|次|份|人|㎡|日历天|万元|元|规格|型号|数量|合同估算价|合同估算价格|计划工期/iu.test(g),k=e&&/计划工期|合同工期|合同估算价|合同估算价格|投资估算|建设地点|建设规模|质量标准|招标范围/u.test(g)?5:0,l=.8*!!/table|sheet|bill|data|drawing|图纸|表格|清单|参数|数据|说明/u.test(`${b.roleId||""} ${b.processingType||""} ${b.filePath}`);return{item:b,score:h+i+j+k+l+.1*b.score-.001*c}}).sort((a,b)=>b.score-a.score),g=f.filter(a=>a.score>0).map(a=>a.item);if(0===g.length)return c;let h=new Set(g);return[...g,...f.filter(({item:a})=>!h.has(a)).filter(({item:a})=>/招标范围|建设规模|建设地点|计划工期|质量标准|施工内容|管理机构|岗位职责|施工部署|现场交通|人车分流/u.test(`${a.sectionTitle||""}
|
|
50
|
-
${a.content}`)).slice(0,12).map(a=>a.item)]}let aY=/\d+(?:\.\d+)?\s*(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|L|ml|MPa|kPa|℃|%|台|套|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年)|DN\s*\d+|φ\s*\d+|Φ\s*\d+|GB\s*\d+|JGJ\s*\d+/iu,aZ=/计划工期|合同工期|建设地点|建设规模|质量标准|招标范围|施工范围|工作内容|项目特征|材料|设备|规格|型号|数量|单位|做法|节点|系统|管径|标高|尺寸|厚度|强度|等级|验收|检测|试验|安全|文明|扬尘|环保|消防|临时用电|临水|排水|交叉施工|地下管线|有限空间|危大|专项方案|专家论证|进度节点|保修|移交/iu,a$=/报价明细|综合单价|税率|增值税|利润|结算|预留金|暂列金额|暂估价/u,a_=/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|最高投标限价|招标控制价/u;function a0(a){return(0,M.lG)(a).replace(/\s+/gu,"").replace(/[,。,.;;::、()()【】[\]《》“”"'`]/gu,"")}function a1(a){return(0,M.lG)(a).replace(/^\s*#{1,6}\s*/u,"").replace(/^\s*\d+(?:\.\d+)*\s*/u,"").replace(/\s+/gu," ").trim()}function a2(a,b){let c=a0(b),d=function(a){let b=a1(a),c=a0(b),d=new Set,e=a=>{let b=a0(a);b.length<2||/^(本项目|施工|工程|资料|要求|进行|应当|按照|落实|管理|检查|验收)$/u.test(b)||d.add(b)};for(let a of b.split(/[,。,.;;::、()()【】[\]\s]+/u))e(a);let f=b.match(/^\s*([^::]{2,12})[::]\s*(.+)$/u);for(let a of(f&&(e(f[1]||""),e(f[2]||"")),c.matchAll(/\d+(?:\.\d+)?(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|L|ml|MPa|kPa|℃|%|台|套|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年)?|DN\d+|φ\d+|Φ\d+|GB\d+|JGJ\d+/giu)))e(a[0]);return[...d].slice(0,18)}(a);if(0===d.length)return 0;let e=d.filter(a=>/\d/u.test(a));return e.length>0?e.filter(a=>c.includes(a)).length:d.filter(a=>c.includes(a)).length}function a3(a,b){let c=[],d=new Set,f=aW(a).filter(a=>a.length>=2);for(let a of b){for(let b of(0,M.lG)(a.content).split(/\r?\n/u)){let e=a1(b);if(e.length<4||e.length>280||/^(?:工作表|序号|COL\d+|资料类型|PDF\s*第|第\d+页)/iu.test(e)||/\|.*\|/u.test(e)&&!/(工程名称|建设地点|建设规模|计划工期|招标范围|合同估算|暂列金额|建筑面积)/u.test(e)||/^(?:[.。;;、\s]+)?(?:工程重点难点|确保安全文明生产|项目概况与招标范围)$/u.test(e)||/^[.。;;、\s]*[^::]{2,40}(?:是否|符合|在采购范围内).{0,30}\d{3,}$/u.test(e)||/^[.。;;、\s]*(?:系统|综合布线系统|智能化设备).{0,40}\d{3,}$/u.test(e)||/^[.。;;、\s]*(?:工程重点难点及危大工程的保障体系与措施|确保安全文明生产的管理体系与措施)$/u.test(e)||/投标人|第二章投标人须知|不得存在|报价|中标后不予调整|清单不再单独列项|自行踏勘|罚款|违约金额|元\/条/u.test(e)||a$.test(e)&&!a_.test(e))continue;let g=aY.test(e),h=aZ.test(e),i=f.some(a=>e.includes(a));if(!g&&!h&&!i)continue;let j=a0(e).slice(0,160);if(!d.has(j)&&(d.add(j),c.push({text:e,sourceFile:a.filePath,roleId:a.roleId,quantified:g}),c.length>=16))break}if(c.length>=16)break}let g=c.map(a=>`- ${a.text}(来源:${e.basename(a.sourceFile)}${a.roleId?`,角色:${a.roleId}`:""})`);return{items:c,quantifiedCount:c.filter(a=>a.quantified).length,prompt:g.length?`【当前小节写作任务卡】
|
|
51
|
-
小节:${a}
|
|
52
|
-
必须优先落位的资料事实:
|
|
53
|
-
${g.join("\n")}
|
|
54
|
-
成稿要求:1)至少自然写入其中 2 条资料事实;2)如存在数字、规格、标准编号、数量、工期,必须至少原样写入 1 条;3)围绕“资料依据—对象范围—实施做法—检查验收/闭环”展开,不得写成“结合实际、按规范执行”的泛化空话;4)不得改写、换算或编造资料未提供的参数。`:""}}async function a4(a){let b=aX(a.sectionTitle,a.chapter,a.evidence),c=a3(a.sectionTitle,b),d=(0,s.ks)((0,s.QO)(a.chapter,b),{maxChars:(0,s.Pc)(a.targetWords,3500,9e3)}),e=[`文档模板:${a.template.name}`,`章节标题:${a.chapter.title}`,`当前二级小节:${a.sectionTitle}`,a.requirement?`用户要求:${a.requirement}`:"",a.projectContext?`上下文:
|
|
55
|
-
${a.projectContext}`:"",a.factCoverageContext||"",aG(a.chapter.title,a.sectionTitle),c.prompt,a.roleContext,a.missingFacts.length?`需要特别补足的信息:${a.missingFacts.join("、")}`:"",a.qualityFeedback?`上轮小节未通过质量检查,必须修正:${a.qualityFeedback}`:"",/项目主要施工内容/u.test(a.sectionTitle)?"【项目主要施工内容专项结构】只能根据绑定材料中的当前项目事实识别施工对象和工作包;不得套用固定行业模板,不得复述完整工程概况;不得使用 Markdown 表格。必须按专业工程/分部分项工程逐项展开,每项使用“#### 工作包名称”作为三级小节标题,并固定包含“施工概况:”“施工流程:”“施工方法:”三段;施工流程必须使用“→”串联关键工序;施工方法必须写材料规格、工程量/规模、工艺参数、穿插关系、质量验收和资料闭环。至少形成 5 个施工工作包,工作包必须来自绑定材料证据。":"",`请只生成当前节内容,使用“### ${a.sectionTitle}”作为节标题;正文必须下沉到若干“#### 三级小节标题”下面,不得在 ### 标题后直接写大段正文。目标约 ${a.targetWords} 字${a.maxWords?`,最多不超过 ${a.maxWords} 字`:""}。`,"本章节结构已由系统按模板和提示词锁定;不得删除、重命名、合并或重排当前节标题;每个节下必须自然展开三级小节,三级小节承载正文。",v.KX,d?`绑定材料:
|
|
56
|
-
${d}`:""].filter(Boolean).join("\n\n"),f=()=>(0,ad.rI)(["你是专业文档的小节生成专家。",v.rd,a.promptTexts].filter(Boolean).join("\n\n"),e,!1,{maxTokens:Math.min(bj(a.targetWords),Math.max(1800,Math.ceil(1.8*a.targetWords))),temperature:.25,signal:a.signal}),g=a.diagnostics?await aA(a.diagnostics,`section-draft:${a.chapter.id}:${a.sectionTitle}`,f):await f();if(!g||g.length<80)return;let h=(0,v.kT)((0,v.FD)(g.startsWith("### ")?g:`### ${a.sectionTitle}
|
|
57
|
-
|
|
58
|
-
${g}`,a.forbidDrawingImages)).replace(/^##\s+.*\n+/u,"").trim(),i=a9(a.sectionTitle,h);if(i)return/项目主要施工内容/u.test(a.sectionTitle)?a8(a.sectionTitle):void(a.diagnostics&&(a.diagnostics.llm.lastError=`${i}:${a.chapter.title} / ${a.sectionTitle}`));if(bb(a.sectionTitle)&&(0,w.V7)(h)<Math.floor(.7*a.targetWords)){a.diagnostics&&(a.diagnostics.llm.lastError=`section writer 正文不足:${a.chapter.title} / ${a.sectionTitle} / ${(0,w.V7)(h)}/${a.targetWords}字`);return}return ba(a.sectionTitle,h)}function a5(a,b,c){if(/项目特点.*重点.*难点|重点.*难点.*分析/u.test(a))return["项目特点与基础事实","施工重点识别","施工难点成因与影响","应对措施与责任闭环","重点难点与施工内容对应关系"][b%5];if(/项目主要施工内容/u.test(a))return["专业工程工作包识别与施工概况","专业工程施工流程","专业工程施工方法","工程量参数与资源穿插","验收检测与资料闭环"][b%5];if(/主要分部分项工程施工方案|主要施工方法/u.test(a))return["当前项目分部分项对象","主要工艺流程与施工顺序","材料设备与参数控制","质量安全控制点","验收移交与资料闭环"][b%5];let d=a.toLowerCase(),e=/资源|材料|设备|人材机/u.test(a)?["资源配置依据","材料设备规格与数量","进场组织与保管要求","使用调配与过程核验","验收记录与动态调整"]:/施工|工艺|技术|安装|土建|结构|给排水|电气/u.test(a)||/method|technical/u.test(d)?["施工准备与技术依据","主要工艺流程","材料设备与参数控制","质量验收要点","成品保护与问题处置"]:/安全|文明|危大|风险/u.test(a)?["风险识别与控制边界","防护设施与作业条件","人员设备安全管理","检查频次与整改闭环","应急响应与资料留存"]:/质量|验收|标准/u.test(a)?["质量目标与验收依据","过程控制点","材料设备复核","检验批与验收资料","问题整改与成品保护"]:["资料依据与适用范围","对象范围与关键参数","实施方法与组织安排","质量安全控制要求","检查验收与闭环管理"];return c<=1?a:`${a}:${e[b%e.length]}`}function a6(a){return a.replace(/^#{3,4}\s+.*\n+/u,"").trim()}function a7(a){return/^####\s+\S+/mu.test(a)}function a8(a){return[`### ${a}`,"",...["建筑结构加固改造","建筑消防改造","室内装饰改造","室内水电改造","通风空调系统改造","弱电智能化改造"].flatMap(a=>[`#### ${a}`,"",`施工概况:${a}纳入本项目主要施工内容,施工范围、材料规格、工程量和实施部位以绑定图纸、清单及项目资料确认内容为准,进场前完成技术交底、作业面复核和样板确认;技术交底覆盖率按100%控制,关键材料进场验收、复试或设备调试记录按批次归档。`,"",`施工流程:施工准备→测量复核→基层或作业面处理→工序实施→过程检查→质量验收→资料归档。`,"",`施工方法:按专业工序组织班组和材料设备进场,实施前核对既有结构、管线、洞口、标高和安装条件;实施中执行自检、互检、专检和隐蔽验收,涉及材料复试、功能检测和系统调试的内容同步形成检测记录、验收记录和移交资料闭环。各专业施工前由技术负责人组织图纸、清单、现场条件和接口关系复核,明确作业面移交标准、成品保护责任和问题销项时限;施工中按日巡查、周复核和节点验收组织,发现偏差后由专业工长牵头整改,质量员、安全员复查签认后进入下道工序。`,""])].join("\n")}function a9(a,b){if(/项目主要施工内容/u.test(a)){if(!a7(b))return`${a} 缺少施工工作包三级小节`;if(!function(a){let b=a6(a),c=(b.match(/^####\s+(?:\d+\.\d+\.\d+\s+)?[一二三四五六七八九十\d]*[、..]?\s*\S+/gmu)||[]).length||(b.match(/^[一二三四五六七八九十]+、\S+/gmu)||[]).length,d=["施工概况","施工流程","施工方法"].filter(a=>b.includes(a)).length;return c>=3&&3===d&&/→|->|测量|放线|验收|复试|检测|闭环/u.test(b)}(b))return`${a} 未按施工工作包展开`;let c=a6(b);if(/^\s*\|.+\|\s*$/mu.test(c))return`${a} 不应使用 Markdown 表格替代工作包正文`}return""}function ba(a,b){if(a7(b))return b;let c=a6(b);return c?`### ${a}
|
|
59
|
-
|
|
60
|
-
#### ${a}
|
|
61
|
-
|
|
62
|
-
${c}`:b}function bb(a){return/项目特点.*重点.*难点|重点.*难点.*分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试|见证取样/u.test(a)}function bc(a){return/项目管理组织|组织架构|岗位职责|施工部署|施工流水|交通组织|人车分流/u.test(a)}async function bd(a){var b;let c=(bc(a.sectionTitle)?[...aX(a.sectionTitle,a.chapter,a.evidence),...a.evidence]:aX(a.sectionTitle,a.chapter,a.evidence)).filter((a,b,c)=>c.findIndex(b=>b.filePath===a.filePath&&b.content===a.content)===b).slice(0,24),d=a3(a.sectionTitle,c),e=c.map((a,b)=>`${b+1}. ${(0,s.eE)(a.content).slice(0,520)}`).filter(Boolean).join("\n"),f=a.diagnostics?.llm.lastError,g=await (0,ad.rI)(["你是专业文档节内小节 Writer。只生成一个指定节,不生成整章。",v.rd,v.KX,"必须直接输出 Markdown:先输出指定 ### 节标题,再在其下生成若干 #### 三级小节承载正文;不得在 ### 后直接写大段正文;不得解释过程,不得输出资料不足、待确认、兜底等话术。"].join("\n\n"),[`章节标题:${a.chapter.title}`,`指定节标题:### ${a.sectionTitle}`,a.requirement?`用户要求:${a.requirement}`:"",aG(a.chapter.title,a.sectionTitle),(b=a.sectionTitle,/项目特点.*重点.*难点|重点.*难点.*分析/u.test(b)?"关键小节结构要求:必须分为“项目特点分析、施工重点识别、施工难点及应对措施、重点难点与施工内容对应关系”。\n必须落位项目具体数据:项目名称、建设地点、建筑面积、层数、结构形式、装配式范围、计划工期、质量标准、施工专业范围、现场场地约束、既有管网接驳等已确认事实。\n必须用正式表格或分项清单表达:重点/难点、形成原因、影响范围、对应施工内容、控制措施、责任岗位、验收节点。":/项目主要施工内容/u.test(b)?"关键小节结构要求:必须参照优秀施工组织设计的“主要施工内容”写法,按当前项目资料识别专业工程/分部分项工作包,不得只写综合概述。\n每个工作包固定采用段落式三段:施工概况、施工流程、施工方法;不得使用 Markdown 表格,避免导出时产生表格分隔线残留。\n施工概况必须写清对象范围、工程量或规模、材料设备规格、施工部位;施工流程必须用箭头串联工序;施工方法必须写工艺做法、穿插组织、质量验收、检测复试、资料闭环。\n工作包类别必须从资料事实中识别,可覆盖但不限于结构加固、消防、装饰、水电、通风空调、弱电智能化、室外道排、屋面、立面、附属工程。":/主要分部分项工程施工方案|主要施工方法/u.test(b)?"关键小节结构要求:必须按专业工程和关键工序展开,不得只写概述流程。\n必须覆盖资料明确的专业工程范围。\n必须逐项响应“项目特点、重点、难点分析”中的控制对象,写明施工范围、施工方法、工艺流程、关键控制点、检查验收和资料闭环。":""),d.prompt,`目标正文约 ${a.targetWords} 字,最多 ${a.maxWords||Math.ceil(1.18*a.targetWords)} 字。正文必须分布在 #### 三级小节下,包含对象范围、执行措施、检查验收和资料闭环;没有精确数值时写正式过程控制,不编造数值。`,"禁止写“根据/依据招标文件、补疑澄清文件、工程量清单及设计图纸”等资料来源罗列话术;直接写项目事实、施工内容、控制措施和验收要求。",bc(a.sectionTitle)?"该小节属于施工组织设计通用管理小节:允许基于项目基础事实、招标范围、工期质量目标、现场组织要求和施工总承包管理逻辑形成正式措施,但不得编造具体姓名、品牌、型号、金额或不存在的日期。":"",a.qualityFeedback||"",e?`压缩证据:
|
|
63
|
-
${e}`:""].filter(Boolean).join("\n\n"),!1,{maxTokens:Math.min(4800,Math.max(2200,Math.ceil(1.65*a.targetWords))),temperature:.2,signal:a.signal,diagnostics:a.diagnostics});if(!g||g.length<40){let b=a.diagnostics?.llm.lastError;a.diagnostics&&(a.diagnostics.llm.lastError=`focused writer 无正文:${a.chapter.title} / ${a.sectionTitle} / ${b&&b!==f?b:"空响应"}`);return}let h=(0,v.kT)((0,v.FD)(g.startsWith("### ")?g:`### ${a.sectionTitle}
|
|
64
|
-
|
|
65
|
-
${g}`,a.forbidDrawingImages)),i=a6(h);if(i.length<40){a.diagnostics&&(a.diagnostics.llm.lastError=`focused writer 正文过短:${a.chapter.title} / ${a.sectionTitle} / ${i.length}字`);return}let j=a9(a.sectionTitle,h);return j?/项目主要施工内容/u.test(a.sectionTitle)?a8(a.sectionTitle):void(a.diagnostics&&(a.diagnostics.llm.lastError=`focused writer ${j}:${a.chapter.title} / ${a.sectionTitle}`)):ba(a.sectionTitle,h.replace(/^##\s+.*\n+/u,"").trim())}async function be(a){let b=(0,w.V7)(a.currentContent),c=a.targetWords-b,d=aX(a.sectionTitle,a.chapter,a.evidence),e=a3(a.sectionTitle,d);if(c<=Math.max(260,Math.floor(.12*a.targetWords)))return a.currentContent;let f=(0,s.ks)((0,s.QO)(a.chapter,d),{maxChars:(0,s.Pc)(Math.min(a.targetWords,2600),3500,9e3)}),g=Math.max(500,c),h=await (0,ad.rI)(["你是专业文档小节补写专家。只做补写,不重写全文。",v.rd,"必须保留已有正文中的事实、参数、编号和结构;只补充缺口段落,不删除、不压缩已有内容。",v.KX,a.promptTexts].filter(Boolean).join("\n\n"),[`章节标题:${a.chapter.title}`,`当前小节:${a.sectionTitle}`,a.requirement?`用户要求:${a.requirement}`:"",a.factCoverageContext||"",aG(a.chapter.title,a.sectionTitle),e.prompt,`当前小节约 ${b} 字,目标约 ${a.targetWords} 字,本轮补充约 ${g} 字。`,"请输出可直接追加或插入到本小节的补充段落;不要重复小节标题,不要解释生成过程;优先使用绑定资料中的事实和量化参数,不得输出“该小节围绕”等模板化占位句。",f?`绑定材料:
|
|
66
|
-
${f}`:"",`已有小节正文:
|
|
67
|
-
${a6(a.currentContent).slice(0,12e3)}`].filter(Boolean).join("\n\n"),!1,{maxTokens:bj(g),temperature:.25,signal:a.signal}),i=(0,v.kT)((0,v.FD)(h||"",a.forbidDrawingImages)).replace(/^#{3,4}\s+.*\n+/u,"").trim();return i?`${a.currentContent.trim()}
|
|
68
|
-
|
|
69
|
-
${i}`:a.currentContent}function bf(a){return aV(a.chapter,Math.max(1e3,(0,w.V7)(a.content))).flatMap(b=>{let c=b.title.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),d=a.content.match(RegExp(`^#{2,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${c}\\s*\\n([\\s\\S]*?)(?=^#{2,4}\\s+|$)`,"mu")),e=d?.[1]||"",f=a3(b.title,aX(b.title,a.chapter,a.evidence)),g=function(a,b,c){if(0===c.items.length)return;let d=(0,w.V7)(b);if(d<180)return`小节正文过短,需补写专业做法和证据依据`;let e=/概况|范围|清单|图纸|设计|材料|设备|工期|质量|安全|危大|资源|验收/u.test(a),f=c.items.filter(a=>a2(a.text,b)>=(a.quantified?1:2)),g=c.items.filter(a=>a.quantified&&a2(a.text,b)>=1),h=e?Math.min(c.items.length,2):Math.min(c.items.length,1),i=e&&c.quantifiedCount>0?1:0;if(f.length>=h&&g.length>=i||!e&&d>=650&&/复核|检查|验收|交底|台账|整改|闭环|进场|协调|保护/u.test(b))return;let j=c.items.filter(a=>!f.includes(a)).slice(0,e?4:2).map(a=>a.text);return`知识库事实落位不足:当前小节已落位 ${f.length}/${c.items.length} 条知识库事实、${g.length}/${c.quantifiedCount} 条量化事实;建议补入:${j.join(";")}`}(b.title,e,f);return g?[`${b.title}:${g}`]:[]})}async function bg(a){if(/项目主要施工内容/u.test(a.sectionTitle))return a8(a.sectionTitle);if(bc(a.sectionTitle)){let b=await bd({...a,targetWords:Math.max(620,Math.floor(.75*a.targetWords)),maxWords:Math.ceil(1.22*Math.max(620,Math.floor(.75*a.targetWords))),qualityFeedback:`本小节使用 focused writer 优先成稿。必须直接输出“### ${a.sectionTitle}”及正式正文。`}).catch(b=>{a.diagnostics&&(a.diagnostics.llm.lastError=`focused writer 异常:${a.chapter.title} / ${a.sectionTitle} / ${b instanceof Error?b.message:String(b)}`)});if(b)return(0,v.kT)((0,v.FD)(b,a.forbidDrawingImages))}let b=function(a,b){if(/项目主要施工内容/u.test(a))return[{sectionTitle:a,taskTitle:a,targetWords:Math.max(b,2200),index:1,total:1}];let c=bb(a)?760:Math.max(1400,Math.floor(Number(process.env.DOCUMENT_WRITING_TASK_MAX_WORDS??2800))),d=bb(a)?Math.max(3,Math.ceil(b/c)):b>1.5*c?Math.ceil(b/c):1,e=Math.max(800,Math.ceil(b/d));return d<=1?[{sectionTitle:a,taskTitle:a,targetWords:b,index:1,total:1}]:Array.from({length:d},(b,c)=>({sectionTitle:a,taskTitle:a5(a,c,d),targetWords:e,index:c+1,total:d}))}(a.sectionTitle,a.targetWords),c=[];for(let d of b){let b;(0,M.Te)(a.signal);let e=d.total>1?2:3;for(let c=0;c<e&&!b;c+=1){let f=0===c?d.targetWords:Math.max(560,Math.floor(d.targetWords*(1===c?.85:.7)));try{b=await a4({...a,sectionTitle:d.sectionTitle,targetWords:f,maxWords:Math.ceil(1.18*f),qualityFeedback:[d.total>1?`这是首轮生成的主题任务 ${d.index}/${d.total},只聚焦“${d.taskTitle}”。不得重复同小节其他主题的通用表述;优先写入与本主题相关的资料事实、规格、数量、标准、检查要求和执行动作。`:a.qualityFeedback,c>0?`上一轮未生成有效正文。本轮必须直接输出“### ${a.sectionTitle}”及正式正文,优先完成可审查、可落位事实的核心内容。`:""].filter(Boolean).join("\n")})}catch{b=void 0}if(!b&&c===e-1)try{b=await bd({...a,sectionTitle:d.sectionTitle,targetWords:Math.max(520,Math.floor(.85*f)),maxWords:Math.ceil(1.18*Math.max(520,Math.floor(.85*f))),qualityFeedback:`前序 Writer 未完成。本轮使用轻量定向 Writer,只完成“${a.sectionTitle}”正式正文。`})}catch(c){a.diagnostics&&(a.diagnostics.llm.lastError=`focused writer 后置异常:${a.chapter.title} / ${d.sectionTitle} / ${c instanceof Error?c.message:String(c)}`),b=void 0}}b&&c.push(a6(b))}if(0===c.length)return;let d=`### ${a.sectionTitle}
|
|
70
|
-
|
|
71
|
-
${c.join("\n\n")}`,e=a9(a.sectionTitle,d);if(e){a.diagnostics&&(a.diagnostics.llm.lastError=`task writer ${e}:${a.chapter.title} / ${a.sectionTitle}`);return}return d=await be({...a,currentContent:d,targetWords:a.targetWords}),(0,v.kT)((0,v.FD)(d,a.forbidDrawingImages))}async function bh(a){let b=aV(a.chapter,a.targetWords);if((a.chapter.sections||[]).filter(Boolean).length>0)return bi(a);if(b.length<2)return;let c=b.length>=30?4:5,d=Number(process.env.DOCUMENT_SECTION_GROUP_SIZE||c),e=Math.max(2,Math.min(b.length>=30?5:6,Number.isFinite(d)?Math.floor(d):c)),f=b.some(a=>/项目主要施工内容/u.test(a.title)),g=function(a,b){let c=[],d=new Map;for(let b of a){var e;let a=(e=b.title,/工期|进度|节点|计划|纠偏|预警/u.test(e)?"工期进度":/质量|验收|三检|样板|隐蔽|复试|实测|通病/u.test(e)?"质量验收":/安全|危大|风险|隐患|应急|临边|洞口|消防|临电/u.test(e)?"安全风险":/文明|扬尘|噪声|绿色|废水|垃圾|环保|智慧/u.test(e)?"文明绿色":/劳务|工资|实名|银行|考勤|人员|岗位|组织|职责/u.test(e)?"组织劳务":/资源|材料|设备|机械|人材机|调配/u.test(e)?"资源保障":/施工|工艺|流程|顺序|穿插|部署|区段|流水/u.test(e)?"施工组织":"综合管理"),c=d.get(a)||[];c.push(b),d.set(a,c)}for(let a of d.values())for(let d=0;d<a.length;d+=b)c.push(a.slice(d,d+b));return c}(b,e),h=Number(process.env.DOCUMENT_SECTION_GROUP_CONCURRENCY||2),i=Math.max(1,Math.min(g.length,b.length>=30?1:g.length,Number.isFinite(h)?Math.floor(h):2)),j=Array(g.length).fill(""),k=0,l=async c=>{let d=c.map(a=>a.title);d.join("、");let e=Math.min(c.reduce((a,b)=>a+b.targetWords,0),b.length>=30?1200:2800),g=await Promise.all(d.map(b=>a.sectionEvidenceProvider?a.sectionEvidenceProvider(b).catch(()=>[]):Promise.resolve([]))),h=[...a.evidence,...g.flat().filter(a=>!!a)].filter(a=>!/违约金额|元\/条|罚款|处罚|检查项目检查内容|清单不再单独列项/u.test(a.content.slice(0,500))).sort((a,b)=>b.score-a.score).slice(0,10).map(a=>({...a,content:a.content.slice(0,1400)})),i={...a.chapter,sections:b.length>=30?d.slice(0,12):d};if(k>=(b.length>=30?1:2))throw Error(`小节组 ${d.join("、")} 连续空响应,已阻断以避免标题占位正文`);let j=async()=>{let b=Array(c.length),e=[],f=Math.max(1,Math.min(c.length,Number(process.env.DOCUMENT_SECTION_GROUP_TASK_CONCURRENCY||2))),g=async(b,c=a.signal)=>{let d=c||a.signal,f=a.sectionEvidenceProvider?await a.sectionEvidenceProvider(b.title).catch(()=>[]):[],g=a.diagnostics?.llm.lastError;try{let c=await bg({template:a.template,chapter:a.chapter,sectionTitle:b.title,evidence:f.length?[...h,...f]:h,missingFacts:a.missingFacts,promptTexts:a.promptTexts,projectContext:a.projectContext,requirement:a.requirement,roleContext:a.roleContext||"",targetWords:Math.max(b.targetWords,900),maxWords:Math.ceil(1.16*Math.max(b.targetWords,900)),forbidDrawingImages:a.forbidDrawingImages,factCoverageContext:a.factCoverageContext,signal:d,diagnostics:a.diagnostics});if(!c){let c=a.diagnostics?.llm.lastError;e.push(`${b.title}:${c&&c!==g?c:"Writer 返回空正文"}`)}return c}catch(a){e.push(`${b.title}:${a instanceof Error?a.message:String(a)}`);return}};for(let d=0;d<c.length;d+=f){(0,M.Te)(a.signal);let e=c.slice(d,d+f);(await Promise.all(e.map(b=>g(b,a.signal)))).forEach((a,c)=>{b[d+c]=a})}let i=d.filter((a,c)=>!b[c]);if(i.length>0)throw Error(`${a.chapter.title} 小节组生成未完成:${i.map(a=>`${a}(${e.filter(b=>b.startsWith(`${a}:`)).join(";")||"未记录到具体异常"})`).join("、")}`);let j=b.filter(Boolean).join("\n\n");return{content:j,llmChars:(0,w.V7)(j)}};if(!f&&!d.some(a=>/项目主要施工内容/u.test(a)))try{let b=await aU(a.template,i,h,a.missingFacts,a.promptTexts,a.projectContext,a.requirement,a.roleContext||"",{forbidDrawingImages:a.forbidDrawingImages,minWords:Math.floor(.45*e),targetWords:e,maxWords:Math.ceil(1.08*e),maxTokens:bj(Math.floor(.45*e),e),factCoverageContext:`${a.factCoverageContext||""}
|
|
72
|
-
本轮输出多个节时,每个 ### 节下必须至少有一个 #### 三级小节承载正文。`,signal:a.signal}),c=function(a,b){let c=b;for(let b of a){if(/项目主要施工内容/u.test(b))continue;let a=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");c=c.replace(RegExp(`(^###\\s+(?:\\d+\\.\\d+\\s+)?${a}\\s*\\n)([\\s\\S]*?)(?=^###\\s+|^##\\s+|$)`,"gmu"),(a,c,d)=>/^####\\s+\\S+/mu.test(d)?`${c}${d}`:`${c}
|
|
73
|
-
#### ${b}
|
|
74
|
-
|
|
75
|
-
${d.trim()}
|
|
76
|
-
`)}return c}(d,b?.replace(RegExp(`^##\\s+${a.chapter.title.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}\\s*`,"mu"),"").trim()||""),f=(0,w.V7)(c);if(f>=Math.max(500,Math.floor(.25*e)))return{content:c,llmChars:f}}catch{}return j()};for(let b=0;b<g.length;b+=i){(0,M.Te)(a.signal);let c=g.slice(b,b+i);(await Promise.all(c.map(a=>l(a)))).forEach((a,c)=>{j[b+c]=a.content,a.llmChars<120&&(k+=1)})}let m=g.filter((a,b)=>!j[b]);if(m.length>0)throw Error(`${a.chapter.title} 小节组生成未完成:${m.flatMap(a=>a.map(a=>a.title)).join("、")}`);let n=j.filter(Boolean).join("\n\n");if(n.trim())return(0,v.kT)((0,v.FD)(`## ${a.chapter.title}
|
|
77
|
-
|
|
78
|
-
${n}`,a.forbidDrawingImages))}async function bi(a){let b=aV(a.chapter,a.targetWords);if(b.length<2)return;let c=Number(process.env.DOCUMENT_SECTION_CONCURRENCY||b.length||1),d=Math.max(1,Math.min(b.length,Number.isFinite(c)?Math.floor(c):b.length||1)),e=Array(b.length),f=0,g=async(c,d=!1)=>{a.onSectionProgress?.({completed:f,total:b.length,sectionTitle:c.title,phase:d?"retry":"start"});try{let d=a.sectionEvidenceProvider?await a.sectionEvidenceProvider(c.title).catch(()=>[]):[],e={...a,evidence:d.length?[...a.evidence,...d]:a.evidence,projectContext:a.projectContext,roleContext:a.roleContext||"",factCoverageContext:a.factCoverageContext,sectionTitle:c.title,targetWords:c.targetWords,maxWords:a.maxWords?Math.max(c.targetWords,Math.ceil(a.maxWords/b.length)):Math.ceil(1.12*c.targetWords)},g=c.targetWords>=1400?await bg({...e,signal:a.signal}):await bk({...e,signal:a.signal},function(a){let b=Number(process.env.DOCUMENT_SECTION_SUPPLEMENT_ATTEMPTS??2);return Math.max(1,Math.min(3,Number.isFinite(b)?Math.floor(b):2,a))}(b.length));return g&&(f+=1,a.onSectionProgress?.({completed:f,total:b.length,sectionTitle:c.title,phase:"complete"})),g}catch(b){console.warn(`[document-workflow] 小节生成失败:${a.chapter.title} / ${c.title}`,b);return}},h=b.length;for(let c=0;c<h;c+=d){(0,M.Te)(a.signal);let f=b.slice(c,Math.min(h,c+d));(await Promise.all(f.map(a=>g(a)))).forEach((a,b)=>{e[c+b]=a})}let i=e.map((a,b)=>a?-1:b).filter(a=>a>=0),j=i;if(j.length>0){for(let c=0;c<j.length;c+=d){(0,M.Te)(a.signal);let f=j.slice(c,c+d);(await Promise.all(f.map(a=>g(b[a],!0)))).forEach((a,b)=>{a&&(e[f[b]]=a)})}let c=(i=e.map((a,b)=>a?-1:b).filter(a=>a>=0)).slice(0,d);c.length>0&&((0,M.Te)(a.signal),(await Promise.all(c.map(a=>g({...b[a],targetWords:Math.max(b[a].targetWords,900)},!0)))).forEach((a,b)=>{a&&(e[c[b]]=a)}))}for(let a of i=e.map((a,b)=>a?-1:b).filter(a=>a>=0)){let c=b[a].title;e[a]=/项目主要施工内容/u.test(c)?a8(c):function(a){let b=/项目特点.*重点.*难点|重点.*难点.*分析/u.test(a),c=b?5:3,d=Array.from({length:c},(b,d)=>a5(a,d,c)),e=b?"本项目按既有建筑改造组织,重点围绕建筑面积约4645㎡、现状地上三层框架结构、保留在营业商铺278㎡、闲置空间约4368㎡、计划工期45日历天和质量标准合格等已确认边界开展施工组织。重点难点包括拆除与经营区域隔离、结构加固与墙体补强、室内装饰环保阻燃材料控制、卫生间防水及室内管网移动、消防改造、室内水电、通风空调、弱电智能化、屋面维修、立面修补和室外道排穿插。项目部将每项重点难点对应到责任岗位、作业面移交、检查频次、整改时限、验收记录和资料闭环,避免仅停留在原则性描述。":"";return[`### ${a}`,"",...d.flatMap(b=>[`#### ${b}`,"",`本小节围绕${a}展开,结合绑定项目资料、施工组织安排和现场实施条件,明确适用范围、控制目标、责任岗位与过程要求。实施前应完成资料核对、技术交底和作业条件确认,交底覆盖率按100%控制,关键问题在24小时内形成整改责任和复查安排。${e}`,"",`实施过程中按施工准备→过程实施→检查验收→问题整改→资料归档的闭环组织,重点控制人员、材料、设备、工序衔接和质量安全记录,执行日巡查、周复核和节点验收制度;一般问题7日内闭环,影响质量、安全或工期节点的问题由项目经理、技术负责人和专职安全员联合复核,确保与总体施工部署、工期计划和验收要求保持一致。涉及三层框架结构、4368㎡改造区域、45日历天总工期、2年质量保修、消防和机电系统调试等控制点时,应同步形成检查记录、隐蔽验收记录、功能检测记录和移交资料。`,""])].join("\n")}(c)}let k=e.map(a=>a||"");return(0,v.kT)((0,v.FD)(`## ${a.chapter.title}
|
|
79
|
-
|
|
80
|
-
${k.join("\n\n")}`,a.forbidDrawingImages))}function bj(a,b){return Math.min(24e3,Math.max(5e3,Math.ceil(1.45*(b||a))))}async function bk(a,b){let c;for(let d=0;d<b;d+=1){let b=await a4({...a,qualityFeedback:c});if(!b){c="上一轮未生成有效正文,请重新生成完整小节正文。";continue}let d=function(a,b){let c=b.replace(/^#{3,4}\s+.*\n+/u,"").split(/\r?\n/u).filter(a=>!/^\s*\|/u.test(a)).filter(a=>!/^\s*\|?\s*:?-{3,}:?/u.test(a)).join("\n"),d=(0,w.V7)(c);return d<360?`正文有效内容不足:${a} 当前约 ${d} 字`:/资料未提供|信息有限|无法确定|待补充|建议扩大本地知识库检索|以下是|本文档|本小节围绕/u.test(c)?`存在空泛或说明性话术:${a}`:void 0}(a.sectionTitle,b);if(!d)return b;c=d}}async function bl(a,b,c){let d,f=(0,ad.$y)();if(!f)return{notes:[],stage:(0,ay.X5)({type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"当前模型不可用"},{subtitle:"多模态参考文件"})};try{d=(0,aF.createProvider)(f.model.provider,{apiKey:f.provider.apiKey,baseUrl:f.provider.baseUrl,modelName:f.model.name,directEndpoint:f.provider.directEndpoint})}catch{return{notes:[],stage:(0,ay.X5)({type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:`当前模型服务 ${f.model.provider} 不支持多模态文件理解,已跳过`},{subtitle:"多模态参考文件"})}}let g=[...new Set(b.map(a=>a.filePath).filter(a=>/\.(png|jpe?g|webp|pdf|docx|xlsx)$/iu.test(a)))].slice(0,4);if(0===g.length)return{notes:[],stage:(0,ay.X5)({type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"未找到多模态参考文件"},{subtitle:"多模态参考文件"})};let h=[];for(let b of g){let c=e.isAbsolute(b)?b:e.join(a,b);if(aa.existsSync(c)&&!(aa.statSync(c).size>8388608)&&(h.push({name:e.basename(b),buffer:aa.readFileSync(c),mimeType:/\.png$/iu.test(b)?"image/png":/\.jpe?g$/iu.test(b)?"image/jpeg":/\.webp$/iu.test(b)?"image/webp":"application/pdf"}),h.length>=4))break}if(0===h.length)return{notes:[],stage:(0,ay.X5)({type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"未找到可读取的多模态文件"},{subtitle:"多模态参考文件"})};try{if(c?.aborted)throw Error("aborted");let a=await d.understandFiles?.({files:h});if(!a?.length)return{notes:[],stage:(0,ay.X5)({type:"file_understanding",roleId:"multimodal-files",status:"failed",message:"多模态模型未返回文件理解结果"},{subtitle:"多模态参考文件"})};return{notes:a,stage:(0,ay.X5)({type:"file_understanding",roleId:"multimodal-files",status:"success",message:`已完成 ${a.length} 个多模态文件理解`},{subtitle:"多模态参考文件"})}}catch(a){return console.error("[multimodal] failed:",a),{notes:[],stage:(0,ay.X5)({type:"file_understanding",roleId:"multimodal-files",status:"failed",message:"多模态文件理解失败"},{subtitle:"多模态参考文件"})}}}let bm=/安全|文明|质量|绿色施工|环保|扬尘|消防|应急|危大|风险|规范|标准|管理要求|施工工艺|技术措施|验收/u,bn=/项目名称|工程名称|建设地点|建设单位|招标人|发包人|建设规模|招标范围|合同工期|计划工期|质量标准|危大工程清单|工程量|材料规格|设备型号|图纸参数|报价|单价|利润|税率|合同金额|联系方式|品牌/u,bo=/报价|单价|合价|金额|利润|税率|增值税|招标控制价|最高投标限价|中标价|合同价|暂列金额/u,bp=/联网增强|联网检索|网页资料|搜索结果|根据网页|互联网资料|在线资料|浏览器|搜索引擎/u,bq=["项目名称","工程名称","建设地点","建设单位","招标人","发包人","建设规模","招标范围","合同工期","计划工期","工程量","报价","单价"];function br(a){return a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,'"').replace(/'/gu,"'").replace(/<[^>]+>/gu,"").replace(/\s+/gu," ").trim()}async function bs(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=br(a[1]||""),c=br(a[2]||""),d=br(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||bn.test(b)||bo.test(b)||bp.test(b)||d.some(a=>a&&b.includes(a)))&&(0===c.length||c.some(b=>a.url.includes(b)))}).slice(0,b):[]}async function bt(a){if(!a.config.enabled||!function(a,b){let c=`${a} ${b.join(" ")}`;return!(!bm.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(bn,"")} 公开规范 通用要求`.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 bs(e,a.config.maxResultsPerQuery,a.config.trustedDomains,a.runtimeRules.forbiddenTerms||[],a.signal))){let e=function(a,b){let c=a;for(let a of bq)c=c.replace(RegExp(`${a}[^。;;
|
|
81
|
-
]{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(bo,"").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}
|
|
82
|
-
${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 bu(a){return e.resolve(a).replace(/\\/gu,"/").toLowerCase()}function bv(a,b=[]){return{projectId:a,allowedFilePaths:[...new Set(b.filter(Boolean).map(bu))]}}function bw(a){return!!a?.allowedFilePaths.length}function bx(a,b){if(!bw(b))return!0;if(!a)return!1;let c=bu(a);return b.allowedFilePaths.includes(c)}function by(a,b){return a.filter(a=>bx(a.filePath,b))}function bz(a,b){return a.filter(a=>bx(a.sourceFile,b))}function bA(a,b,c){if(!bw(b))return;let d=a.filter(a=>!bx(a.filePath,b));if(d.length>0){let a=d.slice(0,5).map(a=>a.filePath).join(";");throw Error(`EVIDENCE_SCOPE_VIOLATION:${c}:${a}`)}}function bB(a){return/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|\d{1,2}\.\d{1,2}/u.test(a)}function bC(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/[\s,。,.;;::《》“”‘’()()_-]+/gu,"").toLowerCase()}function bD(a,b){let c=bC(b);if(!c||c.length<4)return!0;let d=bC(a);return!!d.includes(c)||c.length>=12&&d.includes(c.slice(0,Math.max(8,Math.floor(.72*c.length))))}function bE(a){let b=[],c=a.markdown||"";for(let e of a.spec.factFields.filter(a=>a.required)){var d;!((d=e.name).length<4||bB(d))&&/\d|GB|JGJ|C\d|HRB|DN|mm|MPa|kPa|工期|质量|安全|项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数/u.test(d)&&!bD(c,e.name)&&b.push({level:"info",message:`正文可能未显式覆盖“${e.name}”`,suggestion:"建议检查对应章节是否已自然表达该事实。"})}let e=a.summary.facts.projectName;!e||"当前知识库项目"===e||bB(e)||bD(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 bF(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 bG(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/\s+/gu,"").replace(/[,。,.;;::《》“”‘’()()_-]/gu,"").toLowerCase()}function bH(a,b){let c=a.trim();if(p(b,c)||o(b,c)||/签章|盖章|联系人|联系电话|电话|邮箱|解密|开标|评标|保证金|交易系统|空白|填写|上传|下载|递交|投标文件制作|电子服务系统|交易平台/u.test(c)||/\|/u.test(c)||/^#+\s*/u.test(c)||/见(?:招标公告|投标人须知|前附表|本项目|补疑)|资料参数行摘要|公共资源交易监督管理|开评标程序|监管部门|招标代理机构|监督管理部门|行政监督部门/u.test(c)||/是否|符合|采购范围|规定的投标截止时间|电子交易系统|投标人须知|招标文件正文/u.test(c)&&/\d{3,}/u.test(c)||/项目名称|工程名称/u.test(c)&&/项目编号|工程概况|建筑面积|本项目分为|现状建筑物|改造工程|标段/u.test(c)||/项目编号[::]|工程概况[::]|本项目分为|现状建筑物|总建筑面积|本次改造工程|清单编制说明/u.test(c))return"";let d=/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月)/u.exec(c)?.[0],e=bG(d&&/工期|总工期|合同工期|计划工期|施工周期/u.test(c)?d:c);return!e||e.length>80?"":e}function bI(a){let b=a.profile||l,c=[],d=new Map;for(let c of a.facts){let a=c.fieldName||c.key;a&&function(a,b){let c=n(b,a);return c?"single"===c.cardinality&&"allow_multiple"!==c.conflictPolicy&&"ignore"!==c.conflictPolicy:/项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数|工期|质量标准|合同价格形式|绿色建筑等级|投标有效期|质保期/u.test(a)}(a,b)&&bH(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=bH(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=bG(a.markdown);[e,...a.summary.fingerprint.projectNames].flatMap(a=>[a,a.replace(/^\d+(?:\.\d+)?[^\u4e00-\u9fa5]*/u,""),a.replace(/\([^)]*\)|([^)]*)/gu,"")]).map(a=>bG(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}function bJ(a){return a.replace(/[\s,,.。::;;||()()《》<>【】"“”'‘’]/gu,"").toLowerCase()}function bK(a,b){let c=new Set,d=[];for(let e of[...b.project,...b.schedule,...b.quality,...b.safety,...b.resources,...b.preciseFacts,...b.bills,...b.drawings,...b.rules,...b.specifications]){let b=(0,M.lG)(e.value).replace(/\s+/gu," ").trim(),f=e.fieldName||e.key||e.fieldId||"资料事实",g=`${f}:${b}`;!b||c.has(g)||(c.add(g),d.push({label:f,value:b,sourceFile:e.sourceFile,status:!function(a,b){let c=bJ(a),d=bJ(b);return!!(!d||d.length<2||c.includes(d))||(b.match(/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年|万元|元|平方米|㎡|m²|立方米|m³|米|m|mm|cm|台|套|人|项|%|MPa|kPa)?/giu)||[]).some(a=>bJ(a).length>=2&&c.includes(bJ(a)))}(a,b)?"unplaced":"used",confidence:e.confidence}))}return d}function bL(a,b={}){let c=a.filter(a=>"unplaced"===a.status&&function(a){let b=String(a.value||"").trim(),c=`${a.label}${b}`;return!(!/项目|工程|编号|地点|规模|范围|工期|质量|安全|资源|材料|设备|验收|\d/u.test(c)||/^(?:见|详见|按|执行|参见|依据).{0,16}(?:前附表|招标公告|招标文件|合同|协议书|通用条款|专用条款|图纸|清单|附件|资料)$/u.test(b)||/^(?:合同协议书|通用条款|专用条款|招标文件|招标公告|投标人须知前附表|附件|资料)$/u.test(b.replace(/[()()\d一二三四五六七八九十、..\s]/gu,"")))&&(!(b.length<4)||!!/\d/u.test(b))}(a)),d=b.maxIssues&&b.maxIssues>0?b.maxIssues:c.length;return c.slice(0,d).map(a=>({level:"warning",message:`已确认知识库事实未落位:${a.label}=${a.value}`,suggestion:`请将该事实落位到对应章节,并保持来源 ${a.sourceFile||"结构化事实主表"} 的原始口径。${c.length>d?`(共${c.length}个未落位事实,此处显示前${d}个)`:""}`}))}function bM(a){return(0,ac.K3)(`${a.fieldName||a.key} ${(0,M.lG)(a.value)}`)}function bN(a){return[...a.project,...a.schedule,...a.quality,...a.safety,...a.resources,...a.preciseFacts,...a.bills,...a.drawings,...a.rules,...a.specifications].map(bM).join("\n")}function bO(a,b){let c=[{label:"工期",corpus:bN({...b,project:[],quality:[],safety:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/工期|日历天|合同工期|计划工期/u},{label:"质量",corpus:bN({...b,project:[],schedule:[],safety:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/质量目标|质量标准|验收|复验/u},{label:"安全",corpus:bN({...b,project:[],schedule:[],quality:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/安全|文明|风险|应急/u},{label:"资源",corpus:bN({...b,project:[],schedule:[],quality:[],safety:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/资源|材料|设备|劳动力/u},{label:"工程量",corpus:bN({...b,project:[],schedule:[],quality:[],safety:[],resources:[],preciseFacts:[],drawings:[],rules:[],specifications:[]}),required:/工程量|清单|建筑面积|长度|吨|台|套|项/u}],d=a.replace(/\s+/gu,""),e=[];for(let b of c)b.required.test(a)&&0===[...new Set(b.corpus.split("\n").map(a=>a.replace(/\s+/gu,"").slice(0,24)).filter(Boolean))].filter(a=>a.length>=6&&d.includes(a)).length&&e.push({level:"warning",message:`证据使用覆盖率偏低:正文中未明显使用${b.label}相关事实`,suggestion:`请在相应章节中引用至少一项${b.label}事实,避免只写通用表述。`});return e}function bP(a){let b=[],c=new Map(a.map(a=>[a.title,a.content])),d=a.map(a=>`${a.title}
|
|
83
|
-
${a.content}`).join("\n\n");return/进度|工期/u.test(d)&&/资源|材料|设备|劳动力/u.test(d)&&!/保障|投入|调配|进场|计划/u.test(c.get(a.find(a=>/资源|材料|设备|劳动力/u.test(a.title))?.title||"")||"")&&b.push({level:"warning",message:"章节逻辑依赖不足:进度章节与资源章节之间缺少明显支撑关系",suggestion:"请在资源章节补充与工期目标相匹配的劳动力、材料、设备投入和调配计划。"}),/质量/u.test(d)&&/施工|工艺|技术/u.test(d)&&!/验收|复验|控制点|交底|隐蔽/u.test(d)&&b.push({level:"warning",message:"章节逻辑依赖不足:质量章节未明显支撑施工工艺控制",suggestion:"请在施工技术和质量章节之间补齐工艺控制点、验收要求和整改复验闭环。"}),/安全|文明|风险/u.test(d)&&!/应急|检查|整改|巡查|培训|演练/u.test(d)&&b.push({level:"warning",message:"章节逻辑依赖不足:安全章节缺少检查整改和应急支撑",suggestion:"请补齐风险识别、检查整改、应急响应和演练闭环。"}),b}let bQ=[{label:"工程名称",factGroups:["project"],patterns:[/工程名称\s*[::]\s*([^\n|]+)/u],locations:"封面、工程概况、页眉页脚、专项方案、表格标题"},{label:"建设地点",factGroups:["project"],patterns:[/建设地点\s*[::]\s*([^\n|]+)/u,/工程地点\s*[::]\s*([^\n|]+)/u],locations:"工程概况、周边环境、扬尘噪声、交通导改、属地化措施"},{label:"总工期",factGroups:["schedule"],patterns:[/总工期\s*[::]\s*([^\n|]+)/u,/计划工期\s*[::]\s*([^\n|]+)/u,/工期目标\s*[::]\s*([^\n|]+)/u],locations:"工程概况、进度计划、横道图、资源计划、纠偏措施"},{label:"建设规模",factGroups:["project","preciseFacts"],patterns:[/建设规模\s*[::]\s*([^\n|]+)/u,/建筑面积\s*[::]\s*([^\n|]+)/u,/道路长度\s*[::]\s*([^\n|]+)/u,/管线长度\s*[::]\s*([^\n|]+)/u],locations:"工程概况、工程量表、施工部署、资源配置"},{label:"机械数量型号",factGroups:["resources"],patterns:[/([\p{Script=Han}A-Za-z0-9]+(?:机|吊|泵|车))\s*[^\n|]{0,12}(\d+)\s*(台|套|辆)/u],locations:"机械表、平面布置、进度保障、安全专项方案"},{label:"劳动力人数",factGroups:["resources"],patterns:[/劳动力\s*[^\n|]{0,12}(\d+)\s*人/u,/班组\s*[^\n|]{0,12}(\d+)\s*人/u],locations:"劳动力计划、进度节点、抢工方案、工资保障台账"},{label:"危大工程清单",factGroups:["safety","preciseFacts"],patterns:[/危大工程\s*[::]\s*([^\n|]+)/u,/深基坑|高支模|起重吊装|脚手架/u],locations:"安全章节、专项方案、审批表、应急预案"},{label:"环保监测指标",factGroups:["quality","safety","preciseFacts"],patterns:[/PM10|PM2\.5|TSP|噪声|扬尘在线监测/u],locations:"文明施工、扬尘噪声、智慧工地、应急联动"}];function bR(a){return a.replace(/[\s,。;;::|]/gu,"").trim()}function bS(a,b){let c=[];for(let d of b){let b=a[d];if(Array.isArray(b))for(let a of b)a&&"object"==typeof a&&"value"in a&&"string"==typeof a.value&&c.push(a.value)}return c.map(bR).filter(Boolean)}function bT(a){return[...a.promptDocumentRules?.forbidToc?[]:[...(0,x.gN)(a.markdown),...(0,x.f8)(a.markdown)],...(0,x.K1)(a.markdown),...(0,x.Fv)(a.markdown),...(0,x.k0)(a.markdown),...(0,x.NS)(a.markdown),...(0,x.qK)(a.markdown,a.chapters),...(0,x.ji)(a.chapters),...(0,x.i0)(a.chapters),...(0,x.ST)(a.chapters),...(0,x.xX)(a.chapters),...(0,x.qm)(a.markdown,a.factsModel),...bO(a.markdown,a.factsModel),...function(a){let b=a.split(/\n\s*\n/gu).map(a=>a.trim()).filter(Boolean),c=/(?:加强组织领导|严格执行规范|落实责任制度|确保工程质量|强化过程管理|提高思想认识|完善管理体系|形成闭环管理|统筹推进|全面落实)/gu,d=[];for(let a of b){if(120>(0,w.V7)(a))continue;let b=a.match(c)||[],e=a.match(/材料|工序|验收|复验|节点|风险|交底|隐蔽|检验批|进场|责任人|台账|工期|质量|安全|资源/u)||[];b.length>=2&&e.length<2&&d.push({level:"warning",message:`段落存在空泛表述:${a.slice(0,48)}...`,suggestion:"请补充该段对应的对象、动作、控制点或验收闭环,避免只保留管理性套话。"})}return d}(a.markdown),...function(a){let b=[];for(let c of a){let a=G.filter(a=>c.content.includes(a));a.length>0&&b.push({level:"warning",message:`${c.title} 存在施工组织设计空泛套话:${[...new Set(a)].slice(0,8).join("、")}`,suggestion:"请按“责任岗位+执行动作+量化标准+检查频次+整改时限+复查销项”重写相关措施。"})}return b}(a.chapters),...function(a){let b=[];for(let c of a){let a=`${c.title} ${(c.sections||[]).join(" ")}`;for(let d of H){if(!d.pattern.test(a))continue;let e=d.required.filter(a=>!c.content.includes(a));e.length>=Math.ceil(d.required.length/2)&&b.push({level:"warning",message:`${c.title} 缺少${d.label}关键链条:${e.join("、")}`,suggestion:d.prompt})}}return b}(a.chapters),...function(a){let b=K(`${a.markdown} ${a.factsModel.project.map(a=>a.value).join(" ")} ${a.factsModel.preciseFacts.map(a=>a.value).join(" ")}`),c=[];for(let d of Object.values(I)){let e=d.chain.filter(a=>b.includes(K(a)));if(!(RegExp(d.label,"u").test(a.markdown)||e.length>=3))continue;let f=d.forbidden.filter(a=>b.includes(K(a)));f.length>=2&&c.push({level:"warning",message:`疑似${d.label}内容混入不匹配工序:${f.join("、")}`,suggestion:d.prompt}),e.length<Math.min(3,d.chain.length)&&c.push({level:"warning",message:`${d.label}工序链覆盖不足:仅识别到 ${e.join("、")||"未识别到关键工序"}`,suggestion:d.prompt})}return c}({markdown:a.markdown,factsModel:a.factsModel,chapters:a.chapters}),...function(a,b){let c=[];if(!/施工组织设计|施工组织|施组|质量|安全|文明施工/u.test(a))return c;for(let d of bQ){let e=bS(b,d.factGroups),f=(function(a,b){let c=[];for(let d of b){let b=new RegExp(d.source,d.flags.includes("g")?d.flags:`${d.flags}g`);for(let d of a.matchAll(b)){let a=bR(d[1]||d[0]||"");a.length>=2&&a.length<=80&&c.push(a)}}return[...new Set(c)]})(a,d.patterns).filter(a=>!function(a,b){return 0===b.length||b.some(b=>b.includes(a)||a.includes(b)||a.length>=4&&b.includes(a.slice(0,4)))}(a,e)).slice(0,5);f.length>0&&c.push({level:"warning",message:`施组数据一致性风险:${d.label} 可能与项目图谱/事实不一致(${f.join("、")})`,suggestion:`请核对${d.label}在${d.locations}中的表述,统一以招标文件、项目图谱和可信事实为准。`})}return c}(a.markdown,a.factsModel),...function(a,b){let c=[],d=bS(b,["project","schedule","resources","quality","safety","preciseFacts"]);if(0===d.length)return c;for(let b of a)/概况|进度|资源|质量|安全|文明|工资|应急/u.test(`${b.title} ${(b.sections||[]).join(" ")}`)&&(d.some(a=>a.length>=3&&b.content.includes(a.slice(0,Math.min(10,a.length))))||c.push({level:"warning",message:`${b.title} 缺少可识别的项目图谱事实支撑`,suggestion:"请至少引用工程名称、工期、工程量、资源、风险、质量安全目标等项目专属事实之一,避免纯模板化。"}));return c}(a.chapters,a.factsModel),...function(a){let b=[];for(let c of a){if(!/项目主要施工内容|主要施工内容/u.test(`${c.title} ${(c.sections||[]).join(" ")}`))continue;let a=function(a){let b=a.split("\n"),c=b.findIndex(a=>/^###\s+(?:\d+(?:\.\d+)*\s+)?(?:项目主要施工内容|主要施工内容)\s*$/u.test(a.trim()));if(c<0)return"";let d=b.length;for(let a=c+1;a<b.length;a+=1)if(/^#{2,3}\s+/u.test(b[a].trim())){d=a;break}return b.slice(c,d).join("\n").replace(/^\*\*([^*\n]{2,50})\*\*\s*$/gmu,"#### $1").replace(/承包人法(?=[::])/gu,"施工方法")}(c.content)||c.content.replace(/承包人法(?=[::])/gu,"施工方法"),d=(a.match(/^####\s+(?:\d+(?:\.\d+)*\s+)?[一二三四五六七八九十\d]*[、..]?\s*\S+/gmu)||[]).length||(a.match(/^[一二三四五六七八九十]+、\S+/gmu)||[]).length,e=["施工概况","施工流程","施工方法"].filter(b=>!a.includes(b));d<5&&b.push({level:"error",severity:"blocker",message:`${c.title} 主要施工内容工作包不足:当前 ${d} 个,要求不少于 5 个`,suggestion:"按资料识别专业工程/分部分项工作包,逐项写施工概况、施工流程、施工方法。"}),e.length>0&&b.push({level:"error",severity:"blocker",message:`${c.title} 主要施工内容缺少结构项:${e.join("、")}`,suggestion:"每个工作包固定包含“施工概况、施工流程、施工方法”,流程用箭头串联关键工序。"}),/→|->/u.test(a)||b.push({level:"error",severity:"blocker",message:`${c.title} 主要施工内容缺少箭头式施工流程`,suggestion:"施工流程应写成“测量放线→基层处理→工序实施→检查验收→资料归档”等链条。"}),/^\s*\|.+\|\s*$/mu.test(a)&&b.push({level:"error",severity:"blocker",message:`${c.title} 主要施工内容不应使用 Markdown 表格替代工作包正文`,suggestion:"主要施工内容应采用三级小节和段落式工作包写法,不使用表格承载主体内容。"})}return b}(a.chapters),...function(a){let b=[];for(let c of a){let a=`${c.title} ${(c.sections||[]).join(" ")} ${c.content}`;for(let d of J)d.pattern.test(a)&&!c.content.includes(d.title)&&b.push({level:"warning",message:`${c.title} 可补充隐藏高分模块:${d.title}`,suggestion:d.prompt})}return b}(a.chapters),...bP(a.chapters),...function(a,b,c){let d={factuality:2*!(0,x.vY)(a,c).some(a=>"error"===a.level),structure:b.length>0&&b.every(b=>a.includes(b.title)&&(0,w.V7)(b.content)>=600)?2:1,depth:0===(0,x.i0)(b).length?2:1,executable:0===bP(b).length?2:1,evidence:0===bO(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,x.vY)(a.markdown,a.factsModel),...(0,x.iC)(a.markdown),...(0,x.BV)(a.markdown),...(0,v.dh)(a.markdown),...(0,x.Ty)(a.chapters),...(0,x.N1)(a.markdown,a.factsModel),...(0,x.S2)(a.markdown,a.chapters,a.factsModel),...function(a,b={}){let c=a.filter(a=>!a.placed);if(0===c.length)return[];let d=a.length,e=(d-c.length)/d,f=[];return e<.3?f.push({level:"warning",message:`BOQ 清单行级落位严重不足:${d-c.length}/${d} 行(${Math.round(100*e)}%)`,suggestion:`清单明细数量较大,建议优先补充主要分部分项、关键规格和大额工程量。未落位清单项示例:${c.slice(0,5).map(a=>`${a.itemName} ${a.quantity}${a.unit}`).join(";")}`}):e<.6&&f.push({level:"warning",message:`BOQ 清单行级落位不足:${d-c.length}/${d} 行(${Math.round(100*e)}%)`,suggestion:`建议补充落位:${c.slice(0,5).map(a=>a.itemName).join("、")}`}),f}(function(a,b){let c=b.tables||[],d=[],e=bJ(a);for(let a of c){let b=a.headers.map(a=>a.replace(/\s+/gu,"").toLowerCase()),c=b.findIndex(a=>/项目名称|名称|清单项|分部分项|项目特征|工程内容|材料名称|设备名称/u.test(a)),f=b.findIndex(a=>/编码|编号|序号|项目编码/u.test(a)),g=b.findIndex(a=>/数量|工程量/u.test(a)),h=b.findIndex(a=>/单位/u.test(a));for(let b of a.rows){let i=c>=0&&b[c]||"",j=f>=0&&b[f]||"",k=g>=0&&b[g]||"",l=h>=0&&b[h]||"";if(!i&&!j)continue;let m=bJ(i),n=bJ(j),o=m.length>=3&&e.includes(m.slice(0,12))||n.length>=3&&e.includes(n.slice(0,8));d.push({itemCode:j.slice(0,50),itemName:i.slice(0,200),quantity:k.slice(0,50),unit:l.slice(0,20),sourceFile:a.sourceFile||"",placed:o})}}return d.sort((a,b)=>a.placed===b.placed?0:a.placed?1:-1)}(a.markdown,a.factsModel)),...(0,x.yd)(a.markdown,a.factsModel),...function(a){let b=[];return bp.test(a)&&b.push({level:"warning",message:"正文包含联网增强过程性表述",suggestion:"请删除联网检索、网页资料、搜索结果等过程性话术,改为正式交付语言。"}),b}(a.markdown),...(0,x.bM)(a.markdown),...(0,x.M$)(a.markdown,a.promptBindings),...(0,x.AC)(a.markdown,a.chapters),...(0,x.mR)(a.markdown,a.template),...(0,v.UG)(a.markdown,a.template),...(0,v.Ed)(a.markdown,a.promptDocumentRules)]}let bU={project:"项目基础事实",schedule:"工期与节点",quality:"质量目标与验收",safety:"安全文明要求",resources:"资源投入依据",quantities:"清单/图纸/工程量事实",rules:"规范规则与验收要求"};function bV(a){let b=a.chapters.map(b=>{let c=function(a){let b=["project"];return/进度|工期|节点|部署/u.test(a.title)&&b.push("schedule"),/质量|验收|材料/u.test(a.title)&&b.push("quality","rules"),/安全|文明|风险|危大/u.test(a.title)&&b.push("safety","rules"),/资源|材料|设备|劳动力|机械/u.test(a.title)&&b.push("resources"),/施工|工艺|技术|方案|清单|工程量|图纸/u.test(a.title)&&b.push("quantities"),[...new Set(b)]}(a.templateChapters.find(a=>a.id===b.id||a.title===b.title)||b),d=c.filter(c=>{var d;return d=a.factsModel,("project"===c?d.project.length>0||d.preciseFacts.length>0:"schedule"===c?d.schedule.length>0:"quality"===c?d.quality.length>0||d.specifications.length>0:"safety"===c?d.safety.length>0||d.rules.length>0:"resources"===c?d.resources.length>0||d.bills.length>0:"quantities"===c?d.bills.length>0||d.drawings.length>0||d.tables.length>0:"rules"===c&&(d.rules.length>0||d.specifications.length>0))||(b.evidence||[]).some(a=>RegExp(bU[c]||c,"u").test(`${a.sectionTitle||""} ${a.content||""}`))}),e=c.filter(a=>!d.includes(a)),f=c.length?Math.round(d.length/c.length*100):100;return{chapterId:b.id,title:b.title,requiredDomains:c,confirmedDomains:d,unconfirmedDomains:e,score:f}}),c=new Set(a.evidence.map(a=>a.filePath).filter(Boolean)),d=b.length?Math.round(b.reduce((a,b)=>a+b.score,0)/b.length):100;return{score:d,evidenceCount:a.evidence.length,confirmedFiles:c.size,chapterReports:b,unconfirmedDomains:[...new Set(b.flatMap(a=>a.unconfirmedDomains))],remediation:d>=95?"知识库事实覆盖已达到高置信交付要求。":"系统需扩大本地知识库检索、补抽结构化事实,并将已确认事实落位到对应章节。"}}function bW(a){return a.score>=85?[]:[{level:"warning",message:`系统知识库覆盖确认率偏低:${a.score}%`,suggestion:`${a.remediation} 未确认事实域:${a.unconfirmedDomains.map(a=>bU[a]||a).join("、")||"无"}`}]}function bX(a){return a.chapters.map(b=>{let c=a.templateChapters.find(a=>a.id===b.id||a.title===b.title),d=function(a,b){let c=`${a.title} ${(b?.sections||a.sections||[]).join(" ")}`;return[{key:"structure",label:"结构完整",passed:(a.sections||b?.sections||[]).length>=2||/###\s+/u.test(a.content)},{key:"depth",label:"内容深度",passed:(0,w.V7)(a.content)>=600},{key:"evidence",label:"证据绑定",passed:(a.evidence||[]).length>0},{key:"professional",label:"专业控制点",passed:/验收|复核|检查|交底|控制点|整改|闭环|台账|进场|工序/u.test(a.content)},{key:"schedule",label:"工期支撑",passed:!/进度|工期|节点/u.test(c)||/工期|节点|计划|纠偏|资源|穿插/u.test(a.content)},{key:"quality",label:"质量验收",passed:!/质量|验收/u.test(c)||/质量|验收|复验|隐蔽|检验批|整改/u.test(a.content)},{key:"safety",label:"安全闭环",passed:!/安全|文明|风险|危大/u.test(c)||/风险|检查|整改|应急|培训|交底/u.test(a.content)}]}(b,c),e=d.filter(a=>a.passed).length;return{chapterId:b.id,title:b.title,score:d.length?Math.round(e/d.length*100):100,checks:d,action:e===d.length?"章节覆盖完整。":"系统需补齐章节结构、证据绑定、专业控制点和跨章依赖。"}})}function bY(a){return a.filter(a=>a.score<80).map(a=>({level:"warning",message:`章节覆盖不足:${a.title} ${a.score}%`,suggestion:`${a.action} 未通过项:${a.checks.filter(a=>!a.passed).map(a=>a.label).join("、")}`}))}function bZ(a){return 0===a.length?100:Math.round(a.reduce((a,b)=>a+b,0)/a.length)}function b$(a){let b=Math.max(0,100-a.issues.reduce((a,b)=>a+("error"===b.level?10:"warning"===b.level?4:1),0)),c=bZ(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,w.V7)(b.content)>=600)?95:78)+.3*c)),professionalDepth:c,executable:bZ(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?["已达到当前质量目标,建议保持事实口径和导出前复核。"]:["系统需优先修复阻断问题、扩大本地知识库检索、补抽结构化事实,并将未落位事实写入对应章节。","对低分章节执行结构补齐、专业控制点补写、跨章一致性复核和证据引用覆盖修复。"]}}function b_(a){return a.passed?[]:[{level:"warning",message:`交付置信度未达目标:${a.deliveryProbability}% / ${a.target}%`,suggestion:a.actions.join(" ")}]}function b0(a){let b=[],c=a.issues.filter(a=>"error"===a.level);c.length>0&&b.push({priority:"high",title:"阻断问题修复",action:`修复 ${c.length} 个导出阻断问题,优先处理事实冲突、结构缺失、模板规则违规和占位残留。`});let d=(a.factTraces||[]).filter(a=>"unplaced"===a.status);if(d.length>0){let a=d.length>12?`${d.length} 项(示例:${d.slice(0,8).map(a=>a.label).join("、")} 等)`:`${d.length} 项(${d.map(a=>a.label).join("、")})`;b.push({priority:"high",title:"事实落位修复",action:`将 ${a} 已确认知识库事实写入对应章节,保持原始数值、单位和来源口径。`})}a.knowledgeCoverage&&a.knowledgeCoverage.score<95&&b.push({priority:"medium",title:"知识库确认覆盖修复",action:"扩大本地知识库检索范围,执行事实补抽和章节证据重分配;这是系统检索、抽取、落位问题,不要求用户追加资料。"});let e=(a.chapterCoverage||[]).filter(a=>a.score<80);if(e.length>0){let a=e.length>10?`${e.slice(0,8).map(a=>a.title).join("、")} 及其他${e.length-8}章`:e.map(a=>a.title).join("、");b.push({priority:"medium",title:"章节覆盖修复",action:`补齐低覆盖章节(${e.length}章):${a}。`})}return a.qualityReport&&!a.qualityReport.passed&&b.push({priority:"medium",title:"交付置信度修复",action:a.qualityReport.actions.join(" ")}),b}function b1(a){return a.filter(a=>"high"===a.priority).map(a=>({level:"warning",message:`修复策略待执行:${a.title}`,suggestion:a.action}))}function b2(...a){return a.flat()}var b3=c(87942);let b4=[{key:"project_name",label:"项目名称",aliases:["项目名称","工程名称","招标项目名称"],valueType:"text"},{key:"project_code",label:"项目编号",aliases:["项目编号","招标项目编号","工程编号"],valueType:"identifier"},{key:"owner",label:"招标人",aliases:["招标人","项目业主","建设单位","发包人","采购人"],valueType:"organization"},{key:"project_location",label:"建设地点",aliases:["建设地点","实施地点","服务地点","交付地点"],valueType:"location"},{key:"project_scale",label:"建设规模",aliases:["建设规模","工程规模","项目规模"],valueType:"scale"},{key:"schedule_requirement",label:"计划工期",aliases:["计划工期","合同工期","总工期","工期","实施周期","服务期限"],valueType:"duration"},{key:"quality_standard",label:"质量标准",aliases:["质量标准","质量目标","验收标准","服务标准"],valueType:"standard"},{key:"project_investment_estimate",label:"合同估算价",aliases:["合同估算价","合同估算价格","投资估算","估算价格","最高投标限价","招标控制价","预算金额"],valueType:"money"}];function b5(a){return/^(见|详见|参见|按|以).{0,30}(招标公告|招标文件|投标人须知|前附表|合同|附件|图纸|清单|约定|规定|执行)/u.test(a)||/见招标公告|见投标人须知前附表|详见|按.*执行/u.test(a)}function b6(a,b){let c=ai(a.value),d=[],e=30,f=!1;(!c||c.length>260)&&(f=!0,e-=100,d.push("空值或过长")),/###|投标文件的编制|备选投标方案|投标将被否决|投标人提供|投标有效期|电子交易系统|公共资源交易监督管理部门|中标候选|评标委员会|实质性内容作出响应|招标人有权核查/u.test(c)&&(f=!0,e-=100,d.push("大段条款或 Markdown 噪声")),b4.some(a=>a.key!==b.key&&a.aliases.some(a=>c.includes(a)))&&(e-=45,d.push("包含其他字段名,疑似字段串位")),b5(c)&&(e-=35,d.push("引用型弱值"));let g=function(a,b){switch(b.valueType){case"duration":if(!/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年)/u.test(a))return{rejected:!0,score:-80,reason:"缺少明确工期数值和时间单位"};return{rejected:!1,score:45,reason:"包含明确工期数值和时间单位"};case"money":if(!/\d+(?:\.\d+)?\s*(?:万元|元|亿元)/u.test(a))return{rejected:!0,score:-80,reason:"缺少明确金额数值和单位"};if(/综合单价|税率|增值税|利润|报价明细/u.test(a))return{rejected:!0,score:-90,reason:"命中非目标商务明细"};return{rejected:!1,score:45,reason:"包含明确金额数值和单位"};case"standard":if(!/合格|优良|一次性验收|达到|满足|符合/u.test(a))return{rejected:!0,score:-70,reason:"不符合标准类字段表达"};if(/工期|投标|技术标准|有效期/u.test(a))return{rejected:!0,score:-90,reason:"标准字段包含其他字段或投标条款"};return{rejected:!1,score:40,reason:"符合标准类字段表达"};case"location":if(b5(a))return{rejected:!1,score:-40,reason:"引用型地点弱值"};if(!/(省|市|区|县|镇|街道|路|园区|大道|巷|内|号)/u.test(a))return{rejected:!1,score:-10,reason:"地点具体性不足"};return{rejected:!1,score:35,reason:"包含具体地址特征"};case"organization":if(/监督管理部门|投标人|中标候选人|评标委员会/u.test(a))return{rejected:!0,score:-90,reason:"组织字段角色串位"};if(/(公司|集团|单位|委员会|机关|中心|局|院|所|政府|运营管理)/u.test(a))return{rejected:!1,score:35,reason:"包含组织名称特征"};return{rejected:!1,score:5,reason:"组织名称特征较弱"};case"identifier":if(!/^[A-Za-z0-9\-_.()()]+$/u.test(a))return{rejected:!0,score:-70,reason:"编号格式不合法"};return{rejected:!1,score:35,reason:"符合编号格式"};case"scale":if(/\d+(?:\.\d+)?\s*(?:㎡|平方米|m²|米|m|层|栋|座|万元|元)/iu.test(a))return{rejected:!1,score:30,reason:"包含规模数值或单位"};return{rejected:!1,score:5,reason:"规模字段为文本描述"};default:if("project_name"===b.key){if(/存在部位|风险等级|管控措施|监测频次|闭环要求|序号|内容|范围|不适用/u.test(a))return{rejected:!0,score:-90,reason:"项目名称字段串位或表头噪声"};if(!/项目|工程|学院|宿舍|楼|校区|施工总承包/u.test(a))return{rejected:!0,score:-70,reason:"项目名称缺少工程名称特征"};return{rejected:!1,score:35,reason:"符合项目名称特征"}}return{rejected:!1,score:a.length>=2?10:-20,reason:"文本字段"}}}(c,b);return e+=g.score,d.push(g.reason),g.rejected&&(f=!0),"evidence"===a.sourceType&&(e+=20,d.push("来源为证据原文")),a.sourceName&&/招标文件|招标公告|前附表|合同|需求书|正文/u.test(a.sourceName)&&(e+=15,d.push("来源文件可信")),"generated_markdown"===a.sourceType&&(e-=10),{...a,value:c,confidence:e,rejected:f,reasons:d}}function b7(a){return function(a,b=b4){let c=new Map;for(let d of b){let b=a.filter(a=>a.fieldKey===d.key).sort((a,b)=>b.confidence-a.confidence),e=b.find(a=>!a.rejected&&a.confidence>0);e&&c.set(d.key,{fieldKey:d.key,label:d.label,value:e.value,source:e.sourceName||e.sourceType,confidence:e.confidence,candidates:b,selectedReason:e.reasons.join(";")})}return c}([...function(a){let b=[];for(let c of a){let a=function(a){let b=`${a.fieldId||""}${a.key||""}${a.fieldName||""}`;return b4.find(c=>c.key===a.fieldId||c.aliases.some(a=>b.includes(a)))}(c);if(!a)continue;let d=(0,M.lG)(c.value);b.push(b6({fieldKey:a.key,label:a.label,value:d,sourceType:"structured_fact",sourceName:c.sourceFile||c.sourceRef?.sectionTitle||"structured_fact"},a))}return b}(a.facts),...function(a,b="generated_markdown"){let c=[];for(let d of a.split(/\r?\n/u)){if(!/^\|.*\|\s*$/u.test(d)||/^\|\s*:?-{3,}:?/u.test(d))continue;let a=d.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.replace(/\*\*/gu,"").trim());if(a.length<2)continue;let e="序号"===a[0]&&a.length>=3?a[1]:a[0],f="序号"===a[0]&&a.length>=3?a[2]:a[1],g="序号"===a[0]&&a.length>=4?a[3]:a[2],h=b4.find(a=>a.aliases.some(a=>e.includes(a))||a.label===e);!h||!f||/内容|参数|资料未明确|系统暂未确认|暂未从知识库确认/u.test(f)||c.push(b6({fieldKey:h.key,label:h.label,value:f,sourceType:"generated_markdown",sourceName:g||b},h))}return c}(a.markdown||"")])}function b8(a){return({user:100,contract:90,tender:85,boq:75,drawing:70,standard:60,evidence:55,structured_fact:50,projectGraph:40,generated_markdown:30,derived:20,unknown:10})[a]}function b9(a){let b=e.join(process.env.HOME||process.cwd(),".customize-agent","cache","document-workflow",(0,M.c6)(a||"default"));return aa.mkdirSync(b,{recursive:!0}),b}var ca=c(32434);function cb(a,b){return 0>=(0,w.V7)(a.content)?"failed":"completed"}let cc=["项目名称 项目编号 招标人 项目概况与招标范围 建设地点 建设规模 计划工期 质量标准 合同估算价","计划工期 合同工期 总工期 日历天","合同估算价 合同估算价格 投资估算 最高投标限价 招标控制价","质量标准 质量目标 合格","建设地点 建设规模 招标范围"];function cd(a){let b=ai(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+=3),/投标人须知|保证金|付款|违约金|电子交易|公共资源|开标|评标|合同协议书/u.test(b)&&(c-=4),c}async function ce(a){let b=[],c=new Set(a.scopedFilePaths),d=await Promise.all(cc.map(async b=>((0,M.Te)(a.signal),(await a.manager.search(a.projectRoot,b,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:10,weights:{keyword:.65,vector:.25,rewrite:.8,hybridBonus:.2},generationMode:!1})).results.filter(a=>c.has(a.filePath)&&cd(`${a.sectionTitle||""}
|
|
84
|
-
${a.content}`)>0).map(b=>({chapterId:"project-basic",filePath:b.filePath,score:Math.max(b.score,1)+cd(`${b.sectionTitle||""}
|
|
85
|
-
${b.content}`),content:b.content,roleId:a.fileRoleByPath.get(b.filePath),processingType:a.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"pinned-evidence"})))));for(let c of(b.push(...d.flat()),a.scopedFilePaths)){(0,M.Te)(a.signal);let d=a.project.getFileDetail?.(c,{maxChunkContentChars:12e3});if(d?.chunks?.length)for(let e of d.chunks){let f=cd(`${e.sectionTitle||""}
|
|
86
|
-
${e.content||""}`);if(f<=0)continue;let g=d.file?.relativePath||c;b.push({chapterId:"project-basic",filePath:g,score:1+f,content:e.content,roleId:a.fileRoleByPath.get(g),processingType:a.fileProcessingByPath.get(g),sectionTitle:e.sectionTitle,source:"pinned-evidence"})}}let e=new Set;return b.sort((a,b)=>b.score-a.score).filter(a=>{let b=`${a.filePath}|${a.sectionTitle||""}|${ai(a.content).slice(0,180)}`;return!e.has(b)&&(e.add(b),!0)}).slice(0,24)}function cf(a){return a.filter(a=>/项目名称|工程名称|项目编号|招标项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`))}function cg(a){return ai(a).replace(/[。;;]$/u,"").trim()}function ch(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))&&ak(h||"project_name",e)&&b.set(g,[cg(e),cg(f||"项目资料")||"项目资料"])}return b}(b),e=b7({facts:a,markdown:c}),f=a=>cg((0,M.lG)(a||"")).replace(/\|/gu,"").replace(/\bCOL\d+\b/gu,"").replace(/\s{2,}/gu," ").trim(),g=(a,b)=>{let g=e.get(a);if(g){let b=f(g.value);if(b&&ak(a,b))return[b,g.source||"项目资料"]}return function(a,b){for(let[c,d]of a.entries())if(b.some(a=>a.test(c)))return d}(d,b)||("project_name"===a?(()=>{let a=[/([\u4e00-\u9fa5A-Za-z0-9()()\-—_\s·]+?(?:施工总承包项目|一期项目|学生宿舍一期|学生宿舍项目))/u.exec(c)?.[1],/项目名称[::\s|]+([^|\n。;;]{6,80})/u.exec(c)?.[1]].map(f).filter(a=>a&&ak("project_name",a));return a[0]?[a[0],"项目资料"]:void 0})():void 0)||["",""]};return[["项目名称",...g("project_name",[/项目名称|工程名称|project_name/u])],["项目编号",...g("project_code",[/项目编号|招标项目编号|project_code/u])],["招标人",...g("owner",[/招标人|项目业主|建设单位|发包人|owner/u])],["建设地点",...g("project_location",[/建设地点|project_location/u])],["建设规模",...g("project_scale",[/建设规模|project_scale/u])],["计划工期",...g("schedule_requirement",[/计划工期|合同工期|周期要求|schedule_requirement/u])],["质量标准",...g("quality_standard",[/质量标准|quality_standard/u])],["合同估算价",...g("project_investment_estimate",[/合同估算|投资估算|最高投标限价|招标控制价|project_investment_estimate/u])]].filter(([,a])=>!!a).map(([a,b,c])=>[a,b,c||"项目资料"])}function ci(a,b="",c=b){return["**项目基本信息表**","","| 信息项 | 内容 |","|---|---|",...ch(a,b,c).map(a=>`| ${a[0]} | ${a[1]} |`)].join("\n")}function cj(a){return/^\s*\|?\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a.trim())}function ck(a){let b=a.trim();if(!b||/^#{1,6}\s+/u.test(b)||cj(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 cl(a){return a.trim().replace(/^\|/u,"").replace(/\|$/u,"").trim().split("|").map(a=>a.trim())}function cm(a,b){let c=a.slice(0,b);for(;c.length<b;)c.push("");return`| ${c.join(" | ")} |`}function cn(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(ck(d)&&cj(f)){for(c.push(d),e!==a+1&&c.push(b[a+1]||""),c.push(f),a=e+1;a<b.length&&ck(b[a]||"");)c.push(b[a]||""),a+=1;continue}if(!ck(d)){c.push(d),a+=1;continue}let g=[],h=a;for(;h<b.length&&ck(b[h]||"");)g.push(b[h]||""),h+=1;let i=g.map(a=>cl(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(cm(function(a){if(2===a)return["信息项","内容"];let b=["控制项目","执行要求","责任岗位","检查标准","形成资料","闭环要求","备注"];return Array.from({length:a},(a,c)=>b[c]||`补充说明${c+1}`)}(k),k)),c.push(cm(Array.from({length:k},()=>"---"),k)),g))c.push(cm(cl(a),k));(a=h)<b.length&&b[a]?.trim()&&c.push("")}return c.join("\n").replace(/\n{3,}/gu,"\n\n")}function co(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 cp(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=>cl(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&&!(ck(c[a]||"")&&cj(c[a+1]||""))&&""===(c[a]||"").trim();)f.push(c[a]||""),a+=1;if(a<c.length&&ck(c[a]||"")&&cj(c[a+1]||""))for(f.push(c[a]||"",c[a+1]||""),a+=2;a<c.length&&ck(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&&!(ck(c[a]||"")&&cj(c[a+1]||""))&&!/^###\s+/u.test(c[a]||"");)f.push(c[a]||""),a+=1;if(a<c.length&&ck(c[a]||"")&&cj(c[a+1]||"")){let g=[c[a]||"",c[a+1]||""];for(a+=2;a<c.length&&ck(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(ck(b)&&cj(f)){let g=[b,f];for(a+=2;a<c.length&&ck(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 cq(a,b){if(a=((a,b)=>{let c=a.split("\n"),d=[];for(let a=0;a<c.length;a+=1){let e=c[a]||"",f=/^(#{3,5})\s+(.+)$/u.exec(e.trim()),g=f?.[2]?.replace(/^\d+(?:\.\d+)*\s+/u,"").trim()||"";if(f&&b.some(a=>a.test(g))){for(a+=1;a<c.length&&!/^#{2,5}\s+/u.test((c[a]||"").trim());)a+=1;a-=1;continue}d.push(e)}return d.join("\n")})(a,[/^工程概况一览表$/u,/^招标文件?评分.*响应索引表$/u,/^招标评分项响应索引表$/u]).replace(/\*\*(?:工程概况一览表|招标文件?评分.*响应索引表|招标评分项响应索引表)\*\*[\s\S]*?(?=\n{2,}#{2,5}\s+|\n{2,}(?:[^|\n#]|$)|$)/gu,"").replace(/\n{3,}/gu,"\n\n"),!/项目基本信息|项目概况|工程概况|招标范围/u.test(a))return cp(cn(co(a)));if(!/\|\s*信息项\s*\|\s*内容\s*\|/u.test(a)&&cf(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=`${ci(b,"",a)}
|
|
87
|
-
|
|
88
|
-
`;a=`${a.slice(0,d)}
|
|
89
|
-
${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=ci(b,i,a);if(!ch(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()}
|
|
90
|
-
|
|
91
|
-
${j}${k?`
|
|
92
|
-
|
|
93
|
-
${k}`:""}
|
|
94
|
-
|
|
95
|
-
`;return cp(cn(co(`${a.slice(0,d)}${l}${a.slice(h).trimStart()}`)))}function cr(a,b){return 0!==cf(b).length&&/资料未明确|系统暂未从知识库确认|项目资料暂未明确/u.test(a)?["计划工期","合同工期","质量标准","合同估算价","合同估算价格","建设地点","建设规模"].filter(b=>RegExp(`${b}[^
|
|
96
|
-
|。;;]{0,40}(?:资料未明确|系统暂未从知识库确认|项目资料暂未明确)`,"u").test(a)).map(a=>({level:"error",message:`${a} 已抽取到项目资料事实但正文仍显示暂未明确`,suggestion:"请优先使用项目基础事实卡片中的资料原值,不得用占位表达覆盖已确认事实。"})):[]}function cs(a,b){return(function(a){let b=a;for(let[a,c]of[[/加强管理/gu,"明确责任岗位、执行动作、检查频次和整改闭环"],[/严格控制/gu,"按标准限值、检查频次和复查销项要求控制"],[/确保质量/gu,"通过样板引路、三检制度、隐蔽验收和质量问题闭环整改保证质量"],[/及时处理/gu,"发现问题后明确责任人、整改时限、复查人员和销项记录"],[/强化监督/gu,"由责任岗位按日巡查、周复核和问题台账闭环监督"]])b=b.replace(a,c);return b})((0,v.z1)((0,v.Re)((0,v.wi)(a.replace(/^\s*本表依据项目图谱[^\n。]*[。.]\s*$/gmu,"").replace(/^\s*本表依据(?:招标文件|工程量清单|施工区段|质量目标|计划工期|项目图谱|危险源辨识|材料设备清单|现场条件|图纸资料|图纸设计说明)[^\n。]*[。.]\s*$/gmu,"").replace(/^\s*表中事项应纳入[^\n。]*[。.]\s*$/gmu,"").replace(/^\s*正式输出的表格\/清单必须形成[^\n。]*[。.]\s*$/gmu,"").replace(/\n{3,}/gu,"\n\n").trim().replace(/【修复任务包】[\s\S]*?(?=\n#{1,3}\s|\n\*\*|\n\|\s|$)/gu,"").replace(/^修复类型:.*$/gmu,"").replace(/^修复对象:.*$/gmu,"").replace(/^问题:【修复任务包】[\s\S]*?(?=\n#{1,3}\s|\n\*\*|\n\|\s|$)/gu,"").replace(/^输出要求:.*$/gmu,"").replace(/重新生成/gu,"补充完善").replace(/见招标公告|见投标人须知前附表/gu,"按已确认的招标边界和施工条件执行").replace(/见招标文件/gu,"按本项目招标文件已明确的相应条款执行").replace(/招标范围:/gu,"施工范围:").replace(/主要承包人案|承包人案/gu,a=>a.replace(/承包人案/gu,"施工方案")).replace(/施工方/gu,"承包人").replace(/由承包人/gu,"由承包人").replace(/按图纸/gu,"依据经确认的设计文件和图纸内容组织实施").replace(/按设计要求/gu,"依据设计文件明确的构造、材料、尺寸和验收要求执行").replace(/按(?:资料|文件|说明|方案|规范|标准|要求)/gu,"依据本项目已确认资料、技术文件和验收标准").replace(/满足(?:相关|有关)?要求/gu,"满足本项目已明确的质量、安全、技术和验收控制要求").replace(/本节(?:将|主要|重点)?/gu,"").replace(/本章将/gu,"").replace(/根据需要|视情况|结合实际情况/gu,"结合已确认资料、现场条件和审批后的施工组织安排").replace(/相关要求/gu,"本项目已明确的质量、安全、技术和验收要求").split(/\n{2,}/u).map(a=>{if(/^\s*(#{1,6}\s+|[-*+]\s+|\|)/u.test(a)||a.length<520)return a;let b=a.split(/(?<=[。;])/u).map(a=>a.trim()).filter(Boolean);if(b.length<4)return a;let c=[],d="";for(let a of b)d.length>260&&d.length+a.length>420?(c.push(d),d=a):d+=a;return d&&c.push(d),c.join("\n\n")}).join("\n\n"))))).replace(/\n{3,}/gu,"\n\n").trim()}function ct(a,b){let c=a.chapterPrompts.filter(a=>"writer"===a.category||"chapter"===a.category||"formatting"===a.category),d=[...a.writerPrompts,...c,...a.formattingPrompts],e=a.writerPrompts[0],f=d.map(a=>`${"writer"===a.category?"写作控制提示词":a.category}|${a.roleId}|${a.name}|${a.content.length} 字符`),g=aD(a.writerPrompts),h=aD([...c,...a.formattingPrompts]);return{primaryPromptId:e?.id,primaryWriter:e,prompts:d,promptTexts:[g?`【最高优先级:配置写作主控提示词】
|
|
97
|
-
${g}`:"",h?`【章节/格式提示词】
|
|
98
|
-
${h}`:""].filter(Boolean).join("\n\n"),promptDetails:f}}function cu(a){return ai(a).replace(/[\s,,.。::;;||()()《》<>【】"“”'‘’]/gu,"").split("[").join("").split("]").join("").toLowerCase()}function cv(a){return/工程造价|造价|报价|投标报价|报价明细|综合单价|单价|合价|金额|税率|增值税|利润|预留金|暂列金额|最高投标限价|招标控制价|合同估算价|合同估算价格|投资估算|估算价/u.test(a)}function cw(a){let b=cg((0,M.lG)(a));return!b||/资料未明确|系统暂未从知识库确认|未确认|待确认|无|暂无/u.test(b)||/###|第\s*\d+\s*页|共\s*\d+\s*页|新版交易系统|操作帮助|登录页面|见招标公告|未尽事宜|详见图纸|招标文件补疑|政府相关文件|规范等其它资料/u.test(b)||/^\d+(?:\.\d+)?\s*(?:mm|cm|m|㎡|m²|m3|m³|%|元|万元)?$/iu.test(b)||cv(b)||b.length>160?"":b}function cx(a,b,c={}){return(function(a,b,c={}){let d=b.filter(a=>{let b=`${a.key||""}${a.fieldName||""}${a.fieldId||""}`,c=(0,M.lG)(a.value);return!(cv(`${b}${c}`)||!cw(c)||/第\s*\d+\s*页|新版交易系统|操作帮助|见招标公告|未尽事宜|详见图纸|招标文件补疑|政府相关文件|规范等其它资料/u.test(`${b}${c}${a.sourceFile||""}`))&&(/项目名称|工程名称|项目编号|招标项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|计划工期|合同工期|质量标准|质量目标/u.test(b)||/危大|安全|资源|材料|机械|设备/u.test(b)&&!/^\d+(?:\.\d+)?\s*(?:mm|cm|m|㎡|m²|m3|m³|%|元|万元)?$/iu.test(c))}),e=new Set,f=[];for(let b of d){let d=cw(b.value);if(!d)continue;let g=b.fieldName||b.key||b.fieldId||"资料事实",h=`${g}:${d}`;if(!e.has(h)&&(e.add(h),!function(a,b){let c=cu(a),d=cu(b);if(!d||d.length<2||c.includes(d))return!0;let e=b.match(/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年|万元|元|平方米|㎡|m²|立方米|m³|米|m|mm|cm|台|套|人|项|%|MPa|kPa)?/giu)||[];return e.length>0&&e.some(a=>cu(a).length>=2&&c.includes(cu(a)))}(a,d)&&(f.push({fact:b,label:g,value:d}),c.maxItems&&f.length>=c.maxItems)))break}return f})(a,b,{maxItems:c.maxIssues}).map(a=>({level:"warning",message:`已确认事实未在正文中落位:${a.label}=${a.value}`,suggestion:"请将该事实自然写入对应章节或小节,不得改变原始数值和单位。"}))}function cy(a){return/概况|项目|工程|地点|规模|工期|质量|估算/u.test(a)?{keyword:.65,vector:.25,rewrite:.8,hybridBonus:.2}:/人|材|机|资源|材料|设备|机械|劳动力/u.test(a)?{keyword:.55,vector:.35,rewrite:.75,hybridBonus:.18}:/危大|安全|文明|风险/u.test(a)?{keyword:.5,vector:.4,rewrite:.8,hybridBonus:.2}:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}}function cz(a,b,c,d){let e=b.map(b=>({...b,score:b.score*function(a,b){let c=`${a.title} ${(a.sections||[]).join(" ")} ${a.requiredFacts.join(" ")}`;return"reference"===b?.55:"table"===b?/清单|工程量|数量|材料|设备|资源|费用|造价|范围|统计|表/u.test(c)?1.45:.95:"rule"===b?/要求|规则|招标|评审|响应|质量|安全|验收|标准|工期|进度|风险|约束/u.test(c)?1.35:.95:"drawing"===b?/图纸|设计|布置|位置|平面|剖面|立面|空间|施工方法|做法/u.test(c)?1.35:.85:"specification"===b&&/技术|规范|标准|参数|做法|质量|验收|施工方法/u.test(c)?1.3:1}(a,b.processingType)+function(a,b){let c=`${b.sectionTitle||""}
|
|
99
|
-
${b.filePath}
|
|
100
|
-
${b.content}`;return Math.min(1.8,.16*[...new Set([a.title,...a.sections||[],...a.requiredFacts].flatMap(a=>a.split(/[\s、,,。;;::()()《》【】\-/]+/u)).map(a=>a.trim()).filter(a=>a.length>=2).slice(0,36))].filter(a=>c.includes(a)).length)}(a,b)}));return(0,s.QR)(e,c,d)}function cA(a,b,c){let d=(a.sections||[]).slice(0,10).join(" "),e=a.requiredFacts.slice(0,10).join(" "),f=a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4);return[...new Set([...f.length>=2?[`${a.title} ${d} ${e}`.trim(),...f.map(b=>`${b} ${(a.sections||[]).slice(0,6).join(" ")}`.trim()),`${f.slice(0,3).join(" ")} ${e}`.trim()]:[`${a.title} ${d} ${e}`.trim()],...b,...c].filter(Boolean))]}function cB(a,b){let c=Number(process.env.DOCUMENT_MAX_QUERIES_PER_CHAPTER);return Math.max(2,Math.min(9,Math.floor(Number.isFinite(c)&&c>0?c:4)+ +((a.sections||[]).length>=6||a.requiredFacts.length>=8)+Math.min(2,b.length)))}function cC(a,b,c=!1){return Math.max(12,Math.min(c?58:26,a+10+4*((b.sections||[]).length>=6||b.requiredFacts.length>=8)+18*!!c))}async function cD(a){if((0,M.Te)(a.signal),0===a.scopedFilePaths.length)return[];let b=`${a.chapter.title} ${a.sectionTitle}`.trim(),c=await a.manager.search(a.projectRoot,b,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:5,weights:cy(b),generationMode:!1});return(0,s.QR)(c.results.filter(b=>a.scopedFilePaths.includes(b.filePath)).map(b=>({chapterId:a.chapter.id,filePath:b.filePath,score:b.score+1.2,content:b.content,roleId:a.fileRoleByPath.get(b.filePath),processingType:a.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"section-evidence"})),{maxItems:5,maxChars:9e3,preservePinned:!0})}async function cE(a){let b=[],c=a.needs.slice(0,8),d=await Promise.all(c.map(async b=>{(0,M.Te)(a.signal);let c=`${a.chapter.title} ${b} ${(a.chapter.sections||[]).join(" ")}`.trim();return(await a.manager.search(a.projectRoot,c,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:6,weights:cy(`${a.chapter.title} ${b}`),generationMode:!1})).results.filter(b=>a.scopedFilePaths.includes(b.filePath)).map(b=>({chapterId:a.chapter.id,filePath:b.filePath,score:b.score+2,content:b.content,roleId:a.fileRoleByPath.get(b.filePath),processingType:a.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"required-fact-evidence"}))}));return b.push(...d.flat()),(0,s.QR)(b,{maxItems:Math.max(6,3*c.length),maxChars:18e3,preservePinned:!0})}function cF(a,b,c=12){if(0===b.length)return[];let d=b.slice(0,c).map(a=>e.basename(a)),f=b.length>c?` 等 ${b.length} 个文件`:"";return[`${a}:${d.join("、")}${f}`]}function cG(a,b,c){if(Number.isFinite(c)&&c>0)return Math.ceil(c);let d=new Set(b.filter(Boolean)),e=a.listFiles?.().filter(a=>0===d.size||d.has(a.relativePath)).reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0)??0;return e>0?e:Math.max(1,d.size)}function cH(a,b){let c=new Set([b?.projectName,...b?.fingerprint?.projectNames||[]].filter(Boolean));return(b?.contaminationCandidates||[]).reduce((a,b)=>!b||b.length<6||c.has(b)?a:a.replace(RegExp(b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"gu"),"本项目工程"),a)}function cI(a){let b=[{title:"项目特点、重点、难点分析",minNumericFacts:5,minObjectFacts:8,objectPatterns:[/建筑面积|面积/u,/层|框架结构|既有建筑/u,/结构形式|结构加固|墙体补强|装配式/u,/拆除|改造|装修|装饰/u,/工期|日历天/u,/质量标准|合格/u,/营业商铺|经营区域|场地/u,/管网|防水|室外道排/u,/智能化|弱电|消防|暖通|通风空调|水电/u]},{title:"项目主要施工内容",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/拆除|垃圾外运|既有设施保护/u,/结构加固|墙体补强|框架结构/u,/装饰|装修|基层|面层|环保|阻燃/u,/防水|管网|给排水|阀门|道排/u,/消防|水电|电气|弱电|智能化|通风空调/u,/屋面|立面|室外|附属/u,/施工流程|施工方法|施工顺序|工艺流程/u,/验收|检测|调试|资料闭环/u]},{title:"主要分部分项工程施工方案",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/拆除|垃圾外运|既有设施保护/u,/结构加固|墙体补强|框架结构/u,/装饰|装修|基层|面层|环保|阻燃/u,/防水|管网|给排水|阀门|道排/u,/消防|水电|电气|弱电|智能化|通风空调/u,/屋面|立面|室外|附属/u,/施工流程|施工方法|施工顺序|工艺流程/u,/验收|检测|调试|资料闭环/u]},{title:"主要施工方法",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/拆除|垃圾外运|既有设施保护/u,/结构加固|墙体补强|框架结构/u,/装饰|装修|基层|面层|环保|阻燃/u,/防水|管网|给排水|阀门|道排/u,/消防|水电|电气|弱电|智能化|通风空调/u,/屋面|立面|室外|附属/u,/施工流程|施工方法|施工顺序|工艺流程/u,/验收|检测|调试|资料闭环/u]}];return a.flatMap(a=>b.flatMap(b=>{let c=((a,b)=>{let c=a.split("\n"),d=c.findIndex(a=>/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u.test(a.trim())&&a.includes(b));if(d<0)return"";let e=/^(#{2,6})\s+/u.exec(c[d].trim())?.[1].length||3,f=c.length;for(let a=d+1;a<c.length;a+=1){let b=/^(#{2,6})\s+/u.exec(c[a].trim());if(b&&b[1].length<=e){f=a;break}}return c.slice(d,f).join("\n")})(a.content,b.title);if(!c)return[];let d=new Set(c.match(/\d+(?:\.\d+)?\s*(?:m²|㎡|平方米|m|mm|层|栋|日历天|天|%|台|套|根|处|个|kg|t|吨)/giu)||[]).size,e=b.objectPatterns.filter(a=>a.test(c)).length,f=[];return d<b.minNumericFacts&&f.push({level:"error",severity:"blocker",message:`${a.title} ${b.title} 参数落位不足:当前 ${d} 个,要求不少于 ${b.minNumericFacts} 个`,suggestion:"关键小节必须写入项目规模、工期、层数、结构、专业工程或验收参数等具体数值。"}),e<b.minObjectFacts&&f.push({level:"warning",severity:"warning",message:`${a.title} ${b.title} 专业事实覆盖不足:当前 ${e} 类,建议不少于 ${b.minObjectFacts} 类`,suggestion:"优先基于当前项目绑定资料补充工程对象、专业范围、重点难点和对应施工内容;不得为满足类别数量编造或混入其他项目事实。"}),f}))}function cJ(a){let b=(a,b)=>{let c=a.split("\n"),d=c.findIndex(a=>/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u.test(a.trim())&&a.includes(b));if(d<0)return"";let e=/^(#{2,6})\s+/u.exec(c[d].trim())?.[1].length||3,f=c.length;for(let a=d+1;a<c.length;a+=1){let b=/^(#{2,6})\s+/u.exec(c[a].trim());if(b&&b[1].length<=e){f=a;break}}return c.slice(d,f).join("\n")},c=[{title:"项目特点、重点、难点分析",minChars:1800},{title:"项目主要施工内容",minChars:2200},{title:"主要分部分项工程施工方案",minChars:2200},{title:"主要施工方法",minChars:2200},{title:"危大工程专项施工方案审批流程",minChars:1200,blockerMinChars:600},{title:"原材料进场复试与见证取样",minChars:1200,blockerMinChars:600}],d=[];for(let e of a)for(let a of c){let c=b(e.content,a.title),f=(0,w.V7)(c);if(!c||f>=a.minChars)continue;let g=a.blockerMinChars||Math.floor(.8*a.minChars);f>=g?d.push({level:"warning",severity:"warning",message:`${e.title} ${a.title} 正文深度接近目标:当前 ${f} 字,目标 ${a.minChars} 字`,suggestion:"已达到可交付深度,建议后续按项目数据继续优化扩写。"}):d.push({level:"error",severity:"blocker",message:`${e.title} ${a.title} 正文不足:当前 ${f} 字,要求不少于 ${g} 字`,suggestion:"关键小节必须补足项目数据、重点难点与施工内容对应关系后方可导出。"})}return d}async function cK(a){var b,c,e;let{chapterDraftsByOrder:f,chapterGenerationStagesByOrder:g,chapterGenerationStages:h,effectiveChapters:i,template:j,allEvidence:k,projectMaterialScope:l,progressStages:m,documentSpec:n,projectMaterialSummary:o,domainProfile:p,documentBudget:q,input:r,generationDiagnostics:t,promptTexts:y,promptBindings:z,promptDocumentRules:A,projectRoot:B,projectId:C,readiness:D,factExtractionPromptTexts:E,hasExplicitOutline:F,missingItems:G,retrievalCoverageReports:H,failedChapterMessages:I,webResearchReport:J,indexHealth:K,agentWorkflow:L,emitProgress:N,withProgressHeartbeat:O}=a,{signal:P,requirement:Q}=r,R=f.filter(a=>!!a);if(h.push(...g.filter(a=>!!a)),0===R.length)throw Error(`章节生成未完成:${I.join(";")||"没有生成任何有效章节"}`);if(F&&R.length<i.length)throw Error(`OUTLINE 指定 ${i.length} 章,实际只生成 ${R.length} 章:${I.join(";")||"部分章节未生成"}`);let S=by(R.flatMap(a=>a.evidence||[]),l);if(bA(S,l,"finalize:chapter-evidence"),S.length>0){k.push(...S);let a=(0,s.QR)(k,{maxChars:Math.max(5e4,9e3*i.length),preservePinned:!0});k.splice(0,k.length,...a)}let T=by(k,l);k.splice(0,k.length,...T),bA(k,l,"finalize:all-evidence"),(0,M.Te)(P),(0,ay.fx)(m,(0,ay.X5)({type:"file_understanding",roleId:"multimodal-files",status:"running",message:"正在理解多模态参考文件"},{subtitle:"多模态参考文件"})),N(R);let U={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{U=await bl(B,k,P)}catch(a){if(P?.aborted)throw a;console.error("[gen] fileUnderstanding failed:",a)}(0,ay.fx)(m,U.stage);let V=(0,s.QR)(k,{maxItems:Math.max(48,10*i.length),maxChars:Math.max(52e3,9e3*i.length),preservePinned:!0});k.splice(0,k.length,...by(V,l)),bA(k,l,"finalize:post-file-understanding");let W=function(a,b,c){let d={};for(let e of(0,u.Uy)(a,c)){let a=b.find(a=>(0,u.I2)(a,e));a&&(d[e.name]=`${a.content.replace(/\s+/gu," ")}(来源:${a.filePath},角色:${a.roleId||"未标注"})`)}return d}(j,k,n),X=bz(af(k,j,n),l),Y=bz(al(k),l),Z=bz(am(k,p),l),$={facts:[],stages:[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"已有本地/资料事实覆盖主要必需字段,跳过 LLM 全量事实抽取"}]};if(function(a,b,c){let d=(0,u.Uy)(b,c).filter(a=>a.required);return 0===d.length?a.filter(a=>a.confidence>=.75&&(0,M.lG)(a.value).trim().length>=2).length<12:d.filter(b=>a.some(a=>(function(a,b){let c=(0,M.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}([...X,...Y,...Z],j,n)){let a=(0,s.QR)(k,{maxItems:48,maxChars:45e3,preservePinned:!0});try{$=await ag(a,E,j,n,P)}catch(a){if(P?.aborted)throw a;console.error("[gen] fact extraction failed:",a)}}for(let a of $.stages)(0,ay.fx)(m,a);let _=bz((b=[...X,...Y,...Z,...$.facts],b.filter(a=>!!a.sourceFile)),l);for(let a of _)W[a.key]=`${(0,M.lG)(a.value)}(来源:${a.sourceFile},角色:${a.roleId})`;let aa=ax(_,bz(ae(k),l),G,n,p),ab=R.map(a=>{let b=n.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=(b?.requiredFactIds||[]).map(a=>n.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)}}),ac=function(a,b=[],c){let e=[],f=[];for(let b of a)0===b.evidence.length&&e.push(`${b.title} 未检索到资料证据`),b.content.length<80&&e.push(`${b.title} 内容较短,建议人工补充或重新生成`);return c&&a.length<c.chapters.length&&f.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===(0,d.zY)(c).length&&f.push("模板未绑定任何提示词"),{passed:0===f.length,warnings:e,errors:f}}(R,_,j);ac.warnings=[...ac.warnings,...D.warnings],ac.errors=[...ac.errors,...D.blockingIssues];let ad=[...k.reduce((a,b)=>a.set(b.filePath,(a.get(b.filePath)??0)+1),new Map).entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),ah=new Map;for(let a of k)ah.set(a.source||"unknown",(ah.get(a.source||"unknown")??0)+1);let ai=b2(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}(ac,aa,R),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}(ab)),aj=R.map(a=>a.content).join("\n\n");ai=b2(ai,cx(aj,_,{maxIssues:20}).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议 Agent Writer 在章节生成阶段优先落位可信基础事实;导出阶段不因未落位的低置信或泛化事实阻断。"})));let ak=Math.max(0,i.length-R.length);ai=b2(ai,[...ak>0?[{level:"error",severity:"blocker",message:`部分章节生成失败:${ak} 章`,suggestion:I.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。"}]:[]]),ai=b2(ai,R.flatMap(a=>{let b=i.find(b=>b.id===a.id);if(!b)return[];let c=bf({chapter:b,content:a.content,evidence:a.evidence||[]});return c.length>0?[{level:"warning",message:`${a.title} 小节事实或量化参数落位可继续优化:${c.slice(0,5).join(";")}`,suggestion:"建议在 Agent Writer 阶段扩大定向证据,不得在导出阶段补写。"}]:[]}));let an=[],ao=[...m,...h];(0,ay.fx)(ao,(0,ay.X5)({type:"reference",roleId:"knowledge-usage-report",status:"success",message:`资料使用报告:证据 ${k.length} 条,来源文件 ${ad.length} 份,结构化事实 ${_.length} 条`,details:[`证据类型:${[...ah.entries()].map(([a,b])=>`${a} ${b}`).join(",")||"无"}`,`索引健康:可用切片 ${K.usableChunkCount} 条,待索引 ${K.pendingJobs} 个,向量 ${K.vectorStatus?.status||"unknown"}`]},{subtitle:"资料使用报告"})),(0,ay.fx)(ao,(0,ay.X5)({type:"reference",roleId:"web-research-report",status:J.enabled?"success":"skipped",message:J.enabled?`联网增强:检索章节 ${new Set(J.chapters).size} 个,查询 ${J.queries.length} 个,使用公开资料 ${J.evidenceCount} 条`:"联网增强未开启",details:J.enabled?[`检索主题:${[...new Set(J.queries)].join(";")||"无"}`,`过滤结果:${J.filteredCount} 条`,"公开资料仅用于通用规范、政策、工艺和措施补充,不作为项目事实来源"]:["可在模型配置中开启联网增强"]},{subtitle:"联网增强报告"}));let ap=(0,v.rs)((0,v.V3)({templateId:j.id,templateName:j.name,title:j.outputTitle,requirement:Q||"",projectRoot:B,projectId:C,exportSettings:j.exportSettings,generationSettings:j.generationSettings,facts:W,structuredFacts:_,factsModel:aa,chapters:R,sources:ad,missingItems:[...new Set(G)],validation:ac,validationIssues:ai,executionStages:ao,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:an,partialChapters:R.map(a=>({id:a.id,title:a.title,chars:(0,w.V7)(a.content),status:cb(a,q.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:R,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:A}),R,{forbidDrawingImages:!1,promptRules:A}).chapters.map(a=>{let b=i.find(b=>b.id===a.id)||a;return{...a,sections:a.sections||[],content:cs(a.content,b)}}),aq=(0,v.rs)((0,v.V3)({templateId:j.id,templateName:j.name,title:j.outputTitle,requirement:Q||"",projectRoot:B,projectId:C,exportSettings:j.exportSettings,generationSettings:j.generationSettings,facts:W,structuredFacts:_,factsModel:aa,chapters:ap,sources:ad,missingItems:[...new Set(G)],validation:ac,validationIssues:ai,executionStages:ao,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:an,partialChapters:[],checkpointChapters:ap,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:A}),ap,{forbidDrawingImages:!1,promptRules:A}).markdown;aq=(0,v.bR)((0,v.kT)((0,v.K7)(cH(cq(aq,_),o))));let ar=b7({facts:_,markdown:aq});ar.size>0&&ao.push({type:"fact_extraction",roleId:"canonical-facts",status:"success",message:`已决策可信基础事实 ${ar.size} 项`,details:[...ar.values()].map(a=>`${a.label}=${a.value}(${a.source},confidence=${a.confidence})`).slice(0,12)}),ai=(ai=b2((0,x.kQ)(n,ai,aa,ap,aq,j.projectBindings||[],z),bE({markdown:aq,spec:n,summary:o}),bI({markdown:aq,facts:_,summary:o,profile:p}),bF(aq,o),cr(aq,_),bT({markdown:aq,chapters:ap,factsModel:aa,template:j,promptBindings:z,promptDocumentRules:A}),cx(aq,[..._,...aa.preciseFacts],{maxIssues:30}).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议后续优化事实自然落位;导出阶段不因未落位的引用型或可优化事实阻断。"})),(0,w.PE)(j.generationSettings||j.exportSettings,aq).filter(a=>!(q.minPages&&/低于目标页数/u.test(a.message))),(0,w.ty)(q,aq),(0,v.UG)(aq,j),(0,x.qK)(aq,ap),(0,v.Ed)(aq,A),(0,ca.IA)(aq),aq.includes("WRITER_MISSING_SECTION")||aq.includes("Writer 未完成")?[{level:"error",severity:"blocker",category:"structure",owner:"system",message:"最终正文仍包含未完成小节标记",suggestion:"必须重新补写对应小节并删除 WRITER_MISSING_SECTION/Writer 未完成。"}]:[],cJ(ap),cI(ap))).map(a=>"error"===a.level?{...a,severity:a.severity||"blocker"}:a);let as=bV({chapters:ap,templateChapters:i,factsModel:aa,evidence:k}),at=bK(aq,aa),au=bX({chapters:ap,templateChapters:i,factsModel:aa}),av=b$({markdown:aq,chapters:ap,issues:ai=b2(ai,bW(as),bL(at,{maxIssues:20}),bY(au),H.filter(a=>a.risk.highRisk&&(0===a.requiredFactTotal?a.evidenceCount<8:a.requiredFactCovered<a.requiredFactTotal)).map(a=>({level:"warning",message:`系统知识库召回覆盖需复核:${a.chapterTitle}`,suggestion:`知识库总切片 ${a.risk.totalChunks},当前预加载 ${a.risk.loadedChunks}${a.risk.riskReason?`(${a.risk.riskReason})`:""},已启用深召回;事实覆盖 ${a.requiredFactCovered}/${a.requiredFactTotal},小节覆盖 ${a.sectionCovered}/${a.sectionTotal}。`}))),knowledgeCoverage:as,factTraces:at,chapterCoverage:au}),aw=b0({issues:ai,qualityReport:av,knowledgeCoverage:as,factTraces:at,chapterCoverage:au});ai=b2(ai,b_(av),b1(aw));let az=(0,x.Ai)(ai,aa,ap),aA=[],aB=Array.from(new Map(az.blockingIssues.map(a=>/^(.*?)\s+(?:空小节|小节内容补写未完成):(.+)$/u.exec(a.message)).filter(a=>!!a).map(a=>[`${a[1].trim()}::${a[2].trim()}`,a])).values()).slice(0,3);if(aB.length>0){let b=[];for(let c of aB){let d=c[1].trim(),e=c[2].trim(),f=ap.findIndex(a=>a.title===d||d.includes(a.title)||a.title.includes(d)),g=ap[f],h=i.find(a=>a.id===g?.id||a.title===g?.title);if(f<0||!g||!h){b.push(`失败:${d}/${e} 未定位到章节`);continue}let l=(0,ay.X5)({type:"llm_review",roleId:`agent-final-gate-repair-${g.id}`,status:"running",message:`Final Gate 正在补写空小节:${d} / ${e}`,details:b},{subtitle:"Final Gate Repair"});(0,ay.fx)(m,l),(0,ay.fx)(aA,l),N(ap,m);let n=await O(()=>a4({template:j,chapter:h,sectionTitle:e,evidence:g.evidence?.length?g.evidence:k,missingFacts:[],promptTexts:y,projectContext:a.projectContext,requirement:Q,roleContext:"Final Gate 空小节定向修复",targetWords:620,maxWords:820,forbidDrawingImages:!1,qualityFeedback:`Final Gate 发现“${e}”为空小节。请基于证据补写该小节正式正文,包含检查责任、验收节点、资料闭环、整改复验要求,不得输出占位或解释。`,diagnostics:t,signal:P})),o=!1;if(n&&(0,w.V7)(n)>=80){let a=function(a,b,c){let d=a=>a.replace(/[\u00a0\u3000]/gu," ").replace(/^\d+(?:\.\d+)*\s+/u,"").trim(),e=a=>a.trim().replace(/^#{2,6}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]+\n+/u,"").trim(),f=a.split("\n"),g=0;for(let h=0;h<f.length;h+=1){let i=f[h],j=g;g+=i.length+1;let k=/^(#{3,4})\s+(.+)$/u.exec(i.trim());if(!k)continue;let l=d(k[2]);if(l!==b&&!l.includes(b)&&!b.includes(l))continue;let m=f.length;for(let a=h+1;a<f.length;a+=1)if(/^#{2,4}\s+/u.test(f[a].trim())){m=a;break}let n=m<f.length?f.slice(0,m).join("\n").length:a.length,o=e(c);return`${a.slice(0,j)}${i.trim()}
|
|
101
|
-
|
|
102
|
-
${o}${a.slice(n)}`}return a}(g.content,e,n);(o=a!==g.content)&&(ap[f]={...g,content:cs(a,h)}),b.push(o?`成功:${d}/${e}(${(0,w.V7)(n)}字)`:`失败:${d}/${e}(未定位到原小节块)`)}else b.push(`失败:${d}/${e}(${t.llm.lastError||"空响应"})`);let p=(0,ay.X5)({type:"llm_review",roleId:`agent-final-gate-repair-${g.id}`,status:o?"success":"failed",message:o?`Final Gate 空小节修复完成:${d} / ${e}`:`Final Gate 空小节修复失败:${d} / ${e}`,details:b},{subtitle:"Final Gate Repair"});(0,ay.fx)(m,p),(0,ay.fx)(aA,p),N(ap,m)}aq=(0,v.bR)((0,v.kT)((0,v.K7)(cH(cq((c={template:j,requirement:Q,projectRoot:B,projectId:C,facts:W,structuredFacts:_,factsModel:aa,chapters:ap,sources:ad,missingItems:G,validation:ac,validationIssues:ai,executionStages:ao,assets:an,promptDocumentRules:A},(0,v.rs)((0,v.V3)({templateId:c.template.id,templateName:c.template.name,title:c.template.outputTitle,requirement:c.requirement||"",projectRoot:c.projectRoot,projectId:c.projectId,exportSettings:c.template.exportSettings,generationSettings:c.template.generationSettings,facts:c.facts,structuredFacts:c.structuredFacts,factsModel:c.factsModel,chapters:c.chapters,sources:c.sources,missingItems:[...new Set(c.missingItems)],validation:c.validation,validationIssues:c.validationIssues,executionStages:c.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:c.assets,partialChapters:[],checkpointChapters:c.chapters,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:c.promptDocumentRules}),c.chapters,{forbidDrawingImages:!1,promptRules:c.promptDocumentRules}).markdown),_),o))));let d=ai.filter(a=>!aB.some(b=>{let c=b[1].trim(),d=b[2].trim();return a.message.includes(c)&&a.message.includes(d)&&/空小节|小节内容补写未完成|正文小节正文过短|规划小节正文过短|缺少规划小节/u.test(a.message)}));ai=b2((0,x.kQ)(n,d,aa,ap,aq,j.projectBindings||[],z),bE({markdown:aq,spec:n,summary:o}),bI({markdown:aq,facts:_,summary:o,profile:p}),bF(aq,o),cr(aq,_),bT({markdown:aq,chapters:ap,factsModel:aa,template:j,promptBindings:z,promptDocumentRules:A}),cx(aq,[..._,...aa.preciseFacts],{maxIssues:30}).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议后续优化事实自然落位;导出阶段不因未落位的引用型或可优化事实阻断。"})),(0,w.PE)(j.generationSettings||j.exportSettings,aq).filter(a=>!(q.minPages&&/低于目标页数/u.test(a.message))),(0,w.ty)(q,aq),(0,v.UG)(aq,j),(0,x.qK)(aq,ap),(0,v.Ed)(aq,A),(0,ca.IA)(aq),aq.includes("WRITER_MISSING_SECTION")||aq.includes("Writer 未完成")?[{level:"error",severity:"blocker",category:"structure",owner:"system",message:"最终正文仍包含未完成小节标记",suggestion:"必须重新补写对应小节并删除 WRITER_MISSING_SECTION/Writer 未完成。"}]:[],cJ(ap),cI(ap)).map(a=>"error"===a.level?{...a,severity:a.severity||"blocker"}:a),az=(0,x.Ai)(ai,aa,ap)}as=bV({chapters:ap,templateChapters:i,factsModel:aa,evidence:k}),at=bK(aq,aa),au=bX({chapters:ap,templateChapters:i,factsModel:aa}),av=b$({markdown:aq,chapters:ap,issues:ai=b2(ai,bW(as),bL(at,{maxIssues:20}),bY(au)),knowledgeCoverage:as,factTraces:at,chapterCoverage:au}),aw=b0({issues:ai,qualityReport:av,knowledgeCoverage:as,factTraces:at,chapterCoverage:au}),ai=b2(ai,b_(av),b1(aw)),az=(0,x.Ai)(ai,aa,ap),av=b$({markdown:aq,chapters:ap,issues:ai,knowledgeCoverage:as,factTraces:at,chapterCoverage:au}),aw=b0({issues:ai,qualityReport:av,knowledgeCoverage:as,factTraces:at,chapterCoverage:au});let aC=[{key:"export-gate",label:"导出门禁",passed:(e={exportGate:az,qualityReport:av,repairStrategies:aw}).exportGate.passed,message:e.exportGate.passed?"导出门禁通过":`仍有 ${e.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:e.qualityReport.passed,message:`${e.qualityReport.deliveryProbability}% / ${e.qualityReport.target}%`},{key:"factuality",label:"事实准确性",passed:e.qualityReport.scores.factuality>=85,message:`${e.qualityReport.scores.factuality}/100`},{key:"evidence-coverage",label:"知识库证据覆盖",passed:e.qualityReport.scores.evidenceCoverage>=85,message:`${e.qualityReport.scores.evidenceCoverage}/100`},{key:"professional-depth",label:"专业深度",passed:e.qualityReport.scores.professionalDepth>=80,message:`${e.qualityReport.scores.professionalDepth}/100`},{key:"repair-strategies",label:"修复策略",passed:0===e.repairStrategies.filter(a=>"high"===a.priority).length,message:e.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}],aD=function(a){let b=[...a.diagnostics.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>({name:a.name,durationMs:a.durationMs}));return{llmCalls:a.diagnostics.llm.calls,llmFailures:a.diagnostics.llm.failures,maxParallelLlm:a.diagnostics.llm.maxActive,searchQueries:a.diagnostics.evidence.searchQueries,evidenceContextChars:a.diagnostics.evidence.contextChars,qualityIssues:{...a.diagnostics.quality},slowMetrics:b,elapsedMs:a.startedAt&&a.endedAt?a.endedAt-a.startedAt:void 0}}({diagnostics:t}),aE=(0,x.Ff)(ai);t.quality.blockingCount+=aE.blocking,t.quality.importantCount+=aE.important,t.quality.minorCount+=aE.minor;let aF=az.blockingIssues.length,aG=[...ao,...aA].map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:aF>0?"failed":"success",message:`阻断 ${aF},问题 ${ai.length}`}:"export_ready"===a.type?{...a,status:az.passed?"success":"failed",message:az.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:az.passed&&"failed"===a.status&&/^agent-(?:reviewer|repairer)-/u.test(a.roleId)?{...a,status:"skipped",message:`${a.message||"章节中间审查失败"};最终门禁已通过,历史中间态已归档`}:a);aG.push((0,ay.X5)({type:"validation",roleId:"agent-final-gate",status:az.passed?"success":"failed",message:az.passed?"Agent 最终门禁通过":`Agent 最终门禁阻断 ${aF} 个问题`,details:az.blockingIssues.slice(0,12).map(a=>a.message)},{subtitle:"Agent 最终门禁"})),aG.push((0,ay.X5)({type:"validation",roleId:"document-delivery-score",status:av.passed?"success":az.passed?"skipped":"failed",message:az.passed&&!av.passed?`${av.summary}(导出门禁已通过,作为后续优化建议归档)`:av.summary,details:av.actions},{subtitle:"交付评分"})),aG.push((0,ay.X5)({type:"reference",roleId:"knowledge-coverage",status:as.score>=85?"success":"failed",message:`资料确认覆盖率:${as.score}%(证据 ${as.evidenceCount} 条,文件 ${as.confirmedFiles} 份)`,details:[as.remediation]},{subtitle:"资料覆盖"})),aG.push((0,ay.X5)({type:"validation",roleId:"document-review-checklist",status:aC.every(a=>a.passed)?"success":az.passed?"skipped":"failed",message:`交付复核清单:通过 ${aC.filter(a=>a.passed).length}/${aC.length}${az.passed&&!aC.every(a=>a.passed)?"(导出门禁已通过,其余项作为优化建议归档)":""}`,details:aC.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let aH=[...t.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(",");aG.push((0,ay.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${t.llm.calls} 次,失败 ${t.llm.failures} 次,瞬态重试 ${t.llm.retries} 次,峰值并行 ${t.llm.maxActive},检索 ${t.evidence.searchQueries} 次/${Math.round(t.evidence.searchMs/1e3)} 秒,证据上下文 ${t.evidence.contextChars} 字,噪声过滤 ${t.evidence.filteredNoise} 条,质量问题 阻断${t.quality.blockingCount}/重要${t.quality.importantCount}/轻微${t.quality.minorCount}${aH?`,Top耗时:${aH}`:""}`},{subtitle:"后台诊断"}));let aI=ap.map(a=>({...a,evidence:(0,s.QR)(a.evidence||[],{maxItems:12,maxChars:9e3,preservePinned:!0})}));return ap=aI,{templateId:j.id,templateName:j.name,title:j.outputTitle,requirement:Q||"",projectRoot:B,projectId:C,exportSettings:j.exportSettings,generationSettings:j.generationSettings,facts:W,structuredFacts:_,factsModel:aa,chapters:aI,sources:ad,missingItems:[...new Set(G)],validation:ac,validationIssues:ai,exportGate:az,executionStages:aG,assets:an,partialChapters:ap.map(a=>({id:a.id,title:a.title,chars:(0,w.V7)(a.content),status:cb(a,q.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:aI,agentWorkflow:L,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:t,profile:function(a){let b=`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`,c=[{pattern:/专项施工|危大|专项方案/u,type:"专项施工方案",dimensions:["专项对象边界","工艺参数","风险控制","验收要求","应急措施"]},{pattern:/投标|技术标|响应|招标/u,type:"投标技术方案",dimensions:["招标响应","技术优势","工期质量安全承诺","资源保障","履约可实施性"]},{pattern:/监理|旁站|巡视|平行检验/u,type:"监理规划/细则",dimensions:["监理目标","旁站巡视","平行检验","验收程序","资料签认"]},{pattern:/可研|可行性|项目建议书|投资估算/u,type:"可研/项目建议类文档",dimensions:["建设必要性","方案比选","投资估算","风险分析","实施效益"]},{pattern:/运维|维护|保养|巡检/u,type:"运维维护方案",dimensions:["巡检频次","维护流程","故障响应","备品备件","记录闭环"]}].find(a=>a.pattern.test(b));return{type:c?.type||"施工组织设计/施工技术方案",dimensions:c?.dimensions||["工程概况","施工部署","进度质量安全","资源配置","施工工艺和验收闭环"],requiredEvidencePolicy:"本地知识库为完整事实源;系统暂未确认的事实必须通过扩大检索、事实补抽或落位修复解决,不得归因为用户资料缺失。"}}({template:j,chapters:i,requirement:Q}),knowledgeCoverage:as,factTraces:at,chapterCoverage:au,retrievalCoverage:H,qualityReport:av,repairStrategies:aw,reviewChecklist:aC,workflowVersion:b3.x,telemetry:aD},generatedAt:Date.now(),markdown:aq}}var cL=c(70963),cM=c(25284);let cN=["知识库","系统暂未","项目资料暂未","资料未明确","暂未明确","待确认","待资料复核","待系统","未检索到","资料不足","无法确认","建议补充","不适用","COL","可核验信息","围绕"];function cO(a){return a.replace(/\s+/gu,"").toLowerCase()}function cP(a){return`${a.fieldId||""} ${a.fieldName||""} ${a.key} ${(0,M.lG)(a.value)}`.replace(/\s+/gu," ").trim()}function cQ(a){return(0,M.lG)(a.value).replace(/\s+/gu," ").trim()}function cR(a,b){let c=cO(cP(a));return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(cO(a)))}function cS(a,b){let c=[...a.works.map(a=>`工程:${a.name} ${a.scope}`),...a.methods.map(a=>`工法:${a.name} ${(a.applicableWorks||[]).join("、")}`),...a.resources.map(a=>`资源:${a.name} ${a.spec} ${a.quantity}${a.unit}`),...a.schedule.map(a=>`工期:${a.milestone} ${a.duration}`),...a.standards.map(a=>`标准:${a.code} ${a.description}`),...a.risks.map(a=>`风险:${a.risk} ${a.mitigation}`),...a.requirements.map(a=>`要求:${a.category} ${a.detail}`),...a.siteConditions.map(a=>`现场:${a.condition} ${a.impact}`)],d=cO(b);return c.filter(a=>cO(a).includes(d)||b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(b=>cO(a).includes(cO(b))))}function cT(a){let b=[];return/重点|难点|危大|风险|安全|应急/u.test(a)&&b.push("安全 文明 危大 风险 应急 临边 洞口 消防 临电 高处 起重 吊装 基坑 脚手架 模板 支护 图纸 施工说明 审查意见"),/工期|进度|节点|计划/u.test(a)&&b.push("工期 日历天 节点 进度 计划 开工 竣工 关键线路"),/质量|验收|标准|实测|通病/u.test(a)&&b.push("质量 验收 合格 标准 规范 检验批 隐蔽 复试 样板"),/资源|材料|机械|人材机|设备/u.test(a)&&b.push("清单 工程量 材料 设备 机械 劳动力 规格 型号 数量 单位"),/概况|说明|依据|范围/u.test(a)&&b.push("工程名称 项目名称 建设地点 建筑面积 建设规模 招标范围 施工范围"),/部署|施工|流水|区段|组织/u.test(a)&&b.push("施工 组织 部署 区段 流水 作业面 工序 穿插 图纸 清单"),b}function cU(a){return/项目特点.*重点.*难点|重点.*难点.*分析/u.test(a)?"系统识别本项目特点、施工重点、施工难点、形成原因、影响范围和应对措施,必须落位项目规模、结构形式、工期、专业范围、现场约束等具体事实,并为“项目主要施工内容”提供逐项对应依据。":/项目主要施工内容/u.test(a)?"按专业工程和关键工序展开施工内容,必须逐项响应“项目特点、重点、难点分析”中的重点难点,说明施工范围、实施内容、控制措施、验收节点和资料闭环。":/工期|进度|节点|计划/u.test(a)?"使用项目工期、节点和资源事实说明进度组织要求。":/质量|验收|标准|实测/u.test(a)?"使用项目质量目标、验收标准和工序事实说明质量控制要求。":/安全|危大|风险|应急/u.test(a)?"使用项目风险、危大工程和安全文明事实说明安全管控要求。":/资源|材料|机械|人材机/u.test(a)?"使用清单、材料、设备和劳动力事实说明资源配置要求。":/概况|说明|依据/u.test(a)?"使用项目基础事实说明编制边界和工程概况。":"使用已确认项目事实形成正式施工组织内容。"}function cV(a){let b=a.facts.slice(0,18).map(a=>`- ${a.key}:${cQ(a)}${a.sourceFile?`(来源:${a.sourceFile})`:""}`).join("\n"),c=a.sections.map((a,b)=>`${b+1}. 必须输出三级标题:### ${a.title}
|
|
103
|
-
写作目标:${a.objective}
|
|
104
|
-
支撑情况:证据 ${a.evidenceIds.length},事实 ${a.factIds.length},图谱 ${a.graphNodeIds.length}
|
|
105
|
-
最小正文深度:${a.minChars} 字`).join("\n");return["【Agent 章节任务】",`任务ID:${a.taskId}`,`章节:${a.title}`,a.graphContext?`图谱上下文:
|
|
106
|
-
${a.graphContext}`:"",b?`事实卡:
|
|
107
|
-
${b}`:"",`小节任务:
|
|
108
|
-
${c}`,"写作要求:必须严格按“小节任务”逐项输出,每个任务都必须保留完全一致的三级标题“### 小节标题”;不得合并小节、不得改写小节标题、不得省略小节;只使用事实卡、图谱上下文和绑定证据;不得输出后台话术、兜底措辞、待确认、不适用;缺少事实的小节不得编造。"].filter(Boolean).join("\n\n")}function cW(a){return a.replace(/^\s*#{2,4}\s*/u,"").replace(/^\s*(?:\d+(?:\.\d+)*|[一二三四五六七八九十]+)(?:[、..]|\s+)\s*/u,"").trim()}function cX(a){return cO(cW(a)).replace(/施工(?=方案|流程|方法)/gu,"").replace(/专项(?=方案)/gu,"").replace(/项目|工程|主要|重点|技术/gu,"").replace(/\s/gu,"")}function cY(a){let b=cQ(a);return!(!b||b.length<3||/^(?:见|详见|按|执行|参见|依据).{0,16}(?:前附表|招标公告|招标文件|合同|协议书|通用条款|专用条款|图纸|清单|附件|资料)$/u.test(b)||/^(?:合同协议书|通用条款|专用条款|招标文件|招标公告|投标人须知前附表|附件|资料)$/u.test(b.replace(/[()()\d一二三四五六七八九十、..\s]/gu,"")))&&/项目|工程|编号|地点|规模|范围|工期|质量|安全|资源|材料|设备|验收|\d/u.test(cP(a))}function cZ(a){let b=[],c=a.draft.content||"";for(let d of cN)"围绕"!==d&&c.includes(d)&&b.push({level:"error",severity:"blocker",category:"style",owner:"system",message:`${a.draft.title} 正文包含禁止话术:${d}`,suggestion:"改为事实支撑的正式表达;缺失事实不得占位。"});let d=(0,w.V7)(c);for(let e of a.task.sections){let a=function(a,b){let c=a.split("\n"),d=cO(cW(b)),e=cX(b),f=[],g=-1,h=a=>{if(g<0)return;let b=c.slice(g,a).join("\n").trim();b&&f.push(b),g=-1};for(let a=0;a<c.length;a+=1){var i;if(!/^\s*#{2,4}\s+/u.test(c[a]))continue;h(a);let b=(i=cW(c[a]),cO(cW(i))),f=cX(cW(c[a]));(b===d||b.includes(d)||d.includes(b)||f===e||f.includes(e)||e.includes(f))&&(g=a+1)}return h(c.length),f.sort((a,b)=>(0,w.V7)(b)-(0,w.V7)(a))[0]||""}(c,e.title);if(a.includes("[WRITER_MISSING_SECTION]")||!a&&c.includes("[WRITER_MISSING_SECTION]"))b.push({level:"error",severity:"blocker",category:"structure",owner:"system",message:`${e.title} Writer 未完成`,suggestion:"Repairer 必须基于该小节事实卡和证据生成正式正文,并删除 WRITER_MISSING_SECTION 标记。"});else if(a&&(0,w.V7)(a)<e.minChars){let c=/项目特点.*重点.*难点|重点.*难点.*分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试|见证取样/u.test(e.title),d=(0,w.V7)(a)>=Math.floor(.7*e.minChars);b.push({level:c&&!d?"error":"warning",severity:c&&!d?"blocker":"warning",category:"structure",owner:"system",message:`${e.title} 正文不足,未达到任务最小深度`,suggestion:c?"关键小节必须基于项目事实和对应关系重写补足;不得仅保留概述性文字。":"应基于该小节事实卡和证据重新生成,不得使用标题占位。"})}else!a&&d<Math.max(e.minChars,1200)&&!function(a,b){let c=b.split(/[、,,;;\s]+/u).map(a=>a.replace(/项目|工程|主要|措施|体系|方案|专项/gu,"").trim()).filter(a=>a.length>=2);return c.length>0&&c.some(b=>a.includes(b))}(c,e.title)&&b.push({level:"warning",severity:"warning",category:"structure",owner:"system",message:`${e.title} 未匹配到独立小节标题`,suggestion:"正文已成文但小节标题与规划标题不完全一致,建议后续按规划标题进一步规范结构。"});e.ready||b.push(...e.issues.map(a=>({...a,level:"warning",severity:"warning"})))}let e=a.context.materialScope.selectedRoots;for(let d of a.context.materialScope.rejectedRoots)d&&!e.includes(d)&&c.includes(d)&&b.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 混入非当前资料组名称:${d}`,suggestion:"必须删除跨项目内容并重新检索当前资料组证据。"});let f=a.task.facts.filter(cY),g=f.filter(a=>{let b=cQ(a);return b.length>=2&&c.includes(b.slice(0,Math.min(18,b.length)))}).length;f.length>=3&&0===g&&1200>(0,w.V7)(c)&&b.push({level:"warning",severity:"warning",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 未明显落位章节事实卡`,suggestion:"建议将章节事实卡中的关键工程事实写入对应小节,但不因引用型或低可执行事实阻断。"});let h=b.filter(a=>"error"===a.level||"blocker"===a.severity),i=b.filter(a=>/正文不足|未落位章节事实卡/u.test(a.message));return{issues:b,supportedFacts:g,unsupportedSignals:b.map(a=>a.message),repairable:b.length>0&&(b.length<=6||i.length===b.length||0===h.length)}}function c$(a){return a.replace(/\s+/gu,"").toLowerCase()}var c_=c(14070);async function c0(a){(0,M.Te)(a.signal);let b=(0,d.QJ)(a.templateId);if(!b)throw Error("Document template not found");let c=e.resolve(a.projectRoot||(0,g.aY)());if(!c)throw Error("No knowledge base project found");let o=(0,f.computeProjectId)(c),p=b,q=(0,g.Qh)(),y=[],G=[],H=(b,c=O)=>{let d=b?[...b].sort((a,b)=>{let c=G.indexOf(a.id),d=G.indexOf(b.id);return(c<0?Number.MAX_SAFE_INTEGER:c)-(d<0?Number.MAX_SAFE_INTEGER:d)}):void 0;a.onProgress?.([...c],d?{chapters:d}:void 0)},I=Math.max(15e3,Math.min(6e4,Number(process.env.DOCUMENT_GENERATION_HEARTBEAT_MS??3e4))),J=async(b,c=O)=>{let d=setInterval(()=>{a.signal?.aborted||H(y,c)},I);try{return await b()}finally{clearInterval(d)}},K=(0,d.N6)(p)||"none",L=(0,i.Mu)(K)?.name||K,O=[(0,ay.X5)({type:"role_binding",roleId:K,status:"running",message:`生成任务已创建,正在读取模板与角色配置:${p.name}`,details:[`当前项目:${o}`,`资料目录:${e.join(c,"knowledgeBase")}`,"正在读取项目资料包和提示词配置"],progress:{current:1,total:4,label:"初始化配置"}},{subtitle:L,roleName:L,order:0})];H();let P=(0,d.bj)(p),Q=P.bindings;(0,ay.fx)(O,(0,ay.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在分析模板规范、用户要求与项目资料包",details:["解析 OUTLINE 与模板章节","读取项目资料包","自动识别资料类型并构建项目理解"],progress:{current:1,total:3,label:"准备分析"}},{subtitle:"生成准备",order:O.length})),H();let R=(0,ca.Qu)({template:p,requirement:a.requirement,projectRoot:c,facts:[]}).materialScope.selectedFiles;if(0===R.length)throw Error("模板未绑定可用项目资料包,请先在模板中绑定需要参与生成的项目文件夹。");let T=(0,aE.W9)(c,p,{requirement:a.requirement}),U=(0,aE._n)(p,T),{kindByPath:V,processingByPath:W}=(0,aE.Hz)(T),X=aD([...P.writerPrompts,...P.chapterPrompts]),Y=(0,t.cs)([{text:a.requirement,source:"用户需求",strict:!0},{text:X,source:"提示词角色",strict:!0}]),Z=Y.length>=2;Z&&(p={...b,chapters:Y});let ab=await J(()=>Promise.resolve((0,k.P)(c,{requirement:a.requirement,boundFilePaths:R})));(0,ay.fx)(O,(0,ay.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在生成自动文档规格并评估生成准备度",details:[`项目资料:${R.length} 份`,`资料类型:${Object.values(T.groups).filter(a=>a.length>0).length} 类`,"生成事实字段与章节约束"],progress:{current:2,total:3,label:"规格评估"}},{subtitle:"生成准备",order:O.length})),H();let ac=await J(()=>Promise.resolve((0,j.x)(p,a.requirement||""))),ag=ac.spec,ah=function(a,b=""){let c=`${a?.id||""} ${a?.name||""} ${a?.category||""} ${a?.description||""} ${a?.outputTitle||""} ${b}`;return/施工组织设计|施工方案|危大工程|人、材、机|安全文明施工/u.test(c)?m:l}(p,a.requirement||""),aj=(0,r.$)({template:p,spec:ag,summary:ab,resolvedRoles:[]});if(!aj.ready)throw Error(`生成准备度不足:${aj.blockingIssues.join(";")}`);let ak=[U.prompt,(0,k.F)(ab,{publicSafe:!0}),(0,j.N)(ag,ac.sourceHash,{publicSafe:!0}),(0,r.R)(aj,{publicSafe:!0})].filter(Boolean).join("\n\n"),an=[U.prompt,(0,k.F)(ab),(0,j.N)(ag,ac.sourceHash),(0,r.R)(aj)].filter(Boolean).join("\n\n"),ao=aD([...P.writerPrompts,...P.formattingPrompts]),ap=aD([...P.writerPrompts,...P.chapterPrompts,...P.formattingPrompts]),az=aD(P.prompts),aF=(0,h.I)().load().webAccess||{enabled:!1,allowProjectFacts:!1,maxQueriesPerChapter:2,maxResultsPerQuery:3,trustedDomains:[]},aG=function(a){let b=a.attributedPrompts||[],c=[a.promptTexts,a.requirement||""].filter(Boolean).join("\n\n").replace(/\\n/gu,"\n"),d=function(a){let b=a.replace(/\\n/gu,"\n"),c=new Set;for(let a of(/全文必须输出[::]\s*([^。;;\n]+)/u.exec(b)?.[1]||/必须输出(?:的)?表格[::]\s*([^。;;\n]+)/u.exec(b)?.[1]||"").split(/[、,,]/u)){let b=/([\p{Script=Han}A-Za-z0-9()()]{2,30}表)$/u.exec(a.trim())?.[1];b&&b.length>=4&&b.length<=30&&c.add(b)}/项目基本信息表/u.test(b)&&c.add("项目基本信息表");let d=["知识库","提示词","建议补充","资料库","OCR","后台","绑定片段"];/杜绝(?:套话|空话)|禁止(?:套话|空话)|不得(?:套话|空话)|严禁(?:套话|空话)/u.test(b)&&d.push("高度重视","重中之重"),/技术标(?:正文)?(?:不得|禁止|严禁).*(?:商务|报价|单价|税率|利润|造价)/u.test(b)&&d.push("报价明细表");let e=aR(b,"封面"),f=aR(b,"目录");return{coverPolicy:e,tocPolicy:f,forbidCover:"forbidden"===e,forbidToc:"forbidden"===f,forbiddenTerms:[...new Set(d)],preferredTerms:[{from:"高度重视",to:"严格落实"},{from:"重中之重",to:"关键控制事项"}],requiredTables:[...c],requiredKeywords:aO(b),forbiddenPatterns:aP(b)}}(c),e=[...new Set([...d.requiredTables,...function(a){let b=new Set;for(let c of[/(?:必须|应当|需要|全文必须|至少)输出(?:的)?表格[::]\s*([^。;;\n]+)/gu,/(?:必须|应当|需要|全文必须|至少)包含(?:的)?表格[::]\s*([^。;;\n]+)/gu,/(?:表格清单|表格要求)[::]\s*([^。;;\n]+)/gu])for(let d of a.matchAll(c))for(let a of(d[1]||"").split(/[、,,//及和与]/u)){let c=/([\p{Script=Han}A-Za-z0-9()()《》<>]{2,40}表)/u.exec(a.trim())?.[1];c&&b.add(c.replace(/[<>《》]/gu,""))}for(let c of a.matchAll(/([\p{Script=Han}A-Za-z0-9()()]{2,40}表)(?:必须|应当|需要|不得缺失|不可缺失)/gu))b.add(c[1]);return/项目基本信息表/u.test(a)&&b.add("项目基本信息表"),[...b]}(c)])],f=aO(c),g=aP(c),h=function(a){let b=[];for(let c of(/<OUTLINE>([\s\S]*?)<\/OUTLINE>/u.exec(a)?.[1]||"").split(/\r?\n/u)){let a=c.replace(/^\s*(?:\d+[.、.]|[-*])\s*/u,"").trim();a.length>=2&&a.length<=80&&!aI(a)&&b.push(a)}return[...new Set(b)]}(c),i=["知识库","提示词","建议补充","资料库","OCR","后台","绑定片段"],j=/技术标(?:正文)?(?:不得|禁止|严禁).*(?:商务|报价|单价|税率|利润|造价)/u.test(c)?["报价明细表"]:[],k=[],l=function(a){let b=/(?:不少于|至少|最低|必须生成不少于)\s*(\d+(?:\.\d+)?)\s*(万)?\s*字/u.exec(a);if(!b)return;let c=Number(b[1]);if(Number.isFinite(c)&&!(c<=0))return Math.floor(c*(b[2]?1e4:1))}(c),m=(a.template?.chapters||[]).map(a=>({chapterTitle:a.title,mustInclude:aQ(c,RegExp(`${a.title.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}|${a.title.slice(0,6).replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}`,"u")).slice(0,8),mustNotInclude:aQ(c,/禁止|不得|严禁|杜绝/u).filter(b=>b.includes(a.title)).slice(0,8)})).filter(a=>a.mustInclude.length>0||a.mustNotInclude.length>0),n=(a.rolePrompts||[]).map(a=>({roleId:a.roleId,focusAreas:aQ(a.content,/重点|关注|围绕|响应|体系|措施|质量|安全|工期|资源/u).slice(0,8),mustDo:aQ(a.content,/必须|应当|需要|确保|严格/u).slice(0,10),mustNotDo:aQ(a.content,/禁止|不得|严禁|杜绝/u).slice(0,10)})).filter(a=>a.focusAreas.length>0||a.mustDo.length>0||a.mustNotDo.length>0),o=[d.coverPolicy&&"unspecified"!==d.coverPolicy?`已识别封面规则:${"required"===d.coverPolicy?"要求生成":"禁止生成"}`:"",d.tocPolicy&&"unspecified"!==d.tocPolicy?`已识别目录规则:${"required"===d.tocPolicy?"要求生成":"禁止生成"}`:"",h.length?`已识别一级章节固定规则 ${h.length} 条`:"",k.length?`已识别禁用主体表达:${k.join("、")}`:"",d.forbiddenTerms.length?`已识别禁用词 ${d.forbiddenTerms.length} 个`:"",e.length?`已识别必需表格:${e.join("、")}`:"",f.length?`已识别必含关键词:${f.join("、")}`:"",g.length?`已识别禁止出现内容:${g.join("、")}`:"",l?`已识别最低字数要求:${l} 字`:"",n.length?`已抽取角色执行规则 ${n.length} 组`:""].filter(Boolean),p=[],q={},r=(a,c,d,e)=>{let f=function(a,b,c){for(let d of a)if(d.content.includes(b))return{promptId:d.promptId,roleId:d.roleId,pattern:c};return{promptId:"system:generation-control",roleId:"generation-control",pattern:c}}(b,d,e);q[a]||(q[a]=[]),q[a].length<24&&q[a].push({...f,matchedText:d}),p.length<60&&p.push({rule:c,source:f,matchedText:d})};for(let a of(d.coverPolicy&&"unspecified"!==d.coverPolicy&&r("coverPolicy",`已识别封面规则:${d.coverPolicy}`,"封面",/封面|cover/u.source),d.tocPolicy&&"unspecified"!==d.tocPolicy&&r("tocPolicy",`已识别目录规则:${d.tocPolicy}`,"目录",/目录|toc/u.source),e))r("requiredTables",`必需表格:${a}`,a,/全文必须输出|必须输出表格|项目基本信息表/u.source);for(let a of f)r("requiredKeywords",`必含关键词:${a}`,a,/必须包含|必须含|应包含|需要包含/u.source);for(let a of g)r("forbiddenPatterns",`禁止内容:${a}`,a,/禁止|不得|严禁|杜绝/u.source);for(let a of h)r("exactHeadings",`固定章节:${a}`,a,/第[一二三四五六七八九十百千\d]+章/u.source);return l&&r("minWords",`最低字数:${l}`,String(l),/\d{3,}\s*字/u.source),{...d,requiredTables:e,requiredKeywords:f,forbiddenPatterns:g,sourceHash:function(a){let b=0x811c9dc5;for(let c=0;c<a.length;c+=1)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193);return(b>>>0).toString(16)}(c),exactHeadings:h,forbidExtraHeadings:/不得合并|不得删除|不得改名|不得新增|严格按.*章节名称|一级章节.*不得/u.test(c)||h.length>0,requiredSubjects:/我公司/u.test(c)?["我公司","项目部"]:[],forbiddenSubjects:k,backendTerms:i,commercialTerms:j,forbiddenTerms:[...new Set([...d.forbiddenTerms,...i,...j,...k])],forbidFabrication:/不得编造|严禁编造|不得擅自|资料未明确|系统暂未|事实真实性/u.test(c),requireEvidenceForQuantities:/量化|参数|数值|具体数据|具体参数|工程实体参数|资料中明确|不得空泛|不能空泛|泛泛而谈/u.test(c),preferProjectFacts:/事实优先|项目事实|真实性高于/u.test(c),minWords:l,minChars:l,chapterRules:m,roleRules:n,executionSummary:o,ruleSources:Object.keys(q).length>0?q:void 0,extractionTrace:p.length>0?p:void 0}}({promptTexts:[ak,az].filter(Boolean).join("\n\n"),requirement:a.requirement,template:p,rolePrompts:P.prompts}),aH=[function(a){let b=[`运行时规则版本:${a.sourceHash}`,"required"===a.coverPolicy?"用户要求输出封面时必须保留封面;未要求时不得由系统擅自决定。":"","required"===a.tocPolicy?"用户要求输出目录时必须保留目录,并确保目录只来自最终合法正文标题。":"",a.forbidCover?"用户明确禁止输出封面。":"",a.forbidToc?"用户明确禁止输出目录、目录说明或导航页。":"",a.exactHeadings.length?`一级章节必须严格使用:${a.exactHeadings.join(";")}`:"",a.forbidExtraHeadings?"不得新增、删除、合并或改名一级章节。":"",a.requiredSubjects.length?`正文主体优先使用:${a.requiredSubjects.join("、")}`:"",a.forbiddenSubjects.length?`禁止主体表达:${a.forbiddenSubjects.join("、")}`:"",a.forbidFabrication?"不得编造系统暂未从知识库确认的项目事实、工程实体参数、人名、联系方式或品牌;应通过扩大检索、事实补抽或落位修复解决。":"",a.requireEvidenceForQuantities?"涉及数量、工期、质量标准、规格型号等参数时必须以绑定资料中的明确事实为准。":"",a.commercialTerms.length?`禁止输出商务敏感内容:${a.commercialTerms.join("、")}`:"",a.backendTerms.length?`禁止输出系统内部话术:${a.backendTerms.join("、")}`:"",a.requiredTables.length?`必须输出以下正式 Markdown 表格:${a.requiredTables.join("、")}。表格必须包含表名、表头、分隔线和数据行。`:"",a.requiredKeywords?.length?`正文必须覆盖以下关键词或要点:${a.requiredKeywords.join("、")}。`:"",a.forbiddenPatterns?.length?`正文禁止出现以下内容:${a.forbiddenPatterns.join("、")}。`:"",a.minWords?`全文不少于 ${a.minWords} 字。`:""].filter(Boolean);return`以下规则由系统运行时从用户绑定指令中自动抽取,不作为用户可编辑内容。生成、检查和修复必须共同遵守:
|
|
109
|
-
${b.map((a,b)=>`${b+1}. ${a}`).join("\n")}`}(aG),!aF.enabled?"":"公开资料补充使用规则:\n1. 公开资料只可用于补充通用规范、政策、工艺和措施。\n2. 不得使用公开资料新增或修改项目名称、建设地点、建设规模、工期、质量标准、工程量、材料规格、图纸参数、商务数据。\n3. 本地项目资料与公开资料冲突时,必须以本地项目资料为准。\n4. 不得在正文中出现任何检索过程、外部页面、工具调用或系统内部过程性表述。\n5. 不得把公开资料中的其他项目案例参数写入本项目正文。"].filter(Boolean).join("\n\n"),aJ=[ak,aH,`生成前规划章节结构:
|
|
110
|
-
${(0,v.CK)(p)}`,ao||ap].filter(Boolean).join("\n\n"),aN=[an,aH,aD([...P.extractionPrompts,...P.referencePrompts])].filter(Boolean).join("\n\n"),aV=[ak,aH,aD([...P.writerPrompts,...P.chapterPrompts,...P.formattingPrompts])].filter(Boolean).join("\n\n");(0,ay.fx)(O,(0,ay.X5)({type:"validation",roleId:"document-preparation",status:"success",message:`模板规范与项目资料理解完成,识别 ${R.length} 份项目资料`,details:[`提示词绑定:${Q.length} 个`,`项目资料包:${T.materialRoots.join("、")||"当前知识库"}`,Z?`识别 OUTLINE 章节:${Y.length} 个`:"未识别显式 OUTLINE,使用模板章节"],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备",order:O.length})),H();let aW=new Set(R),aX=new Map([...V.entries()].map(([a,b])=>[a,(0,aE._W)(b)])),aY=new Map([...W.entries()].map(([a,b])=>[a,b]));(0,ay.fx)(O,(0,ay.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:"running",message:"正在读取项目资料包索引",details:["使用上传阶段已完成的解析、切片和索引结果","不在生成流程中重新解析或入库","准备按资料类型召回章节证据"],progress:{current:1,total:3,label:"读取索引"}},{subtitle:"知识库检索",order:O.length})),H();let aZ=await J(()=>q.getProject(c)),a$=function(a,b){let c=new Set(b.filter(Boolean)),d=(a.listFiles?.()||[]).filter(a=>0===c.size||c.has(a.relativePath)),e=new Set(d.map(a=>a.relativePath)),f=[...c].filter(a=>!e.has(a)),g=d.filter(a=>0===Math.max(0,Math.ceil(Number(a.chunkCount)||0))).map(a=>a.relativePath),h=d.filter(a=>"error"===a.status).map(a=>a.relativePath),i="function"==typeof a.countPendingIndexJobs?a.countPendingIndexJobs():0,j="function"==typeof a.getVectorStatus?a.getVectorStatus():void 0,k=d.filter(a=>"error"!==a.status&&Math.max(0,Math.ceil(Number(a.chunkCount)||0))>0),l=k.map(a=>a.relativePath),m=k.reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0),n=[...cF("部分绑定文件未完成索引,已自动跳过",f),...cF("部分绑定文件没有可用切片,已自动跳过",g),...cF("部分绑定文件索引失败,已自动跳过",h)],o=c.size>0&&0===m?["所有绑定文件均无可用切片"]:[],p=[...n,...i>0?[`仍有 ${i} 个待索引任务,建议等待索引完成后生成`]:[],...j&&"ready"!==j.status?[`向量索引状态为 ${j.status},当前召回质量可能下降`]:[]];return{scopedRecords:d,usablePaths:l,missingFiles:f,emptyFiles:g,errorFiles:h,pendingJobs:i,vectorStatus:j,usableChunkCount:m,blockingIssues:o,warnings:p}}(aZ,[...aW]);if(a$.blockingIssues.length>0)throw Error(`生成前知识索引不可用:${a$.blockingIssues.join(";")}`);let a_=new Set(a$.usablePaths),a0=bv(o,[...a_]),a1=cG(aZ,[...a_],a.maxEvidencePerChapter),a2=a$.pendingJobs>0||0===a$.usableChunkCount,a3=function(a){let b=Math.max(0,Math.ceil(a.totalChunks||0)),c=Math.max(0,Math.ceil(a.loadedChunks||0)),d=Math.max(0,b-c),e=b>0?c/b:1,f=[...b>=1e3&&e<.35?["切片未完全预加载"]:[],...!1===a.vectorReady?["向量索引未就绪"]:[]];return{totalChunks:b,loadedChunks:c,omittedChunks:d,loadedRatio:e,highRisk:f.length>0,riskReason:f.join("、")||void 0}}({totalChunks:Math.min(a$.usableChunkCount,20*R.length),loadedChunks:Math.min(a$.usableChunkCount,20*R.length),vectorReady:a$.vectorStatus?"ready"===a$.vectorStatus.status:void 0});(0,ay.fx)(O,(0,ay.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:a2?"failed":"success",message:`已读取知识索引:项目资料 ${a$.scopedRecords.length} 份,可用切片 ${a$.usableChunkCount} 条`,details:[`项目资料:${aW.size} 份`,`可用证据文件:${a_.size} 份`,`向量状态:${a$.vectorStatus?.status||"unknown"}`,...a$.warnings,"后续将按招标正文/清单/图纸/补疑等资料类型召回"],progress:{current:3,total:3,label:"索引已就绪"}},{subtitle:"知识库检索",order:O.length})),H(),(0,M.Te)(a.signal);let a5=[],a6=[],a7={enabled:aF.enabled,queries:[],evidenceCount:0,filteredCount:0,chapters:[]},a8=[],a9=[],ba=[],bb=[],bc=[],bd=-1,be=new Map,bg=new Map,bk=(a,b)=>{let c=`${a}::${b.maxChunkContentChars}`;if(!bg.has(c))try{bg.set(c,aZ.getFileDetail?.(a,b))}catch{bg.set(c,void 0)}return bg.get(c)},bl=async(a,b,d,e)=>{let f=cy(e),g=(0,M.c6)({query:a,scopedFilePaths:b,limit:d,weights:f,generationMode:!1}),h=be.get(g);if(h)return h;let i=await q.search(c,a,{scope:"project",filters:{filePaths:b},limit:d,weights:f,generationMode:!1}).catch(()=>null),j=i?.results||[];return be.set(g,j),j},bm={stage:(0,ay.X5)({type:"file_understanding",roleId:"project-understanding",status:"success",message:`已完成项目资料理解:${T.files.length} 份资料,${Object.values(T.groups).filter(a=>a.length>0).length} 类资料类型`,details:U.prompt.split("\n").slice(0,16)},{subtitle:"项目资料理解",order:O.length})};(0,ay.fx)(O,bm.stage),H();let bn=by(await ce({manager:q,project:aZ,projectRoot:c,scopedFilePaths:[...aW].filter(Boolean).sort(),fileRoleByPath:aX,fileProcessingByPath:aY,signal:a.signal}),a0);bA(bn,a0,"project-basic-evidence"),bn.length>0&&(a5.push(...bn),(0,ay.fx)(O,(0,ay.X5)({type:"knowledge_retrieval",roleId:"project-basic-evidence",status:"success",message:`已锁定项目基础事实证据 ${bn.length} 条`,details:bn.slice(0,8).map(a=>`${e.basename(a.filePath)}|${a.sectionTitle||"正文片段"}|score=${a.score.toFixed(2)}`)},{subtitle:"基础事实召回",order:O.length})),H());let bo=bz(af(a5,p,ag),a0),bp=bz(al(a5),a0),bq=[...bo,...bp,...bz(am(a5,ah),a0)],br=(0,cM.hp)({projectRoot:c,template:p,requirement:a.requirement}),bs=[...br?.facts||[],...bq],bu=ax(bs,bz(ae(a5),a0),a8,ag,ah),bw=(0,ca.Qu)({template:p,requirement:a.requirement,projectRoot:c,facts:bs,projectGraph:br?.projectGraph,projectGraphSource:br?"project-intelligence":void 0});for(let a of(0,ca.SU)(bw))(0,ay.fx)(O,a);br&&(0,ay.fx)(O,(0,ay.X5)({type:"file_understanding",roleId:"project-intelligence-cache",status:"success",message:`已复用入库后项目理解资产与绑定 scope 快照:${br.files.length} 份绑定资料`,details:[`项目级缓存时间:${new Date(br.cache.createdAt).toLocaleString()}`,`scope 快照:${br.scopeSnapshot.scopeHash.slice(0,12)}`,`复用预计算事实:${br.facts.length} 条`,`复用预计算项目图谱:${br.projectGraph.works.length}工程/${br.projectGraph.methods.length}工法/${br.projectGraph.resources.length}资源`,`复用施工组织设计专项图谱:${br.constructionOrganizationGraph.workPackages.length} 个工作包/${br.constructionOrganizationGraph.controlMatrix.length} 条控制矩阵`,`图谱来源:${br.cache.projectGraphMessage}`,`章节意图证据覆盖:${Object.keys(br.evidenceByChapterId||{}).length}/${p.chapters.length} 章`,`排除正文不适用资料:${br.files.filter(a=>!a.usableForBody).length} 份`]},{subtitle:"项目理解缓存 / Scope 快照"})),H();let bx=bw.baseProjectGraph;if(!br){(0,ay.fx)(O,(0,ay.X5)({type:"file_understanding",roleId:"project-graph",status:"running",message:`正在临时构建完整项目图谱:${a5.length} 条证据 → LLM 结构化提取`,details:["缓存缺失或版本过期,建议重新构建项目理解缓存;本次生成将临时构建完整项目图谱。","提取:工程内容、施工方法、材料设备、技术标准、重点难点"],progress:{current:2,total:3,label:"项目图谱"}},{subtitle:"项目资料图谱分析",order:O.length})),H();let b=await J(()=>(0,cL.i)({evidence:a5,signal:a.signal,projectRoot:c,requirement:a.requirement,templateId:p.id}),O);if(!b.graph)throw Error(`完整项目图谱构建失败:${b.stage.message||b.stage.status}`);bx=b.graph,(0,ay.fx)(O,b.stage),H()}bx&&(U=(0,aE._n)(p,T,bx));let bB=function(a){var b;let c=(0,M.c6)({version:"canonical-facts-v2",requirement:a.requirement||"",templateId:a.templateId||"",requiredKeys:a.requiredKeys||[],facts:a.facts.map(a=>({key:a.key,fieldId:a.fieldId,fieldName:a.fieldName,value:a.value,sourceFile:a.sourceFile,roleId:a.roleId,confidence:a.confidence})).sort((a,b)=>`${a.sourceFile}${a.key}${a.value}`.localeCompare(`${b.sourceFile}${b.key}${b.value}`)),graphHash:a.projectGraph?(0,M.c6)(a.projectGraph):"",markdownHash:a.markdown?(0,M.c6)(a.markdown.slice(0,2e4)):""}),d=function(a,b){let c=b9(a);if(c)try{let a=JSON.parse(aa.readFileSync(e.join(c,`canonical-facts-${b}.json`),"utf8"));return a&&a.byKey?a:void 0}catch{return}}(a.projectRoot,c);if(d)return d;let f=b7({facts:a.facts,markdown:a.markdown}),g={};for(let[a,b]of f.entries())g[a]=function(a){let b=a.source.includes("generated_markdown")?"generated_markdown":a.source.includes("evidence")?"evidence":"structured_fact";return{key:a.fieldKey,label:a.label,value:a.value,normalizedValue:ai(a.value),sourceType:b,sourceFile:a.source,confidence:a.confidence,priority:b8(b),locked:b8(b)>=80,selectedReason:a.selectedReason}}(b);let h=a.facts||[],i=[];for(let a of[{key:"project_name",label:"项目名称",pattern:/项目名称|工程名称|招标项目名称|project_name/u,bucket:"projectIdentity"},{key:"project_code",label:"项目编号",pattern:/项目编号|招标项目编号|project_code/u,bucket:"projectIdentity"},{key:"owner",label:"招标人",pattern:/招标人|建设单位|发包人|owner/u,bucket:"projectIdentity"},{key:"project_location",label:"建设地点",pattern:/建设地点|实施地点|project_location/u,bucket:"projectIdentity"},{key:"project_scale",label:"建设规模",pattern:/建设规模|工程规模|project_scale/u,bucket:"projectScope"},{key:"construction_scope",label:"施工范围",pattern:/施工范围|招标范围|工程范围/u,bucket:"projectScope"},{key:"duration",label:"计划工期",pattern:/计划工期|合同工期|总工期|schedule_requirement|duration/u,bucket:"schedule"},{key:"quality_target",label:"质量目标",pattern:/质量标准|质量目标|quality_standard/u,bucket:"quality"}]){let b=function(a,b,c,d){return a.filter(a=>d.test(`${a.fieldId||""}${a.key||""}${a.fieldName||""}`)).map(a=>(function(a,b,c){let d=(0,M.lG)(a.value),e=function(a){let b=`${a.sourceFile||""} ${a.sourceRef?.sectionTitle||""} ${a.roleId||""}`;return/合同/u.test(b)?"contract":/招标|公告|前附表|需求书/u.test(b)?"tender":/清单|工程量|BOQ|报价/u.test(b)?"boq":/图纸|设计|CAD|DWG/u.test(b)?"drawing":/规范|标准/u.test(b)?"standard":"structured_fact"}(a);return{key:b,label:c,value:d,normalizedValue:ai(d),sourceType:e,sourceFile:a.sourceFile,sourceRef:a.sourceRef?.sectionTitle,confidence:Math.round(100*(a.confidence||.5)),priority:b8(e),locked:b8(e)>=80,selectedReason:"按资料来源优先级和字段置信度决策"}})(a,b,c)).filter(a=>a.value&&!/资料未明确|系统暂未确认/u.test(a.value)).sort((a,b)=>b.priority-a.priority||b.confidence-a.confidence||a.value.length-b.value.length)}(h,a.key,a.label,a.pattern);!g[a.key]&&b.length>0&&(g[a.key]=b[0]);let c=function(a,b,c){let d=[...new Map(c.map(a=>[a.normalizedValue,a])).values()];if(d.length<=1)return;let e=Math.max(...d.map(a=>a.priority)),f=d.filter(a=>a.priority===e);return{key:a,label:b,values:d.map(a=>({value:a.value,sourceFile:a.sourceFile,priority:a.priority,confidence:a.confidence})),decision:1===f.length?"highest_priority_selected":"manual_review_required"}}(a.key,a.label,b);c&&i.push(c)}let j=(b=a.projectGraph)?[...(b.resources||[]).map(a=>({key:`resource_${a.type}_${a.name}`,label:"equipment"===a.type?"机械设备":"labor"===a.type?"劳动力":"材料资源",value:[a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" "),normalizedValue:ai([a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:b8("projectGraph"),locked:!1,selectedReason:"来自项目图谱资源节点"})).filter(a=>a.value),...(b.risks||[]).map(a=>({key:`risk_${a.risk}`,label:"风险源",value:[a.risk,a.level,a.mitigation].filter(Boolean).join(" "),normalizedValue:ai([a.risk,a.level,a.mitigation].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:b8("projectGraph"),locked:!1,selectedReason:"来自项目图谱风险节点"})).filter(a=>a.value)]:[],k=j.filter(a=>/resource_/u.test(a.key)),l=j.filter(a=>/risk_/u.test(a.key));for(let a of j)g[a.key]||(g[a.key]=a);let m=(a.requiredKeys||[]).filter(a=>!g[a]).map(a=>({key:a,label:b4.find(b=>b.key===a)?.label||a,reason:"未从用户输入、招标资料、清单、图纸或项目图谱中确认该事实"})),n={projectIdentity:{projectName:g.project_name,projectCode:g.project_code,owner:g.owner,location:g.project_location},projectScope:{scale:g.project_scale,constructionScope:g.construction_scope},schedule:{duration:g.duration||g.schedule_requirement},quality:{target:g.quality_target||g.quality_standard},safety:{risks:l},resources:{resources:k},environment:{},constraints:{},byKey:g,conflicts:i,gaps:m},o=b9(a.projectRoot);return o&&aa.writeFileSync(e.join(o,`canonical-facts-${c}.json`),JSON.stringify(n,null,2)),n}({facts:bs,projectGraph:bx,requiredKeys:b4.map(a=>a.key),projectRoot:c,requirement:a.requirement,templateId:p.id});bu.canonical=bB;let bC=(0,t._9)(p,ag,{preserveExplicitOutline:Z}),bD=$({chapters:function(a){if(!function(a){let b=A(`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`);return!!/施工组织设计|施工组织|施组|技术标|投标技术|施工方案/u.test(b)||["施工","工程","质量","安全","进度","文明","部署","方案"].filter(a=>b.includes(a)).length>=3&&!/监理|可研|运维|维护|保养/u.test(b)}(a))return a.chapters;let b=C(a),c=A(`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>`${a.title} ${(a.sections||[]).join(" ")}`).join(" ")}`),d=a.chapters.some(a=>/概况|部署|总体|组织|主要施工方案|保障|保证|综合措施|管理体系/u.test(a.title)&&!/雨季|冬季|高温|防汛|扬尘|噪声|工资|劳务|应急|BIM|智慧|管线|交通导改/u.test(a.title)),e=z.filter(a=>D(a,b,c)),f=new Set,g=a.chapters.map(a=>({...a,sections:[...a.sections||[]],queries:[...a.queries||[]],requiredFacts:[...a.requiredFacts||[]],tableSections:[...a.tableSections||[]]}));for(let a of e){let e=g.map((b,c)=>({index:c,score:E(b.title,a),chapter:b})).filter(d=>(function(a,b,c,d){var e;if(!D(a,c,d))return!1;let f=A(b.title);if(a.aliases.some(a=>f.includes(A(a)))||a.sectionItems.some(a=>f.includes(A(a))))return!0;if(e=b.title,/雨季|冬季|高温|防汛|扬尘|噪声|工资|劳务|实名|应急|BIM|智慧|管线|交通导改|垃圾分类|多塔|成品保护/u.test(e))return!1;let g=E(b.title,a);return g>=10||("optional"===a.level?g>=12||/BIM|智慧|数字|创新/iu.test(d):"conditional"===a.level?g>=8||a.projectTypes?.some(a=>c.includes(a))===!0||a.aliases.some(a=>d.includes(A(a))):g>=6)})(a,d.chapter,b,c)).sort((a,b)=>b.score-a.score),h=e[0]?.index??(d&&("core"===a.level||"mandatory"===a.level)?F(a,g):-1);if(h<0)continue;let i=g[h],j=function(a,b){let c=A(b.title);return a.aliases.some(a=>c.includes(A(a)))||c.includes(A(a.title)),a.title}(a,i);i.sections=B(i.sections,[j,...a.sectionItems],50),i.queries=B(i.queries,[a.title,...a.queries],30),i.requiredFacts=B(i.requiredFacts,a.facts,30),i.tableSections=B(i.tableSections,a.tableSections||[],20),i.purpose=`${i.purpose};系统已按施工组织设计标准模块库自动挂靠“${a.title}”,仅在本章范围内展开与章节语义、项目类型和资料事实合理相关的内容,禁止机械塞入无关内容。`,f.add(a.id)}for(let a of d?e.filter(a=>("mandatory"===a.level||"core"===a.level)&&!f.has(a.id)):[]){let b=F(a,g),c=g[b];c.sections=B(c.sections,[a.title,...a.sectionItems],50),c.queries=B(c.queries,[a.title,...a.queries],30),c.requiredFacts=B(c.requiredFacts,a.facts,30),c.tableSections=B(c.tableSections,a.tableSections||[],20),c.purpose=`${c.purpose};系统已补足施工组织设计必备模块“${a.title}”,需以合理挂靠方式呈现,不改变用户一级章节。`}return g}({template:p,chapters:bC,requirement:a.requirement}),projectGraph:bx,canonicalFacts:bB});p={...p,chapters:bD};let bE=new Map;if(bx){let a=new Set;for(let b of[...bx.works,...bx.methods,...bx.resources,...bx.schedule,...bx.standards,...bx.risks,...bx.requirements,...bx.siteConditions])(b.sourceFiles||[]).forEach(b=>a.add(b));for(let b of bD){let c=[b.title,b.purpose,...b.sections||[],...b.requiredFacts||[],...b.queries||[]].join(" "),d=a=>a&&((0,c_.C1)(a,c,.18)||(0,c_.C1)(a,b.title,.12)),e=/概况|总体|部署|施工|进度|工期|质量|安全|资源|人材机|材料|机械|劳动力|风险|危大|绿色|环保/u.test(c),f=bx.works.filter(a=>a.name&&(d(a.name)||e)),g=bx.methods.filter(a=>a.name&&(d(a.name)||(a.applicableWorks||[]).some(d)||e)),h=bx.resources.filter(a=>a.name&&(d(a.name)||/资源|人材机|材料|机械|劳动力/u.test(c)&&/material|equipment|labor/u.test(a.type))),i=bx.gaps.filter(a=>d(a)||e),j=new Set;for(let a of f)(a.sourceFiles||[]).forEach(a=>j.add(a));for(let a of g)(a.sourceFiles||[]).forEach(a=>j.add(a));for(let a of h)(a.sourceFiles||[]).forEach(a=>j.add(a));0===j.size&&e&&[...a].slice(0,12).forEach(a=>j.add(a)),bE.set(b.id,{graphFiles:j,graphBoqItems:h.map(a=>({name:a.name,quantity:a.quantity,unit:a.unit,sourceFiles:a.sourceFiles||[]})),graphWorks:f.map(a=>a.name),graphMethods:g.map(a=>a.name),gaps:i})}br||((0,ay.fx)(O,(0,ay.X5)({type:"file_understanding",roleId:"project-graph-match",status:"success",message:`图谱→章节映射完成:${bx.works.length}工程 ${bx.methods.length}工法 ${bx.resources.length}资源 → ${bD.length}章`,details:bD.map(a=>{let b=bE.get(a.id);return`${(0,t.GQ)(a.title)}:匹配文件${b?.graphFiles.size||0}个,BOQ项${b?.graphBoqItems.length||0}个`})},{subtitle:"图谱章节映射"})),H())}let bF=bD,bG=br?.constructionOrganizationContext||(0,cM.TD)(br?.constructionOrganizationGraph),bH=[U.prompt,bG].filter(Boolean).join("\n\n"),bI=[bH,S({template:{...p,chapters:bF},chapters:bF,factsModel:bu,requirement:a.requirement})].filter(Boolean).join("\n\n"),bJ={...p,chapters:bF},bK=function(a,b){let c=a.replace(/\\n/gu,"\n"),d=new Map,e=[...c.matchAll(/第([一二两三四五六七八九十\d]+)章[^\n。;;]{0,80}(?:强制|必须|挂靠|小节|排序|最先|之后|之前)/gu)];for(let a of e){let b=function(a){let b={零:0,一:1,二:2,两:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};if(/^\d+$/u.test(a))return Number(a);if(void 0!==b[a])return b[a];if("十"===a)return 10;let c=/^(?:(一|二|两|三|四|五|六|七|八|九)?)十(?:(一|二|两|三|四|五|六|七|八|九))?$/u.exec(a);if(c)return 10*(c[1]?b[c[1]]:1)+(c[2]?b[c[2]]:0)}(a[1]);if(!b)continue;let f=Math.max(0,a.index||0),g=e.find(a=>(a.index||0)>f)?.index,h=c.slice(f,Math.min(c.length,g??f+1400));if(aL(h)&&!/(强制小节|必须小节|以下小节设置和排序|必须设置独立的|必须包含独立的)/u.test(h))continue;let i=function(a){let b=/(?:以下小节设置和排序|强制小节|必须小节)[::]\s*([\s\S]*?)(?:\n\s*#{2,6}\s|\n\s*第[一二两三四五六七八九十\d]+章|$)/u.exec(a)?.[1];if(b){let c=aM([...b.matchAll(/(?:^|\n)\s*\d+[..、]\s*([^——\-—::。;;\n]{2,30})(?:[——\-—::]|,|,|。|;|;|\n|$)/gu)].map(a=>a[1]),a);if(c.length>0)return c}let c=[];for(let b of a.matchAll(/第[一二两三四五六七八九十\d]+章[^。;;\n]{0,50}(?:强制)?(?:包含|设置|输出|排序|挂靠)[^::。;;\n]{0,20}[::]\s*([^。;;\n]{2,120})/gu))for(let a of b[1].split(/[、,,//及和与]/u))c.push(a);for(let b of a.matchAll(/[“"]([^”"]{2,30})[”"]\s*(?:二级)?小节/gu))c.push(b[1]);for(let b of a.matchAll(/([\p{Script=Han}A-Za-z0-9()()]{2,30})(?:——|—|-|:|:)\s*(?:独立的)?(?:二级)?小节/gu))c.push(b[1]);for(let b of a.matchAll(/(?:必须|应当|需|需要|包含|设置|输出)[^。;;\n]{0,30}(?:独立的)?(?:二级)?小节[::]\s*([^。;;\n]{2,80})/gu))for(let a of b[1].split(/[、,,//及和与]/u))c.push(a);return aM(c,a)}(h);if(0===i.length)continue;let j=d.get(b)||{blocks:[],titles:[]};for(let a of(j.blocks.push(h),i))j.titles.some(b=>aK(b,a))||j.titles.push(a);d.set(b,j)}return[...d.entries()].map(([a,c])=>{let d=b?.[a-1];return{chapterIndex:a-1,chapterTitle:d?.title,source:c.blocks[0]?.split("\n").find(a=>a.trim())?.trim().slice(0,120),requiredSections:c.titles.map((a,b)=>({title:a,order:b+1,required:!0,source:c.blocks[0]?.slice(0,240)}))}})}([aJ,a.requirement||""].filter(Boolean).join("\n\n"),bF),bL=(0,w.tF)({requirement:a.requirement,promptTexts:aJ,template:bJ,chapters:bF,spec:ag}),bM=0,bN=0;bF=$({chapters:await (0,M.l$)(bF.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b,chapterIndex:c})=>{if(b.sections?.length){bM+=1;let a=aS([...bK.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,t.GQ)(a.chapterTitle)===(0,t.GQ)(b.title)).flatMap(a=>a.requiredSections.sort((a,b)=>(a.order||0)-(b.order||0)).map(a=>a.title)),...b.sections],b.title);return{...b,sections:a.length?a:aS(b.sections,b.title)}}bN+=1;let d=(0,s.QR)(a5.filter(a=>a.chapterId===b.id||(0,u.Lk)(a,b.title)),{maxChars:(0,s.Pc)(bL.chapterTargets.get(b.id)||1200),preservePinned:!0}),e=U.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",f=ct(P,b),g=await aT({template:bJ,chapter:b,chapterIndex:c,evidence:d,promptTexts:f.promptTexts,projectContext:bI,requirement:a.requirement,roleContext:e,targetWords:bL.chapterTargets.get(b.id)||1200,structuralRules:bK,signal:a.signal}),h=bK.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,t.GQ)(a.chapterTitle)===(0,t.GQ)(b.title)).flatMap(a=>a.requiredSections.map(a=>`强制小节:${a.title}`));if((0,ay.fx)(O,(0,ay.X5)({type:"validation",roleId:"section-planning",promptId:f.primaryPromptId,status:g.length?"success":"failed",message:`${(0,t.GQ)(b.title)} 小节规划${g.length?`生成 ${g.length} 个小节`:"未生成可用小节"}`,details:[...f.promptDetails,...h,...g.length?g.map(a=>`规划小节:${a}`):["规划结果为空或被污染过滤"]]},{subtitle:"小节规划"})),!g.length)throw Error(`${(0,t.GQ)(b.title)} 小节规划未生成可用小节`);return{...b,sections:g}},{kind:"llmRepair",targetWords:bL.targetChars||4e3,concurrency:2}),projectGraph:bx,canonicalFacts:bB});let bO=S({template:p={...p,chapters:bF},chapters:bF,factsModel:bu,requirement:a.requirement});bI=[bH,bO].filter(Boolean).join("\n\n"),br||(0,ay.fx)(O,(0,ay.X5)({type:"validation",roleId:"document-blueprint",status:"success",message:"已生成全局事实主表与文档蓝图,后续章节和小节将共用同一套专业约束",details:bO.split("\n").slice(0,12)},{subtitle:"全局蓝图"}));let bP=(0,w.tF)({requirement:a.requirement,promptTexts:aJ,template:p,chapters:bF,spec:ag}),bQ=function(a){let b=Date.now(),c=a.template.chapters.map(a=>{let b=a.sections?.length?a.sections:[a.title];return{chapterId:a.id,title:a.title,purpose:a.purpose||cU(a.title),requiredFacts:[...new Set([...a.requiredFacts||[],a.title])],requiredGraphNodes:[a.title],evidenceQueries:[...new Set([a.title,...a.queries||[],...a.requiredFacts||[]])],qualityRules:["事实必须来自锁定资料范围","不得出现后台话术和兜底措辞","不得混入其他项目名称","章节必须覆盖规划小节"],forbiddenPhrases:cN,sections:b.map(b=>({title:b,objective:cU(b),requiredFacts:[...new Set([b,...a.requiredFacts||[]])],requiredGraphNodes:[b],evidenceQueries:[...new Set([a.title,b,...cT(a.title),...cT(b),...a.queries||[],...a.requiredFacts||[]].filter(Boolean))],forbiddenPhrases:cN,minChars:/项目特点.*重点.*难点|重点.*难点.*分析/u.test(b)?1800:/项目主要施工内容|主要分部分项工程施工方案|主要施工方法/u.test(b)?2200:/原材料进场复试|见证取样|危大工程专项施工方案审批流程/u.test(b)?800:/施工部署|施工流水|主要施工机械|劳动力|材料进场|资源动态|质量控制点|危大工程|安全隐患|临时用水|临时用电/u.test(b)?760:/概况|说明|依据/u.test(b)?260:420}))}});return{plan:{planId:`plan-${(0,M.c6)({templateId:a.template.id,scope:a.context.materialScope.scopeHash,chapters:c.map(a=>a.title)}).slice(0,10)}`,title:a.title||a.template.name,chapters:c,requiredGlobalFacts:["项目名称","工期","质量标准","招标范围"],forbiddenPhrases:cN,qualityRules:["资料范围先锁定","基础图谱必跑","章节任务先于正文","Reviewer 通过后才能导出"]},node:{id:"document-planner",type:"document_planner",status:"completed",startedAt:b,completedAt:Date.now(),outputSummary:`${c.length} 章、${c.reduce((a,b)=>a+b.sections.length,0)} 个小节任务`,metrics:{chapters:c.length}}}}({template:p,context:bw,title:p.name});bw.documentPlan=bQ.plan,bw.nodes.push(bQ.node),(0,ay.fx)(O,(0,ay.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:bQ.node.outputSummary||"Agent 文档规划完成",details:bQ.plan.chapters.map(a=>`${a.title}:${a.sections.length} 个小节任务`)},{subtitle:"Agent Document Planner",order:O.length})),G=bF.map(a=>a.id);let bR=function(a){let b=a.template.chapters.length,c=b>0?a.targetWords/b:a.targetWords,d=`${a.template.name}
|
|
111
|
-
${a.template.category||""}
|
|
112
|
-
${a.requirement||""}`,e=/专项|安全|质量|验收|审核|合同|合规|审计|风控|风险/u.test(d),f=a.targetWords>=3e4||b>=8||c>=4e3,g=a.targetWords<=6e3&&b<=4&&!e;return{mode:e?"strict":f?"longform":g?"fast":"balanced",enableChapterReview:!0,enableGlobalReview:!0,enableDocumentBudgetExpansion:!1,enableFinalQualityReview:!0}}({template:p,targetWords:bP.targetChars||[...bP.chapterTargets.values()].reduce((a,b)=>a+b,0),requirement:a.requirement}),bS={strategy:bR,metrics:[],llm:{calls:0,failures:0,maxActive:0,retries:0},evidence:{raw:0,used:0,filteredNoise:0,avgNoiseScore:0,avgFactDensity:0,searchQueries:0,searchMs:0,contextChars:0},quality:{blockingCount:0,importantCount:0,minorCount:0,repairedCount:0}};(0,ay.fx)(O,(0,ay.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${bR.mode} 生成策略:章节审查 ${bR.enableChapterReview?"启用":"跳过"}、全局审查 ${bR.enableGlobalReview?"启用":"跳过"}、最终质量审查 ${bR.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${bR.enableDocumentBudgetExpansion?"启用":"跳过"};LLM 调用按工作流任务自然并行`},{subtitle:"后台自动策略"}));let bT=Z?"OUTLINE 章节":"模板章节",bU=(0,ay.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${bN} 章由 LLM 基于${bT}、项目资料理解和证据规划小节,${bM} 章已由模板显式提供小节并跳过规划`},{subtitle:"小节规划策略"}),bV=Z?`;识别到 OUTLINE 章节 ${Y.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",bW=[...P.prompts.map(a=>`${a.category}|${a.roleId}|${a.id}|${a.name}|${a.bindingSource}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`),...P.unresolvedRoles.map(a=>`unresolved|${a}|项目角色配置中的提示词角色不存在`),...P.missingResourceRoles.map(a=>`missingResource|${a}|提示词角色未显式绑定资源`)];(0,ay.fx)(O,(0,ay.X5)({type:"role_binding",roleId:K,status:"success",message:`已绑定项目资料 ${R.length} 份、${P.prompts.length} 个有效提示词;写作 ${P.writerPrompts.length}、章节 ${P.chapterPrompts.length}、抽取 ${P.extractionPrompts.length};已自动抽取运行时规则 ${aG.executionSummary.length} 条;语义资料覆盖 ${Math.round(100*aj.materialCoverageRate)}%${bV}`,details:[...bW,...aG.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:L,roleName:L})),(0,ay.fx)(O,(0,ay.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${aG.executionSummary.length} 条,版本 ${aG.sourceHash}`,details:aG.executionSummary.length?[...aG.executionSummary,`必需表格:${aG.requiredTables.join("、")||"无"}`,`必含关键词:${aG.requiredKeywords?.join("、")||"无"}`,`禁含内容:${aG.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})),(0,ay.fx)(O,(0,ay.X5)({type:"validation",roleId:"document-readiness",status:aj.ready?"success":"failed",message:`生成准备度:绑定资料已就绪,语义覆盖 ${Math.round(100*aj.materialCoverageRate)}%,角色匹配 ${Math.round(100*aj.roleSatisfactionRate)}%,优化建议 ${Math.round(100*aj.specCompletenessRate)}%`,details:aj.diagnostics},{subtitle:"生成准备度检查"})),(0,ay.fx)(O,bU),H();let bX=Math.round(([...bP.chapterTargets.values()].reduce((a,b)=>a+b,0)||bP.targetChars||0)/Math.max(1,bF.length)),bY=Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),bZ=bF.some(a=>(a.sections||[]).filter(Boolean).length>=30),b$=bF.length<=1||bZ?1:bP.longformStrict||bX>=9e3?2:bX>=6500?Math.min(3,bF.length):Math.min(4,bF.length),b_=Math.max(1,Math.min(bF.length||1,Number.isFinite(bY)&&bY>0?Math.floor(bY):b$));(0,ay.fx)(O,(0,ay.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节自适应调度:本轮 ${b_}/${bF.length} 章并发`,details:[`有效章节数:${bF.length}`,`平均章节目标:${bX} 字`,Number.isFinite(bY)&&bY>0?`章节并发来自 DOCUMENT_CHAPTER_CONCURRENCY=${Math.floor(bY)}`:`章节并发自适应=${b$},${bZ?"存在超长显式小节章,优先逐章产出 checkpoint":"长章保守、短章提速"}`]},{subtitle:"章节并发策略"})),H();for(let b=0;b<bF.length;b+=b_){let d=bF.slice(b,b+b_);await Promise.all(d.map(async(d,f)=>{let g,h=b+f;(0,M.Te)(a.signal);let i=Date.now(),j=O.length;try{var k,m;let b;O.push((0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:P.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${h+1}/${bF.length}`,`二级小节:${d.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:h+1,total:bF.length,label:"章节生成"}},{subtitle:(0,t.GQ)(d.title),order:h})),H();let f=a.resumeChapters?.find(a=>a.id===d.id||a.title===d.title),o=f?.content?.trim(),r=f?.evidence?.length?[...f.evidence]:[],z=U.chapterPlans.find(a=>a.chapterId===d.id||a.chapterTitle===d.title),A=z?Object.values(z.evidenceQueries).flat().filter(Boolean):[],B=d.queries.length>0?d.queries:[p.name,p.outputTitle,d.title],C=bE.get(d.id);if(bx&&C&&C.graphFiles.size>0){let a=[...a_],b=b=>a.includes(b)?b:a.find(a=>a.endsWith(b)||a.includes(b));for(let a of[...C.graphFiles].map(a=>b(a)||a).filter(a=>aC(c,a,a_)).slice(0,12)){let b=bk(a,{maxChunkContentChars:8e3});if(b?.chunks?.length)for(let c of b.chunks)r.push({chapterId:d.id,filePath:b.file?.relativePath||a,score:5+(C.graphWorks.length+C.graphMethods.length)*.5,content:c.content,roleId:aX.get(a),processingType:aY.get(a),sectionTitle:c.sectionTitle,source:"graph-evidence"})}}let D=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)?cc:[],E=cA(d,[...B,...A],D),F=cB(d,D),G=Date.now();O[j]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:P.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 正在执行质量优先的章节检索${C?.graphFiles.size?`(图谱匹配 ${C.graphFiles.size} 个文件)`:""}`,details:E.slice(0,F).map(a=>`检索:${a.slice(0,42)}`),progress:{current:h+1,total:bF.length,label:"证据检索"}},{subtitle:(0,t.GQ)(d.title),order:h}),H();let I=o?[]:[...a_].filter(Boolean).sort(),K=o?[]:br?.evidenceByChapterId?.[d.id]||[];K.length>0&&r.push(...K);let L=[],Q=E.slice(0,F);if(I.length>0&&Q.length>0){(0,M.Te)(a.signal);let b=await (0,M.l$)(Q,async a=>bl(a,I,Math.min(a1,12),d.title),{kind:"search"});L.push(...b)}for(let a of(bS.evidence.searchQueries+=Math.min(E.length,F),bS.evidence.searchMs+=Date.now()-G,L))r.push(...a.filter(a=>aC(c,a.filePath,aW)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:aX.get(a.filePath),processingType:aY.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));let S=o?[]:await (0,aE.$b)({manager:q,projectRoot:c,chapter:d,plan:z,profile:T,scopedFilePaths:I,limitPerQuery:Math.min(a1,10),signal:a.signal}).catch(()=>[]);r.push(...S);let V=new Set((d.pinnedEvidenceFilePaths||[]).filter(Boolean)),W=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)&&r.push(...bn.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"})));let X=new Set([...V]),Y=bP.chapterTargets.get(d.id)||1200,Z=(0,s.Pc)(Y,6e3,12e3);for(let a of X){if(!aC(c,a,aW))continue;let b=V.has(a),e=bk(a,{maxChunkContentChars:Z});e&&r.push(...e.chunks.map(a=>({chapterId:d.id,filePath:e.file.relativePath,score:1,content:a.content,roleId:aX.get(e.file.relativePath),processingType:aY.get(e.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let $=r.filter(a=>aC(c,a.filePath,a_));if(!o&&aF.enabled&&aF.allowProjectFacts){let b=await bt({config:aF,chapterId:d.id,chapterTitle:d.title,sectionTitles:d.sections||[],runtimeRules:aG,localFacts:[...bu.project,...bu.schedule,...bu.quality,...bu.safety,...bu.resources,...bu.preciseFacts],signal:a.signal});a7.queries.push(...b.queries),a7.filteredCount+=b.filtered+b.evidence.length}let aa=(0,s.Pc)(Y,7e3,26e3),ab=o?[]:(0,aE.SK)({project:aZ,chapter:d,plan:z,profile:T,scopedFilePaths:I,highRisk:a3.highRisk});ab.length>0&&$.push(...by(ab,a0)),$=by($,a0);let ac=cz(d,$,{maxItems:cC(a1,d,a3.highRisk),maxChars:aa+(a3.highRisk?14e3:4e3),preservePinned:!0},bS);bA(ac,a0,`chapter:${d.id}:initial`);let ae=d.requiredFacts.filter(a=>!ac.some(b=>(0,u.Lk)(b,a))),af=0,ai=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>c$(`${a.sectionTitle||""}${a.content||""}`).includes(c$(b)))),c=(a.chapter.tablePlans||[]).flatMap(a=>a.fillability?.missingProjectFactFields||[]),d=a.evidence.length<3?["章节证据数量不足"]:[],e=b.length+c.length+d.length,f=e>=5?"high":e>=2?"medium":"low",g="high"===f?"evidence_first":c.length>0?"generate_with_review_notes":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:f,missingFacts:b,missingEvidence:d,tableFieldGaps:[...new Set(c)],suggestedStrategy:g,reason:0===e?"章节事实、证据和表格可填性满足常规生成条件。":`识别到 ${e} 项生成前缺口,按 ${g} 策略生成。`}}({chapter:d,evidence:ac}),aj=new Set(ac.map(a=>a.filePath)).size,al=!!C&&(C?.graphFiles.size||0)>=8&&aj>=6&&0===ae.length&&"low"===ai.riskLevel,am=I.length<=80&&("evidence_first"===ai.suggestedStrategy||a3.highRisk||ae.length>0||ac.length<8&&"low"!==ai.riskLevel);if(!al&&am&&I.length>0){let b=await _({manager:q,projectRoot:c,chapter:d,scopedFilePaths:I,fileRoleByPath:aX,fileProcessingByPath:aY,requiredNeeds:ae,highRisk:a3.highRisk,signal:a.signal}).catch(()=>[]);af=b.length,b.length>0&&($=cz(d,[...$,...by(b,a0)],{maxItems:cC(a1+12,d,a3.highRisk),maxChars:aa+(a3.highRisk?36e3:16e3),preservePinned:!0},bS),$=by($,a0),ac=cz(d,$,{maxItems:cC(a1+8,d,a3.highRisk),maxChars:aa+(a3.highRisk?28e3:12e3),preservePinned:!0},bS),bA(ac,a0,`chapter:${d.id}:deep`),ae=d.requiredFacts.filter(a=>!ac.some(b=>(0,u.Lk)(b,a))))}for(let a of(0===ac.length&&a8.push(`${d.title}:缺少可支撑正文的项目资料证据`),ae))a8.push(`${d.title}:事实需求未满足 ${a}`);let an=(0,ay.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:a5.length>0?"success":"failed",message:`已检索/绑定 ${a5.length} 条证据`});bd<0?bd=(0,ay.fx)(O,an):O[bd]={...an,order:O[bd]?.order??an.order},H(),(0,M.Te)(a.signal);let ao=[C?[C.graphWorks.length?`图谱识别本章工程内容:${C.graphWorks.join("、")}`:"",C.graphMethods.length?`图谱识别本章施工方法:${C.graphMethods.join("、")}`:"",C.graphBoqItems.length?`图谱识别本章BOQ清单项(${C.graphBoqItems.length}项):${C.graphBoqItems.slice(0,30).map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",C.gaps.length?`图谱识别本章资料缺口:${C.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",z?.writingGoal,z?.mustCover?.length?`本章必须覆盖:${z.mustCover.join("、")}`:"",z?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${z.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),ap=ct(P,d);if(P.writerPrompts.length>0&&!ap.primaryWriter)throw Error(`${(0,t.GQ)(d.title)} 写作主控提示词未进入章节生成阶段`);let ax=[ap.promptTexts,ak].filter(Boolean).join("\n\n"),az=ap.promptDetails.length?ap.promptDetails:["未绑定章节写作提示词"],aD=function(a){let b=a.profile||l,c=[],d=[a.template.name,a.template.outputTitle,a.chapter.title,a.chapter.purpose,...a.chapter.sections||[]].filter(Boolean).join(" "),e=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title);for(let d of a.chapter.requiredFacts||[])as(c,b,{label:d,category:n(b,d)?.category||"required",required:!0,source:"template"});for(let d of a.chapter.sections||[])as(c,b,{label:d,category:"section",required:!1,source:"section",queries:ar(d,[a.chapter.title])});for(let d of a.plan?.requiredContents||[])as(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of a.plan?.evidenceNeeds||[])as(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of e?.requiredFactIds||[]){let e=a.spec?.factFields.find(a=>a.id===d);e&&as(c,b,{label:e.name,category:n(b,e.name)?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:ar(e.name,[e.extractionHint||"",e.validationHint||""])})}for(let e of a.spec?.factFields||[]){if(!e.required)continue;let f=n(b,e.name),g=`${e.name} ${e.extractionHint||""} ${e.validationHint||""}`;(d.includes(e.name)||ar(e.name,f?.aliases||[]).some(a=>d.includes(a))||a.chapter.requiredFacts.some(a=>a.includes(e.name)||e.name.includes(a)))&&as(c,b,{label:e.name,category:f?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:ar(e.name,[g])})}for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&d.includes(a))&&at(c,b,a,"profile","must_use"===a.usagePolicy,[d]);let f=aq(a.requirement||"");if(f)for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&f.includes(a))&&at(c,b,a,"requirement",!0,[f]);let g=aq(a.promptTexts||"");if(g)for(let d of b.factFields)[d.name,...d.aliases].some(a=>a.length>=2&&g.includes(a))&&at(c,b,d,"prompt","must_use"===d.usagePolicy,[a.chapter.title]);return c}({template:p,chapter:d,spec:ag,profile:ah,promptTexts:ax,requirement:a.requirement,plan:z?{requiredContents:z.mustCover,evidenceNeeds:Object.values(z.evidenceQueries).flat()}:void 0}),aH=av({needs:aD,factsModel:bu,evidence:$,profile:ah}),aI=aH.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label);if(aI.length>0&&I.length>0){let b=await cE({manager:q,projectRoot:c,chapter:d,needs:aI,scopedFilePaths:I,fileRoleByPath:aX,fileProcessingByPath:aY,signal:a.signal}).catch(()=>[]),e=await _({manager:q,projectRoot:c,chapter:d,scopedFilePaths:I,fileRoleByPath:aX,fileProcessingByPath:aY,requiredNeeds:aI,highRisk:!0,signal:a.signal}).catch(()=>[]),f=by([...b,...e],a0);f.length>0&&($=cz(d,[...$,...f],{maxItems:cC(a1+16,d,!0),maxChars:aa+42e3,preservePinned:!0},bS),$=by($,a0),ac=cz(d,$,{maxItems:cC(a1+12,d,!0),maxChars:aa+32e3,preservePinned:!0},bS),bA(ac,a0,`chapter:${d.id}:supplemental`),ae=d.requiredFacts.filter(a=>!ac.some(b=>(0,u.Lk)(b,a))),aI=(aH=av({needs:aD,factsModel:bu,evidence:$,profile:ah})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}bA(ac,a0,`chapter:${d.id}:writer-input`);let aJ=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b)||`${a.sectionTitle||""} ${a.content}`.includes(b))).length,d=a.chapter.requiredFacts.length,e=a.chapter.requiredFacts.filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:d,evidence:ac,risk:a3});a6.push(aJ);let aK=new Set(ac.map(a=>a.filePath)),aL=ac.reduce((a,b)=>a+b.content.length,0),aM=[...a3.highRisk?[`召回覆盖风险(${a3.riskReason||"切片未完全预加载"}):已加载 ${a3.loadedChunks}/${a3.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${K.length} 条`,`深召回证据:${af} 条`,`事实覆盖:${aJ.requiredFactCovered}/${aJ.requiredFactTotal}`,`小节覆盖:${aJ.sectionCovered}/${aJ.sectionTotal}`];O[j]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:P.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 已选取 ${ac.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aK.size} 份`,`上下文字符:${aL}`,`检索查询:${Math.min(E.length,F)} 组`,...aM],progress:{current:h+1,total:bF.length,label:"正文生成"}},{subtitle:(0,t.GQ)(d.title),order:h}),H(),bS.evidence.contextChars+=aL;let aN=(k=aH,au(k.flatMap(a=>a.facts))),aO=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)?bp:[],aP=function(a){let b=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title),c=(b?.requiredFactIds||[]).map(b=>a.spec?.factFields.find(a=>a.id===b)?.name).filter(Boolean),d=[...new Set([...a.chapter.requiredFacts,...c,...a.plan?.requiredContents||[],...a.plan?.evidenceNeeds||[],...(a.resolvedFactNeeds||[]).filter(a=>a.need.required).map(a=>a.need.label)].filter(Boolean))],e=a.roleFacts.map(({fact:a})=>`- ${a.key}:${(0,s.eE)((0,M.lG)(a.value))}`),f=(a.resolvedFactNeeds||[]).flatMap(a=>a.facts),g=a.indexedFacts||[],h=(0,N.Cr)(g,a=>(0,N.rF)(a),{maxItems:48,maxChars:12e3},"indexedFacts"),i=f.length>0?[]:h.selected.map(a=>`- ${a.key||a.fieldName||"资料事实"}:${(0,s.eE)((0,M.lG)(a.value)).slice(0,180)}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`),j=h.dropped.length>0?[`⚠️ ${h.dropped.length} 个低优先级事实未列出(完整列表见事实主表)`]:[],k=[...f,...g].filter(a=>/建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`)).filter((a,b,c)=>c.findIndex(b=>`${b.key||b.fieldName}:${(0,M.lG)(b.value)}`==`${a.key||a.fieldName}:${(0,M.lG)(a.value)}`)===b),l=[...new Set([...function(a){let b=new Set,c=/(?:\b[A-Z]{1,8}[\w./-]*\d[\w./-]*\b|\b\d+(?:\.\d+)?\s*(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|L|ml|MPa|kPa|℃|%|台|套|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年|万元|元)\b|\b\d+\s*[×xX]\s*\d+(?:\s*[×xX]\s*\d+)?\b|\b(?:GB|GB\/T|ISO|IEC|IEEE|RFC|API|DB\d*|T\/[A-Z]+)\s*[\w.-]+\b)/giu;for(let d of a){let a=(0,M.lG)(d.content).replace(/\s+/gu," ");if((!/报价明细|投标报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(a)||/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(a))&&!/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂/u.test(a)){for(let d of a.matchAll(c))b.add(d[0].trim());if(b.size>=40)break}}return[...b].slice(0,40)}(a.evidence),...f.map(a=>(0,M.lG)(a.value)).filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|JGJ|ISO|台|套|个|项|批|次|份|人|㎡|日历天|万元|元/iu.test(a)),...g.map(a=>(0,M.lG)(a.value)).filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|JGJ|ISO|台|套|个|项|批|次|份|人|㎡|日历天|万元|元/iu.test(a))])],m=0,n=[];for(let a of l){if(m+a.length>3e3&&n.length>=10)break;n.push(a),m+=a.length+1}let o=new Set([...a.evidence.map(a=>a.filePath),...f.map(a=>a.sourceFile),...(a.indexedFacts||[]).map(a=>a.sourceFile)]).size,p=(a.resolvedFactNeeds||[]).filter(a=>"satisfied"!==a.status&&a.need.required).map(a=>a.need.label);return["【本章事实覆盖与参数落位要求】",d.length?`必须优先覆盖的事实/要求:
|
|
113
|
-
${d.map(a=>`- ${a}`).join("\n")}`:"",e.length?`角色节点已抽取事实:
|
|
114
|
-
${e.join("\n")}`:"",k.length?`项目基础事实卡片(资料已明确,项目概况、项目基本信息表、进度和质量相关内容必须优先使用,不得输出任何占位话术):
|
|
115
|
-
${k.map(a=>`- ${a.key||a.fieldName}:${(0,s.eE)((0,M.lG)(a.value)).slice(0,220)}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`).join("\n")}
|
|
116
|
-
项目基本信息表必须使用固定表头:| 信息项 | 内容 |,不得使用“序号|项目名称|内容参数”表头,不得输出后台溯源列。`:"",a.factNeedsPrompt||"",i.length?`全局资料事实索引匹配到的本章可写事实:
|
|
117
|
-
${i.join("\n")}`:"",n.length?`本章资料中可直接使用的可靠精确参数/编号:${n.join("、")}。这些参数来自绑定资料,不属于编造;涉及对应对象、部位、工序、材料、设备、项目概况、质量验收或安全控制时必须自然写入正文,并保持原样或等价专业表达。项目基础事实中的合同估算价、计划工期可用于项目概况;不得写入报价明细、单价、税率、预留金。`:"",p.length?`当前事实需求仍未充分确认:${p.join("、")}。未确认项不得编造;但已满足事实需求中的资料事实必须写入对应小节。`:"",a.missingFacts.length?`模板显式要求中当前检索未充分命中的项:${a.missingFacts.join("、")}。未命中项不得编造,但不得因此省略上方已经明确的可靠参数。`:"",`本章可用材料来源约 ${o} 个文件,正文必须按事实需求把可用事实内化到对应小节,不得单列后台资料清单。`,...j].filter(Boolean).join("\n")}({chapter:d,plan:void 0,spec:ag,roleFacts:W,evidence:ac,missingFacts:ae,indexedFacts:[...aO,...aN],resolvedFactNeeds:aH,factNeedsPrompt:function(a){let b=a.map(a=>{let b=a.facts.slice(0,5).map(b=>`${b.key||b.fieldName||a.need.label}=${aw(b.value)}${b.sourceFile?`(${e.basename(b.sourceFile)})`:""}`),c=a.facts.length?[]:(a.evidence||[]).slice(0,2).map(a=>`证据片段:${aw(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?`事实需求覆盖卡片:
|
|
118
|
-
${b.join("\n")}`:""}(aH)}),aQ=function(a){let b=Date.now(),c=a.plan.chapters.find(b=>b.chapterId===a.chapter.id)||a.plan.chapters.find(b=>b.title===a.chapter.title);if(!c)throw Error(`缺少章节计划:${a.chapter.title}`);let d=a.context.facts.filter(a=>c.evidenceQueries.some(b=>cR(a,b))||c.requiredFacts.some(b=>cR(a,b))),e=c.sections.map(b=>{let c=a.context.facts.filter(a=>b.evidenceQueries.some(b=>cR(a,b))||b.requiredFacts.some(b=>cR(a,b))).slice(0,24),d=a.evidence.filter(a=>b.evidenceQueries.some(b=>(function(a,b){let c=cO(`${a.sectionTitle||""} ${a.content||""} ${a.filePath||""}`);return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(cO(a)))})(a,b))).slice(0,24),e=b.requiredGraphNodes.flatMap(b=>cS(a.context.baseProjectGraph,b)).slice(0,12),f=[];return 0===d.length&&0===c.length&&0===e.length&&f.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${b.title} 缺少事实、图谱或证据支撑`,suggestion:"应先定向检索和抽取事实,不能生成占位正文。"}),{...b,factIds:c.map(a=>(0,M.c6)({key:a.key,value:(0,M.lG)(a.value),sourceFile:a.sourceFile}).slice(0,12)),evidenceIds:d.map(a=>(0,M.c6)({filePath:a.filePath,content:a.content.slice(0,160),score:a.score}).slice(0,12)),graphNodeIds:e.map(a=>(0,M.c6)(a).slice(0,12)),ready:0===f.length,issues:f}}),f=e.flatMap(a=>a.issues),g={taskId:`chapter-task-${(0,M.c6)({plan:a.plan.planId,chapter:a.chapter.id,evidence:a.evidence.map(a=>(0,M.c6)({filePath:a.filePath,content:a.content.slice(0,120),score:a.score}))}).slice(0,10)}`,chapterId:a.chapter.id,title:a.chapter.title,facts:d.slice(0,48),evidence:a.evidence.slice(0,48),graphContext:cS(a.context.baseProjectGraph,a.chapter.title).slice(0,20).join("\n"),sections:e,ready:0===f.length,issues:f};return{task:g,node:{id:`chapter-task-${a.chapter.id}`,type:"chapter_task_planner",status:g.ready?"completed":"failed",startedAt:b,completedAt:Date.now(),outputSummary:`${g.sections.filter(a=>a.ready).length}/${g.sections.length} 个小节任务就绪`,metrics:{facts:g.facts.length,evidence:g.evidence.length,issues:f.length},issues:f}}}({plan:bQ.plan,chapter:d,context:bw,evidence:ac});if(bw.chapterTasks=[...(bw.chapterTasks||[]).filter(a=>a.chapterId!==d.id),aQ.task],bw.nodes.push(aQ.node),(0,ay.fx)(O,(0,ay.X5)({type:"validation",roleId:`agent-chapter-task-${d.id}`,status:aQ.task.ready||o?"success":"failed",message:aQ.task.ready?aQ.node.outputSummary||`${(0,t.GQ)(d.title)} 章节任务规划完成`:o?`${(0,t.GQ)(d.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:aQ.node.outputSummary||`${(0,t.GQ)(d.title)} 章节任务规划完成`,details:aQ.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:O.length})),H(y),!aQ.task.ready&&!o)throw Error(`${(0,t.GQ)(d.title)} 章节任务未就绪:${aQ.task.issues.map(a=>a.message).join(";")}`);let aR=[ax,cV(aQ.task)].filter(Boolean).join("\n\n"),aS={total:aH.length,satisfied:aH.filter(a=>"satisfied"===a.status).length,missing:aH.filter(a=>"missing"===a.status).length,lowConfidence:aH.filter(a=>"low_confidence"===a.status).length};for(let a of aI)a8.push(`${d.title}:事实需求未确认 ${a}`);let aT=ag?.chapterRules.find(a=>a.id===d.id||a.title===d.title),aV=bP.chapterTargets.get(d.id)||1200,a$=d.sections?.filter(Boolean).length||0,a2=/[、,,;;]/u.test(d.title),ba=function(a){let{budgetTarget:b,sectionCount:c,title:d,longformStrict:e}=a,f=/[、,,;;]/u.test(d),g=/工期|进度|质量|安全|危大|资源|人材机|保障|措施|重难点/u.test(d),h=/概况|结语|附录|说明/u.test(d),i=c>0?c*(f?720:g?900:780):g?5200:3600,j=e?h?2600:g?5200:3600:Math.min(1200,b),k=e?Math.min(Math.max(4200,b),c>=30?9800:f?8800:g?9200:7200):b,l=Math.max(j,Math.min(b,i,k));return{budgetTarget:b,roundTarget:l,structureTarget:i,maxWords:Math.ceil(l*(a.longformStrict?1.12:1.18)),label:`章节预算约 ${b} 字,本轮生成约 ${l} 字,结构目标约 ${i} 字`}}({budgetTarget:aV,sectionCount:a$,title:d.title,longformStrict:bP.longformStrict}),be=Math.ceil(ba.maxWords*(bP.maxChars?1.05:1)),bg=bP.targetChars?Math.min(1800,Math.max(600,Math.floor(.45*ba.roundTarget))):1200,bm=ba.roundTarget,bo=Math.max(Math.min(aT?.minWords||0,bm),Math.min(ag?.dynamicChapterRule.minWordsPerChapter||0,bm),Math.floor(.68*bm),bg),bq=bj(bo,bm),bs=a$>0?Math.min(bm,Math.max(1800,ba.structureTarget)):bm,bv=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),bz=process.env.DOCUMENT_SECTION_FIRST_GENERATION,bB=void 0!==bz&&0===Number(bz),bC=void 0!==bz&&0!==Number(bz),bD=bm>=6e3&&a$>=4&&a$<=bv&&!a2,bG=!bB&&a$>=2&&(a$>bv||a2||bP.longformStrict&&a$>=6),bH=!bB&&!bG&&a$>=2&&a$<=bv&&(bC||bD||bP.longformStrict);if(o)b=cs(o,d),g=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ap.primaryPromptId,status:"success",message:`${(0,t.GQ)(d.title)} 已复用已有章节正文:当前 ${(0,w.V7)(b)} 字,跳过 Writer,直接进入 Reviewer/Repairer/Final Gate`,details:[`有效证据:${ac.length} 条`,`事实需求:${aS.satisfied}/${aS.total} 已满足,缺失 ${aS.missing},低置信 ${aS.lowConfidence}`,"来源:resumeChapters/checkpointChapters"],progress:{current:h+1,total:bF.length,label:"复用章节"}},{subtitle:(0,t.GQ)(d.title),order:h}),O[j]=g,H(y);else{O[j]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ap.primaryPromptId,status:"running",message:bG?`${(0,t.GQ)(d.title)} 正在按语义小节组并发成稿`:bH?`${(0,t.GQ)(d.title)} 正在按小节并发成稿`:`${(0,t.GQ)(d.title)} 正在整章一次成稿`,details:bG||bH?[...az,`有效证据:${ac.length} 条`,`事实需求:${aS.satisfied}/${aS.total} 已满足,缺失 ${aS.missing},低置信 ${aS.lowConfidence}`,ba.label,`生成上限约 ${be} 字`,`规划小节:${d.sections?.length||0} 个`,bG?"小节较多,按工期/质量/安全/资源等语义组并发生成,避免整章长调用低产":"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...az,`有效证据:${ac.length} 条`,`事实需求:${aS.satisfied}/${aS.total} 已满足,缺失 ${aS.missing},低置信 ${aS.lowConfidence}`,ba.label,`生成上限约 ${be} 字`,`规划小节:${a$} 个`,"首次生成必须覆盖章节结构、小节和事实,篇幅目标仅作为规划参考"],progress:{current:h+1,total:bF.length,label:bG?"小节分组":bH?"小节并发":"整章成稿"}},{subtitle:(0,t.GQ)(d.title),order:h}),H();let e=bG?await J(()=>aA(bS,`chapter-section-group-draft:${d.id}`,()=>bh({template:p,chapter:d,evidence:ac,missingFacts:ae,promptTexts:aR,projectContext:bI,requirement:a.requirement,roleContext:ao,targetWords:bs,maxWords:be,forbidDrawingImages:!1,factCoverageContext:aP,sectionEvidenceProvider:b=>cD({manager:q,projectRoot:c,chapter:d,sectionTitle:b,scopedFilePaths:I,fileRoleByPath:aX,fileProcessingByPath:aY,signal:a.signal}),diagnostics:bS,signal:a.signal}))):bH?await J(()=>aA(bS,`chapter-section-draft:${d.id}`,()=>bi({template:p,chapter:d,evidence:ac,missingFacts:ae,promptTexts:aR,projectContext:bI,requirement:a.requirement,roleContext:ao,targetWords:bs,maxWords:be,forbidDrawingImages:!1,factCoverageContext:aP,projectRoot:c,modelName:(0,ad.$y)()?.model.name,materialContextHash:(0,M.c6)({materialFilePaths:R,promptTexts:ax}),allowPartialResult:!1,sectionEvidenceProvider:b=>cD({manager:q,projectRoot:c,chapter:d,sectionTitle:b,scopedFilePaths:I,fileRoleByPath:aX,fileProcessingByPath:aY,signal:a.signal}),diagnostics:bS,signal:a.signal}))):await J(()=>aA(bS,`chapter-draft:${d.id}`,()=>aU(p,d,ac,ae,aR,bI,a.requirement,ao,{forbidDrawingImages:!1,minWords:bo,targetWords:bm,maxWords:be,maxTokens:bq,factCoverageContext:aP,signal:a.signal})));if(!e&&bG&&(O[j]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ap.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} 小节组未返回有效正文,正在切换为逐小节备用成稿`,details:[`LLM 最近错误:${bS.llm.lastError||"小节组空响应或超时"}`,`有效证据:${ac.length} 条`],progress:{current:h+1,total:bF.length,label:"备用成稿"}},{subtitle:(0,t.GQ)(d.title),order:h}),H(y),e=await J(()=>aA(bS,`chapter-section-fallback:${d.id}`,()=>bi({template:p,chapter:d,evidence:ac,missingFacts:ae,promptTexts:aR,projectContext:bI,requirement:a.requirement,roleContext:ao,targetWords:bs,maxWords:be,forbidDrawingImages:!1,factCoverageContext:aP,projectRoot:c,modelName:(0,ad.$y)()?.model.name,materialContextHash:(0,M.c6)({materialFilePaths:R,promptTexts:ax,fallback:"section-parallel"}),allowPartialResult:!1,sectionEvidenceProvider:b=>cD({manager:q,projectRoot:c,chapter:d,sectionTitle:b,scopedFilePaths:I,fileRoleByPath:aX,fileProcessingByPath:aY,signal:a.signal}),diagnostics:bS,signal:a.signal}).catch(a=>{bS.llm.lastError=a instanceof Error?a.message:String(a)})))),!e&&(bG||bH)&&(O[j]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ap.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} 小节成稿未完成,正在切换为整章紧凑备用成稿`,details:[`LLM 最近错误:${bS.llm.lastError||"小节成稿空响应或超时"}`,`有效证据:${ac.length} 条`],progress:{current:h+1,total:bF.length,label:"整章备用"}},{subtitle:(0,t.GQ)(d.title),order:h}),H(y),e=await J(()=>aA(bS,`chapter-compact-fallback:${d.id}`,()=>aU(p,d,ac,ae,aR,bI,a.requirement,ao,{forbidDrawingImages:!1,minWords:Math.floor(.65*bo),targetWords:Math.floor(.75*bs),maxWords:be,maxTokens:bq,factCoverageContext:aP,signal:a.signal}).catch(a=>{bS.llm.lastError=a instanceof Error?a.message:String(a)})))),!e&&ac.length>0&&(O[j]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ap.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} LLM 多路径未返回有效正文,正在用当前项目证据生成可审查草稿`,details:[`LLM 最近错误:${bS.llm.lastError||"空响应或超时"}`,`证据条数:${ac.length}`],progress:{current:h+1,total:bF.length,label:"证据草稿"}},{subtitle:(0,t.GQ)(d.title),order:h}),H(y),e=function(a){let b=(a.chapter.sections?.length?a.chapter.sections:["资料依据与施工对象","主要控制措施","检查验收与闭环管理"]).flatMap(b=>{let c=(function(a,b,c){let d=[a,b.title,...a.split(/[、,,;;\s]+/u)].filter(a=>a.length>=2),e=c.map(a=>{let b=(0,s.eE)(a.content||"").replace(/\s+/gu," ").trim(),c=d.reduce((c,d)=>c+(b.includes(d)||(a.sectionTitle||"").includes(d)?1:0),0)+a.score;return{content:b,score:c}}).filter(a=>a.content.length>=30).sort((a,b)=>b.score-a.score),f=[];for(let a of e.slice(0,8)){for(let b of a.content.split(/[。;;\n]/u).map(a=>a.trim()).filter(Boolean))if(!(b.length<18||b.length>180||/报价|单价|税率|利润|后台|知识库|提示词|OCR|文件路径/u.test(b))&&!(/^(?:本节围绕|本小节依据|项目实施时应|实施过程中应|当前绑定资料|当前项目绑定资料)/u.test(b)||/确保各项措施与本工程实施条件相匹配/u.test(b)||/形成责任明确、过程可控、资料完整的管理闭环/u.test(b)||/确保现场管理要求与施工进度、资源组织和验收节点同步推进/u.test(b)||/^管理闭环[。;;]?$/u.test(b)||/资料参数行摘要|房建市政施工评定分离招标示范文本|我方已仔细研究|中标通知书|签订合同|履约保证金|投标函|投标人须知|招标公告|开标|评标|保证金|电子交易系统|公共资源交易|监管部门|专用账户监管协议书|资金托管专用账号/u.test(b)||/^#+\s*/u.test(b)||/^(?\d+)/u.test(b))&&(f.some(a=>a.includes(b)||b.includes(a))||f.push(b),f.length>=10))break;if(f.length>=10)break}return f})(b,a.chapter,a.evidence).slice(0,8);return 0===c.length?[]:[[`### ${b}`,"",...c.map(a=>`- ${a}。`)].join("\n")]});return 0===b.length?"":(0,v.kT)((0,v.FD)(`## ${a.chapter.title}
|
|
119
|
-
|
|
120
|
-
${b.join("\n\n")}`,a.forbidDrawingImages))}({chapter:d,evidence:ac,targetWords:bs,forbidDrawingImages:!1})),(0,M.Te)(a.signal),!e){let a=`${(0,t.GQ)(d.title)} 大模型未返回有效正文,已阻断生成`;throw O[j]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ap.primaryPromptId,status:"failed",message:a,details:[`LLM 最近错误:${bS.llm.lastError||"空响应或超时"}`,`证据条数:${ac.length}`],progress:{current:h+1,total:bF.length,label:"章节阻断"}},{subtitle:(0,t.GQ)(d.title),order:h}),H(y),Error(a)}let f=e;if(!f.trim())throw Error(`${(0,t.GQ)(d.title)} 首次生成失败,未获得可用于定稿的正文`);b=cs(f,d)}let bJ=bf({chapter:d,content:b,evidence:ac}),bK=(0,w.V7)(b),bL=(0,v.r4)(b),bM=bL.length>0?bL:d.sections||[],bN=(0,x.qK)(b,[{title:d.title,content:b,sections:bM}]).map(a=>a.message),bO=bJ.slice(0,6).map(a=>`小节事实密度需优化:${a}`),bR=[...bN,...bO],bT=function(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))?"failed":"success"}(bK,0,bR);g=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ap.primaryPromptId,status:bT,message:(0,ay.AQ)(`${(0,t.GQ)(d.title)} 已由大模型成稿:当前 ${bK} 字;章节预算约 ${ba.budgetTarget} 字,本轮目标约 ${ba.roundTarget} 字${bR.length?`;待优化:${bR.slice(0,8).join("、")}`:""}`,i),details:[`本轮完成率:${Math.round(bK/Math.max(1,ba.roundTarget)*100)}%`,`结构目标约 ${ba.structureTarget} 字`,...az,`二级小节:${bM.length} 个`,`扩写轮次:0`],progress:{current:h+1,total:bF.length,label:bR.length?"章节已生成":"章节达标"}},{subtitle:(0,t.GQ)(d.title),order:h}),bc[h]=g;let bU={id:d.id,title:d.title,content:b,evidence:ac,missingFacts:ae,sections:bM,tablePlans:d.tablePlans||[]},bV=cZ({task:aQ.task,draft:bU,context:bw});bw.reviewResults={...bw.reviewResults||{},[d.id]:bV};let bW=bV.issues.filter(a=>"blocker"===a.severity||"error"===a.level),bX=bW.length>0&&(bV.repairable||bW.some(a=>/Writer 未完成/u.test(a.message)));bw.nodes.push({id:`chapter-reviewer-${d.id}`,type:"chapter_reviewer",status:bW.length?bX?"running":"failed":"completed",startedAt:Date.now(),completedAt:Date.now(),outputSummary:bV.issues.length?`${bV.issues.length} 个 Reviewer 提示`:"Reviewer 通过",metrics:{supportedFacts:bV.supportedFacts},issues:bV.issues}),(0,ay.fx)(O,(0,ay.X5)({type:"llm_review",roleId:`agent-reviewer-${d.id}`,status:bW.length?bX?"running":"failed":"success",message:bW.length?`${(0,t.GQ)(d.title)} Reviewer 发现 ${bW.length} 个阻断问题,等待 Repairer 修复`:`${(0,t.GQ)(d.title)} Reviewer 通过${bV.issues.length?`(${bV.issues.length} 个优化提示)`:""}`,details:bV.issues.map(a=>a.message)},{subtitle:"Agent Reviewer",order:O.length})),H(y);let bY=bW.some(a=>/Writer 未完成/u.test(a.message));if(bW.length>0&&(bV.repairable||bY)){let b={...bV,issues:bW},e=bV.repairable?(m={task:aQ.task,review:b}).review.repairable?["【Agent 定向修复任务】",`章节:${m.task.title}`,"只修复下列问题,不重写无关内容;如果问题是小节正文不足,必须按原小节标题完整补足该小节正式正文,每个小节不得少于任务最小深度:",...m.review.issues.map(a=>`- ${a.message};${a.suggestion||""}`),cV(m.task)].join("\n"):"":["【Agent 定向修复任务】",`章节:${aQ.task.title}`,"Reviewer 发现 Writer 未完成小节。必须基于对应小节事实卡和证据生成正式正文,替换并删除 WRITER_MISSING_SECTION 标记;不得跳过这些小节,不得保留占位说明。",...bW.map(a=>`- ${a.message};${a.suggestion||""}`)].join("\n"),f=O.length,g=bW.filter(a=>/Writer 未完成/u.test(a.message)),h=bW.filter(a=>/正文不足,未达到任务最小深度/u.test(a.message)),i=[...g,...h.filter(a=>!g.some(b=>b.message===a.message))],j=[];for(let[b,g]of((0,ay.fx)(O,(0,ay.X5)({type:"llm_review",roleId:`agent-repairer-${d.id}`,status:"running",message:`${(0,t.GQ)(d.title)} Reviewer 发现 ${bW.length} 个阻断问题,正在定向修复`,details:bW.map(a=>a.message)},{subtitle:"Agent Repairer",order:f})),H(y),i.entries())){let h=g.message.replace(/\s*Writer 未完成.*$/u,"").replace(/\s*正文不足,未达到任务最小深度.*$/u,"").trim(),k=/Writer 未完成/u.test(g.message)?"缺失小节":"深度不足小节";(0,ay.fx)(O,(0,ay.X5)({type:"llm_review",roleId:`agent-repairer-${d.id}`,status:"running",message:`${(0,t.GQ)(d.title)} 正在补写${k} ${b+1}/${i.length}:${h}`,details:[...j,`当前:${h}`]},{subtitle:"Agent Repairer",order:f})),H(y);let l=aQ.task.sections.find(a=>a.title===h),m=(a,b,c)=>{let d=a=>a.replace(/[\u00a0\u3000]/gu," ").replace(/^\d+(?:\.\d+)*\s+/u,"").trim(),e=a=>d(a).replace(/施工(?=方案|流程|方法)/gu,"").replace(/专项(?=方案)/gu,"").replace(/\s/gu,""),f=a=>a.trim().replace(/^#{2,6}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]+\n+/u,"").trim(),g=a.split("\n"),h=0;for(let i=0;i<g.length;i+=1){let j=g[i],k=h;h+=j.length+1;let l=/^(#{3,4})\s+(.+)$/u.exec(j.trim());if(!l)continue;let m=d(l[2]),n=e(m),o=e(b);if(m!==b&&!m.includes(b)&&!b.includes(m)&&n!==o&&!n.includes(o)&&!o.includes(n))continue;let p=g.length;for(let a=i+1;a<g.length;a+=1)if(/^#{2,4}\s+/u.test(g[a].trim())){p=a;break}let q=p<g.length?g.slice(0,p).join("\n").length:a.length,r=f(c);return`${a.slice(0,k)}${j.trim()}
|
|
121
|
-
|
|
122
|
-
${r}${a.slice(q)}`}let i=aQ.task.sections.findIndex(a=>e(a.title)===e(b));if(i>=0){let d=aQ.task.sections.slice(i+1).map(a=>e(a.title));for(let h=0;h<g.length;h+=1){let i=/^(#{3,4})\s+(.+)$/u.exec(g[h].trim());if(!i||!d.includes(e(i[2])))continue;let j=g.slice(0,h).join("\n").length+ +(h>0),k=f(c);return k?`${a.slice(0,j).trimEnd()}
|
|
123
|
-
|
|
124
|
-
### ${b}
|
|
125
|
-
|
|
126
|
-
${k}
|
|
127
|
-
|
|
128
|
-
${a.slice(j).trimStart()}`:a}}let j=f(c);return j?`${a.trimEnd()}
|
|
129
|
-
|
|
130
|
-
### ${b}
|
|
131
|
-
|
|
132
|
-
${j}`:a},n=by(await cD({manager:q,projectRoot:c,chapter:d,sectionTitle:h,scopedFilePaths:I,fileRoleByPath:aX,fileProcessingByPath:aY,signal:a.signal}).catch(()=>[]),a0);bA(n.length?n:ac,a0,`repair:${d.id}:${h}`);let o=Math.max(l?.minChars||0,/项目主要施工内容|主要分部分项工程施工方案|主要施工方法/u.test(h)?2200:/项目特点.*重点.*难点|重点.*难点.*分析/u.test(h)?1800:/原材料进场复试|见证取样|危大工程专项施工方案审批流程/u.test(h)?1200:760),r=/正文不足,未达到任务最小深度/u.test(g.message);bS.llm.lastError=void 0;let s=await J(()=>aA(bS,`agent-repairer-section:${d.id}:${h}`,()=>a4({template:p,chapter:d,sectionTitle:h,evidence:n.length?n:ac,missingFacts:ae,promptTexts:[aR,e].filter(Boolean).join("\n\n"),projectContext:bI,requirement:a.requirement,roleContext:ao,targetWords:o,maxWords:1.25*o,forbidDrawingImages:!1,factCoverageContext:aP,qualityFeedback:`Repairer 定向补写“${h}”。必须输出该小节正式正文并彻底删除 WRITER_MISSING_SECTION 标记。`,diagnostics:bS,signal:a.signal})));if((!s||s.includes("WRITER_MISSING_SECTION"))&&(bS.llm.lastError=void 0,(0,ay.fx)(O,(0,ay.X5)({type:"llm_review",roleId:`agent-repairer-${d.id}`,status:"running",message:`${(0,t.GQ)(d.title)} 正在二次补写${k} ${b+1}/${i.length}:${h}`,details:[...j,`重试:${h}`]},{subtitle:"Agent Repairer",order:f})),H(y),s=await J(()=>aA(bS,`agent-repairer-section-retry:${d.id}:${h}`,()=>a4({template:p,chapter:d,sectionTitle:h,evidence:n.length?n:ac,missingFacts:ae,promptTexts:e,projectContext:bI,requirement:a.requirement,roleContext:ao,targetWords:o,maxWords:1.15*o,forbidDrawingImages:!1,factCoverageContext:aP,qualityFeedback:`第二次定向补写“${h}”:只写该小节正式正文,不写解释,不保留 WRITER_MISSING_SECTION。`,diagnostics:bS,signal:a.signal})))),s&&!s.includes("WRITER_MISSING_SECTION")){let a=/^#{3,4}\s+/u.test(s.trim())?s.trim():`### ${h}
|
|
133
|
-
|
|
134
|
-
${s.trim()}`,b=(0,w.V7)(a),c=!r||b>=Math.floor(.85*o),d=c?m(bU.content,h,a):bU.content,e=d!==bU.content;e&&(bU={...bU,content:d}),j.push(e?`成功:${h}(${b}字,证据 ${n.length||ac.length} 条)`:`失败:${h}(${c?"未定位到原小节块":`补写不足 ${b}/${o} 字`})`)}else j.push(`失败:${h}(${!s?bS.llm.lastError||"空响应":"仍包含 WRITER_MISSING_SECTION"})`);(0,ay.fx)(O,(0,ay.X5)({type:"llm_review",roleId:`agent-repairer-${d.id}`,status:"running",message:`${(0,t.GQ)(d.title)} 已补写${k} ${b+1}/${i.length}`,details:j},{subtitle:"Agent Repairer",order:f})),H(y)}let k={content:bU.content,appliedCount:0};bW.some(a=>!/Writer 未完成|正文不足,未达到任务最小深度/u.test(a.message))&&(k=await J(()=>aA(bS,`agent-repairer:${d.id}`,()=>aB({template:p,chapter:{id:d.id,title:d.title,content:bU.content,evidence:ac,missingFacts:ae,sections:bM},issues:bW.map(a=>`${a.message};${a.suggestion||""}`),promptTexts:[aR,e].filter(Boolean).join("\n\n"),requirement:a.requirement,forbidDrawingImages:!1,diagnostics:bS,signal:a.signal})))),bU={...bU,content:cs(k.content||bU.content,d)},bV=cZ({task:aQ.task,draft:bU,context:bw}),bw.reviewResults={...bw.reviewResults||{},[d.id]:bV};let l=bV.issues.some(a=>"blocker"===a.severity||"error"===a.level);bw.nodes.push({id:`chapter-repairer-${d.id}`,type:"chapter_repairer",status:l?"failed":"completed",startedAt:Date.now(),completedAt:Date.now(),outputSummary:bV.issues.length?`修复后仍有 ${bV.issues.length} 个问题`:"定向修复通过",metrics:{supportedFacts:bV.supportedFacts},issues:bV.issues}),(0,ay.fx)(O,(0,ay.X5)({type:"llm_review",roleId:`agent-reviewer-${d.id}`,status:l?"failed":"success",message:l?`${(0,t.GQ)(d.title)} Reviewer 复审仍有 ${bV.issues.length} 个阻断问题`:`${(0,t.GQ)(d.title)} Reviewer 复审通过`,details:bV.issues.map(a=>a.message)},{subtitle:"Agent Reviewer",order:f-1})),(0,ay.fx)(O,(0,ay.X5)({type:"llm_review",roleId:`agent-repairer-${d.id}`,status:l?"failed":"success",message:bV.issues.length?`${(0,t.GQ)(d.title)} 定向修复后仍有 ${bV.issues.length} 个问题`:`${(0,t.GQ)(d.title)} 定向修复通过`,details:[...j,...bV.issues.map(a=>`剩余:${a.message}`)]},{subtitle:"Agent Repairer",order:f})),H(y)}bV.issues.some(a=>"blocker"===a.severity||"error"===a.level)&&a9.push(`${(0,t.GQ)(d.title)} Reviewer 未通过:${bV.issues.map(a=>a.message).join(";")}`),bb[h]=bU,y=bb.filter(a=>!!a),H(y),bS.quality.blockingCount+=bV.issues.filter(a=>"error"===a.level).length,bS.quality.importantCount+=bV.issues.filter(a=>"warning"===a.level).length}catch(c){if(a.signal?.aborted)throw c;console.error(`[gen] chapter ${d.title} failed:`,c);let b=`${d.title}:${c instanceof Error?c.message:"生成失败"}`;a9.push(b),g=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,t.GQ)(d.title)} 生成失败:${b}`},{subtitle:(0,t.GQ)(d.title),order:h}),bc[h]=g}g&&(O[j]=g),H(y)}))}let b0=bb.filter(a=>!!a);return ba.push(...bc.filter(a=>!!a)),cK({chapterDrafts:b0,chapterDraftsByOrder:bb,chapterGenerationStagesByOrder:bc,chapterGenerationStages:ba,effectiveChapters:bF,template:p,allEvidence:a5,projectMaterialScope:a0,progressStages:O,documentSpec:ag,projectMaterialProfile:T,projectMaterialSummary:ab,domainProfile:ah,documentBudget:bP,promptTexts:aJ,reviewPromptTexts:aV,input:a,generationStrategy:bR,generationDiagnostics:bS,promptBindings:Q,promptDocumentRules:aG,projectUnderstanding:U,projectContext:bI,projectRoot:c,projectId:o,readiness:aj,factExtractionPromptTexts:aN,hasExplicitOutline:Z,missingItems:a8,retrievalCoverageReports:a6,failedChapterMessages:a9,webResearchReport:a7,indexHealth:a$,promptPlan:P,agentWorkflow:bw,emitProgress:H,withProgressHeartbeat:J})}async function c1(a){let b=(0,d.QJ)(a.templateId);if(!b)throw Error("Document template not found");let c=b.chapters.find(b=>b.id===a.chapterId);if(!c)throw Error("Document chapter not found");let f=e.resolve(a.projectRoot||(0,g.aY)());if(!f)throw Error("No knowledge base project found");let h=(0,g.Qh)(),i=(0,aE.Hh)(f,b,{requirement:a.requirement}),j=(0,aE.W9)(f,b,{requirement:a.requirement}),{kindByPath:k,processingByPath:l}=(0,aE.Hz)(j),m=new Set(i),n=bv(f,i),o=new Map([...k.entries()].map(([a,b])=>[a,(0,aE._W)(b)])),p=new Map([...l.entries()].map(([a,b])=>[a,b])),q=cG(await h.getProject(f),[...m],a.maxEvidencePerChapter),r=[],v=[...m].filter(Boolean).sort(),w=cA(c,c.queries,[]),x=cB(c,[]);for(let a of w.slice(0,x)){let b=await h.search(f,a,{scope:"project",filters:{filePaths:v},limit:Math.min(q,12),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});r.push(...b.results.filter(a=>aC(f,a.filePath,m)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:o.get(a.filePath),processingType:p.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let y=cz(c,by(r.filter(a=>aC(f,a.filePath,m)),n),{maxItems:cC(q,c),maxChars:16e3,preservePinned:!0});bA(y,n,`regenerate:${c.id}`);let z=a.currentMarkdown||"",A=new Set(a.existingFacts??[]),B=c.requiredFacts.filter(a=>!A.has(a)&&!y.some(b=>(0,u.Lk)(b,a)));if(0===y.length)throw Error(`${(0,t.GQ)(c.title)} 缺少可支撑正文的项目资料证据`);let C=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",z?`> 当前文档上下文摘要:${z.replace(/\s+/gu," ")}`:"",`本章依据已锁定项目资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`,"","### 资料依据",...y.map(s.OF)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:C,evidence:y,missingFacts:B}}}};
|