@customize-agent/server 4.1.42 → 4.1.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/1985.js +3 -3
- package/.next/server/chunks/5284.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/api/kb/files/reindex.js +1 -1
- package/.next/server/pages/api/kb/intelligence.js +1 -0
- package/.next/server/pages/api/kb/intelligence.js.nft.json +1 -0
- package/.next/server/pages/api/kb/reindex.js +1 -1
- 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 +32 -31
- package/package.json +1 -1
- /package/.next/static/{_h7_gLVrsB3kJ8QuYvZwi → zKYOhppFaW7p-t2KdbhqQ}/_buildManifest.js +0 -0
- /package/.next/static/{_h7_gLVrsB3kJ8QuYvZwi → zKYOhppFaW7p-t2KdbhqQ}/_ssgManifest.js +0 -0
package/.next/BUILD_ID
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
zKYOhppFaW7p-t2KdbhqQ
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"ampDevFiles": [],
|
|
7
7
|
"lowPriorityFiles": [
|
|
8
|
-
"static/
|
|
9
|
-
"static/
|
|
8
|
+
"static/zKYOhppFaW7p-t2KdbhqQ/_buildManifest.js",
|
|
9
|
+
"static/zKYOhppFaW7p-t2KdbhqQ/_ssgManifest.js"
|
|
10
10
|
],
|
|
11
11
|
"rootMainFiles": [],
|
|
12
12
|
"rootMainFilesTree": {},
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"routes": {},
|
|
4
4
|
"dynamicRoutes": {},
|
|
5
5
|
"preview": {
|
|
6
|
-
"previewModeId": "
|
|
7
|
-
"previewModeSigningKey": "
|
|
8
|
-
"previewModeEncryptionKey": "
|
|
6
|
+
"previewModeId": "aca9d52a06168f695e974d399a6d965d",
|
|
7
|
+
"previewModeSigningKey": "b39d80c2157e7fdfdd7b8c47b6cf67b5fd770dd26c326ed4861c11c7a90c16e9",
|
|
8
|
+
"previewModeEncryptionKey": "8474f369f4b7abf432b46967475002e70864ccd6ca6fc5fa88003f1217b33446"
|
|
9
9
|
},
|
|
10
10
|
"notFoundRoutes": []
|
|
11
11
|
}
|
|
@@ -71,7 +71,7 @@ ${m}`,a.forbidDrawingImages))}async function bd(a){let b=aV(a.chapter,a.targetWo
|
|
|
71
71
|
|
|
72
72
|
${k.join("\n\n")}`,a.forbidDrawingImages))}function be(a,b){return Math.min(24e3,Math.max(5e3,Math.ceil(1.45*(b||a))))}async function bf(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 bg(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 bh=/安全|文明|质量|绿色施工|环保|扬尘|消防|应急|危大|风险|规范|标准|管理要求|施工工艺|技术措施|验收/u,bi=/项目名称|工程名称|建设地点|建设单位|招标人|发包人|建设规模|招标范围|合同工期|计划工期|质量标准|危大工程清单|工程量|材料规格|设备型号|图纸参数|报价|单价|利润|税率|合同金额|联系方式|品牌/u,bj=/报价|单价|合价|金额|利润|税率|增值税|招标控制价|最高投标限价|中标价|合同价|暂列金额/u,bk=/联网增强|联网检索|网页资料|搜索结果|根据网页|互联网资料|在线资料|浏览器|搜索引擎/u,bl=["项目名称","工程名称","建设地点","建设单位","招标人","发包人","建设规模","招标范围","合同工期","计划工期","工程量","报价","单价"];function bm(a){return a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,'"').replace(/'/gu,"'").replace(/<[^>]+>/gu,"").replace(/\s+/gu," ").trim()}async function bn(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=bm(a[1]||""),c=bm(a[2]||""),d=bm(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||bi.test(b)||bj.test(b)||bk.test(b)||d.some(a=>a&&b.includes(a)))&&(0===c.length||c.some(b=>a.url.includes(b)))}).slice(0,b):[]}async function bo(a){if(!a.config.enabled||!function(a,b){let c=`${a} ${b.join(" ")}`;return!(!bh.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(bi,"")} 公开规范 通用要求`.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 bn(e,a.config.maxResultsPerQuery,a.config.trustedDomains,a.runtimeRules.forbiddenTerms||[],a.signal))){let e=function(a,b){let c=a;for(let a of bl)c=c.replace(RegExp(`${a}[^。;;
|
|
73
73
|
]{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(bj,"").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}
|
|
74
|
-
${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 bp(a){return e.resolve(a).replace(/\\/gu,"/").toLowerCase()}function bq(a,b=[]){return{projectId:a,allowedFilePaths:[...new Set(b.filter(Boolean).map(bp))]}}function br(a){return!!a?.allowedFilePaths.length}function bs(a,b){if(!br(b))return!0;if(!a)return!1;let c=bp(a);return b.allowedFilePaths.includes(c)}function bt(a,b){return a.filter(a=>bs(a.filePath,b))}function bu(a,b){return a.filter(a=>bs(a.sourceFile,b))}function bv(a,b,c){if(!br(b))return;let d=a.filter(a=>!bs(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 bw(a){return/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|\d{1,2}\.\d{1,2}/u.test(a)}function bx(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/[\s,。,.;;::《》“”‘’()()_-]+/gu,"").toLowerCase()}function by(a,b){let c=bx(b);if(!c||c.length<4)return!0;let d=bx(a);return!!d.includes(c)||c.length>=12&&d.includes(c.slice(0,Math.max(8,Math.floor(.72*c.length))))}function bz(a){let b=[],c=a.markdown||"";for(let e of a.spec.factFields.filter(a=>a.required)){var d;!((d=e.name).length<4||bw(d))&&/\d|GB|JGJ|C\d|HRB|DN|mm|MPa|kPa|工期|质量|安全|项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数/u.test(d)&&!by(c,e.name)&&b.push({level:"info",message:`正文可能未显式覆盖“${e.name}”`,suggestion:"建议检查对应章节是否已自然表达该事实。"})}let e=a.summary.facts.projectName;!e||"当前知识库项目"===e||bw(e)||by(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 bA(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 bB(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/\s+/gu,"").replace(/[,。,.;;::《》“”‘’()()_-]/gu,"").toLowerCase()}function bC(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=bB(d&&/工期|总工期|合同工期|计划工期|施工周期/u.test(c)?d:c);return!e||e.length>80?"":e}function bD(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)&&bC(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=bC(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=bB(a.markdown);[e,...a.summary.fingerprint.projectNames].flatMap(a=>[a,a.replace(/^\d+(?:\.\d+)?[^\u4e00-\u9fa5]*/u,""),a.replace(/\([^)]*\)|([^)]*)/gu,"")]).map(a=>bB(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 bE(a){return a.replace(/[\s,,.。::;;||()()《》<>【】"“”'‘’]/gu,"").toLowerCase()}function bF(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=bE(a),d=bE(b);return!!(!d||d.length<2||c.includes(d))||(b.match(/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年|万元|元|平方米|㎡|m²|立方米|m³|米|m|mm|cm|台|套|人|项|%|MPa|kPa)?/giu)||[]).some(a=>bE(a).length>=2&&c.includes(bE(a)))}(a,b)?"unplaced":"used",confidence:e.confidence}))}return d}function bG(a,b={}){let c=a.filter(a=>"unplaced"===a.status
|
|
74
|
+
${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 bp(a){return e.resolve(a).replace(/\\/gu,"/").toLowerCase()}function bq(a,b=[]){return{projectId:a,allowedFilePaths:[...new Set(b.filter(Boolean).map(bp))]}}function br(a){return!!a?.allowedFilePaths.length}function bs(a,b){if(!br(b))return!0;if(!a)return!1;let c=bp(a);return b.allowedFilePaths.includes(c)}function bt(a,b){return a.filter(a=>bs(a.filePath,b))}function bu(a,b){return a.filter(a=>bs(a.sourceFile,b))}function bv(a,b,c){if(!br(b))return;let d=a.filter(a=>!bs(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 bw(a){return/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|\d{1,2}\.\d{1,2}/u.test(a)}function bx(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/[\s,。,.;;::《》“”‘’()()_-]+/gu,"").toLowerCase()}function by(a,b){let c=bx(b);if(!c||c.length<4)return!0;let d=bx(a);return!!d.includes(c)||c.length>=12&&d.includes(c.slice(0,Math.max(8,Math.floor(.72*c.length))))}function bz(a){let b=[],c=a.markdown||"";for(let e of a.spec.factFields.filter(a=>a.required)){var d;!((d=e.name).length<4||bw(d))&&/\d|GB|JGJ|C\d|HRB|DN|mm|MPa|kPa|工期|质量|安全|项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数/u.test(d)&&!by(c,e.name)&&b.push({level:"info",message:`正文可能未显式覆盖“${e.name}”`,suggestion:"建议检查对应章节是否已自然表达该事实。"})}let e=a.summary.facts.projectName;!e||"当前知识库项目"===e||bw(e)||by(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 bA(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 bB(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/\s+/gu,"").replace(/[,。,.;;::《》“”‘’()()_-]/gu,"").toLowerCase()}function bC(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=bB(d&&/工期|总工期|合同工期|计划工期|施工周期/u.test(c)?d:c);return!e||e.length>80?"":e}function bD(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)&&bC(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=bC(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=bB(a.markdown);[e,...a.summary.fingerprint.projectNames].flatMap(a=>[a,a.replace(/^\d+(?:\.\d+)?[^\u4e00-\u9fa5]*/u,""),a.replace(/\([^)]*\)|([^)]*)/gu,"")]).map(a=>bB(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 bE(a){return a.replace(/[\s,,.。::;;||()()《》<>【】"“”'‘’]/gu,"").toLowerCase()}function bF(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=bE(a),d=bE(b);return!!(!d||d.length<2||c.includes(d))||(b.match(/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年|万元|元|平方米|㎡|m²|立方米|m³|米|m|mm|cm|台|套|人|项|%|MPa|kPa)?/giu)||[]).some(a=>bE(a).length>=2&&c.includes(bE(a)))}(a,b)?"unplaced":"used",confidence:e.confidence}))}return d}function bG(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 bH(a){return(0,ac.K3)(`${a.fieldName||a.key} ${(0,M.lG)(a.value)}`)}function bI(a){return[...a.project,...a.schedule,...a.quality,...a.safety,...a.resources,...a.preciseFacts,...a.bills,...a.drawings,...a.rules,...a.specifications].map(bH).join("\n")}function bJ(a,b){let c=[{label:"工期",corpus:bI({...b,project:[],quality:[],safety:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/工期|日历天|合同工期|计划工期/u},{label:"质量",corpus:bI({...b,project:[],schedule:[],safety:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/质量目标|质量标准|验收|复验/u},{label:"安全",corpus:bI({...b,project:[],schedule:[],quality:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/安全|文明|风险|应急/u},{label:"资源",corpus:bI({...b,project:[],schedule:[],quality:[],safety:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/资源|材料|设备|劳动力/u},{label:"工程量",corpus:bI({...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 bK(a){let b=[],c=new Map(a.map(a=>[a.title,a.content])),d=a.map(a=>`${a.title}
|
|
75
75
|
${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 bL=[{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 bM(a){return a.replace(/[\s,。;;::|]/gu,"").trim()}function bN(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(bM).filter(Boolean)}function bO(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),...bJ(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 bL){let e=bN(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=bM(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=bN(b,["project","schedule","resources","quality","safety","preciseFacts"]);if(0===d.length)return c;for(let b of a)/概况|进度|资源|质量|安全|文明|工资|应急/u.test(`${b.title} ${(b.sections||[]).join(" ")}`)&&(d.some(a=>a.length>=3&&b.content.includes(a.slice(0,Math.min(10,a.length))))||c.push({level:"warning",message:`${b.title} 缺少可识别的项目图谱事实支撑`,suggestion:"请至少引用工程名称、工期、工程量、资源、风险、质量安全目标等项目专属事实之一,避免纯模板化。"}));return c}(a.chapters,a.factsModel),...function(a){let b=[];for(let c of a){let a=`${c.title} ${(c.sections||[]).join(" ")} ${c.content}`;for(let d of 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),...bK(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===bK(b).length?2:1,evidence:0===bJ(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=bE(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=bE(i),n=bE(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 bk.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 bP={project:"项目基础事实",schedule:"工期与节点",quality:"质量目标与验收",safety:"安全文明要求",resources:"资源投入依据",quantities:"清单/图纸/工程量事实",rules:"规范规则与验收要求"};function bQ(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(bP[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 bR(a){return a.score>=85?[]:[{level:"warning",message:`系统知识库覆盖确认率偏低:${a.score}%`,suggestion:`${a.remediation} 未确认事实域:${a.unconfirmedDomains.map(a=>bP[a]||a).join("、")||"无"}`}]}function bS(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 bT(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 bU(a){return 0===a.length?100:Math.round(a.reduce((a,b)=>a+b,0)/a.length)}function bV(a){let b=Math.max(0,100-a.issues.reduce((a,b)=>a+("error"===b.level?10:"warning"===b.level?4:1),0)),c=bU(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:bU(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 bW(a){return a.passed?[]:[{level:"warning",message:`交付置信度未达目标:${a.deliveryProbability}% / ${a.target}%`,suggestion:a.actions.join(" ")}]}function bX(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 bY(a){return a.filter(a=>"high"===a.priority).map(a=>({level:"warning",message:`修复策略待执行:${a.title}`,suggestion:a.action}))}function bZ(...a){return a.flat()}var b$=c(87942);let b_=[{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 b0(a){return/^(见|详见|参见|按|以).{0,30}(招标公告|招标文件|投标人须知|前附表|合同|附件|图纸|清单|约定|规定|执行)/u.test(a)||/见招标公告|见投标人须知前附表|详见|按.*执行/u.test(a)}function b1(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 噪声")),b_.some(a=>a.key!==b.key&&a.aliases.some(a=>c.includes(a)))&&(e-=45,d.push("包含其他字段名,疑似字段串位")),b0(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(b0(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 b2(a){return function(a,b=b_){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 b_.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(b1({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=b_.find(a=>a.aliases.some(a=>e.includes(a))||a.label===e);!h||!f||/内容|参数|资料未明确|系统暂未确认|暂未从知识库确认/u.test(f)||c.push(b1({fieldKey:h.key,label:h.label,value:f,sourceType:"generated_markdown",sourceName:g||b},h))}return c}(a.markdown||"")])}function b3(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 b4(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 b5=c(32434);function b6(a,b){return 0>=(0,w.V7)(a.content)?"failed":"completed"}let b7=["项目名称 项目编号 招标人 项目概况与招标范围 建设地点 建设规模 计划工期 质量标准 合同估算价","计划工期 合同工期 总工期 日历天","合同估算价 合同估算价格 投资估算 最高投标限价 招标控制价","质量标准 质量目标 合格","建设地点 建设规模 招标范围"];function b8(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+=2),c}async function b9(a){let b=[],c=new Set(a.scopedFilePaths),d=await Promise.all(b7.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)&&b8(`${a.sectionTitle||""}
|
|
76
76
|
${a.content}`)>0).map(b=>({chapterId:"project-basic",filePath:b.filePath,score:Math.max(b.score,1)+b8(`${b.sectionTitle||""}
|
|
77
77
|
${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=b8(`${e.sectionTitle||""}
|
|
@@ -89,7 +89,7 @@ ${k}`:""}
|
|
|
89
89
|
${g}`:"",h?`【章节/格式提示词】
|
|
90
90
|
${h}`:""].filter(Boolean).join("\n\n"),promptDetails:f}}function cp(a){return ai(a).replace(/[\s,,.。::;;||()()《》<>【】"“”'‘’]/gu,"").split("[").join("").split("]").join("").toLowerCase()}function cq(a){return/工程造价|造价|报价|投标报价|报价明细|综合单价|单价|合价|金额|税率|增值税|利润|预留金|暂列金额|最高投标限价|招标控制价|合同估算价|合同估算价格|投资估算|估算价/u.test(a)}function cr(a){let b=cb((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)||cq(b)||b.length>160?"":b}function cs(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!(cq(`${b}${c}`)||!cr(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=cr(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=cp(a),d=cp(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=>cp(a).length>=2&&c.includes(cp(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 ct(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 cu(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||""}
|
|
91
91
|
${b.filePath}
|
|
92
|
-
${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 cv(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 cw(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 cx(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 cy(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:ct(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 cz(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:ct(`${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 cA(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 cB(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 cC(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 cD(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 cE(a){let b=[{title:"项目特点、重点、难点分析",minChars:1800},{title:"项目主要施工内容",minChars:2200},{title:"主要分部分项工程施工方案",minChars:2200},{title:"主要施工方法",minChars:2200},{title:"危大工程专项施工方案审批流程",minChars:1200},{title:"原材料进场复试与见证取样",minChars:1200}];return a.flatMap(a=>b.flatMap(b=>{let c=((a,b)=>{let c=a.split("\n"),d=c.findIndex(a=>/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u.test(a.trim())&&a.includes(b));if(d<0)return"";let e=/^(#{2,6})\s+/u.exec(c[d].trim())?.[1].length||3,f=c.length;for(let a=d+1;a<c.length;a+=1){let b=/^(#{2,6})\s+/u.exec(c[a].trim());if(b&&b[1].length<=e){f=a;break}}return c.slice(d,f).join("\n")})(a.content,b.title);return!c||(0,w.V7)(c)>=b.minChars?[]:[{level:"error",severity:"blocker",message:`${a.title} ${b.title} 正文不足:当前 ${(0,w.V7)(c)} 字,要求不少于 ${b.minChars} 字`,suggestion:"关键小节必须补足项目数据、重点难点与施工内容对应关系后方可导出。"}]}))}async function cF(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=bt(R.flatMap(a=>a.evidence||[]),l);if(bv(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=bt(k,l);k.splice(0,k.length,...T),bv(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 bg(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,...bt(V,l)),bv(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=bu(af(k,j,n),l),Y=bu(al(k),l),Z=bu(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 _=bu((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(_,bu(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=bZ(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=bZ(ai,cs(aj,_,{maxIssues:20}).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议 Agent Writer 在章节生成阶段优先落位可信基础事实;导出阶段不因未落位的低置信或泛化事实阻断。"})));let ak=Math.max(0,i.length-R.length);ai=bZ(ai,[...ak>0?[{level:"error",severity:"blocker",message:`部分章节生成失败:${ak} 章`,suggestion:I.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。"}]:[]]),ai=bZ(ai,R.flatMap(a=>{let b=i.find(b=>b.id===a.id);if(!b)return[];let c=ba({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:b6(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:cn(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)(cC(cl(aq,_),o))));let ar=b2({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=bZ((0,x.kQ)(n,ai,aa,ap,aq,j.projectBindings||[],z),bz({markdown:aq,spec:n,summary:o}),bD({markdown:aq,facts:_,summary:o,profile:p}),bA(aq,o),cm(aq,_),bO({markdown:aq,chapters:ap,factsModel:aa,template:j,promptBindings:z,promptDocumentRules:A}),cs(aq,[..._,...aa.preciseFacts],{maxIssues:30}).map(a=>({...a,level:"error",severity:"blocker"})),(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,b5.IA)(aq),aq.includes("WRITER_MISSING_SECTION")||aq.includes("Writer 未完成")?[{level:"error",severity:"blocker",category:"structure",owner:"system",message:"最终正文仍包含未完成小节标记",suggestion:"必须重新补写对应小节并删除 WRITER_MISSING_SECTION/Writer 未完成。"}]:[],cE(ap),cD(ap))).map(a=>"error"===a.level?{...a,severity:a.severity||"blocker"}:a);let as=bQ({chapters:ap,templateChapters:i,factsModel:aa,evidence:k}),at=bF(aq,aa),au=bS({chapters:ap,templateChapters:i,factsModel:aa}),av=bV({markdown:aq,chapters:ap,issues:ai=bZ(ai,bR(as),bG(at,{maxIssues:20}),bT(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=bX({issues:ai,qualityReport:av,knowledgeCoverage:as,factTraces:at,chapterCoverage:au});ai=bZ(ai,bW(av),bY(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()}
|
|
92
|
+
${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 cv(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 cw(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 cx(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 cy(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:ct(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 cz(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:ct(`${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 cA(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 cB(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 cC(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 cD(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 cE(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:800},{title:"原材料进场复试与见证取样",minChars:1200,blockerMinChars:800}],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(.9*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 cF(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=bt(R.flatMap(a=>a.evidence||[]),l);if(bv(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=bt(k,l);k.splice(0,k.length,...T),bv(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 bg(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,...bt(V,l)),bv(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=bu(af(k,j,n),l),Y=bu(al(k),l),Z=bu(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 _=bu((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(_,bu(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=bZ(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=bZ(ai,cs(aj,_,{maxIssues:20}).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议 Agent Writer 在章节生成阶段优先落位可信基础事实;导出阶段不因未落位的低置信或泛化事实阻断。"})));let ak=Math.max(0,i.length-R.length);ai=bZ(ai,[...ak>0?[{level:"error",severity:"blocker",message:`部分章节生成失败:${ak} 章`,suggestion:I.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。"}]:[]]),ai=bZ(ai,R.flatMap(a=>{let b=i.find(b=>b.id===a.id);if(!b)return[];let c=ba({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:b6(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:cn(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)(cC(cl(aq,_),o))));let ar=b2({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=bZ((0,x.kQ)(n,ai,aa,ap,aq,j.projectBindings||[],z),bz({markdown:aq,spec:n,summary:o}),bD({markdown:aq,facts:_,summary:o,profile:p}),bA(aq,o),cm(aq,_),bO({markdown:aq,chapters:ap,factsModel:aa,template:j,promptBindings:z,promptDocumentRules:A}),cs(aq,[..._,...aa.preciseFacts],{maxIssues:30}).map(a=>({...a,level:"error",severity:"blocker"})),(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,b5.IA)(aq),aq.includes("WRITER_MISSING_SECTION")||aq.includes("Writer 未完成")?[{level:"error",severity:"blocker",category:"structure",owner:"system",message:"最终正文仍包含未完成小节标记",suggestion:"必须重新补写对应小节并删除 WRITER_MISSING_SECTION/Writer 未完成。"}]:[],cE(ap),cD(ap))).map(a=>"error"===a.level?{...a,severity:a.severity||"blocker"}:a);let as=bQ({chapters:ap,templateChapters:i,factsModel:aa,evidence:k}),at=bF(aq,aa),au=bS({chapters:ap,templateChapters:i,factsModel:aa}),av=bV({markdown:aq,chapters:ap,issues:ai=bZ(ai,bR(as),bG(at,{maxIssues:20}),bT(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=bX({issues:ai,qualityReport:av,knowledgeCoverage:as,factTraces:at,chapterCoverage:au});ai=bZ(ai,bW(av),bY(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()}
|
|
93
93
|
|
|
94
94
|
${o}${a.slice(n)}`}return a}(g.content,e,n);(o=a!==g.content)&&(ap[f]={...g,content:cn(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)(cC(cl((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=bZ((0,x.kQ)(n,d,aa,ap,aq,j.projectBindings||[],z),bz({markdown:aq,spec:n,summary:o}),bD({markdown:aq,facts:_,summary:o,profile:p}),bA(aq,o),cm(aq,_),bO({markdown:aq,chapters:ap,factsModel:aa,template:j,promptBindings:z,promptDocumentRules:A}),cs(aq,[..._,...aa.preciseFacts],{maxIssues:30}).map(a=>({...a,level:"error",severity:"blocker"})),(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,b5.IA)(aq),aq.includes("WRITER_MISSING_SECTION")||aq.includes("Writer 未完成")?[{level:"error",severity:"blocker",category:"structure",owner:"system",message:"最终正文仍包含未完成小节标记",suggestion:"必须重新补写对应小节并删除 WRITER_MISSING_SECTION/Writer 未完成。"}]:[],cE(ap),cD(ap)).map(a=>"error"===a.level?{...a,severity:a.severity||"blocker"}:a),az=(0,x.Ai)(ai,aa,ap)}as=bQ({chapters:ap,templateChapters:i,factsModel:aa,evidence:k}),at=bF(aq,aa),au=bS({chapters:ap,templateChapters:i,factsModel:aa}),av=bV({markdown:aq,chapters:ap,issues:ai=bZ(ai,bR(as),bG(at,{maxIssues:20}),bT(au)),knowledgeCoverage:as,factTraces:at,chapterCoverage:au}),aw=bX({issues:ai,qualityReport:av,knowledgeCoverage:as,factTraces:at,chapterCoverage:au}),ai=bZ(ai,bW(av),bY(aw)),az=(0,x.Ai)(ai,aa,ap),av=bV({markdown:aq,chapters:ap,issues:ai,knowledgeCoverage:as,factTraces:at,chapterCoverage:au}),aw=bX({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:b6(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:b$.x,telemetry:aD},generatedAt:Date.now(),markdown:aq}}var cG=c(70963),cH=c(25284);let cI=["知识库","系统暂未","项目资料暂未","资料未明确","暂未明确","待确认","待资料复核","待系统","未检索到","资料不足","无法确认","建议补充","不适用","COL","可核验信息","围绕"];function cJ(a){return a.replace(/\s+/gu,"").toLowerCase()}function cK(a){return(0,M.lG)(a.value).replace(/\s+/gu," ").trim()}function cL(a,b){let c=cJ(`${a.fieldId||""} ${a.fieldName||""} ${a.key} ${(0,M.lG)(a.value)}`.replace(/\s+/gu," ").trim());return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(cJ(a)))}function cM(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=cJ(b);return c.filter(a=>cJ(a).includes(d)||b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(b=>cJ(a).includes(cJ(b))))}function cN(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 cO(a){return/项目特点.*重点.*难点|重点.*难点.*分析/u.test(a)?"系统识别本项目特点、施工重点、施工难点、形成原因、影响范围和应对措施,必须落位项目规模、结构形式、工期、专业范围、现场约束等具体事实,并为“项目主要施工内容”提供逐项对应依据。":/项目主要施工内容/u.test(a)?"按专业工程和关键工序展开施工内容,必须逐项响应“项目特点、重点、难点分析”中的重点难点,说明施工范围、实施内容、控制措施、验收节点和资料闭环。":/工期|进度|节点|计划/u.test(a)?"使用项目工期、节点和资源事实说明进度组织要求。":/质量|验收|标准|实测/u.test(a)?"使用项目质量目标、验收标准和工序事实说明质量控制要求。":/安全|危大|风险|应急/u.test(a)?"使用项目风险、危大工程和安全文明事实说明安全管控要求。":/资源|材料|机械|人材机/u.test(a)?"使用清单、材料、设备和劳动力事实说明资源配置要求。":/概况|说明|依据/u.test(a)?"使用项目基础事实说明编制边界和工程概况。":"使用已确认项目事实形成正式施工组织内容。"}function cP(a){let b=a.facts.slice(0,18).map(a=>`- ${a.key}:${cK(a)}${a.sourceFile?`(来源:${a.sourceFile})`:""}`).join("\n"),c=a.sections.map((a,b)=>`${b+1}. 必须输出三级标题:### ${a.title}
|
|
95
95
|
写作目标:${a.objective}
|
|
@@ -99,7 +99,7 @@ ${a.graphContext}`:"",b?`事实卡:
|
|
|
99
99
|
${b}`:"",`小节任务:
|
|
100
100
|
${c}`,"写作要求:必须严格按“小节任务”逐项输出,每个任务都必须保留完全一致的三级标题“### 小节标题”;不得合并小节、不得改写小节标题、不得省略小节;只使用事实卡、图谱上下文和绑定证据;不得输出后台话术、兜底措辞、待确认、不适用;缺少事实的小节不得编造。"].filter(Boolean).join("\n\n")}function cQ(a){return a.replace(/^\s*#{2,4}\s*/u,"").replace(/^\s*(?:\d+(?:\.\d+)*|[一二三四五六七八九十]+)(?:[、..]|\s+)\s*/u,"").trim()}function cR(a){return cJ(cQ(a)).replace(/施工(?=方案|流程|方法)/gu,"").replace(/专项(?=方案)/gu,"").replace(/项目|工程|主要|重点|技术/gu,"").replace(/\s/gu,"")}function cS(a){let b=[],c=a.draft.content||"";for(let d of cI)"围绕"!==d&&c.includes(d)&&b.push({level:"error",severity:"blocker",category:"style",owner:"system",message:`${a.draft.title} 正文包含禁止话术:${d}`,suggestion:"改为事实支撑的正式表达;缺失事实不得占位。"});for(let d of a.task.sections){let a=function(a,b){let c=a.split("\n"),d=cJ(cQ(b)),e=cR(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=cQ(c[a]),cJ(cQ(i))),f=cR(cQ(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,d.title);if(a.includes("[WRITER_MISSING_SECTION]"))b.push({level:"error",severity:"blocker",category:"structure",owner:"system",message:`${d.title} Writer 未完成`,suggestion:"Repairer 必须基于该小节事实卡和证据生成正式正文,并删除 WRITER_MISSING_SECTION 标记。"});else if((0,w.V7)(a)<d.minChars){let a=/项目特点.*重点.*难点|重点.*难点.*分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试|见证取样/u.test(d.title);b.push({level:a?"error":"warning",severity:a?"blocker":"warning",category:"structure",owner:"system",message:`${d.title} 正文不足,未达到任务最小深度`,suggestion:a?"关键小节必须基于项目事实和对应关系重写补足;不得仅保留概述性文字。":"应基于该小节事实卡和证据重新生成,不得使用标题占位。"})}d.ready||b.push(...d.issues)}let d=a.context.materialScope.selectedRoots;for(let e of a.context.materialScope.rejectedRoots)e&&!d.includes(e)&&c.includes(e)&&b.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 混入非当前资料组名称:${e}`,suggestion:"必须删除跨项目内容并重新检索当前资料组证据。"});let e=a.task.facts.filter(a=>{let b=cK(a);return b.length>=2&&c.includes(b.slice(0,Math.min(18,b.length)))}).length;a.task.facts.length>0&&0===e&&b.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 未落位章节事实卡`,suggestion:"必须将章节事实卡中的关键事实写入对应小节。"});let f=b.filter(a=>"error"===a.level||"blocker"===a.severity),g=b.filter(a=>/正文不足|未落位章节事实卡/u.test(a.message));return{issues:b,supportedFacts:e,unsupportedSignals:b.map(a=>a.message),repairable:b.length>0&&(b.length<=6||g.length===b.length||0===f.length)}}function cT(a){return a.replace(/\s+/gu,"").toLowerCase()}var cU=c(14070);async function cV(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,b5.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`以下规则由系统运行时从用户绑定指令中自动抽取,不作为用户可编辑内容。生成、检查和修复必须共同遵守:
|
|
101
101
|
${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,`生成前规划章节结构:
|
|
102
|
-
${(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=[...cA("部分绑定文件未完成索引,已自动跳过",f),...cA("部分绑定文件没有可用切片,已自动跳过",g),...cA("部分绑定文件索引失败,已自动跳过",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=bq(o,[...a_]),a1=cB(aZ,[...a_],a.maxEvidencePerChapter),a2=a$.pendingJobs>0||a$.vectorStatus&&"ready"!==a$.vectorStatus.status||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=[],bb=[],bf=[],bg=[],bh=-1,bi=new Map,bj=new Map,bk=(a,b)=>{let c=`${a}::${b.maxChunkContentChars}`;if(!bj.has(c))try{bj.set(c,aZ.getFileDetail?.(a,b))}catch{bj.set(c,void 0)}return bj.get(c)},bl=async(a,b,d,e)=>{let f=ct(e),g=(0,M.c6)({query:a,scopedFilePaths:b,limit:d,weights:f,generationMode:!1}),h=bi.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 bi.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=bt(await b9({manager:q,project:aZ,projectRoot:c,scopedFilePaths:[...aW].filter(Boolean).sort(),fileRoleByPath:aX,fileProcessingByPath:aY,signal:a.signal}),a0);bv(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 bp=bu(af(a5,p,ag),a0),br=bu(al(a5),a0),bs=[...bp,...br,...bu(am(a5,ah),a0)],bw=(0,cH.hp)({projectRoot:c,template:p,requirement:a.requirement}),bx=[...bw?.facts||[],...bs],by=ax(bx,bu(ae(a5),a0),a8,ag,ah),bz=(0,b5.Qu)({template:p,requirement:a.requirement,projectRoot:c,facts:bx});for(let a of(bw&&(bz.baseProjectGraph=bw.projectGraph,bz.facts=[...bw.facts,...bz.facts]),(0,b5.SU)(bz).filter(a=>!bw||"agent-base-project-graph"!==a.roleId)))(0,ay.fx)(O,a);bw&&(0,ay.fx)(O,(0,ay.X5)({type:"file_understanding",roleId:"project-intelligence-cache",status:"success",message:`已复用入库后项目理解资产与绑定 scope 快照:${bw.files.length} 份绑定资料`,details:[`项目级缓存时间:${new Date(bw.cache.createdAt).toLocaleString()}`,`scope 快照:${bw.scopeSnapshot.scopeHash.slice(0,12)}`,`复用预计算事实:${bw.facts.length} 条`,`复用预计算增强图谱:${bw.projectGraph.works.length}工程/${bw.projectGraph.methods.length}工法/${bw.projectGraph.resources.length}资源`,`图谱来源:${bw.cache.projectGraphMessage}`,`章节意图证据覆盖:${Object.keys(bw.evidenceByChapterId||{}).length}/${p.chapters.length} 章`,`排除正文不适用资料:${bw.files.filter(a=>!a.usableForBody).length} 份`]},{subtitle:"项目理解缓存 / Scope 快照"})),H();let bA=bz.baseProjectGraph;if(!bw){let b;"1"===process.env.DOCUMENT_PROJECT_GRAPH_ENHANCED?((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(),b=await J(()=>(0,cG.i)({evidence:a5,signal:a.signal,projectRoot:c,requirement:a.requirement,templateId:p.id}),O)):b={graph:bz.baseProjectGraph,stage:(0,ay.X5)({type:"file_understanding",roleId:"project-graph",status:"success",message:"已使用确定性基础项目图谱,LLM 增强图谱按配置关闭",details:["基础图谱来自事实记忆和资料快照",`事实数:${bx.length}`],progress:{current:3,total:3,label:"基础图谱"}},{subtitle:"项目资料图谱分析",order:O.length})},bA=b.graph||bz.baseProjectGraph,b.graph||(b={graph:bA,stage:(0,ay.X5)({type:"file_understanding",roleId:"project-graph",status:"success",message:"确定性基础项目图谱已完成,LLM 增强图谱未通过",details:["基础图谱为必跑结果,继续作为 Planner/Writer 图谱上下文",`增强阶段:${b.stage.message||b.stage.status}`]},{subtitle:"项目资料图谱分析",order:O.length})}),(0,ay.fx)(O,b.stage),H()}bA&&(U=(0,aE._n)(p,T,bA));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=b4(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=b2({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:b3(b),locked:b3(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:b3(e),locked:b3(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:b3("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:b3("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:b_.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=b4(a.projectRoot);return o&&aa.writeFileSync(e.join(o,`canonical-facts-${c}.json`),JSON.stringify(n,null,2)),n}({facts:bx,projectGraph:bA,requiredKeys:b_.map(a=>a.key),projectRoot:c,requirement:a.requirement,templateId:p.id});by.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:bA,canonicalFacts:bB});p={...p,chapters:bD};let bE=new Map;if(bA){let a=new Set;for(let b of[...bA.works,...bA.methods,...bA.resources,...bA.schedule,...bA.standards,...bA.risks,...bA.requirements,...bA.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,cU.C1)(a,c,.18)||(0,cU.C1)(a,b.title,.12)),e=/概况|总体|部署|施工|进度|工期|质量|安全|资源|人材机|材料|机械|劳动力|风险|危大|绿色|环保/u.test(c),f=bA.works.filter(a=>a.name&&(d(a.name)||e)),g=bA.methods.filter(a=>a.name&&(d(a.name)||(a.applicableWorks||[]).some(d)||e)),h=bA.resources.filter(a=>a.name&&(d(a.name)||/资源|人材机|材料|机械|劳动力/u.test(c)&&/material|equipment|labor/u.test(a.type))),i=bA.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})}bw||((0,ay.fx)(O,(0,ay.X5)({type:"file_understanding",roleId:"project-graph-match",status:"success",message:`图谱→章节映射完成:${bA.works.length}工程 ${bA.methods.length}工法 ${bA.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=U.prompt,bH=[bG,S({template:{...p,chapters:bF},chapters:bF,factsModel:by,requirement:a.requirement})].filter(Boolean).join("\n\n"),bI={...p,chapters:bF},bJ=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),bK=(0,w.tF)({requirement:a.requirement,promptTexts:aJ,template:bI,chapters:bF,spec:ag}),bL=0,bM=0;bF=$({chapters:await (0,M.l$)(bF.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b,chapterIndex:c})=>{if(b.sections?.length){bL+=1;let a=aS([...bJ.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)}}bM+=1;let d=(0,s.QR)(a5.filter(a=>a.chapterId===b.id||(0,u.Lk)(a,b.title)),{maxChars:(0,s.Pc)(bK.chapterTargets.get(b.id)||1200),preservePinned:!0}),e=U.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",f=co(P,b),g=await aT({template:bI,chapter:b,chapterIndex:c,evidence:d,promptTexts:f.promptTexts,projectContext:bH,requirement:a.requirement,roleContext:e,targetWords:bK.chapterTargets.get(b.id)||1200,structuralRules:bJ,signal:a.signal}),h=bJ.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:bK.targetChars||4e3,concurrency:2}),projectGraph:bA,canonicalFacts:bB});let bN=S({template:p={...p,chapters:bF},chapters:bF,factsModel:by,requirement:a.requirement});bH=[bG,bN].filter(Boolean).join("\n\n"),bw||(0,ay.fx)(O,(0,ay.X5)({type:"validation",roleId:"document-blueprint",status:"success",message:"已生成全局事实主表与文档蓝图,后续章节和小节将共用同一套专业约束",details:bN.split("\n").slice(0,12)},{subtitle:"全局蓝图"}));let bO=(0,w.tF)({requirement:a.requirement,promptTexts:aJ,template:p,chapters:bF,spec:ag}),bP=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||cO(a.title),requiredFacts:[...new Set([...a.requiredFacts||[],a.title])],requiredGraphNodes:[a.title],evidenceQueries:[...new Set([a.title,...a.queries||[],...a.requiredFacts||[]])],qualityRules:["事实必须来自锁定资料范围","不得出现后台话术和兜底措辞","不得混入其他项目名称","章节必须覆盖规划小节"],forbiddenPhrases:cI,sections:b.map(b=>({title:b,objective:cO(b),requiredFacts:[...new Set([b,...a.requiredFacts||[]])],requiredGraphNodes:[b],evidenceQueries:[...new Set([a.title,b,...cN(a.title),...cN(b),...a.queries||[],...a.requiredFacts||[]].filter(Boolean))],forbiddenPhrases:cI,minChars:/项目特点.*重点.*难点|重点.*难点.*分析/u.test(b)?1800:/项目主要施工内容|主要分部分项工程施工方案|主要施工方法/u.test(b)?2200:/原材料进场复试|见证取样|危大工程专项施工方案审批流程/u.test(b)?1200:/施工部署|施工流水|主要施工机械|劳动力|材料进场|资源动态|质量控制点|危大工程|安全隐患|临时用水|临时用电/u.test(b)?760:/概况|说明|依据/u.test(b)?260:420}))}});return{plan:{planId:`plan-${(0,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:cI,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:bz,title:p.name});bz.documentPlan=bP.plan,bz.nodes.push(bP.node),(0,ay.fx)(O,(0,ay.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:bP.node.outputSummary||"Agent 文档规划完成",details:bP.plan.chapters.map(a=>`${a.title}:${a.sections.length} 个小节任务`)},{subtitle:"Agent Document Planner",order:O.length})),G=bF.map(a=>a.id);let bQ=function(a){let b=a.template.chapters.length,c=b>0?a.targetWords/b:a.targetWords,d=`${a.template.name}
|
|
102
|
+
${(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=[...cA("部分绑定文件未完成索引,已自动跳过",f),...cA("部分绑定文件没有可用切片,已自动跳过",g),...cA("部分绑定文件索引失败,已自动跳过",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=bq(o,[...a_]),a1=cB(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=[],bb=[],bf=[],bg=[],bh=-1,bi=new Map,bj=new Map,bk=(a,b)=>{let c=`${a}::${b.maxChunkContentChars}`;if(!bj.has(c))try{bj.set(c,aZ.getFileDetail?.(a,b))}catch{bj.set(c,void 0)}return bj.get(c)},bl=async(a,b,d,e)=>{let f=ct(e),g=(0,M.c6)({query:a,scopedFilePaths:b,limit:d,weights:f,generationMode:!1}),h=bi.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 bi.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=bt(await b9({manager:q,project:aZ,projectRoot:c,scopedFilePaths:[...aW].filter(Boolean).sort(),fileRoleByPath:aX,fileProcessingByPath:aY,signal:a.signal}),a0);bv(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 bp=bu(af(a5,p,ag),a0),br=bu(al(a5),a0),bs=[...bp,...br,...bu(am(a5,ah),a0)],bw=(0,cH.hp)({projectRoot:c,template:p,requirement:a.requirement}),bx=[...bw?.facts||[],...bs],by=ax(bx,bu(ae(a5),a0),a8,ag,ah),bz=(0,b5.Qu)({template:p,requirement:a.requirement,projectRoot:c,facts:bx,projectGraph:bw?.projectGraph,projectGraphSource:bw?"project-intelligence":void 0});for(let a of(0,b5.SU)(bz))(0,ay.fx)(O,a);bw&&(0,ay.fx)(O,(0,ay.X5)({type:"file_understanding",roleId:"project-intelligence-cache",status:"success",message:`已复用入库后项目理解资产与绑定 scope 快照:${bw.files.length} 份绑定资料`,details:[`项目级缓存时间:${new Date(bw.cache.createdAt).toLocaleString()}`,`scope 快照:${bw.scopeSnapshot.scopeHash.slice(0,12)}`,`复用预计算事实:${bw.facts.length} 条`,`复用预计算项目图谱:${bw.projectGraph.works.length}工程/${bw.projectGraph.methods.length}工法/${bw.projectGraph.resources.length}资源`,`图谱来源:${bw.cache.projectGraphMessage}`,`章节意图证据覆盖:${Object.keys(bw.evidenceByChapterId||{}).length}/${p.chapters.length} 章`,`排除正文不适用资料:${bw.files.filter(a=>!a.usableForBody).length} 份`]},{subtitle:"项目理解缓存 / Scope 快照"})),H();let bA=bz.baseProjectGraph;if(!bw){let b;"1"===process.env.DOCUMENT_PROJECT_GRAPH_ENHANCED?((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(),b=await J(()=>(0,cG.i)({evidence:a5,signal:a.signal,projectRoot:c,requirement:a.requirement,templateId:p.id}),O)):b={graph:bz.baseProjectGraph,stage:(0,ay.X5)({type:"file_understanding",roleId:"project-graph",status:"success",message:"已使用确定性基础项目图谱,LLM 增强图谱按配置关闭",details:["基础图谱来自事实记忆和资料快照",`事实数:${bx.length}`],progress:{current:3,total:3,label:"基础图谱"}},{subtitle:"项目资料图谱分析",order:O.length})},bA=b.graph||bz.baseProjectGraph,b.graph||(b={graph:bA,stage:(0,ay.X5)({type:"file_understanding",roleId:"project-graph",status:"success",message:"确定性基础项目图谱已完成,LLM 增强图谱未通过",details:["基础图谱为必跑结果,继续作为 Planner/Writer 图谱上下文",`增强阶段:${b.stage.message||b.stage.status}`]},{subtitle:"项目资料图谱分析",order:O.length})}),(0,ay.fx)(O,b.stage),H()}bA&&(U=(0,aE._n)(p,T,bA));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=b4(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=b2({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:b3(b),locked:b3(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:b3(e),locked:b3(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:b3("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:b3("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:b_.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=b4(a.projectRoot);return o&&aa.writeFileSync(e.join(o,`canonical-facts-${c}.json`),JSON.stringify(n,null,2)),n}({facts:bx,projectGraph:bA,requiredKeys:b_.map(a=>a.key),projectRoot:c,requirement:a.requirement,templateId:p.id});by.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:bA,canonicalFacts:bB});p={...p,chapters:bD};let bE=new Map;if(bA){let a=new Set;for(let b of[...bA.works,...bA.methods,...bA.resources,...bA.schedule,...bA.standards,...bA.risks,...bA.requirements,...bA.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,cU.C1)(a,c,.18)||(0,cU.C1)(a,b.title,.12)),e=/概况|总体|部署|施工|进度|工期|质量|安全|资源|人材机|材料|机械|劳动力|风险|危大|绿色|环保/u.test(c),f=bA.works.filter(a=>a.name&&(d(a.name)||e)),g=bA.methods.filter(a=>a.name&&(d(a.name)||(a.applicableWorks||[]).some(d)||e)),h=bA.resources.filter(a=>a.name&&(d(a.name)||/资源|人材机|材料|机械|劳动力/u.test(c)&&/material|equipment|labor/u.test(a.type))),i=bA.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})}bw||((0,ay.fx)(O,(0,ay.X5)({type:"file_understanding",roleId:"project-graph-match",status:"success",message:`图谱→章节映射完成:${bA.works.length}工程 ${bA.methods.length}工法 ${bA.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=U.prompt,bH=[bG,S({template:{...p,chapters:bF},chapters:bF,factsModel:by,requirement:a.requirement})].filter(Boolean).join("\n\n"),bI={...p,chapters:bF},bJ=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),bK=(0,w.tF)({requirement:a.requirement,promptTexts:aJ,template:bI,chapters:bF,spec:ag}),bL=0,bM=0;bF=$({chapters:await (0,M.l$)(bF.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b,chapterIndex:c})=>{if(b.sections?.length){bL+=1;let a=aS([...bJ.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)}}bM+=1;let d=(0,s.QR)(a5.filter(a=>a.chapterId===b.id||(0,u.Lk)(a,b.title)),{maxChars:(0,s.Pc)(bK.chapterTargets.get(b.id)||1200),preservePinned:!0}),e=U.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",f=co(P,b),g=await aT({template:bI,chapter:b,chapterIndex:c,evidence:d,promptTexts:f.promptTexts,projectContext:bH,requirement:a.requirement,roleContext:e,targetWords:bK.chapterTargets.get(b.id)||1200,structuralRules:bJ,signal:a.signal}),h=bJ.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:bK.targetChars||4e3,concurrency:2}),projectGraph:bA,canonicalFacts:bB});let bN=S({template:p={...p,chapters:bF},chapters:bF,factsModel:by,requirement:a.requirement});bH=[bG,bN].filter(Boolean).join("\n\n"),bw||(0,ay.fx)(O,(0,ay.X5)({type:"validation",roleId:"document-blueprint",status:"success",message:"已生成全局事实主表与文档蓝图,后续章节和小节将共用同一套专业约束",details:bN.split("\n").slice(0,12)},{subtitle:"全局蓝图"}));let bO=(0,w.tF)({requirement:a.requirement,promptTexts:aJ,template:p,chapters:bF,spec:ag}),bP=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||cO(a.title),requiredFacts:[...new Set([...a.requiredFacts||[],a.title])],requiredGraphNodes:[a.title],evidenceQueries:[...new Set([a.title,...a.queries||[],...a.requiredFacts||[]])],qualityRules:["事实必须来自锁定资料范围","不得出现后台话术和兜底措辞","不得混入其他项目名称","章节必须覆盖规划小节"],forbiddenPhrases:cI,sections:b.map(b=>({title:b,objective:cO(b),requiredFacts:[...new Set([b,...a.requiredFacts||[]])],requiredGraphNodes:[b],evidenceQueries:[...new Set([a.title,b,...cN(a.title),...cN(b),...a.queries||[],...a.requiredFacts||[]].filter(Boolean))],forbiddenPhrases:cI,minChars:/项目特点.*重点.*难点|重点.*难点.*分析/u.test(b)?1800:/项目主要施工内容|主要分部分项工程施工方案|主要施工方法/u.test(b)?2200:/原材料进场复试|见证取样|危大工程专项施工方案审批流程/u.test(b)?1200:/施工部署|施工流水|主要施工机械|劳动力|材料进场|资源动态|质量控制点|危大工程|安全隐患|临时用水|临时用电/u.test(b)?760:/概况|说明|依据/u.test(b)?260:420}))}});return{plan:{planId:`plan-${(0,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:cI,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:bz,title:p.name});bz.documentPlan=bP.plan,bz.nodes.push(bP.node),(0,ay.fx)(O,(0,ay.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:bP.node.outputSummary||"Agent 文档规划完成",details:bP.plan.chapters.map(a=>`${a.title}:${a.sections.length} 个小节任务`)},{subtitle:"Agent Document Planner",order:O.length})),G=bF.map(a=>a.id);let bQ=function(a){let b=a.template.chapters.length,c=b>0?a.targetWords/b:a.targetWords,d=`${a.template.name}
|
|
103
103
|
${a.template.category||""}
|
|
104
104
|
${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:bO.targetChars||[...bO.chapterTargets.values()].reduce((a,b)=>a+b,0),requirement:a.requirement}),bR={strategy:bQ,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:`已自动选择 ${bQ.mode} 生成策略:章节审查 ${bQ.enableChapterReview?"启用":"跳过"}、全局审查 ${bQ.enableGlobalReview?"启用":"跳过"}、最终质量审查 ${bQ.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${bQ.enableDocumentBudgetExpansion?"启用":"跳过"};LLM 调用按工作流任务自然并行`},{subtitle:"后台自动策略"}));let bS=Z?"OUTLINE 章节":"模板章节",bT=(0,ay.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${bM} 章由 LLM 基于${bS}、项目资料理解和证据规划小节,${bL} 章已由模板显式提供小节并跳过规划`},{subtitle:"小节规划策略"}),bU=Z?`;识别到 OUTLINE 章节 ${Y.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",bV=[...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)}%${bU}`,details:[...bV,...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,bT),H();let bW=Math.round(([...bO.chapterTargets.values()].reduce((a,b)=>a+b,0)||bO.targetChars||0)/Math.max(1,bF.length)),bX=Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),bY=bF.length<=1?1:bO.longformStrict||bW>=9e3?2:bW>=6500?Math.min(3,bF.length):Math.min(4,bF.length),bZ=Math.max(1,Math.min(bF.length||1,Number.isFinite(bX)&&bX>0?Math.floor(bX):bY));(0,ay.fx)(O,(0,ay.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节自适应调度:本轮 ${bZ}/${bF.length} 章并发`,details:[`有效章节数:${bF.length}`,`平均章节目标:${bW} 字`,Number.isFinite(bX)&&bX>0?`章节并发来自 DOCUMENT_CHAPTER_CONCURRENCY=${Math.floor(bX)}`:`章节并发自适应=${bY},长章保守、短章提速`]},{subtitle:"章节并发策略"})),H();for(let b=0;b<bF.length;b+=bZ){let d=bF.slice(b,b+bZ);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(bA&&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)?b7:[],E=cv(d,[...B,...A],D),F=cw(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?[]:bw?.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(bR.evidence.searchQueries+=Math.min(E.length,F),bR.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=bO.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 bo({config:aF,chapterId:d.id,chapterTitle:d.title,sectionTitles:d.sections||[],runtimeRules:aG,localFacts:[...by.project,...by.schedule,...by.quality,...by.safety,...by.resources,...by.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(...bt(ab,a0)),$=bt($,a0);let ac=cu(d,$,{maxItems:cx(a1,d,a3.highRisk),maxChars:aa+(a3.highRisk?14e3:4e3),preservePinned:!0},bR);bv(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=>cT(`${a.sectionTitle||""}${a.content||""}`).includes(cT(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&&($=cu(d,[...$,...bt(b,a0)],{maxItems:cx(a1+12,d,a3.highRisk),maxChars:aa+(a3.highRisk?36e3:16e3),preservePinned:!0},bR),$=bt($,a0),ac=cu(d,$,{maxItems:cx(a1+8,d,a3.highRisk),maxChars:aa+(a3.highRisk?28e3:12e3),preservePinned:!0},bR),bv(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} 条证据`});bh<0?bh=(0,ay.fx)(O,an):O[bh]={...an,order:O[bh]?.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=co(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:by,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 cz({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=bt([...b,...e],a0);f.length>0&&($=cu(d,[...$,...f],{maxItems:cx(a1+16,d,!0),maxChars:aa+42e3,preservePinned:!0},bR),$=bt($,a0),ac=cu(d,$,{maxItems:cx(a1+12,d,!0),maxChars:aa+32e3,preservePinned:!0},bR),bv(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:by,evidence:$,profile:ah})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}bv(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(),bR.evidence.contextChars+=aL;let aN=(k=aH,au(k.flatMap(a=>a.facts))),aO=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)?br:[],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?`必须优先覆盖的事实/要求:
|
|
105
105
|
${d.map(a=>`- ${a}`).join("\n")}`:"",e.length?`角色节点已抽取事实:
|