@customize-agent/server 4.16.1 → 4.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +21 -21
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/208.js +22 -18
- package/.next/server/chunks/3541.js +170 -0
- package/.next/server/chunks/5284.js +11 -11
- package/.next/server/chunks/6482.js +3 -3
- package/.next/server/chunks/8204.js +1 -1
- package/.next/server/chunks/8661.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/api/assets/generated/preview.js +1 -1
- package/.next/server/pages/api/assets/generated/preview.js.nft.json +1 -1
- package/.next/server/pages/api/assets/generated.js +1 -1
- package/.next/server/pages/api/assets/generated.js.nft.json +1 -1
- package/.next/server/pages/api/config/embedding/healthCheck.js.nft.json +1 -1
- package/.next/server/pages/api/documents/chapter/regenerate.js +1 -1
- package/.next/server/pages/api/documents/chapter/regenerate.js.nft.json +1 -1
- package/.next/server/pages/api/documents/export.js +3 -3
- package/.next/server/pages/api/documents/export.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generate.js +2 -2
- package/.next/server/pages/api/documents/generate.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id].js +1 -1
- package/.next/server/pages/api/documents/generated/[id].js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated.js +1 -1
- package/.next/server/pages/api/documents/generated.js.nft.json +1 -1
- package/.next/server/pages/api/documents/templates.js +1 -1
- package/.next/server/pages/api/documents/templates.js.nft.json +1 -1
- package/.next/server/pages/api/jobs/[id].js.nft.json +1 -1
- package/.next/server/pages/api/jobs.js.nft.json +1 -1
- package/.next/server/pages/api/kb/categories.js.nft.json +1 -1
- package/.next/server/pages/api/kb/duplicates.js.nft.json +1 -1
- package/.next/server/pages/api/kb/evaluate.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/detail.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/export.js +5 -0
- package/.next/server/pages/api/kb/files/export.js.nft.json +1 -0
- package/.next/server/pages/api/kb/files/open.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/preview-pdf-page.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/reindex.js +1 -1
- package/.next/server/pages/api/kb/files/reindex.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/search.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/tree.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files.js.nft.json +1 -1
- package/.next/server/pages/api/kb/ignore.js.nft.json +1 -1
- package/.next/server/pages/api/kb/intelligence.js.nft.json +1 -1
- package/.next/server/pages/api/kb/operations.js.nft.json +1 -1
- package/.next/server/pages/api/kb/reindex.js +1 -1
- package/.next/server/pages/api/kb/reindex.js.nft.json +1 -1
- package/.next/server/pages/api/kb/search.js +1 -1
- package/.next/server/pages/api/kb/search.js.nft.json +1 -1
- package/.next/server/pages/api/kb/stats.js.nft.json +1 -1
- package/.next/server/pages/api/kb/tags.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload/complete.js +1 -1
- package/.next/server/pages/api/kb/upload/complete.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload/progress.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload.js +1 -1
- package/.next/server/pages/api/kb/upload.js.nft.json +1 -1
- package/.next/server/pages/api/prompt.js.nft.json +1 -1
- package/.next/server/pages/api/template-references.js.nft.json +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 +32 -31
- package/.next/static/{Q3e58sLbmvqrEqp40m3Ok → JfC5YRenZdY9huEsCTWpB}/_buildManifest.js +1 -1
- package/.next/static/chunks/{224-790cf01fcf6820ee.js → 224-0415408fff1d1c8b.js} +1 -1
- package/.next/static/chunks/260-580088826d643423.js +1 -0
- package/.next/static/chunks/{289-42781fb699646699.js → 289-fc1b25371e004552.js} +1 -1
- package/.next/static/chunks/788-dca0d550ad6bd8b2.js +1 -0
- package/.next/static/chunks/pages/{_app-3e8b35112a00821a.js → _app-24bef62eef01afe6.js} +2 -2
- package/.next/static/chunks/pages/documents-66057ee3c8ffff6d.js +1 -0
- package/.next/static/chunks/pages/knowledge/files-33782c4b41f33750.js +1 -0
- package/.next/static/chunks/pages/knowledge/manage-5b1b4d3804752f8b.js +1 -0
- package/.next/static/chunks/pages/prompt-edc2dfea09aaedc1.js +1 -0
- package/.next/static/chunks/pages/system/logs-ee67e2c93147dfc3.js +1 -0
- package/messages/en-US.json +6 -1
- package/messages/zh-CN.json +6 -1
- package/package.json +1 -1
- package/scripts/gen-explicit-exports.cjs +84 -0
- package/scripts/verify-explicit-exports.cjs +37 -0
- package/.next/server/chunks/5650.js +0 -170
- package/.next/static/chunks/260-244c94eacd903620.js +0 -1
- package/.next/static/chunks/788-e98701da4d6ca319.js +0 -1
- package/.next/static/chunks/pages/documents-185ab225628d4705.js +0 -1
- package/.next/static/chunks/pages/knowledge/files-3ba329d8e6335929.js +0 -1
- package/.next/static/chunks/pages/knowledge/manage-558987c599dc4cd5.js +0 -1
- package/.next/static/chunks/pages/prompt-839287c514595765.js +0 -1
- package/.next/static/chunks/pages/system/logs-2e849bcdf371d791.js +0 -1
- /package/.next/static/{Q3e58sLbmvqrEqp40m3Ok → JfC5YRenZdY9huEsCTWpB}/_ssgManifest.js +0 -0
|
@@ -40,11 +40,11 @@ ${b.map(a=>`- ${a}`).join("\n")}`:"",c.length?`材料缺失(禁止编造具体
|
|
|
40
40
|
|
|
41
41
|
【定向补充检索】${c}`:"")}}let B=A(j),F=b.sections?.length?`本章小节由生成前规划得到,请完整包含并展开以下小节:
|
|
42
42
|
${b.sections.map(a=>`- ${a}`).join("\n")}`:"本章没有预设小节;请按用户提示词、模板章节、角色要求和绑定材料自然组织正文。",G=function(a,b){let c=E(a,b);return 0===c.length?"":["本章小节篇幅计划(首轮生成应尽量一次达成,避免后续补写):",...c.map(a=>`- ${a.title}:约 ${a.targetWords} 字,至少达到 ${Math.floor(.8*a.targetWords)} 字,并写入与该小节相关的材料事实、适用边界和必要说明。`)].join("\n")}(b,n.targetWords||n.minWords||0),H=(0,l.T4)(b),I=(0,m.Ls)(b),J=(0,m.db)(b),K=(0,v.vN)(b.title,b.sections||[]),L=n.compactProjectContext?n.scopedProjectContext?U(i):T(i):i,M=[(0,g.b_)(g.rd),n.forbidDrawingImages?"图片类材料只作为文本事实依据;禁止插入图片或 Markdown 图片语法。":""].filter(Boolean).join("\n\n"),N=[e?`配置写作主控提示词:
|
|
43
|
-
${e}`:"",`文档模板:${a.name}`,`章节目的:${b.purpose}`,j?`用户要求:${j}`:"",B,n.planDataMasterText||"",i?`上下文/历史记忆(仅作偏好、历史纠偏和连续性参考;如与知识库证据冲突,以知识库证据为准):
|
|
43
|
+
${e}`:"",`文档模板:${a.name}`,`章节目的:${b.purpose}`,j?`用户要求:${j}`:"",B,n.planDataMasterText||"",n.decisionLockText||"",i?`上下文/历史记忆(仅作偏好、历史纠偏和连续性参考;如与知识库证据冲突,以知识库证据为准):
|
|
44
44
|
${L}`:"",n.sharedFactLayerText||"",n.factCoverageContext||"",d.length?`需要特别补足的信息:${d.join("、")}`:"",n.chapterLevelContext||"",u,"请生成可直接导出的 Markdown 章节,要求:","- 内容必须遵循用户提示词、模板章节、提示词角色、项目资料包和自动识别的资料类型;不得编造材料未提供的项目专属事实;法律法规名称、标准规范编号等公共知识可依据现行有效版本直接引用。","- 将材料要点自然融入正文;不要输出系统证据清单、中间分析过程或后台流程话术。",g.KX,`章节标题:${b.title}`,`- 保留章节标题;内容不少于 ${n.minWords||1e3} 字${n.targetWords?`,目标约 ${n.targetWords} 字`:""}${n.maxWords?`,最多不超过 ${n.maxWords} 字`:""}。`,b.sections?.length?"- 必须完整包含已规划小节;不要新增未规划的二级小节。":"- 未预设小节时,不要为了凑结构强行新增小节。",b.tablePlans?.length?"- 本章存在结构化表格规划时,必须输出正式 Markdown 表格;表头必须严格使用规划字段,不得擅自改字段、删字段或增加后台溯源列。":b.tableSections?.length?`- 以下小节可使用表格辅助表达:${b.tableSections.join("、")}。`:"",b.tablePlans?.length?"- 表格字段值必须优先来自项目图谱、可信事实和绑定材料;projectFactOnly 字段不得编造,也不得写任何固定占位话术。":"",F,G,H,I,J,...K,k||"","",r?"绑定材料:":"",r,n.userWriterRules?`
|
|
45
45
|
【用户写作指令——必须严格遵守】
|
|
46
46
|
${n.userWriterRules}`:""].filter(Boolean).join("\n"),O={l0:M.length,l1:(0,h.CX)([e?`配置写作主控提示词:
|
|
47
|
-
${e}`:"",j?`用户要求:${j}`:"",B,n.planDataMasterText||"","请生成可直接导出的 Markdown 章节,要求:","- 内容必须遵循用户提示词、模板章节、提示词角色、项目资料包和自动识别的资料类型;不得编造材料未提供的项目专属事实;法律法规名称、标准规范编号等公共知识可依据现行有效版本直接引用。","- 将材料要点自然融入正文;不要输出系统证据清单、中间分析过程或后台流程话术。",g.KX]),l2:(0,h.CX)([`文档模板:${a.name}`,`章节目的:${b.purpose}`,i?`上下文/历史记忆(仅作偏好、历史纠偏和连续性参考;如与知识库证据冲突,以知识库证据为准):
|
|
47
|
+
${e}`:"",j?`用户要求:${j}`:"",B,n.planDataMasterText||"",n.decisionLockText||"","请生成可直接导出的 Markdown 章节,要求:","- 内容必须遵循用户提示词、模板章节、提示词角色、项目资料包和自动识别的资料类型;不得编造材料未提供的项目专属事实;法律法规名称、标准规范编号等公共知识可依据现行有效版本直接引用。","- 将材料要点自然融入正文;不要输出系统证据清单、中间分析过程或后台流程话术。",g.KX]),l2:(0,h.CX)([`文档模板:${a.name}`,`章节目的:${b.purpose}`,i?`上下文/历史记忆(仅作偏好、历史纠偏和连续性参考;如与知识库证据冲突,以知识库证据为准):
|
|
48
48
|
${L}`:"",n.sharedFactLayerText||"",n.factCoverageContext||"",d.length?`需要特别补足的信息:${d.join("、")}`:"",n.chapterLevelContext||"",u]),l3:(0,h.CX)([`章节标题:${b.title}`,`- 保留章节标题;内容不少于 ${n.minWords||1e3} 字${n.targetWords?`,目标约 ${n.targetWords} 字`:""}${n.maxWords?`,最多不超过 ${n.maxWords} 字`:""}。`,b.sections?.length?"- 必须完整包含已规划小节;不要新增未规划的二级小节。":"- 未预设小节时,不要为了凑结构强行新增小节。",b.tablePlans?.length?"- 本章存在结构化表格规划时,必须输出正式 Markdown 表格;表头必须严格使用规划字段,不得擅自改字段、删字段或增加后台溯源列。":b.tableSections?.length?`- 以下小节可使用表格辅助表达:${b.tableSections.join("、")}。`:"",b.tablePlans?.length?"- 表格字段值必须优先来自项目图谱、可信事实和绑定材料;projectFactOnly 字段不得编造,也不得写任何固定占位话术。":"",F,G,H,I,J,...K,k||"",r?"绑定材料:":"",r,n.userWriterRules?`
|
|
49
49
|
【用户写作指令——必须严格遵守】
|
|
50
50
|
${n.userWriterRules}`:""])},P=await (0,h.rI)(M,N,!1,{maxTokens:n.maxTokens,signal:n.signal,diagnostics:n.diagnostics,disableThinkingBoost:n.disableThinkingBoost,contextLayers:O,prefixKey:`writer-block:${b.id}`});if(P&&!(P.length<120))return(0,g.kT)((0,g.FD)(P.startsWith("## ")?P:`## ${b.title}
|
|
@@ -68,22 +68,22 @@ ${n(m,Math.max(400,b-l.length-20))}`:n(m,b)}async function V(a){var b;let c=G(a.
|
|
|
68
68
|
- 工艺参数(参考):${a.params.join(";")}
|
|
69
69
|
- 检测验收:${a.acceptance.join(";")}
|
|
70
70
|
- 规范依据:${a.standards.join(";")}`})].join("\n")):"",y=[a.promptTexts?`配置写作主控提示词:
|
|
71
|
-
${a.promptTexts}`:"",`文档模板:${a.template.name}`,`章节标题:${a.chapter.title}`,a.requirement?`用户要求:${a.requirement}`:"",A(a.requirement),a.planDataMasterText||"",a.projectContext?`上下文:
|
|
71
|
+
${a.promptTexts}`:"",`文档模板:${a.template.name}`,`章节标题:${a.chapter.title}`,a.requirement?`用户要求:${a.requirement}`:"",A(a.requirement),a.planDataMasterText||"",a.decisionLockText||"",a.projectContext?`上下文:
|
|
72
72
|
${t}`:"",a.factCoverageContext||"",a.sharedFactLayerText||"",a.roleContext,a.missingFacts.length?`需要特别补足的信息:${a.missingFacts.join("、")}`:"","本章节结构已由系统按模板和提示词锁定;不得删除、重命名、合并或重排当前节标题;每个节下必须自然展开三级小节,三级小节承载正文。",g.KX,`当前二级小节:${a.sectionTitle}`,(0,k.av)(a.chapter.title,a.sectionTitle),a.tablePlanInstruction||"",d.prompt,...(0,v.zC)(a.sectionTitle),x,`请只生成当前节内容,使用“### ${a.sectionTitle}”作为节标题;正文必须下沉到若干“#### 三级小节标题”下面,不得在 ### 标题后直接写大段正文。目标约 ${a.targetWords} 字${a.maxWords?`,最多不超过 ${a.maxWords} 字`:""}。`,a.qualityFeedback?`上轮小节未通过质量检查,必须修正:${a.qualityFeedback}`:"",s?`绑定材料:
|
|
73
73
|
${s}`:""].filter(Boolean).join("\n\n"),z=[(0,g.b_)("你是专业文档的小节生成专家。\n\n"+g.rd)].filter(Boolean).join("\n\n"),B={l0:z.length,l1:(0,h.CX)([a.promptTexts?`配置写作主控提示词:
|
|
74
|
-
${a.promptTexts}`:"",a.requirement?`用户要求:${a.requirement}`:"",A(a.requirement),a.planDataMasterText||"","本章节结构已由系统按模板和提示词锁定;不得删除、重命名、合并或重排当前节标题;每个节下必须自然展开三级小节,三级小节承载正文。",g.KX]),l2:(0,h.CX)([`文档模板:${a.template.name}`,`章节标题:${a.chapter.title}`,a.projectContext?`上下文:
|
|
74
|
+
${a.promptTexts}`:"",a.requirement?`用户要求:${a.requirement}`:"",A(a.requirement),a.planDataMasterText||"",a.decisionLockText||"","本章节结构已由系统按模板和提示词锁定;不得删除、重命名、合并或重排当前节标题;每个节下必须自然展开三级小节,三级小节承载正文。",g.KX]),l2:(0,h.CX)([`文档模板:${a.template.name}`,`章节标题:${a.chapter.title}`,a.projectContext?`上下文:
|
|
75
75
|
${t}`:"",a.factCoverageContext||"",a.sharedFactLayerText||"",a.roleContext,a.missingFacts.length?`需要特别补足的信息:${a.missingFacts.join("、")}`:""]),l3:(0,h.CX)([`当前二级小节:${a.sectionTitle}`,(0,k.av)(a.chapter.title,a.sectionTitle),a.tablePlanInstruction||"",d.prompt,...(0,v.zC)(a.sectionTitle),x,`请只生成当前节内容,使用“### ${a.sectionTitle}”作为节标题;正文必须下沉到若干“#### 三级小节标题”下面,不得在 ### 标题后直接写大段正文。目标约 ${a.targetWords} 字${a.maxWords?`,最多不超过 ${a.maxWords} 字`:""}。`,a.qualityFeedback?`上轮小节未通过质量检查,必须修正:${a.qualityFeedback}`:"",s?`绑定材料:
|
|
76
76
|
${s}`:""])},C=()=>(0,h.rI)(z,y,!1,{maxTokens:Math.min(8192,Math.max(2800,Math.ceil(2.6*a.targetWords))),temperature:.25,signal:a.signal,diagnostics:a.diagnostics,contextLayers:B,prefixKey:`writer-section:${a.chapter.id}`}),D=a.diagnostics?await (0,j.X6)(a.diagnostics,`section-draft:${a.chapter.id}:${a.sectionTitle}`,C):await C();if(!D||D.length<80)return;let E=(0,g.kT)((0,g.FD)(D.startsWith("### ")?D:`### ${a.sectionTitle}
|
|
77
77
|
|
|
78
78
|
${D}`,a.forbidDrawingImages)).replace(/^##\s+.*\n+/u,"").trim(),F=(0,r.ap)(a.sectionTitle),H=Math.min(Math.max(Math.floor(.7*a.targetWords),F),Math.max(500,a.targetWords)),I=(0,r.eK)(a.sectionTitle,E),J=E;if(I&&/项目主要施工内容/u.test(a.sectionTitle)){let b=(0,r.g6)(E);b===E||(0,r.eK)(a.sectionTitle,b)||(I="",J=b)}if(I&&a.allowLenientStructureGate&&/项目主要施工内容/u.test(a.sectionTitle)){let b=(0,r.sE)(a.sectionTitle,J),c=(b.match(/^####\s+/gmu)||[]).length,d=(0,r.y7)((0,r.DD)(b));c>=3&&!d&&(0,e.V7)(J)>=H&&(I="")}if(I){a.diagnostics&&(a.diagnostics.llm.lastError=`${I}:${a.chapter.title} / ${a.sectionTitle}`);return}if((0,r.zJ)(a.sectionTitle)&&(0,e.V7)(J)<H){a.diagnostics&&(a.diagnostics.llm.lastError=`section writer 正文不足:${a.chapter.title} / ${a.sectionTitle} / ${(0,e.V7)(J)}/${H}字`);return}let K=/项目主要施工内容/u.test(a.sectionTitle)?(0,r.h$)(J):J;return(0,r.ev)(a.sectionTitle,K)}async function W(a){let b=((0,r.hf)(a.sectionTitle)?[...G(a.sectionTitle,a.chapter,a.evidence),...a.evidence]:G(a.sectionTitle,a.chapter,a.evidence)).filter((a,b,c)=>c.findIndex(b=>b.filePath===a.filePath&&b.content===a.content)===b).slice(0,24),c=await R(a.sectionTitle,b),d=b.map((a,b)=>`${b+1}. ${(0,f.T3)((0,f.eE)(a.content),900)}`).filter(Boolean).join("\n"),e=a.diagnostics?.llm.lastError,i=[(0,g.b_)("你是专业文档节内小节 Writer。只生成一个指定节,不生成整章。\n\n"+g.rd+"\n\n"+g.KX),"必须直接输出 Markdown:先输出指定 ### 节标题,再在其下生成若干 #### 三级小节承载正文;不得在 ### 后直接写大段正文;不得解释过程,不得输出资料不足、待确认、兜底等话术。"].join("\n\n"),j={l0:i.length,l1:(0,h.CX)([a.requirement?`用户要求:${a.requirement}`:"","禁止写“根据/依据招标文件、补疑澄清文件、工程量清单及设计图纸”等资料来源罗列话术;直接写项目事实、施工内容、控制措施和验收要求。"]),l2:(0,h.CX)([`章节标题:${a.chapter.title}`]),l3:(0,h.CX)([`指定节标题:### ${a.sectionTitle}`,(0,r.Uz)(a.sectionTitle),(0,k.av)(a.chapter.title,a.sectionTitle),...(0,v.zC)(a.sectionTitle),a.tablePlanInstruction||"",c.prompt,`目标正文约 ${a.targetWords} 字,最多 ${a.maxWords||Math.ceil(1.18*a.targetWords)} 字。正文必须分布在 #### 三级小节下,包含对象范围、执行措施、检查验收和资料闭环;没有精确数值时写正式过程控制,不编造数值。`,(0,r.hf)(a.sectionTitle)?"该小节属于施工组织设计通用管理小节:允许基于项目基础事实、招标范围、工期质量目标、现场组织要求和施工总承包管理逻辑形成正式措施,但不得编造具体姓名、品牌、型号、金额或不存在的日期。":"",a.qualityFeedback||"",d?`压缩证据:
|
|
79
|
-
${d}`:""])},l=await (0,h.rI)(i,[`章节标题:${a.chapter.title}`,a.requirement?`用户要求:${a.requirement}`:"",a.planDataMasterText||"","禁止写“根据/依据招标文件、补疑澄清文件、工程量清单及设计图纸”等资料来源罗列话术;直接写项目事实、施工内容、控制措施和验收要求。",`指定节标题:### ${a.sectionTitle}`,(0,r.Uz)(a.sectionTitle),(0,k.av)(a.chapter.title,a.sectionTitle),...(0,v.zC)(a.sectionTitle),a.tablePlanInstruction||"",c.prompt,`目标正文约 ${a.targetWords} 字,最多 ${a.maxWords||Math.ceil(1.18*a.targetWords)} 字。正文必须分布在 #### 三级小节下,包含对象范围、执行措施、检查验收和资料闭环;没有精确数值时写正式过程控制,不编造数值。`,(0,r.hf)(a.sectionTitle)?"该小节属于施工组织设计通用管理小节:允许基于项目基础事实、招标范围、工期质量目标、现场组织要求和施工总承包管理逻辑形成正式措施,但不得编造具体姓名、品牌、型号、金额或不存在的日期。":"",a.qualityFeedback||"",d?`压缩证据:
|
|
79
|
+
${d}`:""])},l=await (0,h.rI)(i,[`章节标题:${a.chapter.title}`,a.requirement?`用户要求:${a.requirement}`:"",a.planDataMasterText||"",a.decisionLockText||"","禁止写“根据/依据招标文件、补疑澄清文件、工程量清单及设计图纸”等资料来源罗列话术;直接写项目事实、施工内容、控制措施和验收要求。",`指定节标题:### ${a.sectionTitle}`,(0,r.Uz)(a.sectionTitle),(0,k.av)(a.chapter.title,a.sectionTitle),...(0,v.zC)(a.sectionTitle),a.tablePlanInstruction||"",c.prompt,`目标正文约 ${a.targetWords} 字,最多 ${a.maxWords||Math.ceil(1.18*a.targetWords)} 字。正文必须分布在 #### 三级小节下,包含对象范围、执行措施、检查验收和资料闭环;没有精确数值时写正式过程控制,不编造数值。`,(0,r.hf)(a.sectionTitle)?"该小节属于施工组织设计通用管理小节:允许基于项目基础事实、招标范围、工期质量目标、现场组织要求和施工总承包管理逻辑形成正式措施,但不得编造具体姓名、品牌、型号、金额或不存在的日期。":"",a.qualityFeedback||"",d?`压缩证据:
|
|
80
80
|
${d}`:""].filter(Boolean).join("\n\n"),!1,{maxTokens:Math.min(6e3,Math.max(3e3,Math.ceil(2.4*a.targetWords))),temperature:.2,signal:a.signal,diagnostics:a.diagnostics,contextLayers:j,prefixKey:`writer-focused:${a.chapter.id}`});if(!l||l.length<40){let b=a.diagnostics?.llm.lastError;a.diagnostics&&(a.diagnostics.llm.lastError=`focused writer 无正文:${a.chapter.title} / ${a.sectionTitle} / ${b&&b!==e?b:"空响应"}`);return}let m=(0,g.kT)((0,g.FD)(l.startsWith("### ")?l:`### ${a.sectionTitle}
|
|
81
81
|
|
|
82
82
|
${l}`,a.forbidDrawingImages)),n=(0,r.DD)(m);if(n.length<40){a.diagnostics&&(a.diagnostics.llm.lastError=`focused writer 正文过短:${a.chapter.title} / ${a.sectionTitle} / ${n.length}字`);return}let o=(0,r.eK)(a.sectionTitle,m);if(o){a.diagnostics&&(a.diagnostics.llm.lastError=`focused writer ${o}:${a.chapter.title} / ${a.sectionTitle}`);return}return(0,r.ev)(a.sectionTitle,m.replace(/^##\s+.*\n+/u,"").trim())}async function X(a){let b=(0,e.V7)(a.currentContent),c=(0,r.ap)(a.sectionTitle),d=Math.max(a.targetWords,c)-b,i=G(a.sectionTitle,a.chapter,a.evidence),j=await R(a.sectionTitle,i);if(d<=Math.max(260,Math.floor(.12*a.targetWords)))return a.currentContent;let l=(0,f.ks)((0,f.QO)(a.chapter,i),{maxChars:(0,f.Pc)(Math.min(a.targetWords,2600),1e3,3e3),requiredFacts:a.chapter.requiredFacts,skipT0:!!a.sharedFactLayerText,rankBoost:a.sectionRankBoost,onlyRankBoosted:!!a.sectionRankBoost,diagnostics:a.diagnostics}),m=Math.max(500,d),n=[(0,g.b_)("你是专业文档小节补写专家。只做补写,不重写全文。\n\n"+g.rd+"\n\n"+g.KX),"必须保留已有正文中的事实、参数、编号和结构;只补充缺口段落,不删除、不压缩已有内容。"].filter(Boolean).join("\n\n"),o={l0:n.length,l1:(0,h.CX)([a.promptTexts?`配置写作主控提示词:
|
|
83
83
|
${a.promptTexts}`:"",a.requirement?`用户要求:${a.requirement}`:"",`当前小节约 ${b} 字,目标约 ${a.targetWords} 字,本轮补充约 ${m} 字。`,"请输出可直接追加或插入到本小节的补充段落;不要重复小节标题,不要解释生成过程;优先使用绑定资料中的事实和量化参数,不得输出“该小节围绕”等模板化占位句。"]),l2:(0,h.CX)([`章节标题:${a.chapter.title}`,a.factCoverageContext||"",(0,k.av)(a.chapter.title,a.sectionTitle)]),l3:(0,h.CX)([`当前小节:${a.sectionTitle}`,j.prompt,l?`绑定材料:
|
|
84
84
|
${l}`:"",`已有小节正文:
|
|
85
85
|
${(0,r.DD)(a.currentContent).slice(0,12e3)}`])},p=await (0,h.rI)(n,[a.promptTexts?`配置写作主控提示词:
|
|
86
|
-
${a.promptTexts}`:"",`章节标题:${a.chapter.title}`,`当前小节:${a.sectionTitle}`,a.requirement?`用户要求:${a.requirement}`:"",a.planDataMasterText||"",a.factCoverageContext||"",(0,k.av)(a.chapter.title,a.sectionTitle),j.prompt,`当前小节约 ${b} 字,目标约 ${a.targetWords} 字,本轮补充约 ${m} 字。`,"请输出可直接追加或插入到本小节的补充段落;不要重复小节标题,不要解释生成过程;优先使用绑定资料中的事实和量化参数,不得输出“该小节围绕”等模板化占位句。",l?`绑定材料:
|
|
86
|
+
${a.promptTexts}`:"",`章节标题:${a.chapter.title}`,`当前小节:${a.sectionTitle}`,a.requirement?`用户要求:${a.requirement}`:"",a.planDataMasterText||"",a.decisionLockText||"",a.factCoverageContext||"",(0,k.av)(a.chapter.title,a.sectionTitle),j.prompt,`当前小节约 ${b} 字,目标约 ${a.targetWords} 字,本轮补充约 ${m} 字。`,"请输出可直接追加或插入到本小节的补充段落;不要重复小节标题,不要解释生成过程;优先使用绑定资料中的事实和量化参数,不得输出“该小节围绕”等模板化占位句。",l?`绑定材料:
|
|
87
87
|
${l}`:"",`已有小节正文:
|
|
88
88
|
${(0,r.DD)(a.currentContent).slice(0,12e3)}`].filter(Boolean).join("\n\n"),!1,{maxTokens:Math.min(8192,Math.max(2800,Math.ceil(2.6*m))),temperature:.25,signal:a.signal,diagnostics:a.diagnostics,contextLayers:o,prefixKey:`writer-supplement:${a.chapter.id}`}),q=(0,g.kT)((0,g.FD)(p||"",a.forbidDrawingImages)).replace(/^#{3,4}\s+.*\n+/u,"").trim();return q?`${a.currentContent.trim()}
|
|
89
89
|
|
|
@@ -91,11 +91,11 @@ ${q}`:a.currentContent}async function Y(a){if((0,r.hf)(a.sectionTitle)){let b=aw
|
|
|
91
91
|
|
|
92
92
|
${j.join("\n\n")}`;if(200>(0,e.V7)((0,r.DD)(k))){a.diagnostics&&(a.diagnostics.llm.lastError=`task writer 正文空壳:${a.chapter.title} / ${a.sectionTitle} / ${(0,e.V7)((0,r.DD)(k))}字`);return}let l=(0,r.eK)(a.sectionTitle,k);if(l){a.diagnostics&&(a.diagnostics.llm.lastError=`task writer ${l}:${a.chapter.title} / ${a.sectionTitle}`);return}return k=await X({...a,currentContent:k,targetWords:a.targetWords}),(0,g.kT)((0,g.FD)(k,a.forbidDrawingImages))}async function Z(a){let b=E(a.chapter,a.targetWords);if(b.length<2)return;let c=Number(process.env.DOCUMENT_SECTION_CONCURRENCY||b.length||1),d=Math.max(1,Math.min(b.length,Number.isFinite(c)?Math.floor(c):b.length||1)),e=Array(b.length),j=Array(b.length),k=0,m=Number(process.env.DOCUMENT_CHAPTER_POOL_CHARS||8e3),n=(0,f.R7)((0,f.QO)(a.chapter,a.evidence),a.chapter.requiredFacts||[],Number.isFinite(m)?Math.floor(m):8e3),o=b.map(a=>a.title),p=(0,l.nn)(a.chapter,o),q=b.length-1,r=async(c,d=!1)=>{a.onSectionProgress?.({completed:k,total:b.length,sectionTitle:c.title,phase:d?"retry":"start",partialSections:[...j]});try{let d=a.sectionEvidenceProvider?await a.sectionEvidenceProvider(c.title).catch(()=>[]):[],e=F(c.title).filter(a=>a.length>=2),f={...a,evidence:d.length?[...a.evidence,...d]:a.evidence,projectContext:a.projectContext,roleContext:a.roleContext||"",factCoverageContext:a.factCoverageContext,compactProjectContext:a.compactProjectContext,scopedProjectContext:a.scopedProjectContext,sectionTitle:c.title,targetWords:c.targetWords,maxWords:a.maxWords?Math.max(c.targetWords,Math.ceil(a.maxWords/b.length)):Math.ceil(1.12*c.targetWords),tablePlanInstruction:function(a,b,c=[]){let d=(0,l.El)(a,b),e=[...d,...c.filter(a=>!d.some(b=>b.id===a.id))];return(0,l.Gl)(e,b)}(a.chapter,c.title,c.index===q?p:[]),sharedFactLayerText:n,sectionRankBoost:a=>Math.min(24,e.reduce((b,c)=>b+6*!!a.content.includes(c),0))},g=c.targetWords>=1400?await Y({...f,signal:a.signal}):await $({...f,signal:a.signal},function(a){let b=Number(process.env.DOCUMENT_SECTION_SUPPLEMENT_ATTEMPTS??2);return Math.max(1,Math.min(3,Number.isFinite(b)?Math.floor(b):2,a))}(b.length));return g&&(k+=1,j[c.index]=g,a.onSectionProgress?.({completed:k,total:b.length,sectionTitle:c.title,phase:"complete",partialSections:[...j]})),g}catch(b){console.warn(`[document-workflow] 小节生成失败:${a.chapter.title} / ${c.title}`,b);return}},s=b.length;if(s>0){(0,i.Te)(a.signal);let c=await r({...b[0],index:0});e[0]=c}for(let c=1;c<s;){(0,i.Te)(a.signal);let f=(0,h.bU)(a.diagnostics)>=5?1:d,g=b.slice(c,Math.min(s,c+f));(await Promise.all(g.map((a,b)=>r({...a,index:c+b})))).forEach((a,b)=>{e[c+b]=a}),c+=f}let t=e.map((a,b)=>a?-1:b).filter(a=>a>=0),u=t;if(u.length>0){for(let c=0;c<u.length;){(0,i.Te)(a.signal);let f=(0,h.bU)(a.diagnostics)>=5?1:d,g=u.slice(c,c+f);(await Promise.all(g.map(a=>r({...b[a],index:a},!0)))).forEach((a,b)=>{a&&(e[g[b]]=a)}),c+=f}t=e.map((a,b)=>a?-1:b).filter(a=>a>=0);for(let c=0;c<t.length;){(0,i.Te)(a.signal);let f=(0,h.bU)(a.diagnostics)>=5?1:d,g=t.slice(c,c+f);(await Promise.all(g.map(a=>r({...b[a],targetWords:Math.max(b[a].targetWords,900),index:a},!0)))).forEach((a,b)=>{a&&(e[g[b]]=a)}),c+=f}}(t=e.map((a,b)=>a?-1:b).filter(a=>a>=0)).length>0&&a.diagnostics&&(a.diagnostics.llm.lastError=`章级生成缺失小节:${a.chapter.title} / ${t.map(a=>b[a].title).join("、")}`);let v=e.map(a=>a||"");return(0,g.kT)((0,g.FD)(`## ${a.chapter.title}
|
|
93
93
|
|
|
94
|
-
${v.join("\n\n")}`,a.forbidDrawingImages))}async function $(a,b){let c;for(let d=0;d<b;d+=1){let b=await V({...a,qualityFeedback:c});if(!b){c=`上一轮未生成有效正文${a.diagnostics?.llm.lastError?`(被拒原因:${a.diagnostics.llm.lastError})`:""},请针对被拒原因重新生成完整小节正文。`;continue}let d=function(a,b){let c=b.replace(/^#{3,4}\s+.*\n+/u,"").split(/\r?\n/u).filter(a=>!/^\s*\|/u.test(a)).filter(a=>!/^\s*\|?\s*:?-{3,}:?/u.test(a)).join("\n"),d=(0,e.V7)(c);return d<360?`正文有效内容不足:${a} 当前约 ${d} 字`:/资料未提供|信息有限|无法确定|待补充|建议扩大本地知识库检索|以下是|本文档|本小节围绕/u.test(c)?`存在空泛或说明性话术:${a}`:void 0}(a.sectionTitle,b);if(!d)return b;c=d}}async function _(a,b){let c=b.blocks;if(0===c.length)return;let d=c.flatMap(a=>a.subPoints.flatMap(a=>a.sources)),
|
|
95
|
-
${
|
|
94
|
+
${v.join("\n\n")}`,a.forbidDrawingImages))}async function $(a,b){let c;for(let d=0;d<b;d+=1){let b=await V({...a,qualityFeedback:c});if(!b){c=`上一轮未生成有效正文${a.diagnostics?.llm.lastError?`(被拒原因:${a.diagnostics.llm.lastError})`:""},请针对被拒原因重新生成完整小节正文。`;continue}let d=function(a,b){let c=b.replace(/^#{3,4}\s+.*\n+/u,"").split(/\r?\n/u).filter(a=>!/^\s*\|/u.test(a)).filter(a=>!/^\s*\|?\s*:?-{3,}:?/u.test(a)).join("\n"),d=(0,e.V7)(c);return d<360?`正文有效内容不足:${a} 当前约 ${d} 字`:/资料未提供|信息有限|无法确定|待补充|建议扩大本地知识库检索|以下是|本文档|本小节围绕/u.test(c)?`存在空泛或说明性话术:${a}`:void 0}(a.sectionTitle,b);if(!d)return b;c=d}}async function _(a,b){let c=b.blocks;if(0===c.length)return;let d=c.flatMap(a=>a.subPoints.flatMap(a=>a.sources)),k=(0,l.nn)(a.chapter,d),m=c.map((b,d)=>{let e=(a.chapter.tablePlans||[]).filter(a=>{if(k.includes(a))return!1;let c=a.title||"";return b.subPoints.some(a=>a.sources.some(a=>c.includes(a)||a.includes(c))||c.includes(a.title)||a.title.includes(c))});return d===c.length-1?[...e,...k]:e}),n=Number(process.env.DOCUMENT_PLANNED_BLOCK_CONCURRENCY||c.length),o=Math.max(1,Math.min(c.length,(0,h.Sq)(),Number.isFinite(n)?Math.floor(n):c.length)),p=Array(c.length).fill(void 0),q=Number(process.env.DOCUMENT_CHAPTER_POOL_CHARS||8e3),s=(0,f.R7)((0,f.QO)(a.chapter,a.evidence),a.chapter.requiredFacts||[],Number.isFinite(q)?Math.floor(q):8e3),t=Number(process.env.DOCUMENT_BLOCK_EVIDENCE_CHARS||3e3),u=Number.isFinite(t)&&t>0?Math.floor(t):3e3,v=(()=>{let a=Number(process.env.DOCUMENT_BLOCK_FALLBACK_TIMEOUT_MS??18e4);return 0===a?1/0:Number.isFinite(a)&&a>0?Math.floor(a):18e4})(),w=async(b,c)=>{let d=Date.now(),f=()=>Date.now()-d>v,g=b.subPoints.map(a=>a.title),h=F(`${b.title} ${g.join(" ")}`).filter(a=>a.length>=2),k=a=>Math.min(24,h.reduce((b,c)=>b+6*!!a.content.includes(c),0)),l=[...a.evidence.map(a=>({item:a,score:h.reduce((b,c)=>b+ +!!a.content.includes(c),0)})).sort((a,b)=>b.score-a.score).map(a=>a.item),...a.sectionEvidenceProvider?await a.sectionEvidenceProvider(b.title).catch(()=>[]):[]],n={...a.chapter,title:b.title,sections:g,tablePlans:m[c]||[]},o=b.facts.length?`【本主题块专属事实(只能在本节使用,不得重复出现在本章其他节)】${b.facts.map(a=>`- ${a}`).join("\n")}`:"",p=b.subPoints.map(a=>a.sources.length>1?`- #### ${a.title}(覆盖评分细目:${a.sources.join("、")})`:`- #### ${a.title}`).join("\n"),q=[o,`本节是「${a.chapter.title}」章的一个主题小节,只写本节标题覆盖的内容,不得重复本章其他节内容;必须按以下 H4 要点逐点写出实施性正文,H4 标题必须与给定标题完全一致,不得改名、合并或遗漏;每个 H4 必须覆盖其标注的全部评分细目内容,但不得为这些细目单独开设小节标题:
|
|
95
|
+
${p}`].filter(Boolean).join("\n\n"),t=[],x=[],y=(()=>{let a=Number(process.env.DOCUMENT_BLOCK_MAX_ATTEMPTS??2);return 0===a?2:Number.isFinite(a)&&a>0?Math.floor(a):2})();for(let h=0;h<y;h+=1){if(h>0&&f()){a.diagnostics&&(a.diagnostics.llm.lastError=`规划块成稿超时(>${Math.round((Date.now()-d)/1e3)}s):${b.title},跳过重试转紧凑备用`);break}let m=0===h?"":["【上一轮未通过质检】",t.length?`缺失 H4 要点标题:${t.join("、")}。必须逐点补齐以上 H4 标题并展开正式正文,H4 标题与给定标题完全一致。`:"",x.length?`重复展开的 H4 要点标题:${x.join("、")}。同一小节内相同要点被重复展开多轮,必须只保留一轮完整展开,其余重复小节连同标题整体删除,不得以换编号方式重复同一内容。`:"",0===t.length&&0===x.length?"必须完整包含每个 H4 要点标题并展开正文,不得合并或遗漏要点。":"","总字数不少于目标字数。"].filter(Boolean).join("");try{let d=()=>D(a.template,n,l,a.missingFacts,a.promptTexts,a.projectContext,a.requirement,m?`${q}
|
|
96
96
|
|
|
97
|
-
${
|
|
97
|
+
${m}`:q,{forbidDrawingImages:a.forbidDrawingImages,compactProjectContext:a.compactProjectContext,scopedProjectContext:a.scopedProjectContext,chapterLevelContext:a.roleContext||"",minWords:Math.floor(.6*b.targetWords),targetWords:b.targetWords,maxWords:Math.ceil(1.1*b.targetWords),maxTokens:Math.max(3200,Math.ceil(1.5*b.targetWords)),disableThinkingBoost:!0,sharedFactLayerText:s,evidenceRankBoost:k,onlyRankBoosted:!0,evidenceFloorChars:1e3,evidenceCeilingChars:u,factCoverageContext:a.factCoverageContext||"",planDataMasterText:a.planDataMasterText,decisionLockText:a.decisionLockText,twoStep:!1,signal:a.signal,diagnostics:a.diagnostics}),f=a.diagnostics?await (0,j.X6)(a.diagnostics,`block-draft:${a.chapter.id}:${c}:a${h}`,d):await d();if(!f)continue;let o=f.replace(/^##\s+.+$/mu,"").trim(),p=(0,r.KJ)(g,o),v=/^###\s+\S+/mu.test(p)?p:`### ${b.title}
|
|
98
98
|
|
|
99
|
-
${
|
|
99
|
+
${p}`,w=(0,e.V7)(v),y=g.filter(a=>!v.includes(a)),z=(0,i.W6)(v);if(w>=Math.max(400,Math.floor(.4*b.targetWords))&&0===y.length&&0===z.length)return v;if(t=y,x=z,1===h&&0===y.length&&z.length>0){let a=(0,i.wq)(v);if((0,e.V7)(a)>=Math.max(400,Math.floor(.4*b.targetWords)))return a}a.diagnostics&&1===h&&(a.diagnostics.llm.lastError=`规划块质检未达标:${b.title}(${w} 字,缺 ${y.join("、")||"无"}${z.length?`,重复 H4 ${z.join("、")}`:""})`)}catch(b){a.diagnostics&&1===h&&(a.diagnostics.llm.lastError=b instanceof Error?b.message:String(b))}}if(b.subPoints.length>=4&&!f()){let d=Math.ceil(b.subPoints.length/2),e=Math.max(800,Math.floor(b.targetWords/2)),f=await Promise.all([w({...b,title:`${b.title}(一)`,subPoints:b.subPoints.slice(0,d),targetWords:e},c),w({...b,title:`${b.title}(二)`,subPoints:b.subPoints.slice(d),targetWords:e},c)]);if(f.every(a=>!!a))return f.join("\n\n");a.diagnostics&&(a.diagnostics.llm.lastError=`规划块拆半后仍未成稿:${b.title}`)}},x=async(b,d)=>{p[d]=await w(b,d),p[d]&&a.onSectionProgress?.({completed:p.filter(Boolean).length,total:c.length,sectionTitle:b.title,phase:"complete",partialSections:[...p]})};c.length>0&&((0,i.Te)(a.signal),await x(c[0],0));for(let b=1;b<c.length;b+=o){(0,i.Te)(a.signal);let d=c.slice(b,b+o);await Promise.all(d.map((a,c)=>x(a,b+c)))}if(p.every(a=>!a))return;let y=c.map((a,b)=>({index:b,block:a})).filter(({index:a})=>!p[a]),z=(0,g.kT)((0,g.FD)(`## ${a.chapter.title}
|
|
100
100
|
|
|
101
|
-
${
|
|
101
|
+
${p.filter(Boolean).join("\n\n")}`,a.forbidDrawingImages));return 0===y.length?{sections:p,failedBlocks:y,allSucceeded:!0,markdown:z}:(a.diagnostics&&y.length>0&&(a.diagnostics.llm.lastError=`规划块部分失败:${y.map(({block:a})=>a.title).join("、")}`),{sections:p,failedBlocks:y,allSucceeded:!1,markdown:z})}}};
|
|
@@ -10,12 +10,12 @@ ${c}`,"写作要求:必须严格按“小节任务”逐项输出,每个任
|
|
|
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 x(a){let b=m(a);return!(!b||b.length<3||/^(?:见|详见|按|执行|参见|依据).{0,16}(?:前附表|招标公告|招标文件|合同|协议书|通用条款|专用条款|图纸|清单|附件|资料)$/u.test(b)||/^(?:合同协议书|通用条款|专用条款|招标文件|招标公告|投标人须知前附表|附件|资料)$/u.test(b.replace(/[()()\d一二三四五六七八九十、..\s]/gu,"")))&&/项目|工程|编号|地点|规模|范围|工期|质量|安全|资源|材料|设备|验收|\d/u.test(l(a))}function y(a){let b=[],c=a.draft.content||"";for(let e of j)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 h=a.plannedCoverage,i=a=>{let b=h?.[a];return b&&b.length>0?b[0]:a},k=new Map;for(let a of Object.values(h||{}))a.length>0&&k.set(a[0],(k.get(a[0])||0)+1);let l=a=>{let b=h?.[a];return!!b&&0!==b.length&&(k.get(b[0])||1)>1},n=new Map,o=new Set;for(let b of a.task.sections){let a=i(b.title);l(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=h?.[g.title],i=a&&a.length>0?a:[g.title],j=i[0],k=l(g.title),m=new Set,p="";for(let a of i){let b=(0,d.Xl)(c,a,{fuzzy:!0});b&&!m.has(b)&&(m.add(b),p+=(p?"\n":"")+b)}if(j!==g.title){let a=(0,d.Xl)(c,g.title,{fuzzy:!0});a&&!m.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(x),r=q.filter(a=>{let b=m(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 z(a){if(!a.review.repairable)return"";let b=a.plannedMode?"【结构约束】本章采用主题块成稿模式,必须保持现有三级主题块与 H4 要点标题不变;只修复列出的问题,不得新增小节、不得拆分或合并现有小节、不得把评分细目展开为独立标题。":v(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:()=>ac,Fr:()=>an,H:()=>ag,Ih:()=>P,N$:()=>ai,Rv:()=>aE,T:()=>$,U$:()=>K,Vc:()=>aC,Vw:()=>R,Xc:()=>Q,YN:()=>O,a8:()=>m,bq:()=>ao,cJ:()=>F,cT:()=>al,cf:()=>k,cl:()=>aB,dF:()=>M,eS:()=>i,fE:()=>aN,hu:()=>aD,l4:()=>J,lR:()=>az,mC:()=>Z,qj:()=>_,r8:()=>w,rA:()=>u,s3:()=>A,sn:()=>C,t1:()=>I,u2:()=>o,ub:()=>ay,vH:()=>y,y2:()=>H,zP:()=>aI});var d=c(78217),e=c(22157),f=c(37047),g=c(41991),h=c(71678);let i=/(\d{4})\s*年\s*(\d{1,2})\s*月\s*(\d{1,2})\s*日/gu,j=/进度计划|里程碑|节点安排|验收时间|完成日期|竣工日期|移交日期|合同签订/u;function k(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(i))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=i.test(f);for(let b of(i.lastIndex=0,a.matchAll(i))){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&&j.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 l=/(单体建筑面积|总建筑面积|建筑面积)[^。;;\n]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)/gu;function m(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(l)){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 n=/(地上[^。;;]{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 o(a){let b=[];for(let c of a.matchAll(n)){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 p=/(?:高峰期|高峰|峰值)[^。;;\n]{0,20}?(?:约)?\s*([\d,]+)\s*人/g,q=/(?:劳动力|作业人员|施工人员)[^。;;\n]{0,16}?(?:约)?\s*([\d,]+)\s*人/g,r=["基坑与基础","二次结构与砌体","地下结构","主体结构","装饰装修","机电安装","室外工程","收尾调试","基坑","基础"];function s(a,b){let c,d=a.slice(0,b),e=Math.max(d.lastIndexOf("。"),d.lastIndexOf(";"),d.lastIndexOf(";"),d.lastIndexOf("\n")),f=a.slice(Math.max(0,e+1),b),g=-1;for(let a of r){let b=f.lastIndexOf(a);b>g&&(g=b,c=a)}return c}function t(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=>/高峰|峰值/u.test(a)&&f.test(a)),q=p>=0?p:i.findIndex(a=>f.test(a));if(q<0||o>=0&&o===q||/岗位/u.test(i.join("|"))&&/职责|持证|职称/u.test(i.join("|")))continue;let r=[],s=0;for(let a of j){let b=m(a),c=b[q]||"",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!==q&&/合计|总计|小计/u.test(a))){k=e;continue}r.push(e),s+=e}}if(0===r.length&&void 0===k)continue;let t=Math.max(...r.length>0?r:[k||0]);b.push({countCells:r,totalCell:k,detailSum:s,peak:t,hasPeakCol:p>=0})}return b}function u(a){let b=[],c=[];for(let b of[p,q])for(let d of a.matchAll(b)){let b=Number(d[1].replace(/[,,]/gu,"")),e=d.index+d[0].indexOf(d[1]);Number.isFinite(b)&&b>0&&c.push({value:b,text:d[0].trim().slice(0,40),stage:s(a,e)})}let d=t(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]];if(d.stage&&e.stage&&d.stage!==e.stage)continue;if(!d.stage!=!e.stage){let[a,b]=d.stage?[e,d]:[d,e];if(a.value>=.9*b.value)continue}let 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}}let g=d.filter(a=>a.hasPeakCol).map(a=>a.peak);if(g.length>=2){let a=Math.max(...g),b=Math.min(...g),c=Math.abs(a-b)/a;c>.3&&f(`劳动力数据矛盾:分阶段投入明细表峰值 ${b} 人与另一劳动力表峰值 ${a} 人互斥(相差 ${Math.round(100*c)}%)`,"劳动力峰值数据必须全文唯一:统一各劳动力表格的峰值数据,删除矛盾表格数字。")}let h=c.reduce((a,b)=>Math.max(a,b.value),0),i=e.length>0?Math.max(...e):void 0;if(void 0!==i&&h>0&&h>1.3*i){let a=c.find(a=>a.value===h)?.text||"";f(`劳动力数据矛盾:正文表述“${a}”达 ${h} 人,而分阶段投入明细表最大峰值为 ${i} 人(超出 ${Math.round((h-i)/i*100)}%)`,"劳动力投入数据必须全文统一:以分阶段明细表为准复核正文峰值表述,删除与表格矛盾的“高峰期 X 人”措辞或调整表格数据。")}let j=[];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&&j.push(a)}if(j.length>0){let a=Math.max(...j),b=[...c,...void 0!==i?[{value:i}]:[]].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 k=[...a.matchAll(/([\d,]+)\s*(?:个)?工日/gu)].map(a=>Number(a[1].replace(/[,,]/gu,""))).filter(a=>Number.isFinite(a)&&a>0),l=[...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(k.length>0&&h>0&&l.length>0){let a=Math.max(...k),b=Math.max(...l),c=h*b*1.3,d=h*b*.1;(a>c||a<d)&&f(`劳动力数据矛盾:总工日 ${a} 个与峰值 ${h} 人\xd7总工期 ${b} 天不自洽(合理区间约 ${Math.round(d)}~${Math.round(c)} 个)`,"总工日必须与劳动力峰值和总工期量级自洽:按各阶段人数\xd7阶段工期重算总工日,或修正峰值人数/总工期表述。")}return b.slice(0,5)}let v={slope:"基坑放坡开挖、土钉墙喷锚支护坡面",pile:"钻孔灌注桩、排桩、地下连续墙围护结构"};async function w(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(v)),e=a=>d(a,v.slope)>=f.Eh,g=/钻孔灌注桩|灌注桩|排桩|地下连续墙|咬合桩|支护桩/u,h=a=>g.test(a)&&d(a,v.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 x=/^#{2,4}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]*(?:危大工程(?:辨识)?(?:清单|识别)|危大(?:工程)?(?:及超危大)?(?:清单|识别|辨识))[^\n]*$/gmu;function y(a){let b=[],c=function(a){let b=a.split(/\r?\n/u),c=[];for(let a=0;a<b.length;a+=1){if(!x.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 z=[{name:"施工工地周边100%围挡",query:"施工工地周边设置围挡封闭管理"},{name:"物料堆放100%覆盖",query:"物料堆放覆盖防尘"},{name:"出入车辆100%冲洗",query:"出入车辆冲洗设施清洗出场"},{name:"施工现场地面100%硬化",query:"施工现场场地地面硬化"},{name:"拆迁工地100%湿法作业",query:"拆迁工地湿法作业洒水降尘"},{name:"渣土车辆100%密闭运输",query:"渣土车辆密闭运输防止遗撒"}];function A(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 B(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 C(a){let b=[];if(!/扬尘|环保|文明施工|绿色施工/u.test(a))return b;let c=await B(z.map(a=>({key:a.name,text:a.query})),A(a)),d=/(?:本项目|本工程|该工程|该项目|本标段|本施工项目)[^。;;\n]{0,30}(?:无拆迁|不涉及拆迁|无房屋拆除|无拆除)/u.test(a),e=z.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("、")}】(${z.length-e.length}/${z.length} 项命中)`,suggestion:"按检查规范第七部分要求逐条表述六项措施:工地周边100%围挡、物料堆放100%覆盖、出入车辆100%冲洗、施工现场地面100%硬化、拆迁工地100%湿法作业、渣土车辆100%密闭运输。"}),b}let D=/建设地点|工程地点|项目地点|实施地点|服务地点|交付地点|建设地址/u,E=["安徽","合肥","芜湖","蚌埠","淮南","马鞍山","淮北","铜陵","安庆","黄山","滁州","阜阳","宿州","六安","亳州","池州","宣城"];async function F(a,b){let c=[],d=b.project.some(a=>D.test(`${a.fieldName||""}${a.key||""}`)&&E.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 B(f,A(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 G=RegExp(`(?:^|
|
|
13
|
+
${d}`,"写作要求:必须严格按“主题块→H4 要点”两层结构输出,三级标题与 H4 要点标题必须与给定标题完全一致,不得改名、合并或遗漏 H4 要点;每个 H4 要点必须覆盖其标注的全部评分细目内容,但不得为这些评分细目单独开设小节标题;项目专属事实只使用事实卡、图谱上下文和绑定证据,法律法规、标准规范等公共知识可直接引用;不得输出后台话术、兜底措辞、待确认、不适用;缺少项目事实的小节不得编造。"].filter(Boolean).join("\n\n")}function x(a){let b=m(a);return!(!b||b.length<3||/^(?:见|详见|按|执行|参见|依据).{0,16}(?:前附表|招标公告|招标文件|合同|协议书|通用条款|专用条款|图纸|清单|附件|资料)$/u.test(b)||/^(?:合同协议书|通用条款|专用条款|招标文件|招标公告|投标人须知前附表|附件|资料)$/u.test(b.replace(/[()()\d一二三四五六七八九十、..\s]/gu,"")))&&/项目|工程|编号|地点|规模|范围|工期|质量|安全|资源|材料|设备|验收|\d/u.test(l(a))}function y(a){let b=[],c=a.draft.content||"";for(let e of j)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 h=a.plannedCoverage,i=a=>{let b=h?.[a];return b&&b.length>0?b[0]:a},k=new Map;for(let a of Object.values(h||{}))a.length>0&&k.set(a[0],(k.get(a[0])||0)+1);let l=a=>{let b=h?.[a];return!!b&&0!==b.length&&(k.get(b[0])||1)>1},n=new Map,o=new Set;for(let b of a.task.sections){let a=i(b.title);l(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=h?.[g.title],i=a&&a.length>0?a:[g.title],j=i[0],k=l(g.title),m=new Set,p="";for(let a of i){let b=(0,d.Xl)(c,a,{fuzzy:!0});b&&!m.has(b)&&(m.add(b),p+=(p?"\n":"")+b)}if(j!==g.title){let a=(0,d.Xl)(c,g.title,{fuzzy:!0});a&&!m.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(x),r=q.filter(a=>{let b=m(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 z(a){if(!a.review.repairable)return"";let b=a.plannedMode?"【结构约束】本章采用主题块成稿模式,必须保持现有三级主题块与 H4 要点标题不变;只修复列出的问题,不得新增小节、不得拆分或合并现有小节、不得把评分细目展开为独立标题。":v(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:()=>ac,Fr:()=>an,H:()=>ag,Ih:()=>P,LF:()=>aQ,N$:()=>ai,Rv:()=>aE,T:()=>$,U$:()=>K,Vc:()=>aC,Vw:()=>R,Xc:()=>Q,YN:()=>O,a8:()=>m,bq:()=>ao,cJ:()=>F,cT:()=>al,cf:()=>k,cl:()=>aB,dF:()=>M,eS:()=>i,fE:()=>aN,hu:()=>aD,l4:()=>J,lR:()=>az,mC:()=>Z,qj:()=>_,r8:()=>w,rA:()=>u,s3:()=>A,sn:()=>C,t1:()=>I,u2:()=>o,ub:()=>ay,vH:()=>y,y2:()=>H,yR:()=>aR,zP:()=>aI});var d=c(78217),e=c(22157),f=c(37047),g=c(41991),h=c(71678);let i=/(\d{4})\s*年\s*(\d{1,2})\s*月\s*(\d{1,2})\s*日/gu,j=/进度计划|里程碑|节点安排|验收时间|完成日期|竣工日期|移交日期|合同签订/u;function k(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(i))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=i.test(f);for(let b of(i.lastIndex=0,a.matchAll(i))){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&&j.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 l=/(单体建筑面积|总建筑面积|建筑面积)[^。;;\n]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)/gu;function m(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(l)){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 n=/(地上[^。;;]{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 o(a){let b=[];for(let c of a.matchAll(n)){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 p=/(?:高峰期|高峰|峰值)[^。;;\n]{0,20}?(?:约)?\s*([\d,]+)\s*人/g,q=/(?:劳动力|作业人员|施工人员)[^。;;\n]{0,16}?(?:约)?\s*([\d,]+)\s*人/g,r=["基坑与基础","二次结构与砌体","地下结构","主体结构","装饰装修","机电安装","室外工程","收尾调试","基坑","基础"];function s(a,b){let c,d=a.slice(0,b),e=Math.max(d.lastIndexOf("。"),d.lastIndexOf(";"),d.lastIndexOf(";"),d.lastIndexOf("\n")),f=a.slice(Math.max(0,e+1),b),g=-1;for(let a of r){let b=f.lastIndexOf(a);b>g&&(g=b,c=a)}return c}function t(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=>/高峰|峰值/u.test(a)&&f.test(a)),q=p>=0?p:i.findIndex(a=>f.test(a));if(q<0||o>=0&&o===q||/岗位/u.test(i.join("|"))&&/职责|持证|职称/u.test(i.join("|")))continue;let r=[],s=0;for(let a of j){let b=m(a),c=b[q]||"",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!==q&&/合计|总计|小计/u.test(a))){k=e;continue}r.push(e),s+=e}}if(0===r.length&&void 0===k)continue;let t=Math.max(...r.length>0?r:[k||0]);b.push({countCells:r,totalCell:k,detailSum:s,peak:t,hasPeakCol:p>=0})}return b}function u(a){let b=[],c=[];for(let b of[p,q])for(let d of a.matchAll(b)){let b=Number(d[1].replace(/[,,]/gu,"")),e=d.index+d[0].indexOf(d[1]);Number.isFinite(b)&&b>0&&c.push({value:b,text:d[0].trim().slice(0,40),stage:s(a,e)})}let d=t(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]];if(d.stage&&e.stage&&d.stage!==e.stage)continue;if(!d.stage!=!e.stage){let[a,b]=d.stage?[e,d]:[d,e];if(a.value>=.9*b.value)continue}let 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}}let g=d.filter(a=>a.hasPeakCol).map(a=>a.peak);if(g.length>=2){let a=Math.max(...g),b=Math.min(...g),c=Math.abs(a-b)/a;c>.3&&f(`劳动力数据矛盾:分阶段投入明细表峰值 ${b} 人与另一劳动力表峰值 ${a} 人互斥(相差 ${Math.round(100*c)}%)`,"劳动力峰值数据必须全文唯一:统一各劳动力表格的峰值数据,删除矛盾表格数字。")}let h=c.reduce((a,b)=>Math.max(a,b.value),0),i=e.length>0?Math.max(...e):void 0;if(void 0!==i&&h>0&&h>1.3*i){let a=c.find(a=>a.value===h)?.text||"";f(`劳动力数据矛盾:正文表述“${a}”达 ${h} 人,而分阶段投入明细表最大峰值为 ${i} 人(超出 ${Math.round((h-i)/i*100)}%)`,"劳动力投入数据必须全文统一:以分阶段明细表为准复核正文峰值表述,删除与表格矛盾的“高峰期 X 人”措辞或调整表格数据。")}let j=[];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&&j.push(a)}if(j.length>0){let a=Math.max(...j),b=[...c,...void 0!==i?[{value:i}]:[]].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 k=[...a.matchAll(/([\d,]+)\s*(?:个)?工日/gu)].map(a=>Number(a[1].replace(/[,,]/gu,""))).filter(a=>Number.isFinite(a)&&a>0),l=[...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(k.length>0&&h>0&&l.length>0){let a=Math.max(...k),b=Math.max(...l),c=h*b*1.3,d=h*b*.1;(a>c||a<d)&&f(`劳动力数据矛盾:总工日 ${a} 个与峰值 ${h} 人\xd7总工期 ${b} 天不自洽(合理区间约 ${Math.round(d)}~${Math.round(c)} 个)`,"总工日必须与劳动力峰值和总工期量级自洽:按各阶段人数\xd7阶段工期重算总工日,或修正峰值人数/总工期表述。")}return b.slice(0,5)}let v={slope:"基坑放坡开挖、土钉墙喷锚支护坡面",pile:"钻孔灌注桩、排桩、地下连续墙围护结构"};async function w(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(v)),e=a=>d(a,v.slope)>=f.Eh,g=/钻孔灌注桩|灌注桩|排桩|地下连续墙|咬合桩|支护桩/u,h=a=>g.test(a)&&d(a,v.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 x=/^#{2,4}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]*(?:危大工程(?:辨识)?(?:清单|识别)|危大(?:工程)?(?:及超危大)?(?:清单|识别|辨识))[^\n]*$/gmu;function y(a){let b=[],c=function(a){let b=a.split(/\r?\n/u),c=[];for(let a=0;a<b.length;a+=1){if(!x.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 z=[{name:"施工工地周边100%围挡",query:"施工工地周边设置围挡封闭管理"},{name:"物料堆放100%覆盖",query:"物料堆放覆盖防尘"},{name:"出入车辆100%冲洗",query:"出入车辆冲洗设施清洗出场"},{name:"施工现场地面100%硬化",query:"施工现场场地地面硬化"},{name:"拆迁工地100%湿法作业",query:"拆迁工地湿法作业洒水降尘"},{name:"渣土车辆100%密闭运输",query:"渣土车辆密闭运输防止遗撒"}];function A(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 B(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 C(a){let b=[];if(!/扬尘|环保|文明施工|绿色施工/u.test(a))return b;let c=await B(z.map(a=>({key:a.name,text:a.query})),A(a)),d=/(?:本项目|本工程|该工程|该项目|本标段|本施工项目)[^。;;\n]{0,30}(?:无拆迁|不涉及拆迁|无房屋拆除|无拆除)/u.test(a),e=z.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("、")}】(${z.length-e.length}/${z.length} 项命中)`,suggestion:"按检查规范第七部分要求逐条表述六项措施:工地周边100%围挡、物料堆放100%覆盖、出入车辆100%冲洗、施工现场地面100%硬化、拆迁工地100%湿法作业、渣土车辆100%密闭运输。"}),b}let D=/建设地点|工程地点|项目地点|实施地点|服务地点|交付地点|建设地址/u,E=["安徽","合肥","芜湖","蚌埠","淮南","马鞍山","淮北","铜陵","安庆","黄山","滁州","阜阳","宿州","六安","亳州","池州","宣城"];async function F(a,b){let c=[],d=b.project.some(a=>D.test(`${a.fieldName||""}${a.key||""}`)&&E.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 B(f,A(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 G=RegExp(`(?:^|
|
|
14
14
|
)(?:#{1,6}\\s+[^
|
|
15
15
|
]*
|
|
16
16
|
+)?([^
|
|
17
17
|
|#][^。!?!?
|
|
18
|
-
]{18,60})[。!?!?]`,"gu");function H(a){let b=[],c=new Map;for(let b of a.matchAll(G)){let a=b[1].trim(),d=a.replace(/[\d,,.。%%㎡m2²]/gu,"").slice(0,16);if(d.length<10)continue;let e=c.get(d)||{count:0,sample:a};e.count+=1,c.set(d,e)}for(let{count:a,sample:d}of c.values())a<3||b.push({level:"warning",severity:"warning",category:"style",owner:"llm",repairability:"llm_repairable",message:`段首固定开场机械重复 ${a} 次:“${d.slice(0,30)}…”`,suggestion:"同一段首句式只保留首次出现处,其余处按所在章节语境改写为差异化开场,避免模板化套话观感。"});return b.slice(0,3)}function I(a){let b,c=a.split("\n"),d=[];for(let a=0;a<c.length;a+=1){let e=/^(#{2,4})\s+(.+)$/u.exec(c[a].trim());if(e){let c=e[1].length;/(?:工程概况|项目概况|基本信息)/u.test(e[2])?b={index:a,level:c}:b&&c<=b.level&&(d.push([b.index,a]),b=void 0)}}b&&d.push([b.index,c.length]);let e=a=>d.some(([b,c])=>a>=b&&a<c),f=c.filter((a,b)=>e(b)).join("\n"),g=[];for(let a=0;a<c.length;a+=1){if(e(a))continue;let b=/本项目为|本工程为|该项目为|该工程为/u.exec(c[a]);if(!b)continue;let d=c[a].slice(b.index).split(/[。!?!?]/u)[0];d&&d.length>=12&&g.push(d)}return{overviewBody:f,sentences:g}}function J(a,b={}){let c=[],{overviewBody:d,sentences:e}=I(a);if(0===e.length||!d||!b.semanticSimilarity)return c;let f=[];for(let a of e)if(b.semanticSimilarity(a,d)>=.6&&f.push(a.slice(0,36)),f.length>=3)break;return 0===f.length||c.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`项目概况段跨章复述不得出现:概况章外有 ${f.length} 处以“本项目为/本工程为”等总述开头整段复述概况内容:${f.map(a=>`“${a}…”`).join("、")}`,suggestion:"总述数据只在工程概况类小节集中交代一次:其他章节直接写本章内容,仅可引用所需的具体数字(如“45日历天总工期”),不得复述完整概况段。"}),c}function K(a,b){let c,{overviewBody:d,sentences:e}=I(a);if(0===e.length||!d)return a;let f=a.split(/\r?\n/u),g=[];for(let a=0;a<f.length;a+=1){let b=/^(#{2,4})\s+(.+)$/u.exec(f[a].trim());if(b){let d=b[1].length;/(?:工程概况|项目概况|基本信息)/u.test(b[2])?c={index:a,level:d}:c&&d<=c.level&&(g.push([c.index,a]),c=void 0)}}c&&g.push([c.index,f.length]);let h=!1,i=f.map((a,c)=>{if(g.some(([a,b])=>c>=a&&c<b)||/^#{1,6}\s/u.test(a.trim())||/^\s*\|/u.test(a.trim())||!/本项目为|本工程为|该项目为|该工程为/u.test(a))return a;let e=a.split(/(?<=[。!?!?])/u).filter(a=>{if(!/本项目为|本工程为|该项目为|该工程为/u.test(a))return!0;let c=a.split(/[。!?!?]/u)[0];return c.length<12||.6>b(c,d)});return e.join("")!==a&&(h=!0),e.join("")});return h?i.join("\n"):a}let L=["销项","复查","整改","闭环"];function M(a){let b=[],c=(0,d.V7)(a);if(c<3e3)return b;let e=[];for(let b of L){let d=a.split(b).length-1;e.push(d/c*1e3)}let f=Math.max(...e),g=L[e.indexOf(f)];return f>=3&&b.push({level:"warning",severity:"warning",category:"style",owner:"llm",repairability:"llm_repairable",message:`闭环句式模板化密集:“${g}”达 ${f.toFixed(1)} 次/千字(销项/复查/整改/闭环统一结尾高度重复)`,suggestion:"保留关键控制环节的闭环表述,其余改为差异化的过程控制语言(检验批验收、实测实量、旁站记录等),提升语言精练度。"}),b}let N=["专项设计文件尚未完成,待后续补充","评分指标存在缺口尚未明确","依据承诺函后续跟踪完善"];async function O(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>=12);if(0===c.length)return b;let d=await (0,f.Mv)(c,[...N]),e=[...new Set(c.filter(a=>N.some(b=>d(a,b)>=f.Eh)))];if(0===e.length)return b;for(let a of e)b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`自伤表述候选:“${a}”暴露投标短板,需按上下文判定后改写`,suggestion:"投标文件不得主动暴露“专项设计未完成/指标存在缺口”等短板:改写为正向落实表述(如“按施工图绿色建筑专篇编制专项方案,逐项落实评分项并跟踪验收”);如属现场条件合理风险描述(地质/管线尚不明确),保留但需配套勘查与应对措施。"});return b.slice(0,3)}let P=/([\u4e00-\u9fa5]{2})\1/gu;function Q(a){let b=[...new Set(a.match(P)||[])].slice(0,3);return 0===b.length?[]:[{level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`正文存在叠词重复表述:${b.map(a=>`“${a}”`).join("、")}`,suggestion:"删除紧邻重复字词,保持语句完整通顺(“执行执行”改为“执行”)。"}]}function R(a){return a.replace(P,"$1")}let S=/暂列金额|暂估价|报价明细|综合单价|清单合价|预留金|投标报价/u,T=/(?:税率|增值税)[^。;;\n]{0,12}\d/u,U=/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|最高投标限价|招标控制价/u,V=/材料价格|商务报价|投标总价|合同总价|工程总价/u,W=["暂列金额与暂估价的报价明细","综合单价与清单合价的商务数据","投标报价与费率标准的商务条款"],X=["合同估算价与投资估算的项目信息","最高投标限价与招标控制价的公开信息","商务数据不得写入施工组织设计正文的约束说明"];async function Y(a){return(0,g.A)({prototypes:[...W],negativePrototypes:[...X],embedDocuments:a})}async function Z(a,b){let c=[],d=await Y(b),e=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();if(!(/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a))&&(S.test(b)||T.test(b)||V.test(b)))for(let a of(T.test(b)&&c.push("税率/增值税"),b.split(/(?<=[。;;])\s*/u))){let b=a.match(S)||[],d=U.test(a),f=V.test(a);!(b.length>0)||d||f?(b.length>0&&(d||f)||f&&0===b.length)&&e.push(a):c.push(...b)}}if(e.length>0){let a=await d(e);e.forEach((b,d)=>{if(!a[d])return;let e=b.match(S)||[],f=b.match(V)||[];c.push(...e.length>0?e:f)})}let f=[...new Set(c)].slice(0,4);return 0===f.length?[]:[{level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`正文出现商务条款数据:${f.join("、")}`,suggestion:"商务数据(暂列金额/暂估价/综合单价/税率等)不得写入施组正文:删除该句或改写为定性表述(如“按合同约定执行”),商务口径仅保留在项目信息表中。"}]}function $(a){return a.split(/(?<=[。;;])\s*/u).filter(a=>!!(/^\s*\|/u.test(a)||/^#{1,6}\s/u.test(a))||!(S.test(a)||T.test(a))).join("")}function _(a){return a.split(/\r?\n/u).map(a=>{let b=a.trim();return/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)||!S.test(a)&&!T.test(a)?a:a.split(/(?<=[。;;])\s*/u).filter(a=>!(S.test(a)||T.test(a))).join("")}).join("\n")}let aa=[{key:"excavation",label:"基坑支护及土方外运",re:/基坑支护/u},{key:"zero",label:"地下结构出正负零",re:/正负零|地下室结构/u},{key:"topping",label:"主体结构封顶",re:/主体(?:结构)?封顶/u},{key:"decoration",label:"装饰装修及幕墙",re:/装饰装修/u},{key:"mep",label:"机电安装及智能化调试",re:/机电安装/u},{key:"completion",label:"室外工程及竣工验收",re:/竣工验收/u}];function ab(a){let b=[],c=(a,c,d)=>{let e=aa.find(b=>b.re.test(a))?.key;void 0!==e&&Number.isFinite(c)&&c>=1&&c<=3e3&&b.push({key:e,day:c,raw:d})};for(let b of a.matchAll(/第(\d{2,3})日[^。;;\n]{0,14}?完成[^。;;\n]{0,12}?(基坑支护及土方外运|装饰装修及幕墙|机电安装及智能化调试|室外工程及竣工验收|地下结构出正负零|主体结构封顶|正负零|封顶)/gu))c(b[2],Number(b[1]),b[0].slice(0,40));for(let b of a.matchAll(/(基坑支护|正负零|封顶|装饰装修|机电安装|竣工验收)(?:(?!(?:第\d{2,3}[日天]|,|、)).){0,8}?完成[^。;;\n]{0,10}?第(\d{2,3})[日天]/gu))c(b[1],Number(b[2]),b[0].slice(0,40));for(let b of a.matchAll(/(主体(?:结构)?封顶)(?:(?!(?:第\d{2,3}[日天]|,|、|完成)).){0,20}?第(\d{2,3})日/gu))c(b[1],Number(b[2]),b[0].slice(0,40));let d=new Set;return b.filter(a=>{let b=`${a.key}:${a.raw}`;return!d.has(b)&&(d.add(b),!0)})}function ac(a){let b=[],c=new Map;for(let b of ab(a)){let a=c.get(b.key)||[];a.push(b),c.set(b.key,a)}for(let a of aa){let d=c.get(a.key);if(!d||d.length<2)continue;let e=[...new Set(d.map(a=>a.day))];if(e.length<2||Math.max(...e)-Math.min(...e)<5)continue;let f=[...new Set(d.map(a=>a.raw))].slice(0,4).join("、");b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`节点工期口径矛盾:“${a.label}”节点出现 ${e.map(a=>`${a}日`).join(" 与 ")} 两套口径:${f}`,suggestion:`关键节点完成时间必须全文唯一:以总进度计划表为准统一“${a.label}”节点日期,删除正文/其他表中矛盾的“第N日”表述。`})}return b.slice(0,4)}let ad=[{key:"xps",label:"挤塑聚苯板(XPS)厚度",unit:"mm",kind:"number",patterns:[/(?:挤塑聚苯|XPS)(?:(?!(?:宽度|拼缝|不大于|不超过|小于|≤|采用|使用|选用|铺设|粘贴)).){0,40}?(\d+(?:\.\d+)?)\s*mm/gu,/(\d+(?:\.\d+)?)\s*mm[^。;;\n|]{0,10}?(?:挤塑聚苯|XPS)/gu]},{key:"cushion",label:"垫层混凝土强度等级",unit:"C标号",kind:"code",patterns:[/垫层[^。;;\n|]{0,20}?(C\d{2})/gu]},{key:"transformer",label:"箱式变压器容量",unit:"kVA",kind:"number",patterns:[/(\d+)\s*kVA[^。;;\n|]{0,12}?变压器/gu,/变压器[^。;;\n|]{0,12}?(\d+)\s*kVA/gu]},{key:"formwork",label:"模板周转次数",unit:"次",kind:"number",patterns:[/模板周转(?:次数|使用)?[^。;;\n|]{0,15}?(\d+)\s*次/gu]},{key:"block",label:"蒸压加气混凝土砌块强度等级",unit:"A标号",kind:"code",patterns:[/(?:蒸压加气混凝土|加气混凝土)?砌块[^。;;\n]{0,24}?(A\d+(?:\.\d+)?)/gu]},{key:"extinguisher",label:"干粉灭火器数量",unit:"具",kind:"number",patterns:[/灭火器[^。;;\n]{0,24}?(\d+)\s*具/gu]},{key:"pump",label:"潜水泵数量",unit:"台",kind:"number",patterns:[/潜水泵[^。;;\n]{0,24}?(\d+)\s*台/gu]},{key:"firstaid",label:"急救箱数量",unit:"套/个",kind:"number",patterns:[/急救箱[^。;;\n|]{0,24}?(\d+)\s*(?:套|个)/gu]},{key:"towerCrane",label:"塔式起重机(塔吊)数量",unit:"台",kind:"number",patterns:[/(?:塔式起重机|塔吊)[^。;;\n|]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:塔式起重机|塔吊)/gu]},{key:"hoist",label:"施工升降机(施工电梯)数量",unit:"台",kind:"number",patterns:[/(?:施工升降机|施工电梯)[^。;;\n|]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:施工升降机|施工电梯)/gu]},{key:"truckCrane",label:"汽车起重机(汽车吊)数量",unit:"台",kind:"number",patterns:[/(?:汽车起重机|汽车吊)[^。;;\n|]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:汽车起重机|汽车吊)/gu]},{key:"rebarCutter",label:"钢筋切断机数量",unit:"台",kind:"number",patterns:[/钢筋切断机[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"rebarBender",label:"钢筋弯曲机数量",unit:"台",kind:"number",patterns:[/钢筋弯曲机[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"circularSaw",label:"圆盘锯数量",unit:"台",kind:"number",patterns:[/圆盘锯[^。;;\n|]{0,24}?(\d+)\s*台/gu]}],ae=/\d+(?:\.\d+)?\s*(?:mm|kVA|次|具|台|套|个)\s*[//]\s*\d+/u,af=/不再出现|不得出现|严禁出现|避免出现|不采用|未采用|予以删除|已删除|取消|纠正为|更正为/u;function ag(a){let b=[];for(let c of ad){let d=new Set,e=[];for(let b of c.patterns)for(let c of a.matchAll(b)){let b=c[0].slice(0,40);if(ae.test(b))continue;let f=a.lastIndexOf("\n",c.index)+1,g=a.indexOf("\n",c.index);-1===g&&(g=a.length),af.test(a.slice(f,g))||(d.add(c[1]),e.push(b))}if(!(d.size<2))if("code"===c.kind)b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料参数口径矛盾:“${c.label}”出现 ${[...d].map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(e)].slice(0,3).join("、")}`,suggestion:`同一材料参数全文只允许一个口径:以设计图纸/工程量清单为准统一“${c.label}”,删除矛盾表述。`});else{let a=[...d].map(Number).filter(Number.isFinite);if(a.length<2)continue;let f=Math.max(...a);if(f-Math.min(...a)<=.2*f)continue;b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料/设备数量口径矛盾:“${c.label}”出现 ${a.map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(e)].slice(0,3).join("、")}`,suggestion:`同一设备/材料数量全文只允许一个口径:以应急物资清单/施工部署为准统一“${c.label}”,删除矛盾表述。`})}}return b.slice(0,8)}let ah=/桩基|灌注桩|钻孔桩|打桩|成桩|桩机/u;function ai(a){let b=function(a){let b=[];for(let c of[...a.matchAll(/^#{3,4}\s+[^\n]*(?:地基与基础)[^\n]*$/gmu)]){let d=(c.index||0)+c[0].length,e=a.slice(d).search(/^#{2,4}\s+/mu),f=a.slice(d,e>=0?d+e:a.length);b.push(f)}return b}(a);if(0===b.length||b.some(a=>ah.test(a)))return[];let c=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();!(!a||/^#{1,6}\s/u.test(a))&&ah.test(b)&&c.push(a.slice(0,48))}let d=[...new Set(c)].slice(0,5);return d.length<2?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`桩基表述残留:地基与基础章节施工流程为筏板/独立基础(无桩基工序),但全文另有 ${d.length} 处桩基表述:${d.join("、")}`,suggestion:"本项目基础形式不含桩基:删除全文所有桩基/桩机表述,进度计划表关键线路工序、质量验收划分表、隐蔽验收表均改为本项目实际基础工序(垫层/底板钢筋/混凝土)。"}]}let aj=/^\s*\|\s*计划工期\s*\|([^|\n]*)\|/u,ak=/工期延误|延误|违约|切除|赔偿|罚款|解除|扣减/u;function al(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=aj.exec(c);if(!a)continue;let d=(a[1]??"").trim();d&&ak.test(d)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基本信息表「计划工期」字段错填违约条款文字:“${d.slice(0,40)}”`,suggestion:"「计划工期」字段应填日历天数值(与招标文件前附表一致,如「540个日历天」);工期延误违约条款文字应放在工期风险管控章节,不得占用基本信息表字段。"})}return b.slice(0,2)}let am=/基础|支护|围护|桩|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|标高|深度|形式|体系/u;function an(a){let b=a.replace(/\s+/gu,""),c=new Set;for(let a of b.matchAll(/([一-龥]{2,8})\/([一-龥]{2,8})/gu)){if(!am.test(a[1])&&!am.test(a[2]))continue;let d=Math.max(0,(a.index||0)-12),e=Math.min(b.length,(a.index||0)+a[0].length+12),f=b.slice(d,e);/采用|形式|方式|方案|选用|拟用|拟采用|为/u.test(f)&&c.add(`“${a[1]}/${a[2]}”`)}for(let a of b.matchAll(/[((]\s*或[^))]{1,48}[))]/gu)){let d=a[0].slice(1,-1);if(!/按图纸|按实|按图|待定|另行|视[^,。;]{0,8}而定|根据实际/u.test(d))continue;let e=Math.max(0,(a.index||0)-20),f=b.slice(e,(a.index||0)+a[0].length);am.test(f)&&c.add(a[0].slice(0,30))}return 0===c.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`关键设计决策两可表述:${[...c].join("、")} 以并列/悬置形态表述,基础形式、支护形式等关键决策必须在正文中唯一确定`,suggestion:"以设计图纸/勘察报告/工程量清单为准锁定唯一决策并删除两可表述:明确写出本项目基础形式与支护形式的具体做法(如「基础形式为筏板基础」「基坑支护采用放坡+喷锚」),禁止「或…按图纸实施」类悬置话术。"}]}function ao(a){let b=a.replace(/\s+/gu,"");if((b.match(/基坑|开挖|支护/gu)||[]).length<3)return[];for(let a of b.matchAll(/(?:深度|标高)[^。;,,]{0,12}-?\d+(?:\.\d+)?[^。;,,]{0,6}/gu)){let b=a[0];if(!/(?:超过|大于|小于|不[大低小]于|不低于|按|倍|依据|详见|参考|示意|每)/u.test(b))return[]}return[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:"基坑深度数值未锁定:正文已有基坑支护/开挖成稿内容,但全文未出现「深度/标高+数值」的确定性表述(比较式阈值如「超过3m」不视为锁定),危大工程分级判定失去依据",suggestion:"从绑定资料(地质勘察报告/基坑支护设计图/基础平面图)锁定基坑开挖深度数值(如 5.85m)写入基坑支护小节;深度 ≥5m 的深基坑须同步标注危大工程分级与专家论证要求,禁止以「按图纸确定」回避深度数值。"}]}let ap=/[\u4e00-\u9fa5]{2,10}(?:杯|奖)(?![励金惩罚项])/gu,aq=/优质工程|文明工地|样板|标准化|观摩|示范|精品工程|结构优质|省优|市优/u;function ar(a){let b=a;for(;;){let a=b.replace(/^(?:争创|争取|力争|争获|确保|获得|创建|力创|评为|荣获|标为|目标为|承诺|为)/u,"");if(a===b||!a)break;b=a}return b}let as=/^\s*\|[\s:|-]+\|/u;function at(a){let b=a.split(/\r?\n/u),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>as.test(a),f=0;for(;f<b.length;){let a;if(!/^\s*\|/u.test(b[f])){f+=1;continue}let g=f;for(;g<b.length&&/^\s*\|/u.test(b[g]);)g+=1;let h=b.slice(f,g),i=0,j=0,k=0,l=b=>{if(!a)return;let e=h.slice(j,b);0!==e.length&&c.push({startLine:f+i,endLine:f+b-1,header:a,firstCol:e.map(a=>d(a)[0]?.replace(/[*_`]/gu,"").trim()||"").filter(Boolean),dataCells:e.flatMap(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())).filter(Boolean),bodyChars:e.join("").length,raw:h.slice(i,b)})};for(;k<h.length;){if(k+1<h.length&&e(h[k+1]||"")){l(k),a=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()),i=k,j=k+2,k+=2;continue}if(a&&k>j){let b=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()).filter(Boolean);if(au(b,a)>=.6&&k+1<h.length&&!e(h[k+1]||"")){l(k),a=b,i=k,j=k+1,k+=1;continue}}k+=1}l(h.length),f=g}return c}function au(a,b){if(0===a.length||0===b.length)return 0;let c=new Set(a),d=new Set(b);return[...c].filter(a=>d.has(a)).length/new Set([...c,...d]).size}function av(a,b){if(0===a.length)return 0;let c=[...b],d=0;for(let b of a){let a=c.indexOf(b);a>=0&&(c.splice(a,1),d+=1)}return d/a.length}let aw=/^[\d,,.]+\s*(?:人|个|台|具|套|处|支|辆|班|组|项)?$/u,ax=a=>a.filter(a=>!aw.test(a));function ay(a){let b=[],c=at(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.header.length>0&&e.header.length===f.header.length&&e.header.every((a,b)=>a===f.header[b]),h=au(e.header,f.header),i=au(e.firstCol,f.firstCol),j=au(e.dataCells,f.dataCells),k=Math.max(av(ax(e.dataCells),ax(f.dataCells)),av(ax(f.dataCells),ax(e.dataCells)));(g&&j>=.6||h>=.7&&i>=.6||i>=.6&&k>=.6)&&b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`表格重复:第 ${e.startLine+1}~${e.endLine+1} 行表格(表头:${e.header.slice(0,3).join("|")})与第 ${f.startLine+1}~${f.endLine+1} 行表格高度重复(表头重合 ${Math.round(100*h)}%、数据重合 ${Math.round(100*j)}%、首列重合 ${Math.round(100*i)}%)`,suggestion:"同一文档内同主题表格只保留信息最全的一张:删除重复表格(保留字段与数据行更多的那张),删除后核对章节表格计划仍被覆盖。"})}return b.sort((a,b)=>{let c=a=>Number(a.match(/数据重合\s*(\d+)%/u)?.[1]??0);return c(b.message)-c(a.message)}).slice(0,5)}function az(a){let b=at(a);if(b.length<2)return{markdown:a,removedCount:0};let c=a.split(/\r?\n/u),d=new Set;for(let a=0;a<b.length;a+=1)for(let c=a+1;c<b.length;c+=1){let e=b[a],f=b[c];if(d.has(e.startLine)||d.has(f.startLine))continue;let g=e.header.length>0&&e.header.length===f.header.length&&e.header.every((a,b)=>a===f.header[b]),h=au(e.header,f.header),i=au(e.firstCol,f.firstCol),j=au(e.dataCells,f.dataCells),k=Math.max(av(ax(e.dataCells),ax(f.dataCells)),av(ax(f.dataCells),ax(e.dataCells)));if(!(g&&j>=.6)&&!(h>=.7&&i>=.6)&&!(i>=.6&&k>=.6))continue;let[l,m]=e.bodyChars>=f.bodyChars?[e,f]:[f,e];for(let a=m.startLine;a<=m.endLine;a+=1)d.add(a)}return 0===d.size?{markdown:a,removedCount:0}:{markdown:c.filter((a,b)=>!d.has(b)).join("\n"),removedCount:d.size}}function aA(a){let b=a.replace(/\s+/gu,"");return b.length>=40?b:void 0}function aB(a){let b=[],c=a.split(/\r?\n/u),d=new Map,e=[],f=()=>{let a=aA(e.join(""));if(a){let b=(d.get(a)||0)+1;d.set(a,b)}e=[]};for(let a of c){let b=a.trim();if(!b||/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)){f();continue}if(/^[-*•]\s/u.test(b)){f(),e.push(b),f();continue}e.push(b)}for(let[a,c]of(f(),[...d.entries()].filter(([,a])=>a>=2).slice(0,3)))b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`段落完全重复 ${c} 次:“${a.slice(0,40)}…”`,suggestion:"同一段落正文只保留首次出现处,删除其余重复段落;确需前后呼应时改写为差异化表述并压缩篇幅。"});return b}function aC(a){let b=a.split(/\r?\n/u),c=new Set,d=new Set,e=[],f=[],g=()=>{let a=aA(e.join(""));a&&(c.has(a)?f.forEach(a=>d.add(a)):c.add(a)),e=[],f=[]};return(b.forEach((a,b)=>{let c=a.trim();if(!c||/^#{1,6}\s/u.test(c)||/^\s*\|/u.test(c))return void g();if(/^[-*•]\s/u.test(c)){g(),e=[c],f=[b],g();return}e.push(c),f.push(b)}),g(),0===d.size)?{markdown:a,removedCount:0}:{markdown:b.filter((a,b)=>!d.has(b)).join("\n"),removedCount:d.size}}function aD(a,b,c){let d=new Set;for(let a of[...b.quality,...b.project,...b.schedule])for(let b of(0,e.lG)(a.value).matchAll(ap))d.add(ar(b[0]));if(c?.extracted)for(let a of[...c.awardObjectives||[],...c.specialQualityStandards||[],...c.awardClauses||[]])for(let b of(a.text||"").matchAll(ap))d.add(ar(b[0]));if(0===d.size)return[];let f=new Set;for(let b of a.matchAll(ap)){let a=ar(b[0]);!d.has(a)&&(aq.test(a)||f.add(a))}return 0===f.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`奖项表述与招标文件白名单不符:正文出现 ${[...f].join("、")},均未出现在招标文件评分项要求或绑定资料中`,suggestion:"创优目标必须以招标文件原文为准逐字落位(如「确保黄山杯」),禁止自行编造或替换为其他奖项名称;白名单外的奖项表述一律删除或替换为招标原文奖项。"}]}function aE(a){let b=a.split(/\r?\n/u),c=new Set;for(let a of b){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(!b)continue;let d=b[2].trim();(0,h.Xp)(d)&&c.add(d)}if(0===c.size)return[];let d=[...c];return[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`正文出现投标人资格内容小节:${d.slice(0,3).map(a=>`“${a}”`).join("、")}${d.length>3?" 等":""}(资格审查内容不属于施工组织设计,属资格文件/商务文件范畴)`,suggestion:"删除资格内容小节(标题与正文整体删除),不得以改写、合并、降级方式保留;正文如需提及安全生产许可证等证照,只能以施工管理口径表述(如“按规定持证上岗”),不得成节铺陈资格核验内容。"}]}let aF=/人[、,,]材[、,,]机/u,aG=/(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施/u;function aH(a){let b=a.match(aG)?.[1];return b||(/劳动力|人员|作业人员|劳务/u.test(a)?"人":/材料|物资|周转/u.test(a)?"材":/机械|设备|机具|塔吊|起重机/u.test(a)?"机":void 0)}function aI(a){let b=[],c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){let d,e=/^##\s+(.+)$/u.exec(c[a].trim());if(!e||!aF.test(e[1]))continue;let f=c.length;for(let b=a+1;b<c.length;b+=1)if(/^##\s+/u.test(c[b].trim())){f=b;break}let g=[];for(let e=a+1;e<f;e+=1){let a=/^###\s+(.+)$/u.exec(c[e].trim()),f=/^####\s+(.+)$/u.exec(c[e].trim());if(a){d={subject:aH(a[1]),title:a[1].trim()},g.push(d);continue}if(f&&d?.subject){let a=aH(f[1]);a&&a!==d.subject&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章层级错位:小节“${f[1].trim()}”挂在“${d.title}”之下(${"人"===a?"人":"材"===a?"材":"机"}的保障体系应独立成二级小节,不得并入${"人"===d.subject?"人":"材"===d.subject?"材":"机"}的保障体系)`,suggestion:`将“${f[1].trim()}”提升为独立二级小节,或将其内容合并到对应主题的二级小节。`})}}let h=new Set(g.map(a=>a.subject).filter(Boolean)),i=["人","材","机"].every(a=>h.has(a));(g.length<3||!i)&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章结构不完整:“${e[1].trim()}”仅 ${g.length} 个二级小节(人/材/机的保障体系未全部独立成节)`,suggestion:"拆分为“确保人的保障体系与措施”“确保材的保障体系与措施”“确保机的保障体系与措施”三个二级小节。"})}return b}function aJ(a,b){if(0===b.length)return{markdown:a,fixedCount:0,details:[]};let c=[...b].sort((a,b)=>b.start-a.start),d=a,e=0,f=[];for(let a of c)d=d.slice(0,a.start)+a.replacement+d.slice(a.end),e+=1,f.push(a.detail);return{markdown:d,fixedCount:e,details:[...new Set(f)].slice(0,8)}}function aK(a){let b=function(a){let b=t(a).map(a=>a.peak);return b.length>0?Math.max(...b):void 0}(a);if(void 0===b)return{markdown:a,fixedCount:0,details:[]};let c=[],d=d=>{for(let e of a.matchAll(d)){let d=Number(e[1].replace(/[,,]/gu,""));if(!Number.isFinite(d)||d<=0)continue;let f=e.index+e[0].indexOf(e[1]);!s(a,f)&&(d<=1.3*b||c.push({start:f,end:f+e[1].length,replacement:String(b),detail:`劳动力峰值 ${d}人→${b}人(以分阶段投入明细表为准)`}))}};for(let e of(d(p),d(q),a.matchAll(/(?:高峰期|高峰|峰值)[^。;;\n]{0,16}?控制(?:在|为|到)?(?:约)?\s*([\d,]+)\s*人(?:以内|以下|之内)?/gu))){let a=Number(e[1].replace(/[,,]/gu,""));if(!Number.isFinite(a)||a<=0||a>=b)continue;let d=e.index+e[0].indexOf(e[1]);c.push({start:d,end:d+e[1].length,replacement:String(b),detail:`劳动力控制上限 ${a}人→${b}人(与分阶段投入明细表峰值自洽)`})}return aJ(a,c)}function aL(a){let b=a.split(/\r?\n/u),c=/^\|.+\|$/u,d=[],e=0;for(let a of b)d.push({start:e,end:e+a.length}),e+=a.length+1;let f=new Map,g=[];for(let a=0;a<b.length;a+=1){if(!c.test(b[a].trim()))continue;let e=a;for(;a<b.length&&c.test(b[a].trim());)a+=1;let h=a,i=b.slice(Math.max(0,e-6),e).join("\n");if(/总进度计划|施工总进度|总进度安排/u.test(i)){for(let a of ab(b.slice(e,h).join("\n"))){let b=f.get(a.key);(void 0===b||a.day>b)&&f.set(a.key,a.day)}g.push({start:d[e].start,end:d[h-1].end})}}if(0===f.size)return{markdown:a,fixedCount:0,details:[]};let h=[],i=(a,b,c,d,e)=>{let i=aa.find(b=>b.re.test(a))?.key;if(void 0===i||!Number.isFinite(b)||b<1||b>3e3)return;let j=f.get(i);!(void 0===j||5>Math.abs(b-j))&&(g.some(a=>c>=a.start&&c<=a.end)||h.push({start:c,end:d,replacement:String(j),detail:`节点“${aa.find(a=>a.key===i)?.label||i}”工期 ${b}日→${j}日(以总进度计划表为准)`}))};for(let b of a.matchAll(/第(\d{2,3})日[^。;;\n]{0,14}?完成[^。;;\n]{0,12}?(基坑支护及土方外运|装饰装修及幕墙|机电安装及智能化调试|室外工程及竣工验收|地下结构出正负零|主体结构封顶|正负零|封顶)/gu)){let a=b.index+b[0].indexOf(b[1]);i(b[2],Number(b[1]),a,a+b[1].length,b[0].slice(0,40))}for(let b of a.matchAll(/(基坑支护|正负零|封顶|装饰装修|机电安装|竣工验收)(?:(?!(?:第\d{2,3}[日天]|,|、)).){0,8}?完成[^。;;\n]{0,10}?第(\d{2,3})[日天]/gu)){let a=b.index+b[0].indexOf(b[2]);i(b[1],Number(b[2]),a,a+b[2].length,b[0].slice(0,40))}for(let b of a.matchAll(/(主体(?:结构)?封顶)(?:(?!(?:第\d{2,3}[日天]|,|、|完成)).){0,20}?第(\d{2,3})日/gu)){let a=b.index+b[0].indexOf(b[2]);i(b[1],Number(b[2]),a,a+b[2].length,b[0].slice(0,40))}return aJ(a,h)}function aM(a){let b=[];for(let c of ad){if("number"!==c.kind)continue;let d=new Set,e=new Set;for(let b of c.patterns)for(let c of a.matchAll(b)){let b=c[0].slice(0,40);if(ae.test(b))continue;let f=a.lastIndexOf("\n",c.index)+1,g=a.indexOf("\n",c.index);-1===g&&(g=a.length);let h=a.slice(f,g);if(af.test(h))continue;let i=Number(c[1]);Number.isFinite(i)&&!(i<=0)&&(/^\s*\|/u.test(h)?d.add(i):e.add(i))}if(1!==d.size)continue;let f=[...d][0];if([...e].some(a=>Math.abs(a-f)>.2*f))for(let d of c.patterns)for(let e of a.matchAll(d)){let d=e[0].slice(0,40);if(ae.test(d))continue;let g=a.lastIndexOf("\n",e.index)+1,h=a.indexOf("\n",e.index);-1===h&&(h=a.length);let i=a.slice(g,h);if(af.test(i)||/^\s*\|/u.test(i))continue;let j=Number(e[1]);if(!Number.isFinite(j)||j<=0||Math.abs(j-f)<=.2*f)continue;let k=e.index+e[0].indexOf(e[1]);b.push({start:k,end:k+e[1].length,replacement:String(f),detail:`${c.label} ${j}${c.unit}→${f}${c.unit}(以表格口径为准)`})}}return aJ(a,b)}function aN(a){let b=a,c=0,d=[];for(let a of[aK,aL,aM]){let e=a(b);e.markdown!==b&&(b=e.markdown,c+=e.fixedCount,d.push(...e.details))}return{markdown:b,fixedCount:c,details:d.slice(0,12)}}},46482:(a,b,c)=>{c.d(b,{Zk:()=>r,Tz:()=>z,X6:()=>s,fC:()=>A,l8:()=>y,JP:()=>q});var d=c(73024),e=c(76760),f=c(74329);c(25840),c(23500);var g=c(70933),h=c(70208),i=c(61373),j=c(78217);c(23760);var k=c(30355),l=c(44505),m=c(85016),n=c(22157);let o=[...k.P9.filter(a=>!n.Kd.includes(a)),...m.D$.source.split("|")];var p=c(95734);function q(a){let b=a.template.chapters.length,c=b>0?a.targetWords/b:a.targetWords,d=`${a.template.name}
|
|
18
|
+
]{18,60})[。!?!?]`,"gu");function H(a){let b=[],c=new Map;for(let b of a.matchAll(G)){let a=b[1].trim(),d=a.replace(/[\d,,.。%%㎡m2²]/gu,"").slice(0,16);if(d.length<10)continue;let e=c.get(d)||{count:0,sample:a};e.count+=1,c.set(d,e)}for(let{count:a,sample:d}of c.values())a<3||b.push({level:"warning",severity:"warning",category:"style",owner:"llm",repairability:"llm_repairable",message:`段首固定开场机械重复 ${a} 次:“${d.slice(0,30)}…”`,suggestion:"同一段首句式只保留首次出现处,其余处按所在章节语境改写为差异化开场,避免模板化套话观感。"});return b.slice(0,3)}function I(a){let b,c=a.split("\n"),d=[];for(let a=0;a<c.length;a+=1){let e=/^(#{2,4})\s+(.+)$/u.exec(c[a].trim());if(e){let c=e[1].length;/(?:工程概况|项目概况|基本信息)/u.test(e[2])?b={index:a,level:c}:b&&c<=b.level&&(d.push([b.index,a]),b=void 0)}}b&&d.push([b.index,c.length]);let e=a=>d.some(([b,c])=>a>=b&&a<c),f=c.filter((a,b)=>e(b)).join("\n"),g=[];for(let a=0;a<c.length;a+=1){if(e(a))continue;let b=/本项目为|本工程为|该项目为|该工程为/u.exec(c[a]);if(!b)continue;let d=c[a].slice(b.index).split(/[。!?!?]/u)[0];d&&d.length>=12&&g.push(d)}return{overviewBody:f,sentences:g}}function J(a,b={}){let c=[],{overviewBody:d,sentences:e}=I(a);if(0===e.length||!d||!b.semanticSimilarity)return c;let f=[];for(let a of e)if(b.semanticSimilarity(a,d)>=.6&&f.push(a.slice(0,36)),f.length>=3)break;return 0===f.length||c.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`项目概况段跨章复述不得出现:概况章外有 ${f.length} 处以“本项目为/本工程为”等总述开头整段复述概况内容:${f.map(a=>`“${a}…”`).join("、")}`,suggestion:"总述数据只在工程概况类小节集中交代一次:其他章节直接写本章内容,仅可引用所需的具体数字(如“45日历天总工期”),不得复述完整概况段。"}),c}function K(a,b){let c,{overviewBody:d,sentences:e}=I(a);if(0===e.length||!d)return a;let f=a.split(/\r?\n/u),g=[];for(let a=0;a<f.length;a+=1){let b=/^(#{2,4})\s+(.+)$/u.exec(f[a].trim());if(b){let d=b[1].length;/(?:工程概况|项目概况|基本信息)/u.test(b[2])?c={index:a,level:d}:c&&d<=c.level&&(g.push([c.index,a]),c=void 0)}}c&&g.push([c.index,f.length]);let h=!1,i=f.map((a,c)=>{if(g.some(([a,b])=>c>=a&&c<b)||/^#{1,6}\s/u.test(a.trim())||/^\s*\|/u.test(a.trim())||!/本项目为|本工程为|该项目为|该工程为/u.test(a))return a;let e=a.split(/(?<=[。!?!?])/u).filter(a=>{if(!/本项目为|本工程为|该项目为|该工程为/u.test(a))return!0;let c=a.split(/[。!?!?]/u)[0];return c.length<12||.6>b(c,d)});return e.join("")!==a&&(h=!0),e.join("")});return h?i.join("\n"):a}let L=["销项","复查","整改","闭环"];function M(a){let b=[],c=(0,d.V7)(a);if(c<3e3)return b;let e=[];for(let b of L){let d=a.split(b).length-1;e.push(d/c*1e3)}let f=Math.max(...e),g=L[e.indexOf(f)];return f>=3&&b.push({level:"warning",severity:"warning",category:"style",owner:"llm",repairability:"llm_repairable",message:`闭环句式模板化密集:“${g}”达 ${f.toFixed(1)} 次/千字(销项/复查/整改/闭环统一结尾高度重复)`,suggestion:"保留关键控制环节的闭环表述,其余改为差异化的过程控制语言(检验批验收、实测实量、旁站记录等),提升语言精练度。"}),b}let N=["专项设计文件尚未完成,待后续补充","评分指标存在缺口尚未明确","依据承诺函后续跟踪完善"];async function O(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>=12);if(0===c.length)return b;let d=await (0,f.Mv)(c,[...N]),e=[...new Set(c.filter(a=>N.some(b=>d(a,b)>=f.Eh)))];if(0===e.length)return b;for(let a of e)b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`自伤表述候选:“${a}”暴露投标短板,需按上下文判定后改写`,suggestion:"投标文件不得主动暴露“专项设计未完成/指标存在缺口”等短板:改写为正向落实表述(如“按施工图绿色建筑专篇编制专项方案,逐项落实评分项并跟踪验收”);如属现场条件合理风险描述(地质/管线尚不明确),保留但需配套勘查与应对措施。"});return b.slice(0,3)}let P=/([\u4e00-\u9fa5]{2})\1/gu;function Q(a){let b=[...new Set(a.match(P)||[])].slice(0,3);return 0===b.length?[]:[{level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`正文存在叠词重复表述:${b.map(a=>`“${a}”`).join("、")}`,suggestion:"删除紧邻重复字词,保持语句完整通顺(“执行执行”改为“执行”)。"}]}function R(a){return a.replace(P,"$1")}let S=/暂列金额|暂估价|报价明细|综合单价|清单合价|预留金|投标报价/u,T=/(?:税率|增值税)[^。;;\n]{0,12}\d/u,U=/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|最高投标限价|招标控制价/u,V=/材料价格|商务报价|投标总价|合同总价|工程总价/u,W=["暂列金额与暂估价的报价明细","综合单价与清单合价的商务数据","投标报价与费率标准的商务条款"],X=["合同估算价与投资估算的项目信息","最高投标限价与招标控制价的公开信息","商务数据不得写入施工组织设计正文的约束说明"];async function Y(a){return(0,g.A)({prototypes:[...W],negativePrototypes:[...X],embedDocuments:a})}async function Z(a,b){let c=[],d=await Y(b),e=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();if(!(/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a))&&(S.test(b)||T.test(b)||V.test(b)))for(let a of(T.test(b)&&c.push("税率/增值税"),b.split(/(?<=[。;;])\s*/u))){let b=a.match(S)||[],d=U.test(a),f=V.test(a);!(b.length>0)||d||f?(b.length>0&&(d||f)||f&&0===b.length)&&e.push(a):c.push(...b)}}if(e.length>0){let a=await d(e);e.forEach((b,d)=>{if(!a[d])return;let e=b.match(S)||[],f=b.match(V)||[];c.push(...e.length>0?e:f)})}let f=[...new Set(c)].slice(0,4);return 0===f.length?[]:[{level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`正文出现商务条款数据:${f.join("、")}`,suggestion:"商务数据(暂列金额/暂估价/综合单价/税率等)不得写入施组正文:删除该句或改写为定性表述(如“按合同约定执行”),商务口径仅保留在项目信息表中。"}]}function $(a){return a.split(/(?<=[。;;])\s*/u).filter(a=>!!(/^\s*\|/u.test(a)||/^#{1,6}\s/u.test(a))||!(S.test(a)||T.test(a))).join("")}function _(a){return a.split(/\r?\n/u).map(a=>{let b=a.trim();return/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)||!S.test(a)&&!T.test(a)?a:a.split(/(?<=[。;;])\s*/u).filter(a=>!(S.test(a)||T.test(a))).join("")}).join("\n")}let aa=[{key:"excavation",label:"基坑支护及土方外运",re:/基坑支护/u},{key:"zero",label:"地下结构出正负零",re:/正负零|地下室结构/u},{key:"topping",label:"主体结构封顶",re:/主体(?:结构)?封顶/u},{key:"decoration",label:"装饰装修及幕墙",re:/装饰装修/u},{key:"mep",label:"机电安装及智能化调试",re:/机电安装/u},{key:"completion",label:"室外工程及竣工验收",re:/竣工验收/u}];function ab(a){let b=[],c=(a,c,d)=>{let e=aa.find(b=>b.re.test(a))?.key;void 0!==e&&Number.isFinite(c)&&c>=1&&c<=3e3&&b.push({key:e,day:c,raw:d})};for(let b of a.matchAll(/第(\d{2,3})日[^。;;\n]{0,14}?完成[^。;;\n]{0,12}?(基坑支护及土方外运|装饰装修及幕墙|机电安装及智能化调试|室外工程及竣工验收|地下结构出正负零|主体结构封顶|正负零|封顶)/gu))c(b[2],Number(b[1]),b[0].slice(0,40));for(let b of a.matchAll(/(基坑支护|正负零|封顶|装饰装修|机电安装|竣工验收)(?:(?!(?:第\d{2,3}[日天]|,|、)).){0,8}?完成[^。;;\n]{0,10}?第(\d{2,3})[日天]/gu))c(b[1],Number(b[2]),b[0].slice(0,40));for(let b of a.matchAll(/(主体(?:结构)?封顶)(?:(?!(?:第\d{2,3}[日天]|,|、|完成)).){0,20}?第(\d{2,3})日/gu))c(b[1],Number(b[2]),b[0].slice(0,40));let d=new Set;return b.filter(a=>{let b=`${a.key}:${a.raw}`;return!d.has(b)&&(d.add(b),!0)})}function ac(a){let b=[],c=new Map;for(let b of ab(a)){let a=c.get(b.key)||[];a.push(b),c.set(b.key,a)}for(let a of aa){let d=c.get(a.key);if(!d||d.length<2)continue;let e=[...new Set(d.map(a=>a.day))];if(e.length<2||Math.max(...e)-Math.min(...e)<5)continue;let f=[...new Set(d.map(a=>a.raw))].slice(0,4).join("、");b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`节点工期口径矛盾:“${a.label}”节点出现 ${e.map(a=>`${a}日`).join(" 与 ")} 两套口径:${f}`,suggestion:`关键节点完成时间必须全文唯一:以总进度计划表为准统一“${a.label}”节点日期,删除正文/其他表中矛盾的“第N日”表述。`})}return b.slice(0,4)}let ad=[{key:"xps",label:"挤塑聚苯板(XPS)厚度",unit:"mm",kind:"number",patterns:[/(?:挤塑聚苯|XPS)(?:(?!(?:宽度|拼缝|不大于|不超过|小于|≤|采用|使用|选用|铺设|粘贴)).){0,40}?(\d+(?:\.\d+)?)\s*mm/gu,/(\d+(?:\.\d+)?)\s*mm[^。;;\n|]{0,10}?(?:挤塑聚苯|XPS)/gu]},{key:"cushion",label:"垫层混凝土强度等级",unit:"C标号",kind:"code",patterns:[/垫层[^。;;\n|]{0,20}?(C\d{2})/gu]},{key:"transformer",label:"箱式变压器容量",unit:"kVA",kind:"number",patterns:[/(\d+)\s*kVA[^。;;\n|]{0,12}?变压器/gu,/变压器[^。;;\n|]{0,12}?(\d+)\s*kVA/gu]},{key:"formwork",label:"模板周转次数",unit:"次",kind:"number",patterns:[/模板周转(?:次数|使用)?[^。;;\n|]{0,15}?(\d+)\s*次/gu]},{key:"block",label:"蒸压加气混凝土砌块强度等级",unit:"A标号",kind:"code",patterns:[/(?:蒸压加气混凝土|加气混凝土)?砌块[^。;;\n]{0,24}?(A\d+(?:\.\d+)?)/gu]},{key:"extinguisher",label:"干粉灭火器数量",unit:"具",kind:"number",patterns:[/灭火器[^。;;\n]{0,24}?(\d+)\s*具/gu]},{key:"pump",label:"潜水泵数量",unit:"台",kind:"number",patterns:[/潜水泵[^。;;\n]{0,24}?(\d+)\s*台/gu]},{key:"firstaid",label:"急救箱数量",unit:"套/个",kind:"number",patterns:[/急救箱[^。;;\n|]{0,24}?(\d+)\s*(?:套|个)/gu]},{key:"towerCrane",label:"塔式起重机(塔吊)数量",unit:"台",kind:"number",patterns:[/(?:塔式起重机|塔吊)[^。;;\n|]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:塔式起重机|塔吊)/gu]},{key:"hoist",label:"施工升降机(施工电梯)数量",unit:"台",kind:"number",patterns:[/(?:施工升降机|施工电梯)[^。;;\n|]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:施工升降机|施工电梯)/gu]},{key:"truckCrane",label:"汽车起重机(汽车吊)数量",unit:"台",kind:"number",patterns:[/(?:汽车起重机|汽车吊)[^。;;\n|]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:汽车起重机|汽车吊)/gu]},{key:"rebarCutter",label:"钢筋切断机数量",unit:"台",kind:"number",patterns:[/钢筋切断机[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"rebarBender",label:"钢筋弯曲机数量",unit:"台",kind:"number",patterns:[/钢筋弯曲机[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"circularSaw",label:"圆盘锯数量",unit:"台",kind:"number",patterns:[/圆盘锯[^。;;\n|]{0,24}?(\d+)\s*台/gu]}],ae=/\d+(?:\.\d+)?\s*(?:mm|kVA|次|具|台|套|个)\s*[//]\s*\d+/u,af=/不再出现|不得出现|严禁出现|避免出现|不采用|未采用|予以删除|已删除|取消|纠正为|更正为/u;function ag(a){let b=[];for(let c of ad){let d=new Set,e=[];for(let b of c.patterns)for(let c of a.matchAll(b)){let b=c[0].slice(0,40);if(ae.test(b))continue;let f=a.lastIndexOf("\n",c.index)+1,g=a.indexOf("\n",c.index);-1===g&&(g=a.length),af.test(a.slice(f,g))||(d.add(c[1]),e.push(b))}if(!(d.size<2))if("code"===c.kind)b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料参数口径矛盾:“${c.label}”出现 ${[...d].map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(e)].slice(0,3).join("、")}`,suggestion:`同一材料参数全文只允许一个口径:以设计图纸/工程量清单为准统一“${c.label}”,删除矛盾表述。`});else{let a=[...d].map(Number).filter(Number.isFinite);if(a.length<2)continue;let f=Math.max(...a);if(f-Math.min(...a)<=.2*f)continue;b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料/设备数量口径矛盾:“${c.label}”出现 ${a.map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(e)].slice(0,3).join("、")}`,suggestion:`同一设备/材料数量全文只允许一个口径:以应急物资清单/施工部署为准统一“${c.label}”,删除矛盾表述。`})}}return b.slice(0,8)}let ah=/桩基|灌注桩|钻孔桩|打桩|成桩|桩机/u;function ai(a){let b=function(a){let b=[];for(let c of[...a.matchAll(/^#{3,4}\s+[^\n]*(?:地基与基础)[^\n]*$/gmu)]){let d=(c.index||0)+c[0].length,e=a.slice(d).search(/^#{2,4}\s+/mu),f=a.slice(d,e>=0?d+e:a.length);b.push(f)}return b}(a);if(0===b.length||b.some(a=>ah.test(a)))return[];let c=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();!(!a||/^#{1,6}\s/u.test(a))&&ah.test(b)&&c.push(a.slice(0,48))}let d=[...new Set(c)].slice(0,5);return d.length<2?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`桩基表述残留:地基与基础章节施工流程为筏板/独立基础(无桩基工序),但全文另有 ${d.length} 处桩基表述:${d.join("、")}`,suggestion:"本项目基础形式不含桩基:删除全文所有桩基/桩机表述,进度计划表关键线路工序、质量验收划分表、隐蔽验收表均改为本项目实际基础工序(垫层/底板钢筋/混凝土)。"}]}let aj=/^\s*\|\s*计划工期\s*\|([^|\n]*)\|/u,ak=/工期延误|延误|违约|切除|赔偿|罚款|解除|扣减/u;function al(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=aj.exec(c);if(!a)continue;let d=(a[1]??"").trim();d&&ak.test(d)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基本信息表「计划工期」字段错填违约条款文字:“${d.slice(0,40)}”`,suggestion:"「计划工期」字段应填日历天数值(与招标文件前附表一致,如「540个日历天」);工期延误违约条款文字应放在工期风险管控章节,不得占用基本信息表字段。"})}return b.slice(0,2)}let am=/基础|支护|围护|桩|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|标高|深度|形式|体系/u;function an(a){let b=a.replace(/\s+/gu,""),c=new Set;for(let a of b.matchAll(/([一-龥]{2,8})\/([一-龥]{2,8})/gu)){if(!am.test(a[1])&&!am.test(a[2]))continue;let d=Math.max(0,(a.index||0)-12),e=Math.min(b.length,(a.index||0)+a[0].length+12),f=b.slice(d,e);/采用|形式|方式|方案|选用|拟用|拟采用|为/u.test(f)&&c.add(`“${a[1]}/${a[2]}”`)}for(let a of b.matchAll(/[((]\s*或[^))]{1,48}[))]/gu)){let d=a[0].slice(1,-1);if(!/按图纸|按实|按图|待定|另行|视[^,。;]{0,8}而定|根据实际/u.test(d))continue;let e=Math.max(0,(a.index||0)-20),f=b.slice(e,(a.index||0)+a[0].length);am.test(f)&&c.add(a[0].slice(0,30))}return 0===c.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`关键设计决策两可表述:${[...c].join("、")} 以并列/悬置形态表述,基础形式、支护形式等关键决策必须在正文中唯一确定`,suggestion:"以设计图纸/勘察报告/工程量清单为准锁定唯一决策并删除两可表述:明确写出本项目基础形式与支护形式的具体做法(如「基础形式为筏板基础」「基坑支护采用放坡+喷锚」),禁止「或…按图纸实施」类悬置话术。"}]}function ao(a){let b=a.replace(/\s+/gu,"");if((b.match(/基坑|开挖|支护/gu)||[]).length<3)return[];for(let a of b.matchAll(/(?:深度|标高)[^。;,,]{0,12}-?\d+(?:\.\d+)?[^。;,,]{0,6}/gu)){let b=a[0];if(!/(?:超过|大于|小于|不[大低小]于|不低于|按|倍|依据|详见|参考|示意|每)/u.test(b))return[]}return[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:"基坑深度数值未锁定:正文已有基坑支护/开挖成稿内容,但全文未出现「深度/标高+数值」的确定性表述(比较式阈值如「超过3m」不视为锁定),危大工程分级判定失去依据",suggestion:"从绑定资料(地质勘察报告/基坑支护设计图/基础平面图)锁定基坑开挖深度数值(如 5.85m)写入基坑支护小节;深度 ≥5m 的深基坑须同步标注危大工程分级与专家论证要求,禁止以「按图纸确定」回避深度数值。"}]}let ap=/[\u4e00-\u9fa5]{2,10}(?:杯|奖)(?![励金惩罚项])/gu,aq=/优质工程|文明工地|样板|标准化|观摩|示范|精品工程|结构优质|省优|市优/u;function ar(a){let b=a;for(;;){let a=b.replace(/^(?:争创|争取|力争|争获|确保|获得|创建|力创|评为|荣获|标为|目标为|承诺|为)/u,"");if(a===b||!a)break;b=a}return b}let as=/^\s*\|[\s:|-]+\|/u;function at(a){let b=a.split(/\r?\n/u),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>as.test(a),f=0;for(;f<b.length;){let a;if(!/^\s*\|/u.test(b[f])){f+=1;continue}let g=f;for(;g<b.length&&/^\s*\|/u.test(b[g]);)g+=1;let h=b.slice(f,g),i=0,j=0,k=0,l=b=>{if(!a)return;let e=h.slice(j,b);0!==e.length&&c.push({startLine:f+i,endLine:f+b-1,header:a,firstCol:e.map(a=>d(a)[0]?.replace(/[*_`]/gu,"").trim()||"").filter(Boolean),dataCells:e.flatMap(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())).filter(Boolean),bodyChars:e.join("").length,raw:h.slice(i,b)})};for(;k<h.length;){if(k+1<h.length&&e(h[k+1]||"")){l(k),a=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()),i=k,j=k+2,k+=2;continue}if(a&&k>j){let b=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()).filter(Boolean);if(au(b,a)>=.6&&k+1<h.length&&!e(h[k+1]||"")){l(k),a=b,i=k,j=k+1,k+=1;continue}}k+=1}l(h.length),f=g}return c}function au(a,b){if(0===a.length||0===b.length)return 0;let c=new Set(a),d=new Set(b);return[...c].filter(a=>d.has(a)).length/new Set([...c,...d]).size}function av(a,b){if(0===a.length)return 0;let c=[...b],d=0;for(let b of a){let a=c.indexOf(b);a>=0&&(c.splice(a,1),d+=1)}return d/a.length}let aw=/^[\d,,.]+\s*(?:人|个|台|具|套|处|支|辆|班|组|项)?$/u,ax=a=>a.filter(a=>!aw.test(a));function ay(a){let b=[],c=at(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.header.length>0&&e.header.length===f.header.length&&e.header.every((a,b)=>a===f.header[b]),h=au(e.header,f.header),i=au(e.firstCol,f.firstCol),j=au(e.dataCells,f.dataCells),k=Math.max(av(ax(e.dataCells),ax(f.dataCells)),av(ax(f.dataCells),ax(e.dataCells)));(g&&j>=.6||h>=.7&&i>=.6||i>=.6&&k>=.6)&&b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`表格重复:第 ${e.startLine+1}~${e.endLine+1} 行表格(表头:${e.header.slice(0,3).join("|")})与第 ${f.startLine+1}~${f.endLine+1} 行表格高度重复(表头重合 ${Math.round(100*h)}%、数据重合 ${Math.round(100*j)}%、首列重合 ${Math.round(100*i)}%)`,suggestion:"同一文档内同主题表格只保留信息最全的一张:删除重复表格(保留字段与数据行更多的那张),删除后核对章节表格计划仍被覆盖。"})}return b.sort((a,b)=>{let c=a=>Number(a.match(/数据重合\s*(\d+)%/u)?.[1]??0);return c(b.message)-c(a.message)}).slice(0,5)}function az(a){let b=at(a);if(b.length<2)return{markdown:a,removedCount:0};let c=a.split(/\r?\n/u),d=new Set;for(let a=0;a<b.length;a+=1)for(let c=a+1;c<b.length;c+=1){let e=b[a],f=b[c];if(d.has(e.startLine)||d.has(f.startLine))continue;let g=e.header.length>0&&e.header.length===f.header.length&&e.header.every((a,b)=>a===f.header[b]),h=au(e.header,f.header),i=au(e.firstCol,f.firstCol),j=au(e.dataCells,f.dataCells),k=Math.max(av(ax(e.dataCells),ax(f.dataCells)),av(ax(f.dataCells),ax(e.dataCells)));if(!(g&&j>=.6)&&!(h>=.7&&i>=.6)&&!(i>=.6&&k>=.6))continue;let[l,m]=e.bodyChars>=f.bodyChars?[e,f]:[f,e];for(let a=m.startLine;a<=m.endLine;a+=1)d.add(a)}return 0===d.size?{markdown:a,removedCount:0}:{markdown:c.filter((a,b)=>!d.has(b)).join("\n"),removedCount:d.size}}function aA(a){let b=a.replace(/\s+/gu,"");return b.length>=40?b:void 0}function aB(a){let b=[],c=a.split(/\r?\n/u),d=new Map,e=[],f=()=>{let a=aA(e.join(""));if(a){let b=(d.get(a)||0)+1;d.set(a,b)}e=[]};for(let a of c){let b=a.trim();if(!b||/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)){f();continue}if(/^[-*•]\s/u.test(b)){f(),e.push(b),f();continue}e.push(b)}for(let[a,c]of(f(),[...d.entries()].filter(([,a])=>a>=2).slice(0,3)))b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`段落完全重复 ${c} 次:“${a.slice(0,40)}…”`,suggestion:"同一段落正文只保留首次出现处,删除其余重复段落;确需前后呼应时改写为差异化表述并压缩篇幅。"});return b}function aC(a){let b=a.split(/\r?\n/u),c=new Set,d=new Set,e=[],f=[],g=()=>{let a=aA(e.join(""));a&&(c.has(a)?f.forEach(a=>d.add(a)):c.add(a)),e=[],f=[]};return(b.forEach((a,b)=>{let c=a.trim();if(!c||/^#{1,6}\s/u.test(c)||/^\s*\|/u.test(c))return void g();if(/^[-*•]\s/u.test(c)){g(),e=[c],f=[b],g();return}e.push(c),f.push(b)}),g(),0===d.size)?{markdown:a,removedCount:0}:{markdown:b.filter((a,b)=>!d.has(b)).join("\n"),removedCount:d.size}}function aD(a,b,c){let d=new Set;for(let a of[...b.quality,...b.project,...b.schedule])for(let b of(0,e.lG)(a.value).matchAll(ap))d.add(ar(b[0]));if(c?.extracted)for(let a of[...c.awardObjectives||[],...c.specialQualityStandards||[],...c.awardClauses||[]])for(let b of(a.text||"").matchAll(ap))d.add(ar(b[0]));if(0===d.size)return[];let f=new Set;for(let b of a.matchAll(ap)){let a=ar(b[0]);!d.has(a)&&(aq.test(a)||f.add(a))}return 0===f.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`奖项表述与招标文件白名单不符:正文出现 ${[...f].join("、")},均未出现在招标文件评分项要求或绑定资料中`,suggestion:"创优目标必须以招标文件原文为准逐字落位(如「确保黄山杯」),禁止自行编造或替换为其他奖项名称;白名单外的奖项表述一律删除或替换为招标原文奖项。"}]}function aE(a){let b=a.split(/\r?\n/u),c=new Set;for(let a of b){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(!b)continue;let d=b[2].trim();(0,h.Xp)(d)&&c.add(d)}if(0===c.size)return[];let d=[...c];return[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`正文出现投标人资格内容小节:${d.slice(0,3).map(a=>`“${a}”`).join("、")}${d.length>3?" 等":""}(资格审查内容不属于施工组织设计,属资格文件/商务文件范畴)`,suggestion:"删除资格内容小节(标题与正文整体删除),不得以改写、合并、降级方式保留;正文如需提及安全生产许可证等证照,只能以施工管理口径表述(如“按规定持证上岗”),不得成节铺陈资格核验内容。"}]}let aF=/人[、,,]材[、,,]机/u,aG=/(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施/u;function aH(a){let b=a.match(aG)?.[1];return b||(/劳动力|人员|作业人员|劳务/u.test(a)?"人":/材料|物资|周转/u.test(a)?"材":/机械|设备|机具|塔吊|起重机/u.test(a)?"机":void 0)}function aI(a){let b=[],c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){let d,e=/^##\s+(.+)$/u.exec(c[a].trim());if(!e||!aF.test(e[1]))continue;let f=c.length;for(let b=a+1;b<c.length;b+=1)if(/^##\s+/u.test(c[b].trim())){f=b;break}let g=[];for(let e=a+1;e<f;e+=1){let a=/^###\s+(.+)$/u.exec(c[e].trim()),f=/^####\s+(.+)$/u.exec(c[e].trim());if(a){d={subject:aH(a[1]),title:a[1].trim()},g.push(d);continue}if(f&&d?.subject){let a=aH(f[1]);a&&a!==d.subject&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章层级错位:小节“${f[1].trim()}”挂在“${d.title}”之下(${"人"===a?"人":"材"===a?"材":"机"}的保障体系应独立成二级小节,不得并入${"人"===d.subject?"人":"材"===d.subject?"材":"机"}的保障体系)`,suggestion:`将“${f[1].trim()}”提升为独立二级小节,或将其内容合并到对应主题的二级小节。`})}}let h=new Set(g.map(a=>a.subject).filter(Boolean)),i=["人","材","机"].every(a=>h.has(a));(g.length<3||!i)&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章结构不完整:“${e[1].trim()}”仅 ${g.length} 个二级小节(人/材/机的保障体系未全部独立成节)`,suggestion:"拆分为“确保人的保障体系与措施”“确保材的保障体系与措施”“确保机的保障体系与措施”三个二级小节。"})}return b}function aJ(a,b){if(0===b.length)return{markdown:a,fixedCount:0,details:[]};let c=[...b].sort((a,b)=>b.start-a.start),d=a,e=0,f=[];for(let a of c)d=d.slice(0,a.start)+a.replacement+d.slice(a.end),e+=1,f.push(a.detail);return{markdown:d,fixedCount:e,details:[...new Set(f)].slice(0,8)}}function aK(a){let b=function(a){let b=t(a).map(a=>a.peak);return b.length>0?Math.max(...b):void 0}(a);if(void 0===b)return{markdown:a,fixedCount:0,details:[]};let c=[],d=d=>{for(let e of a.matchAll(d)){let d=Number(e[1].replace(/[,,]/gu,""));if(!Number.isFinite(d)||d<=0)continue;let f=e.index+e[0].indexOf(e[1]);!s(a,f)&&(d<=1.3*b||c.push({start:f,end:f+e[1].length,replacement:String(b),detail:`劳动力峰值 ${d}人→${b}人(以分阶段投入明细表为准)`}))}};for(let e of(d(p),d(q),a.matchAll(/(?:高峰期|高峰|峰值)[^。;;\n]{0,16}?控制(?:在|为|到)?(?:约)?\s*([\d,]+)\s*人(?:以内|以下|之内)?/gu))){let a=Number(e[1].replace(/[,,]/gu,""));if(!Number.isFinite(a)||a<=0||a>=b)continue;let d=e.index+e[0].indexOf(e[1]);c.push({start:d,end:d+e[1].length,replacement:String(b),detail:`劳动力控制上限 ${a}人→${b}人(与分阶段投入明细表峰值自洽)`})}return aJ(a,c)}function aL(a){let b=a.split(/\r?\n/u),c=/^\|.+\|$/u,d=[],e=0;for(let a of b)d.push({start:e,end:e+a.length}),e+=a.length+1;let f=new Map,g=[];for(let a=0;a<b.length;a+=1){if(!c.test(b[a].trim()))continue;let e=a;for(;a<b.length&&c.test(b[a].trim());)a+=1;let h=a,i=b.slice(Math.max(0,e-6),e).join("\n");if(/总进度计划|施工总进度|总进度安排/u.test(i)){for(let a of ab(b.slice(e,h).join("\n"))){let b=f.get(a.key);(void 0===b||a.day>b)&&f.set(a.key,a.day)}g.push({start:d[e].start,end:d[h-1].end})}}if(0===f.size)return{markdown:a,fixedCount:0,details:[]};let h=[],i=(a,b,c,d,e)=>{let i=aa.find(b=>b.re.test(a))?.key;if(void 0===i||!Number.isFinite(b)||b<1||b>3e3)return;let j=f.get(i);!(void 0===j||5>Math.abs(b-j))&&(g.some(a=>c>=a.start&&c<=a.end)||h.push({start:c,end:d,replacement:String(j),detail:`节点“${aa.find(a=>a.key===i)?.label||i}”工期 ${b}日→${j}日(以总进度计划表为准)`}))};for(let b of a.matchAll(/第(\d{2,3})日[^。;;\n]{0,14}?完成[^。;;\n]{0,12}?(基坑支护及土方外运|装饰装修及幕墙|机电安装及智能化调试|室外工程及竣工验收|地下结构出正负零|主体结构封顶|正负零|封顶)/gu)){let a=b.index+b[0].indexOf(b[1]);i(b[2],Number(b[1]),a,a+b[1].length,b[0].slice(0,40))}for(let b of a.matchAll(/(基坑支护|正负零|封顶|装饰装修|机电安装|竣工验收)(?:(?!(?:第\d{2,3}[日天]|,|、)).){0,8}?完成[^。;;\n]{0,10}?第(\d{2,3})[日天]/gu)){let a=b.index+b[0].indexOf(b[2]);i(b[1],Number(b[2]),a,a+b[2].length,b[0].slice(0,40))}for(let b of a.matchAll(/(主体(?:结构)?封顶)(?:(?!(?:第\d{2,3}[日天]|,|、|完成)).){0,20}?第(\d{2,3})日/gu)){let a=b.index+b[0].indexOf(b[2]);i(b[1],Number(b[2]),a,a+b[2].length,b[0].slice(0,40))}return aJ(a,h)}function aM(a){let b=[];for(let c of ad){if("number"!==c.kind)continue;let d=new Set,e=new Set;for(let b of c.patterns)for(let c of a.matchAll(b)){let b=c[0].slice(0,40);if(ae.test(b))continue;let f=a.lastIndexOf("\n",c.index)+1,g=a.indexOf("\n",c.index);-1===g&&(g=a.length);let h=a.slice(f,g);if(af.test(h))continue;let i=Number(c[1]);Number.isFinite(i)&&!(i<=0)&&(/^\s*\|/u.test(h)?d.add(i):e.add(i))}if(1!==d.size)continue;let f=[...d][0];if([...e].some(a=>Math.abs(a-f)>.2*f))for(let d of c.patterns)for(let e of a.matchAll(d)){let d=e[0].slice(0,40);if(ae.test(d))continue;let g=a.lastIndexOf("\n",e.index)+1,h=a.indexOf("\n",e.index);-1===h&&(h=a.length);let i=a.slice(g,h);if(af.test(i)||/^\s*\|/u.test(i))continue;let j=Number(e[1]);if(!Number.isFinite(j)||j<=0||Math.abs(j-f)<=.2*f)continue;let k=e.index+e[0].indexOf(e[1]);b.push({start:k,end:k+e[1].length,replacement:String(f),detail:`${c.label} ${j}${c.unit}→${f}${c.unit}(以表格口径为准)`})}}return aJ(a,b)}function aN(a){let b=a,c=0,d=[];for(let a of[aK,aL,aM]){let e=a(b);e.markdown!==b&&(b=e.markdown,c+=e.fixedCount,d.push(...e.details))}return{markdown:b,fixedCount:c,details:d.slice(0,12)}}function aO(a){let b=a.replace(/\s+/gu,"");return b.length?(b.match(/[0-9A-Za-z%℃°±×÷≥≤.]/gu)||[]).length/b.length:0}async function aP(a){if("0"===process.env.DOCUMENT_CROSS_CHAPTER_DEDUP)return[];let b=function(a){let b=[];return a.forEach((a,c)=>{(a.content||"").split(/\n\s*\n/u).forEach((a,d)=>{let e=a.trim();if(!e||/^#{1,6}\s/um.test(e)||/^\s*\|/um.test(e)||/^[-*•]\s/um.test(e))return;let f=e.replace(/\s+/gu,"");f.length<60||b.push({chapterIndex:c,paragraphIndex:d,text:e,normalized:f})})}),b}(a);if(b.length<2)return[];let c=await (0,f.Mv)(b.map(a=>a.normalized),b.map(a=>a.normalized)),d=[],e=new Set;for(let a=0;a<b.length;a+=1)for(let f=a+1;f<b.length;f+=1){let g=b[a],h=b[f];if(g.chapterIndex===h.chapterIndex||g.normalized===h.normalized)continue;let i=c(g.normalized,h.normalized);if(i<.82)continue;let j=aO(g.text),k=aO(h.text),l=j>k||j===k&&g.chapterIndex<=h.chapterIndex,m=l?g:h,n=l?h:g,o=`${n.chapterIndex}:${n.paragraphIndex}`;e.has(o)||(e.add(o),d.push({keep:{chapterIndex:m.chapterIndex,paragraphIndex:m.paragraphIndex},drop:{chapterIndex:n.chapterIndex,paragraphIndex:n.paragraphIndex},similarity:i,paragraphPreview:n.normalized.slice(0,40)}))}return d}async function aQ(a){return(await aP(a)).map(b=>({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",chapterId:a[b.drop.chapterIndex]?.id,message:`跨章语义重复:「${a[b.keep.chapterIndex]?.title||"?"}」与「${a[b.drop.chapterIndex]?.title||"?"}」存在内容高度雷同段落(相似度 ${b.similarity.toFixed(2)}):“${b.paragraphPreview}…”`,suggestion:"同一内容全文只保留一处(保留信息密度高者);删除或改写本章的雷同段落,与本章主题相关的独有信息归并后,不得与他章段落语义重复。"}))}async function aR(a){let b=await aP(a);if(0===b.length)return 0;let c=0;for(let d of b){let b=a[d.drop.chapterIndex];if(!b)continue;let e=(b.content||"").split(/\n\s*\n/u);!(d.drop.paragraphIndex>=e.length)&&(e[d.drop.paragraphIndex].trim().replace(/\s+/gu,"").length<60||(e.splice(d.drop.paragraphIndex,1),b.content=e.join("\n\n"),c+=1))}return c}},46482:(a,b,c)=>{c.d(b,{Zk:()=>r,Tz:()=>z,X6:()=>s,fC:()=>A,l8:()=>y,JP:()=>q});var d=c(73024),e=c(76760),f=c(74329);c(25840),c(23500);var g=c(70933),h=c(70208),i=c(61373),j=c(78217);c(23760);var k=c(30355),l=c(44505),m=c(85016),n=c(22157);let o=[...k.P9.filter(a=>!n.Kd.includes(a)),...m.D$.source.split("|")];var p=c(95734);function q(a){let b=a.template.chapters.length,c=b>0?a.targetWords/b:a.targetWords,d=`${a.template.name}
|
|
19
19
|
${a.template.category||""}
|
|
20
20
|
${a.requirement||""}`,e=/专项|安全|质量|验收|审核|合同|合规|审计|风控|风险/u.test(d),f=a.targetWords>=4e4,g=(a.materialFileCount??0)<4&&(a.evidenceCount??0)<6,h=e||f||g,i=a.targetWords>=3e4||b>=8||c>=4e3,j=a.targetWords<=6e3&&b<=4&&!h,k="0"!==process.env.DOCUMENT_GLOBAL_CONSISTENCY_REVIEW&&(h||j||"1"===process.env.DOCUMENT_GLOBAL_CONSISTENCY_REVIEW);return{mode:h?"strict":i?"longform":j?"fast":"balanced",enableChapterReview:!0,enableGlobalReview:k,enableDocumentBudgetExpansion:!1,enableFinalQualityReview:!0,globalReviewSamplingRate:k&&j?.35:1}}function r(a){return{strategy:a,metrics:[],llm:{calls:0,failures:0,maxActive:0,retries:0,failureStreak:0,schemaFailures:0,promptCacheHitTokens:0,promptCacheMissTokens:0,inputTokens:0,outputTokens:0,inputChars:0,layerChars:{l0:0,l1:0,l2:0,l3:0}},semantic:{embedCacheHits:0,embedCacheMisses:0},evidence:{raw:0,used:0,filteredNoise:0,budgetDropped:0,avgNoiseScore:0,avgFactDensity:0,searchQueries:0,searchMs:0,contextChars:0,t0Chars:0,t1Chars:0,t2Lines:0,omittedChars:0},quality:{blockingCount:0,importantCount:0,minorCount:0,repairedCount:0}}}async function s(a,b,c,d){let e=Date.now();try{return await c()}finally{let c=Date.now();a.metrics.push({name:b,startedAt:e,endedAt:c,durationMs:c-e,meta:d})}}function t(a,b){let c=b.originalText?.trim();if(c&&a.includes(c)&&a.indexOf(c)===a.lastIndexOf(c))return c;if(c&&c.length>=8&&c.length<=500){let b=function(a,b){let c,d=b.split(/\s+/u).filter(a=>a.length>0);if(d.length<2)return;let e=RegExp(d.map(a=>a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")).join("\\s+"),"gu");for(let b of a.matchAll(e)){if(void 0!==c)return;c=b[0]}return c}(a,c);if(b)return b}let d=b.targetStart?.trim(),e=b.targetEnd?.trim();if(!d||!e)return;let f=a.indexOf(d);if(f<0)return;let g=a.indexOf(e,f+d.length);if(g<0)return;let h=g+e.length,i=a.slice(f,h);return a.indexOf(i)===a.lastIndexOf(i)?i:void 0}function u(a){return Math.max(2600,Math.min(16e3,Math.ceil(.45*(0,j.V7)(a))))}function v(a,b){let c=(a.match(/```/gu)||[]).length,d=b.replace(/^第[一二三四五六七八九十百千万]+章\s*/u,"").trim();return c%2==0&&(!d||a.includes(d))&&!/^\s*$/u.test(a)}function w(a){let b=[],c="";for(let d=0;d<a.length;d+=1){let e=a[d];/\s/u.test(e)||(c+=e,b.push(d))}return{compact:c,rawPositions:b}}function x(a,b,c){let d=a.lastIndexOf("\n",b-1)+1,e=a.indexOf("\n",c),f=e<0?a.length:e;if(/^\s*\|/.test(a.slice(d,f)))return{start:d,end:f};let g=d,h=a.slice(d,b),i=Math.max(h.lastIndexOf("。"),h.lastIndexOf(";"),h.lastIndexOf(";"));i>=0&&(g=d+i+1);let j=f,k=a.slice(c,f),l=[k.indexOf("。"),k.indexOf(";"),k.indexOf(";")].filter(a=>a>=0);return l.length>0&&(j=c+Math.min(...l)+1),{start:g,end:j}}async function y(a){(0,n.Te)(a.signal);let b=a.repairType||function(a){let b=a.join("\n");for(let a of f.NP)if(a.pattern.lastIndex=0,a.pattern.test(b))return a.type;return"generic"}(a.issues),c=a.contextChapters?.length?`
|
|
21
21
|
|
|
@@ -32,4 +32,4 @@ ${(0,g.ks)(q,{maxChars:y,diagnostics:a.diagnostics})}`:"",C=await (0,p.bb)(r,s(B
|
|
|
32
32
|
${(0,g.ks)(q,{maxChars:3e3,diagnostics:a.diagnostics})}`;C=await (0,p.bb)(r,s(b),{maxTokens:a.maxTokens??8e3,temperature:0,signal:a.signal,diagnostics:a.diagnostics,contextLayers:A(b),prefixKey:`repair:${a.chapter.id}`})}(0,n.Te)(a.signal);let D=a.chapter.content,E=0,F=Array.isArray(C?.patches)?C.patches:[];for(let b of F){if(a.patchGuard&&b.replacement?.trim()&&function(a){let b=[];i.kt.test(a)&&b.push("资料来源罗列句");let c=o.filter(b=>a.includes(b));for(let d of(c.length>0&&b.push(`内部术语“${c.join("”“")}”`),a.matchAll(l.eS)))b.push(`具体日历日期“${d[1]}年${d[2]}月${d[3]}日”`);let d=[...new Set(a.match(l.Ih)||[])];return d.length>0&&b.push(`叠词“${d.join("”“")}”`),b}(b.replacement).length>0){let b=a.patchGuard.diagnostics;if(a.patchGuard.observeOnly)b&&(b.llm.patchGuardHits=(b.llm.patchGuardHits??0)+1);else{b&&(b.llm.patchGuardRejects=(b.llm.patchGuardRejects??0)+1);continue}}if(d&&void 0!==b.anchorIndex&&null!==b.anchorIndex){let c=Number(b.anchorIndex),d=Number.isInteger(c)?e[c]:void 0;if(d&&d.text){let c=void 0!==d.endText?function(a){let b=a.replacement?.trim(),c=Math.max(2600,Math.min(9e3,Math.ceil(.95*(0,j.V7)(a.content))));if(!b||b.length>c||a.forbidDrawingImages&&/!\[[^\]]*\]\([^)]*\)/iu.test(b))return{content:a.content,applied:!1};let d=a.startAnchor.replace(/\s+/gu,"");if(d.length<4||!b.replace(/\s+/gu,"").includes(d))return{content:a.content,applied:!1};let{compact:e,rawPositions:f}=w(a.content),g=e.indexOf(d);if(g<0)return{content:a.content,applied:!1};let h=f[g],k=a.content.length;if(a.endAnchor){let b=a.endAnchor.replace(/\s+/gu,"");if(b.length<4)return{content:a.content,applied:!1};let c=e.indexOf(b,g+d.length);if(c<0)return{content:a.content,applied:!1};k=f[c]}let l=a.content.slice(0,h)+b+a.content.slice(k);return!v(l,a.title)||(0,j.V7)(l)<Math.floor(.65*(0,j.V7)(a.content))?{content:a.content,applied:!1}:{content:(0,i.kT)((0,i.FD)(l,a.forbidDrawingImages)),applied:l!==a.content}}({content:D,startAnchor:d.text,endAnchor:d.endText,replacement:b.replacement,title:a.chapter.title,forbidDrawingImages:a.forbidDrawingImages}):function(a){let b,c=a.replacement?.trim()??"",d=a.anchor.replace(/\s+/gu,"");if(d.length<4)return{content:a.content,applied:!1};let e=a.content.replace(/\s+/gu,""),f=a.appendMode?Math.max(4e3,Math.min(24e3,Math.ceil(1.2*(0,j.V7)(a.content)))):u(a.content);if(0===c.length){if(!e.includes(d))return{content:a.content,applied:!1};let{compact:b,rawPositions:c}=w(a.content),f=[],g=0;for(;;){let a=b.indexOf(d,g);if(a<0)break;f.push(a),g=a+d.length}let h=f.map(b=>x(a.content,c[b],c[b+d.length-1]+1)),k=a.content;for(let a of h.reverse())k=k.slice(0,a.start)+k.slice(a.end);return!v(k,a.title)||(0,j.V7)(k)<Math.floor(.65*(0,j.V7)(a.content))?{content:a.content,applied:!1}:{content:(0,i.kT)(k),applied:k!==a.content}}let g=c;if(g.length>f||a.forbidDrawingImages&&/!\[[^\]]*\]\([^)]*\)/iu.test(g))return{content:a.content,applied:!1};if(a.appendMode&&!g.replace(/\s+/gu,"").startsWith(d)&&(g=`${a.anchor}${g}`),e.includes(d))b=function(a,b,c){let{compact:d,rawPositions:e}=w(a),f=[],g=0;for(;;){let a=d.indexOf(b,g);if(a<0)break;f.push({start:e[a],end:e[a+b.length-1]+1}),g=a+b.length}let h=a;for(let{start:a,end:b}of f.reverse())h=h.slice(0,a)+c+h.slice(b);return h}(a.content,d,g);else{let c=function(a,b,c){let{compact:d,rawPositions:e}=w(a);for(let c=b.length;c>=8;c-=4){let f=b.slice(0,c),g=d.indexOf(f);if(!(g<0)&&g===d.lastIndexOf(f))return x(a,e[g],e[g+c-1]+1)}}(a.content,d,0);if(!c)return{content:a.content,applied:!1};b=a.content.slice(0,c.start)+g+a.content.slice(c.end)}return!v(b,a.title)||(0,j.V7)(b)<Math.floor(.65*(0,j.V7)(a.content))?{content:a.content,applied:!1}:{content:(0,i.kT)((0,i.FD)(b,a.forbidDrawingImages)),applied:b!==a.content}}({content:D,anchor:d.text,replacement:b.replacement,title:a.chapter.title,forbidDrawingImages:a.forbidDrawingImages,appendMode:!0===d.append});if(D=c.content,c.applied){E+=1;continue}}}let c=function(a){let b=a.patch.replacement?.trim()??"",c=u(a.content);if(0===b.length){let b=t(a.content,a.patch);if(!b||b.length>c)return{content:a.content,applied:!1};let d=(0,i.kT)(a.content.replace(b,""));return!v(d,a.title)||(0,j.V7)(d)<Math.floor(.65*(0,j.V7)(a.content))?{content:a.content,applied:!1}:{content:d,applied:d!==a.content}}if(b.length>c||a.forbidDrawingImages&&/!\[[^\]]*\]\([^)]*\)/iu.test(b))return{content:a.content,applied:!1};let d=t(a.content,a.patch);if(!d||d.length>c)return{content:a.content,applied:!1};let e=(0,i.kT)((0,i.FD)(a.content.replace(d,b),a.forbidDrawingImages));return!v(e,a.title)||(0,j.V7)(e)<Math.floor(.65*(0,j.V7)(a.content))?{content:a.content,applied:!1}:{content:e,applied:e!==a.content}}({content:D,patch:b,title:a.chapter.title,forbidDrawingImages:a.forbidDrawingImages});D=c.content,c.applied&&(E+=1)}return{content:D,appliedCount:E,producedCount:F.length,repairType:b}}function z(a,b,c){return function(a,b){let c=e.resolve(a),f=function(a,b){let c=e.resolve(a);if(e.isAbsolute(b))return e.resolve(b);let f=e.resolve(c,"knowledgeBase",b);return d.existsSync(f)?f:e.resolve(c,b)}(c,b);return f===c||f.startsWith(`${c}${e.sep}`)}(a,b)&&c.size>0&&(function(a,b){let c=e.isAbsolute(b)?b:e.join(a,b),d=e.isAbsolute(b)?e.relative(a,b):b;return[b,c,d,e.join(a,d)]})(a,b).some(a=>c.has(a))}function A(a){return a.map(a=>`## [${a.roleId}/${a.category}] ${a.name}
|
|
33
33
|
${function(a){let b=a.replace(/```([\s\S]*?)```/gu,(a,b)=>/<OUTLINE>|\|\s*[^\n]+\s*\||#{1,6}\s+|必须|禁止|不得|应当|要求|规则|格式|输出|表格|章节|小节|正文/u.test(b)?`
|
|
34
34
|
${b.trim()}
|
|
35
|
-
`:"\n【示例代码块已省略:仅作为格式参考,不作为当前文档事实】\n").split(/\r?\n/u),c=[],d=!1,e=!1;for(let a of b){let b=a.trim();if((0,h.bl)(b)&&(e=!0),e){c.push(a),(0,h.Ui)(b)&&(e=!1);continue}let f=/^(?:#+\s*)?(?:示例|样例|范例|例如|参考示例|示例数据|示例正文|示例目录|example|sample)\s*[::]?/iu.test(b),g=/(?:不得|禁止|必须|应当|要求|规则|格式|输出|保留|只返回|不要|表格|章节|小节|正文|目录|封面)/u.test(b);if(f&&!g){c.at(-1)?.includes("示例内容已省略")||c.push("【示例内容已省略:仅作为格式参考,不作为当前文档事实】"),d=!0;continue}if(d){if(!b){d=!1;continue}if(!(/^(?:#+\s*)?(?:规则|要求|输出|格式|禁止|注意|正文|章节|小节|表格|风格|校验)/u.test(b)||/\|\s*[^\n]+\s*\|/u.test(b)))continue;d=!1}c.push(a)}return c.join("\n").replace(/\n{3,}/gu,"\n\n").trim()}(a.content)}`).join("\n\n")}},71678:(a,b,c)=>{c.d(b,{M8:()=>m,Xp:()=>p,a0:()=>l,dn:()=>q,hM:()=>k,mI:()=>s,xb:()=>o});var d=c(37047),e=c(41991),f=c(70208);let g=["对与评标活动有关的工作人员的纪律要求","评标委员会成员与投标人接触的限制","评标纪律与廉洁从业承诺要求","评审争议处理与投标澄清配合程序","评审结果确认与中标公示流程","评标办法与分值构成说明","清单计量与报价口径约定","投标文件实质性响应要求","投标保证金缴纳与退还程序","开标程序与投标文件递交截止时间","评标期间行为管控与资料闭环"],h=["劳动力配置计划与高峰期人数安排","施工质量保证措施与验收标准","安全生产管理与教育培训要求","施工进度计划与关键线路安排","材料设备采购进场计划与检验要求","施工现场文明施工与环境保护管理","劳动纪律与班组作业管理制度","施工机械设备配置与维护保养计划"],i=/评标|投标|行贿|打招呼|递条子|廉洁|串标|围标|弄虚作假|干扰评标|纪律|澄清|中标|报价|清单计量|评审|保证金|开标|递交|争议/u;function j(a){let b=a.sectionTitle?.trim()||"",c=(a.content||"").replace(/\s+/gu," ").slice(0,400);return b?`${b}。${c}`:c}function k(a){let b=a.sectionTitle?.trim()||a.content.replace(/\s+/gu,"").slice(0,60);return`${a.filePath}::${b}`}async function l(a,b){if(0===a.length)return{safe:[],excluded:[]};let c=a.filter(a=>i.test(j(a)));if(0===c.length)return{safe:[...a],excluded:[]};let e=c.map(j),f=await (0,d.Mv)(e,[...g],b),k=await (0,d.Mv)(e,[...h],b),l=new Set;for(let a of c){let b=j(a),c=Math.max(...g.map(a=>f(b,a))),d=Math.max(...h.map(a=>k(b,a)));c>=.6&&c>d&&l.add(a)}return{safe:a.filter(a=>!l.has(a)),excluded:[...l]}}async function m(a){return(0,e.A)({prototypes:[...g],negativePrototypes:[...h],threshold:.6,embedDocuments:a})}function n(a){return a.replace(/[\s\p{P}\p{S}]+/gu,"").toLowerCase()}function o(a){let b=a.trim().replace(/\s+/gu,"");if(!b||(0,f.mq)(b))return!0;let c=n(b);if(g.some(a=>n(a)===c))return!0;let d=/评标|投标|开标|中标|评审|保证金|串标|围标|廉洁|询标|递交/u.test(b),e=/纪律|监督|争议|澄清|程序|行为|管控|限制|接触|公示|承诺|响应|办法/u.test(b);return!!d&&!!e||p(b)}function p(a){let b=a.trim().replace(/\s+/gu,"");return
|
|
35
|
+
`:"\n【示例代码块已省略:仅作为格式参考,不作为当前文档事实】\n").split(/\r?\n/u),c=[],d=!1,e=!1;for(let a of b){let b=a.trim();if((0,h.bl)(b)&&(e=!0),e){c.push(a),(0,h.Ui)(b)&&(e=!1);continue}let f=/^(?:#+\s*)?(?:示例|样例|范例|例如|参考示例|示例数据|示例正文|示例目录|example|sample)\s*[::]?/iu.test(b),g=/(?:不得|禁止|必须|应当|要求|规则|格式|输出|保留|只返回|不要|表格|章节|小节|正文|目录|封面)/u.test(b);if(f&&!g){c.at(-1)?.includes("示例内容已省略")||c.push("【示例内容已省略:仅作为格式参考,不作为当前文档事实】"),d=!0;continue}if(d){if(!b){d=!1;continue}if(!(/^(?:#+\s*)?(?:规则|要求|输出|格式|禁止|注意|正文|章节|小节|表格|风格|校验)/u.test(b)||/\|\s*[^\n]+\s*\|/u.test(b)))continue;d=!1}c.push(a)}return c.join("\n").replace(/\n{3,}/gu,"\n\n").trim()}(a.content)}`).join("\n\n")}},71678:(a,b,c)=>{c.d(b,{M8:()=>m,Xp:()=>p,a0:()=>l,dn:()=>q,hM:()=>k,mI:()=>s,xb:()=>o});var d=c(37047),e=c(41991),f=c(70208);let g=["对与评标活动有关的工作人员的纪律要求","评标委员会成员与投标人接触的限制","评标纪律与廉洁从业承诺要求","评审争议处理与投标澄清配合程序","评审结果确认与中标公示流程","评标办法与分值构成说明","清单计量与报价口径约定","投标文件实质性响应要求","投标保证金缴纳与退还程序","开标程序与投标文件递交截止时间","评标期间行为管控与资料闭环"],h=["劳动力配置计划与高峰期人数安排","施工质量保证措施与验收标准","安全生产管理与教育培训要求","施工进度计划与关键线路安排","材料设备采购进场计划与检验要求","施工现场文明施工与环境保护管理","劳动纪律与班组作业管理制度","施工机械设备配置与维护保养计划"],i=/评标|投标|行贿|打招呼|递条子|廉洁|串标|围标|弄虚作假|干扰评标|纪律|澄清|中标|报价|清单计量|评审|保证金|开标|递交|争议/u;function j(a){let b=a.sectionTitle?.trim()||"",c=(a.content||"").replace(/\s+/gu," ").slice(0,400);return b?`${b}。${c}`:c}function k(a){let b=a.sectionTitle?.trim()||a.content.replace(/\s+/gu,"").slice(0,60);return`${a.filePath}::${b}`}async function l(a,b){if(0===a.length)return{safe:[],excluded:[]};let c=a.filter(a=>i.test(j(a)));if(0===c.length)return{safe:[...a],excluded:[]};let e=c.map(j),f=await (0,d.Mv)(e,[...g],b),k=await (0,d.Mv)(e,[...h],b),l=new Set;for(let a of c){let b=j(a),c=Math.max(...g.map(a=>f(b,a))),d=Math.max(...h.map(a=>k(b,a)));c>=.6&&c>d&&l.add(a)}return{safe:a.filter(a=>!l.has(a)),excluded:[...l]}}async function m(a){return(0,e.A)({prototypes:[...g],negativePrototypes:[...h],threshold:.6,embedDocuments:a})}function n(a){return a.replace(/[\s\p{P}\p{S}]+/gu,"").toLowerCase()}function o(a){let b=a.trim().replace(/\s+/gu,"");if(!b||(0,f.mq)(b))return!0;let c=n(b);if(g.some(a=>n(a)===c))return!0;let d=/评标|投标|开标|中标|评审|保证金|串标|围标|廉洁|询标|递交/u.test(b),e=/纪律|监督|争议|澄清|程序|行为|管控|限制|接触|公示|承诺|响应|办法/u.test(b);return!!d&&!!e||p(b)}function p(a){let b=a.trim().replace(/\s+/gu,"");if(!b)return!1;let c=b.replace(/^\d{1,3}(?:[..]\d{1,3})*[、..]?/u,"");return!!(/^具备(?:有效|相应|满足)/u.test(c)||/^(?:须|应|需|得)?提供[^,,。;]{0,12}(?:证明|材料|文件|证件|证书|报告)/u.test(c))||!!/营业执照|资质证书|安全生产许可证|资格预审|资格审查|资质审查|财务状况|业绩证明|业绩要求|银行资信|审计报告|信用记录|信用评价|不良行为记录|联合体投标|联合体协议/u.test(b)&&!/施工|技术|方案|措施|管理|控制|验收|工艺|流程|计划|组织|进度|质量|工期|文明|绿色|环保|节能|材料|设备|机械|人员|劳务|检验|检测|试验|保证|落实|制度/u.test(b)}function q(a){let b=a.trim().replace(/\s+/gu,"");return!!b&&!!/投标人|投标方|承包人资格|资格要求|资格审查|资格预审|资质要求|资质条件|资质等级|资格条件|财务状况|业绩要求|业绩证明|信用要求|联合体/u.test(b)&&/营业执照|资质证书|安全生产许可证|级及以上资质|财务状况|财务报告|审计报告|银行资信|业绩证明|类似业绩|信用记录|信用评价|不良行为记录|投标保证金|履约保证金/u.test(b)}async function r(a){let b=a.sections.filter(a=>a?.trim());if(0===b.length)return[];let c=b.filter(a=>!o(a)),e=c.filter(a=>i.test(a));if(0===e.length)return c;let f=`${a.chapterTitle} ${a.chapterPurpose||""}`.trim(),j=await (0,d.Mv)(e,[...g],a.embedDocuments),k=await (0,d.Mv)(e,f?[f]:[],a.embedDocuments),l=await (0,d.Mv)(e,[...h],a.embedDocuments),m=new Set;for(let a of e){let b=Math.max(...g.map(b=>j(a,b))),c=f?k(a,f):0,d=Math.max(...h.map(b=>l(a,b)));b>=.6&&b>c&&b>d&&m.add(a)}return c.filter(a=>!m.has(a))}async function s(a,b){return Promise.all(a.map(async a=>({...a,sections:await r({sections:a.sections||[],chapterTitle:a.title,chapterPurpose:a.purpose,embedDocuments:b})})))}},85016:(a,b,c)=>{c.d(b,{D$:()=>f,NR:()=>k,WT:()=>j});var d=c(37047);let e=[{anchor:"按工作包逐项说明施工内容",required:/工作包|逐项说明/u},{anchor:"本项目已确认资料",required:/已确认|确认资料|本项目资料/u},{anchor:"已确认的项目资料显示",required:/已确认|项目资料/u},{anchor:"根据已确认资料",required:/已确认/u},{anchor:"生成后事实反查未通过",required:/事实反查|反查/u},{anchor:"资料事实主表",required:/事实主表/u},{anchor:"事实卡",required:/事实卡/u},{anchor:"后台数据库记录",required:/后台数据库|后台记录/u},{anchor:"证据摘要中未包含",required:/证据摘要/u},{anchor:"本专业工程主要清单项落位如下",required:/清单项落位|落位如下/u},{anchor:"针对招标文件及补疑文件的技术要求进行专项落位",required:/专项落位/u},{anchor:"全文数据口径必须唯一",required:/数据口径|峰值口径|控制口径|口径必须唯一/u}],f=/工作包|事实卡|事实主表|后台数据库|落位|峰值口径|控制口径|数据口径/gu,g=/工作包|事实卡|事实主表|后台数据库|落位|峰值口径|控制口径|数据口径/u,h=/^\d+(?:\.\d+)*\s+\S+/u;function i(a,b){let c=Math.min(a.length,b.length),d=0;for(let e=0;e<c;e+=1)d+=a[e]*b[e];return d}async function j(a){let b=[],c=[...new Set(a.match(f)||[])];c.length>0&&b.push({level:"error",severity:"blocker",category:"format",owner:"system",repairability:"llm_repairable",message:`正式正文仍包含后台内部术语“${c.join("”“")}”,需要按上下文语义改写为正式术语`,suggestion:"请结合语境改写:“拆除工程工作包”→“拆除工程”,“按工作包逐项说明”→“按专业工程逐项说明”;禁止出现生成系统后台概念。"});let g=a.split(/\r?\n/u).map(a=>a.trim()).filter(a=>!/^#{1,6}\s/u.test(a)&&!/^\s*\|/u.test(a)&&!(h.test(a)&&a.length<=40&&!/[。!?!?;;,,::]/.test(a))).flatMap(a=>a.split(/(?<=[。!?!?;;])/u).map(a=>a.trim())).filter(a=>a.length>=8&&a.length<=80).slice(0,200);if(0===g.length)return b;let j=(0,d.VN)(),[k,l]=await Promise.all([j.embedDocuments(g),j.embedDocuments(e.map(a=>a.anchor))]),m=[];for(let a=0;a<g.length;a+=1){let b=k[a];if(!b||0===b.length)continue;let c=g[a];if(e.some(a=>a.required.test(c))&&(Math.max(...l.map(a=>i(b,a)))>=.62&&m.push(c.slice(0,24)),m.length>=6))break}return m.length>0&&b.push({level:"error",severity:"blocker",category:"format",owner:"system",repairability:"llm_repairable",message:`正式正文疑似包含后台内部话术(语义锚点命中 ${m.length} 处):${m.map(a=>`“${a}…”`).join("、")}`,suggestion:"将内部话术(已确认资料/事实卡/工作包等生成系统概念)改写为面向评标人的正式表述,仅陈述项目事实与施工内容。"}),b}async function k(a){let b=a.split(/\r?\n/u),c=a=>{let b=a.trim();return!!(/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b))||h.test(b)&&b.length<=40&&!/[。!?!?;;,,::]/.test(b)},f=[];b.forEach((a,b)=>{if(c(a))return;let d=a.split(/(?<=[。!?!?;;])/u).map(a=>a.trim()).filter(a=>a.length>=8&&a.length<=80&&(e.some(b=>b.required.test(a))||g.test(a)));d.length>0&&f.push({index:b,sentences:d})});let j=f.flatMap(a=>a.sentences).slice(0,200);if(0===j.length)return a;let k=(0,d.VN)(),[l,m]=await Promise.all([k.embedDocuments(j),k.embedDocuments(e.map(a=>a.anchor))]),n=new Set;return(j.forEach((a,b)=>{let c=l[b];if(c&&0!==c.length){if(g.test(a))return void n.add(a);Math.max(...m.map(a=>i(c,a)))>=.62&&n.add(a)}}),0===n.size)?a:b.map((a,b)=>{if(c(a))return a;let d=a;for(let a of n)d.includes(a)&&(d=d.split(a).join(""));return d}).join("\n")}}};
|