@customize-agent/server 4.12.9 → 4.12.11
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/2886.js +1 -1
- package/.next/server/chunks/6482.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/asset-library.html +1 -1
- package/.next/server/pages/document-roles.html +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/guide.html +1 -1
- package/.next/server/pages/index.html +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/overview.html +1 -1
- package/.next/server/pages/prompt.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages/template-references.html +1 -1
- package/.next/server/pages-manifest.json +25 -25
- package/package.json +1 -1
- /package/.next/static/{ePdHZbysUrT2FDOCqKjiD → D_2Mkgwh0uGeQ7vj6NZTK}/_buildManifest.js +0 -0
- /package/.next/static/{ePdHZbysUrT2FDOCqKjiD → D_2Mkgwh0uGeQ7vj6NZTK}/_ssgManifest.js +0 -0
package/.next/BUILD_ID
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
D_2Mkgwh0uGeQ7vj6NZTK
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"ampDevFiles": [],
|
|
7
7
|
"lowPriorityFiles": [
|
|
8
|
-
"static/
|
|
9
|
-
"static/
|
|
8
|
+
"static/D_2Mkgwh0uGeQ7vj6NZTK/_buildManifest.js",
|
|
9
|
+
"static/D_2Mkgwh0uGeQ7vj6NZTK/_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": "d7912522744cc8c07be4877d9b0d90e3",
|
|
7
|
+
"previewModeSigningKey": "49b9d251a4372e9b2ca057b0912a644270d1e9dba5ce7bc32ca62a1d187d382e",
|
|
8
|
+
"previewModeEncryptionKey": "83ebedbf05722e89f620ce38f24f63a555f418cdeb73cd4e39976fed5efeeb75"
|
|
9
9
|
},
|
|
10
10
|
"notFoundRoutes": []
|
|
11
11
|
}
|
|
@@ -124,7 +124,7 @@ ${a.chapters.map((b,c)=>{let d=F(b,a.factsModel);return`${c+1}. ${b.title}:${d
|
|
|
124
124
|
${b.facts.map(a=>`- ${B(a)}`).join("\n")}`:"可信基础事实主表(本章相关):系统当前结构化事实确认不足,应扩大本地知识库检索、补抽事实并修复事实落位;正文只能使用已确认事实,不得编造参数。",b&&b.traceLines.length?`关键事实证据追踪清单(本章相关):
|
|
125
125
|
${b.traceLines.join("\n")}`:"",...a.structure.matrixLines,b?`章节专业任务卡:
|
|
126
126
|
${b.taskCard}`:"",b?`章节实施方案:
|
|
127
|
-
${b.executionPlan}`:"",a.requirementRules||"",...a.structure.droppedFactNote].filter(Boolean).join("\n")}({chapterTitle:(0,t.GQ)(a.title),structure:cD,requirementRules:cC})}).constructionOrgContext,b.scopedBlueprint].filter(Boolean).join("\n\n"):cc};bW||(0,bi.fx)($,(0,bi.X5)({type:"validation",roleId:"document-blueprint",status:"success",message:"已生成全局事实主表与文档蓝图,后续章节和小节将共用同一套专业约束",details:cB.split("\n").slice(0,12)},{subtitle:"全局蓝图"}));let cG=(0,w.tF)({requirement:a.requirement,promptTexts:aY,template:p,chapters:b9,spec:aE}),cI=(0,ep.NP)({template:p,context:bZ,title:p.name});bZ.documentPlan=cI.plan,bZ.nodes.push(cI.node),(0,bi.fx)($,(0,bi.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:cI.node.outputSummary||"Agent 文档规划完成",details:cI.plan.chapters.map(a=>`${a.title}:${a.sections.length} 条细目`)},{subtitle:"Agent Document Planner",order:$.length})),G=b9.map(a=>a.id);let cJ=cG.targetChars||[...cG.chapterTargets.values()].reduce((a,b)=>a+b,0),cK=(0,bj.JP)({template:p,targetWords:cJ,requirement:a.requirement,materialFileCount:ae.length,evidenceCount:bp.length}),cL=(0,bk.C)({template:p,chapters:b9,targetWords:cJ,requirement:a.requirement,materialFileCount:ae.length,evidenceCount:bp.length,hasVeryLargeExplicitChapter:b9.some(a=>(a.sections||[]).filter(Boolean).length>=30),configuredChapterConcurrency:Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),strategy:cK}),cM=(0,bj.Zk)(cK);(0,ac.t5)(cJ),(0,bi.fx)($,(0,bi.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${cK.mode} 生成策略:章节审查 ${cK.enableChapterReview?"启用":"跳过"}、全局审查 ${cK.enableGlobalReview?`${cK.globalReviewSamplingRate&&cK.globalReviewSamplingRate<1?`抽检 ${Math.round((cK.globalReviewSamplingRate??1)*100)}%`:"启用"}`:"跳过"}、最终质量审查 ${cK.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${cK.enableDocumentBudgetExpansion?"启用":"跳过"}`,details:cL.triggers},{subtitle:"后台自动策略"})),b_.scopeConflicts.length>0&&(0,bi.fx)($,(0,bi.X5)({type:"validation",roleId:"scope-conflict-resolution",status:"success",message:`源级数据口径冲突已裁决(补疑/澄清修正文件权威最高):${b_.scopeConflicts.map(a=>a.resolution?`${a.scope} → ${a.resolution}`:`${a.scope} → 待人工复核`).join(";")}`,details:b_.scopeConflicts.flatMap(a=>a.values.map(a=>`来源「${a.sourceFile||"未知文件"}」取值 ${a.value}${a.unit}`))},{subtitle:"数据口径裁决"}));let cQ=as?"OUTLINE 章节":"模板章节",cS=(0,bi.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${ch} 章由 LLM 基于${cQ}、项目资料理解和证据规划小节,${cg} 章已由模板显式提供小节并跳过规划`,details:ci.length?[...ci]:void 0},{subtitle:"小节规划策略"}),cW=as?`;识别到 OUTLINE 章节 ${ap.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",cX=[..._.prompts.map(a=>`${a.category}|${a.roleId}|${a.id}|${a.name}|${a.bindingSource}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`),..._.unresolvedRoles.map(a=>`unresolved|${a}|项目角色配置中的提示词角色不存在`),..._.missingResourceRoles.map(a=>`missingResource|${a}|提示词角色未显式绑定资源`)];(0,bi.fx)($,(0,bi.X5)({type:"role_binding",roleId:V,status:"success",message:`已绑定项目资料 ${ae.length} 份、${_.prompts.length} 个有效提示词;写作 ${_.writerPrompts.length}、章节 ${_.chapterPrompts.length}、抽取 ${_.extractionPrompts.length};已自动抽取运行时规则 ${aW.executionSummary.length} 条${cW}`,details:[...cX,...aW.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:W,roleName:W})),(0,bi.fx)($,(0,bi.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${aW.executionSummary.length} 条,版本 ${aW.sourceHash}`,details:aW.executionSummary.length?[...aW.executionSummary,`必需表格:${aW.requiredTables.join("、")||"无"}`,`必含关键词:${aW.requiredKeywords?.join("、")||"无"}`,`禁含内容:${aW.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})),(0,bi.fx)($,(0,bi.X5)({type:"validation",roleId:"document-readiness",status:aG.ready?"success":"failed",message:"生成准备度:绑定资料已就绪",details:aG.diagnostics},{subtitle:"生成准备度检查"})),(0,bi.fx)($,cS),S();let cZ=Math.round(([...cG.chapterTargets.values()].reduce((a,b)=>a+b,0)||cG.targetChars||0)/Math.max(1,b9.length)),c1=Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),c3=cL.chapterConcurrency,c5=cL.reviewConcurrency;(0,bi.fx)($,(0,bi.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节流水线调度:${b9.length} 章全部同批并行生成,审查修复 ${c5} 路流水线(章节生成完立即进入审查,与后续章节生成重叠)`,details:[`有效章节数:${b9.length}`,`平均章节目标:${cZ} 字`,Number.isFinite(c1)&&c1>0?`章节并发来自 DOCUMENT_CHAPTER_CONCURRENCY=${Math.floor(c1)}`:`全部章节并行生成,在飞调用不设并发上限;修复轮次预算 ${cL.repairRoundBudget} 轮`]},{subtitle:"章节流水线策略"})),S();let c7=new z.jf(c5),c8=[],c9={remaining:cL.repairPoolBudget},da=[...bb].filter(Boolean).sort(),db=Date.now(),dc=da.length>0?(await (0,z.l$)(c4,async a=>bG(a,da,Math.min(bd,12),""),{kind:"search"})).flat():[];cM.evidence.searchQueries+=c4.length,cM.evidence.searchMs+=Date.now()-db;for(let b=0;b<b9.length;b+=c3){let d=b9.slice(b,b+c3);for(let f of(await Promise.all(d.map(async(d,f)=>{let g,h=b+f;(0,z.Te)(a.signal);let i=Date.now(),j=$.length;try{var k;let b,f,m,o;$.push((0,bi.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:_.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${h+1}/${b9.length}`,`二级小节:${d.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:h+1,total:b9.length,label:"章节生成"}},{subtitle:(0,t.GQ)(d.title),order:h})),S();let r=a.resumeChapters?.find(a=>a.id===d.id||a.title===d.title),y=r?.content?.trim(),B=r?.evidence?.length?[...r.evidence]:[],C=aj.chapterPlans.find(a=>a.chapterId===d.id||a.chapterTitle===d.title),D=C?Object.values(C.evidenceQueries).flat().filter(Boolean):[],E=d.queries.length>0?d.queries:[p.name,p.outputTitle,d.title],F=b8.get(d.id);if(b$&&F&&F.graphFiles.size>0){let a=[...bb],b=b=>a.includes(b)?b:a.find(a=>a.endsWith(b)||a.includes(b));for(let a of[...F.graphFiles].map(a=>b(a)||a).filter(a=>(0,bj.Tz)(c,a,bb))){let b=bF(a);if(b?.chunks?.length)for(let c of b.chunks)B.push({chapterId:d.id,filePath:b.file?.relativePath||a,score:5+(F.graphWorks.length+F.graphMethods.length)*.5,content:c.content,roleId:a6.get(a),processingType:a7.get(a),sectionTitle:c.sectionTitle,source:"graph-evidence"})}}let G=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title),H=dI(d,[...E,...D],[]),I=Date.now();$[j]=(0,bi.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:_.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 正在执行质量优先的章节检索${F?.graphFiles.size?`(图谱匹配 ${F.graphFiles.size} 个文件)`:""}`,details:H.map(a=>`检索:${a.slice(0,42)}`),progress:{current:h+1,total:b9.length,label:"证据检索"}},{subtitle:(0,t.GQ)(d.title),order:h}),S();let J=y?[]:[...bb].filter(Boolean).sort(),K=y?[]:bW?.evidenceByChapterId?.[d.id]||[];K.length>0&&B.push(...K);let L=[],M=(d.requiredFacts||[]).filter(a=>!!a&&!H.some(b=>b.includes(a)||a.includes(b))).map(a=>`${d.title} ${a}`),N=[...H,...M];if(J.length>0&&N.length>0){(0,z.Te)(a.signal);let b=await (0,z.l$)(N,async a=>bG(a,J,Math.min(bd,12),d.title),{kind:"search"});L.push(...b)}for(let a of(cM.evidence.searchQueries+=N.length,cM.evidence.searchMs+=Date.now()-I,L))B.push(...a.filter(a=>(0,bj.Tz)(c,a.filePath,a5)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:a6.get(a.filePath),processingType:a7.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));G&&J.length>0&&dc.length>0&&B.push(...dc.filter(a=>(0,bj.Tz)(c,a.filePath,a5)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:a6.get(a.filePath),processingType:a7.get(a.filePath),sectionTitle:a.sectionTitle,source:"basic-fact-cache"})));let O=y?[]:await (0,bl.$b)({manager:q,projectRoot:c,chapter:d,plan:C,profile:ai,scopedFilePaths:J,limitPerQuery:Math.min(bd,10),signal:a.signal}).catch(()=>[]);B.push(...O);let P=new Set((d.pinnedEvidenceFilePaths||[]).filter(Boolean)),T=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)&&B.push(...bO.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"})));let V=bJ.filter(a=>/招标|投标须知|评标办法|专用合同条款|投标人须知/u.test(`${a.filePath||""}${a.sectionTitle||""}`));for(let a of(/概况|工程|项目|总体|部署/u.test(d.title)&&V.length>0&&B.push(...V.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"}))),new Set([...P]))){if(!(0,bj.Tz)(c,a,a5))continue;let b=P.has(a),e=bF(a);e&&B.push(...e.chunks.map(a=>({chapterId:d.id,filePath:e.file.relativePath,score:1,content:a.content,roleId:a6.get(e.file.relativePath),processingType:a7.get(e.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let W=B.filter(a=>(0,bj.Tz)(c,a.filePath,bb));if(!y&&aQ.enabled&&aQ.allowProjectFacts){let b=await bK({config:aQ,chapterId:d.id,chapterTitle:d.title,sectionTitles:d.sections||[],runtimeRules:aW,localFacts:[...bY.project,...bY.schedule,...bY.quality,...bY.safety,...bY.resources,...bY.preciseFacts],signal:a.signal});br.queries.push(...b.queries),br.filteredCount+=b.filtered+b.evidence.length}let Y=y?[]:(0,bl.SK)({project:a9,chapter:d,plan:C,profile:ai,scopedFilePaths:J,highRisk:bo.highRisk});Y.length>0&&W.push(...bP(Y,bc)),W=bP(W,bc),bS.size>0&&(W=W.filter(a=>!bS.has(X(a))));let Z=W,aa=await (0,R.Mv)([(0,Q.Yx)(d)],Z.map(dG)),ab=dH(d,W,{preservePinned:!0,semantic:{similarity:aa,queryText:(0,Q.Yx)(d)}},cM);ab=c$(ab,b_.scopeConflicts),bR(ab,bc,`chapter:${d.id}:initial`);let ad=d.requiredFacts.filter(a=>!ab.some(b=>(0,u.Lk)(b,a))),ag=0,ah=F?[F.graphWorks.length?`图谱识别本章工程内容:${F.graphWorks.join("、")}`:"",F.graphMethods.length?`图谱识别本章施工方法:${F.graphMethods.join("、")}`:"",F.graphBoqItems.length?`图谱识别本章BOQ清单项(${F.graphBoqItems.length}项):${F.graphBoqItems.map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",F.gaps.length?`图谱识别本章资料缺口:${F.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",ak=function(a){let b=[];for(let c of a){if(!c.resolution)continue;let a=c.values.filter(a=>`${a.value}${a.unit}`!==c.resolution);if(0===a.length)continue;let d=a.map(a=>`${a.value}${a.unit}`).join("、");"high"===c.confidence?b.push(`${c.scope}必须统一为 ${c.resolution}(补疑/答疑/澄清类修正文件权威最高;${d} 已被修正,正文禁止出现)`):"medium"===c.confidence?b.push(`${c.scope}应统一为 ${c.resolution}(按资料来源优先级裁决;${d} 为败选值,正文避免使用)`):b.push(`${c.scope}参考口径为 ${c.resolution}(锚定较弱,请人工复核;${d} 不参与自动改写)`)}return b}(b_.scopeConflicts),al=cw.length>0?(()=>{let a=a0(d.title),b=cw.filter(b=>b.chapterTitle===a);return 0===b.length?"":["【本章必须显性响应的招标要求(逐条写入正文,零响应即评标失分)】",...b.map(a=>`- ${a.kind}:${a.item.text}`)].join("\n")})():"",am=[ah,al,ak.length?`【数据口径强制约束】${ak.join(";")}`:"",C?.writingGoal,C?.mustCover?.length?`本章必须覆盖:${C.mustCover.join("、")}`:"",C?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${C.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),an=dz(_,d);if(_.writerPrompts.length>0&&!an.primaryWriter)throw Error(`${(0,t.GQ)(d.title)} 写作主控提示词未进入章节生成阶段`);let ao=[an.promptTexts,aI].filter(Boolean).join("\n\n"),ap=an.promptDetails.length?an.promptDetails:["未绑定章节写作提示词"],aq=function(a){let b=a.profile||l,c=[],d=[a.template.name,a.template.outputTitle,a.chapter.title,a.chapter.purpose,...a.chapter.sections||[],...a.chapter.requiredFacts||[]].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||[])ax(c,b,{label:d,category:n(b,d)?.category||"required",required:!0,source:"template"});for(let d of a.chapter.sections||[])ax(c,b,{label:d,category:"section",required:!1,source:"section",queries:aw(d,[a.chapter.title])});for(let d of a.plan?.requiredContents||[])ax(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of a.plan?.evidenceNeeds||[])ax(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&&ax(c,b,{label:e.name,category:n(b,e.name)?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:aw(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)||aw(e.name,f?.aliases||[]).some(a=>d.includes(a))||a.chapter.requiredFacts.some(a=>a.includes(e.name)||e.name.includes(a)))&&ax(c,b,{label:e.name,category:f?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:aw(e.name,[g])})}for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&d.includes(a))&&ay(c,b,a,"profile","must_use"===a.usagePolicy,[d]);let f=av(a.requirement||"");if(f)for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&f.includes(a))&&ay(c,b,a,"requirement",!0,[f]);let g=av(a.promptTexts||"");if(g)for(let d of b.factFields)[d.name,...d.aliases].some(a=>a.length>=2&&g.includes(a))&&ay(c,b,d,"prompt","must_use"===d.usagePolicy,[a.chapter.title]);return c}({template:p,chapter:d,spec:aE,profile:aF,promptTexts:ao,requirement:a.requirement,plan:C?{requiredContents:C.mustCover,evidenceNeeds:Object.values(C.evidenceQueries).flat()}:void 0}),ar=aA({needs:aq,factsModel:bY,evidence:W,profile:aF,excludedEvidenceKeys:bS}),as=ar.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),at=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>eq(`${a.sectionTitle||""}${a.content||""}`).includes(eq(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:ab}),au=new Set(ab.map(a=>a.filePath)).size,aC=!!F&&(F?.graphFiles.size||0)>=8&&au>=6&&0===ad.length&&"low"===at.riskLevel,aD=function(a){let b=a.evidenceFileCount<=2;return a.scopedFileCount>80?b:"evidence_first"===a.suggestedStrategy||a.highRisk||a.missingFactsCount>0||a.requiredMissingNeedsCount>0||b||a.evidenceCount<8&&"low"!==a.riskLevel}({scopedFileCount:J.length,evidenceCount:ab.length,evidenceFileCount:au,suggestedStrategy:at.suggestedStrategy,highRisk:bo.highRisk,missingFactsCount:ad.length,requiredMissingNeedsCount:as.length,riskLevel:at.riskLevel});if(!aC&&aD&&J.length>0){let b=await bh({manager:q,projectRoot:c,chapter:d,scopedFilePaths:J,fileRoleByPath:a6,fileProcessingByPath:a7,requiredNeeds:[...new Set([...ad,...as])],highRisk:bo.highRisk||as.length>0,signal:a.signal}).catch(()=>[]);ag=b.length,b.length>0&&(W=dH(d,[...W,...bP(b,bc)],{preservePinned:!0},cM),W=bP(W,bc),bS.size>0&&(W=W.filter(a=>!bS.has(X(a)))),ab=dH(d,W,{preservePinned:!0},cM),ab=c$(ab,b_.scopeConflicts),bR(ab,bc,`chapter:${d.id}:deep`),ad=d.requiredFacts.filter(a=>!ab.some(b=>(0,u.Lk)(b,a)))),as=(ar=aA({needs:aq,factsModel:bY,evidence:W,profile:aF,excludedEvidenceKeys:bS})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label)}if(as.length>0&&J.length>0){let b=bP(await bh({manager:q,projectRoot:c,chapter:d,scopedFilePaths:J,fileRoleByPath:a6,fileProcessingByPath:a7,requiredNeeds:as,highRisk:!0,signal:a.signal}).catch(()=>[]),bc);b.length>0&&(W=dH(d,[...W,...b],{preservePinned:!0},cM),W=bP(W,bc),bS.size>0&&(W=W.filter(a=>!bS.has(X(a)))),ab=dH(d,W,{preservePinned:!0},cM),ab=c$(ab,b_.scopeConflicts),bR(ab,bc,`chapter:${d.id}:supplemental`),ad=d.requiredFacts.filter(a=>!ab.some(b=>(0,u.Lk)(b,a))),as=(ar=aA({needs:aq,factsModel:bY,evidence:W,profile:aF,excludedEvidenceKeys:bS})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}for(let a of(bR(ab,bc,`chapter:${d.id}:writer-input`),0===ab.length&&bu.push(`${d.title}:缺少可支撑正文的项目资料证据`),ad))bu.push(`${d.title}:事实需求未满足 ${a}`);let aG=(0,bi.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:bp.length>0?"success":"failed",message:`已检索/绑定 ${bp.length} 条证据`});bB<0?bB=(0,bi.fx)($,aG):$[bB]={...aG,order:$[bB]?.order??aG.order},S(),(0,z.Te)(a.signal);let aH=new Map,aJ=b=>{let e=(0,z.c6)({kind:"section",query:`${d.title} ${b}`.trim(),scopedFilePaths:J}),f=aH.get(e);if(f)return Promise.resolve(f);let g=(0,bm.Ym)(b,d,ab),h=g.filter(a=>af.AM.test(a.content)).length;return g.length>=4&&h>=1?(aH.set(e,g),Promise.resolve(g)):dJ({manager:q,projectRoot:c,chapter:d,sectionTitle:b,scopedFilePaths:J,fileRoleByPath:a6,fileProcessingByPath:a7,signal:a.signal}).then(a=>(aH.set(e,a),a))},aK=b=>{if(0===b.length||0===J.length)return Promise.resolve([]);let e=b.join(" ");return dJ({manager:q,projectRoot:c,chapter:d,sectionTitle:e,scopedFilePaths:J,fileRoleByPath:a6,fileProcessingByPath:a7,signal:a.signal}).catch(()=>[])},aL=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b)||`${a.sectionTitle||""} ${a.content}`.includes(b))).length,d=a.chapter.requiredFacts.length,e=a.chapter.requiredFacts.filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:d,evidence:ab,risk:bo});bq.push(aL);let aM=new Set(ab.map(a=>a.filePath)),aN=ab.reduce((a,b)=>a+b.content.length,0),aO=[...bo.highRisk?[`召回覆盖风险(${bo.riskReason||"切片未完全预加载"}):已加载 ${bo.loadedChunks}/${bo.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${K.length} 条`,`深召回证据:${ag} 条`,`事实覆盖:${aL.requiredFactCovered}/${aL.requiredFactTotal}`,`小节覆盖:${aL.sectionCovered}/${aL.sectionTotal}`];$[j]=(0,bi.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:_.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 已选取 ${ab.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aM.size} 份`,`上下文字符:${aN}`,`检索查询:${H.length} 组`,...aO],progress:{current:h+1,total:b9.length,label:"正文生成"}},{subtitle:(0,t.GQ)(d.title),order:h}),S(),cM.evidence.contextChars+=aN;let aP=(k=ar,az(k.flatMap(a=>a.facts))),aR=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)?bU:[],aS=(0,bm.hZ)({chapter:d,plan:void 0,spec:aE,roleFacts:T,evidence:ab,missingFacts:ad,indexedFacts:[...aR,...aP],resolvedFactNeeds:ar,factNeedsPrompt:function(a){let b=a.map(a=>{let b=a.facts.slice(0,5).map(b=>`${b.key||b.fieldName||a.need.label}=${aB(b.value)}${b.sourceFile?`(${e.basename(b.sourceFile)})`:""}`),c=a.facts.length?[]:(a.evidence||[]).slice(0,2).map(a=>`证据片段:${aB(a.content).slice(0,160)}${a.filePath?`(${e.basename(a.filePath)})`:""}`);return`- ${a.need.required?"必须":"相关"}|${a.need.label}|${a.status}${b.length||c.length?`:${[...b,...c].join(";")}`:":未在已解析资料中确认"}`});return b.length?`事实需求覆盖卡片:
|
|
127
|
+
${b.executionPlan}`:"",a.requirementRules||"",...a.structure.droppedFactNote].filter(Boolean).join("\n")}({chapterTitle:(0,t.GQ)(a.title),structure:cD,requirementRules:cC})}).constructionOrgContext,b.scopedBlueprint].filter(Boolean).join("\n\n"):cc};bW||(0,bi.fx)($,(0,bi.X5)({type:"validation",roleId:"document-blueprint",status:"success",message:"已生成全局事实主表与文档蓝图,后续章节和小节将共用同一套专业约束",details:cB.split("\n").slice(0,12)},{subtitle:"全局蓝图"}));let cG=(0,w.tF)({requirement:a.requirement,promptTexts:aY,template:p,chapters:b9,spec:aE}),cI=await (0,ep.NP)({template:p,context:bZ,title:p.name});bZ.documentPlan=cI.plan,bZ.nodes.push(cI.node),(0,bi.fx)($,(0,bi.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:cI.node.outputSummary||"Agent 文档规划完成",details:cI.plan.chapters.map(a=>`${a.title}:${a.sections.length} 条细目`)},{subtitle:"Agent Document Planner",order:$.length})),G=b9.map(a=>a.id);let cJ=cG.targetChars||[...cG.chapterTargets.values()].reduce((a,b)=>a+b,0),cK=(0,bj.JP)({template:p,targetWords:cJ,requirement:a.requirement,materialFileCount:ae.length,evidenceCount:bp.length}),cL=(0,bk.C)({template:p,chapters:b9,targetWords:cJ,requirement:a.requirement,materialFileCount:ae.length,evidenceCount:bp.length,hasVeryLargeExplicitChapter:b9.some(a=>(a.sections||[]).filter(Boolean).length>=30),configuredChapterConcurrency:Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),strategy:cK}),cM=(0,bj.Zk)(cK);(0,ac.t5)(cJ),(0,bi.fx)($,(0,bi.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${cK.mode} 生成策略:章节审查 ${cK.enableChapterReview?"启用":"跳过"}、全局审查 ${cK.enableGlobalReview?`${cK.globalReviewSamplingRate&&cK.globalReviewSamplingRate<1?`抽检 ${Math.round((cK.globalReviewSamplingRate??1)*100)}%`:"启用"}`:"跳过"}、最终质量审查 ${cK.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${cK.enableDocumentBudgetExpansion?"启用":"跳过"}`,details:cL.triggers},{subtitle:"后台自动策略"})),b_.scopeConflicts.length>0&&(0,bi.fx)($,(0,bi.X5)({type:"validation",roleId:"scope-conflict-resolution",status:"success",message:`源级数据口径冲突已裁决(补疑/澄清修正文件权威最高):${b_.scopeConflicts.map(a=>a.resolution?`${a.scope} → ${a.resolution}`:`${a.scope} → 待人工复核`).join(";")}`,details:b_.scopeConflicts.flatMap(a=>a.values.map(a=>`来源「${a.sourceFile||"未知文件"}」取值 ${a.value}${a.unit}`))},{subtitle:"数据口径裁决"}));let cQ=as?"OUTLINE 章节":"模板章节",cS=(0,bi.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${ch} 章由 LLM 基于${cQ}、项目资料理解和证据规划小节,${cg} 章已由模板显式提供小节并跳过规划`,details:ci.length?[...ci]:void 0},{subtitle:"小节规划策略"}),cW=as?`;识别到 OUTLINE 章节 ${ap.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",cX=[..._.prompts.map(a=>`${a.category}|${a.roleId}|${a.id}|${a.name}|${a.bindingSource}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`),..._.unresolvedRoles.map(a=>`unresolved|${a}|项目角色配置中的提示词角色不存在`),..._.missingResourceRoles.map(a=>`missingResource|${a}|提示词角色未显式绑定资源`)];(0,bi.fx)($,(0,bi.X5)({type:"role_binding",roleId:V,status:"success",message:`已绑定项目资料 ${ae.length} 份、${_.prompts.length} 个有效提示词;写作 ${_.writerPrompts.length}、章节 ${_.chapterPrompts.length}、抽取 ${_.extractionPrompts.length};已自动抽取运行时规则 ${aW.executionSummary.length} 条${cW}`,details:[...cX,...aW.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:W,roleName:W})),(0,bi.fx)($,(0,bi.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${aW.executionSummary.length} 条,版本 ${aW.sourceHash}`,details:aW.executionSummary.length?[...aW.executionSummary,`必需表格:${aW.requiredTables.join("、")||"无"}`,`必含关键词:${aW.requiredKeywords?.join("、")||"无"}`,`禁含内容:${aW.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})),(0,bi.fx)($,(0,bi.X5)({type:"validation",roleId:"document-readiness",status:aG.ready?"success":"failed",message:"生成准备度:绑定资料已就绪",details:aG.diagnostics},{subtitle:"生成准备度检查"})),(0,bi.fx)($,cS),S();let cZ=Math.round(([...cG.chapterTargets.values()].reduce((a,b)=>a+b,0)||cG.targetChars||0)/Math.max(1,b9.length)),c1=Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),c3=cL.chapterConcurrency,c5=cL.reviewConcurrency;(0,bi.fx)($,(0,bi.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节流水线调度:${b9.length} 章全部同批并行生成,审查修复 ${c5} 路流水线(章节生成完立即进入审查,与后续章节生成重叠)`,details:[`有效章节数:${b9.length}`,`平均章节目标:${cZ} 字`,Number.isFinite(c1)&&c1>0?`章节并发来自 DOCUMENT_CHAPTER_CONCURRENCY=${Math.floor(c1)}`:`全部章节并行生成,在飞调用不设并发上限;修复轮次预算 ${cL.repairRoundBudget} 轮`]},{subtitle:"章节流水线策略"})),S();let c7=new z.jf(c5),c8=[],c9={remaining:cL.repairPoolBudget},da=[...bb].filter(Boolean).sort(),db=Date.now(),dc=da.length>0?(await (0,z.l$)(c4,async a=>bG(a,da,Math.min(bd,12),""),{kind:"search"})).flat():[];cM.evidence.searchQueries+=c4.length,cM.evidence.searchMs+=Date.now()-db;for(let b=0;b<b9.length;b+=c3){let d=b9.slice(b,b+c3);for(let f of(await Promise.all(d.map(async(d,f)=>{let g,h=b+f;(0,z.Te)(a.signal);let i=Date.now(),j=$.length;try{var k;let b,f,m,o;$.push((0,bi.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:_.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${h+1}/${b9.length}`,`二级小节:${d.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:h+1,total:b9.length,label:"章节生成"}},{subtitle:(0,t.GQ)(d.title),order:h})),S();let r=a.resumeChapters?.find(a=>a.id===d.id||a.title===d.title),y=r?.content?.trim(),B=r?.evidence?.length?[...r.evidence]:[],C=aj.chapterPlans.find(a=>a.chapterId===d.id||a.chapterTitle===d.title),D=C?Object.values(C.evidenceQueries).flat().filter(Boolean):[],E=d.queries.length>0?d.queries:[p.name,p.outputTitle,d.title],F=b8.get(d.id);if(b$&&F&&F.graphFiles.size>0){let a=[...bb],b=b=>a.includes(b)?b:a.find(a=>a.endsWith(b)||a.includes(b));for(let a of[...F.graphFiles].map(a=>b(a)||a).filter(a=>(0,bj.Tz)(c,a,bb))){let b=bF(a);if(b?.chunks?.length)for(let c of b.chunks)B.push({chapterId:d.id,filePath:b.file?.relativePath||a,score:5+(F.graphWorks.length+F.graphMethods.length)*.5,content:c.content,roleId:a6.get(a),processingType:a7.get(a),sectionTitle:c.sectionTitle,source:"graph-evidence"})}}let G=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title),H=dI(d,[...E,...D],[]),I=Date.now();$[j]=(0,bi.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:_.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 正在执行质量优先的章节检索${F?.graphFiles.size?`(图谱匹配 ${F.graphFiles.size} 个文件)`:""}`,details:H.map(a=>`检索:${a.slice(0,42)}`),progress:{current:h+1,total:b9.length,label:"证据检索"}},{subtitle:(0,t.GQ)(d.title),order:h}),S();let J=y?[]:[...bb].filter(Boolean).sort(),K=y?[]:bW?.evidenceByChapterId?.[d.id]||[];K.length>0&&B.push(...K);let L=[],M=(d.requiredFacts||[]).filter(a=>!!a&&!H.some(b=>b.includes(a)||a.includes(b))).map(a=>`${d.title} ${a}`),N=[...H,...M];if(J.length>0&&N.length>0){(0,z.Te)(a.signal);let b=await (0,z.l$)(N,async a=>bG(a,J,Math.min(bd,12),d.title),{kind:"search"});L.push(...b)}for(let a of(cM.evidence.searchQueries+=N.length,cM.evidence.searchMs+=Date.now()-I,L))B.push(...a.filter(a=>(0,bj.Tz)(c,a.filePath,a5)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:a6.get(a.filePath),processingType:a7.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));G&&J.length>0&&dc.length>0&&B.push(...dc.filter(a=>(0,bj.Tz)(c,a.filePath,a5)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:a6.get(a.filePath),processingType:a7.get(a.filePath),sectionTitle:a.sectionTitle,source:"basic-fact-cache"})));let O=y?[]:await (0,bl.$b)({manager:q,projectRoot:c,chapter:d,plan:C,profile:ai,scopedFilePaths:J,limitPerQuery:Math.min(bd,10),signal:a.signal}).catch(()=>[]);B.push(...O);let P=new Set((d.pinnedEvidenceFilePaths||[]).filter(Boolean)),T=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)&&B.push(...bO.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"})));let V=bJ.filter(a=>/招标|投标须知|评标办法|专用合同条款|投标人须知/u.test(`${a.filePath||""}${a.sectionTitle||""}`));for(let a of(/概况|工程|项目|总体|部署/u.test(d.title)&&V.length>0&&B.push(...V.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"}))),new Set([...P]))){if(!(0,bj.Tz)(c,a,a5))continue;let b=P.has(a),e=bF(a);e&&B.push(...e.chunks.map(a=>({chapterId:d.id,filePath:e.file.relativePath,score:1,content:a.content,roleId:a6.get(e.file.relativePath),processingType:a7.get(e.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let W=B.filter(a=>(0,bj.Tz)(c,a.filePath,bb));if(!y&&aQ.enabled&&aQ.allowProjectFacts){let b=await bK({config:aQ,chapterId:d.id,chapterTitle:d.title,sectionTitles:d.sections||[],runtimeRules:aW,localFacts:[...bY.project,...bY.schedule,...bY.quality,...bY.safety,...bY.resources,...bY.preciseFacts],signal:a.signal});br.queries.push(...b.queries),br.filteredCount+=b.filtered+b.evidence.length}let Y=y?[]:(0,bl.SK)({project:a9,chapter:d,plan:C,profile:ai,scopedFilePaths:J,highRisk:bo.highRisk});Y.length>0&&W.push(...bP(Y,bc)),W=bP(W,bc),bS.size>0&&(W=W.filter(a=>!bS.has(X(a))));let Z=W,aa=await (0,R.Mv)([(0,Q.Yx)(d)],Z.map(dG)),ab=dH(d,W,{preservePinned:!0,semantic:{similarity:aa,queryText:(0,Q.Yx)(d)}},cM);ab=c$(ab,b_.scopeConflicts),bR(ab,bc,`chapter:${d.id}:initial`);let ad=d.requiredFacts.filter(a=>!ab.some(b=>(0,u.Lk)(b,a))),ag=0,ah=F?[F.graphWorks.length?`图谱识别本章工程内容:${F.graphWorks.join("、")}`:"",F.graphMethods.length?`图谱识别本章施工方法:${F.graphMethods.join("、")}`:"",F.graphBoqItems.length?`图谱识别本章BOQ清单项(${F.graphBoqItems.length}项):${F.graphBoqItems.map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",F.gaps.length?`图谱识别本章资料缺口:${F.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",ak=function(a){let b=[];for(let c of a){if(!c.resolution)continue;let a=c.values.filter(a=>`${a.value}${a.unit}`!==c.resolution);if(0===a.length)continue;let d=a.map(a=>`${a.value}${a.unit}`).join("、");"high"===c.confidence?b.push(`${c.scope}必须统一为 ${c.resolution}(补疑/答疑/澄清类修正文件权威最高;${d} 已被修正,正文禁止出现)`):"medium"===c.confidence?b.push(`${c.scope}应统一为 ${c.resolution}(按资料来源优先级裁决;${d} 为败选值,正文避免使用)`):b.push(`${c.scope}参考口径为 ${c.resolution}(锚定较弱,请人工复核;${d} 不参与自动改写)`)}return b}(b_.scopeConflicts),al=cw.length>0?(()=>{let a=a0(d.title),b=cw.filter(b=>b.chapterTitle===a);return 0===b.length?"":["【本章必须显性响应的招标要求(逐条写入正文,零响应即评标失分)】",...b.map(a=>`- ${a.kind}:${a.item.text}`)].join("\n")})():"",am=[ah,al,ak.length?`【数据口径强制约束】${ak.join(";")}`:"",C?.writingGoal,C?.mustCover?.length?`本章必须覆盖:${C.mustCover.join("、")}`:"",C?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${C.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),an=dz(_,d);if(_.writerPrompts.length>0&&!an.primaryWriter)throw Error(`${(0,t.GQ)(d.title)} 写作主控提示词未进入章节生成阶段`);let ao=[an.promptTexts,aI].filter(Boolean).join("\n\n"),ap=an.promptDetails.length?an.promptDetails:["未绑定章节写作提示词"],aq=function(a){let b=a.profile||l,c=[],d=[a.template.name,a.template.outputTitle,a.chapter.title,a.chapter.purpose,...a.chapter.sections||[],...a.chapter.requiredFacts||[]].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||[])ax(c,b,{label:d,category:n(b,d)?.category||"required",required:!0,source:"template"});for(let d of a.chapter.sections||[])ax(c,b,{label:d,category:"section",required:!1,source:"section",queries:aw(d,[a.chapter.title])});for(let d of a.plan?.requiredContents||[])ax(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of a.plan?.evidenceNeeds||[])ax(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&&ax(c,b,{label:e.name,category:n(b,e.name)?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:aw(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)||aw(e.name,f?.aliases||[]).some(a=>d.includes(a))||a.chapter.requiredFacts.some(a=>a.includes(e.name)||e.name.includes(a)))&&ax(c,b,{label:e.name,category:f?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:aw(e.name,[g])})}for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&d.includes(a))&&ay(c,b,a,"profile","must_use"===a.usagePolicy,[d]);let f=av(a.requirement||"");if(f)for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&f.includes(a))&&ay(c,b,a,"requirement",!0,[f]);let g=av(a.promptTexts||"");if(g)for(let d of b.factFields)[d.name,...d.aliases].some(a=>a.length>=2&&g.includes(a))&&ay(c,b,d,"prompt","must_use"===d.usagePolicy,[a.chapter.title]);return c}({template:p,chapter:d,spec:aE,profile:aF,promptTexts:ao,requirement:a.requirement,plan:C?{requiredContents:C.mustCover,evidenceNeeds:Object.values(C.evidenceQueries).flat()}:void 0}),ar=aA({needs:aq,factsModel:bY,evidence:W,profile:aF,excludedEvidenceKeys:bS}),as=ar.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),at=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>eq(`${a.sectionTitle||""}${a.content||""}`).includes(eq(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:ab}),au=new Set(ab.map(a=>a.filePath)).size,aC=!!F&&(F?.graphFiles.size||0)>=8&&au>=6&&0===ad.length&&"low"===at.riskLevel,aD=function(a){let b=a.evidenceFileCount<=2;return a.scopedFileCount>80?b:"evidence_first"===a.suggestedStrategy||a.highRisk||a.missingFactsCount>0||a.requiredMissingNeedsCount>0||b||a.evidenceCount<8&&"low"!==a.riskLevel}({scopedFileCount:J.length,evidenceCount:ab.length,evidenceFileCount:au,suggestedStrategy:at.suggestedStrategy,highRisk:bo.highRisk,missingFactsCount:ad.length,requiredMissingNeedsCount:as.length,riskLevel:at.riskLevel});if(!aC&&aD&&J.length>0){let b=await bh({manager:q,projectRoot:c,chapter:d,scopedFilePaths:J,fileRoleByPath:a6,fileProcessingByPath:a7,requiredNeeds:[...new Set([...ad,...as])],highRisk:bo.highRisk||as.length>0,signal:a.signal}).catch(()=>[]);ag=b.length,b.length>0&&(W=dH(d,[...W,...bP(b,bc)],{preservePinned:!0},cM),W=bP(W,bc),bS.size>0&&(W=W.filter(a=>!bS.has(X(a)))),ab=dH(d,W,{preservePinned:!0},cM),ab=c$(ab,b_.scopeConflicts),bR(ab,bc,`chapter:${d.id}:deep`),ad=d.requiredFacts.filter(a=>!ab.some(b=>(0,u.Lk)(b,a)))),as=(ar=aA({needs:aq,factsModel:bY,evidence:W,profile:aF,excludedEvidenceKeys:bS})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label)}if(as.length>0&&J.length>0){let b=bP(await bh({manager:q,projectRoot:c,chapter:d,scopedFilePaths:J,fileRoleByPath:a6,fileProcessingByPath:a7,requiredNeeds:as,highRisk:!0,signal:a.signal}).catch(()=>[]),bc);b.length>0&&(W=dH(d,[...W,...b],{preservePinned:!0},cM),W=bP(W,bc),bS.size>0&&(W=W.filter(a=>!bS.has(X(a)))),ab=dH(d,W,{preservePinned:!0},cM),ab=c$(ab,b_.scopeConflicts),bR(ab,bc,`chapter:${d.id}:supplemental`),ad=d.requiredFacts.filter(a=>!ab.some(b=>(0,u.Lk)(b,a))),as=(ar=aA({needs:aq,factsModel:bY,evidence:W,profile:aF,excludedEvidenceKeys:bS})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}for(let a of(bR(ab,bc,`chapter:${d.id}:writer-input`),0===ab.length&&bu.push(`${d.title}:缺少可支撑正文的项目资料证据`),ad))bu.push(`${d.title}:事实需求未满足 ${a}`);let aG=(0,bi.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:bp.length>0?"success":"failed",message:`已检索/绑定 ${bp.length} 条证据`});bB<0?bB=(0,bi.fx)($,aG):$[bB]={...aG,order:$[bB]?.order??aG.order},S(),(0,z.Te)(a.signal);let aH=new Map,aJ=b=>{let e=(0,z.c6)({kind:"section",query:`${d.title} ${b}`.trim(),scopedFilePaths:J}),f=aH.get(e);if(f)return Promise.resolve(f);let g=(0,bm.Ym)(b,d,ab),h=g.filter(a=>af.AM.test(a.content)).length;return g.length>=4&&h>=1?(aH.set(e,g),Promise.resolve(g)):dJ({manager:q,projectRoot:c,chapter:d,sectionTitle:b,scopedFilePaths:J,fileRoleByPath:a6,fileProcessingByPath:a7,signal:a.signal}).then(a=>(aH.set(e,a),a))},aK=b=>{if(0===b.length||0===J.length)return Promise.resolve([]);let e=b.join(" ");return dJ({manager:q,projectRoot:c,chapter:d,sectionTitle:e,scopedFilePaths:J,fileRoleByPath:a6,fileProcessingByPath:a7,signal:a.signal}).catch(()=>[])},aL=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b)||`${a.sectionTitle||""} ${a.content}`.includes(b))).length,d=a.chapter.requiredFacts.length,e=a.chapter.requiredFacts.filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:d,evidence:ab,risk:bo});bq.push(aL);let aM=new Set(ab.map(a=>a.filePath)),aN=ab.reduce((a,b)=>a+b.content.length,0),aO=[...bo.highRisk?[`召回覆盖风险(${bo.riskReason||"切片未完全预加载"}):已加载 ${bo.loadedChunks}/${bo.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${K.length} 条`,`深召回证据:${ag} 条`,`事实覆盖:${aL.requiredFactCovered}/${aL.requiredFactTotal}`,`小节覆盖:${aL.sectionCovered}/${aL.sectionTotal}`];$[j]=(0,bi.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:_.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 已选取 ${ab.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aM.size} 份`,`上下文字符:${aN}`,`检索查询:${H.length} 组`,...aO],progress:{current:h+1,total:b9.length,label:"正文生成"}},{subtitle:(0,t.GQ)(d.title),order:h}),S(),cM.evidence.contextChars+=aN;let aP=(k=ar,az(k.flatMap(a=>a.facts))),aR=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)?bU:[],aS=(0,bm.hZ)({chapter:d,plan:void 0,spec:aE,roleFacts:T,evidence:ab,missingFacts:ad,indexedFacts:[...aR,...aP],resolvedFactNeeds:ar,factNeedsPrompt:function(a){let b=a.map(a=>{let b=a.facts.slice(0,5).map(b=>`${b.key||b.fieldName||a.need.label}=${aB(b.value)}${b.sourceFile?`(${e.basename(b.sourceFile)})`:""}`),c=a.facts.length?[]:(a.evidence||[]).slice(0,2).map(a=>`证据片段:${aB(a.content).slice(0,160)}${a.filePath?`(${e.basename(a.filePath)})`:""}`);return`- ${a.need.required?"必须":"相关"}|${a.need.label}|${a.status}${b.length||c.length?`:${[...b,...c].join(";")}`:":未在已解析资料中确认"}`});return b.length?`事实需求覆盖卡片:
|
|
128
128
|
${b.join("\n")}`:""}(ar)}),aT=(0,ep.up)({plan:cI.plan,chapter:d,context:bZ,evidence:ab});if(bZ.chapterTasks=[...(bZ.chapterTasks||[]).filter(a=>a.chapterId!==d.id),aT.task],bZ.nodes.push(aT.node),(0,c0.cN)(bZ),(0,bi.fx)($,(0,bi.X5)({type:"validation",roleId:`agent-chapter-task-${d.id}`,status:aT.task.ready||y?"success":"failed",message:aT.task.ready?aT.node.outputSummary||`${(0,t.GQ)(d.title)} 章节任务规划完成`:y?`${(0,t.GQ)(d.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:aT.node.outputSummary||`${(0,t.GQ)(d.title)} 章节任务规划完成`,details:aT.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:$.length})),S(A),!aT.task.ready&&!y)throw Error(`${(0,t.GQ)(d.title)} 章节任务未就绪:${aT.task.issues.map(a=>a.message).join(";")}`);let aU=[ao,(0,ep.bT)(aT.task)].filter(Boolean).join("\n\n"),aV={total:ar.length,satisfied:ar.filter(a=>"satisfied"===a.status).length,missing:ar.filter(a=>"missing"===a.status).length,lowConfidence:ar.filter(a=>"low_confidence"===a.status).length};for(let a of as)bu.push(`${d.title}:事实需求未确认 ${a}`);let aX=aE?.chapterRules.find(a=>a.id===d.id||a.title===d.title),aY=cG.chapterTargets.get(d.id)||1200,aZ=d.sections?.filter(Boolean).length||0,a$=/[、,,;;]/u.test(d.title),a_=function(a){let{budgetTarget:b,sectionCount:c,title:d,longformStrict:e}=a,f=/[、,,;;]/u.test(d),g=/工期|进度|质量|安全|危大|资源|人材机|保障|措施|重难点/u.test(d),h=/概况|结语|附录|说明/u.test(d),i=c>0?c*(f?720:g?900:780):g?5200:3600,j=e?h?2600:g?5200:3600:Math.min(1200,b),k=e?Math.min(Math.max(4200,b),c>=30?9800:f?8800:g?9200:7200):b,l=e?Math.max(j,b):Math.max(j,Math.min(b,i,k));return{budgetTarget:b,roundTarget:l,structureTarget:i,maxWords:Math.ceil(l*(a.longformStrict?1.12:1.18)),label:`章节预算约 ${b} 字,本轮生成约 ${l} 字,结构目标约 ${i} 字`}}({budgetTarget:aY,sectionCount:aZ,title:d.title,longformStrict:cG.longformStrict}),a1=Math.ceil(a_.maxWords*(cG.maxChars?1.05:1)),a2=cG.targetChars?Math.min(1800,Math.max(600,Math.floor(.45*a_.roundTarget))):1200,a3=a_.roundTarget,a4=Math.max(Math.min(aX?.minWords||0,a3),Math.min(aE?.dynamicChapterRule.minWordsPerChapter||0,a3),Math.floor(.68*a3),a2),a8=(0,bm.uV)(a4,a3),ba=aZ>0?cG.longformStrict?a3:Math.min(a3,Math.max(1800,a_.structureTarget)):a3,be=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),bf=process.env.DOCUMENT_SECTION_FIRST_GENERATION,bg=void 0!==bf&&0===Number(bf),bk=void 0!==bf&&0!==Number(bf),bn=a3>=6e3&&aZ>=4&&aZ<=be&&!a$,bw=!bg&&aZ>=2&&(aZ>be||a$||cG.longformStrict&&aZ>=6),bC=!bg&&!bw&&aZ>=2&&aZ<=be&&(bk||bn||cG.longformStrict),bD=0,bE=a=>{let b=Date.now();if(b-bD<3e3)return;bD=b;let c=a.filter(Boolean).join("\n\n");c.trim()&&S([...A,{id:d.id,title:d.title,content:`## ${d.title}
|
|
129
129
|
|
|
130
130
|
${c}`,evidence:ab,missingFacts:ad,sections:d.sections||[],tablePlans:d.tablePlans||[],inProgress:!0}])},bH=a=>{"complete"===a.phase&&a.partialSections&&bE(a.partialSections)};if(y)o=dx(y,d),o=await dn(o,bN),g=(0,bi.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"success",message:`${(0,t.GQ)(d.title)} 已复用已有章节正文:当前 ${(0,w.V7)(o)} 字,跳过 Writer,直接进入 Reviewer/Repairer/Final Gate`,details:[`有效证据:${ab.length} 条`,`事实需求:${aV.satisfied}/${aV.total} 已满足,缺失 ${aV.missing},低置信 ${aV.lowConfidence}`,"来源:resumeChapters/checkpointChapters"],progress:{current:h+1,total:b9.length,label:"复用章节"}},{subtitle:(0,t.GQ)(d.title),order:h}),$[j]=g,S(A);else{let e;if($[j]=(0,bi.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"running",message:bw?`${(0,t.GQ)(d.title)} 正在规划主题块并准备并发成稿`:bC?`${(0,t.GQ)(d.title)} 正在按小节并发成稿`:`${(0,t.GQ)(d.title)} 正在整章一次成稿`,details:bw||bC?[...ap,`有效证据:${ab.length} 条`,`事实需求:${aV.satisfied}/${aV.total} 已满足,缺失 ${aV.missing},低置信 ${aV.lowConfidence}`,a_.label,`生成上限约 ${a1} 字`,`模板细目:${d.sections?.length||0} 条`,bw?"细目较多,先由章级 Planner 聚类为主题块并语义合并,再按主题块全并发出稿,避免逐小节碎片化":"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...ap,`有效证据:${ab.length} 条`,`事实需求:${aV.satisfied}/${aV.total} 已满足,缺失 ${aV.missing},低置信 ${aV.lowConfidence}`,a_.label,`生成上限约 ${a1} 字`,`规划小节:${aZ} 个`,"首次生成必须覆盖章节结构、小节和事实,篇幅目标仅作为规划参考"],progress:{current:h+1,total:b9.length,label:bw?"主题块并发":bC?"小节并发":"整章成稿"}},{subtitle:(0,t.GQ)(d.title),order:h}),S(),bw){let c=(0,t.GQ)(d.title),g=cB.split("\n").filter(a=>a.includes(c)),i=g.length>0?g.join("\n"):cB,k=await U(()=>(0,bj.X6)(cM,`chapter-plan:${d.id}`,()=>bx({template:p,chapter:d,evidence:ab,projectContext:cc,requirement:a.requirement,roleContext:am,targetWords:ba,graphContext:aT.task.graphContext,blueprintContext:i,signal:a.signal,diagnostics:cM})));if(k.blocks.length>0){b=k,m=function(a,b){let c={};for(let d of a)for(let a of b.blocks){let b=a.subPoints.filter(a=>a.sources.some(a=>bt(a,d))||bt(a.title,d));if(b.length>0){c[d]=b.map(a=>a.title);break}}return c}(bs(d),k);let c=[ao,(0,ep.$8)(aT.task,k)].filter(Boolean).join("\n\n");f=c;let g=k.blocks.reduce((a,b)=>a+b.subPoints.length,0),i=k.blocks.reduce((a,b)=>a+b.subPoints.reduce((a,b)=>a+Math.max(0,b.sources.length-1),0),0),l=k.llmPlanned?k.llmFailure?`(部分主题块降级:${k.llmFailure.slice(0,80)})`:k.fallbackSections.length>0?`(${k.fallbackSections.length} 条细目由覆盖校验挂回主题块)`:"":`(LLM 规划未命中:${(k.llmFailure||"未返回有效结构").slice(0,80)},已按语义域确定性分组)`;$[j]=(0,bi.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} 已规划 ${k.blocks.length} 个主题块,正在按主题块并发成稿${l}`,details:[...ap,`有效证据:${ab.length} 条`,`输入细目 ${aZ} 条 → 主题块 ${k.blocks.length} 个(每块 2~4 个 H4 要点)`,`语义合并 ${i} 条细目,目录级 H4 合计 ${g} 个`,"单块 1200~2200 字,主题块间全并发,单节深度与整体耗时双优"],progress:{current:h+1,total:b9.length,label:"主题块并发"}},{subtitle:(0,t.GQ)(d.title),order:h});let n=$.find(a=>a.roleId===`agent-chapter-task-${d.id}`);n&&(n.message=`${aT.task.sections.filter(a=>a.ready).length}/${aT.task.sections.length} 条细目任务就绪(已规划为 ${k.blocks.length} 个主题块)`),S(A),e=await U(()=>(0,bj.X6)(cM,`chapter-planned-block-draft:${d.id}`,()=>(0,bm.nl)({template:p,chapter:d,evidence:ab,missingFacts:ad,promptTexts:c,projectContext:cF(d),requirement:a.requirement,roleContext:am,targetWords:ba,maxWords:a1,forbidDrawingImages:!1,factCoverageContext:aS,compactProjectContext:!0,scopedProjectContext:cE,sectionEvidenceProvider:aJ,onSectionProgress:bH,diagnostics:cM,signal:a.signal},k)))}}else e=bC?await U(()=>(0,bj.X6)(cM,`chapter-section-draft:${d.id}`,()=>(0,bm.N1)({template:p,chapter:d,evidence:ab,missingFacts:ad,promptTexts:aU,projectContext:cF(d),requirement:a.requirement,roleContext:am,targetWords:ba,maxWords:a1,forbidDrawingImages:!1,factCoverageContext:aS,projectRoot:c,modelName:(0,ac.$y)()?.model.name,materialContextHash:(0,z.c6)({materialFilePaths:ae,promptTexts:ao}),allowPartialResult:!1,compactProjectContext:!0,scopedProjectContext:cE,sectionEvidenceProvider:aJ,onSectionProgress:bH,diagnostics:cM,signal:a.signal}))):await U(()=>(0,bj.X6)(cM,`chapter-draft:${d.id}`,()=>(0,bm.eu)(p,d,ab,ad,aU,cF(d),a.requirement,am,{forbidDrawingImages:!1,minWords:a4,targetWords:a3,maxWords:a1,maxTokens:a8,factCoverageContext:aS,signal:a.signal,diagnostics:cM,supplementEvidenceProvider:aK,evidenceFloorChars:cL.evidenceFloorChars,evidenceCeilingChars:cL.evidenceCeilingChars})));if(!e&&(bw||bC)&&(bw&&(b=void 0,f=void 0,m=void 0),$[j]=(0,bi.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} ${bw?"主题块成稿未完成":"小节成稿未完成"},正在切换为整章紧凑备用成稿`,details:[`LLM 最近错误:${cM.llm.lastError||"成稿空响应或超时"}`,`有效证据:${ab.length} 条`],progress:{current:h+1,total:b9.length,label:"整章备用"}},{subtitle:(0,t.GQ)(d.title),order:h}),S(A),e=await U(()=>(0,bj.X6)(cM,`chapter-compact-fallback:${d.id}`,()=>(0,bm.eu)(p,d,ab,ad,aU,cF(d),a.requirement,am,{forbidDrawingImages:!1,minWords:Math.floor(.65*a4),targetWords:Math.floor(.75*ba),maxWords:a1,maxTokens:a8,factCoverageContext:aS,signal:a.signal,diagnostics:cM,supplementEvidenceProvider:aK,evidenceFloorChars:cL.evidenceFloorChars,evidenceCeilingChars:cL.evidenceCeilingChars}).catch(a=>{cM.llm.lastError=a instanceof Error?a.message:String(a)})))),!e&&ab.length>0){$[j]=(0,bi.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} LLM 多路径未返回有效正文,正在反馈失败原因重试紧凑整章生成`,details:[`LLM 最近错误:${cM.llm.lastError||"空响应或超时"}`,`证据条数:${ab.length}`],progress:{current:h+1,total:b9.length,label:"失败原因重试"}},{subtitle:(0,t.GQ)(d.title),order:h}),S(A);let b=[am,`【上一轮 LLM 生成失败,请先分析失败原因,再调整策略重新输出完整章节正文】失败原因:${cM.llm.lastError||"空响应或超时"}`].filter(Boolean).join("\n");e=await U(()=>(0,bj.X6)(cM,`chapter-lastretry:${d.id}`,()=>(0,bm.eu)(p,d,ab,ad,aU,cF(d),a.requirement,b,{forbidDrawingImages:!1,minWords:Math.floor(.55*a4),targetWords:Math.floor(.6*ba),maxWords:a1,maxTokens:a8,factCoverageContext:aS,signal:a.signal,diagnostics:cM,supplementEvidenceProvider:aK,evidenceFloorChars:cL.evidenceFloorChars,evidenceCeilingChars:cL.evidenceCeilingChars}).catch(a=>{cM.llm.lastError=a instanceof Error?a.message:String(a)})))}if(!e&&ab.length>0&&($[j]=(0,bi.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} LLM 全故障,正在用当前项目证据生成带阻断标记的可审查骨架草稿`,details:[`LLM 最近错误:${cM.llm.lastError||"空响应或超时"}`,`证据条数:${ab.length}`,"骨架草稿将带 [EVIDENCE_SKELETON] 标记并由 Review 门禁强制拦截,不允许静默通过"],progress:{current:h+1,total:b9.length,label:"证据骨架"}},{subtitle:(0,t.GQ)(d.title),order:h}),S(A),e=`[EVIDENCE_SKELETON]
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use strict";exports.id=6482,exports.ids=[6482],exports.modules={1358:(a,b,c)=>{c.d(b,{JV:()=>k,O7:()=>h,QP:()=>l,SR:()=>g,c$:()=>j,e$:()=>i,rj:()=>f});var d=c(22157);function e(a){return a.replace(/[\s,,.。::;;||()()《》<>【】"“”'‘’]/gu,"").toLowerCase()}function f(a){let b=a.replace(/[||]\s*(?:[||]\s*)+$/gu,"").replace(/(?:[。;;]|\d+\s*[..、])\s*(?:未尽事宜|其余(?:未尽)?事宜|其他(?:未尽)?事宜|注\s*[::]).*$/u,"").trim();return b=b.replace(/[、,,;;]+\s*$/u,"").trim(),/[||]/u.test(b)&&(b=b.split(/[||]/u)[0]?.trim()||b),b}function g(a){return!(/^(?:见|详见|按|执行|参见|依据).{0,16}(?:前附表|招标公告|招标文件|合同|协议书|通用条款|专用条款|图纸|清单|附件|资料)$/u.test(a)||/(?:^|[::]\s*)(?:见|详见|按|执行|参见|依据)[^。;;]{0,18}(?:前附表|招标公告|招标文件|合同|协议书|通用条款|专用条款|图纸|清单|附件|资料|补疑|答疑)[^。;;]{0,6}$/u.test(a)||/^见.{0,24}(?:招标范围|招标补疑|补疑|前附表|答疑)/u.test(a)||/^(?:合同协议书|通用条款|专用条款|招标文件|招标公告|投标人须知前附表|附件|资料)$/u.test(a.replace(/[()()\d一二三四五六七八九十、..\s]/gu,""))||/^(?:工程名称|项目名称|建设地点|建设规模|计划工期|质量标准|招标范围|合同估算价|工程概况|项目概况|项目内容)$/u.test(a)||/\|/u.test(a)||/^#+\s*/u.test(a)||/^[一二三四五六七八九十]+[、..]\s*\S{2,}[::]/u.test(a)||/^[((]\s*\d+[))]/u.test(a)&&/具备|证书|考核|资格|人员/u.test(a))&&(!(a.length<4)||!!/\d/u.test(a))}function h(a){let b=String(a.value||"").trim(),c=`${a.label}${b}`;return!(!/项目|工程|编号|地点|规模|范围|工期|质量|安全|资源|材料|设备|验收|\d/u.test(c)||!g(b)||/^(?:技术参数|精确参数)$/u.test(a.label))}function i(a,b){let c=new Set,g=[];for(let h of[...b.project,...b.schedule,...b.quality,...b.safety,...b.resources,...b.preciseFacts,...b.bills,...b.drawings,...b.rules,...b.specifications]){let b=f((0,d.lG)(h.value).replace(/\s+/gu," ").trim()),i=h.fieldName||h.key||h.fieldId||"资料事实",j=`${i}:${b}`;!b||c.has(j)||(c.add(j),g.push({label:i,value:b,sourceFile:h.sourceFile,status:!function(a,b){let c=e(a),d=e(b);if(!d||d.length<2||c.includes(d))return!0;{let a=b.split(/[;;。\n]|、|,|,/u).map(a=>e(a.replace(/^\s*\d+\s*[、..]\s*/u,""))).filter(a=>a.length>=4);if(a.length>=2&&a.some(a=>c.includes(a)))return!0}{let a=b.replace(/[、,,;;||\s]+/gu,"、").split("、").map(a=>e(a.replace(/(?:工程|项目|改造|维修|安装|施工|内容|资料|要求|标准)+$/u,""))).filter(a=>a.length>=2);if(a.length>=1&&(a.length>=2||(a[0]?.length??0)>=3)&&a.every(a=>c.includes(a)))return!0}return(b.match(/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年|万元|元|平方米|㎡|m²|立方米|m³|米|m|mm|cm|台|套|人|项|%|MPa|kPa|个|栋|层|标段|批|处|座|组|道|根|樘|扇)?/giu)||[]).some(a=>e(a).length>=2&&c.includes(e(a)))}(a,b)?"unplaced":"used",confidence:h.confidence}))}return g}function j(a,b={}){let c=a.filter(a=>"unplaced"===a.status&&h(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 k(a,b){let c=b.tables||[],d=[],f=e(a);for(let a of c){let b=a.headers.map(a=>a.replace(/\s+/gu,"").toLowerCase()),c=b.findIndex(a=>/项目名称|名称|清单项|分部分项|项目特征|工程内容|材料名称|设备名称/u.test(a)),g=b.findIndex(a=>/编码|编号|序号|项目编码/u.test(a)),h=b.findIndex(a=>/数量|工程量/u.test(a)),i=b.findIndex(a=>/单位/u.test(a));for(let b of a.rows){let j=c>=0&&b[c]||"",k=g>=0&&b[g]||"",l=h>=0&&b[h]||"",m=i>=0&&b[i]||"";if(!j&&!k)continue;let n=e(j),o=e(k),p=n.length>=3&&f.includes(n.slice(0,12))||o.length>=3&&f.includes(o.slice(0,8));d.push({itemCode:k.slice(0,50),itemName:j.slice(0,200),quantity:l.slice(0,50),unit:m.slice(0,20),sourceFile:a.sourceFile||"",placed:p})}}return d.sort((a,b)=>a.placed===b.placed?0:a.placed?1:-1)}function l(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}},11248:(a,b,c)=>{c.d(b,{K3:()=>f,zn:()=>g});let d=/[A-Za-z0-9%+-.,]/gu;function e(a){let b=a.charCodeAt(0);return b>=65281&&b<=65374?String.fromCharCode(b-65248):a}function f(a){return a.replace(d,e).replace(/\s+/gu,"").replace(/[×X**]/gu,"x").replace(/[%]/gu,"%").replace(/‰/gu,"permille").replace(/平方米|平方|平米|m²|㎡/giu,"m2").replace(/公顷|hm²/giu,"hm2").replace(/立方米|立方|m³/giu,"m3").replace(/升/gu,"l").replace(/毫升/gu,"ml").replace(/千米|公里/gu,"km").replace(/毫米/gu,"mm").replace(/厘米/gu,"cm").replace(/米/gu,"m").replace(/千克|公斤/gu,"kg").replace(/克/gu,"g").replace(/吨/gu,"t").replace(/人民币万元|万元人民币/gu,"万元").replace(/人民币元|元人民币|¥/gu,"元").replace(/日历天|自然日/gu,"天").replace(/工作日/gu,"工作天").replace(/个月/gu,"月").replace(/小时/gu,"h").replace(/分钟/gu,"min").replace(/兆帕/gu,"mpa").replace(/千帕/gu,"kpa").replace(/千牛/gu,"kn").replace(/牛/gu,"n").replace(/千瓦/gu,"kw").replace(/兆瓦/gu,"mw").replace(/瓦/gu,"w").replace(/千伏/gu,"kv").replace(/伏/gu,"v").replace(/毫安/gu,"ma").replace(/安培|安/gu,"a").replace(/赫兹/gu,"hz").replace(/摄氏度/gu,"℃").replace(/百分之\s*(\d+(?:\.\d+)?)/gu,"$1%").replace(/千分之\s*(\d+(?:\.\d+)?)/gu,"$1permille").replace(/直径\s*(\d+(?:\.\d+)?)/gu,"φ$1").replace(/[Φφ]\s*(\d+(?:\.\d+)?)(?:mm)?/giu,"φ$1").replace(/DN\s*(\d+)/giu,"dn$1").replace(/D\s*(\d+)(?=\b|[^a-z0-9])/giu,"d$1").replace(/\b(KN|MPA|KPA|KW|MW|KV|HZ|DN)\b/giu,a=>a.toLowerCase()).replace(/[,,、。;;::||()()【】\]《》<>"“”'‘’[]/gu,"").toLowerCase()}function g(a){let b=f(a),c=new Set;for(let a of b.matchAll(/\d+(?:\.\d+)?(?:m2|hm2|亩|m3|l|ml|mm|cm|km|m|kg|g|t|万元|亿元|元|天|工作天|月|年|h|min|%|permille|mpa|kpa|pa|kn|n|kn\/m2|kn\/m|kw|mw|w|kv|v|ma|a|hz|℃|台|套|件|个|根|只|组|项|处|座|栋|层|间|批|次|人|工日|人日)?|dn\d+|φ\d+(?:\.\d+)?|d\d+|c\d{2,}|hrb\d+|q\d{3}[a-z]?|m\d+|\d+(?:\.\d+)?x\d+(?:\.\d+)?(?:x\d+(?:\.\d+)?)?|[+-]?\d+\.\d{3}|\d+[:/]\d+/giu))c.add(a[0]);return[...c]}},23760:(a,b,c)=>{c.d(b,{AC:()=>r,Ai:()=>y,BV:()=>C,Ef:()=>x,Ff:()=>p,Fv:()=>K,K1:()=>I,KI:()=>at,M$:()=>aS,N1:()=>aK,NS:()=>L,S2:()=>aL,SN:()=>M,ST:()=>ax,Ty:()=>D,Yb:()=>au,Z2:()=>aE,Zu:()=>av,bM:()=>aN,f8:()=>G,gN:()=>E,hr:()=>aq,i0:()=>aF,iC:()=>A,ji:()=>aG,k0:()=>J,kQ:()=>aR,kw:()=>u,mR:()=>aP,qK:()=>R,qm:()=>ai,t4:()=>aQ,vY:()=>aD,wl:()=>w,xX:()=>aw,yd:()=>aM,yw:()=>Q});var d=c(8753),e=c(74329),f=c(37047),g=c(78217),h=c(11248),i=c(70208),j=c(61373),k=c(91977),l=c(23500),m=c(22157),n=c(52922),o=c(41991);function p(a){let b={blocking:0,important:0,minor:0};for(let c of a)b[function(a){let b="string"==typeof a?a:a.message;if("error"===("string"==typeof a?void 0:a.level))return"blocking";for(let a of e.gr)if(a.pattern.test(b))return a.severity;return"minor"}(c)]+=1;return b}function q(a,b){let c=a.replace(/[\][()`*_>#|{},。、“”‘’:;!?,.!?:;-]+/gu," ").replace(e.ug," ").trim();if(c.length<120)return;let d=c.match(/[A-Za-z][A-Za-z-]{2,}|[\p{Script=Han}]{2,}/gu)||[];if(d.length<30)return;let f=1,g=new Map;for(let a=0;a<d.length;a+=1){let c=d[a].toLowerCase();if(g.set(c,(g.get(c)||0)+1),a>0&&c===d[a-1].toLowerCase()?f+=1:f=1,f>=12)return{level:"error",message:`${b} 存在重复 token 退化输出`,suggestion:"请重新生成该小节,禁止保留连续重复的英文单词或无意义片段。"}}let h=[...g.entries()].sort((a,b)=>b[1]-a[1])[0];if(h&&h[1]>=25&&h[1]/d.length>=.42)return{level:"error",message:`${b} 存在重复 token 退化输出`,suggestion:`检测到“${h[0]}”异常高频重复,请重新生成该小节。`}}function r(a,b=[]){let c=[],d=q(a,"全文");for(let a of(d&&c.push(d),b)){let b=q(a.content,`章节“${a.title}”`);for(let d of(b&&c.push(b),a.sections||[])){let b=d.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=a.content.match(RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${b}\\s*\\n([\\s\\S]*?)(?=^#{3,4}\\s+|^##\\s+|$)`,"mu"));if(!e)continue;let f=q(e[1],`小节“${d}”`);f&&c.push(f)}}return c}function s(a){return a.severity&&a.repairability?a:/小节只有标题|空小节|小节内容补写未完成/u.test(a.message)?{...a,severity:"blocker",repairability:"local_deterministic",category:"structure",owner:"system"}:/不得出现|提示词要求|疑似提示词指令标题|项目污染|生成未完成/u.test(a.message)?{...a,severity:"blocker",repairability:"llm_repairable",category:"structure",owner:"system"}:/事实一致性冲突|projectFactOnly|核心事实/u.test(a.message)?{...a,severity:"error"===a.level?"blocker":"warning",repairability:"manual_review",category:"fact_consistency",owner:"user"}:/证据使用覆盖率偏低|BOQ|落位|高分模块|专业链|闭环/u.test(a.message)?"error"===a.level?{...a,severity:"blocker",repairability:"llm_repairable",category:"evidence_coverage",owner:"llm"}:{...a,severity:"warning",repairability:"not_repair_needed",category:"evidence_coverage",owner:"system"}:"error"===a.level?{...a,severity:"blocker",repairability:"llm_repairable",category:"structure",owner:"system"}:"warning"===a.level?{...a,severity:"warning",repairability:"not_repair_needed",category:"style",owner:"system"}:{...a,severity:"suggestion",repairability:"not_repair_needed",category:"style",owner:"system"}}function t(a){let b=s(a);return"blocker"===b.severity&&(!!("qingtian_review"===b.category||"error"===b.level&&"blocker"===b.severity&&/placeholder|source|style|format|structure/u.test(String(b.category||""))||/提示词要求|疑似提示词指令标题|适用性自相矛盾|不得出现/u.test(a.message))||!/目录与正文/u.test(a.message)&&(/配置要求缺少必要内容/u.test(a.message)?"error"===a.level:!!/小节内容补写未完成|空小节|小节只有标题|生成未完成/u.test(a.message)||!/生成后事实反查失败/u.test(a.message)&&(/工序规格冲突/u.test(a.message)?"error"===a.level:!!/项目特点、重点、难点分析 正文不足|项目主要施工内容 正文不足/u.test(a.message)||!(/规划小节正文过短/u.test(a.message)||/事实一致性冲突:项目名称/u.test(a.message))&&(/跨章一致性|专业评分不足|专业缺口|泛化套话|缺少关键线路|缺少材料验收|缺少风险识别|缺少进场/u.test(a.message)?"error"===a.level&&!/证据使用覆盖率偏低|章节逻辑依赖不足|文档交付评分报告/u.test(a.message):!(!e.hc.test(a.message)||/章节审查|最终质量审查|正文篇幅明显低于目标|正文存在空泛占位表达|结构化事实读取不足|正文可能未显式覆盖|仅包含文件类型和占位符|不在本次招标范围内/u.test(a.message))))))}function u(a){let b=[];for(let c of a.split(/^##\s+/gmu).slice(1)){let a=c.split(/\r?\n/u),d=(a.shift()||"").trim(),e=new Map;for(let b of a){let a=/^####\s+(.+)$/u.exec(b.trim());if(!a)continue;let c=a[1].replace(/^\d+(?:\.\d+)*\s*/u,"").replace(/\s+/gu,"");c.length<2||e.set(c,(e.get(c)||0)+1)}for(let[a,c]of e)if(!(c<2)&&(b.push({level:"error",message:`${d||"某章"} 存在同名小节重复:“${a}”出现 ${c} 次`,suggestion:"同主题内容应合并为一个小节;若确为不同方面,请重命名标题以区分内容,避免目录重复堆叠。"}),b.length>=6))return b}return b}let v=new Set(["如有","应用","措施","体系","管理","保障","要求","内容","工程","项目","施工"]);function w(a,b,c={}){let d=[],e=a.replace(/\s+/gu,""),f=c.semanticSimilarity?a.split(/\n/u).filter(a=>/^#{2,4}\s/u.test(a.trim())).map(a=>a.trim().replace(/^#{2,4}\s+/u,"").replace(/^\d+(?:\.\d+)*[\s、.]+/u,"").trim()).filter(Boolean).slice(0,80):[];for(let a of b.slice(0,8)){let b=a.replace(/^拟采用/u,"").replace(/^针对/u,"").replace(/^确保/u,"").replace(/[((][^))]*[))]/gu,"").replace(/的保障体系与措施$|管理体系与措施$|保障体系与措施$/u,"").trim().split(/[、,,;;及与和]+/u).map(a=>a.replace(/^[的了者]+/u,"").trim()).filter(a=>a.length>=2&&!v.has(a));if(0!==b.length&&!b.some(a=>e.includes(a))){if(c.semanticSimilarity&&f.length>0&&Math.max(...f.map(b=>c.semanticSimilarity(a,b)))>=.6)continue;d.push({level:"warning",severity:"warning",message:`招标文件评分条目“${a}”未在正文中出现(核心词:${b.join("/")})`,suggestion:"评审条目必须逐条承接为正文小节;请补写对应内容并确保核心关键词落位,避免评标失分。"})}}return d}function x(a,b){let c=(b||[]).flatMap(a=>(a.sections||[]).filter(a=>/新技术|新工艺|新材料|新设备|四新/u.test(a)));if(0===c.length)return[];let d=[],e=(0,m.Xl)(a,"四新",{fuzzy:!0}),f=e?(0,g.V7)(e):0;for(let b of[...new Set(c)]){let c=(0,m.Xl)(a,b,{fuzzy:!0});if(!c||200>(0,g.V7)(c)){if(f>=200)continue;d.push({level:"warning",severity:"warning",message:`大纲承诺小节“${b}”未在正文成稿(正文 ${c?(0,g.V7)(c):0} 字,要求不少于 200 字)`,suggestion:"请补写四新技术应用小节成稿,落位本项目适用的创新工艺、新材料与新设备应用计划。"})}}return d}function y(a,b,c){let d=c.some(a=>(a.content||"").split(e.A5).filter(a=>!/^#{1,6}\s+/u.test(a.trim())).filter(a=>!/^\s*\|/u.test(a)).filter(a=>!/^\s*:?-{3,}:?/u.test(a)).join("\n").replace(/[|*_`<>#\s]/gu,"").length>=30),f=a.map(s),g=/封面|页眉|页脚|附图|图片引用|CAD图|示意图|插图/u,h=f.filter(a=>"error"===a.level&&t(a)&&!g.test(a.message)),i=f.filter(a=>"error"===a.level&&g.test(a.message)),j=new Set(["structure","style","fact_consistency","qingtian_review"]),k=d?h.filter(a=>j.has(String(a.category||""))):h,l=[{key:"no_errors",label:"无阻断级校验错误",passed:0===k.length},{key:"basic_facts",label:"基础事实齐全",passed:b.project.length>0},{key:"source_traceability",label:"事实具备来源追踪",passed:[...b.project,...b.schedule,...b.quality,...b.safety].every(a=>!!a.sourceFile)},{key:"structured_precision",label:"结构化精确参数已使用",passed:b.preciseFacts.length<e.mu||a.every(a=>"error"!==a.level||!e.Ab.test(a.message))},{key:"chapter_evidence",label:"章节均具备证据",passed:c.every(a=>a.evidence.length>0)},{key:"no_missing_content",label:"无资料未提供章节",passed:c.every(a=>!a.content.includes("资料未提供"))},{key:"no_project_contamination",label:"无项目污染和事实一致性阻断",passed:!a.some(a=>"error"===a.level&&e.Uv.test(a.message)&&t(a))},{key:"numeric_consistency",label:"跨章数值口径与资料一致",passed:!a.some(a=>"error"===a.level&&/跨章一致性冲突|跨章一致性缺口|跨章一致性复核/u.test(a.message)&&t(a))},{key:"manual_postprocess",label:`封面/页眉页脚/附图等 ${i.length} 项由后期人工完善(不阻断导出)`,passed:!0,message:i.length?i.slice(0,5).map(a=>a.message).join(";"):void 0}];return{passed:0===k.length,blockingIssues:k,checklist:l}}function z(a){let b=[],c=a.split(e.A5);for(let a=0;a<c.length;a+=1){if(!e.w7.test(c[a]))continue;let d=[];for(;a<c.length&&e.w7.test(c[a]);)d.push(c[a]),a+=1;a-=1,d.some(a=>e.N3.test(a))&&b.push(d.join("\n"))}return b}function A(a){let b=[...a.matchAll(e.DB)],c=[];for(let d=1;d<b.length;d+=1){let f=b[d].index||0,g=b[d+1]?.index??a.length,h=a.slice(f,g);e.Ks.test(h)&&c.push({level:"warning",message:`第 ${d+1} 章可能重复出现基础信息`,suggestion:"如该信息与本章主题无关,建议合并到更合适的概况类章节,避免重复铺陈。"})}if(0===b.length)return c;let d=b[0].index||0,f=b[1]?.index??a.length,g=a.slice(d,f),h=g.search(e.jM);if(h<=0)return c;let i=g.slice(0,h).replace(e.Dc,""),j=[];for(let a of e.Y8)RegExp(`${a}\\s*[::]`,"u").test(i)&&j.push(a);return j.length>=3&&c.push({level:"warning",message:`基础信息表前重复叙述字段:${j.join("、")}`,suggestion:"基础信息已表格化时,表格前只保留一句引导语,不要重复逐项叙述名称、编号、范围、周期、质量等字段。"}),c}let B=["本节将详细介绍以下内容","本章将从以下几个方面进行阐述","综上所述,通过以上分析得出结论","以下内容将围绕该主题展开论述"];async function C(a){let b=[],c=a.split(/\n+/u).filter(a=>a.trim()&&!/^\s*(#{1,6}\s+|\||[-*+]\s|>)/u.test(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.trim()).filter(a=>a.length>=8),d=await (0,f.Mv)(c,[...B]),e=c.filter(a=>B.some(b=>d(a,b)>=f.Eh));e.length>0&&b.push({level:"warning",message:`存在模板化前缀或套话:${e.slice(0,3).join("、")}`,suggestion:"请删除“本节/本章将/以下从”等前缀,标题后直接进入对象、动作、措施、检查和闭环。"});let g=a.match(/OCR|提示词|绑定片段|后台|文件路径|识别错误|知识库证据|知识库已确认事实|通用兜底段落|兜底占位|兜底模板/giu);return g?.length&&b.push({level:"warning",message:`正文包含后台或资料处理话术:${[...new Set(g)].join("、")}`,suggestion:"建议改为正式文档语言,例如“资料文字不清”“资料口径不一致”“项目资料”,不得暴露后台处理过程。"}),b}function D(a){let b=[];for(let c of a){let a=(c.sections||[]).filter(Boolean),d=a.filter((b,c)=>a.indexOf(b)!==c);d.length>0&&b.push({level:"warning",message:`${c.title} 存在重复小节:${[...new Set(d)].join("、")}`,suggestion:"请保留用户需求、模板或显式大纲中真实需要的小节,删除重复项。"});let e=new Map;for(let b of a){let a=/劳动力|人员|工种/u.test(b)?"劳动力计划":/机械|设备|机具/u.test(b)?"机械设备计划":/材料|物资/u.test(b)?"材料物资计划":/冬季|雨季|高温|台风|大风/u.test(b)?"特殊气候措施":"";a&&e.set(a,[...e.get(a)||[],b])}for(let[a,d]of e)d.length>1&&b.push({level:"warning",message:`${c.title} 存在重复主题小节:${a}(${d.join("、")})`,suggestion:"请合并同类小节,只保留一个主表或主方案,其他位置采用引用或执行说明。"})}return b}function E(a){let b=e.HX.exec(a);if(!b)return[{level:"error",message:"缺少目录页",suggestion:"请在封面后生成“## 目录”,并按一级章父级、二级小节子级组织。"}];let c=0,d=0;for(let a of b[1].split(e.A5))e.ZT.test(a)&&e.EB.test(a)&&(c+=1,e.sr.test(a)&&(d+=1));return c>0&&0===d?[{level:"error",message:"目录二级小节未作为子级缩进",suggestion:"目录应为父子级导航:一级章单独成行,二级小节至少缩进两个空格列在所属章下方。"}]:[]}function F(a){return a.replace(/^#+\s*/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").replace(/^\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/[()]/gu,a=>"("===a?"(":")").replace(/[\s::.。;;,,、]+$/gu,"").replace(/的(?=保障体系|管理体系|控制体系|措施|方案|计划|要求)/gu,"").replace(/[\s()()::.。;;,,、-]/gu,"").trim()}function G(a){let b=function(a){let b=e.HX.exec(a);return b?b[1].split(e.A5).map(a=>/^\s*\d+\.\d+\s+(.+)$/u.exec(a.trim())).filter(a=>!!a).map(a=>F(a[1]||"")).filter(Boolean):[]}(a),c=[...a.matchAll(/^#{2,4}\s+(\d+\.\d+\s+.+)$/gmu)].map(a=>F(a[1]||"")).filter(Boolean);if(0===b.length||0===c.length)return[];let d=new Set(c),f=new Set(b),g=b.filter(a=>!d.has(a)),h=c.filter(a=>!f.has(a)),i=[];return g.length>0&&i.push({level:"error",message:`目录与正文不一致,目录小节未在正文中找到:${[...new Set(g)].join("、")}`,suggestion:"建议以最终清洗后的正文二级标题为准重新生成目录。"}),h.length>0&&i.push({level:"error",message:`目录与正文不一致,正文小节未进入目录:${[...new Set(h)].join("、")}`,suggestion:"建议重新生成目录,确保正文二级小节完整进入目录。"}),i}function H(a){let b=a.replace(/^#{1,6}\s+/u,"").replace(/^\s*\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").trim(),c=(0,i.GQ)(b),d=/^(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用).*|(?:如|若|如果)(?:涉及|不涉及|适用|不适用).*|.*(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成).*|.*(?:按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|注意事项))\s*$/u;return d.test(b)||d.test(c)}function I(a){let b=[...a.matchAll(/^#{2,6}\s+(.+)$/gmu)].map(a=>(0,i.GQ)(a[1]||"")).filter(H);return b.length>0?[{level:"error",message:`正文存在疑似提示词指令标题:${[...new Set(b)].slice(0,8).join("、")}`,suggestion:"请删除或改写为正式施工组织设计小节标题,目录也不得收录该类标题。"}]:[]}function J(a){let b=[],c=a.split(e.A5).map(a=>a.trim()).filter(a=>a&&!/^#{1,6}\s+/u.test(a)&&!/^\s*\|/u.test(a)&&!/^<div\b/iu.test(a)),d=c.find(a=>F(a).length<=1);for(let a of(d&&b.push({level:"warning",message:`正文存在孤立字或残缺段落:${d}`,suggestion:"请删除残缺行或重新生成所在小节。"}),c.filter(a=>/[,、;:和与在为对将]$/u.test(a)||/(通过|包括|如下|主要包括|验收|合格后|复查合格后|设计风|确认后|具体如下|应符合|不少于|以及|且应|不得少于)$/u.test(a)).slice(0,3)))b.push({level:"warning",message:`正文存在疑似截断句:${a}`,suggestion:"请补完整该段落,避免以连接词、逗号、冒号或无句号的动作词结尾。"});let f=c.find(a=>a.length>380);f&&b.push({level:"warning",message:`正文存在过长段落:${f}`,suggestion:"请拆分为多段或表格,改善导出版式和可读性。"});let g=c.find(a=>/\S.+(?:\s|[。;;])(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)\S.+(?:\s|[。;;])(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)\S/u.test(a)&&!/\b\d+\.\d+\s*(?:mm|cm|m|㎡|m2|kg|t|MPa|kPa|V|KV|kV|A)\b/iu.test(a));g&&b.push({level:"error",message:`正文存在列表项粘连同一行:${g.slice(0,120)}`,suggestion:"有序列表和无序列表必须逐项独占一行,确保 Markdown/PDF/DOCX 正确排版。"});let h=a.match(/PDF\s*第\s*|(?:PDF\s*)?第\s*\d+\s*(?:[-—至到~~]\s*\d+)?\s*页|(?:图纸|清单|资料|文件|[\u4e00-\u9fa5A-Za-z0-9()()、·-]{2,24}(?:工程)?)\s*(?:[((]?\s*|(?:共|多达|约|合计)\s*)\d+\s*页|[\u4e00-\u9fa5A-Za-z0-9、及与和]{2,24}\s*(?:共|多达|约|合计)\s*\d+\s*页|\d+\s*页\s*(?:图纸|资料|文件|装饰|土建|加固|给排水|电气|智能化|消防)|\d+\s*页/iu)?.[0];h&&b.push({level:"error",message:`正文残留资料页码元信息:${h}`,suggestion:"正式投标正文应引用招标文件、施工图设计文件、工程量清单和相关专业图纸,不写 PDF 页码或资料页数。"});let i=c.find(a=>/仅作为内部事实提取依据|正式正文不得引用文件名|后台事实|内部事实/u.test(a));return i&&b.push({level:"error",message:`正文残留内部处理说明:${i.slice(0,120)}`,suggestion:"正式投标正文不得出现内部事实抽取、后台处理或文件名引用限制说明。"}),b}function K(a){let b=[],c=a.search(/^##\s+第[一二三四五六七八九十百千万\d]+章\s+/mu),d=[...(c>=0?a.slice(c):a.replace(/^##\s+目录[\s\S]*?(?=^##\s+第[一二三四五六七八九十百千万\d]+章\s+)/mu,"")).matchAll(/^##\s+(.+)$/gmu)].map(a=>(a[1]||"").trim()).filter(a=>"目录"!==a&&!/^第[一二三四五六七八九十百千万\d]+章\s+/u.test(a)&&!/^附录/u.test(a)).map(a=>(0,i.GQ)(a));d.length>0&&b.push({level:"error",message:`正文存在非正式章二级标题:${[...new Set(d)].slice(0,8).join("、")}`,suggestion:"正文 ## 只允许用于“第X章”正式章标题;章内小节必须使用 ### X.Y。"});let e=[...a.matchAll(/^##\s+(第[一二三四五六七八九十百千万\d]+章\s+.+)$/gmu)];for(let c=0;c<e.length;c+=1){let d=e[c].index||0,f=e[c+1]?.index??a.length,g=[...a.slice(d,f).matchAll(/^###\s+\d+\.\d+\s+(.+)$/gmu)].map(a=>(0,i.GQ)(a[1]||"")),h=(0,i.GQ)((e[c][1]||"").replace(/^第[一二三四五六七八九十百千万\d]+章\s*/u,""));1===g.length&&F(g[0])===F(h)&&b.push({level:"error",message:`章节只有一个且与章名同名的小节:${e[c][1]}`,suggestion:"应拆分为多个业务小节,不能用章标题重复作为唯一二级小节。"})}return b}function L(a){a=(0,j.BJ)(a);let b=[];{let c=a.split(e.A5);for(let a=1;a<c.length;a+=1){let d=(c[a]||"").trim(),f=(c[a-1]||"").trim();d&&!/^\|/u.test(d)&&d.endsWith("|")&&1===(d.match(/\|/gu)||[]).length&&!/^#{1,6}\s/u.test(d)&&e.w7.test(f)&&b.push({level:"error",message:`表格断行残片:${d}`,suggestion:"该行是表格数据行整列丢失的残片:合并回所属表格行并补齐缺失列,或删除该残行。"})}}/按审批确认执行/u.test(a)&&b.push({level:"error",message:"表格存在自动兜底污染内容:按审批确认执行",suggestion:"正式投标表格不得使用通用兜底短语,应保留真实业务内容或删除该行。"});let c=[];for(let b of a.matchAll(/\|\s*信息项\s*\|\s*内容\s*\|/gu)){let d=a.slice(b.index||0),f=[];for(let a of d.split(e.A5)){if(f.length>0&&!e.w7.test(a))break;f.push(a)}c.push(f.join("\n"))}let d=c.filter(a=>/项目名称|招标人|建设单位|发包人|建设地点|招标范围|计划工期|合同估算价|质量标准/u.test(a)).length;d>1&&b.push({level:"error",message:`项目基础信息类表格重复:${d} 处`,suggestion:"项目名称、招标人、建设地点、工期、质量等基础信息只能集中输出一次。"});let f=a.match(/^\|\s*---\s*\|\s*---\s*\|\s*$/gmu)||[];for(let c of(f.length>60&&b.push({level:"error",message:`表格分隔线异常重复:${f.length} 行`,suggestion:"请修复表格规范化逻辑,禁止把数据行拆成多个碎表。"}),z(a))){let a=c.split(e.A5).filter(a=>e.w7.test(a));if(a.length<2)continue;if(!e.N3.test(a[1]||"")){b.push({level:"error",message:`表格分隔线位置不规范:${a[0]||""}`,suggestion:"Markdown 表格必须紧跟表头输出分隔线,例如 |---|---|,中间不得插入正文或其他管道行。"});continue}let d=a.map(a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>a.trim())),f=d[0]||[],g=f.filter(a=>/^(?:列|字段|内容|备注)\d+$/u.test(a));g.length>0&&b.push({level:"error",message:`表格存在泛化表头:${g.join("、")}`,suggestion:"正式投标表格必须使用业务字段表头,不得出现“列5/字段1/内容2”等临时表头。"});let h=f.length;d.find((a,b)=>1!==b&&a.length!==h)&&b.push({level:"error",message:`表格列数不一致:${f.join("、")}`,suggestion:"请统一表头和数据行列数;不应通过自动填充兜底词修补表格。"});let i=d.slice(2),j=i.find(a=>a.some(a=>""===a));j&&b.push({level:"error",message:`表格存在空单元格:${f.join("、")}(“${j[0]||""}”行)`,suggestion:"正式交付表格不得出现空单元格;缺失数据应从资料补齐或按业务口径填写具体值,不得留空。"});let k=i.find(a=>a.some((b,c)=>(!!/^(?:—+|-+|-|\/|N\/A|n\/a|待定|待补充|待确认|待查|待补|若干|暂无|无数据)$/u.test(b)||!!/^约\d/u.test(b))&&!(/^(?:合计|小计|总计|累计)/u.test(a[0]||"")&&/^(?:—+|-+)$/u.test(b)&&c>0)));if(k){let a=/^(?:合计|小计|总计|累计)/u.test(k[0]||""),c=k.find((b,c)=>(!!/^(?:—+|-+|-|\/|N\/A|n\/a|待定|待补充|待确认|待查|待补|若干|暂无|无数据)$/u.test(b)||!!/^约\d/u.test(b))&&!(a&&/^(?:—+|-+)$/u.test(b)&&c>0))||"";b.push({level:"error",message:`表格存在占位符单元格:${f.join("、")}(“${k[0]||""}”行“${c}”)`,suggestion:"正式交付表格不得用“—/若干/约/待定”等占位或模糊表达代替具体数据;应从资料补齐具体数值。"})}}return b}function M(a){let b=[],c=a.split(e.A5),d=[];for(let a=0;a<c.length;a+=1){if(!e.w7.test(c[a]))continue;let b=a,f=[];for(;a<c.length&&e.w7.test(c[a]);)f.push(c[a]),a+=1;a-=1;let g=f.filter(a=>e.N3.test(a)).length;if(0===g)continue;let h=(f[0]||"").trim(),i=h.startsWith("|")?h.slice(1):h,j=(i.endsWith("|")?i.slice(0,-1):i).split("|").map(a=>a.split("**").join("").trim()).filter(a=>a.length>0);d.push({headerKey:j.join("|"),headerText:j.join("、"),start:b,end:a,dividerCount:g})}let f=new Map;for(let a of d)f.set(a.headerKey,(f.get(a.headerKey)||0)+1);let g=[...f.entries()].filter(([,a])=>a>=3);if(g.length>0){let a=d.find(a=>f.get(a.headerKey)===g[0]?.[1])?.headerText||"";b.push({level:"warning",message:`同主题表格重复堆叠:${g.length} 组相同表头出现 3 次及以上(如:${a})`,suggestion:"同一主题表格全文只出现一次,禁止拆成多张碎表重复堆叠凑数;请合并同类表格或删除重复内容。"})}let h=0;for(let a=1;a<d.length;a+=1){let b=d[a-1],e=d[a];b&&e&&c.slice(b.end+1,e.start).every(a=>""===a.trim())&&(h+=1)}for(let a of d)a.dividerCount>=2&&(h+=a.dividerCount-1);return h>=2&&b.push({level:"warning",message:`表格连续堆叠:${h} 处相邻表格无正文分隔`,suggestion:"表格之间应有正文引导叙述,禁止连续堆叠多张表格凑数。"}),b}function N(a){return a.split(e.A5).filter(a=>!/^#{1,6}\s+/u.test(a.trim())).filter(a=>!/^\s*\|/u.test(a)).filter(a=>!/^\s*:?-{3,}:?/u.test(a)).filter(a=>!/^<\/?div\b/iu.test(a.trim())).join("\n").replace(/[|*_`<>-]/gu,"").replace(e.ug,"").length}function O(a){let b=[...a.matchAll(/^(#{3,4})\s+(.+)$/gmu)];return b.map((c,d)=>{let e=c[1].length,f=(c.index||0)+c[0].length,g=b.slice(d+1).find(a=>a[1].length<=e),h=g?.index??a.length,i=(c[2]||"").trim();return{rawTitle:i,title:F(i),level:e,body:a.slice(f,h)}}).filter(a=>a.title&&(3===a.level||4===a.level))}function P(a,b,c,d,f){let g=N(d),h=e.w7.test(d)&&d.split(e.A5).some(a=>e.N3.test(a)),i=N(d.split("\n").filter(a=>!e.w7.test(a)&&!e.N3.test(a)).join("\n").replace(/^#{1,6}\s+.+$/gmu,""));if(/\[WRITER_MISSING_SECTION\]|Writer 未完成/u.test(d))return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 小节内容补写未完成:${b}`};if(/【本小节生成未达标,需重新生成】/u.test(d))return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 小节生成未达标:${b}`};if(/项目基本信息|基本信息|工程概况|项目概况|工程概述|项目概述/u.test(b)&&(h||g>=40)||/^附录[一二三四五六七八九十A-Z\d]/u.test(b)&&h)return;let j=/清单|配置|汇总|一览|明细|计划|进度|节点|安排/u.test(b)||/表[^,。;:\s]{0,6}$/u.test(b);if(!(h&&j&&Math.max(0,d.split(e.A5).filter(a=>e.w7.test(a)&&!e.N3.test(a)).length-1)>=2)){if(h&&i<20)return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:f?`${a} 只有标题或表格无正文:${b}`:`${a} 小节只有标题或表格无正文:${b}`};if(!(g>=80)||!(i>=20)){if(0===g)return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 空小节:${b}`};if(g<180)return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"too_short",planned:f,message:`${a} ${f?"规划小节":"正文小节"}正文过短:${b}`}}}}function Q(a,b){let c=[],d=new Set;for(let e of b){let b=e.content?.trim()?e.content:a;for(let a of(e.sections||[]).filter(a=>!/^(?:施工概况|施工流程|施工方法)$/u.test(F(a))&&!/^附录/u.test(a.trim()))){let f=F(a),g=function(a,b){let c=O(a).filter(a=>(function(a,b){let c=F(a),d=F(b);if(!c||!d)return!1;if(c===d||c.includes(d)||d.includes(c))return!0;let e=/项目概况|主要施工方案|新技术新材料|工程重点难点|重点难点|危大工程|保障体系|安全保障|工期|质量|安全生产|应急预案|资源|人材机|材料|机械|劳动力|进度|关键线路|交通疏导|成品保护|深化设计|验收/gu,f=new Set(c.match(e)||[]),g=new Set(d.match(e)||[]),h=[...f].filter(a=>g.has(a)).length;return h>=2||1===Math.min(f.size,g.size)&&1===h&&16>=Math.max(c.length,d.length)})(a.rawTitle,b));return c.length<=1?c[0]:c.map(a=>({item:a,gap:P("",b,a.level,a.body,!0),textLength:N(a.body)})).sort((a,b)=>{let c=a.gap&&"empty"===a.gap.reason?1:0,d=b.gap&&"empty"===b.gap.reason?1:0;return c!==d?c-d:b.textLength-a.textLength})[0]?.item}(b,a),h=`${e.title}|${f}|planned`;if(!g){c.push({chapterTitle:e.title,sectionTitle:a,level:3,bodyLength:0,reason:"missing_planned_section",planned:!0,message:`${e.title} 缺少规划小节:${a}`}),d.add(h);continue}let i=P(e.title,a,g.level,g.body,!0);i&&c.push(i),d.add(h)}for(let a of O(b)){let b=`${e.title}|${a.title}|actual`,f=`${e.title}|${a.title}|planned`;if(d.has(b)||d.has(f))continue;let g=P(e.title,a.title,a.level,a.body,!1);g&&"empty"===g.reason&&c.push(g),d.add(b)}}return c}function R(a,b){return Q(a,b).filter(a=>"empty"===a.reason||"missing_planned_section"===a.reason).map(a=>({level:"error",message:a.message,suggestion:"missing_planned_section"===a.reason?"必须补充该规划小节正式正文,不得缺节导出。":"必须补充与该小节相关的材料事实和必要内容,达到正文完整度要求。"}))}function S(a){return`${a.fieldName||a.key} ${(0,m.lG)(a.value)}`.replace(/\s+/gu," ").trim()}function T(a){let b=new Set;for(let c of[/\d+\s*日历天(?!内)/gu,/(?:计划工期|合同工期|总工期|工期|施工周期)[^\n。;;]{0,12}\d+\s*天/gu,/(?:计划工期|合同工期|总工期|工期|施工周期)[^\n。;;]{0,12}\d+\s*(?:个月|月)/gu])for(let d of a.matchAll(c)){let a=d[0].match(/\d+\s*(?:日历天|天|个月|月)/u)?.[0]?.replace(/\s+/gu,"");a&&b.add(a)}return[...b]}let U=/占地|用地|地下|地上|办公|生活|附属|辅助|绿化|道路|广场|门卫|配电|泵房|锅炉房|车库|车棚|岗亭|传达|警卫|样板房|售楼|门房|单栋|各栋|楼层|每层|单层|架空|雨棚|堆场/u,V=/办公区|生活区|加工区|施工区|堆场|门卫|配电|泵房|锅炉房|车库|车棚|岗亭|传达|警卫|样板房|售楼|门房|地下室|楼层|单层|每层|架空|雨棚/u,W=/暂列|暂估|费率|税率|利润|规费|安全文明|措施费|人工费|材料费|机械费|管理费|暂定/u,X=["地下建筑面积与地上建筑面积的分项指标","配套用房与附属用房的建筑面积","占地面积与绿化面积的用地指标"],Y=["总建筑面积的总体规模指标","建设规模的总量数值"],Z=["暂列金额与暂估价的子项费用","人工费与材料费的分项费用"],$=["合同估算价的总金额口径","投资估算的总体金额"];async function _(a){return(0,o.A)({prototypes:[...X],negativePrototypes:[...Y],embedDocuments:a})}async function aa(a){return(0,o.A)({prototypes:[...Z],negativePrototypes:[...$],embedDocuments:a})}async function ab(a,b,c,d,e,f){let g=[],h=[],i=new Set,j=RegExp(`(?:${b.source})(?:[^\\n。;;,,]{0,14}?)(\\d{2,}(?:[.,]\\d+)?\\s*万?)\\s*(${c.source})`,"giu"),k=[...a.matchAll(j)],l=f?k.filter(b=>{let c=b[0].slice(0,b[0].indexOf(b[1])),f=a.slice(Math.max(0,(b.index??0)-16),b.index??0);return!(d&&d.test(c)||e&&e.test(f))}).map(b=>{let c=b[0].slice(0,b[0].indexOf(b[1])),d=a.slice(Math.max(0,(b.index??0)-16),b.index??0);return{index:b.index??0,context:`${d}${c}`.replace(/\s+/gu,"").slice(-24)}}):[],m=l.length>0?await f(l.map(a=>a.context)):[],n=new Set(l.filter((a,b)=>m[b]).map(a=>a.index));for(let c of k){let f=c[1].replace(/[,,]/gu,"").replace(/\s+/gu,""),j=c[2],k=c[0].slice(0,c[0].indexOf(c[1])),l=a.slice(Math.max(0,(c.index??0)-16),c.index??0);if(d&&d.test(k)||e&&e.test(l)||n.has(c.index??0)){h.push({value:f,unit:j,scope:c[0].slice(0,k.length).replace(/\s+/gu,""),context:`${l}${k}`.replace(/\s+/gu,"").slice(-24)});continue}let m=c[0].match(b)?.[0]||"",o=`${f}|${j}`;!f||i.has(o)||(i.add(o),g.push({value:f,unit:j,scope:m}))}return{entries:g,skipped:h}}function ac(a,b){return ab(a,ae,af,U,V,b).then(({entries:b})=>{let c=b.find(a=>"建筑面积"===a.scope.replace(/^总/u,""));return/占地|用地/u.test(a)?c:b[0]})}function ad(a){let b=a.value.replace(/[,,]/gu,"").trim(),c=/^([\d.]+)万/u.exec(b),d=c?1e4*Number(c[1]):Number(b);return Number.isFinite(d)?/亿元/u.test(a.unit)?1e8*d:/万元/u.test(a.unit)?1e4*d:d:NaN}let ae=/(?<![地上地下门卫室值班室配电室配电房泵房水泵房锅炉房公厕车库车棚岗亭传达室警卫室样板房售楼处门房])总?建筑面积|总?建设规模/u,af=/㎡|m²|m2|平方米/u,ag=/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价|工程总投资|总投资|工程造价/u,ah=/万元|亿元/u;async function ai(a,b,c,d,e){let f=[],g=await _(e),h=await aa(e),i=a=>c?.find(b=>b.kind===a&&b.resolution&&"low"!==b.confidence)?.resolution,j=a=>{let b=/(\d+(?:\.\d+)?)\s*(㎡|m²|m2|平方米|万元|亿元)/u.exec(a);return b?{value:b[1],unit:b[2]}:void 0},k=i("duration")??b.schedule.map(S).find(a=>/\d+\s*(?:日历天|天|个月|月)|计划工期|合同工期/u.test(a)),l=b.quality.map(S).find(a=>/质量|合格|优良/u.test(a));if(k){let b=T(k)[0],c=T(a.split("\n").filter(a=>!/^\s*\|/u.test(a.trim())).join("\n")),d=b?c.filter(a=>a!==b&&/日历天/u.test(a)):[];b&&d.length>=2&&f.push({level:"warning",message:`跨章一致性冲突:正文出现与资料工期不一致的表述 ${d.slice(0,6).join("、")}`,suggestion:`请统一使用资料中的工期口径:${k}`})}l&&!/质量标准|质量目标|合格|优良/u.test(a)&&(d&&[...d.values()].some(a=>a.contentNeeds.quality)||f.push({level:"error",message:"跨章一致性缺口:正文未稳定体现资料中的质量目标",suggestion:`请在工程概况、质量保证和验收相关章节统一体现:${l}`}));let m=i("area"),n=b.project.map(S).filter(a=>/建设规模|建筑面积/u.test(a)),o=await Promise.all(n.map(a=>ac(a,g))),p=m??n.find((a,b)=>void 0!==o[b]);if(p){let c=m?j(m):await ac(p,g),{entries:d,skipped:e}=await ab(a,ae,af,U,V,g);if(c){let a=d.filter(a=>ad(a)!==ad(c));a.length>=1&&f.push({level:"error",message:`跨章一致性冲突:正文出现与资料建设规模不一致的表述 ${a.slice(0,6).map(a=>`${a.value}${a.unit}`).join("、")}`,suggestion:`请统一使用资料中的建设规模口径:${p.slice(0,80)}`})}if(e.length>0){let a=[m?`建筑总量裁决值:${m}`:"",...b.project.map(S).filter(a=>/建设规模|建筑面积|占地/u.test(a)).slice(0,3)].filter(Boolean);f.push({level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规模口径复核:正文 ${e.slice(0,3).map(a=>`“${a.context.slice(-14)}${a.value}${a.unit}”`).join("、")} 等 ${e.length} 处数值与口径词之间混入子项/专项口径词,需核对口径归属`,suggestion:`依据项目规模事实卡逐处核对该数值的口径归属(${a.join(";")||"无可用事实卡,以绑定资料原文为准"}):与事实卡对应口径一致的数值保留原样,口径错位或数值不一致的数值改正为事实卡对应口径值,不得把子项/专项口径数值改成建筑总量数值。`})}}let q=i("cost"),r=q??b.project.map(S).find(a=>/合同估算|投资估算|最高投标限价|招标控制价|总投资|工程造价/u.test(a));if(r){let b=q?j(q):(await ab(r,ag,ah,W,void 0,h)).entries[0],c=(await ab(a,ag,ah,W,void 0,h)).entries;if(b){let a=c.filter(a=>ad(a)!==ad(b));a.length>=1&&f.push({level:"error",message:`跨章一致性冲突:正文出现与资料估算价不一致的表述 ${a.slice(0,6).map(a=>`${a.value}${a.unit}`).join("、")}`,suggestion:`请统一使用资料中的估算价口径:${r.slice(0,80)}`})}}return f}let aj=/找平层|抹灰层|防水层|保温层|结合层|垫层|面层|粘结层|隔热层|隔离层/gu,ak=/铺设|施工|浇筑|粘贴|铺贴|涂抹|完成|进行|待|设置|铺装|挂网|喷涂|灌注/u,al=["施工过程与工序动作的先后描述","铺设浇筑完成后再进行的工序"],am=["结构层的厚度与配比参数","找平层厚20毫米的规格"];async function an(a){return(0,o.A)({prototypes:[...al],negativePrototypes:[...am],embedDocuments:a})}async function ao(a,b){let c=[],d=[...a.matchAll(aj)],e=[],f=(a,b)=>e.some(([c,d])=>a<d&&b>c),g=[],h=(a,d,h,i,j,k)=>{let l=[...a.matchAll(h)];for(let h of"first"===i?l:[...l].reverse()){let l=d+(h.index??0),m=l+h[0].length;if(f(l,m))continue;let n="first"===i?a.slice(0,h.index??0):a.slice((h.index??0)+h[0].length);if(!ak.test(n)){b&&n.trim()&&g.push({key:`${j}|${l}|${m}`,gap:n}),e.push([l,m]),c.push({layer:j,span:[l,m],raw:h[0],kind:k});return}}};for(let b=0;b<d.length;b+=1){let c=d[b],e=c[0],f=c.index??0,g=f+e.length,i=d[b+1]?.index,j=void 0===i?Math.min(a.length,g+90):i,k=a.slice(g,j),l=b>0?(d[b-1].index??0)+d[b-1][0].length:Math.max(0,f-40),m=a.slice(l,f);h(k,g,/(\d+:\d+(?:\.\d+)?)/gu,"first",e,"ratio"),h(m,l,/(\d+:\d+(?:\.\d+)?)/gu,"last",e,"ratio"),h(k,g,/(\d+(?:\.\d+)?)\s*mm/gu,"first",e,"thickness"),h(m,l,/(\d+(?:\.\d+)?)\s*mm/gu,"last",e,"thickness")}if(b&&g.length>0){let a=await b(g.map(a=>a.gap)),d=new Set(g.filter((b,c)=>a[c]).map(a=>a.key));return c.filter(a=>!d.has(`${a.layer}|${a.span[0]}|${a.span[1]}`))}return c}async function ap(a,b){let c=[],d=new Set;for(let e of(await ao(a,b))){let a="ratio"===e.kind?e.raw.match(/(\d+:\d+(?:\.\d+)?)/u)?.[1]:void 0,b="thickness"===e.kind?e.raw.match(/(\d+(?:\.\d+)?)/u)?.[1]:void 0,f=b?Number(b):void 0,g=`${e.layer}|${a||""}|${f??""}`;d.has(g)||(d.add(g),c.push({layer:e.layer,ratio:a,thickness:f}))}return c}async function aq(a,b,c){let d=[],e=await an(c),f=[...b.specifications,...b.quality,...b.preciseFacts,...b.bills].map(S).join("\n"),g=await ap(f,e);if(0===g.length)return d;let h=new Map;for(let a of g){let b=h.get(a.layer)||[];b.push(a),h.set(a.layer,b)}let i=await ap(a,e),j=new Set;for(let[a,b]of h){let c=[...new Set(b.map(a=>a.ratio).filter(Boolean))],e=[...new Set(b.map(a=>a.thickness).filter(a=>Number.isFinite(a)))];for(let b of i.filter(b=>b.layer===a)){if(1===c.length&&b.ratio&&b.ratio!==c[0]){let e=`ratio|${a}|${b.ratio}`;j.has(e)||(j.add(e),d.push({level:"error",message:`工序规格冲突:正文${a}配比 ${b.ratio} 与资料口径 ${c[0]} 不一致`,suggestion:`请将${a}配比统一为资料口径 ${c[0]},禁止改写资料规格。`}))}if(1===e.length&&Number.isFinite(b.thickness)&&Math.abs(b.thickness-e[0])>=1){let c=`thickness|${a}|${b.thickness}`;j.has(c)||(j.add(c),d.push({level:"error",message:`工序规格冲突:正文${a}厚度 ${b.thickness}mm 与资料口径 ${e[0]}mm 不一致`,suggestion:`请将${a}厚度统一为资料口径 ${e[0]}mm。`}))}}}return d}async function ar(a,b,c){let d=await _(c),e=await aa(c),f=await an(c),g=[...a.specifications,...a.quality,...a.preciseFacts,...a.bills].map(S).join("\n"),h=new Map;for(let a of(await ap(g,f))){let b=h.get(a.layer)||{ratios:[],thicknesses:[]};a.ratio&&!b.ratios.includes(a.ratio)&&b.ratios.push(a.ratio),Number.isFinite(a.thickness)&&!b.thicknesses.includes(a.thickness)&&b.thicknesses.push(a.thickness),h.set(a.layer,b)}let i=new Map;for(let[a,b]of h)(1===b.ratios.length||1===b.thicknesses.length)&&i.set(a,{ratio:1===b.ratios.length?b.ratios[0]:void 0,thickness:1===b.thicknesses.length?b.thicknesses[0]:void 0});let j=a=>b?.find(b=>b.kind===a&&b.resolution&&"low"!==b.confidence)?.resolution,k=a=>{let b=/(\d+(?:\.\d+)?)\s*(㎡|m²|m2|平方米|万元|亿元)/u.exec(a);return b?{value:b[1],unit:b[2]}:void 0},l=j("area"),m=a.project.map(S).filter(a=>/建设规模|建筑面积/u.test(a)),n=await Promise.all(m.map(a=>ac(a,d))),o=l??m.find((a,b)=>void 0!==n[b]),p=j("cost"),q=p??a.project.map(S).find(a=>/合同估算|投资估算|最高投标限价|招标控制价|总投资|工程造价/u.test(a));return{specTargets:i,scaleTarget:o?l?k(l):await ac(o,d):void 0,costTarget:q?p?k(p):(await ab(q,ag,ah,W,void 0,e)).entries[0]:void 0,scaleGapGate:d,costGapGate:e,actionGate:f}}async function as(a,b){let c=[];for(let d of(await ao(a,b.actionGate))){let a=b.specTargets.get(d.layer);if(a){if("ratio"===d.kind&&a.ratio){let b=d.raw.match(/(\d+:\d+(?:\.\d+)?)/u)?.[1];b&&b!==a.ratio&&c.push({start:d.span[0],end:d.span[1],replacement:d.raw.replace(/(\d+:\d+(?:\.\d+)?)/u,a.ratio),detail:`${d.layer}配比 ${b}→${a.ratio}`})}if("thickness"===d.kind&&Number.isFinite(a.thickness)){let b=Number(d.raw.match(/(\d+(?:\.\d+)?)/u)?.[1]);Number.isFinite(b)&&Math.abs(b-a.thickness)>=1&&c.push({start:d.span[0],end:d.span[1],replacement:d.raw.replace(/(\d+(?:\.\d+)?)/u,String(a.thickness)),detail:`${d.layer}厚度 ${b}mm→${a.thickness}mm`})}}}let d=async(b,d,e,f,g,h,i)=>{if(!b)return;let j=RegExp(`(?:${d.source})(?:[^\\n。;;,,]{0,14}?)(\\d{2,}(?:[.,]\\d+)?\\s*万?)\\s*(${e.source})`,"giu"),k=[...a.matchAll(j)],l=i?k.filter(b=>{let c=b[0].slice(0,b[0].indexOf(b[1])),d=a.slice(Math.max(0,(b.index??0)-16),b.index??0);return!(g&&g.test(c)||h&&h.test(d))}).map(b=>{let c=b[0].slice(0,b[0].indexOf(b[1])),d=a.slice(Math.max(0,(b.index??0)-16),b.index??0);return{index:b.index??0,context:`${d}${c}`.replace(/\s+/gu,"").slice(-24)}}):[],m=l.length>0?await i(l.map(a=>a.context)):[],n=new Set(l.filter((a,b)=>m[b]).map(a=>a.index));for(let d of k){let e=d[0].slice(0,d[0].indexOf(d[1])),i=a.slice(Math.max(0,(d.index??0)-16),d.index??0);if(g&&g.test(e)||h&&h.test(i)||n.has(d.index??0))continue;let j={value:d[1].replace(/[,,]/gu,"").replace(/\s+/gu,""),unit:d[2]};if(ad(j)===ad(b))continue;let k=(d.index??0)+d[0].indexOf(d[1]),l=k+d[1].length;c.some(a=>a.start<l&&a.end>k)||c.push({start:k,end:l,replacement:b.value,detail:`${f} ${j.value}${j.unit}→${b.value}${j.unit}`})}};if(await d(b.scaleTarget,ae,af,"建设规模",U,V,b.scaleGapGate),await d(b.costTarget,ag,ah,"估算价",W,void 0,b.costGapGate),0===c.length)return{content:a,fixedCount:0,details:[]};c.sort((a,b)=>b.start-a.start);let e=a;for(let a of c)e=e.slice(0,a.start)+a.replacement+e.slice(a.end);return{content:e,fixedCount:c.length,details:c.map(a=>a.detail)}}async function at(a,b,c,d){let e=await ar(b,c,d);if(0===e.specTargets.size&&!e.scaleTarget&&!e.costTarget)return{fixedCount:0,details:[]};let f=0,g=[];for(let b of a){let a=await as(b.content,e);a.fixedCount>0&&(b.content=a.content,f+=a.fixedCount,g.push(...a.details))}return{fixedCount:f,details:g}}async function au(a,b,c,d){let e=await ar(b,c,d);if(0===e.specTargets.size&&!e.scaleTarget&&!e.costTarget)return{markdown:a,fixedCount:0,details:[]};let f=await as(a,e);return{markdown:f.content,fixedCount:f.fixedCount,details:f.details}}async function av(a){let{closedLoopBlocks:b}=await (0,n.Pm)(a),c=Math.max(6,Math.ceil((0,g.V7)(a)/1500));return b>=c?[]:[{level:"warning",message:`可落地性闭环句式密度不足:全文 ${b} 段完整闭环句式,未达每 1500 字 1 段(目标 ${c} 段)`,suggestion:"在措施类段落中补齐“责任岗位 + 检查频次 + 整改闭环”三要素齐全的闭环句式:同一自然段内同时出现岗位(如项目经理/质检员/安全员)、频次(每日/每周/不少于X次)与闭环(整改/复查/销项)。"}]}function aw(a,b){let c=[],d=/(?:三检制|三级教育|三级管理|5S|24\s*小时|每日|每周|每月|一次|两次)/gu;for(let e of a){let a=[...new Set(e.content.match(d)||[])];if(a.length<3)continue;let f=b?.get(e.title);f&&(f.closedLoop||c.push({level:"warning",message:`${e.title} 管理措施数字较多但缺少执行闭环:${a.slice(0,8).join("、")}`,suggestion:"这些管理数字可以保留,但需要补充责任主体、检查频次、记录台账、整改复查和闭环要求。"}))}return c}function ax(a,b){let c=/(?:加强组织领导|严格执行规范|落实责任制度|确保工程质量|强化过程管理|提高思想认识|完善管理体系|形成闭环管理)/gu,d=[];for(let e of a){if((e.content.match(c)||[]).length<6)continue;let a=b?.get(e.title);a&&(a.concrete||d.push({level:"error",message:`${e.title} 存在较多未绑定项目事实和工序控制点的泛化套话`,suggestion:"请替换为结合资料事实、施工对象、工序控制、验收资料和整改闭环的专业内容。",chapterId:e.id}))}return d}function ay(a){return[...a.project,...a.schedule,...a.quality,...a.safety,...a.resources,...a.preciseFacts,...a.bills,...a.drawings,...a.rules,...a.specifications].map(S).join("\n")}function az(a,b,c){let d=`${a} ${b}`;if(/(?:工日|人日|次|台|套|个|人|层|间|批|项|处|座|栋|根|只|组|件|块|片|面|条|道|樘|扇|盏|节|段)$/u.test(a)||/三检制|三级|5S|24\s*小时|每日|每周|每月|一次|两次|责任制|制度/u.test(d)||/暂列金额|暂估价|报价|单价|合价|综合单价|税率|增值税|预留金/u.test(d)||/^\d+(?:\.\d+)?(?:月|年)$/u.test(a)&&/开工|竣工|日期|计划|年|月/u.test(b))return"soft";let e=c??b;return/(?:天|工作天|月|年)$/u.test(a)&&/总工期|计划工期|合同工期|日历天|施工周期/u.test(e)||/(?:万元|亿元|元)$/u.test(a)&&/最高投标限价|招标控制价|合同估算价|投资估算|报价|金额|人民币/u.test(e)||/(?:m2|hm2|亩|㎡|m²|平方米)$/u.test(a)&&/建设规模|总建筑面积|总用地面积|总占地面积/u.test(e)?"scope":/(?:工程量|清单|建设规模|建筑面积|长度|材料|设备|规格|型号).{0,24}(?:m²|㎡|m3|m³|米|吨|套|台|个|项|%)/u.test(d)?"spec":/GB\s*\d|JGJ\s*\d|CJJ\s*\d|ISO\s*\d|GB\/T|CECS\s*\d|DL\s*\d|YB\s*\d|SH\s*\d|SJ\/T\s*\d|CJJ\/T\s*\d|DB\s*\d/u.test(d)?"soft":/标准|规范|编号/u.test(d)?"spec":"soft"}function aA(a){let b=[];for(let c of(0,h.zn)(a)){if(/^\d+\.\d+$/u.test(c))continue;let d=(0,h.K3)(c),e=a.indexOf(c);if(e<0){let b=/^\d+(?:\.\d+)?/u.exec(c)?.[0];e=b?a.indexOf(b):-1}if(e<0)continue;let f=a.lastIndexOf("\n",e-1)+1,g=a.indexOf("\n",e),i=a.slice(f,g<0?a.length:g);if(/^\s*\|/u.test(i.trim()))continue;let j=a.slice(Math.max(0,e-36),Math.min(a.length,e+c.length+36)),k=a.slice(Math.max(0,e-16),e);b.push({token:c,normalizedToken:d,context:j,prefix:k})}return b}function aB(a){let{markdown:b,factsModel:c,scopeSuspicious:d,specSuspicious:e,softSuspicious:f}=a,g=[],h=[...new Set(d)],i=[...new Set(e)],j=[...new Set(f)];return h.length>=1&&g.push({level:"error",message:`生成后事实反查失败:正文出现资料事实主表中未找到的总量口径数字 ${h.slice(0,8).join("、")}`,suggestion:"总量口径数字(工期/金额/建设规模)必须与资料一致;请删除或改写为资料确认的口径,禁止编造。"}),i.length>=2&&g.push({level:"warning",message:`生成后事实反查提示:正文出现资料事实主表中未找到的规格明细数字 ${i.slice(0,8).join("、")}`,suggestion:"建议复核这些规格是否来自管理制度、规范要求或资料事实;如无依据,改为定性管理要求。"}),j.length>=6&&g.push({level:"warning",message:`生成后事实反查提示:正文出现较多未在资料事实主表中反查到的管理数字 ${j.slice(0,10).join("、")}`,suggestion:"请确认这些管理数字属于通用制度、规范要求或项目资料事实;如无依据,建议改为定性管理要求。"}),/质量目标|质量标准/u.test(b)&&c.quality.length>0&&!c.quality.some(a=>b.includes((0,m.lG)(a.value).slice(0,18)))&&g.push({level:"warning",message:"生成后事实反查提示:正文质量目标表述未明显匹配质量事实主表",suggestion:"请使用资料中的质量目标原文或等价表述。"}),g}let aC=/(?:天|工作天|日历天|月|年|万元|亿元|元|m2|hm2|亩|㎡|m²|平方米)$/u;function aD(a,b){let c=ay(b);if(80>(0,g.V7)(c))return[];let d=(0,h.K3)(c),e=[],f=[],i=[];for(let b of aA(a)){let{token:a,normalizedToken:c,context:g,prefix:h}=b,j=az(a,g,h);"scope"!==j||d.includes(c)||e.push(a),"spec"!==j||d.includes(c)||f.push(a),"soft"!==j||d.includes(c)||i.push(a)}return aB({markdown:a,factsModel:b,scopeSuspicious:e,specSuspicious:f,softSuspicious:i})}async function aE(a,b,c){let d,e=ay(b);if(80>(0,g.V7)(e))return[];let f=(0,h.K3)(e),i=aA(a),j=i.filter(a=>aC.test(a.token));if(j.length>0){let a=await c.scopeClassifier.batchClassify(j.map(a=>`${a.token} ${a.context}`.slice(0,160)));d=new Map,j.forEach((b,c)=>d.set(b.token,a[c]||"other"))}let k=[],l=[],m=[];for(let a of i){let{token:b,normalizedToken:c,context:e,prefix:g}=a,h=az(b,e,g);if(d&&aC.test(b)){let a=d.get(b)||"other";"scope"===h?h="scope"===a?"scope":"soft":"scope"===a&&(h="scope")}"scope"!==h||f.includes(c)||k.push(b),"spec"!==h||f.includes(c)||l.push(b),"soft"!==h||f.includes(c)||m.push(b)}return aB({markdown:a,factsModel:b,scopeSuspicious:k,specSuspicious:l,softSuspicious:m})}function aF(a,b){let c=[],d=["factuality","structure","depth","executable","specificity","consistency"];for(let f of a){var e;let a=f.content;if(800>(0,g.V7)(a))continue;let h=(e=f.title,/概况|工程|项目/u.test(e)?{min:5,focus:"事实依据、项目特异性"}:/部署|总体|组织/u.test(e)?{min:6,focus:"组织结构、可执行闭环、跨章一致性"}:/进度|工期/u.test(e)?{min:6,focus:"进度结构、工期一致性、纠偏机制"}:/质量/u.test(e)?{min:6,focus:"质量深度、验收复验、资料闭环"}:/安全|文明|危大|风险/u.test(e)?{min:6,focus:"风险覆盖、应急响应、检查整改"}:/资源|材料|设备|劳动力/u.test(e)?{min:5,focus:"资源依据、进场调配、进度支撑"}:{min:4,focus:"事实依据、专业深度、可执行性"}),i=b?.get(f.title);if(!i)continue;let j=2*d.filter(a=>i.dimensions[a]).length;if(j<h.min){let a=d.filter(a=>!i.dimensions[a]).join("、")||h.focus;c.push({level:"error",message:`${f.title} 专业评分不足:${j}/12,薄弱维度:${a}`,suggestion:`请按章节任务卡补齐${h.focus},并写出资料依据、实施流程、专业控制点和检查整改闭环。`,chapterId:f.id})}}return c}function aG(a,b){let c=[{re:/进度|工期/u,needKey:"schedule",need:/关键线路|穿插|纠偏|资源保障|节点|动态调整/u,message:"进度工期章节缺少关键线路、穿插施工或纠偏保障内容"},{re:/质量/u,needKey:"quality",need:/材料.*验收|复验|隐蔽验收|整改.*复验|质量.*资料|检验批/u,message:"质量章节缺少材料验收复验、隐蔽验收或整改复验闭环"},{re:/安全|文明|危大|风险/u,needKey:"safety",need:/风险|临电|消防|应急|检查.*整改|文明施工|人员|设备/u,message:"安全文明章节缺少风险识别、现场控制或应急检查闭环"},{re:/资源|材料|设备|劳动力/u,needKey:"resource",need:/进场|验收|调配|保管|供应|投入计划/u,message:"资源章节缺少进场、验收、调配或保管计划"},{re:/施工|工艺|技术|方案/u,needKey:"construction",need:/准备|流程|工艺|控制点|验收|交底/u,message:"施工技术章节缺少施工准备、工艺流程、控制点或验收要求"}],d=[];for(let e of a){if(600>(0,g.V7)(e.content))continue;let a=b?.get(e.title);if(a)for(let b of c)b.re.test(e.title)&&(a.contentNeeds[b.needKey]||d.push({level:"error",message:`${e.title}:${b.message}`,suggestion:"请按专业任务卡定向补写该章节,补齐可实施的控制措施、资料依据和闭环要求。",chapterId:e.id}))}return d}function aH(a,b){return!!(/万元|元|报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(`${a} ${b}`)||/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂|页码|目录/u.test(b)||/^\d+$/.test(a)&&10>Number(a)||/之日起.{0,8}天内|天内.{0,10}(?:发出|提交|通知|回复|答复|完成|开工|竣工|报送|支付|更换)|天以上|天及以上|‰|暂扣|履约保证金|通过后.{0,6}天|因发包人原因|因承包人原因|未能按时|逾期|违约金/u.test(b))}function aI(a,b){let c=0;for(let d of a)b.includes(d.replace(e.ug,""))&&(c+=1);return c}let aJ=/日历天|个月|㎡|m²|m3|m³|MPa|kPa|kN|GB\/T|GB|JGJ|ISO|DN|φ|Φ|米\/秒|天$/u;async function aK(a,b,c=[]){let d=[],g=a.replace(e.ug,""),h=function(a){let b=new Set;for(let c of a)for(let a of c.evidence||[]){if(/bill_of_quantities|boq/u.test(`${a.roleId||""}`))continue;let c="string"==typeof a.content?a.content:"";for(let a of c.matchAll(e.No)){let d=a[0].trim();if(!d||/^\d{4}\s*年$/u.test(d)||/^\d{1,2}\s*月$/u.test(d))continue;let e=a.index||0,f=c.slice(Math.max(0,e-40),e+d.length+40);aH(d,f)||b.add(d)}}return[...b]}(c),i=h.length>=e.mu?h:function(a){let b=new Set;for(let c of a.preciseFacts){if("bill_of_quantities"===c.roleId)continue;let a=`${c.processingType||""} ${c.roleId} ${c.sourceFile}`;if(!e.FM.test(a)&&"precise_fact"!==c.roleId)continue;let d=`${c.key} ${c.fieldName||""} ${c.value}`;for(let a of d.matchAll(e.No)){let c=a[0].trim();aH(c,d)||b.add(c)}}return[...b]}(b),j=aI(i,g);i.length>=e.mu&&j/i.length<e.tg&&d.push({level:"warning",message:`可靠精确参数使用不足:${j}/${i.length}`,suggestion:"请将资料中可靠的规格、参数、数量、时间、比例和标准编号写入对应章节;商务金额、单价、税率、预留金不得写入正文。"});let k=function(a){let b=[...a].sort((a,b)=>a.localeCompare(b,"zh")),c=b.filter(a=>aJ.test(a)),d=b.filter(a=>!aJ.test(a));return[...c.slice(0,8),...d.slice(0,2)].slice(0,10)}(i);if(k.length>=6){let b=aI(k,g),c=k.filter(a=>!g.includes(a.replace(e.ug,"")));if(c.length>0&&b/k.length<.5){let d=a.split(/[。;;|]/u).map(a=>a.trim()).filter(a=>a.length>=6&&a.length<=160).slice(0,300);if(d.length>0){let a=await (0,f.Mv)(c.slice(0,10),d);c=c.filter(b=>!d.some(c=>a(b,c)>=.6)),b=k.length-c.length}}if(b/k.length<.5){let a=c.slice(0,3);d.push({level:"error",message:`可靠精确参数使用不足:关键参数抽查 ${b}/${k.length}${a.length?`(缺失如 ${a.join("、")})`:""}`,suggestion:"请将资料中的关键工程参数(工期、面积、强度等级、材料规格、规范编号等)写入正文对应章节,不得因参数总量达标而遗漏核心参数。"})}}return b.bills.length>0&&!e.pP.test(a)&&d.push({level:"error",message:"正文未体现结构化数据资料",suggestion:"请从表格、列表或明细中提取对象、单位、数量、规格和关键参数补入对应章节。"}),b.drawings.length>0&&!e._U.test(a)&&d.push({level:"error",message:"正文未体现设计/方案/说明类资料",suggestion:"请从设计、方案或说明资料中提取对象、流程、节点、做法、配置、规则和标准要求。"}),d}async function aL(a,b,c){let d=[],e=c.tables||[];if(0===e.length)return d;let g=a.replace(/\s+/gu,"").toLowerCase(),h=0,i=0,j=[];for(let a of e){let b=a.headers.map(a=>a.replace(/\s+/gu,"").toLowerCase()),c=b.findIndex(a=>/^(?:项目名称|名称|清单项名称|清单项|分部分项(?:工程)?名称|项目特征)/u.test(a)),d=b.findIndex(a=>/^(?:项目编码|编码|编号)/u.test(a)),e=b.findIndex(a=>/^工程量$|^数量$/u.test(a));for(let b of a.rows){h+=1;let a=c>=0?(b[c]||"").replace(/\s+/gu,""):"",f=d>=0?(b[d]||"").replace(/\s+/gu,""):"",k=e>=0?(b[e]||"").replace(/\s+/gu,""):"";if(!a&&!f){let c=b.findIndex(a=>/^\d{10,12}$/u.test(a)||/^[A-Z]{1,3}\d{8,}$/u.test(a));c>=0&&(f=b[c].replace(/\s+/gu,""),a=(b[c+1]||"").replace(/\s+/gu,""))}let l=a.length>=3?a.slice(0,Math.min(a.length,16)):"",m=f.length>=3?f.slice(0,Math.min(f.length,12)):"",n=l&&g.includes(l),o=m&&g.includes(m);n||o?i+=1:a.length>=3&&j.push({name:a,quantity:k})}}if(0===h)return d;let k=new Set;if(j.length>0&&i/h<.6){let b=a.split(/[。;;|]/u).map(a=>a.trim()).filter(a=>a.length>=6&&a.length<=160).slice(0,300),c=[...new Set(j.map(a=>a.name))].slice(0,30);if(b.length>0&&c.length>0){let a=await (0,f.Mv)(c,b);for(let d of c)b.some(b=>a(d,b)>=.6)&&k.add(d)}}let l=i+j.filter(a=>k.has(a.name)).length,m=j.filter(a=>!k.has(a.name)),n=l/h,o=m.length>0?`未落位项(共${m.length}项):${m.slice(0,30).map(a=>`${a.name.slice(0,40)}${a.quantity?` ${a.quantity}`:""}(未落位)`).join(";")}${m.length>30?` 及其他${m.length-30}项(同类项按已列名称分组归并补写)`:""}`:"";return n<.6&&d.push({level:"error",message:`清单项落位不足:${l}/${h} 项(${Math.round(100*n)}%)${o?`。${o}`:""}`,suggestion:`请将未落位清单项按专业工程分组补写进对应章节"主要施工内容"小节(施工概况/施工流程/施工方法),优先落位主要分部分项、关键规格与大额工程量。${o}`}),d}function aM(a,b){let c=[],d=b.drawings||[];if(0===d.length)return c;let e=a.replace(/\s+/gu,"").toLowerCase(),f=[...new Set(d.map(a=>a.sourceFile||"").filter(Boolean))],g=0,h=[];for(let a of f){let b=a.replace(/\.[^.]+$/u,"").replace(/[/\\]/gu,"").toLowerCase(),c=a.split("/").pop()||a;(b.length>=3?e.includes(b.slice(0,Math.min(b.length,12))):/图纸|设计|说明|节点|做法|构造/u.test(e))?g+=1:h.push(c)}if(f.length>0){let a=g/f.length;a<.25?c.push({level:"warning",message:`图纸引用严重不足:${g}/${f.length} 份图纸被正文引用(${Math.round(100*a)}%)`,suggestion:`建议将图纸中的设计说明、构造做法、材料规格和设备参数写入对应章节。未引用图纸:${h.slice(0,5).join("、")}`}):a<.5&&c.push({level:"warning",message:`图纸引用不足:${g}/${f.length} 份(${Math.round(100*a)}%)`,suggestion:`建议补充引用:${h.slice(0,5).join("、")}`})}return c}function aN(a){let b=[];for(let c of(/【本小节生成未达标,需重新生成】/u.test(a)&&b.push({level:"error",message:"生成未完成:存在未达标小节,需要重新生成或补写后才能导出",suggestion:"请重新生成未达标小节,禁止将占位内容作为正式正文。"}),e.IA))c.test(a)&&b.push({level:"warning",message:`存在占位式表达:${c.source}`,suggestion:"请改写为来自资料的准确事实;资料确实未提供时,改写为正式管理措施,不留空值或“见资料/按文件”。"});return b}function aO(a,b){for(let c of b)try{if(RegExp(c,"iu").test(a))return!0}catch{if(a.includes(c))return!0}return!1}function aP(a,b){let c=`${b.name} ${b.category} ${b.outputTitle} ${b.description}`,f=[];for(let a of(0,d.V)().autoSpecGates)aO(c,a.templateMatchers)&&f.push(a);if(0===f.length)return[];let g=[],h=z(a).length,i=0;for(let b of f){for(let c of(i=Math.max(i,b.minTables||0),b.requiredTexts))a.includes(c)||g.push({level:"warning",message:`配置要求缺少必要内容:${c}`,suggestion:"请按当前模板匹配的专业规则补齐必要内容。"});for(let c of b.forbiddenTexts)(function(a,b){let c="见图纸"===b||"按图纸"===b?["目录","清单","索引","汇总"]:[],d=0;for(;;){let e=a.indexOf(b,d);if(e<0)return!1;let f=a.slice(e+b.length);if(c.some(a=>f.startsWith(a))){d=e+b.length;continue}return!0}})(a,c)&&g.push({level:"error",message:`配置要求不得出现:${c}`,suggestion:"请根据当前模板匹配的专业规则清理正文污染内容。"})}return e.bu.test(a)&&g.push({level:"error",message:"正式正文存在 Markdown 标题符号 #",suggestion:"导出正文应去除 Markdown 标题符号,保留正式标题文字。"}),i&&h<i&&g.push({level:"warning",message:`配置要求正式表格不足:${h}/${i}`,suggestion:"如用户提示词或章节内容要求表格,应按项目资料补充对应表格本体。"}),g}function aQ(a){let b=`${a.name} ${a.category} ${a.outputTitle} ${a.description}`,c=new Set;for(let a of(0,d.V)().autoSpecGates)if(aO(b,a.templateMatchers))for(let b of a.requiredTexts)b&&c.add(b);return[...c]}function aR(a,b,c,d,f,h,i){var j;if(!a)return b;let l=[...b],m=function(a){let b=[...a.project,...a.schedule,...a.quality,...a.safety,...a.resources];for(let c of Object.values(a.schemaFacts))b.push(...c);return b}(c),n=function(a,b){let c=new Set;for(let a of b)c.add(a.key),a.fieldName&&c.add(a.fieldName);for(let b of a.tables){for(let a of b.headers)c.add(a);for(let a of b.rows)for(let b of a)c.add(b)}return c}(c,m),o=new Set(d.map(a=>a.title));for(let b of a.factFields){if(!b.required||(j=b.name,/国家法律法规|地方法规|规章|规范标准|标准规范|行业标准|现行规范|法律法规|合规|施工方法|工艺流程|质量控制|安全文明|应急|劳动力|材料投入|机械设备|检测仪器|关键节点/u.test(j)))continue;let a=c.schemaFacts[b.id]||[],e=!1,f=!b.sourceRoleIds?.length||a.some(a=>b.sourceRoleIds?.includes(a.roleId));for(let a of d){if(e&&f)break;for(let c of a.evidence)!e&&!a.missingFacts.includes(b.name)&&(0,k.I2)(c,b)&&(e=!0),!f&&(0,k.I2)(c,b)&&(f=!0)}0!==a.length||n.has(b.name)||e||l.push({level:"warning",message:`系统暂未从知识库确认必需事实:${b.name}`,suggestion:b.extractionHint||"请扩大本地知识库检索、执行事实补抽,或调整事实字段配置。"}),f||l.push({level:"warning",message:`必需事实来源角色不匹配:${b.name}`,suggestion:`请确认该事实来自角色:${b.sourceRoleIds?.join("、")}`})}for(let b of a.chapterRules){let a=d.find(a=>a.title===b.title);a&&b.minWords&&a.content.length<b.minWords&&l.push({level:"warning",message:`章节内容深度建议:${b.title}`,suggestion:`可扩展到约 ${b.minWords} 字,但不要改变模板章节结构。`})}let p=z(f),q=function(a){let b=[];for(let c of a.matchAll(e.gW))b.push({alt:c[1]||"",url:c[2]||"",index:c.index??0});return b}(f),r=(0,g.Cv)(f);for(let b of a.gateRules){let a=b.evaluator?b.evaluator:e.cA[b.type]?.(b)??{subject:"document",operator:"contains",value:b.value||b.target},g=a.target||b.target||"",j=a.value||b.value||g,k=d.find(a=>a.title===g),s=function(a){for(let c of e.Lp){let d=c(a);if(d){var b;return{level:a.rule.level,message:(b=a.rule,`${b.name}:${d}`)}}}}({rule:b,evaluator:a,target:g,value:j,min:a.min||Number(b.value)||1,markdown:f,textScope:"chapter"===a.subject&&k?k.content:f,regex:j?function(a){try{return RegExp(a,"iu")}catch{return}}(j):void 0,chapter:k,factNames:n,chapterTitles:o,tableBlocks:p,imageRefs:q,estimatedPages:r,allFacts:m,factsModel:c,projectBindings:h,promptBindings:i});s&&l.push(s)}return l}function aS(a,b){let c=function(a){let b="";for(let c of(0,l.dU)(a))c.content&&(b+=`${c.content}
|
|
2
2
|
|
|
3
|
-
`);return b}(b);if(!c.trim())return[];let d=a.replace(e.ug," ");for(let a of c.matchAll(e.QX)){let b=(a[1]||"").replace(e.ug," ").trim();if(b&&d.includes(b))return[{level:"error",message:"正文疑似包含提示词示例内容",suggestion:"请删除提示词样例数据,仅保留基于当前绑定材料生成的正文。"}]}return[]}},30355:(a,b,c)=>{c.d(b,{$8:()=>
|
|
3
|
+
`);return b}(b);if(!c.trim())return[];let d=a.replace(e.ug," ");for(let a of c.matchAll(e.QX)){let b=(a[1]||"").replace(e.ug," ").trim();if(b&&d.includes(b))return[{level:"error",message:"正文疑似包含提示词示例内容",suggestion:"请删除提示词样例数据,仅保留基于当前绑定材料生成的正文。"}]}return[]}},30355:(a,b,c)=>{c.d(b,{$8:()=>u,NP:()=>r,P9:()=>h,Wz:()=>x,bT:()=>t,jH:()=>w,up:()=>s});var d=c(22157),e=c(78217),f=c(18274),g=c(37047);let h=["知识库","系统暂未","项目资料暂未","资料未明确","暂未明确","待确认","待资料复核","待系统","未检索到","资料不足","无法确认","建议补充","不适用","COL","可核验信息","工作包",...d.Kd];function i(a){return a.replace(/\s+/gu,"").toLowerCase()}function j(a){return`${a.fieldId||""} ${a.fieldName||""} ${a.key} ${(0,d.lG)(a.value)}`.replace(/\s+/gu," ").trim()}function k(a){return(0,d.lG)(a.value).replace(/\s+/gu," ").trim()}function l(a,b){let c=i(j(a));return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(i(a)))}function m(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=i(b);return c.filter(a=>i(a).includes(d)||b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(b=>i(a).includes(i(b))))}let n=[{keywords:"安全 文明 危大 风险 应急 临边 洞口 消防 临电 高处 起重 吊装 基坑 脚手架 模板 支护 图纸 施工说明 审查意见",prototype:"安全生产 文明施工 危大工程 应急预案 风险管控"},{keywords:"工期 日历天 节点 进度 计划 开工 竣工 关键线路",prototype:"施工工期 进度计划 关键节点 开工时间 竣工时间"},{keywords:"质量 验收 合格 标准 规范 检验批 隐蔽 复试 样板",prototype:"质量验收 质量目标 检验批 隐蔽工程 材料复试"},{keywords:"清单 工程量 材料 设备 机械 劳动力 规格 型号 数量 单位",prototype:"人材机资源 劳动力配置 材料供应 设备机械 工程量清单"},{keywords:"工程名称 项目名称 建设地点 建筑面积 建设规模 招标范围 施工范围",prototype:"工程概况 项目概况 建设地点 建设规模 招标范围"},{keywords:"施工 组织 部署 区段 流水 作业面 工序 穿插 图纸 清单",prototype:"施工部署 流水施工 施工区段 工序穿插"}];async function o(a,b){let c,d=new Map;if(0===a.length)return d;let e=n.map(a=>a.prototype);try{c=await (0,g.Mv)(a,e,b)}catch{return d}for(let b of a){let a=[];for(let d of n)c(b,d.prototype)>=.35&&a.push(d.keywords);a.length>0&&d.set(b,a)}return d}function p(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 q(a){return/项目特点.*重点.*难点|重点.*难点.*分析/u.test(a)?"系统识别本项目特点、施工重点、施工难点、形成原因、影响范围和应对措施,必须落位项目规模、结构形式、工期、专业范围、现场约束等具体事实,并为“项目主要施工内容”提供逐项对应依据。":/项目主要施工内容/u.test(a)?"按专业工程和关键工序展开施工内容,必须逐项响应“项目特点、重点、难点分析”中的重点难点,说明施工范围、实施内容、控制措施、验收节点和资料闭环。":/工期|进度|节点|计划/u.test(a)?"使用项目工期、节点和资源事实说明进度组织要求。":/质量|验收|标准|实测/u.test(a)?"使用项目质量目标、验收标准和工序事实说明质量控制要求。":/安全|危大|风险|应急/u.test(a)?"使用项目风险、危大工程和安全文明事实说明安全管控要求。":/资源|材料|机械|人材机/u.test(a)?"使用清单、材料、设备和劳动力事实说明资源配置要求。":/概况|说明|依据/u.test(a)?"使用项目基础事实说明编制边界和工程概况。":"使用已确认项目事实形成正式施工组织内容。"}async function r(a){let b=Date.now(),c=a.template.chapters.map(a=>{let b=a.sections?.length?a.sections:[a.title];return{chapter:a,sectionTitles:b,requiredFacts:[...new Set([...a.requiredFacts||[],a.title])],evidenceQueries:[...new Set([a.title,...a.queries||[],...a.requiredFacts||[]])]}}),e=[...new Set([...c.map(a=>a.chapter.title),...c.flatMap(a=>a.sectionTitles)])],f="0"!==process.env.DOCUMENT_QUERY_EXPANSION_SEMANTIC?await o(e,a.embedDocuments):new Map,g=c.map(({chapter:a,sectionTitles:b,requiredFacts:c,evidenceQueries:d})=>{let e=f.get(a.title)||[];return{chapterId:a.id,title:a.title,purpose:a.purpose||q(a.title),requiredFacts:c,requiredGraphNodes:[a.title],evidenceQueries:d,qualityRules:["项目专属事实必须来自锁定资料范围,不得混入其他项目名称","法规规范等公共知识不受锁定范围限制","不得出现后台话术和兜底措辞","章节必须覆盖规划小节"],forbiddenPhrases:h,sections:b.map(b=>({title:b,objective:q(b),requiredFacts:[...new Set([b,...a.requiredFacts||[]])],requiredGraphNodes:[b],evidenceQueries:function(a,b,c,d){let e=p(a.title),f=p(b);return[...new Set([a.title,b,...c,...d,...e.filter(a=>!c.includes(a)),...f.filter(a=>!d.includes(a)),...a.queries||[],...a.requiredFacts||[]].filter(Boolean))]}(a,b,e,f.get(b)||[]),forbiddenPhrases:h,minChars:/项目特点.*重点.*难点|重点.*难点.*分析/u.test(b)?1800:/项目主要施工内容|主要分部分项工程施工方案|主要施工方法/u.test(b)?2200:/原材料进场复试|见证取样|危大工程专项施工方案审批流程/u.test(b)?800:/施工部署|施工流水|主要施工机械|劳动力|材料进场|资源动态|质量控制点|危大工程|安全隐患|临时用水|临时用电/u.test(b)?760:/概况|说明|依据/u.test(b)?260:420}))}});return{plan:{planId:`plan-${(0,d.c6)({templateId:a.template.id,scope:a.context.materialScope.scopeHash,chapters:g.map(a=>a.title)}).slice(0,10)}`,title:a.title||a.template.name,chapters:g,requiredGlobalFacts:["项目名称","工期","质量标准","招标范围"],forbiddenPhrases:h,qualityRules:["资料范围先锁定","基础图谱必跑","章节任务先于正文","Reviewer 通过后才能导出"]},node:{id:"document-planner",type:"document_planner",status:"completed",startedAt:b,completedAt:Date.now(),outputSummary:`${g.length} 章、${g.reduce((a,b)=>a+b.sections.length,0)} 条细目任务`,metrics:{chapters:g.length}}}}function s(a){let b=Date.now(),c=a.plan.chapters.find(b=>b.chapterId===a.chapter.id)||a.plan.chapters.find(b=>b.title===a.chapter.title);if(!c)throw Error(`缺少章节计划:${a.chapter.title}`);let e=a.context.facts.filter(a=>c.evidenceQueries.some(b=>l(a,b))||c.requiredFacts.some(b=>l(a,b))),f=c.sections.map(b=>{let e=1===c.sections.length&&b.title===a.chapter.title,f=a.context.facts.filter(a=>b.evidenceQueries.some(b=>l(a,b))||b.requiredFacts.some(b=>l(a,b))).slice(0,24),g=a.evidence.filter(a=>b.evidenceQueries.some(b=>(function(a,b){let c=i(`${a.sectionTitle||""} ${a.content||""} ${a.filePath||""}`);return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(i(a)))})(a,b))).slice(0,24),h=b.requiredGraphNodes.flatMap(b=>m(a.context.baseProjectGraph,b)).slice(0,12);e&&(0===g.length&&(g=a.evidence.slice(0,24)),0===h.length&&(h=m(a.context.baseProjectGraph,a.chapter.title).slice(0,12)));let j=[];return/法律法规|法规|规章|规范标准|标准规范|行业标准|现行规范|编制依据/u.test(b.title)||0!==g.length||0!==f.length||0!==h.length||j.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${b.title} 缺少事实、图谱或证据支撑`,suggestion:"应先定向检索和抽取事实,不能生成占位正文。"}),{...b,factIds:f.map(a=>(0,d.c6)({key:a.key,value:(0,d.lG)(a.value),sourceFile:a.sourceFile}).slice(0,12)),evidenceIds:g.map(a=>(0,d.c6)({filePath:a.filePath,content:a.content.slice(0,160),score:a.score}).slice(0,12)),graphNodeIds:h.map(a=>(0,d.c6)(a).slice(0,12)),ready:0===j.length,issues:j}}),g=f.flatMap(a=>a.issues),h={taskId:`chapter-task-${(0,d.c6)({plan:a.plan.planId,chapter:a.chapter.id,evidence:a.evidence.map(a=>(0,d.c6)({filePath:a.filePath,content:a.content.slice(0,120),score:a.score}))}).slice(0,10)}`,chapterId:a.chapter.id,title:a.chapter.title,facts:e.slice(0,48),evidence:a.evidence.slice(0,48),graphContext:m(a.context.baseProjectGraph,a.chapter.title).slice(0,20).join("\n"),sections:f,ready:0===g.length,issues:g};return{task:h,node:{id:`chapter-task-${a.chapter.id}`,type:"chapter_task_planner",status:h.ready?"completed":"failed",startedAt:b,completedAt:Date.now(),outputSummary:`${h.sections.filter(a=>a.ready).length}/${h.sections.length} 条细目任务就绪`,metrics:{facts:h.facts.length,evidence:h.evidence.length,issues:g.length},issues:g}}}function t(a){let b=a.facts.slice(0,18).map(a=>`- ${a.key}:${k(a)}${a.sourceFile?`(来源:${a.sourceFile})`:""}`).join("\n"),c=a.sections.map((a,b)=>`${b+1}. 必须输出三级标题:### ${a.title}
|
|
4
4
|
写作目标:${a.objective}
|
|
5
5
|
支撑情况:证据 ${a.evidenceIds.length},事实 ${a.factIds.length},图谱 ${a.graphNodeIds.length}
|
|
6
6
|
最小正文深度:${a.minChars} 字`).join("\n");return["【Agent 章节任务】",`任务ID:${a.taskId}`,`章节:${a.title}`,a.graphContext?`图谱上下文:
|
|
7
7
|
${a.graphContext}`:"",b?`事实卡:
|
|
8
8
|
${b}`:"",`小节任务:
|
|
9
|
-
${c}`,"写作要求:必须严格按“小节任务”逐项输出,每个任务都必须保留完全一致的三级标题“### 小节标题”;不得合并小节、不得改写小节标题、不得省略小节;项目专属事实只使用事实卡、图谱上下文和绑定证据,法律法规、标准规范等公共知识可直接引用;不得输出后台话术、兜底措辞、待确认、不适用;缺少项目事实的小节不得编造。"].filter(Boolean).join("\n\n")}function
|
|
9
|
+
${c}`,"写作要求:必须严格按“小节任务”逐项输出,每个任务都必须保留完全一致的三级标题“### 小节标题”;不得合并小节、不得改写小节标题、不得省略小节;项目专属事实只使用事实卡、图谱上下文和绑定证据,法律法规、标准规范等公共知识可直接引用;不得输出后台话术、兜底措辞、待确认、不适用;缺少项目事实的小节不得编造。"].filter(Boolean).join("\n\n")}function u(a,b){let c=a.facts.slice(0,18).map(a=>`- ${a.key}:${k(a)}${a.sourceFile?`(来源:${a.sourceFile})`:""}`).join("\n"),d=b.blocks.map((a,b)=>{let c=a.subPoints.map(a=>a.sources.length>1?` - #### ${a.title}(覆盖评分细目:${a.sources.join("、")})`:` - #### ${a.title}`).join("\n");return`${b+1}. 必须输出三级标题:### ${a.title}
|
|
10
10
|
${c}`}).join("\n");return["【Agent 章节任务】(主题块成稿模式)",`任务ID:${a.taskId}`,`章节:${a.title}`,a.graphContext?`图谱上下文:
|
|
11
11
|
${a.graphContext}`:"",c?`事实卡:
|
|
12
12
|
${c}`:"",`主题块与 H4 要点(必须严格按此两层结构成稿):
|
|
13
|
-
${d}`,"写作要求:必须严格按“主题块→H4 要点”两层结构输出,三级标题与 H4 要点标题必须与给定标题完全一致,不得改名、合并或遗漏 H4 要点;每个 H4 要点必须覆盖其标注的全部评分细目内容,但不得为这些评分细目单独开设小节标题;项目专属事实只使用事实卡、图谱上下文和绑定证据,法律法规、标准规范等公共知识可直接引用;不得输出后台话术、兜底措辞、待确认、不适用;缺少项目事实的小节不得编造。"].filter(Boolean).join("\n\n")}function s(a){let b=j(a);return!(!b||b.length<3||/^(?:见|详见|按|执行|参见|依据).{0,16}(?:前附表|招标公告|招标文件|合同|协议书|通用条款|专用条款|图纸|清单|附件|资料)$/u.test(b)||/^(?:合同协议书|通用条款|专用条款|招标文件|招标公告|投标人须知前附表|附件|资料)$/u.test(b.replace(/[()()\d一二三四五六七八九十、..\s]/gu,"")))&&/项目|工程|编号|地点|规模|范围|工期|质量|安全|资源|材料|设备|验收|\d/u.test(i(a))}function t(a){let b=[],c=a.draft.content||"";for(let e of g)c.includes(e)&&b.push({level:"error",severity:"blocker",category:"style",owner:"system",message:`${a.draft.title} 正文包含禁止话术:${e}`,suggestion:"工作包"===e?"这是生成系统后台概念,正文中不得出现该词:结合上下文语义改写为正式术语(如“拆除工程”“按专业工程逐项说明”),不得做词面替换。":d.Kd.includes(e)?"评标纪律承诺、廉洁承诺等属商务投标函内容,不得进入技术标正文:删除该承诺句(移入商务文件),本节只保留技术与管理内容。":"改为事实支撑的正式表达;缺失事实不得占位。"});let h=c.split(/(?<=[。;;])/u).filter(a=>(0,d.hh)(a)&&!d.Kd.some(b=>a.includes(b)));h.length>0&&b.push({level:"error",severity:"blocker",category:"style",owner:"system",message:`${a.draft.title} 正文包含商务投标函纪律承诺句:${h[0].slice(0,40)}`,suggestion:"投标/评标纪律承诺、廉洁承诺等属商务投标函内容,不得进入技术标正文:删除该承诺句(移入商务文件),本节只保留技术与管理内容。"}),c.includes("[EVIDENCE_SKELETON]")&&b.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 正文为 LLM 全故障后的证据骨架草稿,禁止作为正式正文通过`,suggestion:"必须由 Repairer 基于小节事实卡与证据完整重写为正式正文,并删除 [EVIDENCE_SKELETON] 标记;若 LLM 仍不可用,本章节保持 failed 阻断。"}),(0,e.V7)(c);let i=a.plannedCoverage,k=a=>{let b=i?.[a];return b&&b.length>0?b[0]:a},l=new Map;for(let a of Object.values(i||{}))a.length>0&&l.set(a[0],(l.get(a[0])||0)+1);let m=a=>{let b=i?.[a];return!!b&&0!==b.length&&(l.get(b[0])||1)>1},n=new Map,o=new Set;for(let b of a.task.sections){let a=k(b.title);m(b.title);let c=n.get(a);n.set(a,void 0===c?b.minChars:Math.max(c,b.minChars))}for(let g of a.task.sections){let a=i?.[g.title],h=a&&a.length>0?a:[g.title],j=h[0],k=m(g.title),l=new Set,p="";for(let a of h){let b=(0,d.Xl)(c,a,{fuzzy:!0});b&&!l.has(b)&&(l.add(b),p+=(p?"\n":"")+b)}if(j!==g.title){let a=(0,d.Xl)(c,g.title,{fuzzy:!0});a&&!l.has(a)&&(0,e.V7)(a)>(0,e.V7)(p)&&(p=a)}if(p.includes("[WRITER_MISSING_SECTION]")||!p&&c.includes("[WRITER_MISSING_SECTION]"))o.has(j)||(o.add(j),b.push({level:"error",severity:"blocker",category:"structure",owner:"system",message:k?`${j} Writer 未完成(承接 ${g.title})`:`${g.title} Writer 未完成`,suggestion:"Repairer 必须基于该小节事实卡和证据生成正式正文,并删除 WRITER_MISSING_SECTION 标记。"}));else if(p&&!o.has(j)){o.add(j);let a=n.get(j)||g.minChars,c=/项目特点.*重点.*难点|重点.*难点.*分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试|见证取样/u.test(g.title),d=k&&!c?Math.max(200,Math.floor(.5*a)):a;(0,e.V7)(p)>=Math.floor(.8*d)||b.push({level:c?"error":"warning",severity:c?"blocker":"warning",category:"structure",owner:"system",message:k?`${j} 正文不足,未达到任务最小深度(承接 ${g.title})`:`${g.title} 正文不足,未达到任务最小深度`,suggestion:c?"关键小节必须基于项目事实和对应关系重写补足;不得仅保留概述性文字。":"应基于该小节事实卡和证据重新生成,不得使用标题占位。"})}else if(!p&&!o.has(j)){o.add(j);let a=/项目特点.*重点.*难点|重点.*难点.*分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试|见证取样/u.test(g.title);b.push({level:a?"error":"warning",severity:a?"blocker":"warning",category:"structure",owner:"system",message:a?`${g.title} 正文不足,未达到任务最小深度`:`${k?`承接小节 ${j} 缺失`:g.title} 未匹配到独立小节标题`,suggestion:a?"关键小节缺失正文,必须基于该小节事实卡和证据生成正式正文,不得以标题占位。":"正文已成文但小节标题与规划标题不完全一致,建议后续按规划标题进一步规范结构。"})}if(g.ready||b.push(...g.issues.map(a=>({...a,level:"warning",severity:"warning"}))),/主要分部分项工程施工方案|主要施工方法/u.test(g.title)){let a=(0,d.Xl)(c,j,{fuzzy:!0}),h=(0,e.V7)(a),i=new Set([...a.match(f.aX)||[],...a.match(f.LT)||[]]).size,k=new Set(a.match(f.s2)||[]).size,l=h>0?k/(h/1e3):0;(0,e.V7)(a)>=800&&(i<4||l<2)&&b.push({level:"warning",severity:"warning",category:"professional_chain",owner:"system",message:`${g.title} 参数落位不足:工艺参数 ${i} 个(要求不少于 4 个),量化参数密度每千字 ${l.toFixed(1)} 个(要求不少于 2 个)`,suggestion:"必须补充 mm/MPa/间距/偏差/坡度/试验压力等工艺参数(来自绑定资料或行业规范值)或设备型号规格参数,并提升量化参数(数量/规格/工期/面积等)落位密度;同一参数不得反复堆砌凑数。"})}if(/主要分部分项工程施工方案|主要施工方法|项目主要施工内容|施工流程|施工顺序|多工序穿插|三检制度|隐蔽工程验收|闭环整改|应急演练|转运路线/u.test(g.title)){let a=(0,d.Xl)(c,j,{fuzzy:!0});(0,e.V7)(a)>=500&&!(0,d.Z1)(a)&&b.push({level:"warning",severity:"warning",category:"professional_chain",owner:"system",message:`${g.title} 工序顺序表达缺失:工序序列未以顺序词叙述、编号步骤、列表或箭头链任一形式表达`,suggestion:"工艺流程与方法叙述中的连续工序须有明确的顺序表达,形式由模型自然选择(顺序词叙述、编号步骤、有序列表或箭头链均可,如“先进行基层清理,再放线定位,随后分层摊铺,然后碾压,最后验收”),保证工序先后顺序清晰即可。"})}}let p=a.context.materialScope.selectedRoots;for(let d of a.context.materialScope.rejectedRoots)d&&!p.includes(d)&&c.includes(d)&&b.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 混入非当前资料组名称:${d}`,suggestion:"必须删除跨项目内容并重新检索当前资料组证据。"});let q=a.task.facts.filter(s),r=q.filter(a=>{let b=j(a);return b.length>=2&&c.includes(b.slice(0,Math.min(18,b.length)))}).length;q.length>=3&&0===r&&1200>(0,e.V7)(c)&&b.push({level:"warning",severity:"warning",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 未明显落位章节事实卡`,suggestion:"建议将章节事实卡中的关键工程事实写入对应小节,但不因引用型或低可执行事实阻断。"});let t=b.filter(a=>"error"===a.level||"blocker"===a.severity),u=b.filter(a=>/正文不足|未落位章节事实卡/u.test(a.message)),v=t.some(a=>/Writer 未完成|正文不足,未达到任务最小深度/u.test(a.message));return{issues:b,supportedFacts:r,unsupportedSignals:b.map(a=>a.message),repairable:b.length>0&&(b.length<=6||u.length===b.length||0===t.length||v)}}function u(a){if(!a.review.repairable)return"";let b=a.plannedMode?"【结构约束】本章采用主题块成稿模式,必须保持现有三级主题块与 H4 要点标题不变;只修复列出的问题,不得新增小节、不得拆分或合并现有小节、不得把评分细目展开为独立标题。":q(a.task);return["【Agent 定向修复任务】",`章节:${a.task.title}`,"只修复下列问题,不重写无关内容;如果问题是小节正文不足,必须按原小节标题完整补足该小节正式正文,每个小节不得少于任务最小深度:",...a.review.issues.map(a=>`- ${a.message};${a.suggestion||""}`),b].join("\n")}},44505:(a,b,c)=>{c.d(b,{Et:()=>Y,H:()=>_,Ih:()=>K,N$:()=>ab,T:()=>V,U$:()=>F,Vw:()=>M,Xc:()=>L,YN:()=>J,a8:()=>l,cJ:()=>A,cT:()=>ae,cf:()=>j,dF:()=>H,eS:()=>h,l4:()=>E,mC:()=>U,qj:()=>W,r8:()=>r,rA:()=>p,s3:()=>v,sn:()=>x,t1:()=>D,u2:()=>n,vH:()=>t,y2:()=>C});var d=c(78217),e=c(22157),f=c(37047),g=c(41991);let h=/(\d{4})\s*年\s*(\d{1,2})\s*月\s*(\d{1,2})\s*日/gu,i=/进度计划|里程碑|节点安排|验收时间|完成日期|竣工日期|移交日期|合同签订/u;function j(a,b){let c=[],d=function(a){let b=new Set;for(let c of[...a.project,...a.schedule,...a.quality,...a.resources,...a.preciseFacts].map(a=>`${a.key||""}${a.fieldName||""}${(0,e.lG)(a.value)}`))for(let a of c.matchAll(h))b.add(`${a[1]}年${a[2]}月${a[3]}日`);return b}(b),f=[...b.schedule,...b.project].map(a=>`${a.key||""}${(0,e.lG)(a.value)}`).join(" "),g=h.test(f);for(let b of(h.lastIndex=0,a.matchAll(h))){let e=`${b[1]}年${b[2]}月${b[3]}日`;if(d.has(e))continue;let f=Math.max(0,(b.index||0)-40),h=a.slice(f,(b.index||0)+e.length+40);g&&i.test(h)||c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文编造开工日期“${e}”:绑定资料未提供该具体日历日期(招标文件以开工令时间为准)`,suggestion:`删除自行设定的具体日期,统一改写为“以开工令时间为准”;如为进度计划节点日期,必须标注为计划推算节点并保持与总工期一致。`})}return c.slice(0,3)}let k=/(单体建筑面积|总建筑面积|建筑面积)[^。;;\n]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)/gu;function l(a,b){let c=[],d=function(a){let b=[];for(let c of[...a.project,...a.preciseFacts].map(a=>`${a.fieldName||a.key||""}:${(0,e.lG)(a.value)}`)){let a=/(总占地面积|占地面积|单体建筑面积|总建筑面积|建筑面积|地上建筑面积|地下建筑面积|总用地面积)/u.exec(c)?.[1],d=/([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)/u.exec(c);if(!a||!d)continue;let e=Number(d[1].replace(/[,,]/gu,""));Number.isFinite(e)&&e>0&&b.push({label:a,value:e})}return b}(b),f=new Set(d.filter(a=>/占地面积/u.test(a.label)).map(a=>a.value)),g=new Set(d.filter(a=>/建筑面积/u.test(a.label)&&!/地上|地下/u.test(a.label)).map(a=>a.value));if(0===f.size||0===g.size)return c;for(let b of a.matchAll(k)){let a=Number(b[2].replace(/[,,]/gu,""));if(!Number.isFinite(a)||a<=0||!f.has(a)||g.has(a))continue;let d=b[1],e=[...g].join("、");c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`字段-数值错配:“${d} ${b[2]}㎡”将总占地面积误作${d}(绑定资料${d}数值为 ${e}㎡)`,suggestion:`总占地面积与建筑面积是两个独立字段,必须严格区分:将“${d} ${b[2]}㎡”改为资料数值“${d} ${e}㎡”,总占地面积保持独立表述。`})}return c.slice(0,3)}let m=/(地上[^。;;]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)[^。;;]{0,40}?地下[^。;;]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)[^。;;]{0,60}?(?:单体建筑面积|总建筑面积)[^。;;]{0,20}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米))/gu;function n(a){let b=[];for(let c of a.matchAll(m)){let a=Number(c[2].replace(/[,,]/gu,"")),d=Number(c[3].replace(/[,,]/gu,"")),e=Number(c[4].replace(/[,,]/gu,""));if(![a,d,e].every(Number.isFinite))continue;let f=a+d,g=Math.max(1,.001*e);Math.abs(f-e)>g&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`面积算术矛盾:地上 ${a}㎡ + 地下 ${d}㎡ = ${f}㎡,与同句“单体建筑面积 ${e}㎡”不符(差 ${Math.abs(f-e).toFixed(2)}㎡)`,suggestion:`地上与地下面积之和必须等于单体建筑面积:按绑定资料统一三者数值,删除错误数值表述。`})}return b.slice(0,3)}let o=/(?:高峰期|高峰|峰值)[^。;;\n]{0,20}?(?:约)?\s*([\d,]+)\s*人/g;function p(a){let b=[],c=[];for(let b of a.matchAll(o)){let a=Number(b[1].replace(/[,,]/gu,""));Number.isFinite(a)&&a>0&&c.push({value:a,text:b[0].trim().slice(0,40)})}let d=function(a){let b=[],c=a.split(/\r?\n/u),d=/^\|.+\|$/u,e=/阶段|时期|工期|工序|进度/u,f=/人数|劳动力|作业人员|施工人员|投入人数/u,g=/^:?-{3,}:?$/u,h=a=>a.replace(/[*_`~]/gu,"").trim();for(let a=0;a<c.length;a+=1){let i,j,k;if(!d.test(c[a].trim()))continue;let l=[];for(;a<c.length&&d.test(c[a].trim());)l.push(c[a].trim()),a+=1;if(a-=1,l.length<3)continue;let m=a=>a.split("|").map(a=>a.trim()).slice(1,-1),n=l.findIndex((a,b)=>b>0&&m(a).every(a=>g.test(a)));if(1===n&&l.length>=3)i=m(l[0]).map(h),j=l.slice(2);else{if(-1!==n||!(l.length>=2))continue;let a=m(l[0]).map(h);if(!(e.test(a.join("|"))&&f.test(a.join("|"))))continue;i=a,j=l.slice(1)}let o=i.findIndex(a=>e.test(a)),p=i.findIndex(a=>f.test(a));if(p<0||o>=0&&o===p||/岗位/u.test(i.join("|"))&&/职责|持证|职称/u.test(i.join("|")))continue;let q=[],r=0;for(let a of j){let b=m(a),c=b[p]||"",d=/^([\d,]+)\s*人?$/u.exec(c);if(!d)continue;let e=Number(d[1].replace(/[,,]/gu,""));if(Number.isFinite(e)&&!(e<=0)){if(b.some((a,b)=>b!==p&&/合计|总计|小计/u.test(a))){k=e;continue}q.push(e),r+=e}}if(0===q.length&&void 0===k)continue;let s=Math.max(...q.length>0?q:[k||0]);b.push({countCells:q,totalCell:k,detailSum:r,peak:s})}return b}(a),e=d.map(a=>a.peak),f=(a,c)=>b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:a,suggestion:c});for(let a=0;a<c.length;a+=1)for(let b=a+1;b<c.length;b+=1){let[d,e]=[c[a],c[b]],g=Math.abs(d.value-e.value)/Math.max(d.value,e.value);if(g>.3){f(`劳动力数据矛盾:正文“${d.text}”(${d.value} 人)与“${e.text}”(${e.value} 人)互斥(相差 ${Math.round(100*g)}%)`,"劳动力峰值数据必须全文唯一:以分阶段投入明细表为准统一正文各处峰值表述,删除矛盾数字。"),a=c.length;break}}if(e.length>=2){let a=Math.max(...e),b=Math.min(...e),c=Math.abs(a-b)/a;c>.3&&f(`劳动力数据矛盾:分阶段投入明细表峰值 ${b} 人与另一劳动力表峰值 ${a} 人互斥(相差 ${Math.round(100*c)}%)`,"劳动力峰值数据必须全文唯一:统一各劳动力表格的峰值数据,删除矛盾表格数字。")}let g=c.reduce((a,b)=>Math.max(a,b.value),0),h=e.length>0?Math.max(...e):void 0;if(void 0!==h&&g>0&&g>1.3*h){let a=c.find(a=>a.value===g)?.text||"";f(`劳动力数据矛盾:正文表述“${a}”达 ${g} 人,而分阶段投入明细表最大峰值为 ${h} 人(超出 ${Math.round((g-h)/h*100)}%)`,"劳动力投入数据必须全文统一:以分阶段明细表为准复核正文峰值表述,删除与表格矛盾的“高峰期 X 人”措辞或调整表格数据。")}let i=[];for(let b of a.matchAll(/(?:高峰期|高峰|峰值)[^。;;\n]{0,16}?控制(?:在|为|到)?(?:约)?\s*([\d,]+)\s*人(?:以内|以下|之内)?/gu)){let a=Number(b[1].replace(/[,,]/gu,""));Number.isFinite(a)&&a>0&&i.push(a)}if(i.length>0){let a=Math.max(...i),b=[...c,...void 0!==h?[{value:h}]:[]].filter(b=>b.value>a);if(b.length>0){let c=Math.max(...b.map(a=>a.value));f(`劳动力数据矛盾:正文“高峰期总人数控制在${a}人”的上限表述与峰值表述 ${c} 人不自洽(阶段高峰投入超出控制上限 ${Math.round((c-a)/a*100)}%)`,"总量控制上限与各阶段峰值必须自洽:阶段高峰人数不得超过全文宣称的高峰控制人数;以分阶段投入明细表为准修正控制目标或各阶段峰值表述。")}}for(let a of d){if(void 0===a.totalCell||a.countCells.length<2)continue;let b=Math.abs(a.totalCell-a.detailSum)/Math.max(a.totalCell,a.detailSum);b>.1&&f(`劳动力数据矛盾:劳动力表合计行 ${a.totalCell} 人与明细行之和 ${a.detailSum} 人不符(差 ${Math.round(100*b)}%)`,"劳动力表合计必须等于各明细行人数之和:统一合计行与明细行数据,删除矛盾数字。")}let j=[...a.matchAll(/([\d,]+)\s*(?:个)?工日/gu)].map(a=>Number(a[1].replace(/[,,]/gu,""))).filter(a=>Number.isFinite(a)&&a>0),k=[...a.matchAll(/(?:工期|总工期|计划工期)[^。;;\n]{0,16}?(\d{2,4})\s*(?:个)?(?:日历)?天/gu)].map(a=>Number(a[1])).filter(a=>Number.isFinite(a)&&a>=30&&a<=3e3);if(j.length>0&&g>0&&k.length>0){let a=Math.max(...j),b=Math.max(...k),c=g*b*1.3,d=g*b*.1;(a>c||a<d)&&f(`劳动力数据矛盾:总工日 ${a} 个与峰值 ${g} 人\xd7总工期 ${b} 天不自洽(合理区间约 ${Math.round(d)}~${Math.round(c)} 个)`,"总工日必须与劳动力峰值和总工期量级自洽:按各阶段人数\xd7阶段工期重算总工日,或修正峰值人数/总工期表述。")}return b.slice(0,5)}let q={slope:"基坑放坡开挖、土钉墙喷锚支护坡面",pile:"钻孔灌注桩、排桩、地下连续墙围护结构"};async function r(a){let b=[],c=a.split(/\n{2,}/u).filter(a=>a.trim().length>=30);if(0===c.length)return b;let d=await (0,f.Mv)(c,Object.values(q)),e=a=>d(a,q.slope)>=f.Eh,g=/钻孔灌注桩|灌注桩|排桩|地下连续墙|咬合桩|支护桩/u,h=a=>g.test(a)&&d(a,q.pile)>=f.Eh,i=c.filter(a=>e(a)&&!h(a)),j=c.filter(a=>h(a)&&!e(a));return 0===i.length||0===j.length||b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基坑支护方案前后不一致:放坡喷锚类支护表述与灌注桩排桩类支护表述分别成段出现(放坡喷锚类 ${i.length} 段、灌注桩排桩类 ${j.length} 段),属跨模板拼接断裂`,suggestion:"支护形式必须全文统一为一种体系(以图纸/地质条件为准):确定采用放坡喷锚或灌注桩排桩后,删除另一种体系的表述,并补充基坑开挖深度数值支撑危大分级判定。"}),b}let s=/^#{2,4}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]*(?:危大工程(?:辨识)?(?:清单|识别)|危大(?:工程)?(?:及超危大)?(?:清单|识别|辨识))[^\n]*$/gmu;function t(a){let b=[],c=function(a){let b=a.split(/\r?\n/u),c=[];for(let a=0;a<b.length;a+=1){if(!s.test(b[a].trim()))continue;let d=[];for(let c=a+1;c<Math.min(b.length,a+30);c+=1){let a=b[c].trim();if(/^#{1,6}\s/u.test(a))break;let e=/^(?:\d+[.、.)]|[-*•])?\s*([^。;;|]{2,40})$/u.exec(a)?.[1];e&&d.push(e.replace(/^[\s\d.、()()【】-]+/u,"").replace(/[((【][^))】]*[))】]/gu,"").replace(/施工$/u,"").replace(/作业$/u,"").replace(/\s+/gu,"").trim())}d.length>=2&&c.push({title:b[a].trim(),items:[...new Set(d)]})}return c}(a);if(c.length<2)return b;for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a],f=c[d],g=e.items.filter(a=>!f.items.includes(a)),h=f.items.filter(a=>!e.items.includes(a));(0!==g.length||0!==h.length)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`危大工程辨识清单不一致:“${e.title.slice(0,30)}”(${e.items.length} 项)与“${f.title.slice(0,30)}”(${f.items.length} 项)存在差异:前者独有【${g.join("、")||"无"}】,后者独有【${h.join("、")||"无"}】`,suggestion:"全文危大工程辨识清单必须唯一且一致:合并两处清单,统一项名、数量与分级表述,避免评标专家以清单矛盾质疑辨识深度。"})}return b.slice(0,3)}let u=[{name:"施工工地周边100%围挡",query:"施工工地周边设置围挡封闭管理"},{name:"物料堆放100%覆盖",query:"物料堆放覆盖防尘"},{name:"出入车辆100%冲洗",query:"出入车辆冲洗设施清洗出场"},{name:"施工现场地面100%硬化",query:"施工现场场地地面硬化"},{name:"拆迁工地100%湿法作业",query:"拆迁工地湿法作业洒水降尘"},{name:"渣土车辆100%密闭运输",query:"渣土车辆密闭运输防止遗撒"}];function v(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=c.trim();if(!(!a||/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a)))for(let c of a.split(/(?<=[。!?!?;;])/u)){let a=c.trim();a.length>=8&&a.length<=120&&b.push(a)}}let c=[...new Set(b)];if(c.length<=400)return c;let d=Math.ceil(c.length/400);return c.filter((a,b)=>b%d==0).slice(0,400)}async function w(a,b){if(0===b.length||0===a.length)return new Map;let c=await (0,f.Mv)(a.map(a=>a.text),b);return new Map(a.map(a=>[a.key,b.some(b=>c(a.text,b)>=.6)]))}async function x(a){let b=[];if(!/扬尘|环保|文明施工|绿色施工/u.test(a))return b;let c=await w(u.map(a=>({key:a.name,text:a.query})),v(a)),d=/(?:本项目|本工程|该工程|该项目|本标段|本施工项目)[^。;;\n]{0,30}(?:无拆迁|不涉及拆迁|无房屋拆除|无拆除)/u.test(a),e=u.filter(a=>!c.get(a.name)).filter(a=>!("拆迁工地100%湿法作业"===a.name&&d)).map(a=>a.name);return 0===e.length||b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`“扬尘治理六个百分百”未逐项落实:缺少【${e.join("、")}】(${u.length-e.length}/${u.length} 项命中)`,suggestion:"按检查规范第七部分要求逐条表述六项措施:工地周边100%围挡、物料堆放100%覆盖、出入车辆100%冲洗、施工现场地面100%硬化、拆迁工地100%湿法作业、渣土车辆100%密闭运输。"}),b}let y=/建设地点|工程地点|项目地点|实施地点|服务地点|交付地点|建设地址/u,z=["安徽","合肥","芜湖","蚌埠","淮南","马鞍山","淮北","铜陵","安庆","黄山","滁州","阜阳","宿州","六安","亳州","池州","宣城"];async function A(a,b){let c=[],d=b.project.some(a=>y.test(`${a.fieldName||""}${a.key||""}`)&&z.some(b=>(0,e.lG)(a.value).includes(b))),f=[];if(d&&(f.push({key:"award",text:"争创省市级优质工程奖、安全文明标准化工地"}),f.push({key:"greenQuant",text:"非传统水源利用率、废弃物回收率等绿色施工量化指标"})),f.push({key:"workInjury",text:"按规定为作业人员办理工伤保险"}),0===f.length)return c;let g=await w(f,v(a));return d&&(g.get("award")||c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:"属地创优目标缺失:正文未提及省市级优质工程/文明标准化工地等创优目标(安徽省属地适配项)",suggestion:"在质量目标或创优规划小节补写与项目实际规模相符的创优目标表述;奖项名称必须以评分项要求提取结果(招标文件原文)为准逐字落位,禁止自行编造或替换为其他奖项名称。"}),/四节一环保|绿色施工|节水|节材|节能/u.test(a)&&!g.get("greenQuant")&&c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:"四节一环保量化指标缺失:非传统水源利用率/漏损率/土方平衡率/废弃物回收率等均未量化(附录八基准对照项)",suggestion:"在绿色施工章节补充量化指标(非传统水源利用率、管网漏损率、土方平衡率、可回收废弃物回收率等)与模板周转次数,数值参考行业通用水平与附录八基准,不得编造极端值。"})),/劳务|农民工|工资/u.test(a)&&!g.get("workInjury")&&c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:"工伤保险表述缺失:正文有劳务/农民工管理内容但未提及工伤保险缴纳(政策合规漏项)",suggestion:"在劳务管理/农民工工资保障小节补充“按规定为作业人员办理工伤保险”表述。"}),c}let B=RegExp(`(?:^|
|
|
13
|
+
${d}`,"写作要求:必须严格按“主题块→H4 要点”两层结构输出,三级标题与 H4 要点标题必须与给定标题完全一致,不得改名、合并或遗漏 H4 要点;每个 H4 要点必须覆盖其标注的全部评分细目内容,但不得为这些评分细目单独开设小节标题;项目专属事实只使用事实卡、图谱上下文和绑定证据,法律法规、标准规范等公共知识可直接引用;不得输出后台话术、兜底措辞、待确认、不适用;缺少项目事实的小节不得编造。"].filter(Boolean).join("\n\n")}function v(a){let b=k(a);return!(!b||b.length<3||/^(?:见|详见|按|执行|参见|依据).{0,16}(?:前附表|招标公告|招标文件|合同|协议书|通用条款|专用条款|图纸|清单|附件|资料)$/u.test(b)||/^(?:合同协议书|通用条款|专用条款|招标文件|招标公告|投标人须知前附表|附件|资料)$/u.test(b.replace(/[()()\d一二三四五六七八九十、..\s]/gu,"")))&&/项目|工程|编号|地点|规模|范围|工期|质量|安全|资源|材料|设备|验收|\d/u.test(j(a))}function w(a){let b=[],c=a.draft.content||"";for(let e of h)c.includes(e)&&b.push({level:"error",severity:"blocker",category:"style",owner:"system",message:`${a.draft.title} 正文包含禁止话术:${e}`,suggestion:"工作包"===e?"这是生成系统后台概念,正文中不得出现该词:结合上下文语义改写为正式术语(如“拆除工程”“按专业工程逐项说明”),不得做词面替换。":d.Kd.includes(e)?"评标纪律承诺、廉洁承诺等属商务投标函内容,不得进入技术标正文:删除该承诺句(移入商务文件),本节只保留技术与管理内容。":"改为事实支撑的正式表达;缺失事实不得占位。"});let g=c.split(/(?<=[。;;])/u).filter(a=>(0,d.hh)(a)&&!d.Kd.some(b=>a.includes(b)));g.length>0&&b.push({level:"error",severity:"blocker",category:"style",owner:"system",message:`${a.draft.title} 正文包含商务投标函纪律承诺句:${g[0].slice(0,40)}`,suggestion:"投标/评标纪律承诺、廉洁承诺等属商务投标函内容,不得进入技术标正文:删除该承诺句(移入商务文件),本节只保留技术与管理内容。"}),c.includes("[EVIDENCE_SKELETON]")&&b.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 正文为 LLM 全故障后的证据骨架草稿,禁止作为正式正文通过`,suggestion:"必须由 Repairer 基于小节事实卡与证据完整重写为正式正文,并删除 [EVIDENCE_SKELETON] 标记;若 LLM 仍不可用,本章节保持 failed 阻断。"}),(0,e.V7)(c);let i=a.plannedCoverage,j=a=>{let b=i?.[a];return b&&b.length>0?b[0]:a},l=new Map;for(let a of Object.values(i||{}))a.length>0&&l.set(a[0],(l.get(a[0])||0)+1);let m=a=>{let b=i?.[a];return!!b&&0!==b.length&&(l.get(b[0])||1)>1},n=new Map,o=new Set;for(let b of a.task.sections){let a=j(b.title);m(b.title);let c=n.get(a);n.set(a,void 0===c?b.minChars:Math.max(c,b.minChars))}for(let g of a.task.sections){let a=i?.[g.title],h=a&&a.length>0?a:[g.title],j=h[0],k=m(g.title),l=new Set,p="";for(let a of h){let b=(0,d.Xl)(c,a,{fuzzy:!0});b&&!l.has(b)&&(l.add(b),p+=(p?"\n":"")+b)}if(j!==g.title){let a=(0,d.Xl)(c,g.title,{fuzzy:!0});a&&!l.has(a)&&(0,e.V7)(a)>(0,e.V7)(p)&&(p=a)}if(p.includes("[WRITER_MISSING_SECTION]")||!p&&c.includes("[WRITER_MISSING_SECTION]"))o.has(j)||(o.add(j),b.push({level:"error",severity:"blocker",category:"structure",owner:"system",message:k?`${j} Writer 未完成(承接 ${g.title})`:`${g.title} Writer 未完成`,suggestion:"Repairer 必须基于该小节事实卡和证据生成正式正文,并删除 WRITER_MISSING_SECTION 标记。"}));else if(p&&!o.has(j)){o.add(j);let a=n.get(j)||g.minChars,c=/项目特点.*重点.*难点|重点.*难点.*分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试|见证取样/u.test(g.title),d=k&&!c?Math.max(200,Math.floor(.5*a)):a;(0,e.V7)(p)>=Math.floor(.8*d)||b.push({level:c?"error":"warning",severity:c?"blocker":"warning",category:"structure",owner:"system",message:k?`${j} 正文不足,未达到任务最小深度(承接 ${g.title})`:`${g.title} 正文不足,未达到任务最小深度`,suggestion:c?"关键小节必须基于项目事实和对应关系重写补足;不得仅保留概述性文字。":"应基于该小节事实卡和证据重新生成,不得使用标题占位。"})}else if(!p&&!o.has(j)){o.add(j);let a=/项目特点.*重点.*难点|重点.*难点.*分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试|见证取样/u.test(g.title);b.push({level:a?"error":"warning",severity:a?"blocker":"warning",category:"structure",owner:"system",message:a?`${g.title} 正文不足,未达到任务最小深度`:`${k?`承接小节 ${j} 缺失`:g.title} 未匹配到独立小节标题`,suggestion:a?"关键小节缺失正文,必须基于该小节事实卡和证据生成正式正文,不得以标题占位。":"正文已成文但小节标题与规划标题不完全一致,建议后续按规划标题进一步规范结构。"})}if(g.ready||b.push(...g.issues.map(a=>({...a,level:"warning",severity:"warning"}))),/主要分部分项工程施工方案|主要施工方法/u.test(g.title)){let a=(0,d.Xl)(c,j,{fuzzy:!0}),h=(0,e.V7)(a),i=new Set([...a.match(f.aX)||[],...a.match(f.LT)||[]]).size,k=new Set(a.match(f.s2)||[]).size,l=h>0?k/(h/1e3):0;(0,e.V7)(a)>=800&&(i<4||l<2)&&b.push({level:"warning",severity:"warning",category:"professional_chain",owner:"system",message:`${g.title} 参数落位不足:工艺参数 ${i} 个(要求不少于 4 个),量化参数密度每千字 ${l.toFixed(1)} 个(要求不少于 2 个)`,suggestion:"必须补充 mm/MPa/间距/偏差/坡度/试验压力等工艺参数(来自绑定资料或行业规范值)或设备型号规格参数,并提升量化参数(数量/规格/工期/面积等)落位密度;同一参数不得反复堆砌凑数。"})}if(/主要分部分项工程施工方案|主要施工方法|项目主要施工内容|施工流程|施工顺序|多工序穿插|三检制度|隐蔽工程验收|闭环整改|应急演练|转运路线/u.test(g.title)){let a=(0,d.Xl)(c,j,{fuzzy:!0});(0,e.V7)(a)>=500&&!(0,d.Z1)(a)&&b.push({level:"warning",severity:"warning",category:"professional_chain",owner:"system",message:`${g.title} 工序顺序表达缺失:工序序列未以顺序词叙述、编号步骤、列表或箭头链任一形式表达`,suggestion:"工艺流程与方法叙述中的连续工序须有明确的顺序表达,形式由模型自然选择(顺序词叙述、编号步骤、有序列表或箭头链均可,如“先进行基层清理,再放线定位,随后分层摊铺,然后碾压,最后验收”),保证工序先后顺序清晰即可。"})}}let p=a.context.materialScope.selectedRoots;for(let d of a.context.materialScope.rejectedRoots)d&&!p.includes(d)&&c.includes(d)&&b.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 混入非当前资料组名称:${d}`,suggestion:"必须删除跨项目内容并重新检索当前资料组证据。"});let q=a.task.facts.filter(v),r=q.filter(a=>{let b=k(a);return b.length>=2&&c.includes(b.slice(0,Math.min(18,b.length)))}).length;q.length>=3&&0===r&&1200>(0,e.V7)(c)&&b.push({level:"warning",severity:"warning",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 未明显落位章节事实卡`,suggestion:"建议将章节事实卡中的关键工程事实写入对应小节,但不因引用型或低可执行事实阻断。"});let s=b.filter(a=>"error"===a.level||"blocker"===a.severity),t=b.filter(a=>/正文不足|未落位章节事实卡/u.test(a.message)),u=s.some(a=>/Writer 未完成|正文不足,未达到任务最小深度/u.test(a.message));return{issues:b,supportedFacts:r,unsupportedSignals:b.map(a=>a.message),repairable:b.length>0&&(b.length<=6||t.length===b.length||0===s.length||u)}}function x(a){if(!a.review.repairable)return"";let b=a.plannedMode?"【结构约束】本章采用主题块成稿模式,必须保持现有三级主题块与 H4 要点标题不变;只修复列出的问题,不得新增小节、不得拆分或合并现有小节、不得把评分细目展开为独立标题。":t(a.task);return["【Agent 定向修复任务】",`章节:${a.task.title}`,"只修复下列问题,不重写无关内容;如果问题是小节正文不足,必须按原小节标题完整补足该小节正式正文,每个小节不得少于任务最小深度:",...a.review.issues.map(a=>`- ${a.message};${a.suggestion||""}`),b].join("\n")}},44505:(a,b,c)=>{c.d(b,{Et:()=>Y,H:()=>_,Ih:()=>K,N$:()=>ab,T:()=>V,U$:()=>F,Vw:()=>M,Xc:()=>L,YN:()=>J,a8:()=>l,cJ:()=>A,cT:()=>ae,cf:()=>j,dF:()=>H,eS:()=>h,l4:()=>E,mC:()=>U,qj:()=>W,r8:()=>r,rA:()=>p,s3:()=>v,sn:()=>x,t1:()=>D,u2:()=>n,vH:()=>t,y2:()=>C});var d=c(78217),e=c(22157),f=c(37047),g=c(41991);let h=/(\d{4})\s*年\s*(\d{1,2})\s*月\s*(\d{1,2})\s*日/gu,i=/进度计划|里程碑|节点安排|验收时间|完成日期|竣工日期|移交日期|合同签订/u;function j(a,b){let c=[],d=function(a){let b=new Set;for(let c of[...a.project,...a.schedule,...a.quality,...a.resources,...a.preciseFacts].map(a=>`${a.key||""}${a.fieldName||""}${(0,e.lG)(a.value)}`))for(let a of c.matchAll(h))b.add(`${a[1]}年${a[2]}月${a[3]}日`);return b}(b),f=[...b.schedule,...b.project].map(a=>`${a.key||""}${(0,e.lG)(a.value)}`).join(" "),g=h.test(f);for(let b of(h.lastIndex=0,a.matchAll(h))){let e=`${b[1]}年${b[2]}月${b[3]}日`;if(d.has(e))continue;let f=Math.max(0,(b.index||0)-40),h=a.slice(f,(b.index||0)+e.length+40);g&&i.test(h)||c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文编造开工日期“${e}”:绑定资料未提供该具体日历日期(招标文件以开工令时间为准)`,suggestion:`删除自行设定的具体日期,统一改写为“以开工令时间为准”;如为进度计划节点日期,必须标注为计划推算节点并保持与总工期一致。`})}return c.slice(0,3)}let k=/(单体建筑面积|总建筑面积|建筑面积)[^。;;\n]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)/gu;function l(a,b){let c=[],d=function(a){let b=[];for(let c of[...a.project,...a.preciseFacts].map(a=>`${a.fieldName||a.key||""}:${(0,e.lG)(a.value)}`)){let a=/(总占地面积|占地面积|单体建筑面积|总建筑面积|建筑面积|地上建筑面积|地下建筑面积|总用地面积)/u.exec(c)?.[1],d=/([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)/u.exec(c);if(!a||!d)continue;let e=Number(d[1].replace(/[,,]/gu,""));Number.isFinite(e)&&e>0&&b.push({label:a,value:e})}return b}(b),f=new Set(d.filter(a=>/占地面积/u.test(a.label)).map(a=>a.value)),g=new Set(d.filter(a=>/建筑面积/u.test(a.label)&&!/地上|地下/u.test(a.label)).map(a=>a.value));if(0===f.size||0===g.size)return c;for(let b of a.matchAll(k)){let a=Number(b[2].replace(/[,,]/gu,""));if(!Number.isFinite(a)||a<=0||!f.has(a)||g.has(a))continue;let d=b[1],e=[...g].join("、");c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`字段-数值错配:“${d} ${b[2]}㎡”将总占地面积误作${d}(绑定资料${d}数值为 ${e}㎡)`,suggestion:`总占地面积与建筑面积是两个独立字段,必须严格区分:将“${d} ${b[2]}㎡”改为资料数值“${d} ${e}㎡”,总占地面积保持独立表述。`})}return c.slice(0,3)}let m=/(地上[^。;;]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)[^。;;]{0,40}?地下[^。;;]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)[^。;;]{0,60}?(?:单体建筑面积|总建筑面积)[^。;;]{0,20}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米))/gu;function n(a){let b=[];for(let c of a.matchAll(m)){let a=Number(c[2].replace(/[,,]/gu,"")),d=Number(c[3].replace(/[,,]/gu,"")),e=Number(c[4].replace(/[,,]/gu,""));if(![a,d,e].every(Number.isFinite))continue;let f=a+d,g=Math.max(1,.001*e);Math.abs(f-e)>g&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`面积算术矛盾:地上 ${a}㎡ + 地下 ${d}㎡ = ${f}㎡,与同句“单体建筑面积 ${e}㎡”不符(差 ${Math.abs(f-e).toFixed(2)}㎡)`,suggestion:`地上与地下面积之和必须等于单体建筑面积:按绑定资料统一三者数值,删除错误数值表述。`})}return b.slice(0,3)}let o=/(?:高峰期|高峰|峰值)[^。;;\n]{0,20}?(?:约)?\s*([\d,]+)\s*人/g;function p(a){let b=[],c=[];for(let b of a.matchAll(o)){let a=Number(b[1].replace(/[,,]/gu,""));Number.isFinite(a)&&a>0&&c.push({value:a,text:b[0].trim().slice(0,40)})}let d=function(a){let b=[],c=a.split(/\r?\n/u),d=/^\|.+\|$/u,e=/阶段|时期|工期|工序|进度/u,f=/人数|劳动力|作业人员|施工人员|投入人数/u,g=/^:?-{3,}:?$/u,h=a=>a.replace(/[*_`~]/gu,"").trim();for(let a=0;a<c.length;a+=1){let i,j,k;if(!d.test(c[a].trim()))continue;let l=[];for(;a<c.length&&d.test(c[a].trim());)l.push(c[a].trim()),a+=1;if(a-=1,l.length<3)continue;let m=a=>a.split("|").map(a=>a.trim()).slice(1,-1),n=l.findIndex((a,b)=>b>0&&m(a).every(a=>g.test(a)));if(1===n&&l.length>=3)i=m(l[0]).map(h),j=l.slice(2);else{if(-1!==n||!(l.length>=2))continue;let a=m(l[0]).map(h);if(!(e.test(a.join("|"))&&f.test(a.join("|"))))continue;i=a,j=l.slice(1)}let o=i.findIndex(a=>e.test(a)),p=i.findIndex(a=>f.test(a));if(p<0||o>=0&&o===p||/岗位/u.test(i.join("|"))&&/职责|持证|职称/u.test(i.join("|")))continue;let q=[],r=0;for(let a of j){let b=m(a),c=b[p]||"",d=/^([\d,]+)\s*人?$/u.exec(c);if(!d)continue;let e=Number(d[1].replace(/[,,]/gu,""));if(Number.isFinite(e)&&!(e<=0)){if(b.some((a,b)=>b!==p&&/合计|总计|小计/u.test(a))){k=e;continue}q.push(e),r+=e}}if(0===q.length&&void 0===k)continue;let s=Math.max(...q.length>0?q:[k||0]);b.push({countCells:q,totalCell:k,detailSum:r,peak:s})}return b}(a),e=d.map(a=>a.peak),f=(a,c)=>b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:a,suggestion:c});for(let a=0;a<c.length;a+=1)for(let b=a+1;b<c.length;b+=1){let[d,e]=[c[a],c[b]],g=Math.abs(d.value-e.value)/Math.max(d.value,e.value);if(g>.3){f(`劳动力数据矛盾:正文“${d.text}”(${d.value} 人)与“${e.text}”(${e.value} 人)互斥(相差 ${Math.round(100*g)}%)`,"劳动力峰值数据必须全文唯一:以分阶段投入明细表为准统一正文各处峰值表述,删除矛盾数字。"),a=c.length;break}}if(e.length>=2){let a=Math.max(...e),b=Math.min(...e),c=Math.abs(a-b)/a;c>.3&&f(`劳动力数据矛盾:分阶段投入明细表峰值 ${b} 人与另一劳动力表峰值 ${a} 人互斥(相差 ${Math.round(100*c)}%)`,"劳动力峰值数据必须全文唯一:统一各劳动力表格的峰值数据,删除矛盾表格数字。")}let g=c.reduce((a,b)=>Math.max(a,b.value),0),h=e.length>0?Math.max(...e):void 0;if(void 0!==h&&g>0&&g>1.3*h){let a=c.find(a=>a.value===g)?.text||"";f(`劳动力数据矛盾:正文表述“${a}”达 ${g} 人,而分阶段投入明细表最大峰值为 ${h} 人(超出 ${Math.round((g-h)/h*100)}%)`,"劳动力投入数据必须全文统一:以分阶段明细表为准复核正文峰值表述,删除与表格矛盾的“高峰期 X 人”措辞或调整表格数据。")}let i=[];for(let b of a.matchAll(/(?:高峰期|高峰|峰值)[^。;;\n]{0,16}?控制(?:在|为|到)?(?:约)?\s*([\d,]+)\s*人(?:以内|以下|之内)?/gu)){let a=Number(b[1].replace(/[,,]/gu,""));Number.isFinite(a)&&a>0&&i.push(a)}if(i.length>0){let a=Math.max(...i),b=[...c,...void 0!==h?[{value:h}]:[]].filter(b=>b.value>a);if(b.length>0){let c=Math.max(...b.map(a=>a.value));f(`劳动力数据矛盾:正文“高峰期总人数控制在${a}人”的上限表述与峰值表述 ${c} 人不自洽(阶段高峰投入超出控制上限 ${Math.round((c-a)/a*100)}%)`,"总量控制上限与各阶段峰值必须自洽:阶段高峰人数不得超过全文宣称的高峰控制人数;以分阶段投入明细表为准修正控制目标或各阶段峰值表述。")}}for(let a of d){if(void 0===a.totalCell||a.countCells.length<2)continue;let b=Math.abs(a.totalCell-a.detailSum)/Math.max(a.totalCell,a.detailSum);b>.1&&f(`劳动力数据矛盾:劳动力表合计行 ${a.totalCell} 人与明细行之和 ${a.detailSum} 人不符(差 ${Math.round(100*b)}%)`,"劳动力表合计必须等于各明细行人数之和:统一合计行与明细行数据,删除矛盾数字。")}let j=[...a.matchAll(/([\d,]+)\s*(?:个)?工日/gu)].map(a=>Number(a[1].replace(/[,,]/gu,""))).filter(a=>Number.isFinite(a)&&a>0),k=[...a.matchAll(/(?:工期|总工期|计划工期)[^。;;\n]{0,16}?(\d{2,4})\s*(?:个)?(?:日历)?天/gu)].map(a=>Number(a[1])).filter(a=>Number.isFinite(a)&&a>=30&&a<=3e3);if(j.length>0&&g>0&&k.length>0){let a=Math.max(...j),b=Math.max(...k),c=g*b*1.3,d=g*b*.1;(a>c||a<d)&&f(`劳动力数据矛盾:总工日 ${a} 个与峰值 ${g} 人\xd7总工期 ${b} 天不自洽(合理区间约 ${Math.round(d)}~${Math.round(c)} 个)`,"总工日必须与劳动力峰值和总工期量级自洽:按各阶段人数\xd7阶段工期重算总工日,或修正峰值人数/总工期表述。")}return b.slice(0,5)}let q={slope:"基坑放坡开挖、土钉墙喷锚支护坡面",pile:"钻孔灌注桩、排桩、地下连续墙围护结构"};async function r(a){let b=[],c=a.split(/\n{2,}/u).filter(a=>a.trim().length>=30);if(0===c.length)return b;let d=await (0,f.Mv)(c,Object.values(q)),e=a=>d(a,q.slope)>=f.Eh,g=/钻孔灌注桩|灌注桩|排桩|地下连续墙|咬合桩|支护桩/u,h=a=>g.test(a)&&d(a,q.pile)>=f.Eh,i=c.filter(a=>e(a)&&!h(a)),j=c.filter(a=>h(a)&&!e(a));return 0===i.length||0===j.length||b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基坑支护方案前后不一致:放坡喷锚类支护表述与灌注桩排桩类支护表述分别成段出现(放坡喷锚类 ${i.length} 段、灌注桩排桩类 ${j.length} 段),属跨模板拼接断裂`,suggestion:"支护形式必须全文统一为一种体系(以图纸/地质条件为准):确定采用放坡喷锚或灌注桩排桩后,删除另一种体系的表述,并补充基坑开挖深度数值支撑危大分级判定。"}),b}let s=/^#{2,4}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]*(?:危大工程(?:辨识)?(?:清单|识别)|危大(?:工程)?(?:及超危大)?(?:清单|识别|辨识))[^\n]*$/gmu;function t(a){let b=[],c=function(a){let b=a.split(/\r?\n/u),c=[];for(let a=0;a<b.length;a+=1){if(!s.test(b[a].trim()))continue;let d=[];for(let c=a+1;c<Math.min(b.length,a+30);c+=1){let a=b[c].trim();if(/^#{1,6}\s/u.test(a))break;let e=/^(?:\d+[.、.)]|[-*•])?\s*([^。;;|]{2,40})$/u.exec(a)?.[1];e&&d.push(e.replace(/^[\s\d.、()()【】-]+/u,"").replace(/[((【][^))】]*[))】]/gu,"").replace(/施工$/u,"").replace(/作业$/u,"").replace(/\s+/gu,"").trim())}d.length>=2&&c.push({title:b[a].trim(),items:[...new Set(d)]})}return c}(a);if(c.length<2)return b;for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a],f=c[d],g=e.items.filter(a=>!f.items.includes(a)),h=f.items.filter(a=>!e.items.includes(a));(0!==g.length||0!==h.length)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`危大工程辨识清单不一致:“${e.title.slice(0,30)}”(${e.items.length} 项)与“${f.title.slice(0,30)}”(${f.items.length} 项)存在差异:前者独有【${g.join("、")||"无"}】,后者独有【${h.join("、")||"无"}】`,suggestion:"全文危大工程辨识清单必须唯一且一致:合并两处清单,统一项名、数量与分级表述,避免评标专家以清单矛盾质疑辨识深度。"})}return b.slice(0,3)}let u=[{name:"施工工地周边100%围挡",query:"施工工地周边设置围挡封闭管理"},{name:"物料堆放100%覆盖",query:"物料堆放覆盖防尘"},{name:"出入车辆100%冲洗",query:"出入车辆冲洗设施清洗出场"},{name:"施工现场地面100%硬化",query:"施工现场场地地面硬化"},{name:"拆迁工地100%湿法作业",query:"拆迁工地湿法作业洒水降尘"},{name:"渣土车辆100%密闭运输",query:"渣土车辆密闭运输防止遗撒"}];function v(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=c.trim();if(!(!a||/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a)))for(let c of a.split(/(?<=[。!?!?;;])/u)){let a=c.trim();a.length>=8&&a.length<=120&&b.push(a)}}let c=[...new Set(b)];if(c.length<=400)return c;let d=Math.ceil(c.length/400);return c.filter((a,b)=>b%d==0).slice(0,400)}async function w(a,b){if(0===b.length||0===a.length)return new Map;let c=await (0,f.Mv)(a.map(a=>a.text),b);return new Map(a.map(a=>[a.key,b.some(b=>c(a.text,b)>=.6)]))}async function x(a){let b=[];if(!/扬尘|环保|文明施工|绿色施工/u.test(a))return b;let c=await w(u.map(a=>({key:a.name,text:a.query})),v(a)),d=/(?:本项目|本工程|该工程|该项目|本标段|本施工项目)[^。;;\n]{0,30}(?:无拆迁|不涉及拆迁|无房屋拆除|无拆除)/u.test(a),e=u.filter(a=>!c.get(a.name)).filter(a=>!("拆迁工地100%湿法作业"===a.name&&d)).map(a=>a.name);return 0===e.length||b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`“扬尘治理六个百分百”未逐项落实:缺少【${e.join("、")}】(${u.length-e.length}/${u.length} 项命中)`,suggestion:"按检查规范第七部分要求逐条表述六项措施:工地周边100%围挡、物料堆放100%覆盖、出入车辆100%冲洗、施工现场地面100%硬化、拆迁工地100%湿法作业、渣土车辆100%密闭运输。"}),b}let y=/建设地点|工程地点|项目地点|实施地点|服务地点|交付地点|建设地址/u,z=["安徽","合肥","芜湖","蚌埠","淮南","马鞍山","淮北","铜陵","安庆","黄山","滁州","阜阳","宿州","六安","亳州","池州","宣城"];async function A(a,b){let c=[],d=b.project.some(a=>y.test(`${a.fieldName||""}${a.key||""}`)&&z.some(b=>(0,e.lG)(a.value).includes(b))),f=[];if(d&&(f.push({key:"award",text:"争创省市级优质工程奖、安全文明标准化工地"}),f.push({key:"greenQuant",text:"非传统水源利用率、废弃物回收率等绿色施工量化指标"})),f.push({key:"workInjury",text:"按规定为作业人员办理工伤保险"}),0===f.length)return c;let g=await w(f,v(a));return d&&(g.get("award")||c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:"属地创优目标缺失:正文未提及省市级优质工程/文明标准化工地等创优目标(安徽省属地适配项)",suggestion:"在质量目标或创优规划小节补写与项目实际规模相符的创优目标表述;奖项名称必须以评分项要求提取结果(招标文件原文)为准逐字落位,禁止自行编造或替换为其他奖项名称。"}),/四节一环保|绿色施工|节水|节材|节能/u.test(a)&&!g.get("greenQuant")&&c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:"四节一环保量化指标缺失:非传统水源利用率/漏损率/土方平衡率/废弃物回收率等均未量化(附录八基准对照项)",suggestion:"在绿色施工章节补充量化指标(非传统水源利用率、管网漏损率、土方平衡率、可回收废弃物回收率等)与模板周转次数,数值参考行业通用水平与附录八基准,不得编造极端值。"})),/劳务|农民工|工资/u.test(a)&&!g.get("workInjury")&&c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:"工伤保险表述缺失:正文有劳务/农民工管理内容但未提及工伤保险缴纳(政策合规漏项)",suggestion:"在劳务管理/农民工工资保障小节补充“按规定为作业人员办理工伤保险”表述。"}),c}let B=RegExp(`(?:^|
|
|
14
14
|
)(?:#{1,6}\\s+[^
|
|
15
15
|
]*
|
|
16
16
|
+)?([^
|