@customize-agent/server 4.5.7 → 4.5.9
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 +30 -30
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/208.js +1 -1
- package/.next/server/chunks/2484.js +1 -1
- package/.next/server/chunks/4680.js +1 -1
- package/.next/server/chunks/5284.js +28 -26
- package/.next/server/chunks/8249.js +98 -0
- 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/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 +1 -1
- 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/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 +28 -28
- package/.next/static/chunks/{102-c30525f2bc55b982.js → 102-881dcc464f983c89.js} +1 -1
- package/.next/static/chunks/{224-f3bc91d393e276fe.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/{564-0737855bb98043ab.js → 564-30bfcb28e1d2c309.js} +1 -1
- package/.next/static/chunks/788-dca0d550ad6bd8b2.js +1 -0
- package/.next/static/chunks/{986-6746aa3d91e37eff.js → 986-771dc425e7b25964.js} +2 -2
- package/.next/static/chunks/{994-03bf46b933328a98.js → 994-241f87efc61005b8.js} +1 -1
- package/.next/static/chunks/pages/documents-9deacb6df546eb6d.js +1 -0
- package/.next/static/chunks/pages/knowledge/files-45b40149a6f4a9d5.js +1 -0
- package/.next/static/chunks/pages/knowledge/manage-5b1b4d3804752f8b.js +1 -0
- package/.next/static/chunks/pages/knowledge-905248d8dcb15453.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/.next/static/ipOny2MPgzDrUtbvrqMUp/_buildManifest.js +1 -0
- package/package.json +1 -1
- package/.next/server/chunks/9319.js +0 -97
- package/.next/static/1n-xjuFIrkLPgyVXG33Tj/_buildManifest.js +0 -1
- package/.next/static/chunks/260-244c94eacd903620.js +0 -1
- package/.next/static/chunks/788-e98701da4d6ca319.js +0 -1
- package/.next/static/chunks/pages/documents-e234c57475afcd03.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/knowledge-3a68c7c49f88ca3f.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/{1n-xjuFIrkLPgyVXG33Tj → ipOny2MPgzDrUtbvrqMUp}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";exports.id=8249,exports.ids=[8249,9227],exports.modules={38249:(a,b,c)=>{c.d(b,{h0x:()=>d.h0,bVF:()=>d.bV,OXS:()=>cE,QJx:()=>d.QJ,jGg:()=>d.jG,R1O:()=>cD,Bhi:()=>d.Bh,xmB:()=>d.xm,J5_:()=>d.J5});var d=c(23500),e=c(76760),f=c(19898),g=c(44533),h=c(29281),i=c(25840),j=c(6444),k=c(85441);let l={id:"default_general_document",name:"通用文档",factFields:[{id:"document_identity",name:"对象名称",aliases:["项目名称","工程名称","文档名称","任务名称","招标项目名称","建设项目名称"],category:"identity",cardinality:"single",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.75,minForValidation:.85,allowPathOnly:!1},conflictPolicy:"strict"},{id:"schedule_requirement",name:"周期要求",aliases:["计划工期","工期","周期要求","进度节点要求","开工日期","竣工日期"],category:"schedule",cardinality:"single",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.7,minForValidation:.8,allowPathOnly:!1},conflictPolicy:"strict"},{id:"quality_requirement",name:"质量要求",aliases:["质量要求","质量标准","验收要求","评价标准"],category:"quality",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.65,minForValidation:.75,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"safety_requirement",name:"安全合规要求",aliases:["安全要求","安全合规要求","风险控制要求","合规要求"],category:"safety",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.65,minForValidation:.75,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"technical_parameter",name:"技术参数",aliases:["技术参数","参数规格范围","规格","型号","尺寸","标准编号","材料设备"],category:"technical",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.7,minForValidation:.8,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"resource_plan",name:"资源配置",aliases:["劳动力","机械","检测设备","应急物资","资源配置","人员配置"],category:"resource",cardinality:"multiple",derivationPolicy:"plan_inferable",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.45,minForValidation:.55,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"commercial_data",name:"商务数据",aliases:["报价","单价","合价","综合单价","预留金","税率","金额","利润"],category:"commercial",cardinality:"multiple",derivationPolicy:"forbidden",usagePolicy:"do_not_use",confidencePolicy:{minForGeneration:1,minForValidation:1,allowPathOnly:!1},conflictPolicy:"ignore"},{id:"rule_requirement",name:"规则要求",aliases:["规则要求","变更说明","实施范围","对象范围","结构化数据范围"],category:"compliance",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.6,minForValidation:.7,allowPathOnly:!1},conflictPolicy:"allow_multiple"}],forbiddenValuePatterns:[/投标报价|报价明细|单价|合价|综合单价|预留金|暂列金额|税率|增值税|利润|结算/u],diagnosticValuePatterns:[/OCR|识别错误|乱码|无法确认|疑似|不确定|绑定片段|兜底|知识库|提示词|后台|文件路径|PDF|DWG|Excel/u,/^#+\s*/u,/^见(?:招标|投标人|前附|补疑|图纸|清单|文件|资料|公告|须知)/u],lowConfidenceValuePatterns:[/无法确认|疑似|不确定|需复核|文字模糊|语义断裂|识别错误|乱码/u]},m={...l,id:"construction_organization_design",name:"施工组织设计"};function n(a,b){return a.factFields.find(a=>a.name===b||a.aliases.some(a=>b.includes(a)||a.includes(b)))}function o(a,b){return a.forbiddenValuePatterns.some(a=>a.test(b))}function p(a,b){return a.diagnosticValuePatterns.some(a=>a.test(b))}function q(a,b){return a.lowConfidenceValuePatterns.some(a=>a.test(b))}var r=c(56942),s=c(70933),t=c(70208),u=c(91977),v=c(61373),w=c(78217),x=c(23760),y=c(40693),z=c(22157),A=c(51144);function B(a){let b=["project"];return/概况|工程|项目|部署|总体|施工|方案|资源/u.test(a)&&b.push("scope"),/进度|工期|部署|资源/u.test(a)&&b.push("schedule"),/质量|验收|材料/u.test(a)&&b.push("quality"),/安全|文明|风险|危大/u.test(a)&&b.push("safety"),/资源|材料|设备|劳动力|进度/u.test(a)&&b.push("resources"),/施工|工艺|技术|方案|清单|工程量/u.test(a)&&b.push("quantities"),[...new Set(b)]}function C(a,b){let c=B(a.title),d=c.filter(a=>"project"===a||"scope"===a?b.project.length>0||b.drawings.length>0:"schedule"===a?b.schedule.length>0:"quality"===a?b.quality.length>0||b.specifications.length>0:"safety"===a?b.safety.length>0||b.rules.length>0:"resources"===a?b.resources.length>0||b.bills.length>0:"quantities"===a&&(b.bills.length>0||b.drawings.length>0)),e=c.filter(a=>!d.includes(a)),f=c.length?d.length/c.length:1,g=f>=.75?"strong":f>=.4?"medium":"weak";return{level:g,mode:"strong"===g?"project-specific":"medium"===g?"standard-based":"restricted-general",supported:d,missing:e}}function D(a){return/概况|工程|项目/u.test(a)?["工程基础信息必须与资料一致","突出招标范围、建设地点、规模、工期、质量目标","说明施工组织编制边界"]:/部署|总体|组织/u.test(a)?["明确施工组织逻辑、专业接口和施工段划分","说明资源、进度、质量、安全之间的统筹关系","形成可执行的管理闭环"]:/进度|工期/u.test(a)?["围绕总工期和关键线路组织","说明资源保障、穿插施工、纠偏机制","不得编造系统暂未从知识库确认的日期节点"]:/质量/u.test(a)?["覆盖材料进场验收、复验、过程检查、隐蔽验收和资料归档","把资料中的质量标准落入控制点","明确整改复验闭环"]:/安全|文明|风险|危大/u.test(a)?["识别作业风险和现场管理边界","覆盖人员、设备、临电、消防、文明施工措施","明确检查整改和应急响应"]:/资源|材料|设备|劳动力/u.test(a)?["依据工程范围和进度组织资源配置","说明材料设备进场、验收、保管和调配","资源安排必须支撑工期和质量目标"]:/施工|工艺|技术|方案/u.test(a)?["明确施工准备、工艺流程、关键参数和验收要求","关联图纸、清单、说明资料中的对象和边界","突出重点难点和过程控制"]:["结合资料事实说明对象范围、实施方法、控制要点和验收闭环","避免泛化表述,必须体现本项目特征"]}function E(a){return[`章节任务卡:${a.title}`,` - 必须覆盖事实域:${B(a.title).join("、")}`,...D(a.title).map(a=>` - ${a}`),...(a.sections||[]).slice(0,10).map(a=>` - 小节任务:${a}|${D(a).join(";")}`),...function(a){let b=a.tablePlans||[];return 0===b.length?[]:[" - 本章必须按项目图谱生成以下表格/清单:",...b.map(a=>` * ${a.required?"必写":"按需"}《${a.title}》:字段=${a.fields.map(a=>a.name).join("、")};来源域=${a.sourceDomains.join("、")};${a.reason}`)]}(a),...(0,y.c8)(a)].join("\n")}function F(a){let b=[...a.factsModel.project,...a.factsModel.schedule,...a.factsModel.quality,...a.factsModel.safety,...a.factsModel.resources,...a.factsModel.preciseFacts].filter((a,b,c)=>{let d=(0,z.lG)(a.value).replace(/\s+/gu," ").trim();return d.length>0&&c.findIndex(b=>`${b.key}:${(0,z.lG)(b.value).replace(/\s+/gu," ").trim()}`==`${a.key}:${d}`)===b}),c=(0,A.Cr)(b,a=>(0,A.rF)(a),{maxItems:48,maxChars:18e3},"coreFacts"),d=c.selected,f=c.dropped.length>0?[`⚠️ 因 LLM 上下文预算限制,${c.dropped.length} 个低优先级事实未纳入蓝图;完整事实主表可在生成后的事实覆盖报告查看。`]:[],g=function(a){let b=`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`;return/专项施工|危大|专项方案/u.test(b)?{type:"专项施工方案",focus:["专项对象边界","工艺参数","风险控制","验收要求","应急措施"]}:/投标|技术标|响应|招标/u.test(b)?{type:"投标技术方案",focus:["招标响应","技术优势","工期质量安全承诺","资源保障","履约可实施性"]}:/监理|旁站|巡视|平行检验/u.test(b)?{type:"监理规划/细则",focus:["监理目标","旁站巡视","平行检验","验收程序","资料签认"]}:/可研|可行性|项目建议书|投资估算/u.test(b)?{type:"可研/项目建议类文档",focus:["建设必要性","方案比选","投资估算","风险分析","实施效益"]}:/运维|维护|保养|巡检/u.test(b)?{type:"运维维护方案",focus:["巡检频次","维护流程","故障响应","备品备件","记录闭环"]}:{type:"施工组织设计/施工技术方案",focus:["工程概况","施工部署","进度质量安全","资源配置","施工工艺和验收闭环"]}}(a),h=d.map((a,b)=>`${b+1}. ${a.fieldName||a.key||"资料事实"}|${(0,z.lG)(a.value).replace(/\s+/gu," ").slice(0,90)}|来源:${a.sourceFile?e.basename(a.sourceFile):"结构化事实主表"}`),i=function(a){let b={project:"项目基础事实",scope:"招标范围/施工边界",schedule:"工期与节点",quality:"质量目标与验收",safety:"安全文明要求",resources:"资源投入依据",quantities:"清单/图纸/工程量事实"};return a.map((a,c)=>`${c+1}. ${a.title}:${B(a.title).map(a=>b[a]||a).join("、")}`)}(a.chapters),j=a.chapters.map((b,c)=>{let d=C(b,a.factsModel);return`${c+1}. ${b.title}:${d.level}/${d.mode};缺失 ${d.missing.join("、")||"无"}`}),k=a.chapters.map(E),l=a.chapters.map(b=>(function(a,b){let c=C(a,b);return`章节实施方案:${a.title}
|
|
2
|
+
- 写作模式:${c.mode};资料支撑度:${c.level}
|
|
3
|
+
- 已支撑事实域:${c.supported.join("、")||"暂无"}
|
|
4
|
+
- 系统暂未确认事实域:${c.missing.join("、")||"无"}
|
|
5
|
+
- 章节目标:${D(a.title).join(";")}
|
|
6
|
+
- 组织顺序:${(a.sections||[]).slice(0,10).join(" → ")||"按模板章节目标展开"}
|
|
7
|
+
- 禁止内容:系统暂未从知识库确认的项目特有数字、日期、金额、工程量或材料规格不得编造;应触发扩大检索、事实补抽或事实落位修复。`})(b,a.factsModel)),m=(0,y.FI)({templateName:a.template.name,outputTitle:a.template.outputTitle,requirement:a.requirement,chapters:a.chapters});return["【全局文档蓝图与一致性约束】",`文档类型画像:${g.type};评分重点:${g.focus.join("、")}`,`文档目标:${a.template.outputTitle||a.template.name}`,a.requirement?`用户目标:${a.requirement}`:"",d.length?`可信基础事实主表:
|
|
8
|
+
${d.map(a=>`- ${function(a){let b=a.fieldName||a.key||"资料事实",c=(0,z.lG)(a.value).replace(/\s+/gu," ").trim();return`${b}:${c}${a.sourceFile?`(来源:${e.basename(a.sourceFile)})`:""}`}(a)}`).join("\n")}`:"可信基础事实主表:系统当前结构化事实确认不足,应扩大本地知识库检索、补抽事实并修复事实落位;正文只能使用已确认事实,不得编造参数。",h.length?`关键事实证据追踪清单:
|
|
9
|
+
${h.join("\n")}`:"",`事实覆盖矩阵:
|
|
10
|
+
${i.join("\n")}`,`知识库确认覆盖矩阵:
|
|
11
|
+
${j.join("\n")}`,m,"证据引用约束:工期、质量目标、招标范围、金额、工程量、验收要求等项目专属事实必须来自可信基础事实主表或绑定材料,系统暂未确认的数字和参数不得编造;标准规范编号、法律法规名称属于公共专业知识,可依据现行有效版本直接引用,不要求材料提供,但不得虚构编号或引用已废止版本。","跨章一致性要求:所有章节必须共用同一套工期、质量、范围、资源和验收口径;不得在不同章节写出相互矛盾的项目基础信息。",...a.scopeConflicts?.length?[`【源级口径冲突裁决(最高优先级约束)】资料文件中存在同口径数值冲突,必须按下述裁决执行:
|
|
12
|
+
${a.scopeConflicts.map(a=>{let b=a.values.map(a=>`${a.value}${a.unit}(来源:${a.sourceFile?e.basename(a.sourceFile):"未知"})`).join("、"),c=a.resolution?`裁决口径:${a.resolution}(按资料来源优先级裁决)。全文必须统一使用该数值,禁止出现其他取值或换算后不等价的表述。`:`多个来源优先级相同且取值不一致,无法自动裁决:请以澄清/补疑类文件为准;若仍无法确定,在正文中只采用其中一处取值并在概况中注明,其余章节保持一致,禁止混写。`;return`- ${a.scope}:${b}。${c}`}).join("\n")}`]:[],...a.referenceLines?.length?[`同类工程质量参考(软性参考,事实仍以知识库证据为准):
|
|
13
|
+
${a.referenceLines.join("\n")}`]:[],`章节专业任务卡:
|
|
14
|
+
${k.join("\n")}`,`章节实施方案:
|
|
15
|
+
${l.join("\n")}`,...f].filter(Boolean).join("\n")}var G=c(35882);let H=[{id:"overview",title:"工程概况与总体理解",requiredSectionPatterns:[/编制依据|编制说明/u,/工程概况|项目概况|基本概况/u,/现场踏勘|施工条件|现场条件/u],chapterPatterns:[/概况|总体|理解|说明|编制|项目/u],remedy:"应设置工程概况章节,包含编制依据、工程基本概况、现场条件与总体理解。",level:"required"},{id:"major-content",title:"项目主要施工内容",requiredSectionPatterns:[/主要施工内容|主要施工项目|施工内容/u],chapterPatterns:[/概况|总体|理解|主要施工|工程/u],remedy:'必须包含"项目主要施工内容"小节,按工作包展开施工概况、施工流程、施工方法。',level:"required"},{id:"key-difficulty",title:"重难点分析与对策",requiredSectionPatterns:[/重点.*难点|难点.*对策|重难点/u],chapterPatterns:[/概况|总体|理解|重点|难点|施工/u],remedy:"应设置项目特点、重点、难点分析小节,并逐项给出应对措施与责任闭环。",level:"required"},{id:"deployment",title:"施工部署与施工组织",requiredSectionPatterns:[/施工部署|总体部署|流水|施工顺序|施工区段/u],chapterPatterns:[/部署|组织|总体|方案/u],remedy:"应设置施工部署小节,明确流水段划分、施工顺序与资源调配。",level:"required"},{id:"schedule",title:"进度计划与工期保障",requiredSectionPatterns:[/进度计划|工期|节点/u],chapterPatterns:[/进度|工期|计划|保障/u],remedy:"应设置进度计划与工期保障小节,含总进度计划、关键节点与纠偏措施。",level:"required"},{id:"quality",title:"质量保证体系与措施",requiredSectionPatterns:[/质量/u],chapterPatterns:[/质量|验收|保障|措施/u],remedy:"应设置质量保证体系与措施小节,含质量目标、三检、隐蔽验收、通病防治。",level:"required"},{id:"safety",title:"安全文明施工与危大工程管控",requiredSectionPatterns:[/安全/u,/危大/u],chapterPatterns:[/安全|文明|风险|危大|保障|措施/u],remedy:"应设置安全管理与危大工程管控小节,含危险源辨识、危大清单、专项方案。",level:"required"},{id:"resources",title:"劳动力材料机械设备配置",requiredSectionPatterns:[/劳动力|机械设备|材料.*计划|资源配置|人材机/u],chapterPatterns:[/资源|劳动力|机械|材料|设备|计划/u],remedy:"应设置资源配置小节,含分阶段劳动力、机械设备投入与材料进场计划。",level:"required"},{id:"environment",title:"绿色文明施工与环保措施",requiredSectionPatterns:[/文明施工|扬尘|噪声|绿色|环保|四节/u],chapterPatterns:[/文明|绿色|环保|扬尘|噪声|保障|措施/u],remedy:"应设置文明施工与绿色施工小节,含扬尘噪声管控与四节一环保措施。",level:"required"},{id:"emergency",title:"应急管理体系",requiredSectionPatterns:[/应急/u],chapterPatterns:[/应急|安全|保障|措施/u],remedy:"应设置应急管理小节,含应急组织、物资储备与专项预案。",level:"recommended"}],I={building:[{id:"key-difficulty",title:"危大工程专项管控(房建)",requiredSectionPatterns:[/深基坑|高支模|起重吊装|脚手架/u],chapterPatterns:[/危大|安全|专项/u],remedy:"房建项目应对深基坑、高支模、起重吊装、脚手架等危大工程逐项给出专项方案与安全管理措施。",level:"recommended"}],municipal:[{id:"key-difficulty",title:"交通导改与管线保护(市政)",requiredSectionPatterns:[/交通导改|交通导行|占道施工/u,/管线保护|管线探测/u],chapterPatterns:[/交通|管线|安全|专项|保障/u],remedy:"市政项目应设置交通导改与既有管线保护专项内容。",level:"recommended"}],renovation:[{id:"key-difficulty",title:"居民协调与既有保护(改造)",requiredSectionPatterns:[/居民|扰民|既有.*保护|不中断/u],chapterPatterns:[/居民|协调|保护|保障|专项/u],remedy:"改造项目应设置居民沟通协调与既有设施保护专项内容。",level:"recommended"}],decoration:[{id:"key-difficulty",title:"成品保护与交叉施工(装饰)",requiredSectionPatterns:[/成品保护/u,/交叉施工|工序穿插/u],chapterPatterns:[/成品保护|交叉|协调|保障|专项/u],remedy:"装饰项目应设置成品保护与交叉施工工序优化专项内容。",level:"recommended"}]};function J(a){return(0,t.GQ)(a).replace(/\s+/gu,"").toLowerCase()}let K=new Set(["针对","确保","对于","关于","以及","工程","项目","施工","组织","设计","的应","应用","体系","措施","管理","保障","与措","和措","具体","内容","要求","整体性"]);function L(a){var b;let c,d=(b=a.chapters,[...H].map(a=>{let c=[],d=new Set;for(let e of b){let b=J(`${e.title} ${(e.sections||[]).join(" ")}`);for(let f of a.requiredSectionPatterns)f.test(b)&&!d.has(f)&&(d.add(f),c.push(e.title))}let e=[...new Set(c)],f=a.requiredSectionPatterns.filter(a=>!d.has(a)).map(a=>a.source.replace(/[\\/^$.*+?()[\]{}|]/gu,"").replace(/u$/u,"")),g=d.size===a.requiredSectionPatterns.length?e.length>1?"fragmented":"satisfied":"missing";return{groupId:a.id,groupTitle:a.title,level:a.level,status:g,carrierChapters:e,missingSections:f,remedy:a.remedy}})),e=[],f=d.filter(a=>"required"===a.level&&"missing"===a.status);for(let a of f)e.push({level:"error",severity:"blocker",message:`评标结构缺失:${a.groupTitle}(缺少:${a.missingSections.join("、")})`,suggestion:a.remedy});for(let a of d.filter(a=>"fragmented"===a.status))e.push({level:"warning",severity:"warning",message:`${a.groupTitle} 小节散落在 ${a.carrierChapters.length} 个章节(${a.carrierChapters.join("、")}),结构可能失真`,suggestion:"建议将同类内容集中到一个承载章节,避免章节间职责重叠。"});for(let b of a.chapters){let a=(b.sections||[]).length;a>18&&e.push({level:"warning",severity:"warning",message:`${b.title} 规划小节 ${a} 个,超过 18 个上限,易产生内容膨胀与重复`,suggestion:"合并语义相近的小节,或将细分内容下移为三级小节而非二级小节。"})}let g=a.chapters.map(a=>({...a,sections:[...a.sections||[]]})),h=new Set;for(let a of f){let b=H.find(b=>b.id===a.groupId);if(!b)continue;let c=g.findIndex(a=>{let c=J(a.title);return b.chapterPatterns.some(a=>a.test(c))&&!/雨季|冬季|高温|防汛|扬尘|噪声|工资|劳务|实名|应急|BIM|智慧|管线/u.test(c)}),d=g[c>=0?c:0];for(let b of a.missingSections.filter(a=>!h.has(a)))h.add(b),d.sections.some(a=>J(a).includes(J(b))||J(b).includes(J(a)))||d.sections.push(b)}if(a.evaluationTexts?.length)for(let{item:b,features:d}of(c=function(a,b){let c=[];for(let d of b){let b=function(a){let b=J(a),c=[];for(let a=0;a<b.length-1;a+=1){let d=b.slice(a,a+2);!K.has(d)&&(/[,、,()()0-9a-z]/u.test(d)||c.push(d))}return[...new Set(c)]}(d);0!==b.length&&(a.some(a=>(function(a,b){if(0===b.length)return!1;let c=J(`${a.title} ${(a.sections||[]).join(" ")}`);return b.filter(a=>c.includes(a)).length/b.length>=.4})(a,b))||c.push({item:d,features:b}))}return{items:b,uncovered:c}}(g,function(a){let b=a.join("\n"),c=new Set;for(let a of b.matchAll(/(\d{1,2})\s*[.、.]\s*([^;。\n]{4,60})/gu)){let b=a[2].trim().replace(/[“”"'"]/gu,"");!(!/[\u4e00-\u9fa5]{4}/u.test(b)||/AI|大模型|评审|评分|分值|分项|子项|满分|得分|投标人须|详见|招标文件/u.test(b))&&(/公共资源|电子交易|加密|投标|开标|评标委员会/u.test(b)||c.add(b))}return[...c]}(a.evaluationTexts))).uncovered){let a=function(a){let b=a.replace(/^针对/u,"").replace(/^确保/u,"").replace(/的保障体系与措施$/u,"").replace(/的管理体系与措施$/u,"").replace(/保障体系与措施$/u,"").replace(/管理体系与措施$/u,"").replace(/[,、;,;]+$/u,"").trim();return!/[\u4e00-\u9fa5]{4}/u.test(b)||/工期与质量/u.test(b)?"":b.length>24?b.slice(0,24):b}(b);if(!a)continue;let c=g.reduce((a,b,c)=>{let e=J(`${b.title} ${(b.sections||[]).join(" ")}`),f=d.filter(a=>e.includes(a)).length;return f>(a.index>=0?d.filter(b=>J(`${g[a.index].title} ${(g[a.index].sections||[]).join(" ")}`).includes(b)).length:-1)?{index:c,score:f}:a},{index:-1,score:-1}),f=g[c.index>=0?c.index:0];f.sections.some(b=>J(b).includes(J(a))||J(a).includes(J(b)))||(f.sections.push(a),f.purpose=`${f.purpose||""};系统已按招标文件技术评审条目自动补足小节“${a}”,必须基于项目资料与适用技术展开实质内容。`,e.push({level:"warning",severity:"warning",message:`评分标准条目“${b}”无承接章节,已自动补小节“${a}”至“${f.title}”`,suggestion:"请确认补充小节与招标文件评审条目口径一致。"}))}for(let b of(0,G.yt)(a))if("general"!==b)for(let a of I[b]){let b=J(g.map(a=>`${a.title} ${(a.sections||[]).join(" ")}`).join(" "));if(a.requiredSectionPatterns.some(a=>a.test(b)))continue;let c=g.findIndex(b=>{let c=J(b.title);return a.chapterPatterns.some(a=>a.test(c))});g[c>=0?c:0].sections.push(a.title)}return{diagnostics:d,issues:e,enrichedChapters:g,criteriaAudit:c}}let M=[{pattern:/概况|总体|理解|说明|编制/u,goal:"以项目资料已确认的事实卡片展开工程概况与总体理解,不得空泛概述",mustCover:["工程名称、建设地点、建设规模、计划工期、质量标准等资料已确认事实","现场条件与招标范围边界","编制依据与适用范围"]},{pattern:/主要施工内容/u,goal:"按工作包展开施工概况、施工流程、施工方法三段式卡片,落到工程量与工艺参数",mustCover:["资料识别的工作包(不少于5个)","每个工作包的施工概况/施工流程/施工方法","工程量、材料设备规格、检测验收与资料闭环"]},{pattern:/主要分部分项工程施工方案|主要施工方法/u,goal:"按分项工程方案展开施工概况、工艺流程、施工方法三段式,落到工艺参数与工序链",mustCover:["资料明确的专业工程范围(逐项展开分项工程方案)","每个分项方案的施工概况/工艺流程/施工方法","每个分项方案不少于4个工艺参数与至少1条4环节箭头工序链","工艺参数来自绑定材料或行业通用规范值,不得编造"]},{pattern:/重点|难点/u,goal:"识别项目重点难点并给出针对性对策,每项落到责任岗位与验收节点",mustCover:["重点难点成因与影响范围","对应施工内容与专项措施","责任岗位、检查频次、整改闭环"]},{pattern:/部署|总体|流水|顺序/u,goal:"明确施工部署逻辑、流水段划分与资源调配机制",mustCover:["施工区段与流水划分","各阶段施工顺序与穿插关系","资源动态调配机制"]},{pattern:/进度|工期/u,goal:"围绕总工期与关键节点展开进度保障",mustCover:["总进度计划与关键节点","周/日计划分解","进度偏差识别与纠偏措施"]},{pattern:/质量/u,goal:"覆盖材料验收、过程控制、隐蔽验收、整改复验的质量闭环",mustCover:["质量目标与验收依据","三检制度与样板引路","隐蔽工程验收与材料复试","质量通病防治与闭环整改","保修与缺陷责任期承诺"]},{pattern:/安全|危大|风险/u,goal:"覆盖风险识别、危大工程专项方案、检查整改与应急响应",mustCover:["危险源辨识与风险分级","危大工程清单与专项方案","安全交底与隐患排查闭环"]},{pattern:/资源|材料|设备|劳动力|人材机/u,goal:"说明资源配置依据、进场验收与保管调配",mustCover:["机械设备投入计划","分阶段劳动力计划","材料进场计划与验收"]},{pattern:/文明|绿色|环保|扬尘|噪声/u,goal:"覆盖扬尘噪声管控、四节一环保与智慧监测",mustCover:["扬尘噪声分时段管控","四节一环保措施","监测预警与台账"]},{pattern:/应急|预案/u,goal:"覆盖应急组织、物资储备与专项预案",mustCover:["应急组织架构","应急物资储备","专项预案与演练计划"]},{pattern:/竣工|验收|移交|保修/u,goal:"覆盖竣工清理、验收移交与保修响应",mustCover:["竣工清理与垃圾外运","缺陷修补与复查销项","验收移交与保修响应"]},{pattern:/工资|劳务|实名/u,goal:"覆盖劳务实名制与农民工工资保障闭环",mustCover:["劳务实名制管理","工资专用账户与银行代发","考勤与工资支付台账"]}];var N=c(8667);async function O(a){(0,z.Te)(a.signal);let b=[];if(0===a.scopedFilePaths.length)return b;let c=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.chapter.title),d=(c?1.6:1)*(/[、,,与和及]/.test(a.chapter.title)?1.4:1),e=Math.ceil((a.highRisk?18:10)*d),f=Math.ceil((a.highRisk?24:14)*(c?1.4:1)),g=Math.ceil((a.highRisk?72:42)*d),h=Math.ceil((a.highRisk?72e3:42e3)*d),i=(a.requiredNeeds||[]).slice(0,8),j=(function(a,b=[]){let c=a.sections||[],d=[...a.requiredFacts,...b],e=(0,A.Cr)(c,a=>(0,A.Ox)(a),{maxItems:16,maxChars:1200},"retrieval-sections").selected,f=(0,A.Cr)(d,a=>(0,A.Ox)(a),{maxItems:16,maxChars:1200},"retrieval-facts").selected,g=/[、,,与和及]/.test(a.title),h=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.title),i=/进度|工期|节点/u.test(a.title)?["合同工期","计划工期","日历天","开工","竣工","关键线路","进度计划","施工进度"]:/质量|验收/u.test(a.title)?["质量标准","验收规范","检验批","复验","合格","质量保证","隐蔽验收"]:/安全|危大|风险/u.test(a.title)?["安全措施","风险源","危大工程","应急","检查整改","安全防护","应急预案"]:h?["工程量清单","项目特征","材料设备","规格型号","数量单位","劳动力","机械设备","进场计划","资源保障","主要材料","施工机具","材料供应","设备配置"]:/施工|方案|方法|技术|工艺/u.test(a.title)?["施工方法","工艺流程","技术标准","构造做法","控制要点","施工准备"]:["工程范围","施工方法","控制要点","验收要求"],j=g?[...i,...a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4)]:i,k=[...new Set([a.title,...e,...f,...j].flatMap(a=>a.split(/[\s、,,。;;::()()《》【】\-/]+/u)).map(a=>a.trim()).filter(a=>a.length>=2))],l=(0,A.Cr)(k,a=>(0,A.Ox)(a),{maxItems:36,maxChars:1200},"retrieval-tokens").selected,m=g?a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4).map(a=>`${a} ${e.slice(0,6).join(" ")} ${f.slice(0,4).join(" ")}`.trim()):[];return[...new Set([`${a.title} ${e.join(" ")}`.trim(),...f.map(b=>`${a.title} ${b}`.trim()),...e.map(b=>`${a.title} ${b} ${f.slice(0,6).join(" ")}`.trim()),`${a.title} ${j.join(" ")}`.trim(),...m,l.join(" ")].filter(Boolean))]})(a.chapter,a.requiredNeeds).slice(0,e),k=[...i.map(b=>`${a.chapter.title} ${b} ${(a.chapter.sections||[]).join(" ")}`.trim()).filter(a=>!j.includes(a)).map(a=>({text:a,boost:2,source:"required-fact-evidence"})),...j.map(a=>({text:a,boost:2.4,source:"deep-retrieval"}))];return b.push(...(await (0,z.l$)(k,async b=>{var c;(0,z.Te)(a.signal);let d=await a.manager.search(a.projectRoot,b.text,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:f,weights:{keyword:.62,vector:.32,rewrite:.9,hybridBonus:.28},generationMode:!1});return(c={chapter:a.chapter,results:d.results.filter(b=>a.scopedFilePaths.includes(b.filePath)),fileRoleByPath:a.fileRoleByPath,fileProcessingByPath:a.fileProcessingByPath,boost:b.boost,source:b.source}).results.map(a=>{let b=c.fileProcessingByPath.get(a.filePath);return{chapterId:c.chapter.id,filePath:a.filePath,score:a.score+c.boost+("table"===b?3:"structured_data"===b?2.6:3.2*("bill_of_quantities"===b)),content:a.content,roleId:c.fileRoleByPath.get(a.filePath),processingType:b,sectionTitle:a.sectionTitle,source:c.source}})},{kind:"deepRetrieval",highRisk:a.highRisk})).flat()),[...(0,s.QR)(b.filter(a=>"required-fact-evidence"===a.source),{maxItems:Math.max(6,3*i.length),maxChars:18e3,preservePinned:!0}),...(0,s.QR)(b.filter(a=>"required-fact-evidence"!==a.source),{maxItems:g,maxChars:h,preservePinned:!0})]}var P=c(73024),Q=c(15751),R=c(11248),S=c(95734),T=c(18274);function U(a){let b=[],c=new Set;for(let d of a.filter(a=>"table"===a.processingType||"structured_data"===a.processingType||"bill_of_quantities"===a.processingType)){if(c.has(d.filePath))continue;c.add(d.filePath);let a=(0,g.aY)(),f=(0,g.NW)(a),h=e.isAbsolute(d.filePath)?d.filePath:P.existsSync(e.join(f,d.filePath))?e.join(f,d.filePath):e.join(a,d.filePath),i=e.extname(d.filePath).toLowerCase();if(P.existsSync(h)&&[".xlsx",".xls",".csv"].includes(i))try{let a=Q.readFile(h,{cellDates:!0,sheetStubs:!1});for(let c of a.SheetNames){let e=a.Sheets[c],f=Q.utils.sheet_to_json(e,{header:1,raw:!1,defval:""}).map(a=>a.map(a=>String(a).trim())).filter(a=>a.some(Boolean));if(f.length<2)continue;let g=f.findIndex(a=>a.filter(Boolean).length>=2);if(g<0)continue;let h=f[g].filter(Boolean),i=f.slice(g+1).map(a=>a.slice(0,h.length)).filter(a=>a.some(Boolean));0!==i.length&&b.push({tableType:d.roleId||"table",sheet:c,headers:h,rows:i,sourceFile:d.filePath,sourceRange:e["!ref"]})}continue}catch{}let j=d.content.split("\n").map(a=>a.trim()).filter(Boolean).filter(a=>a.includes("|")||a.includes(" ")||a.includes(","));if(j.length<2)continue;let k=j[0].includes("|")?"|":j[0].includes(" ")?" ":",",l=j.map(a=>a.split(k).map(a=>a.trim()).filter(Boolean)).filter(a=>a.length>1);l.length<2||b.push({tableType:d.roleId||"table",headers:l[0],rows:l.slice(1),sourceFile:d.filePath,sourceRange:d.sectionTitle})}return b}function V(a,b,c){let d=(0,u.Uy)(b,c).map(a=>({field:a,pattern:function(a){let b=a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");return RegExp(`${b}[::\\s]+([^\\n,。;;]+)`,"u")}(a.name)})),e=[];for(let b of a)for(let{field:a,pattern:c}of d){if(!(0,u.I2)(b,a))continue;let d=b.content.match(c),f=d?.[1]?.trim();!f||!(f.length<=220)||o(l,f)||p(l,f)||e.some(b=>b.fieldId===a.id&&b.value===f)||e.push({key:a.name,fieldId:a.id,fieldName:a.name,value:f,sourceFile:b.filePath,roleId:b.roleId||"unknown",processingType:b.processingType,confidence:b.score,sourceRef:{filePath:b.filePath,roleId:b.roleId||"unknown",processingType:b.processingType,sectionTitle:b.sectionTitle}})}return e}async function W(a,b,c,d,e,f){let g=[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"LLM JSON 抽取未启用或无可用模型"}],h=Math.max(12e3,Math.floor(Number(process.env.DOCUMENT_FACT_EXTRACTION_MAX_CHARS??45e3))),i=Math.max(8,Math.floor(Number(process.env.DOCUMENT_FACT_EXTRACTION_MAX_ITEMS??48))),j=0,k=[];for(let b of[...a].sort((a,b)=>b.score-a.score).slice(0,i)){let a=(0,z.lG)(b.content).replace(/\s+/gu," ").slice(0,Math.max(800,Math.floor(h/i))),c=`文件:${b.filePath}
|
|
16
|
+
角色:${b.roleId||""}
|
|
17
|
+
处理:${b.processingType||""}
|
|
18
|
+
内容:${a}`;if(k.length>0&&j+c.length>h)break;j+=c.length,k.push(c)}let l=k.join("\n\n---\n\n");if(!l.trim())return{facts:[],stages:g};(0,z.Te)(e);let m=(0,u.Uy)(c,d),n=m.map(a=>`- id=${a.id} name=${a.name} type=auto required=${a.required} sourceRoleIds=${a.sourceRoleIds.join(",")||"不限"} hint=${a.extractionHint||"无"}`).join("\n"),o=await (0,S.bb)(b||"你是文档事实抽取器。",`请严格按下面的动态事实 schema 从资料中抽取事实。只抽取资料明确支持的内容;如果字段限定 sourceRoleIds,必须优先来自对应文件角色;事实取舍和冲突处理遵循规范包字段说明、文件角色和提示词角色配置。
|
|
19
|
+
返回 {"facts":[{"fieldId":"...","fieldName":"...","key":"...","value":"...","sourceFile":"...","roleId":"...","processingType":"reference","confidence":0.8}]}。
|
|
20
|
+
|
|
21
|
+
动态事实 schema:
|
|
22
|
+
${n}
|
|
23
|
+
|
|
24
|
+
资料:
|
|
25
|
+
${l}`,{signal:e,maxTokens:1800,temperature:.1,diagnostics:f});return((0,z.Te)(e),o?.facts?.length)?{facts:o.facts.filter(a=>a.key&&a.value).map(a=>{let b=m.find(b=>b.id===a.fieldId||b.name===a.fieldName||b.name===a.key);return{key:b?.name||a.key,fieldId:b?.id||a.fieldId,fieldName:b?.name||a.fieldName,value:(0,z.lG)(a.value),sourceFile:a.sourceFile||"",roleId:a.roleId||"llm",processingType:a.processingType,confidence:a.confidence??.8,sourceRef:{filePath:a.sourceFile||"",roleId:a.roleId||"llm",processingType:a.processingType}}}),stages:[{type:"fact_extraction",roleId:"llm-json",status:"success",message:`LLM 按动态 schema 抽取 ${o.facts.length} 条事实`}]}:{facts:[],stages:g}}function X(a){return(0,z.lG)(a).replace(/[\u00A0\u2002-\u200B\u3000]/gu," ").replace(/([\p{Script=Han}])\s+([\p{Script=Han}])/gu,"$1$2").replace(/(\d)\s+(日历天|天|个月|月|年|万元|元|㎡|平方米|米|m|mm|MPa|kPa|%)/giu,"$1$2").replace(/(合同|投资|工程|项目)\s*估\s*算\s*(?:价格|价)/gu,"$1估算价").replace(/计划\s*工\s*期/gu,"计划工期").replace(/合同\s*工\s*期/gu,"合同工期").replace(/质量\s*标\s*准/gu,"质量标准").replace(/建设\s*地\s*点/gu,"建设地点").replace(/建设\s*规\s*模/gu,"建设规模").replace(/招标\s*范\s*围/gu,"招标范围").replace(/最高\s*投\s*标\s*限\s*价/gu,"最高投标限价").replace(/招标\s*控\s*制\s*价/gu,"招标控制价").replace(/[::]\s*/gu,":").replace(/\s+/gu," ").trim()}let Y=[{fieldId:"project_name",key:"项目名称",fieldName:"项目名称",pattern:/(?:项目名称|工程名称|招标项目名称)[::\s为是]+([^\n。;;]{2,120})/u},{fieldId:"project_code",key:"项目编号",fieldName:"项目编号",pattern:/(?:项目编号|招标项目编号|工程编号)[::\s为是]+([A-Za-z0-9\-_.()()]{4,80})/u},{fieldId:"owner",key:"招标人",fieldName:"招标人",pattern:/(?:招标人|建设单位|发包人)[::\s为是]+([^\n。;;]{2,120})/u},{fieldId:"project_location",key:"建设地点",fieldName:"建设地点",pattern:/建设地点[::\s为是]+([^\n。;;]{2,100})/u},{fieldId:"project_scale",key:"建设规模",fieldName:"建设规模",pattern:/建设规模[::\s为是]+([^\n。;;]{2,220})/u},{fieldId:"project_scale",key:"建设规模",fieldName:"建设规模",pattern:/(?:拟|计划|规划|目标|力争|预计|期望|远期|未来|设想|建议|预期|争取)[^,,。;;\n]{0,12}?(?<![地上地下])总?建筑面积(?:约|约为|约计|共计|为)?\s*[\d,,.]+\s*(?:㎡|m²|m2|平方米)|((?<![地上地下])总?建筑面积(?:约|约为|约计|共计|为)?\s*[\d,,.]+\s*(?:㎡|m²|m2|平方米))/u},{fieldId:"project_scope",key:"招标范围",fieldName:"招标范围",pattern:/招标范围[::\s为是]+([^\n。;;]{2,220})/u},{fieldId:"schedule_requirement",key:"计划工期",fieldName:"周期要求",pattern:/(?:(?:计划工期|合同工期|总工期)[::\s为是约]*|工期[::\s为是约]+)([^\n。;;]{0,40}?\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年)(?:[^\n。;;]{0,30})?)/u},{fieldId:"quality_standard",key:"质量标准",fieldName:"质量标准",pattern:/质量标准[::\s为是]+([^\n。;;]{1,60})/u},{fieldId:"project_investment_estimate",key:"合同估算价格",fieldName:"项目投资估算",pattern:/(?:合同估算价格|合同估算价|投资估算|估算价格|工程估算价|项目估算价|最高投标限价|招标控制价)[::\s为是约]+([^\n。;;]{0,80}?\d+(?:\.\d+)?\s*(?:万元|元))/u}];function Z(a,b){let c=X((0,z.lG)(b));return!(!a||!c||c.length>260||/###|第\s*\d+\s*页|共\s*\d+\s*页|律师代理费|投标文件的编制|备选投标方案|投标将被否决|投标人提供|投标有效期|电子交易系统|公共资源交易监督管理部门|中标候选|评标委员会|实质性内容作出响应/u.test(c)||/签章|盖章|联系人|联系电话|电话|邮箱|解密|开标|评标|保证金|交易系统|空白|填写|上传|下载|递交/u.test(c))&&("schedule_requirement"===a?c.length<=90&&/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年)/u.test(c):"quality_standard"===a?c.length<=40&&/合格|优良|一次性验收|国家.*验收|达到/u.test(c)&&!/工期|投标|技术标准|\d[..、]/u.test(c):"owner"===a?c.length>=4&&c.length<=80&&/公司|局|委员会|中心|处|院|所|校|集团|有限|股份|责任|管理/u.test(c)&&!/将报|监督管理部门|投标人|中标|负责解释|见招标|详见|空白|填写/u.test(c):"project_location"===a?c.length<=120&&!/见招标公告|详见|投标/u.test(c):"project_scope"===a?c.length<=220&&!/^[((]\s*\d+[))]/u.test(c)&&!/具备.{0,24}(?:证书|考核合格|安全生产考核)/u.test(c)&&!/^见(?:招标|投标人|前附)/u.test(c):"project_code"===a?/^[A-Za-z0-9\-_.()()]+$/u.test(c):"project_investment_estimate"===a?c.length<=100&&/\d+(?:\.\d+)?\s*(?:万元|元)/u.test(c):c.length<=220)}function $(a){let b=[],c=new Set;for(let d of a)for(let a of X(d.content).split(/\r?\n/u).flatMap(a=>{let b=a.replace(/\s+/gu," ").trim();return b.length>260?b.split(/(?=\d+(?:\.\d+)?\s*[^\s::]{2,12}[::])/u):[b]}).filter(Boolean))if(!/报价明细|综合单价|税率|增值税|利润|结算/u.test(a)||/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(a))for(let e of Y){let f=e.pattern.exec(a),g=f?.[1]?.trim();if(!g||!Z(e.fieldId,g))continue;let h=`${d.filePath}:${e.fieldId}:${g}`;c.has(h)||(c.add(h),b.push({key:e.key,fieldName:e.fieldName,fieldId:e.fieldId,value:g,sourceFile:d.filePath,roleId:d.roleId||"project_basic_fact",processingType:d.processingType||"reference",confidence:Math.max(.82,d.score||.82),sourceRef:{filePath:d.filePath,roleId:d.roleId||"project_basic_fact",processingType:d.processingType||"reference",sectionTitle:d.sectionTitle}}))}return b.slice(0,80)}function _(a,b=l){let c=[],d=new Set;for(let e of a){let a=`${e.roleId||""} ${e.processingType||""} ${e.filePath} ${e.sectionTitle||""}`;if(!/drawing|table|bill|boq|draw|data|sheet|spec|standard|record|report|表格|数据|规格|参数|标准|记录|报告|清单|图纸|说明/u.test(a)&&e.score<.75)continue;let f=(0,z.lG)(e.content).replace(/\s+/gu," ");for(let a of f.matchAll(T._W)){let g=a[0].trim();if(!g||o(b,g))continue;let h=Math.max(0,(a.index||0)-40),i=Math.min(f.length,(a.index||0)+g.length+40),j=f.slice(h,i);if(p(b,j)||q(b,j))continue;let k=`${e.filePath}:${g}`;d.has(k)||(d.add(k),c.push({key:"精确参数",fieldName:"技术参数",fieldId:"technical_parameter",value:g,sourceFile:e.filePath,roleId:e.roleId||"precise_fact",processingType:e.processingType||"precise",confidence:Math.max(.7,e.score||.7),sourceRef:{filePath:e.filePath,roleId:e.roleId||"precise_fact",processingType:e.processingType||"precise",sectionTitle:e.sectionTitle}}))}}return c.slice(0,240)}function aa(a){return`${a.key} ${a.fieldName||""} ${a.value} ${a.roleId} ${a.processingType||""} ${a.sourceFile}`}function ab(a){return/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|项目估算价|最高投标限价|招标控制价/u.test(a)}function ac(a){let b=aa(a);return!ab(b)&&/投标保证金|发票类型|开标时间|公共资源交易监督管理|不良行为记录|投诉举报|资质投诉|投标承诺|违约金|中标服务费|交易平台|保证金账户|投标有效期|报价明细|投标报价|单价|合价|税率|增值税|利润|结算/u.test(b)}function ad(a){return(0,z.lG)(a).replace(/\s+/gu," ").trim()}function ae(a,b=[]){return[...new Set([a,...b,...a.split(/[\s、,。;;::/\\_-]+/u)].map(ad).filter(a=>a.length>=2))]}function af(a,b,c){var d,e;let f=ad(c.label);if(!f||o(b,f)||p(b,f))return;let g=c.id||(d=c.source,e=c.fieldId,`${d}:${e||f}`.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-|-$/gu,"")||`${d}-${Math.random().toString(36).slice(2,8)}`),h=c.queries?.length?c.queries.map(ad).filter(Boolean):ae(f),i=a.find(a=>a.id===g||a.label===f);if(i){i.required=i.required||c.required,i.queries=[...new Set([...i.queries,...h])];return}a.push({...c,id:g,label:f,queries:h})}function ag(a,b,c,d,e,f=[]){"do_not_use"!==c.usagePolicy&&"diagnostic_only"!==c.usagePolicy&&"forbidden"!==c.derivationPolicy&&af(a,b,{label:c.name,category:c.category,required:e,source:d,fieldId:c.id,queries:ae(c.name,[...c.aliases,...f])})}function ah(a){let b=new Set;return a.filter(a=>{let c=`${a.sourceFile}:${a.key}:${a.value}`;return!b.has(c)&&(b.add(c),!0)})}function ai(a){let b=a.profile||l,c=ah([...a.factsModel.factIndex.parameterFacts,...a.factsModel.factIndex.tableFacts,...a.factsModel.factIndex.drawingFacts,...a.factsModel.factIndex.billFacts,...a.factsModel.factIndex.reliableFacts]);return a.needs.map(d=>{let e=ah(c.filter(a=>(function(a,b,c){let d=aa(a);if(ac(a)||o(c,d)||p(c,d))return!1;if(b.fieldId&&a.fieldId===b.fieldId||n(c,a.fieldName||a.key)?.id===b.fieldId||b.queries.filter(a=>a.length>=2).some(a=>d.includes(a)))return!0;let e=n(c,b.label);return!!(e&&[e.name,...e.aliases].some(a=>a.length>=2&&d.includes(a)))})(a,d,b))).sort((a,b)=>(b.confidence||0)-(a.confidence||0)),f=(a.evidence||[]).filter(a=>(function(a,b,c){let d=`${a.filePath} ${a.roleId||""} ${a.processingType||""} ${a.sectionTitle||""} ${a.content}`;return!(o(c,d)||p(c,d))&&b.queries.some(a=>a.length>=2&&d.includes(a))})(a,d,b)),g=Math.max(0,...e.map(a=>a.confidence||0)),h=0===e.length&&0===f.length?"missing":g>0&&g<.58?"low_confidence":"satisfied";return{need:d,facts:e,evidence:f,status:h}})}function aj(a){return(0,z.lG)(a).replace(/\s+/gu," ").trim().slice(0,220)}function ak(a,b=[],c=[],d,e=l){let f=b=>a.filter(a=>b.some(b=>`${a.key} ${a.fieldName||""}`.includes(b))),g=b=>a.filter(a=>a.processingType===b||a.roleId.includes(b)),h=a.filter(a=>{let b=`${a.key} ${a.fieldName||""} ${a.value}`;return T.sv.test(b)&&(!o(e,b)||ab(b))&&!p(e,b)}),i=a.filter(a=>"table"===a.processingType||"structured_data"===a.processingType||"bill_of_quantities"===a.processingType||/bill|boq|table|sheet|data|表格|列表|明细|数据/u.test(`${a.roleId} ${a.sourceFile}`)),j=a.filter(a=>/项目名称|工程名称|项目编号|招标项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`)).slice(0,80),k=function(a,b,c,d){let e=a.filter(a=>p(d,aa(a))||q(d,aa(a))),f=a.filter(a=>{let b=aa(a);return a.confidence>=.58&&!ac(a)&&!o(d,b)&&!p(d,b)&&!q(d,b)}),g=[...b.filter(a=>!ac(a)),...f.filter(a=>T.sv.test(aa(a)))].filter((a,b,c)=>c.findIndex(b=>b.sourceFile===a.sourceFile&&b.value===a.value&&b.key===a.key)===b).slice(0,360),h=f.filter(a=>"table"===a.processingType||/table|sheet|表格|清单|明细|数据|参数行摘要/u.test(aa(a))),i=f.filter(a=>"drawing"===a.processingType||/drawing|draw|dwg|图纸|设计|尺寸|标高|管径|做法/u.test(aa(a)));return{reliableFacts:f.slice(0,500),parameterFacts:g,tableFacts:h.slice(0,240),drawingFacts:i.slice(0,240),billFacts:c.slice(0,240),diagnostics:e.slice(0,120)}}(a,h,i,e);return{project:j,schedule:f(["工期","开工","竣工","节点","周期"]),quality:f(["质量","验收"]),safety:f(["安全","风险"]),resources:f(["劳动力","材料","机械","设备","资源"]),tables:b,drawings:g("drawing"),bills:i,preciseFacts:h,rules:g("rule"),specifications:g("specification"),schemaFacts:function(a,b){let c={};for(let d of b?.factFields||[])c[d.id]=a.filter(a=>a.fieldId===d.id||a.key===d.name||a.fieldName===d.name);return c}(a,d),factIndex:k,missing:[...new Set(c)],conflicts:function(a,b,c=l){let d=(b?.factFields.map(a=>a.name)||[...new Set(a.map(a=>a.fieldName||a.key))]).filter(a=>(function(a,b){let c=n(b,a);return c?"single"===c.cardinality&&"ignore"!==c.conflictPolicy&&"allow_multiple"!==c.conflictPolicy:/项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数|工期|质量标准|合同价格形式|绿色建筑等级|投标有效期|质保期/u.test(a)})(a,c)),e=[];for(let b of d){let d=a.filter(a=>a.key===b||a.fieldName===b||n(c,a.fieldName||a.key)?.name===b),f=new Map;for(let a of d){let b=function(a,b){let c=(0,z.lG)(a).trim();if(p(b,c)||o(b,c)||(c.match(/�|/gu)?.length||0)>=2||Array.from(c).some(a=>{let b=a.charCodeAt(0);return 65533===b||b<32&&9!==b&&10!==b&&13!==b})||/签章|盖章|联系人|联系电话|电话|邮箱|解密|开标|评标|保证金|交易系统|空白|填写|上传|下载|递交/u.test(c)||/\|/u.test(c)||/^#+\s*/u.test(c)||/见(?:招标公告|投标人须知|前附表|本项目|补疑)|资料参数行摘要|公共资源交易监督管理|开评标程序|监管部门/u.test(c)||/是否|符合|采购范围|规定的投标截止时间|电子交易系统/u.test(c)&&/\d{3,}/u.test(c))return"";let d=c.match(/\d+\s*日历天/u)?.[0]?.replace(/\s+/gu,"");if(d&&/工期|日历天|开工日期|竣工/u.test(c))return d;let e=(0,R.K3)((0,z.lG)(c));return e&&!(e.length>80)&&/[\d年月日%]|合格|一星|二星|三星|总价合同|单价合同|承台|框架|装配式/u.test(c)?e:""}(a.value,c);b&&f.set(b,[...f.get(b)||[],a])}if(f.size>1){let a=[...f.values()].slice(0,4).map(a=>`${(0,z.lG)(a[0].value).slice(0,120)}(${[...new Set(a.map(a=>a.sourceFile))].slice(0,3).join("、")})`).join(" vs ");e.push(`事实冲突:${b} 存在多个来源值:${a}`)}}return e.slice(0,8)}(a,d,e)}}var al=c(80439),am=c(34680),an=c(79227),ao=c(2773),ap=c(92817),aq=c(3063);function ar(a){return(0,t.GQ)(a.replace(/\*+/gu,"")).replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分、..\s-]*/u,"").replace(/^\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^[-—–]\s*/u,"").replace(/[<>]/gu,"").replace(/[::。;;,.,]+$/gu,"").replace(/\s*[((][^()()]{0,40}[a-zA-Z]{3,}[^()()]{0,40}[))]\s*$/u,"").trim()}function as(a,b){let c=ar(a);return!!(c.length<4||c.length>60||c===ar(b)||/^(?:目录|章节|大纲|要求|说明|注意|输出|格式|示例|占位|提示|概述|总体要求)$/u.test(c)||/如需|应由|大模型|提示词|上下文|OUTLINE|JSON|小节标题/u.test(c)||/(.)\1/u.test(c))}function at(a,b){let c=a=>{let b=new Set;for(let c=0;c<a.length-1;c+=1)b.add(a.slice(c,c+2));return b},d=c(b),e=[...c(a)];return 0===e.length?0:e.filter(a=>d.has(a)).length/e.length}function au(a){return(0,aq.tZ)(a)}function av(a){let b=new Set,c=[];for(let d of a.sections||[]){let e=ar(d);if(!e||as(e,a.title))continue;let f=e.replace(/\s+/gu,"");b.has(f)||(b.add(f),c.push(e))}return c}function aw(a,b){let c=a.replace(/\s+/gu,""),d=b.replace(/\s+/gu,"");return c===d||c.includes(d)||d.includes(c)}function ax(a,b){let c=[],d=[],e=b.map(a=>({...a,subPoints:[...a.subPoints]}));for(let b of a){let a,f;if(e.some(a=>(function(a,b){return!!aw(b.title,a)||b.subPoints.some(b=>b.sources.some(b=>aw(b,a))||aw(b.title,a))})(b,a))){c.push(b);continue}let g=-1;for(let c of e)for(let d of c.subPoints){let e=Math.max(at(b,d.title),...d.sources.map(a=>at(b,a)));e>g&&(g=e,a=d,f=c)}if(au(b)){let a=f||e[e.length-1];if(a){a.subPoints.push({title:b.slice(0,30),sources:[b]}),d.push(b);continue}}a&&g>=.5?(a.sources.push(b),d.push(b)):f?(f.subPoints.push({title:b.slice(0,30),sources:[b]}),d.push(b)):c.push(b)}return{blocks:e,coveredSections:c,fallbackSections:d,llmPlanned:b.length>0}}function ay(a,b){let c=a.reduce((a,b)=>a+b.subPoints.length,0)||a.length;for(let d of a){let e=Math.floor(.75*Math.max(1200,Math.floor(b/Math.max(1,a.length)))+.25*b*(d.subPoints.length/c));d.targetWords=Math.min(2200,Math.max(1200,e))}}async function az(a){let b=av(a.chapter);if(b.length<=8)return;if(b.length>16){let c=Math.ceil(b.length/2),d=b=>({...a.chapter,sections:b}),e=await az({...a,chapter:d(b.slice(0,c)),targetWords:Math.ceil(a.targetWords/2)}),f=e&&e.blocks.length>0?await az({...a,chapter:d(b.slice(c)),targetWords:Math.floor(a.targetWords/2)}):void 0;if(e&&e.blocks.length>0&&f&&f.blocks.length>0){let c=[...e.blocks,...f.blocks];return ay(c,a.targetWords),ax(b,c)}let g=e&&!e.blocks.length?e.llmFailure:f&&!f.blocks.length?f.llmFailure:void 0;return{blocks:[],coveredSections:[],fallbackSections:[],llmPlanned:!1,llmFailure:g?`分批规划未命中(${g})`:"分批规划未命中"}}let c=Math.min(12,Math.ceil(b.length/2.5)),d=Math.max(3,Math.min(c,Math.ceil(b.length/3))),e=b.filter(au).length,f=Math.max(0,b.length-e),g=Math.max(2,e+Math.max(1,Math.round(.35*f))),h=Math.max(g,e+Math.round(.6*f)),i=async e=>{let f,i=(0,s.ks)((0,s.QO)(a.chapter,a.evidence),{maxChars:(0,s.Pc)(a.targetWords,0===e?5e3:3e3,0===e?12e3:8e3)}),j=0===e?4:2,k=["你是专业施工组织设计文档结构规划专家。","任务:把章节的细目清单重排为目录级主题块(三级小节),每个主题块下挂 2~4 个 H4 要点;语义相近、内容连贯的细目必须合并进同一个 H4 要点。","硬性规则:",`1. 合并决策:语义相近、内容连贯的输入细目必须合并进同一个 H4 要点;H4 要点标题必须重写为更概括、更专业的标题(16 字以内),不得直接照抄任一输入细目标题;每个 H4 要点的 sources 字段逐字列出它所覆盖的全部输入细目标题,不得改写、不得遗漏、不得重复映射。例外:含评标必查关键词的输入细目(${aq.Dr.join("/")}等)必须保留为独立 H4 要点,不得与其他细目合并吞并,其 H4 标题必须保留该关键词。`,`2. 合并依据:优先参考项目图谱与文档蓝图,把在项目中对应同一套工程对象/管理闭环的细目合并(如「三检制度」「样板引路」「隐蔽工程验收」同属质量管控闭环);不得把内容无关的细目强行合并。`,`3. 主题块标题必须具体、专业、能承载其要点(16 字以内),不得使用"目标与范围""资料依据""总体要求"等通用占位标题;同一内容不得在两个块重复出现。`,`4. 数量约束:整章 H4 要点总数必须控制在 ${g}~${h} 个之间;每个主题块 2~4 个 H4 要点。`,`5. facts 字段:从绑定资料中摘取与本主题块直接相关的关键事实短句(每条 ≤60 字,1~${j} 条);同一条事实只能分配给一个主题块。`,"6. 只返回 JSON,不要输出任何其他文字。",`JSON 格式:{"blocks":[{"title":"主题块标题","subPoints":[{"title":"H4要点标题","sources":["输入细目原文"]}],"facts":["事实短句"]}]}`],l=[`文档模板:${a.template.name}`,`章节标题:${a.chapter.title}`,a.requirement?`用户要求:${a.requirement}`:"",a.graphContext?`项目图谱(本章定向,工程/工法/资源/工期/标准/风险/要求):${a.graphContext.slice(0,2500)}`:"",a.blueprintContext?`文档蓝图(本章任务卡与实施方案):${a.blueprintContext.slice(0,4e3)}`:"",a.projectContext?`上下文:${a.projectContext.slice(0,2e3)}`:"",a.roleContext?`角色要求:${a.roleContext.slice(0,2e3)}`:"",i?`真实绑定资料:${i}`:"",`输入细目清单(共 ${b.length} 条,必须全部覆盖,允许合并进同一 H4):${b.join("、")}`,`请输出 ${d}-${c} 个主题块,整章 H4 要点 ${g}-${h} 个,确保所有输入细目被覆盖。`],m=await (0,S.rI)(k.join("\n"),l.filter(Boolean).join("\n\n"),!0,{maxTokens:Math.max(3200,120*b.length),temperature:.1,signal:a.signal,diagnostics:a.diagnostics});if(!m){let b=a.diagnostics?.llm.lastError;return{blocks:[],failure:b?`LLM 无响应(${b})`:"LLM 无响应"}}try{f=JSON.parse((0,S.MY)(m))}catch{let a=m.slice(-100).replace(/\s+/gu," ");return{blocks:[],failure:`JSON 解析失败,响应末段:${a}`}}if(!f?.blocks?.length)return{blocks:[],failure:"LLM 返回 JSON 但 blocks 为空"};let n=[];for(let c of f.blocks){let d=ar(c.title||"");if(!d||as(d,a.chapter.title))continue;let e=(c.subPoints||[]).map(a=>{let c=Array.isArray(a.sources)&&a.sources.length>0?a.sources:a.source?[a.source]:[],d=[];for(let a of c){let c=ar(a||"");!(c.length<4)&&b.some(a=>aw(c,a))&&(d.some(a=>aw(a,c))||d.push(c))}let e=ar(a.title||"");return!e||e.length<4?d.length>0?{title:d[0].slice(0,30),sources:d}:void 0:{title:(e&&!d.some(a=>aw(e,a))?e:d[0]||e).slice(0,30),sources:d}}).filter(a=>!!a);if(0===e.length)continue;let f=(c.facts||[]).map(a=>a.trim().slice(0,80)).filter(Boolean).slice(0,j);n.push({title:d,subPoints:e,facts:f,targetWords:1200})}return n.length<2?{blocks:[],failure:`LLM 主题块有效数不足(仅 ${n.length} 个)`}:{blocks:n}},j=await i(0);if(j.blocks.length>0)return ay(j.blocks,a.targetWords),ax(b,j.blocks);let k=await i(1);return k.blocks.length>0?(ay(k.blocks,a.targetWords),ax(b,k.blocks)):{blocks:[],coveredSections:[],fallbackSections:[],llmPlanned:!1,llmFailure:`重试后仍未命中(${k.failure||"未知原因"};首因:${j.failure||"未知原因"})`}}async function aA(a){let b=await az(a).catch(a=>({blocks:[],coveredSections:[],fallbackSections:[],llmPlanned:!1,llmFailure:a instanceof Error?a.message:String(a)}))??{blocks:[],coveredSections:[],fallbackSections:[],llmPlanned:!1,llmFailure:"LLM 调用异常"};return b.blocks.length>0?b:{...function(a,b,c){let d=new Map;for(let b of a){let a=/工期|进度|节点|计划|纠偏|预警/u.test(b)?"工期进度":/质量|验收|三检|样板|隐蔽|复试|实测|通病/u.test(b)?"质量验收":/安全|危大|风险|隐患|应急|临边|洞口|消防|临电/u.test(b)?"安全风险":/文明|扬尘|噪声|绿色|废水|垃圾|环保|智慧/u.test(b)?"文明绿色":/劳务|工资|实名|银行|考勤|人员|岗位|组织|职责/u.test(b)?"组织劳务":/资源|材料|设备|机械|人材机|调配/u.test(b)?"资源保障":/施工|工艺|流程|顺序|穿插|部署|区段|流水/u.test(b)?"施工组织":"综合管理",c=d.get(a)||[];c.push(b),d.set(a,c)}let e=a=>{let b=[];for(let c of a){let a=b[b.length-1],d=a?a.sources[a.sources.length-1]:"";!au(c)&&a&&(aw(c,d)||at(c,d)>=.75)?(a.sources.push(c),c.length>a.title.length&&(a.title=c.slice(0,30))):b.push({title:c.slice(0,30),sources:[c]})}return b},f=[];for(let a of d.values()){let d=e(a);for(let a=0;a<d.length;a+=6){let e=d.slice(a,a+6),g=d.length;f.push({title:e[0].title||b,subPoints:e,facts:[],targetWords:Math.min(2200,Math.max(1200,Math.floor(c/Math.max(1,Math.ceil(g/6)))))})}}return{blocks:f,coveredSections:a.slice(),fallbackSections:[],llmPlanned:!1}}(av(a.chapter),a.chapter.title,a.targetWords),llmFailure:b.llmFailure||"LLM 调用异常"}}var aB=c(95393);function aC(a){let b=(0,v.r4)(a.content);return 0===b.length?[]:b.flatMap(b=>{let c=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),d=a.content.match(RegExp(`^###\\s+(?:\\d+(?:\\.\\d+)*[、..\\s]*\\s+)?${c}\\s*\\n([\\s\\S]*?)(?=^#{2,3}\\s+|$)`,"mu")),e=d?.[1]||"",f=(0,ap.AI)(b,(0,ap.Ym)(b,a.chapter,a.evidence)),g=(0,ap.uQ)(b,e,f);return g?[`${b}:${g}`]:[]})}function aD(a,b){let c=a.trim();if(!c)return[];let d=Math.max(1e3,Math.ceil(b)),e=[],f=0;for(;f<c.length;){let a=Math.min(f+d,c.length),b=c.lastIndexOf("\n\n",a);(b<=f||a-b>.25*d)&&(b=c.lastIndexOf("\n",a)),(b<=f||a-b>.2*d)&&(b=a),e.push(c.slice(f,b).trim()),f=b}return e.filter(Boolean)}function aE(a){return"string"==typeof a?a:a&&"object"==typeof a&&"message"in a?String(a.message):JSON.stringify(a)}function aF(a){let b=Number(process.env[a]);return Number.isFinite(b)&&b>0?Math.ceil(b):0}async function aG(a,b,c){let d,f=(0,S.$y)();if(!f)return{notes:[],stage:(0,al.X5)({type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"当前模型不可用"},{subtitle:"多模态参考文件"})};try{d=(0,aB.createProvider)(f.model.provider,{apiKey:f.provider.apiKey,baseUrl:f.provider.baseUrl,modelName:f.model.name,directEndpoint:f.provider.directEndpoint})}catch{return{notes:[],stage:(0,al.X5)({type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:`当前模型服务 ${f.model.provider} 不支持多模态文件理解,已跳过`},{subtitle:"多模态参考文件"})}}let g=[...new Set(b.map(a=>a.filePath).filter(a=>/\.(png|jpe?g|webp|pdf|docx|xlsx)$/iu.test(a)))].slice(0,4);if(0===g.length)return{notes:[],stage:(0,al.X5)({type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"未找到多模态参考文件"},{subtitle:"多模态参考文件"})};let h=[];for(let b of g){let c=e.isAbsolute(b)?b:e.join(a,b);if(P.existsSync(c)&&!(P.statSync(c).size>8388608)&&(h.push({name:e.basename(b),buffer:P.readFileSync(c),mimeType:/\.png$/iu.test(b)?"image/png":/\.jpe?g$/iu.test(b)?"image/jpeg":/\.webp$/iu.test(b)?"image/webp":"application/pdf"}),h.length>=4))break}if(0===h.length)return{notes:[],stage:(0,al.X5)({type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"未找到可读取的多模态文件"},{subtitle:"多模态参考文件"})};try{if(c?.aborted)throw Error("aborted");let a=await d.understandFiles?.({files:h});if(!a?.length)return{notes:[],stage:(0,al.X5)({type:"file_understanding",roleId:"multimodal-files",status:"failed",message:"多模态模型未返回文件理解结果"},{subtitle:"多模态参考文件"})};return{notes:a,stage:(0,al.X5)({type:"file_understanding",roleId:"multimodal-files",status:"success",message:`已完成 ${a.length} 个多模态文件理解`},{subtitle:"多模态参考文件"})}}catch(a){return console.error("[multimodal] failed:",a),{notes:[],stage:(0,al.X5)({type:"file_understanding",roleId:"multimodal-files",status:"failed",message:"多模态文件理解失败"},{subtitle:"多模态参考文件"})}}}async function aH(a){(0,z.Te)(a.signal);let b=a.chapters.map(a=>{let b=a.content.replace(/#{1,6}\s+/gu,"").replace(/\*\*/gu,"").replace(/\|/gu," ").replace(/[\n\r]+/gu," ").trim(),c=function(a){let b=[];for(let c of[/(?:总建筑面积|建设规模|总用地面积|总占地面积)[^\n。;;]{0,18}\d+(?:[.,]\d+)?\s*万?\s*(?:㎡|m²|m2|平方米)/gu,/(?:合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价|工程总投资|总投资|工程造价)[^\n。;;]{0,18}\d+(?:[.,]\d+)?\s*万?\s*(?:万元|亿元|元)/gu,/(?:计划工期|合同工期|总工期|施工周期)[^\n。;;]{0,18}\d+\s*(?:日历天|天|个月|月)/gu,/(?:质量标准|质量目标)[^\n。;;]{0,26}/gu,/(?:找平层|抹灰层|防水层|保温层|结合层|垫层|面层|粘结层)[^\n。;;]{0,24}\d+:\d+(?:\.\d+)?/gu]){let d=[...new Set(a.match(c)||[])].slice(0,4);b.push(...d)}return[...new Set(b.map(a=>a.replace(/\s+/gu," ").trim()).filter(Boolean))].join(";")}(a.content);return`章节:${a.title}
|
|
26
|
+
数值口径清单:${c||"(未提取到总量口径数字)"}
|
|
27
|
+
正文摘要:${b.slice(0,600)}`}).join("\n\n---\n\n"),c=function(a){let b=Math.ceil(a.totalChars/Math.max(1e3,a.chunkChars)),c="chapter"===a.phase?aF("DOCUMENT_CHAPTER_REVIEW_MAX_CHUNKS")||Math.min(Math.max(2,Math.floor(a.totalChars/a.chapterCount/4e3)),b):"global"===a.phase?aF("DOCUMENT_GLOBAL_REVIEW_MAX_CHUNKS")||Math.min(4,b):aF("DOCUMENT_FINAL_REVIEW_MAX_CHUNKS")||Math.min(6,b);return{chunks:c,budgetPerChunk:Math.ceil(a.totalChars/Math.max(1,c)),maxIssues:Math.max(4,Math.min(28,Math.ceil(2.5*c)))}}({totalChars:b.length,chapterCount:a.chapters.length,chunkChars:16e3,phase:"global"}),d=aD(b,16e3).map((a,c)=>`**第 ${c+1}/${aD(b,16e3).length} 部分**
|
|
28
|
+
|
|
29
|
+
${a}`).slice(0,c.chunks),e=[...new Set((await Promise.all(d.map(b=>(0,S.bb)("你是专业文档审查专家。检查跨章节数值一致性。每个章节都附带“数值口径清单”(从正文确定性提取的总量口径数字)。只报告确定性矛盾,两类:(1) 两章之间同一口径的数值互相矛盾;(2) 正文数值与项目上下文中的资料口径或裁决口径明确不符。每条冲突必须包含:章节名+冲突数值+正确口径(正确口径必须取自项目上下文中的资料或裁决,不得自行编造)。资料未提供某口径不构成冲突,不得报告;各章表述一致但资料未明确的字段不得报告;各章一致的表述不得报告。只返回 JSON。",`${a.promptTexts}
|
|
30
|
+
|
|
31
|
+
${a.projectContext||""}
|
|
32
|
+
|
|
33
|
+
${b}
|
|
34
|
+
|
|
35
|
+
返回 JSON:{"issues":[]}`,{maxTokens:1e3,temperature:.1,signal:a.signal,diagnostics:a.diagnostics})))).flatMap(a=>Array.isArray(a?.issues)?a.issues:[]).map(aE).filter(Boolean))];return{issues:e,stage:(0,al.X5)({type:"llm_review",roleId:"global-consistency-review",status:e.length>0?"failed":"success",message:e.length>0?`全局一致性审查完成:发现 ${e.length} 个跨章问题`:"全局一致性审查通过"},{subtitle:"全局一致性审查"})}}var aI=c(71001);let aJ=/安全|文明|质量|绿色施工|环保|扬尘|消防|应急|危大|风险|规范|标准|管理要求|施工工艺|技术措施|验收/u,aK=/项目名称|工程名称|建设地点|建设单位|招标人|发包人|建设规模|招标范围|合同工期|计划工期|质量标准|危大工程清单|工程量|材料规格|设备型号|图纸参数|报价|单价|利润|税率|合同金额|联系方式|品牌/u,aL=/报价|单价|合价|金额|利润|税率|增值税|招标控制价|最高投标限价|中标价|合同价|暂列金额/u,aM=/联网增强|联网检索|网页资料|搜索结果|根据网页|互联网资料|在线资料|浏览器|搜索引擎/u,aN=["项目名称","工程名称","建设地点","建设单位","招标人","发包人","建设规模","招标范围","合同工期","计划工期","工程量","报价","单价"];function aO(a){return a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,'"').replace(/'/gu,"'").replace(/<[^>]+>/gu,"").replace(/\s+/gu," ").trim()}async function aP(a,b,c,d,e){let f=`https://duckduckgo.com/html/?q=${encodeURIComponent(a)}`,g=new AbortController,h=setTimeout(()=>g.abort(),8e3),i=()=>g.abort();e?.addEventListener("abort",i,{once:!0});let j=await fetch(f,{headers:{"User-Agent":"Mozilla/5.0 compatible; customize-agent web research"},signal:g.signal}).finally(()=>{clearTimeout(h),e?.removeEventListener("abort",i)});return j.ok?[...(await j.text()).matchAll(/<a[^>]+class="result__a"[^>]+href="([^"]+)"[^>]*>([\s\S]*?)<\/a>[\s\S]*?<a[^>]+class="result__snippet"[^>]*>([\s\S]*?)<\/a>/giu)].map(a=>{let b=aO(a[1]||""),c=aO(a[2]||""),d=aO(a[3]||""),e=/uddg=([^&]+)/u.exec(b)?.[1];return{url:e?decodeURIComponent(e):b,title:c,snippet:d}}).filter(a=>{let b=`${a.title} ${a.snippet} ${a.url}`;return!(!a.url||!a.snippet||aK.test(b)||aL.test(b)||aM.test(b)||d.some(a=>a&&b.includes(a)))&&(0===c.length||c.some(b=>a.url.includes(b)))}).slice(0,b):[]}async function aQ(a){if(!a.config.enabled||!function(a,b){let c=`${a} ${b.join(" ")}`;return!(!aJ.test(c)||/项目概况|工程概况|建设地点|建设规模|招标范围|工程量|报价|造价/u.test(c)&&!/安全|文明|质量|危大|环保|工艺|措施/u.test(c))}(a.chapterTitle,a.sectionTitles))return{evidence:[],queries:[],filtered:0};let b=function(a,b,c){let d=`${a} ${b.join(" ")}`,e=[/危大/u.test(d)?"危大工程 专项施工方案 管理规定 安全措施":"",/安全|文明/u.test(d)?"建筑工程 安全文明施工 管理要求":"",/质量|验收/u.test(d)?"建筑工程 质量控制 质量验收 通用要求":"",/扬尘|环保|绿色/u.test(d)?"施工现场 扬尘治理 绿色施工 环保要求":"",/消防|应急/u.test(d)?"施工现场 消防 应急管理 要求":"",/工艺|技术措施/u.test(d)?"建筑工程 施工工艺 技术措施 通用要求":""].filter(Boolean),f=`${a.replace(aK,"")} 公开规范 通用要求`.trim();return[...new Set(e.length?e:[f])].slice(0,c)}(a.chapterTitle,a.sectionTitles,a.config.maxQueriesPerChapter),c=[],d=0;for(let e of b)try{for(let b of(await aP(e,a.config.maxResultsPerQuery,a.config.trustedDomains,a.runtimeRules.forbiddenTerms||[],a.signal))){let e=function(a,b){let c=a;for(let a of aN)c=c.replace(RegExp(`${a}[^。;;
|
|
36
|
+
]{0,80}`,"gu"),"");for(let a of b.map(a=>{var b;return null==(b=a.value)?"":"string"==typeof b||"number"==typeof b||"boolean"==typeof b?String(b).trim():""}).filter(a=>a.length>=3&&a.length<=80))c=c.replace(RegExp(a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"gu"),"");return c.replace(aL,"").trim()}(b.snippet,a.localFacts);if(!e||e.length<20){d+=1;continue}c.push({chapterId:a.chapterId,filePath:b.url,score:.42,content:`参考依据:${b.title}
|
|
37
|
+
${e}`,source:function(a){let b=a.toLowerCase();return b.includes(".gov.cn")||b.includes("mohurd")||b.includes("zjt")||a.includes("住建")?"web-policy":"web-evidence"}(b.url),sectionTitle:a.chapterTitle})}}catch{d+=1}return{evidence:c,queries:b,filtered:d}}function aR(a){return e.resolve(a).replace(/\\/gu,"/").toLowerCase()}function aS(a,b=[]){return{projectId:a,allowedFilePaths:[...new Set(b.filter(Boolean).map(aR))]}}function aT(a){return!!a?.allowedFilePaths.length}function aU(a,b){if(!aT(b))return!0;if(!a)return!1;let c=aR(a);return b.allowedFilePaths.includes(c)}function aV(a,b){return a.filter(a=>aU(a.filePath,b))}function aW(a,b){return a.filter(a=>aU(a.sourceFile,b))}function aX(a,b,c){if(!aT(b))return;let d=a.filter(a=>!aU(a.filePath,b));if(d.length>0){let a=d.slice(0,5).map(a=>a.filePath).join(";");throw Error(`EVIDENCE_SCOPE_VIOLATION:${c}:${a}`)}}function aY(a){return/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|\d{1,2}\.\d{1,2}/u.test(a)}function aZ(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/[\s,。,.;;::《》“”‘’()()_-]+/gu,"").toLowerCase()}function a$(a,b){let c=aZ(b);if(!c||c.length<4)return!0;let d=aZ(a);return!!d.includes(c)||c.length>=12&&d.includes(c.slice(0,Math.max(8,Math.floor(.72*c.length))))}function a_(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/\s+/gu,"").replace(/[,。,.;;::《》“”‘’()()_-]/gu,"").toLowerCase()}function a0(a,b){let c=a.trim();if(p(b,c)||o(b,c)||/签章|盖章|联系人|联系电话|电话|邮箱|解密|开标|评标|保证金|交易系统|空白|填写|上传|下载|递交|投标文件制作|电子服务系统|交易平台/u.test(c)||/\|/u.test(c)||/^#+\s*/u.test(c)||/见(?:招标公告|投标人须知|前附表|本项目|补疑)|资料参数行摘要|公共资源交易监督管理|开评标程序|监管部门|招标代理机构|监督管理部门|行政监督部门/u.test(c)||/是否|符合|采购范围|规定的投标截止时间|电子交易系统|投标人须知|招标文件正文/u.test(c)&&/\d{3,}/u.test(c)||/项目名称|工程名称/u.test(c)&&/项目编号|工程概况|建筑面积|本项目分为|现状建筑物|改造工程|标段/u.test(c)||/项目编号[::]|工程概况[::]|本项目分为|现状建筑物|总建筑面积|本次改造工程|清单编制说明/u.test(c))return"";let d=/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月)/u.exec(c)?.[0],e=a_(d&&/工期|总工期|合同工期|计划工期|施工周期/u.test(c)?d:c);return!e||e.length>80?"":e}var a1=c(1358);function a2(a){return(0,R.K3)(`${a.fieldName||a.key} ${(0,z.lG)(a.value)}`)}function a3(a){return[...a.project,...a.schedule,...a.quality,...a.safety,...a.resources,...a.preciseFacts,...a.bills,...a.drawings,...a.rules,...a.specifications].map(a2).join("\n")}function a4(a,b){let c=[{label:"工期",corpus:a3({...b,project:[],quality:[],safety:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/工期|日历天|合同工期|计划工期/u},{label:"质量",corpus:a3({...b,project:[],schedule:[],safety:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/质量目标|质量标准|验收|复验/u},{label:"安全",corpus:a3({...b,project:[],schedule:[],quality:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/安全|文明|风险|应急/u},{label:"资源",corpus:a3({...b,project:[],schedule:[],quality:[],safety:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/资源|材料|设备|劳动力/u},{label:"工程量",corpus:a3({...b,project:[],schedule:[],quality:[],safety:[],resources:[],preciseFacts:[],drawings:[],rules:[],specifications:[]}),required:/工程量|清单|建筑面积|长度|吨|台|套|项/u}],d=(0,R.K3)(a.replace(/\s+/gu,"")),e=[];for(let b of c)b.required.test(a)&&0===[...new Set(b.corpus.split("\n").map(a=>a.replace(/\s+/gu,"").slice(0,24)).filter(Boolean))].filter(a=>a.length>=6&&d.includes(a)).length&&e.push({level:"warning",message:`证据使用覆盖率偏低:正文中未明显使用${b.label}相关事实`,suggestion:`请在相应章节中引用至少一项${b.label}事实,避免只写通用表述。`});return e}function a5(a){let b=[],c=new Map(a.map(a=>[a.title,a.content])),d=a.map(a=>`${a.title}
|
|
38
|
+
${a.content}`).join("\n\n");return/进度|工期/u.test(d)&&/资源|材料|设备|劳动力/u.test(d)&&!/保障|投入|调配|进场|计划/u.test(c.get(a.find(a=>/资源|材料|设备|劳动力/u.test(a.title))?.title||"")||"")&&b.push({level:"warning",message:"章节逻辑依赖不足:进度章节与资源章节之间缺少明显支撑关系",suggestion:"请在资源章节补充与工期目标相匹配的劳动力、材料、设备投入和调配计划。"}),/质量/u.test(d)&&/施工|工艺|技术/u.test(d)&&!/验收|复验|控制点|交底|隐蔽/u.test(d)&&b.push({level:"warning",message:"章节逻辑依赖不足:质量章节未明显支撑施工工艺控制",suggestion:"请在施工技术和质量章节之间补齐工艺控制点、验收要求和整改复验闭环。"}),/安全|文明|风险/u.test(d)&&!/应急|检查|整改|巡查|培训|演练/u.test(d)&&b.push({level:"warning",message:"章节逻辑依赖不足:安全章节缺少检查整改和应急支撑",suggestion:"请补齐风险识别、检查整改、应急响应和演练闭环。"}),b}let a6=[{label:"工程名称",factGroups:["project"],patterns:[/工程名称\s*[::]\s*([^\n|]+)/u],locations:"封面、工程概况、页眉页脚、专项方案、表格标题"},{label:"建设地点",factGroups:["project"],patterns:[/建设地点\s*[::]\s*([^\n|]+)/u,/工程地点\s*[::]\s*([^\n|]+)/u],locations:"工程概况、周边环境、扬尘噪声、交通导改、属地化措施"},{label:"总工期",factGroups:["schedule"],patterns:[/总工期\s*[::]\s*([^\n|]+)/u,/计划工期\s*[::]\s*([^\n|]+)/u,/工期目标\s*[::]\s*([^\n|]+)/u],locations:"工程概况、进度计划、横道图、资源计划、纠偏措施"},{label:"建设规模",factGroups:["project","preciseFacts"],patterns:[/建设规模\s*[::]\s*([^\n|]+)/u,/建筑面积\s*[::]\s*([^\n|]+)/u,/道路长度\s*[::]\s*([^\n|]+)/u,/管线长度\s*[::]\s*([^\n|]+)/u],locations:"工程概况、工程量表、施工部署、资源配置"},{label:"机械数量型号",factGroups:["resources"],patterns:[/([\p{Script=Han}A-Za-z0-9]+(?:机|吊|泵|车))\s*[^\n|]{0,12}(\d+)\s*(台|套|辆)/u],locations:"机械表、平面布置、进度保障、安全专项方案"},{label:"劳动力人数",factGroups:["resources"],patterns:[/劳动力\s*[^\n|]{0,12}(\d+)\s*人/u,/班组\s*[^\n|]{0,12}(\d+)\s*人/u],locations:"劳动力计划、进度节点、抢工方案、工资保障台账"},{label:"危大工程清单",factGroups:["safety","preciseFacts"],patterns:[/危大工程\s*[::]\s*([^\n|]+)/u,/深基坑|高支模|起重吊装|脚手架/u],locations:"安全章节、专项方案、审批表、应急预案"},{label:"环保监测指标",factGroups:["quality","safety","preciseFacts"],patterns:[/PM10|PM2\.5|TSP|噪声|扬尘在线监测/u],locations:"文明施工、扬尘噪声、智慧工地、应急联动"}];function a7(a){return a.replace(/[\s,。;;::|]/gu,"").trim()}let a8=/塔式起重机|履带吊|汽车吊|卷扬机|脚手架|扣件|钢管|模板|噪声|PM2\.5|PM10|TSP|扬尘在线监测|临电|消防|安全网|围挡|洗车台|沉淀池|雾炮/u,a9=/不使用|不采用|不配置|无需|未采用|不得使用|禁止使用/u;function ba(a,b){let c=[];for(let d of b){let b=a[d];if(Array.isArray(b))for(let a of b)a&&"object"==typeof a&&"value"in a&&"string"==typeof a.value&&c.push(a.value)}return c.map(a7).filter(Boolean)}let bb={project:"项目基础事实",schedule:"工期与节点",quality:"质量目标与验收",safety:"安全文明要求",resources:"资源投入依据",quantities:"清单/图纸/工程量事实",rules:"规范规则与验收要求"};var bc=c(98632),bd=c(28103),be=c(42484);function bf(a,b){return b<=0?100*(a>0):Math.min(120,a/b*100)}function bg(...a){return a.flat()}var bh=c(87942),bi=c(48161);function bj(a,b){try{P.appendFileSync(e.join(function(){let a=e.join(bi.homedir(),".customize-agent","cache","document-workflow","case-log");return P.mkdirSync(a,{recursive:!0}),a}(),a),`${JSON.stringify(b)}
|
|
39
|
+
`,"utf-8")}catch{}}var bk=c(28366);let bl=[{key:"project_name",label:"项目名称",aliases:["项目名称","工程名称","招标项目名称"],valueType:"text"},{key:"project_code",label:"项目编号",aliases:["项目编号","招标项目编号","工程编号"],valueType:"identifier"},{key:"owner",label:"招标人",aliases:["招标人","项目业主","建设单位","发包人","采购人"],valueType:"organization"},{key:"project_location",label:"建设地点",aliases:["建设地点","实施地点","服务地点","交付地点"],valueType:"location"},{key:"project_scale",label:"建设规模",aliases:["建设规模","工程规模","项目规模"],valueType:"scale"},{key:"schedule_requirement",label:"计划工期",aliases:["计划工期","合同工期","总工期","工期","实施周期","服务期限"],valueType:"duration"},{key:"quality_standard",label:"质量标准",aliases:["质量标准","质量目标","验收标准","服务标准"],valueType:"standard"},{key:"project_investment_estimate",label:"合同估算价",aliases:["合同估算价","合同估算价格","投资估算","估算价格","最高投标限价","招标控制价","预算金额"],valueType:"money"}];function bm(a){return/^(见|详见|参见|按|以).{0,30}(招标公告|招标文件|投标人须知|前附表|合同|附件|图纸|清单|约定|规定|执行)/u.test(a)||/见招标公告|见投标人须知前附表|详见|按.*执行/u.test(a)}function bn(a,b){switch(b.valueType){case"duration":if(!/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年)/u.test(a))return{rejected:!0,score:-80,reason:"缺少明确工期数值和时间单位"};return{rejected:!1,score:45,reason:"包含明确工期数值和时间单位"};case"money":if(!/\d+(?:\.\d+)?\s*(?:万元|元|亿元)/u.test(a))return{rejected:!0,score:-80,reason:"缺少明确金额数值和单位"};if(/综合单价|税率|增值税|利润|报价明细/u.test(a))return{rejected:!0,score:-90,reason:"命中非目标商务明细"};return{rejected:!1,score:45,reason:"包含明确金额数值和单位"};case"standard":if(!/合格|优良|一次性验收|达到|满足|符合/u.test(a))return{rejected:!0,score:-70,reason:"不符合标准类字段表达"};if(/工期|投标|技术标准|有效期/u.test(a))return{rejected:!0,score:-90,reason:"标准字段包含其他字段或投标条款"};return{rejected:!1,score:40,reason:"符合标准类字段表达"};case"location":if(bm(a))return{rejected:!1,score:-40,reason:"引用型地点弱值"};if(!/(省|市|区|县|镇|街道|路|园区|大道|巷|内|号)/u.test(a))return{rejected:!1,score:-10,reason:"地点具体性不足"};return{rejected:!1,score:35,reason:"包含具体地址特征"};case"organization":if(/监督管理部门|投标人|中标候选人|评标委员会/u.test(a))return{rejected:!0,score:-90,reason:"组织字段角色串位"};if(/(公司|集团|单位|委员会|机关|中心|局|院|所|政府|运营管理)/u.test(a))return{rejected:!1,score:35,reason:"包含组织名称特征"};return{rejected:!1,score:5,reason:"组织名称特征较弱"};case"identifier":if(!/^[A-Za-z0-9\-_.()()]+$/u.test(a))return{rejected:!0,score:-70,reason:"编号格式不合法"};if(/(?:㎡|m²|m2|m3|m³|平方米|米|万元|元|日历天|个月)/u.test(a))return{rejected:!0,score:-60,reason:"编号中混入量纲单位,疑似字段串位"};return{rejected:!1,score:35,reason:"符合编号格式"};case"scale":if(/\d+(?:\.\d+)?\s*(?:㎡|平方米|m²|米|m|层|栋|座|万元|元)/iu.test(a))return{rejected:!1,score:30,reason:"包含规模数值或单位"};return{rejected:!1,score:5,reason:"规模字段为文本描述"};default:if("project_name"===b.key){if(/存在部位|风险等级|管控措施|监测频次|闭环要求|序号|内容|范围|不适用/u.test(a))return{rejected:!0,score:-90,reason:"项目名称字段串位或表头噪声"};if(!/项目|工程|学院|宿舍|楼|校区|施工总承包/u.test(a))return{rejected:!0,score:-70,reason:"项目名称缺少工程名称特征"};return{rejected:!1,score:35,reason:"符合项目名称特征"}}return{rejected:!1,score:a.length>=2?10:-20,reason:"文本字段"}}}function bo(a,b){let c=X(a.value),d=[],e=30,f=!1;(!c||c.length>260)&&(f=!0,e-=100,d.push("空值或过长")),/###|投标文件的编制|备选投标方案|投标将被否决|投标人提供|投标有效期|电子交易系统|公共资源交易监督管理部门|中标候选|评标委员会|实质性内容作出响应|招标人有权核查/u.test(c)&&(f=!0,e-=100,d.push("大段条款或 Markdown 噪声")),bl.some(a=>a.key!==b.key&&a.aliases.some(a=>c.includes(a)))&&(e-=45,d.push("包含其他字段名,疑似字段串位")),bm(c)&&(e-=35,d.push("引用型弱值"));let g=bn(c,b);return e+=g.score,d.push(g.reason),g.rejected&&(f=!0),"evidence"===a.sourceType&&(e+=20,d.push("来源为证据原文")),a.sourceName&&/补疑|答疑|澄清|补充|更正|修改/u.test(a.sourceName)&&(e+=35,d.push("补疑/澄清类修正文件,权威最高")),a.sourceName&&/招标文件|招标公告|前附表|合同|需求书|正文/u.test(a.sourceName)&&(e+=15,d.push("来源文件可信")),"generated_markdown"===a.sourceType&&(e-=10),{...a,value:c,confidence:e,rejected:f,reasons:d}}function bp(a){return function(a,b=bl){let c=new Map;for(let d of b){let b=a.filter(a=>a.fieldKey===d.key).sort((a,b)=>b.confidence-a.confidence),e=b.find(a=>!a.rejected&&a.confidence>0);e&&c.set(d.key,{fieldKey:d.key,label:d.label,value:e.value,source:e.sourceName||e.sourceType,confidence:e.confidence,candidates:b,selectedReason:e.reasons.join(";")})}return c}([...function(a){let b=[];for(let c of a){let a=function(a){let b=`${a.fieldId||""}${a.key||""}${a.fieldName||""}`;return bl.find(c=>c.key===a.fieldId||c.aliases.some(a=>b.includes(a)))}(c);if(!a)continue;let d=(0,z.lG)(c.value);b.push(bo({fieldKey:a.key,label:a.label,value:d,sourceType:"structured_fact",sourceName:c.sourceFile||c.sourceRef?.sectionTitle||"structured_fact"},a))}return b}(a.facts),...function(a,b="generated_markdown"){let c=[];for(let d of a.split(/\r?\n/u)){if(!/^\|.*\|\s*$/u.test(d)||/^\|\s*:?-{3,}:?/u.test(d))continue;let a=d.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.replace(/\*\*/gu,"").trim());if(a.length<2)continue;let e="序号"===a[0]&&a.length>=3?a[1]:a[0],f="序号"===a[0]&&a.length>=3?a[2]:a[1],g="序号"===a[0]&&a.length>=4?a[3]:a[2],h=bl.find(a=>a.aliases.some(a=>e.includes(a))||a.label===e);!h||!f||/内容|参数|资料未明确|系统暂未确认|暂未从知识库确认/u.test(f)||c.push(bo({fieldKey:h.key,label:h.label,value:f,sourceType:"generated_markdown",sourceName:g||b},h))}return c}(a.markdown||"")])}function bq(a){return({user:100,addendum:96,contract:90,tender:85,boq:75,drawing:70,standard:60,evidence:55,structured_fact:50,projectGraph:40,generated_markdown:30,derived:20,unknown:10})[a]}function br(a){let b=e.join(process.env.HOME||process.cwd(),".customize-agent","cache","document-workflow",(0,z.c6)(a||"default"));return P.mkdirSync(b,{recursive:!0}),b}let bs=new Map;function bt(a){let b=bs.get(a);return b||(b=RegExp(a,"u"),bs.set(a,b)),b}function bu(a,b=(0,bk.bC)()){let c=[];for(let d of["area","cost","duration","floors","parkingSpaces"]){let e=new Set,f=[];for(let c of a){let a=(0,z.lG)(c.value),g=function(a,b){let c=`${a||""} ${b||""}`;return/补疑|答疑|澄清|补充|更正|修改/u.test(c)?95:/合同/u.test(c)?90:/招标文件|招标公告|前附表|投标人须知|需求书/u.test(c)?85:/清单|工程量|BOQ|编制说明/u.test(c)?75:/图纸|设计/u.test(c)?70:50}(c.sourceFile,c.roleId);for(let h of function(a,b,c,d){let e=[],f="area"===b?/总?建筑面积|建设规模/u:"cost"===b?/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价|工程总投资|总投资|工程造价/u:"floors"===b?/总?层数|建筑层数|地上层数|地下层数|楼层数/u:"parkingSpaces"===b?/总?车位|停车位|机动车位|车位数/u:/计划工期|合同工期|总工期|施工周期/u,g="floors"===b||"parkingSpaces"===b?"\\d+(?:[.,]\\d+)?":"\\d{2,}(?:[.,]\\d+)?",h=RegExp(`(?:${f.source})(?:[^0-9\\n]{0,14}?)(${g})\\s*${"area"===b?"(万?㎡|万?m\xb2|万?m2|万?平方米)":"cost"===b?"(万元|亿元|万?元)":"floors"===b?"(层)":"parkingSpaces"===b?"(个|个车位|个停车位)":"(日历天|天|个月|月)"}`,"giu"),i=RegExp(g,"u");for(let g of a.matchAll(h)){let h,j=g[0].match(f),k=j?.[0]||"",l=g[1].replace(/[,,]/gu,"").trim(),m=(g[2]||"").trim();if(!k||!l||!i.test(l))continue;let n=(g.index??0)+(j?.index??0),o=(g.index??0)+g[0].indexOf(g[1]),p=o-(n+k.length),q=function(a,b,c,d,e,f){let g=a.slice(Math.max(0,b-10),b),h=a.slice(b+c,d),i=`${g}${h}`,{addendumSource:j,amendmentContext:k,thresholdComparison:l,aspirationalPrefix:m}=f.factGovernance;return bt(j).test(e||"")&&bt(k).test(i)?"amendment":bt(l).test(i)?"threshold":bt(m).test(g)?"aspirational":"ontological"}(a,n,k.length,o,c,d);if("threshold"!==q&&"aspirational"!==q){if("duration"===b||"floors"===b||"parkingSpaces"===b)h=`${l}|${m}`;else{let a=+!!/万/u.test(m),b=Number(l)*(a?1e4:1);if(!Number.isFinite(b))continue;h=String(/亿元/u.test(m)?1e8*b:/万元/u.test(m)?1e4*b:b)}e.push({scope:k,value:l,unit:m,compareKey:h,contextClass:q,anchorScore:(p<=3?3:p<=9?2:1)+("ontological"===q||"amendment"===q?2:1),gapLength:p})}}return e}(a,d,c.sourceFile,b)){let a=`${c.sourceFile||""}|${h.scope}|${h.compareKey}`;e.has(a)||(e.add(a),f.push({...h,sourceFile:c.sourceFile,priority:g}))}}if(!(f.length<2))for(let[a,e]of f.reduce((a,b)=>{let c=b.scope.replace(/^总/u,""),d=a.get(c)||[];return d.push(b),a.set(c,d),a},new Map)){let f;if(new Set(e.map(a=>a.compareKey)).size<2||new Set(e.map(a=>a.sourceFile).filter(Boolean)).size<2)continue;let g=Math.max(...e.map(a=>a.priority)),h=e.filter(a=>a.priority===g),i=Math.max(...h.map(a=>a.anchorScore)),j=h.filter(a=>a.anchorScore===i),k=1===new Set(j.map(a=>a.compareKey)).size?j[0]:void 0;if(k){let a=k.gapLength>b.factGovernance.weakAnchorGapThreshold;f="amendment"===k.contextClass?a?"medium":"high":a?"low":"medium"}c.push({kind:d,scope:`${a}(${"area"===d?"面积":"cost"===d?"金额":"floors"===d?"层数":"parkingSpaces"===d?"车位数":"工期"}口径)`,values:[...new Map(e.map(a=>[`${a.value}${a.unit}|${a.sourceFile||""}`,{value:a.value,unit:a.unit,sourceFile:a.sourceFile,priority:a.priority}])).values()],resolution:k?`${k.value}${k.unit}`:void 0,...f?{confidence:f}:{}})}}return c}function bv(a){let b=new Map;for(let c of a){if(!c.resolution||"low"===c.confidence||b.has(c.kind))continue;let a=c.values.find(a=>`${a.value}${a.unit}`===c.resolution),d=a?a.value.replace(/[,,]/gu,""):"",e=c.values.filter(a=>`${a.value}${a.unit}`!==c.resolution).map(a=>({value:a.value.replace(/[,,]/gu,""),unit:a.unit}));d&&0!==e.length&&b.set(c.kind,{winnerNum:d,losers:e})}return b}function bw(a,b){return b?.length?a.map(a=>{let c=function(a,b){let c=a;for(let{winnerNum:a,losers:d}of bv(b).values())for(let b of d)b.unit&&c.includes(`${b.value}${b.unit}`)?c=c.split(`${b.value}${b.unit}`).join(`${a}${b.unit}`):c.includes(b.value)&&(c=c.split(b.value).join(a));return c}(a.content,b);return c===a.content?a:{...a,content:c}}):a}function bx(a,b){let c=bv(b);if(0===c.size)return a;let d={area:/建设规模|工程规模|建筑面积|用地面积|占地面积|project_scale|scale/u,cost:/合同估算|投资估算|最高投标限价|招标控制价|总投资|工程造价|project_cost|cost|price|amount/u,duration:/计划工期|合同工期|总工期|施工周期|duration|schedule/u,floors:/总层数|建筑层数|地上层数|地下层数|楼层数|project_floors|floors/u,parkingSpaces:/总车位|停车位|机动车位|车位数|project_parking|parking/u};return a.map(a=>{let b=[...c.keys()].find(b=>d[b].test(a.key)||d[b].test(a.value));if(!b)return a;let{winnerNum:e,losers:f}=c.get(b),g=a.value,h=!1;for(let a of f)a.unit&&g.includes(`${a.value}${a.unit}`)?(g=g.split(`${a.value}${a.unit}`).join(`${e}${a.unit}`),h=!0):g.includes(a.value)&&(g=g.split(a.value).join(e),h=!0);return h?{...a,value:g}:a})}var by=c(32434),bz=c(22213);function bA(a){return a.some(a=>"error"!==a.level&&"blocker"!==a.severity&&/正文不足,未达到任务最小深度/u.test(a.message))}function bB(a,b){let c=a?.[b];return c&&c.length>0?c[0]:b}function bC(a,b){return 0>=(0,w.V7)(a.content)?"failed":"completed"}let bD=["项目名称 项目编号 招标人 项目概况与招标范围 建设地点 建设规模 计划工期 质量标准 合同估算价","计划工期 合同工期 总工期 日历天","合同估算价 合同估算价格 投资估算 最高投标限价 招标控制价","质量标准 质量目标 合格","建设地点 建设规模 招标范围"];function bE(a){let b=X(a),c=0;return/项目名称|工程名称|招标项目名称|项目编号|招标项目编号|招标人|建设单位|发包人/u.test(b)&&(c+=4),/计划工期|合同工期|总工期|\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年)/u.test(b)&&(c+=6),/合同估算价|投资估算|最高投标限价|招标控制价|\d+(?:\.\d+)?\s*(?:万元|元)/u.test(b)&&(c+=5),/质量标准|质量目标|合格|优良/u.test(b)&&(c+=4),/建设地点|建设规模|招标范围|项目概况与招标范围/u.test(b)&&(c+=4),/工程量|清单|图纸|设计说明|施工范围|施工内容|材料|设备|工艺|验收|复试|检测/u.test(b)&&(c+=3),/投标人须知|保证金|付款|违约金|电子交易|公共资源|开标|评标|合同协议书/u.test(b)&&(c-=4),c}async function bF(a){let b=[],c=new Set(a.scopedFilePaths),d=await Promise.all(bD.map(async b=>((0,z.Te)(a.signal),(await a.manager.search(a.projectRoot,b,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:10,weights:{keyword:.65,vector:.25,rewrite:.8,hybridBonus:.2},generationMode:!1})).results.filter(a=>c.has(a.filePath)&&bE(`${a.sectionTitle||""}
|
|
40
|
+
${a.content}`)>0).map(b=>({chapterId:"project-basic",filePath:b.filePath,score:Math.max(b.score,1)+bE(`${b.sectionTitle||""}
|
|
41
|
+
${b.content}`),content:b.content,roleId:a.fileRoleByPath.get(b.filePath),processingType:a.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"pinned-evidence"})))));for(let c of(b.push(...d.flat()),a.scopedFilePaths)){(0,z.Te)(a.signal);let d=a.project.getFileDetail?.(c,{maxChunkContentChars:12e3});if(d?.chunks?.length)for(let e of d.chunks){let f=bE(`${e.sectionTitle||""}
|
|
42
|
+
${e.content||""}`);if(f<=0)continue;let g=d.file?.relativePath||c;b.push({chapterId:"project-basic",filePath:g,score:1+f,content:e.content,roleId:a.fileRoleByPath.get(g),processingType:a.fileProcessingByPath.get(g),sectionTitle:e.sectionTitle,source:"pinned-evidence"})}}let e=new Set;return b.sort((a,b)=>b.score-a.score).filter(a=>{let b=`${a.filePath}|${a.sectionTitle||""}|${X(a.content).slice(0,180)}`;return!e.has(b)&&(e.add(b),!0)}).slice(0,24)}function bG(a){return a.filter(a=>/项目名称|工程名称|项目编号|招标项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`))}function bH(a){return X(a).replace(/[。;;]$/u,"").trim()}function bI(a,b="",c=b){let d=function(a){let b=new Map;for(let c of a.split(/\r?\n/u)){if(!/^\|.*\|\s*$/u.test(c)||/^\|\s*:?-{3,}:?/u.test(c))continue;let a=c.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.replace(/\*\*/gu,"").trim());if(a.length<2)continue;let d="序号"===a[0]&&a.length>=3?a[1]:a[0],e="序号"===a[0]&&a.length>=3?a[2]:a[1],f="序号"===a[0]&&a.length>=4?a[3]:a[2],g=d.replace(/\/|:|:/gu,"").trim();if(!/项目名称|工程名称|项目编号|招标项目编号|招标人|项目业主|建设单位|发包人|建设地点|建设规模|施工范围|招标范围|计划工期|合同工期|质量标准|合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(g))continue;let h=/计划工期|合同工期/u.test(g)?"schedule_requirement":/质量标准/u.test(g)?"quality_standard":/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(g)?"project_investment_estimate":/招标人|项目业主|建设单位|发包人/u.test(g)?"owner":/建设地点/u.test(g)?"project_location":/项目编号|招标项目编号/u.test(g)?"project_code":void 0;!(!e||/内容|参数|资料未明确|系统暂未从知识库确认|项目资料暂未明确/u.test(e))&&Z(h||"project_name",e)&&b.set(g,[bH(e),bH(f||"项目资料")||"项目资料"])}return b}(b),e=bp({facts:a,markdown:c}),f=a=>bH((0,z.lG)(a||"")).replace(/\|/gu,"").replace(/\bCOL\d+\b/gu,"").replace(/\s{2,}/gu," ").trim(),g=(a,b)=>{let g=e.get(a);if(g){let b=f(g.value);if(b&&Z(a,b))return[b,g.source||"项目资料"]}return function(a,b){for(let[c,d]of a.entries())if(b.some(a=>a.test(c)))return d}(d,b)||("project_name"===a?(()=>{let a=[/([\u4e00-\u9fa5A-Za-z0-9()()\-—_\s·]+?(?:施工总承包项目|一期项目|学生宿舍一期|学生宿舍项目))/u.exec(c)?.[1],/项目名称[::\s|]+([^|\n。;;]{6,80})/u.exec(c)?.[1]].map(f).filter(a=>a&&Z("project_name",a));return a[0]?[a[0],"项目资料"]:void 0})():void 0)||["",""]};return[["项目名称",...g("project_name",[/项目名称|工程名称|project_name/u])],["项目编号",...g("project_code",[/项目编号|招标项目编号|project_code/u])],["招标人",...g("owner",[/招标人|项目业主|建设单位|发包人|owner/u])],["建设地点",...g("project_location",[/建设地点|project_location/u])],["建设规模",...g("project_scale",[/建设规模|project_scale/u])],["计划工期",...g("schedule_requirement",[/计划工期|合同工期|周期要求|schedule_requirement/u])],["质量标准",...g("quality_standard",[/质量标准|quality_standard/u])],["合同估算价",...g("project_investment_estimate",[/合同估算|投资估算|最高投标限价|招标控制价|project_investment_estimate/u])]].filter(([,a])=>!!a).map(([a,b,c])=>[a,b,c||"项目资料"])}function bJ(a,b="",c=b){return["**项目基本信息表**","","| 信息项 | 内容 |","|---|---|",...bI(a,b,c).map(a=>`| ${a[0]} | ${a[1]} |`)].join("\n")}function bK(a){return/^\s*\|?\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a.trim())}function bL(a){let b=a.trim();if(!b||/^#{1,6}\s+/u.test(b)||bK(b))return!1;let c=(b.match(/\|/gu)||[]).length;return c>=2||c>=1&&/^\s*\|/u.test(b)||c>=1&&/\|\s*$/u.test(b)}function bM(a){return a.trim().replace(/^\|/u,"").replace(/\|$/u,"").trim().split("|").map(a=>a.trim())}function bN(a,b){let c=a.slice(0,b);for(;c.length<b;)c.push("");return`| ${c.join(" | ")} |`}function bO(a){let b=a.replace(/\r?\n/gu,"\n").split("\n"),c=[];for(let a=0;a<b.length;){let d=b[a]||"",e=b[a+1]?.trim()===""?a+2:a+1,f=b[e]||"";if(bL(d)&&bK(f)){for(c.push(d),e!==a+1&&c.push(b[a+1]||""),c.push(f),a=e+1;a<b.length&&bL(b[a]||"");)c.push(b[a]||""),a+=1;continue}if(!bL(d)){c.push(d),a+=1;continue}let g=[],h=a;for(;h<b.length&&bL(b[h]||"");)g.push(b[h]||""),h+=1;let i=g.map(a=>bM(a)),j=i.map(a=>a.length),k=j[0]||0,l=/^(?:项目名称|工程名称|项目编号|招标人|建设单位|建设地点|建设规模|计划工期|质量标准|合同估算价|招标范围)$/u;if(g.length<2||k<2||j.some(a=>a!==k)||i.some(a=>l.test(a[0]||""))){c.push(...g),a=h;continue}for(let a of(c.length>0&&c[c.length-1]?.trim()&&c.push(""),c.push(bN(function(a){if(2===a)return["信息项","内容"];let b=["控制项目","执行要求","责任岗位","检查标准","形成资料","闭环要求","备注"];return Array.from({length:a},(a,c)=>b[c]||`补充说明${c+1}`)}(k),k)),c.push(bN(Array.from({length:k},()=>"---"),k)),g))c.push(bN(bM(a),k));(a=h)<b.length&&b[a]?.trim()&&c.push("")}return c.join("\n").replace(/\n{3,}/gu,"\n\n")}function bP(a){let b=a.replace(/\r?\n/gu,"\n").split("\n"),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>/^\s*\|.*\|\s*$/u.test(a),f=a=>/^\s*\|\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a),g=a=>`| ${a.join(" | ")} |`;for(let a=0;a<b.length;){let h=b[a]||"",i=b[a+1]||"";if(!e(h)||!f(i)){c.push(h),a+=1;continue}let j=d(h),k=j.map((a,b)=>/^(?:资料来源|资料来源\/(?:说明|证明)|来源|证明)$/u.test(a)?b:-1).filter(a=>a>=0);if(0===k.length){c.push(h),a+=1;continue}let l=a=>a.filter((a,b)=>!k.includes(b));for(c.push(g(l(j))),c.push(g(l(d(i)).map(a=>a||"---"))),a+=2;a<b.length&&e(b[a]||"");)c.push(g(l(d(b[a]||"")))),a+=1}return c.join("\n").replace(/资料来源\/(?:说明|证明)/gu,"")}function bQ(a){let b=[/^项目名称$/u,/^工程名称$/u,/^项目编号$/u,/^招标项目编号$/u,/^招标人$/u,/^项目业主$/u,/^建设单位$/u,/^发包人$/u,/^建设地点$/u,/^实施地点$/u,/^建设规模$/u,/^工程规模$/u,/^计划工期$/u,/^合同工期$/u,/^总工期$/u,/^质量标准$/u,/^质量目标$/u,/^合同估算价$/u,/^投资估算$/u,/^最高投标限价$/u,/^招标控制价$/u],c=a.replace(/\r?\n/gu,"\n").split("\n"),d=[],e=!1,f=a=>bM(a).map(a=>a.replace(/\*\*/gu,"").trim()),g=a=>b.some(b=>b.test(a)),h=a=>{let b=a.slice(2).map(f).filter(a=>a.length>=2).map(a=>a[0]||""),c=b.filter(g).length;return c>=3&&c>=Math.ceil(.45*b.length)};for(let a=0;a<c.length;){let b=c[a]||"",f=c[a+1]||"";if(/(?:\*\*[^\n]*项目基本信息表[^\n]*\*\*|####\s+[^\n]*项目基本信息表[^\n]*|###\s+[^\n]*项目基本信息表[^\n]*)/u.test(b)){let f=[b];for(a+=1;a<c.length&&!(bL(c[a]||"")&&bK(c[a+1]||""))&&""===(c[a]||"").trim();)f.push(c[a]||""),a+=1;if(a<c.length&&bL(c[a]||"")&&bK(c[a+1]||""))for(f.push(c[a]||"",c[a+1]||""),a+=2;a<c.length&&bL(c[a]||"");)f.push(c[a]||""),a+=1;e||(e=!0,d.push(...f));continue}if(/^###\s+(?:\d+\.\d+\s+)?(?:项目基本信息|工程概况|项目概况)\s*$/u.test(b)){let f=[b];for(a+=1;a<c.length&&!(bL(c[a]||"")&&bK(c[a+1]||""))&&!/^###\s+/u.test(c[a]||"");)f.push(c[a]||""),a+=1;if(a<c.length&&bL(c[a]||"")&&bK(c[a+1]||"")){let g=[c[a]||"",c[a+1]||""];for(a+=2;a<c.length&&bL(c[a]||"");)g.push(c[a]||""),a+=1;if(h(g)){if(e){let a=f.filter(a=>a.trim()&&!/^###\s+/u.test(a));a.length&&d.push(b,...a)}else e=!0,d.push(...f,...g);continue}d.push(...f,...g);continue}d.push(...f);continue}if(bL(b)&&bK(f)){let g=[b,f];for(a+=2;a<c.length&&bL(c[a]||"");)g.push(c[a]||""),a+=1;if(h(g)){e||(e=!0,d.push(...g));continue}d.push(...g);continue}d.push(b),a+=1}return d.join("\n").replace(/\n{3,}/gu,"\n\n").replace(/\n{1,2}\|\s*信息项\s*\|\s*内容\s*\|\s*\n+(?:该小节围绕[^\n]*\n+)+\|\s*:?-{3,}:?\s*\|\s*:?-{3,}:?\s*\|\s*/gu,"\n\n")}function bR(a,b){if(a=((a,b)=>{let c=a.split("\n"),d=[];for(let a=0;a<c.length;a+=1){let e=c[a]||"",f=/^(#{3,5})\s+(.+)$/u.exec(e.trim()),g=f?.[2]?.replace(/^\d+(?:\.\d+)*\s+/u,"").trim()||"";if(f&&b.some(a=>a.test(g))){for(a+=1;a<c.length&&!/^#{2,5}\s+/u.test((c[a]||"").trim());)a+=1;a-=1;continue}d.push(e)}return d.join("\n")})(a,[/^工程概况一览表$/u,/^招标文件?评分.*响应索引表$/u,/^招标评分项响应索引表$/u]).replace(/\*\*(?:工程概况一览表|招标文件?评分.*响应索引表|招标评分项响应索引表)\*\*[\s\S]*?(?=\n{2,}#{2,5}\s+|\n{2,}(?:[^|\n#]|$)|$)/gu,"").replace(/\n{3,}/gu,"\n\n"),!/项目基本信息|项目概况|工程概况|招标范围/u.test(a))return bQ(bO(bP(a)));if(!/\|\s*信息项\s*\|\s*内容\s*\|/u.test(a)&&bG(b).length>0){let c=/^(###\s+(?:\d+\.\d+\s+)?[^\n]*(?:项目概况|工程概况|项目基本信息|招标范围)[^\n]*\n)/mu.exec(a);if(c?.index||c?.index===0){let d=c.index+c[0].length,e=`${bJ(b,"",a)}
|
|
43
|
+
|
|
44
|
+
`;a=`${a.slice(0,d)}
|
|
45
|
+
${e}${a.slice(d).trimStart()}`}}let c=/^(###\s+(?:\d+\.\d+\s+)?[^\n]*(?:项目概况|工程概况|项目基本信息|招标范围)[^\n]*\n)/mu.exec(a);if(!c?.index&&c?.index!==0)return a;let d=c.index,e=d+c[0].length,f=/^###\s+/gmu;f.lastIndex=e;let g=f.exec(a),h=g?.index??a.length,i=a.slice(e,h),j=bJ(b,i,a);if(!bI(b,i,a).some(a=>!/资料未明确|系统暂未从知识库确认|项目资料暂未明确/u.test(a[1])))return a;let k=i.replace(/\*\*项目基本信息表\*\*[\s\S]*?(?=\n\n(?:[^|\n]|$)|$)/u,"").replace(/\|\s*(?:序号\s*\|\s*项目名称\s*\|\s*内容参数|信息项\s*\|\s*内容\s*(?:\|\s*资料来源\/(?:说明|证明))?)\s*\|[\s\S]*?(?=\n\n(?:[^|\n]|$)|$)/u,"").replace(/^\|\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|\s*\n(?:^\|.*\|\s*\n?)*/gmu,"").replace(/该小节围绕“[^”]+”进行补充说明[^\n]*(?:\n\n该小节围绕“[^”]+”进行补充说明[^\n]*)*/gu,"").replace(/\n{3,}/gu,"\n\n").trim(),l=`${c[0].trimEnd()}
|
|
46
|
+
|
|
47
|
+
${j}${k?`
|
|
48
|
+
|
|
49
|
+
${k}`:""}
|
|
50
|
+
|
|
51
|
+
`;return bQ(bO(bP(`${a.slice(0,d)}${l}${a.slice(h).trimStart()}`)))}let bS=["资料未明确","系统暂未","项目资料暂未","暂未明确","待确认","待资料复核","待系统","未检索到","资料不足","无法确认","建议补充","可核验信息","知识库","COL"];function bT(a,b){var c;return(function(a){let b=a.split(/\r?\n/u),c=[],d=/^(施工概况|施工流程|施工方法)[::]/u,e=!1,f=!1;for(let a=0;a<b.length;a+=1){let g=b[a],h=g.trim();if(/^###\s+/u.test(h)){e=/项目主要施工内容/u.test(h),f=!1,c.push(g);continue}if(/^##\s+/u.test(h)){e=!1,f=!1,c.push(g);continue}if(!e){c.push(g);continue}if(/^####\s+/u.test(h)){f=!0,c.push(g);continue}if(/^#{1,6}\s+/u.test(h)){f=!1,c.push(g);continue}if(f&&h){c.push(d.test(h)?g:`施工概况:${h}`),f=!1;continue}c.push(g)}return c.join("\n")})(function(a){let b=a.split(/\r?\n/u),c=[];for(let a=0;a<b.length;a+=1){let d=b[a],e=d.trim();if(!/^(#{4,5})\s+/u.test(e)||z.V.test(e)){c.push(d);continue}let f=a+1,g=!1;for(;f<b.length;){let a=b[f].trim();if(/^#{1,6}\s+/u.test(a))break;if(a){g=!0;break}f+=1}g&&c.push(d)}return c.join("\n")}((0,v.Bl)((0,v.z1)((0,v.Re)((0,v.wi)((c=a.replace(/^\s*本表依据项目图谱[^\n。]*[。.]\s*$/gmu,"").replace(/^\s*本表依据(?:招标文件|工程量清单|施工区段|质量目标|计划工期|项目图谱|危险源辨识|材料设备清单|现场条件|图纸资料|图纸设计说明)[^\n。]*[。.]\s*$/gmu,"").replace(/^\s*表中事项应纳入[^\n。]*[。.]\s*$/gmu,"").replace(/^\s*正式输出的表格\/清单必须形成[^\n。]*[。.]\s*$/gmu,"").replace(/\n{3,}/gu,"\n\n").trim().replace(/【修复任务包】[\s\S]*?(?=\n#{1,3}\s|\n\*\*|\n\|\s|$)/gu,"").replace(/^修复类型:.*$/gmu,"").replace(/^修复对象:.*$/gmu,"").replace(/^问题:【修复任务包】[\s\S]*?(?=\n#{1,3}\s|\n\*\*|\n\|\s|$)/gu,"").replace(/^输出要求:.*$/gmu,"").replace(/重新生成/gu,"补充完善").replace(/见招标公告|见投标人须知前附表/gu,"按已确认的招标边界和施工条件执行").replace(/见招标文件/gu,"按本项目招标文件已明确的相应条款执行").replace(/招标范围:/gu,"施工范围:").replace(/主要承包人案|承包人案/gu,a=>a.replace(/承包人案/gu,"施工方案")).replace(/施工方(?!案|法|式|针|向|面)/gu,"承包人").replace(/按图纸/gu,"依据经确认的设计文件和图纸内容组织实施").replace(/按设计要求/gu,"依据设计文件明确的构造、材料、尺寸和验收要求执行").replace(/按(?:资料|文件|说明|方案|规范|标准|要求)/gu,"依据本项目已确认资料、技术文件和验收标准").replace(/满足(?:相关|有关)?要求/gu,"满足本项目已明确的质量、安全、技术和验收控制要求").replace(/本节(?:将|主要|重点)?/gu,"").replace(/本章将/gu,"").replace(/根据需要|视情况|结合实际情况/gu,"结合已确认资料、现场条件和审批后的施工组织安排").replace(/相关要求/gu,"本项目已明确的质量、安全、技术和验收要求"),!bS.some(a=>c.includes(a))?c:c.split("\n").map(a=>/^\s*#{1,6}\s/u.test(a)||/^\s*\|/u.test(a)||!bS.some(b=>a.includes(b))?a:a.split(/(?<=[。;;])/u).filter(a=>!bS.some(b=>a.includes(b))).join("")).join("\n")).split(/\n{2,}/u).map(a=>{if(/^\s*(#{1,6}\s+|[-*+]\s+|\|)/u.test(a)||a.length<=380)return a;let b=a.split(/(?<=[。;])/u).flatMap(a=>{let b=a.trim();return b?b.length>360?b.split(/(?<=[,,])/u).map(a=>a.trim()).filter(Boolean):[b]:[]}),c=[],d="";for(let a of b)d&&d.length+a.length>360?(c.push(d),d=a):d+=a;return d&&c.push(d),c.join("\n\n")}).join("\n\n"))))))).replace(/\n{3,}/gu,"\n\n").trim()}function bU(a,b){let c=a.chapterPrompts.filter(a=>"writer"===a.category||"chapter"===a.category||"formatting"===a.category),d=[...a.writerPrompts,...c,...a.formattingPrompts],e=a.writerPrompts[0],f=d.map(a=>`${"writer"===a.category?"写作控制提示词":a.category}|${a.roleId}|${a.name}|${a.content.length} 字符`),g=(0,am.fC)(a.writerPrompts),h=(0,am.fC)([...c,...a.formattingPrompts]);return{primaryPromptId:e?.id,primaryWriter:e,prompts:d,promptTexts:[g?`【最高优先级:配置写作主控提示词】
|
|
52
|
+
${g}`:"",h?`【章节/格式提示词】
|
|
53
|
+
${h}`:""].filter(Boolean).join("\n\n"),promptDetails:f}}function bV(a){return X(a).replace(/[\s,,.。::;;||()()《》<>【】"“”'‘’]/gu,"").split("[").join("").split("]").join("").toLowerCase()}function bW(a){return/工程造价|造价|报价|投标报价|报价明细|综合单价|单价|合价|金额|税率|增值税|利润|预留金|暂列金额|最高投标限价|招标控制价|合同估算价|合同估算价格|投资估算|估算价/u.test(a)}function bX(a){let b=bH((0,z.lG)(a));return!b||/资料未明确|系统暂未从知识库确认|未确认|待确认|无|暂无/u.test(b)||/###|第\s*\d+\s*页|共\s*\d+\s*页|新版交易系统|操作帮助|登录页面|见招标公告|未尽事宜|详见图纸|招标文件补疑|政府相关文件|规范等其它资料/u.test(b)||/^\d+(?:\.\d+)?\s*(?:mm|cm|m|㎡|m²|m3|m³|%|元|万元)?$/iu.test(b)||bW(b)||b.length>160?"":b}function bY(a,b,c={}){return(function(a,b,c={}){let d=b.filter(a=>{let b=`${a.key||""}${a.fieldName||""}${a.fieldId||""}`,c=(0,z.lG)(a.value);return!(bW(`${b}${c}`)||!bX(c)||/第\s*\d+\s*页|新版交易系统|操作帮助|见招标公告|未尽事宜|详见图纸|招标文件补疑|政府相关文件|规范等其它资料/u.test(`${b}${c}${a.sourceFile||""}`))&&(/项目名称|工程名称|项目编号|招标项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|计划工期|合同工期|质量标准|质量目标/u.test(b)||/危大|安全|资源|材料|机械|设备/u.test(b)&&!/^\d+(?:\.\d+)?\s*(?:mm|cm|m|㎡|m²|m3|m³|%|元|万元)?$/iu.test(c))}),e=new Set,f=[];for(let b of d){let d=bX(b.value);if(!d)continue;let g=b.fieldName||b.key||b.fieldId||"资料事实",h=`${g}:${d}`;if(!e.has(h)&&(e.add(h),!function(a,b){let c=bV(a),d=bV(b);if(!d||d.length<2||c.includes(d))return!0;let e=b.match(/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年|万元|元|平方米|㎡|m²|立方米|m³|米|m|mm|cm|台|套|人|项|%|MPa|kPa)?/giu)||[];return e.length>0&&e.some(a=>bV(a).length>=2&&c.includes(bV(a)))}(a,d)&&(f.push({fact:b,label:g,value:d}),c.maxItems&&f.length>=c.maxItems)))break}return f})(a,b,{maxItems:c.maxIssues}).map(a=>({level:"warning",message:`已确认事实未在正文中落位:${a.label}=${a.value}`,suggestion:"请将该事实自然写入对应章节或小节,不得改变原始数值和单位。"}))}function bZ(a){return/概况|项目|工程|地点|规模|工期|质量|估算/u.test(a)?{keyword:.65,vector:.25,rewrite:.8,hybridBonus:.2}:/人|材|机|资源|材料|设备|机械|劳动力/u.test(a)?{keyword:.55,vector:.35,rewrite:.75,hybridBonus:.18}:/危大|安全|文明|风险/u.test(a)?{keyword:.5,vector:.4,rewrite:.8,hybridBonus:.2}:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}}function b$(a,b,c,d){let e=b.map(b=>({...b,score:(0,s.A1)(b,a.requiredFacts)*function(a,b){let c=`${a.title} ${(a.sections||[]).join(" ")} ${a.requiredFacts.join(" ")}`;return"reference"===b?.55:"table"===b?/清单|工程量|数量|材料|设备|资源|费用|造价|范围|统计|表/u.test(c)?1.45:.95:"rule"===b?/要求|规则|招标|评审|响应|质量|安全|验收|标准|工期|进度|风险|约束/u.test(c)?1.35:.95:"drawing"===b?/图纸|设计|布置|位置|平面|剖面|立面|空间|施工方法|做法/u.test(c)?1.35:.85:"specification"===b&&/技术|规范|标准|参数|做法|质量|验收|施工方法/u.test(c)?1.3:1}(a,b.processingType)+function(a,b){let c=`${b.sectionTitle||""}
|
|
54
|
+
${b.filePath}
|
|
55
|
+
${b.content}`;return Math.min(1.8,.16*[...new Set([a.title,...a.sections||[],...a.requiredFacts].flatMap(a=>a.split(/[\s、,,。;;::()()《》【】\-/]+/u)).map(a=>a.trim()).filter(a=>a.length>=2).slice(0,36))].filter(a=>c.includes(a)).length)}(a,b)}));return(0,s.QR)(e,c,d)}function b_(a,b,c){let d=(a.sections||[]).slice(0,10).join(" "),e=a.requiredFacts.slice(0,10).join(" "),f=a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4);return[...new Set([...f.length>=2?[`${a.title} ${d} ${e}`.trim(),...f.map(b=>`${b} ${(a.sections||[]).slice(0,6).join(" ")}`.trim()),`${f.slice(0,3).join(" ")} ${e}`.trim()]:[`${a.title} ${d} ${e}`.trim()],...b,...c].filter(Boolean))]}function b0(a,b){let c=Number(process.env.DOCUMENT_MAX_QUERIES_PER_CHAPTER);return Math.max(2,Math.min(9,Math.floor(Number.isFinite(c)&&c>0?c:4)+ +((a.sections||[]).length>=6||a.requiredFacts.length>=8)+Math.min(2,b.length)))}function b1(a,b,c=!1){return Math.max(12,Math.min(c?58:26,a+10+4*((b.sections||[]).length>=6||b.requiredFacts.length>=8)+18*!!c))}async function b2(a){if((0,z.Te)(a.signal),0===a.scopedFilePaths.length)return[];let b=`${a.chapter.title} ${a.sectionTitle}`.trim(),c=await a.manager.search(a.projectRoot,b,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:5,weights:bZ(b),generationMode:!1,disableReranker:!0});return(0,s.QR)(c.results.filter(b=>a.scopedFilePaths.includes(b.filePath)).map(b=>({chapterId:a.chapter.id,filePath:b.filePath,score:b.score+1.2,content:b.content,roleId:a.fileRoleByPath.get(b.filePath),processingType:a.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"section-evidence"})),{maxItems:5,maxChars:9e3,preservePinned:!0})}function b3(a,b,c=12){if(0===b.length)return[];let d=b.slice(0,c).map(a=>e.basename(a)),f=b.length>c?` 等 ${b.length} 个文件`:"";return[`${a}:${d.join("、")}${f}`]}function b4(a,b,c){if(Number.isFinite(c)&&c>0)return Math.ceil(c);let d=new Set(b.filter(Boolean)),e=a.listFiles?.().filter(a=>0===d.size||d.has(a.relativePath)).reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0)??0;return e>0?e:Math.max(1,d.size)}let b5=[{pattern:/本小节围绕.+展开,结合绑定项目资料/u,label:"模板化开篇套话"},{pattern:/明确适用范围、控制目标、责任岗位与过程要求/u,label:"泛化目标罗列"},{pattern:/实施前应完成资料核对、技术交底和作业条件确认/u,label:"泛化前置条件"},{pattern:/交底覆盖率按\s*100%?\s*控制/u,label:"空泛交底承诺"},{pattern:/关键问题在\s*24\s*小时内形成整改责任/u,label:"空泛整改时限"},{pattern:/按施工准备→过程实施→检查验收→问题整改→资料归档的闭环组织/u,label:"通用闭环套话"},{pattern:/按作业条件确认→技术交底→过程实施→自检互检→整改复查/u,label:"通用流程套话"},{pattern:/依据本项目已确认资料中的项目边界/u,label:"资料依据套话"},{pattern:/执行日巡查、周复核和节点验收制度/u,label:"泛化巡查制度"},{pattern:/一般问题\s*7\s*日内闭环/u,label:"泛化整改时限"},{pattern:/由项目经理、技术负责人和专职安全员联合复核/u,label:"岗位名单堆砌"},{pattern:/确保与总体施工部署、工期计划和验收要求保持一致/u,label:"原则性呼应"},{pattern:/结合现场实际情况(?:,|,)?合理(?:组织|安排|布置|配置)/u,label:"结合实际套话"},{pattern:/严格(?:执行|落实|按照)国家(?:现行)?(?:有关)?(?:规范|标准|规程)/u,label:"规范泛引用"},{pattern:/做到(?:文明施工|安全生产|质量第一|安全第一)/u,label:"口号式承诺"},{pattern:/(?:确保|保证)工程(?:质量|安全|进度|文明施工)/u,label:"目标口号"},{pattern:/建立(?:健全)?(?:完善)?(?:的)?(?:管理)?体系(?:和|,)?(?:落实|确保|保证)/u,label:"体系空话"}],b6=[/主要分部分项工程施工方案/u,/主要施工方法/u,/主要施工内容/u,/施工方案/u],b7=/(?:建筑面积|面积|总建筑面积)[约]?\s*\d+(?:\.\d+)?\s*(?:㎡|m²)|计划工期\s*\d+|日历天|地上\s*\d+\s*层|框架结构|质量标准[::]?\s*合格/giu,b8=[{key:"质量标准",patterns:[/质量标准|质量要求|合格率/u]},{key:"计划工期",patterns:[/计划工期|工期要求|合同工期|日历天/u]},{key:"缺陷责任期/保修",patterns:[/缺陷责任期|保修|质保/u]},{key:"安全文明目标",patterns:[/安全.*目标|文明.*目标|安全事故.*零/u]},{key:"项目经理要求",patterns:[/项目经理|项目负责人|注册建造师/u]}];function b9(a){let b=a.split("\n"),c=[],d="",e=[];for(let a of b){let b=/^#{3,4}\s+(.+)$/u.exec(a.trim());b?((d||e.length>0)&&c.push({heading:d,body:e.join("\n")}),d=b[1].trim(),e=[]):e.push(a)}return(d||e.length>0)&&c.push({heading:d,body:e.join("\n")}),c}function ca(a){let b=[],c=new Map;for(let b of a)for(let a of b9(b.content)){let d=a.heading||b.title;for(let e of a.body.replace(/^#{1,6}\s+.*$/gmu,"").replace(/^\s*\|.*\|\s*$/gmu,"").replace(/^\s*[-|]\s*$/gmu,"").replace(/^\s*\[.*?\]\(.*?\)\s*$/gmu,"").split(/\n{1,}/u).map(a=>a.trim()).filter(a=>a.length>=60&&a.length<=400&&!/^\s*[-*]\s+/u.test(a))){let a=e.replace(/[,。,.;;::、()()【】[\]《》“”"'`\s]/gu,"");if(a.length<60)continue;let f=c.get(a)||[];f.some(a=>a.chapter===b.title&&a.section===d)||f.push({chapter:b.title,section:d}),c.set(a,f)}}let d=new Set;for(let[a,e]of c){let c=e.filter((a,b,c)=>c.findIndex(b=>b.chapter===a.chapter&&b.section===a.section)===b);if(c.length<2)continue;let f=c.map(a=>`${a.chapter}::${a.section}`).sort().join("|");if(d.has(f))continue;d.add(f);let g=e[0],h=g?`(如:${g.section} 中「${a.slice(0,30)}…」)`:"";if(b.push({level:c.length>=3?"error":"warning",severity:c.length>=3?"blocker":"warning",message:`发现相同段落出现在 ${c.length} 个不同小节:${c.map(a=>a.section).slice(0,6).join("、")}${h}`,suggestion:"每个小节必须针对其标题写专属内容,不得复制粘贴相同段落;重复小节应合并或删除后重写。"}),b.length>=8)break}return b}function cb(a){let b=[];for(let c of a){let a=b9(c.content),d=[];for(let b of a)for(let{pattern:a,label:c}of b5)a.test(b.body)&&!d.includes(c)&&d.push(c);d.length>=3?b.push({level:"error",severity:"blocker",message:`${c.title} 存在大量模板化空话(${d.slice(0,6).join("、")})`,suggestion:'删除"本小节围绕…展开""按100%控制"式套话,按"责任岗位+执行动作+量化标准+检查频次+整改时限"重写。'}):d.length>0&&b.push({level:"warning",severity:"warning",message:`${c.title} 存在模板化空话:${d.join("、")}`,suggestion:"替换为具体量化做法;同一小节不得重复出现套话段落。"})}return b}function cc(a){let b=[];for(let c of a)for(let a of b9(c.content)){if(!b6.some(b=>b.test(a.heading)||b.test(c.title)))continue;let d=new Set(a.body.match(T.aX)||[]),e=new Set(a.body.match(b7)||[]),f=new Set(a.body.match(T.LT)||[]),g=a.body.length;if(g<400)continue;let h=d.size/(g/1e3),i=/拆除|清理|清底|清运|弃置|运输|搬运/u.test(a.heading);if(0===d.size){if(f.size>=6){b.push({level:"warning",severity:"warning",message:`${c.title} / ${a.heading} 以设备配置参数为主:设备型号/容量参数 ${f.size} 项,工艺参数待补充`,suggestion:"设备清单型小节保留型号规格参数即可;如补充安装工艺(试验压力、坡度、间距、偏差),应同步写入工艺参数与验收节点。"});continue}if(i){b.push({level:"warning",severity:"warning",message:`${c.title} / ${a.heading} 以工程量与保护措施为主,建议补充拆除深度偏差、保护挑网宽度、警戒距离等参数`,suggestion:"拆除类作业补充拆除厚度偏差(mm)、防护挑网/安全网宽度(m)、警戒区距离(m)等安全与技术参数即可,不强制 mm/MPa 级工艺参数。"});continue}b.push({level:"error",severity:"blocker",message:`${c.title} / ${a.heading} 无工艺参数:全文只有概况性数字,缺乏 mm/MPa/间距/偏差/试验压力等工艺级参数`,suggestion:"必须写入工艺参数(如桩位偏差≤50mm、搭接宽度≥100mm、闭水试验48h),参数来自绑定资料或行业规范值。"})}else h<(i?.3:1.5)&&b.push({level:"warning",severity:"warning",message:`${c.title} / ${a.heading} 工艺参数密度偏低:每千字 ${d.size} 个工艺参数(概况数字 ${e.size} 个)`,suggestion:"增加工艺级参数落位;概况数字(面积、工期、层数)不能替代工艺参数。"})}return b}function cd(a){let b=[];for(let c of a)for(let a of b9(c.content)){if(!/主要分部分项工程施工方案|主要施工方法/u.test(a.heading))continue;let d=a.body.split(/^####\s+/gmu).slice(1).map(a=>a.trim()).filter(Boolean);if(0===d.length)continue;let e=d.filter(a=>{let b=/(?:施工)?(?:概况|范围)[::]\s*\S/u.test(a)||/工程量|范围/u.test(a),c=/(?:施工)?(?:流程|工序|顺序)[::]\s*\S/u.test(a)||/→/u.test(a),d=/(?:施工)?方法[::]\s*\S/u.test(a);return!b||!c||!d});e.length>0&&b.push({level:"warning",severity:"warning",message:`${c.title} / ${a.heading} 有 ${e.length}/${d.length} 个分部分项未按"概况/流程/方法"三段式展开`,suggestion:'参照"项目主要施工内容"工作包写法:概况=对象+工程量,流程=→工序链,方法=工艺参数+检测验收。'})}return b}function ce(a,b=""){let c=[],d=b||a.map(a=>a.content).join("\n\n");for(let a of b8)a.patterns.some(a=>a.test(d))||c.push({level:"warning",severity:"warning",message:`未检测到对招标硬性要求的响应:${a.key}`,suggestion:"招标文件中的工期、质量、保修、安全目标等硬性要求必须在施工组织设计中明确响应并落实责任。"});return c}function cf(a){return Math.max(0,Math.min(100,Math.round(a)))}function cg(a,b){let c=new Set([b?.projectName,...b?.fingerprint?.projectNames||[]].filter(Boolean));return(b?.contaminationCandidates||[]).reduce((a,b)=>!b||b.length<6||c.has(b)?a:a.replace(RegExp(b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"gu"),"本项目工程"),a)}let ch=[{words:["编制依据","国家法律法规","地方法规"],sentence:"本施工组织设计的编制依据包括国家法律法规、地方法规及现行工程建设标准、规范"},{words:["工程量清单","项目特征","工程量","图纸设计说明"],sentence:"项目特征与工程量以招标工程量清单及图纸设计说明为准"},{words:["劳动力计划","主要施工材料","主要施工机械"],sentence:"劳动力计划、主要施工材料、主要施工机械按施工进度动态配置,详见本方案各保障章节"}];function ci(a,b){let c=(0,x.t4)(b).filter(b=>!a.includes(b));if(0===c.length)return a;let d=ch.filter(a=>a.words.some(a=>c.includes(a))).map(a=>a.sentence);if(0===d.length)return a;let e=`
|
|
56
|
+
|
|
57
|
+
**编制依据补充说明**:${d.join(";")}。
|
|
58
|
+
`,f=/^(?:###|####)\s+(?:[\d.]+[\s\u00a0]*)?编制说明与工程概况$/mu.exec(a);if(f){let b=a.indexOf("\n",f.index)+1;return`${a.slice(0,b)}${e}${a.slice(b)}`}return`${a.replace(/\s+$/u,"")}
|
|
59
|
+
${e}`}function cj(a){return(0,v.rs)((0,v.V3)({templateId:a.template.id,templateName:a.template.name,title:a.template.outputTitle,requirement:a.requirement||"",projectRoot:a.projectRoot,projectId:a.projectId,exportSettings:a.template.exportSettings,generationSettings:a.template.generationSettings,facts:a.facts,structuredFacts:a.structuredFacts,factsModel:a.factsModel,chapters:a.chapters,sources:a.sources,missingItems:[...new Set(a.missingItems)],validation:a.validation,validationIssues:a.validationIssues,executionStages:a.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:a.assets,partialChapters:[],checkpointChapters:a.chapters,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:a.promptDocumentRules}),a.chapters,{forbidDrawingImages:!1,promptRules:a.promptDocumentRules}).markdown}function ck(a){var b;let{documentSpec:c,validationIssues:d,factsModel:e,finalChapterDrafts:f,finalMarkdown:g,template:h,promptBindings:i,promptDocumentRules:j,projectMaterialSummary:k,domainProfile:m,structuredFacts:o,documentBudget:p,scopeConflicts:q}=a;return bg((0,x.kQ)(c,d,e,f,g,h.projectBindings||[],i),function(a){let b=[],c=a.markdown||"";for(let e of a.spec.factFields.filter(a=>a.required)){var d;!((d=e.name).length<4||aY(d))&&/\d|GB|JGJ|C\d|HRB|DN|mm|MPa|kPa|工期|质量|安全|项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数/u.test(d)&&!a$(c,e.name)&&b.push({level:"info",message:`正文可能未显式覆盖“${e.name}”`,suggestion:"建议检查对应章节是否已自然表达该事实。"})}let e=a.summary.facts.projectName;!e||"当前知识库项目"===e||aY(e)||a$(c,e)||b.push({level:"warning",message:"正文未明显体现关键对象名称",suggestion:"建议在概况、背景或首页标题中体现当前文档的关键对象名称。"});let f=a.summary.facts.documentNo;for(let a of(f&&!c.includes(f)&&b.push({level:"info",message:"正文未体现文档/任务编号",suggestion:"如文档需要编号,请在概况、背景或首页信息中补充。"}),["知识库证据","资料类型","提示词角色","文档规范包","规范包","后台自动规范","后台优化建议","基础事实候选","材料未提供","未检索到"]))c.includes(a)&&b.push({level:"error",message:`正文包含后台流程话术:${a}`,suggestion:"请重新生成或在审查阶段删除后台流程描述。"});return b}({markdown:g,spec:c,summary:k}),function(a){let b=a.profile||l,c=[],d=new Map;for(let c of a.facts){let a=c.fieldName||c.key;a&&function(a,b){let c=n(b,a);return c?"single"===c.cardinality&&"allow_multiple"!==c.conflictPolicy&&"ignore"!==c.conflictPolicy:/项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数|工期|质量标准|合同价格形式|绿色建筑等级|投标有效期|质保期/u.test(a)}(a,b)&&a0(String(c.value),b)&&d.set(a,[...d.get(a)||[],{value:String(c.value),source:c.sourceFile}])}for(let[a,e]of d){let d=new Map;for(let a of e){let c=a0(a.value,b);c&&d.set(c,[...d.get(c)||[],a])}if(d.size>1){let b=[...d.values()].map(a=>`${a[0].value}(${a.map(a=>a.source).filter(Boolean).join("、")||"未知来源"})`).join(" vs ");c.push({level:"error",message:`事实一致性冲突:${a} 存在多个值:${b}`,suggestion:"请确认当前绑定材料组,或在模板绑定中只绑定当前文档所需材料。"})}}let e=a.summary.facts.projectName;if(e&&"当前知识库项目"!==e&&!/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|招标工程量清单封面|招标工程量清单扉页|工程量清单表|清单封面|清单扉页|\d{1,2}\.\d{1,2}/u.test(e)){let b=a_(a.markdown),d=[e,...a.summary.fingerprint.projectNames].flatMap(a=>[a,a.replace(/^\d+(?:\.\d+)?[^\u4e00-\u9fa5]*/u,""),a.replace(/\([^)]*\)|([^)]*)/gu,"")]).map(a=>a_(a)).filter(a=>a.length>=4),f=d.filter(a=>a.length>=8),g=d.filter(a=>a.length<8),h=f.some(a=>b.includes(a)||a.length>=12&&b.includes(a.slice(0,Math.max(8,Math.floor(.72*a.length))))),i=g.some(a=>b.includes(a));(f.length>0?h:!(g.length>0)||i)||c.push({level:"warning",message:`正文未包含当前对象名称:${e}`,suggestion:"请确认标题、概况或背景信息是否已体现当前对象名称。"})}return c}({markdown:g,facts:o,summary:k,profile:m}),function(a,b){let c=[],d=new Set([b.projectName,...b.fingerprint.projectNames].filter(Boolean));for(let e of b.contaminationCandidates)e.length>=6&&!d.has(e)&&a.replace(/\s+/gu,"").includes(e.replace(/\s+/gu,""))&&c.push({level:"error",message:`正文疑似混入其他对象名称:${e}`,suggestion:"请检查绑定材料选择、模板绑定文件和知识库证据范围。"});let e=b.fingerprint.documentNos,f=a.match(/\b\d{4}[A-Z]{2,}\d{4,}\b/gu)?.find(a=>!e.includes(a));return f&&e.length>0&&c.push({level:"error",message:`正文疑似混入其他文档编号:${f}`,suggestion:"请重新生成并检查是否召回了其他绑定材料。"}),c}(g,k),0===bG(o).length||!/资料未明确|系统暂未从知识库确认|项目资料暂未明确/u.test(g)?[]:["计划工期","合同工期","质量标准","合同估算价","合同估算价格","建设地点","建设规模"].filter(a=>RegExp(`${a}[^
|
|
60
|
+
|。;;]{0,40}(?:资料未明确|系统暂未从知识库确认|项目资料暂未明确)`,"u").test(g)).map(a=>({level:"error",message:`${a} 已抽取到项目资料事实但正文仍显示暂未明确`,suggestion:"请优先使用项目基础事实卡片中的资料原值,不得用占位表达覆盖已确认事实。"})),(b={markdown:g,chapters:f,factsModel:e,template:h,promptBindings:i,promptDocumentRules:j,scopeConflicts:q},[...b.promptDocumentRules?.forbidToc?[]:[...(0,x.gN)(b.markdown),...(0,x.f8)(b.markdown)],...(0,x.K1)(b.markdown),...(0,x.Fv)(b.markdown),...(0,x.k0)(b.markdown),...(0,x.NS)(b.markdown),...(0,x.qK)(b.markdown,b.chapters),...(0,x.ji)(b.chapters),...(0,x.i0)(b.chapters),...(0,x.ST)(b.chapters),...(0,x.xX)(b.chapters),...(0,x.qm)(b.markdown,b.factsModel,b.scopeConflicts),...(0,x.hr)(b.markdown,b.factsModel),...a4(b.markdown,b.factsModel),...function(a){let b=a.split(/\n\s*\n/gu).map(a=>a.trim()).filter(Boolean),c=/(?:加强组织领导|严格执行规范|落实责任制度|确保工程质量|强化过程管理|提高思想认识|完善管理体系|形成闭环管理|统筹推进|全面落实)/gu,d=[];for(let a of b){if(120>(0,w.V7)(a))continue;let b=a.match(c)||[],e=a.match(/材料|工序|验收|复验|节点|风险|交底|隐蔽|检验批|进场|责任人|台账|工期|质量|安全|资源/u)||[];b.length>=2&&e.length<2&&d.push({level:"warning",message:`段落存在空泛表述:${a.slice(0,48)}...`,suggestion:"请补充该段对应的对象、动作、控制点或验收闭环,避免只保留管理性套话。"})}return d}(b.markdown),...(0,y.Fw)(b.chapters),...(0,y.Hl)(b.chapters),...(0,y.iX)({markdown:b.markdown,factsModel:b.factsModel,chapters:b.chapters}),...function(a,b){let c=[];if(!/施工组织设计|施工组织|施组|质量|安全|文明施工/u.test(a))return c;for(let d of a6){let e=ba(b,d.factGroups),f=(function(a,b){let c=[];for(let d of b){let b=new RegExp(d.source,d.flags.includes("g")?d.flags:`${d.flags}g`);for(let d of a.matchAll(b)){let a=a7(d[1]||d[0]||"");!a9.test(a)&&a.length>=2&&a.length<=80&&c.push(a)}}return[...new Set(c)]})(a,d.patterns).filter(a=>!a8.test(a)&&!function(a,b){return 0===b.length||b.some(b=>b.includes(a)||a.includes(b)||a.length>=4&&b.includes(a.slice(0,4)))}(a,e)).slice(0,5);f.length>0&&c.push({level:"warning",message:`施组数据一致性风险:${d.label} 可能与项目图谱/事实不一致(${f.join("、")})`,suggestion:`请核对${d.label}在${d.locations}中的表述,统一以招标文件、项目图谱和可信事实为准。`})}return c}(b.markdown,b.factsModel),...function(a,b){let c=[],d=ba(b,["project","schedule","resources","quality","safety","preciseFacts"]);if(0===d.length)return c;for(let b of a)/概况|进度|资源|质量|安全|文明|工资|应急/u.test(`${b.title} ${(b.sections||[]).join(" ")}`)&&(d.some(a=>a.length>=3&&b.content.includes(a.slice(0,Math.min(10,a.length))))||c.push({level:"warning",message:`${b.title} 缺少可识别的项目图谱事实支撑`,suggestion:"请至少引用工程名称、工期、工程量、资源、风险、质量安全目标等项目专属事实之一,避免纯模板化。"}));return c}(b.chapters,b.factsModel),...(0,y.Av)(b.chapters,b.markdown),...(0,y.CS)(b.chapters,b.markdown),...(0,y.b7)(b.chapters),...a5(b.chapters),...function(a,b,c){let d={factuality:2*!(0,x.vY)(a,c).some(a=>"error"===a.level),structure:b.length>0&&b.every(b=>a.includes(b.title)&&(0,w.V7)(b.content)>=600)?2:1,depth:0===(0,x.i0)(b).length?2:1,executable:0===a5(b).length?2:1,evidence:0===a4(a,c).length?2:1},e=d.factuality+d.structure+d.depth+d.executable+d.evidence;return[{level:"info",message:`文档交付评分报告:总分 ${e}/10,事实${d.factuality},结构${d.structure},专业${d.depth},可执行${d.executable},证据${d.evidence}`,suggestion:e>=8?"可交付,但建议继续优化证据使用覆盖率和章节依赖链路。":"建议优先修复低分维度后再导出。"}]}(b.markdown,b.chapters,b.factsModel),...(0,x.vY)(b.markdown,b.factsModel),...(0,x.iC)(b.markdown),...(0,x.BV)(b.markdown),...(0,v.dh)(b.markdown),...(0,x.Ty)(b.chapters),...(0,x.N1)(b.markdown,b.factsModel,b.chapters),...(0,x.S2)(b.markdown,b.chapters,b.factsModel),...(0,a1.QP)((0,a1.JV)(b.markdown,b.factsModel)),...(0,x.yd)(b.markdown,b.factsModel),...function(a){let b=[];return aM.test(a)&&b.push({level:"warning",message:"正文包含联网增强过程性表述",suggestion:"请删除联网检索、网页资料、搜索结果等过程性话术,改为正式交付语言。"}),b}(b.markdown),...(0,x.bM)(b.markdown),...(0,x.M$)(b.markdown,b.promptBindings),...(0,x.AC)(b.markdown,b.chapters),...(0,x.mR)(b.markdown,b.template),...(0,v.UG)(b.markdown,b.template),...(0,v.Ed)(b.markdown,b.promptDocumentRules)]),bY(g,[...o,...e.preciseFacts],{maxIssues:30}).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议后续优化事实自然落位;导出阶段不因未落位的引用型或可优化事实阻断。"})),(0,w.PE)(h.generationSettings||h.exportSettings,g).filter(a=>!(p.minPages&&/低于目标页数/u.test(a.message))),(0,w.ty)(p,g),(0,v.UG)(g,h),(0,by.IA)(g),g.includes("WRITER_MISSING_SECTION")||g.includes("Writer 未完成")?[{level:"error",severity:"blocker",category:"structure",owner:"system",message:"最终正文仍包含未完成小节标记",suggestion:"必须重新补写对应小节并删除 WRITER_MISSING_SECTION/Writer 未完成。"}]:[],function(a){let b=[{title:"项目特点、重点、难点分析",minChars:1800},{title:"项目主要施工内容",minChars:2200},{title:"主要分部分项工程施工方案",minChars:1200,blockerMinChars:800},{title:"主要施工方法",minChars:2200},{title:"危大工程专项施工方案审批流程",minChars:500,blockerMinChars:250},{title:"原材料进场复试与见证取样",minChars:600,blockerMinChars:300}],c=[];for(let d of a)for(let a of b){let b=(0,z.Xl)(d.content,a.title)||(0,z.Xl)(d.content,a.title,{fuzzy:!0}),e=(0,w.V7)(b);if(!b||e>=a.minChars)continue;let f=function(a){let b=[{title:"项目特点、重点、难点分析",minChars:1800},{title:"项目主要施工内容",minChars:2200},{title:"主要分部分项工程施工方案",minChars:1200,blockerMinChars:800},{title:"主要施工方法",minChars:2200},{title:"危大工程专项施工方案审批流程",minChars:500,blockerMinChars:250},{title:"原材料进场复试与见证取样",minChars:600,blockerMinChars:300}].find(b=>b.title===a);if(!b)return 0;let c=b.blockerMinChars||Math.floor(.8*b.minChars),d=(0,bz.ap)(a);return Math.min(c,d>0?d:c)}(a.title);e>=f?c.push({level:"warning",severity:"warning",message:`${d.title} ${a.title} 正文深度接近目标:当前 ${e} 字,目标 ${a.minChars} 字`,suggestion:"已达到可交付深度,建议后续按项目数据继续优化扩写。"}):c.push({level:"error",severity:"blocker",message:`${d.title} ${a.title} 正文不足:当前 ${e} 字,要求不少于 ${f} 字`,suggestion:"关键小节必须补足项目数据、重点难点与施工内容对应关系后方可导出。"})}return c}(f),function(a){let b=[{title:"项目特点、重点、难点分析",minNumericFacts:5,minObjectFacts:8,objectPatterns:[/建筑面积|面积/u,/层|框架结构|既有建筑/u,/结构形式|结构加固|墙体补强|装配式/u,/拆除|改造|装修|装饰/u,/工期|日历天/u,/质量标准|合格/u,/营业商铺|经营区域|场地/u,/管网|防水|室外道排/u,/智能化|弱电|消防|暖通|通风空调|水电/u]},{title:"项目主要施工内容",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/拆除|垃圾外运|既有设施保护/u,/结构加固|墙体补强|框架结构/u,/装饰|装修|基层|面层|环保|阻燃/u,/防水|管网|给排水|阀门|道排/u,/消防|水电|电气|弱电|智能化|通风空调/u,/屋面|立面|室外|附属/u,/施工流程|施工方法|施工顺序|工艺流程/u,/验收|检测|调试|资料闭环/u]},{title:"主要分部分项工程施工方案",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/拆除|垃圾外运|既有设施保护/u,/结构加固|墙体补强|框架结构/u,/装饰|装修|基层|面层|环保|阻燃/u,/防水|管网|给排水|阀门|道排/u,/消防|水电|电气|弱电|智能化|通风空调/u,/屋面|立面|室外|附属/u,/施工流程|施工方法|施工顺序|工艺流程/u,/验收|检测|调试|资料闭环/u]},{title:"主要施工方法",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/拆除|垃圾外运|既有设施保护/u,/结构加固|墙体补强|框架结构/u,/装饰|装修|基层|面层|环保|阻燃/u,/防水|管网|给排水|阀门|道排/u,/消防|水电|电气|弱电|智能化|通风空调/u,/屋面|立面|室外|附属/u,/施工流程|施工方法|施工顺序|工艺流程/u,/验收|检测|调试|资料闭环/u]}];return a.flatMap(a=>b.flatMap(b=>{let c=(0,z.Xl)(a.content,b.title);if(!c)return[];let d=new Set(c.match(/\d+(?:\.\d+)?\s*(?:m²|㎡|平方米|m|mm|层|栋|日历天|天|%|台|套|根|处|个|kg|t|吨)/giu)||[]).size,e=b.objectPatterns.filter(a=>a.test(c)).length,f=[];return d<b.minNumericFacts&&f.push({level:"warning",severity:"warning",message:`${a.title} ${b.title} 参数落位不足:当前 ${d} 个,建议不少于 ${b.minNumericFacts} 个`,suggestion:"关键小节必须写入项目规模、工期、层数、结构、专业工程或验收参数等具体数值。"}),e<b.minObjectFacts&&f.push({level:"warning",severity:"warning",message:`${a.title} ${b.title} 专业事实覆盖不足:当前 ${e} 类,建议不少于 ${b.minObjectFacts} 类`,suggestion:"优先基于当前项目绑定资料补充工程对象、专业范围、重点难点和对应施工内容;不得为满足类别数量编造或混入其他项目事实。"}),f}))}(f),(function(a,b=""){return[...ca(a),...cb(a),...cc(a),...cd(a),...function(a,b=""){let c=[],d=(b||a.map(a=>a.content).join("\n\n")).split("\n"),e=0,f=0;for(;f<d.length;){let a=d[f].trim();if(!/^\|.+\|$/u.test(a)){f+=1;continue}let b=[];for(;f<d.length&&/^\|.+\|$/u.test(d[f].trim());)b.push(d[f].trim()),f+=1;if(b.length<3)continue;e+=1;let g=b[0].split("|").length-2,h=b.filter((a,b)=>0!==b&&a.replace(/\|/gu,"").replace(/[\s\-:]/gu,"").length>0),i=h.reduce((a,b)=>a+b.split("|").slice(1,-1).map(a=>a.trim()).filter(a=>""===a||"-"===a||"—"===a||"/"===a).length,0),j=h.length*Math.max(1,g);if(i>0&&i/Math.max(1,j)>=.4&&c.push({level:"warning",severity:"warning",message:`第 ${e} 个表格存在 ${i} 个空单元格(${h.length} 行),表格信息不完整`,suggestion:"表格每一列都必须填写,缺失字段应从资料补齐;无法确认的字段应删除该行而非留空。"}),c.length>=5)break}return c}(a,b),...ce(a,b)]})(f,g).map(a=>"error"===a.level?{...a,severity:"blocker"}:a)).map(a=>"error"===a.level?{...a,severity:a.severity||"blocker"}:a)}let cl=/章节级证据覆盖较弱|章节事实覆盖不足|小节事实或量化参数落位可继续优化/u;function cm(a){var b;let{finalChapterDrafts:c,effectiveChapters:d,factsModel:e,allEvidence:f,finalMarkdown:g,validationIssues:h,retrievalCoverageReports:i,includeRetrievalCoverage:j,template:k}=a,l=function(a){let b=a.chapters.map(b=>{let c=function(a){let b=["project"];return/进度|工期|节点|部署/u.test(a.title)&&b.push("schedule"),/质量|验收|材料/u.test(a.title)&&b.push("quality","rules"),/安全|文明|风险|危大/u.test(a.title)&&b.push("safety","rules"),/资源|材料|设备|劳动力|机械/u.test(a.title)&&b.push("resources"),/施工|工艺|技术|方案|清单|工程量|图纸/u.test(a.title)&&b.push("quantities"),[...new Set(b)]}(a.templateChapters.find(a=>a.id===b.id||a.title===b.title)||b),d=c.filter(c=>{var d;return d=a.factsModel,("project"===c?d.project.length>0||d.preciseFacts.length>0:"schedule"===c?d.schedule.length>0:"quality"===c?d.quality.length>0||d.specifications.length>0:"safety"===c?d.safety.length>0||d.rules.length>0:"resources"===c?d.resources.length>0||d.bills.length>0:"quantities"===c?d.bills.length>0||d.drawings.length>0||d.tables.length>0:"rules"===c&&(d.rules.length>0||d.specifications.length>0))||(b.evidence||[]).some(a=>RegExp(bb[c]||c,"u").test(`${a.sectionTitle||""} ${a.content||""}`))}),e=c.filter(a=>!d.includes(a)),f=c.length?Math.round(d.length/c.length*100):100;return{chapterId:b.id,title:b.title,requiredDomains:c,confirmedDomains:d,unconfirmedDomains:e,score:f}}),c=new Set(a.evidence.map(a=>a.filePath).filter(Boolean)),d=b.length?Math.round(b.reduce((a,b)=>a+b.score,0)/b.length):100;return{score:d,evidenceCount:a.evidence.length,confirmedFiles:c.size,chapterReports:b,unconfirmedDomains:[...new Set(b.flatMap(a=>a.unconfirmedDomains))],remediation:d>=95?"知识库事实覆盖已达到高置信交付要求。":"系统需扩大本地知识库检索、补抽结构化事实,并将已确认事实落位到对应章节。"}}({chapters:c,templateChapters:d,factsModel:e,evidence:f}),m=(0,a1.e$)(g,e),n=(b={chapters:c,templateChapters:d,factsModel:e}).chapters.map(a=>{let c=b.templateChapters.find(b=>b.id===a.id||b.title===a.title),d=function(a,b){let c=`${a.title} ${(b?.sections||a.sections||[]).join(" ")}`;return[{key:"structure",label:"结构完整",passed:(a.sections||b?.sections||[]).length>=2||/###\s+/u.test(a.content)},{key:"depth",label:"内容深度",passed:(0,w.V7)(a.content)>=600},{key:"evidence",label:"证据绑定",passed:(a.evidence||[]).length>0},{key:"professional",label:"专业控制点",passed:/验收|复核|检查|交底|控制点|整改|闭环|台账|进场|工序/u.test(a.content)},{key:"schedule",label:"工期支撑",passed:!/进度|工期|节点/u.test(c)||/工期|节点|计划|纠偏|资源|穿插/u.test(a.content)},{key:"quality",label:"质量验收",passed:!/质量|验收/u.test(c)||/质量|验收|复验|隐蔽|检验批|整改/u.test(a.content)},{key:"safety",label:"安全闭环",passed:!/安全|文明|风险|危大/u.test(c)||/风险|检查|整改|应急|培训|交底/u.test(a.content)}]}(a,c),e=d.filter(a=>a.passed).length;return{chapterId:a.id,title:a.title,score:d.length?Math.round(e/d.length*100):100,checks:d,action:e===d.length?"章节覆盖完整。":"系统需补齐章节结构、证据绑定、专业控制点和跨章依赖。"}}),o=bg(h,l.score>=85?[]:[{level:"warning",message:`系统知识库覆盖确认率偏低:${l.score}%`,suggestion:`${l.remediation} 未确认事实域:${l.unconfirmedDomains.map(a=>bb[a]||a).join("、")||"无"}`}],(0,a1.c$)(m,{maxIssues:20}),n.filter(a=>a.score<80).map(a=>({level:"warning",message:`章节覆盖不足:${a.title} ${a.score}%`,suggestion:`${a.action} 未通过项:${a.checks.filter(a=>!a.passed).map(a=>a.label).join("、")}`})),j?i.filter(a=>a.risk.highRisk&&(0===a.requiredFactTotal?a.evidenceCount<8:a.requiredFactCovered<a.requiredFactTotal)).map(a=>({level:"warning",message:`系统知识库召回覆盖需复核:${a.chapterTitle}`,suggestion:`知识库总切片 ${a.risk.totalChunks},当前预加载 ${a.risk.loadedChunks}${a.risk.riskReason?`(${a.risk.riskReason})`:""},已启用深召回;事实覆盖 ${a.requiredFactCovered}/${a.requiredFactTotal},小节覆盖 ${a.sectionCovered}/${a.sectionTotal}。`})):[]),p=function(a){let b=(0,bc.tf)({markdown:a.markdown,chapters:a.chapters,template:a.template,factTraces:a.factTraces,issues:a.issues}),c=Math.round((.3*b.completeness+.25*b.specificity+.2*b.compliance+.15*b.executability+.1*b.normalization)*Math.min(1,b.uniqueness/90)),d=a.issues.filter(a=>"error"===a.level).length,e=Math.max(0,Math.min(99,Math.round(c-8*d))),f=a.knowledgeCoverage.score>=95?95:85;return{overall:c,deliveryProbability:e,target:f,passed:e>=f&&0===d,scores:b,summary:`交付置信度 ${e}% / 目标 ${f}%,综合评分 ${c}/100(资料完整性 ${b.completeness}、方案针对性 ${b.specificity}、合规性 ${b.compliance}、可落地性 ${b.executability}、编制规范性 ${b.normalization}、低雷同性 ${b.uniqueness})`,actions:e>=f&&0===d?["已达到当前质量目标,建议保持事实口径和导出前复核。"]:["按招标评审口径补齐短板维度:章节与强制模块缺失补完整性、项目专属数据补针对性、危大闭环与强制制度补合规性、责任频次闭环句式补可落地性、表格层级与数据一致补规范性、清理空话禁用词与重复句式降雷同。","系统需优先修复阻断问题、扩大本地知识库检索、补抽结构化事实,并将未落位事实写入对应章节。"]}}({markdown:g,chapters:c,issues:o=o.map(a=>cl.test(a.message)&&"warning"===a.level?{...a,level:"info"}:a),knowledgeCoverage:l,factTraces:m,template:k}),q=function(a){let b=[],c=a.issues.filter(a=>"error"===a.level);c.length>0&&b.push({priority:"high",title:"阻断问题修复",action:`修复 ${c.length} 个导出阻断问题,优先处理事实冲突、结构缺失、模板规则违规和占位残留。`});let d=(a.factTraces||[]).filter(a=>"unplaced"===a.status);if(d.length>0){let a=d.length>12?`${d.length} 项(示例:${d.slice(0,8).map(a=>a.label).join("、")} 等)`:`${d.length} 项(${d.map(a=>a.label).join("、")})`;b.push({priority:"high",title:"事实落位修复",action:`将 ${a} 已确认知识库事实写入对应章节,保持原始数值、单位和来源口径。`})}a.knowledgeCoverage&&a.knowledgeCoverage.score<95&&b.push({priority:"medium",title:"知识库确认覆盖修复",action:"扩大本地知识库检索范围,执行事实补抽和章节证据重分配;这是系统检索、抽取、落位问题,不要求用户追加资料。"});let e=(a.chapterCoverage||[]).filter(a=>a.score<80);if(e.length>0){let a=e.length>10?`${e.slice(0,8).map(a=>a.title).join("、")} 及其他${e.length-8}章`:e.map(a=>a.title).join("、");b.push({priority:"medium",title:"章节覆盖修复",action:`补齐低覆盖章节(${e.length}章):${a}。`})}return a.qualityReport&&!a.qualityReport.passed&&b.push({priority:"medium",title:"交付置信度修复",action:a.qualityReport.actions.join(" ")}),b}({issues:o,qualityReport:p,knowledgeCoverage:l,factTraces:m,chapterCoverage:n});o=bg(o,p.passed?[]:[{level:"info",message:`交付置信度未达目标:${p.deliveryProbability}% / ${p.target}%`,suggestion:p.actions.join(" ")}],q.filter(a=>"high"===a.priority).map(a=>({level:"info",message:`修复策略待执行:${a.title}`,suggestion:a.action})));let r=(0,x.Ai)(o,e,c);return{knowledgeCoverage:l,factTraces:m,chapterCoverage:n,qualityReport:p,repairStrategies:q,validationIssues:o,finalExportGate:r}}async function cn(a){let{chapterDraftsByOrder:b,chapterGenerationStagesByOrder:c,chapterGenerationStages:e,effectiveChapters:f,template:g,allEvidence:h,projectMaterialScope:i,progressStages:j,documentSpec:k,projectMaterialSummary:l,domainProfile:m,documentBudget:n,input:o,generationDiagnostics:p,promptTexts:q,promptBindings:r,promptDocumentRules:t,projectRoot:y,projectId:A,readiness:B,factExtractionPromptTexts:C,hasExplicitOutline:D,missingItems:E,retrievalCoverageReports:F,failedChapterMessages:G,webResearchReport:H,indexHealth:I,agentWorkflow:J,globalConsistencyIssues:K,scopeConflicts:L,writingTaskBrief:M,emitProgress:N,withProgressHeartbeat:O}=a,{signal:P,requirement:Q}=o,R=b.filter(a=>!!a);if(e.push(...c.filter(a=>!!a)),0===R.length)throw Error(`章节生成未完成:${G.join(";")||"没有生成任何有效章节"}`);if(D&&R.length<f.length)throw Error(`OUTLINE 指定 ${f.length} 章,实际只生成 ${R.length} 章:${G.join(";")||"部分章节未生成"}`);let S=aV(R.flatMap(a=>a.evidence||[]),i);if(aX(S,i,"finalize:chapter-evidence"),S.length>0){h.push(...S);let a=(0,s.QR)(h,{maxChars:Math.min(9e4,Math.max(5e4,9e3*f.length)),preservePinned:!0});h.splice(0,h.length,...a)}let X=aV(h,i);h.splice(0,h.length,...X),aX(h,i,"finalize:all-evidence"),(0,z.Te)(P),(0,al.fx)(j,(0,al.X5)({type:"file_understanding",roleId:"multimodal-files",status:"running",message:"正在理解多模态参考文件"},{subtitle:"多模态参考文件"})),N(R);let Y={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{Y=await aG(y,h,P)}catch(a){if(P?.aborted)throw a;console.error("[gen] fileUnderstanding failed:",a)}(0,al.fx)(j,Y.stage);let Z=(0,s.QR)(h,{maxItems:Math.max(48,10*f.length),maxChars:Math.min(9e4,Math.max(52e3,9e3*f.length)),preservePinned:!0});h.splice(0,h.length,...aV(Z,i)),aX(h,i,"finalize:post-file-understanding");let aa=function(a,b,c){let d={};for(let e of(0,u.Uy)(a,c)){let a=b.find(a=>(0,u.I2)(a,e));a&&(d[e.name]=`${a.content.replace(/\s+/gu," ")}(来源:${a.filePath},角色:${a.roleId||"未标注"})`)}return d}(g,h,k),ab=aW(V(h,g,k),i),ac=aW($(h),i),ad=aW(_(h,m),i),ae={facts:[],stages:[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"已有本地/资料事实覆盖主要必需字段,跳过 LLM 全量事实抽取"}]};if(function(a,b,c){let d=(0,u.Uy)(b,c).filter(a=>a.required);return 0===d.length?a.filter(a=>a.confidence>=.75&&(0,z.lG)(a.value).trim().length>=2).length<12:d.filter(b=>a.some(a=>(function(a,b){let c=(0,z.lG)(a.value).trim();if(!c||c.length<2||c.length>220&&a.confidence<.8)return!1;let d=`${a.fieldId||""} ${a.fieldName||""} ${a.key}`.toLowerCase();return!!(d.includes(b.id.toLowerCase())||d.includes(b.name.toLowerCase()))&&("project_basic_fact"===a.roleId||a.roleId?.startsWith("role-")||a.sourceRef?.filePath?a.confidence>=.55:a.confidence>=.75)})(a,b))).length/d.length<.9}([...ab,...ac,...ad],g,k)){let a=(0,s.QR)(h,{maxItems:48,maxChars:45e3,preservePinned:!0});try{ae=await W(a,C,g,k,P,p)}catch(a){if(P?.aborted)throw a;console.error("[gen] fact extraction failed:",a)}}for(let a of ae.stages)(0,al.fx)(j,a);let af=aW((ay=[...ab,...ac,...ad,...ae.facts],ay.filter(a=>!!a.sourceFile)),i),ag=bx(af,L??bu(af));for(let a of ag)aa[a.key]=`${(0,z.lG)(a.value)}(来源:${a.sourceFile},角色:${a.roleId})`;let ah=ak(ag,aW(U(h),i),E,k,m),ai=R.map(a=>{let b=k.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=(b?.requiredFactIds||[]).map(a=>k.factFields.find(b=>b.id===a)?.name).filter(Boolean),d=[...new Set([...a.missingFacts||[],...c].filter(Boolean))],e=d.filter(b=>!a.missingFacts.includes(b)),f=d.filter(b=>a.missingFacts.includes(b));return{chapterId:a.id,title:a.title,requiredFacts:d,coveredFacts:e,missingFacts:f,evidenceCount:a.evidence.length}}),aj=function(a,b=[],c){let e=[],f=[];for(let b of a)0===b.evidence.length&&e.push(`${b.title} 未检索到资料证据`),b.content.length<80&&e.push(`${b.title} 内容较短,建议人工补充或重新生成`);return c&&a.length<c.chapters.length&&f.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===(0,d.zY)(c).length&&f.push("模板未绑定任何提示词"),{passed:0===f.length,warnings:e,errors:f}}(R,ag,g);aj.warnings=[...aj.warnings,...B.warnings],aj.errors=[...aj.errors,...B.blockingIssues];let am=[...h.reduce((a,b)=>a.set(b.filePath,(a.get(b.filePath)??0)+1),new Map).entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),an=new Map;for(let a of h)an.set(a.source||"unknown",(an.get(a.source||"unknown")??0)+1);let ao=bg((0,ap.w9)(aj,ah,R),function(a){let b=[];for(let c of a)0===c.evidenceCount?b.push({level:"error",message:`章节缺少证据:${c.title}`,suggestion:"请补充对应绑定材料或调整模板章节检索词。"}):c.missingFacts.length>0&&b.push({level:"warning",message:`章节事实覆盖不足:${c.title},缺失 ${c.missingFacts.slice(0,6).join("、")}`,suggestion:"建议补充章节 requiredFacts 或绑定材料证据。"});return b}(ai),(K||[]).filter(a=>!/^跨章一致性冲突|^工序规格冲突/u.test(a)).slice(0,10).map(a=>({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨章一致性复核:${a}`,suggestion:"跨章数值口径不一致属低级错误,必须定向修复统一口径后重新校验。"}))),aq=R.map(a=>a.content).join("\n\n");ao=bg(ao,bY(aq,af,{maxIssues:20}).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议 Agent Writer 在章节生成阶段优先落位可信基础事实;导出阶段不因未落位的低置信或泛化事实阻断。"})));let ar=Math.max(0,f.length-R.length);ao=bg(ao,[...ar>0?[{level:"error",severity:"blocker",message:`部分章节生成失败:${ar} 章`,suggestion:G.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。"}]:[]]),ao=bg(ao,R.flatMap(a=>{let b=f.find(b=>b.id===a.id);if(!b)return[];let c=aC({chapter:b,content:a.content,evidence:a.evidence||[]});return c.length>0?[{level:"warning",message:`${a.title} 小节事实或量化参数落位可继续优化:${c.slice(0,5).join(";")}`,suggestion:"建议在 Agent Writer 阶段扩大定向证据,不得在导出阶段补写。"}]:[]}));let as=[],at=function(a,b=300){if(a.length<=b)return a;let c=b-4-1;if(c<=0)return a.slice(-b);let d=a.slice(0,4),e=a.slice(-c),f=a.slice(4,a.length-c),g=f.filter(a=>"failed"===a.status).length;return[...d,{type:"validation",roleId:"stage-archive",status:g>0?"failed":"success",message:`已归档 ${f.length} 个中间执行阶段${g>0?`(含 ${g} 个失败记录)`:""}`,details:f[0]?.subtitle?[`归档区间:${f[0].subtitle} → ${f[f.length-1]?.subtitle||""}`]:[]},...e]}([...j,...e]);(0,al.fx)(at,(0,al.X5)({type:"reference",roleId:"knowledge-usage-report",status:"success",message:`资料使用报告:证据 ${h.length} 条,来源文件 ${am.length} 份,结构化事实 ${af.length} 条`,details:[`证据类型:${[...an.entries()].map(([a,b])=>`${a} ${b}`).join(",")||"无"}`,`索引健康:可用切片 ${I.usableChunkCount} 条,待索引 ${I.pendingJobs} 个,向量 ${I.vectorStatus?.status||"unknown"}`]},{subtitle:"资料使用报告"})),(0,al.fx)(at,(0,al.X5)({type:"reference",roleId:"web-research-report",status:H.enabled?"success":"skipped",message:H.enabled?`联网增强:检索章节 ${new Set(H.chapters).size} 个,查询 ${H.queries.length} 个,使用公开资料 ${H.evidenceCount} 条`:"联网增强未开启",details:H.enabled?[`检索主题:${[...new Set(H.queries)].join(";")||"无"}`,`过滤结果:${H.filteredCount} 条`,"公开资料仅用于通用规范、政策、工艺和措施补充,不作为项目事实来源"]:["可在模型配置中开启联网增强"]},{subtitle:"联网增强报告"}));let au=(0,v.rs)((0,v.V3)({templateId:g.id,templateName:g.name,title:g.outputTitle,requirement:Q||"",projectRoot:y,projectId:A,exportSettings:g.exportSettings,generationSettings:g.generationSettings,facts:aa,structuredFacts:af,factsModel:ah,chapters:R,sources:am,missingItems:[...new Set(E)],validation:aj,validationIssues:ao,executionStages:at,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:as,partialChapters:R.map(a=>({id:a.id,title:a.title,chars:(0,w.V7)(a.content),status:bC(a,n.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:R,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:t}),R,{forbidDrawingImages:!1,promptRules:t}).chapters.map(a=>{let b=f.find(b=>b.id===a.id)||a;return{...a,sections:a.sections||[],content:bT(a.content,b)}}),av=(0,v.rs)((0,v.V3)({templateId:g.id,templateName:g.name,title:g.outputTitle,requirement:Q||"",projectRoot:y,projectId:A,exportSettings:g.exportSettings,generationSettings:g.generationSettings,facts:aa,structuredFacts:af,factsModel:ah,chapters:au,sources:am,missingItems:[...new Set(E)],validation:aj,validationIssues:ao,executionStages:at,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:as,partialChapters:[],checkpointChapters:au,generatedAt:Date.now()},{forbidDrawingImages:!1,promptRules:t}),au,{forbidDrawingImages:!1,promptRules:t}).markdown;av=ci((0,v.bR)((0,v.kT)((0,v.K7)(cg(bR(av,af),l)))),g);let aw=(0,x.KI)(au,ah,L),ax=(0,x.Yb)(av,ah,L).fixedCount>0;if(aw.fixedCount>0||ax){var ay,az;av=ci((0,v.bR)((0,v.kT)((0,v.K7)(cg(bR(cj({template:g,requirement:Q,projectRoot:y,projectId:A,facts:aa,structuredFacts:af,factsModel:ah,chapters:au,sources:am,missingItems:E,validation:aj,validationIssues:ao,executionStages:at,assets:as,promptDocumentRules:t}),af),l)))),g);let a=(0,x.Yb)(av,ah,L);a.fixedCount>0&&(av=a.markdown);let b=aw.fixedCount+a.fixedCount,c=[...new Set([...aw.details,...a.details])];for(let a of c.map(a=>({caseType:"deterministic_fix",recordedAt:Date.now(),fixName:"applyDeterministicConsistencyFixes",detail:a})))bj("deterministic-fix-cases.jsonl",a);(0,al.fx)(at,(0,al.X5)({type:"validation",roleId:"deterministic-consistency-fix",status:"success",message:`跨章一致性数值定点修复:${b} 处(${c.slice(0,4).join("、")})`,details:c.slice(4)},{subtitle:"跨章一致性修复"}))}let aA=bp({facts:af,markdown:av});aA.size>0&&at.push({type:"fact_extraction",roleId:"canonical-facts",status:"success",message:`已决策可信基础事实 ${aA.size} 项`,details:[...aA.values()].map(a=>`${a.label}=${a.value}(${a.source},confidence=${a.confidence})`).slice(0,12)});let aB=ao;ao=ck({documentSpec:k,validationIssues:ao,factsModel:ah,finalChapterDrafts:au,finalMarkdown:av,template:g,promptBindings:r,promptDocumentRules:t,projectMaterialSummary:l,domainProfile:m,structuredFacts:af,documentBudget:n,scopeConflicts:L});let aD=cm({finalChapterDrafts:au,effectiveChapters:f,factsModel:ah,allEvidence:h,finalMarkdown:av,validationIssues:ao,retrievalCoverageReports:F,includeRetrievalCoverage:!0,template:g}),{knowledgeCoverage:aE,factTraces:aF,chapterCoverage:aH,qualityReport:aI,repairStrategies:aJ,finalExportGate:aK}=aD;ao=aD.validationIssues;let aL=[],aM=new Set,aN=()=>{ao=ck({documentSpec:k,validationIssues:aB.filter(a=>![...aM].some(b=>{let[c,d]=b.split("::");var e=a.message;if(!/空小节|小节内容补写未完成|小节生成未达标|小节只有标题|正文小节正文过短|规划小节正文过短|缺少规划小节|缺少[“"'].+[”"']小节|正文不足|小节缺失或标题结构异常/u.test(e))return!1;let f=d.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");if(RegExp(`^\\s*${f}\\s*正文不足,未达到任务最小深度$`,"u").test(e))return!0;let g=d.replace(/^(?:项目|主要)/u,"").replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");return e.includes(c)&&(e.includes(d)||g!==f&&e.includes(g))})&&!/已确认事实未在正文中落位/u.test(a.message)),factsModel:ah,finalChapterDrafts:au,finalMarkdown:av,template:g,promptBindings:r,promptDocumentRules:t,projectMaterialSummary:l,domainProfile:m,structuredFacts:af,documentBudget:n,scopeConflicts:L}),aD=cm({finalChapterDrafts:au,effectiveChapters:f,factsModel:ah,allEvidence:h,finalMarkdown:av,validationIssues:ao,retrievalCoverageReports:F,includeRetrievalCoverage:!1,template:g}),({knowledgeCoverage:aE,factTraces:aF,chapterCoverage:aH,qualityReport:aI,repairStrategies:aJ,finalExportGate:aK}=aD),ao=aD.validationIssues};for(let b=0;b<3;b+=1){let b=Array.from(new Map([...aK.blockingIssues,...ao.filter(a=>"error"===a.level)].map(a=>(function(a){let b=/^(.*?)(?:\s+|)(?:空小节|小节内容补写未完成|小节生成未达标|小节只有标题|只有标题或表格无正文|规划小节正文过短|正文小节正文过短|缺少规划小节|正文不足)[::,,]\s*(.+)$/u.exec(a.message),c=/^(.*?)\s+(项目特点、重点、难点分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试与见证取样)\s+正文不足/u.exec(a.message),d=/^(.+?)\s*正文不足,未达到任务最小深度$/u.exec(a.message),e=/^(?:施工组织设计\s*)?缺少[“"'](.+?)[”"']小节$/u.exec(a.message),f=/^(.*?)\s+(主要施工内容|分部分项工程施工方案)小节缺失或标题结构异常$/u.exec(a.message);if(!b&&!e&&!f)return;let g=c?c[1].trim():d||e?"":f?f[1].trim():b[1].trim(),h=c?c[2]:d?d[1].trim():e?e[1].trim():f?"主要施工内容"===f[2]?"项目主要施工内容":"主要分部分项工程施工方案":b[2].split(/[::,,,]/u)[0].trim();return{issue:a,chapterTitle:g,sectionTitle:h,critical:/项目特点.*重点.*难点|重点.*难点.*分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试与见证取样/u.test(h)}})(a)).filter(a=>!!a).map(a=>[`${a.chapterTitle}::${a.sectionTitle}`,a])).values()).sort((a,b)=>Number(b.critical)-Number(a.critical)).slice(0,4);if(0===b.length)break;let c=[];for(let{issue:d,chapterTitle:e,sectionTitle:i}of b){let b=e,k=b?au.findIndex(a=>a.title===b||b.includes(a.title)||a.title.includes(b)):-1;k<0&&(k=au.findIndex(a=>(a.content||"").includes(i))),k<0&&(k=au.findIndex(a=>(f.find(b=>b.id===a.id||b.title===a.title)?.sections||[]).some(a=>a.includes(i)||i.includes(a))));let l=au[k],m=f.find(a=>a.id===l?.id||a.title===l?.title);if(k<0||!l||!m){c.push(`失败:${b}/${i} 未定位到章节`);continue}b=b||l.title;let n=(0,al.X5)({type:"llm_review",roleId:`agent-final-gate-repair-${l.id}`,status:"running",message:`Final Gate 正在补写空小节:${b} / ${i}`,details:c},{subtitle:"Final Gate Repair"});(0,al.fx)(j,n),(0,al.fx)(aL,n),N(au,j);let o=(0,ap.ap)(i),r=Math.max(620,o>0?Math.ceil(o/.7):620),s=p.llm.lastError;p.llm.lastError=void 0;let t=await O(()=>(0,ap.mF)({template:g,chapter:m,sectionTitle:i,evidence:l.evidence?.length?l.evidence:h,missingFacts:[],promptTexts:q,projectContext:a.projectContext,requirement:Q,roleContext:"Final Gate 空小节定向修复",targetWords:r,maxWords:Math.ceil(1.32*r),forbidDrawingImages:!1,qualityFeedback:`Final Gate 发现“${i}”为空小节或深度不足。请基于证据完整重写该小节正式正文(原小节内容将被整体替换),包含检查责任、验收节点、资料闭环、整改复验要求,优先落位项目建筑面积、层数、工期、专业范围等量化参数,不得输出占位或解释。${s?`此前生成被拒原因:${s},必须逐条修正。`:""}`,diagnostics:p,signal:P,allowLenientStructureGate:!0})),u=!1,v=/正文不足|缺少[“"'].+[”"']小节|小节缺失或标题结构异常/u.test(d.message)?o:0;if(t&&(0,w.V7)(t)>=(v||80)){let a=function(a,b,c){let d=a=>a.replace(/[\u00a0\u3000]/gu," ").replace(/^\d+(?:\.\d+)*\s+/u,"").trim(),e=a=>a.trim().replace(/^#{2,6}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]+\n+/u,"").trim(),f=a.split("\n"),g=a=>{let c=(0,z.tU)(a),d=(0,z.tU)(b);return c===d||c.includes(d)||d.includes(c)},h=a=>{let b=/^(#{3,4})\s+(.+)$/u.exec(f[a].trim());if(!b||3!==b[1].length)return!1;for(let b=a+1;b<f.length;b+=1){let a=f[b].trim();if(/^#{2,3}\s+/u.test(a))break;if(/^####\s+/u.test(a))return!0}return!1},i=0;for(let j=0;j<f.length;j+=1){let k=f[j],l=i;i+=k.length+1;let m=/^(#{3,4})\s+(.+)$/u.exec(k.trim());if(!m)continue;let n=d(m[2]),o=n===b||n.includes(b)||b.includes(n);if(!o&&!g(n)||!o&&g(n)&&h(j))continue;let p=m[1].length,q=(z.V.test(n)||z.V.test(b))&&3===p?/^#{2,3}\s+/u:/^#{2,4}\s+/u,r=f.length;for(let a=j+1;a<f.length;a+=1)if(q.test(f[a].trim())){r=a;break}let s=r<f.length?f.slice(0,r).join("\n").length:a.length,t=e(c);return`${a.slice(0,l)}${k.trim()}
|
|
61
|
+
|
|
62
|
+
${t}${a.slice(s)}`}return a}(l.content,i,t);if(!(u=a!==l.content)&&/(?:缺少规划小节|缺少[“"'].+[”"']小节|小节缺失或标题结构异常)/u.test(d.message)){let a=`${l.content.replace(/\s+$/u,"")}
|
|
63
|
+
|
|
64
|
+
### ${i}
|
|
65
|
+
|
|
66
|
+
${t.replace(/^#{2,6}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]+\n+/u,"").trim()}
|
|
67
|
+
`;u=!0,au[k]={...l,content:bT(a,m)},aM.add(`${b}::${i}`),c.push(`成功:${b}/${i}(${(0,w.V7)(t)}字,追加为缺失小节)`)}else u?(au[k]={...l,content:bT(a,m)},aM.add(`${b}::${i}`),c.push(`成功:${b}/${i}(${(0,w.V7)(t)}字)`)):c.push(`失败:${b}/${i}(未定位到原小节块)`)}else{let a=(0,w.V7)(t||"");c.push(`失败:${b}/${i}(${a>0&&a<(v||80)?`补写仅 ${a} 字,未达 ${v||80} 字验收线`:p.llm.lastError||"空响应"})`)}let x=(0,al.X5)({type:"llm_review",roleId:`agent-final-gate-repair-${l.id}`,status:u?"success":"failed",message:u?`Final Gate 空小节修复完成:${b} / ${i}`:`Final Gate 空小节修复失败:${b} / ${i}`,details:c},{subtitle:"Final Gate Repair"});(0,al.fx)(j,x),(0,al.fx)(aL,x),N(au,j)}av=ci((0,v.bR)((0,v.kT)((0,v.K7)(cg(bR(cj({template:g,requirement:Q,projectRoot:y,projectId:A,facts:aa,structuredFacts:af,factsModel:ah,chapters:au,sources:am,missingItems:E,validation:aj,validationIssues:ao,executionStages:at,assets:as,promptDocumentRules:t}),af),l)))),g),aN()}let aO=(0,x.KI)(au,ah,L),aP=(0,x.Yb)(av,ah,L).fixedCount>0;if(aO.fixedCount>0||aP){av=ci((0,v.bR)((0,v.kT)((0,v.K7)(cg(bR(cj({template:g,requirement:Q,projectRoot:y,projectId:A,facts:aa,structuredFacts:af,factsModel:ah,chapters:au,sources:am,missingItems:E,validation:aj,validationIssues:ao,executionStages:at,assets:as,promptDocumentRules:t}),af),l)))),g);let a=(0,x.Yb)(av,ah,L);a.fixedCount>0&&(av=a.markdown),aN();let b=aO.fixedCount+a.fixedCount,c=[...new Set([...aO.details,...a.details])];(0,al.fx)(j,(0,al.X5)({type:"validation",roleId:"deterministic-consistency-fix",status:"success",message:`跨章一致性数值定点修复:${b} 处(${c.slice(0,4).join("、")})`,details:c.slice(4)},{subtitle:"跨章一致性修复"}))}let aQ=[{key:"export-gate",label:"导出门禁",passed:(az={exportGate:aK,qualityReport:aI,repairStrategies:aJ}).exportGate.passed,message:az.exportGate.passed?"导出门禁通过":`仍有 ${az.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:az.qualityReport.passed,message:`${az.qualityReport.deliveryProbability}% / ${az.qualityReport.target}%`},{key:"completeness",label:"资料完整性",passed:az.qualityReport.scores.completeness>=85,message:`${az.qualityReport.scores.completeness}/100`},{key:"specificity",label:"方案针对性",passed:az.qualityReport.scores.specificity>=85,message:`${az.qualityReport.scores.specificity}/100`},{key:"compliance",label:"合规性",passed:az.qualityReport.scores.compliance>=80,message:`${az.qualityReport.scores.compliance}/100`},{key:"repair-strategies",label:"修复策略",passed:0===az.repairStrategies.filter(a=>"high"===a.priority).length,message:az.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}],aR=function(a){let b=[...a.diagnostics.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>({name:a.name,durationMs:a.durationMs}));return{llmCalls:a.diagnostics.llm.calls,llmFailures:a.diagnostics.llm.failures,maxParallelLlm:a.diagnostics.llm.maxActive,searchQueries:a.diagnostics.evidence.searchQueries,evidenceContextChars:a.diagnostics.evidence.contextChars,qualityIssues:{...a.diagnostics.quality},slowMetrics:b,elapsedMs:a.startedAt&&a.endedAt?a.endedAt-a.startedAt:void 0}}({diagnostics:p}),aS=(0,x.Ff)(ao),aT=function(a,b=""){let c=function(a){let b=a.map(a=>`${a.title} ${(a.sections||[]).join(" ")} ${a.content}`).join("\n"),c=[{label:"工程概况",pattern:/工程概况|项目概况|基本概况/u},{label:"主要施工内容",pattern:/主要施工内容/u},{label:"重难点分析",pattern:/重点.{0,4}难点/u},{label:"施工部署",pattern:/施工部署|总体部署|流水/u},{label:"进度计划",pattern:/进度计划|工期保障|工期计划/u},{label:"质量保证",pattern:/质量保证|质量管理|质量控制/u},{label:"安全文明",pattern:/安全.{0,8}(?:管理|措施|文明)|文明施工/u},{label:"资源配置",pattern:/劳动力|机械设备|材料.{0,4}计划|资源配置/u},{label:"绿色环保",pattern:/绿色施工|扬尘|噪声|环保/u},{label:"应急管理",pattern:/应急/u}],d=c.filter(a=>a.pattern.test(b)),e=cf(d.length/c.length*100),f=c.filter(a=>!a.pattern.test(b)).map(a=>a.label);return{score:e,detail:`覆盖 ${d.length}/${c.length} 个核心结构组${f.length?`;缺失:${f.join("、")}`:""}`}}(a),d=function(a){let b=a.map(a=>a.content).join("\n"),c=new Set(b.match(T.s2)||[]),d=new Set(b.match(/工程量|材料|设备|范围|流程|验收|检测|复试|调试|隐蔽|检验批|资料|记录|系统|部位|接口|规格|标准/gu)||[]),e=Math.max(1,b.length),f=c.size/(e/1e3);return{score:cf(Math.min(100,22*f+d.size/18*15)),detail:`量化参数 ${c.size} 项(每千字 ${f.toFixed(1)}),专业事实词 ${d.size}/18 类`}}(a),e=function(a){let b=a.map(a=>a.content).join("\n"),c=new Set(b.match(T.aX)||[]),d=Math.max(1,b.length),e=c.size/(d/1e3);return{score:cf(Math.min(100,20*e+40)),detail:`工艺参数 ${c.size} 项(每千字 ${e.toFixed(1)})`}}(a),f=function(a,b=""){let c=(b||a.map(a=>a.content).join("\n\n")).split("\n"),d=0,e=0,f=0;for(;f<c.length;){let a=c[f].trim();if(!/^\|.+\|$/u.test(a)){f+=1;continue}let b=[];for(;f<c.length&&/^\|.+\|$/u.test(c[f].trim());)b.push(c[f].trim()),f+=1;b.length<3||(d+=1,0===b.slice(1).filter(a=>a.replace(/\|/gu,"").replace(/[\s\-:]/gu,"").length>0).reduce((a,b)=>a+b.split("|").slice(1,-1).map(a=>a.trim()).filter(a=>""===a||"-"===a||"—"===a||"/"===a).length,0)&&(e+=1))}return{score:0===d?40:cf(e/d*100),detail:`表格 ${d} 个,其中字段完整 ${e} 个`}}(a,b),g=function(a){let b=cb(a),c=a.reduce((a,b)=>a+(b.content.match(/本小节围绕|交底覆盖率按100%|24小时内形成整改责任|按施工准备→过程实施→检查验收→问题整改→资料归档的闭环组织|按作业条件确认→技术交底→过程实施|依据本项目已确认资料中的项目边界/gu)||[]).length,0);return{score:cf(100-15*c-25*b.filter(a=>"error"===a.level).length),detail:`模板化空话命中 ${c} 处,废话段问题 ${b.length} 项`}}(a),h=function(a){let b=ca(a);return{score:cf(100-20*b.length-20*b.filter(a=>"error"===a.level).length),detail:`重复段落问题 ${b.length} 项`}}(a),i=function(a,b=""){let c=b||a.map(a=>a.content).join("\n\n"),d=[{label:"质量标准",pattern:/质量标准|质量要求|合格率/u},{label:"计划工期",pattern:/计划工期|工期要求|日历天/u},{label:"保修",pattern:/缺陷责任期|保修|质保/u},{label:"安全目标",pattern:/安全.{0,8}目标|文明.{0,8}目标/u},{label:"项目经理",pattern:/项目经理|项目负责人/u}],e=ce(a,b),f=d.filter(a=>a.pattern.test(c));return{score:cf(f.length/d.length*100),detail:`招标硬性要求响应 ${f.length}/${d.length} 项${e.length?`(未响应:${e.map(a=>a.message.replace(/未检测到对招标硬性要求的响应:/u,"")).join("、")})`:""}`}}(a,b),j=[{key:"structure",label:"结构完整度",score:c.score,detail:c.detail,weight:.18},{key:"factLanding",label:"事实落位率",score:d.score,detail:d.detail,weight:.18},{key:"processParameter",label:"工艺参数密度",score:e.score,detail:e.detail,weight:.16},{key:"table",label:"表格完整度",score:f.score,detail:f.detail,weight:.12},{key:"filler",label:"废话控制",score:g.score,detail:g.detail,weight:.14},{key:"duplication",label:"重复控制",score:h.score,detail:h.detail,weight:.12},{key:"reviewResponse",label:"评标响应度",score:i.score,detail:i.detail,weight:.1}],k=cf(j.reduce((a,b)=>a+b.score*b.weight,0)),l=k>=85?"专业":k>=70?"良好":k>=55?"合格":"待提升",m=[...ca(a),...cb(a),...cc(a),...cd(a)].slice(0,5).map(a=>a.message),n=j.filter(a=>a.score<70).map(a=>`${a.label}(${a.score}分)`);return{total:k,grade:l,dimensions:j,summary:`施工组织设计专业度评分 ${k} 分(${l})${n.length?`;待提升:${n.join("、")}`:""}`,topIssues:m}}(au,av);p.quality.blockingCount+=aS.blocking,p.quality.importantCount+=aS.important,p.quality.minorCount+=aS.minor;let aU=aK.blockingIssues.length,aY=[...at,...aL].map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:aU>0?"failed":"success",message:`阻断 ${aU},问题 ${ao.length}`}:"export_ready"===a.type?{...a,status:aK.passed?"success":"failed",message:aK.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:aK.passed&&"failed"===a.status&&/^agent-(?:reviewer|repairer)-/u.test(a.roleId)?{...a,status:"skipped",message:`${a.message||"章节中间审查失败"};最终门禁已通过,历史中间态已归档`}:a);aY.push((0,al.X5)({type:"validation",roleId:"agent-final-gate",status:aK.passed?"success":"failed",message:aK.passed?"Agent 最终门禁通过":`Agent 最终门禁阻断 ${aU} 个问题`,details:aK.blockingIssues.slice(0,12).map(a=>a.message)},{subtitle:"Agent 最终门禁"})),aY.push((0,al.X5)({type:"validation",roleId:"document-delivery-score",status:aI.passed?"success":aK.passed?"skipped":"failed",message:aK.passed&&!aI.passed?`${aI.summary}(导出门禁已通过,作为后续优化建议归档)`:aI.summary,details:aI.actions},{subtitle:"交付评分"})),aY.push((0,al.X5)({type:"validation",roleId:"document-professional-score",status:"专业"===aT.grade||"良好"===aT.grade?"success":"skipped",message:aT.summary,details:[...aT.dimensions.map(a=>`${a.label}:${a.score} 分(${a.detail})`),...aT.topIssues.map(a=>`待修复:${a}`)]},{subtitle:"专业度评分"})),M&&aY.push((0,al.X5)({type:"reference",roleId:"document-writing-task-brief",status:"success",message:`写作任务书:${M.documentType},${M.chapters.length} 章任务卡,全局写作焦点 ${M.globalWritingFocus.length} 条`,details:[...M.globalWritingFocus,...M.chapters.slice(0,10).map(a=>`${a.chapterTitle}:覆盖 ${a.mustCover.length} 项`)],subtitle:"写作任务书"})),aY.push((0,al.X5)({type:"reference",roleId:"knowledge-coverage",status:aE.score>=85?"success":"failed",message:`资料确认覆盖率:${aE.score}%(证据 ${aE.evidenceCount} 条,文件 ${aE.confirmedFiles} 份)`,details:[aE.remediation]},{subtitle:"资料覆盖"})),aY.push((0,al.X5)({type:"validation",roleId:"document-review-checklist",status:aQ.every(a=>a.passed)?"success":aK.passed?"skipped":"failed",message:`交付复核清单:通过 ${aQ.filter(a=>a.passed).length}/${aQ.length}${aK.passed&&!aQ.every(a=>a.passed)?"(导出门禁已通过,其余项作为优化建议归档)":""}`,details:aQ.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let aZ=[...p.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(",");aY.push((0,al.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${p.llm.calls} 次,失败 ${p.llm.failures} 次,瞬态重试 ${p.llm.retries} 次,峰值并行 ${p.llm.maxActive},检索 ${p.evidence.searchQueries} 次/${Math.round(p.evidence.searchMs/1e3)} 秒,证据上下文 ${p.evidence.contextChars} 字,噪声过滤 ${p.evidence.filteredNoise} 条,质量问题 阻断${p.quality.blockingCount}/重要${p.quality.importantCount}/轻微${p.quality.minorCount}${aZ?`,Top耗时:${aZ}`:""}`},{subtitle:"后台诊断"}));let a$=au.map(a=>({...a,evidence:(0,s.QR)(a.evidence||[],{maxItems:12,maxChars:9e3,preservePinned:!0})}));return au=a$,{templateId:g.id,templateName:g.name,title:g.outputTitle,requirement:Q||"",projectRoot:y,projectId:A,exportSettings:g.exportSettings,generationSettings:g.generationSettings,facts:aa,structuredFacts:af,factsModel:ah,chapters:a$,sources:am,missingItems:[...new Set(E)],validation:aj,validationIssues:ao,exportGate:aK,executionStages:aY,assets:as,partialChapters:au.map(a=>({id:a.id,title:a.title,chars:(0,w.V7)(a.content),status:bC(a,n.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:a$,promptRules:t,agentWorkflow:J,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:p,profile:function(a){let b=`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`,c=[{pattern:/专项施工|危大|专项方案/u,type:"专项施工方案",dimensions:["专项对象边界","工艺参数","风险控制","验收要求","应急措施"]},{pattern:/投标|技术标|响应|招标/u,type:"投标技术方案",dimensions:["招标响应","技术优势","工期质量安全承诺","资源保障","履约可实施性"]},{pattern:/监理|旁站|巡视|平行检验/u,type:"监理规划/细则",dimensions:["监理目标","旁站巡视","平行检验","验收程序","资料签认"]},{pattern:/可研|可行性|项目建议书|投资估算/u,type:"可研/项目建议类文档",dimensions:["建设必要性","方案比选","投资估算","风险分析","实施效益"]},{pattern:/运维|维护|保养|巡检/u,type:"运维维护方案",dimensions:["巡检频次","维护流程","故障响应","备品备件","记录闭环"]}].find(a=>a.pattern.test(b));return{type:c?.type||"施工组织设计/施工技术方案",dimensions:c?.dimensions||["工程概况","施工部署","进度质量安全","资源配置","施工工艺和验收闭环"],requiredEvidencePolicy:"本地知识库为完整事实源;系统暂未确认的事实必须通过扩大检索、事实补抽或落位修复解决,不得归因为用户资料缺失。"}}({template:g,chapters:f,requirement:Q}),knowledgeCoverage:aE,factTraces:aF,chapterCoverage:aH,retrievalCoverage:F,qualityReport:aI,repairStrategies:aJ,reviewChecklist:aQ,professionalScore:aT,writingTaskBrief:M,workflowVersion:bh.x,telemetry:aR,qualityBenchmark:function(a){var b,c;if(!a||a.trim().length<500)return;let d=(0,bd.aF)(a),e=(0,be.Ah)(d);if(!e)return;let f=(0,bd.WT)(a),g=e.profile,h=Math.max(g.arrowChainCoverage,.08),i=[{key:"paramDensity",label:"参数密度",generated:f.paramDensity,reference:g.paramDensity,score:bf(f.paramDensity,.8*g.paramDensity),unit:"perKChars"},{key:"arrowChainCoverage",label:"工序链覆盖率",generated:f.arrowChainCoverage,reference:h,score:bf(f.arrowChainCoverage,h),unit:"percent"},{key:"duplicationRate",label:"段落重复率",generated:f.duplicationRate,reference:g.duplicationRate,score:(b=f.duplicationRate)<=(c=g.duplicationRate)?100:Math.max(0,Math.round(100-(b-c)*400)),unit:"percent"},{key:"tableCount",label:"表格数量",generated:f.tableCount,reference:g.tableCount,score:bf(f.tableCount,.6*g.tableCount),unit:"count"},{key:"sectionCount",label:"章节结构",generated:f.sectionCount,reference:g.sectionCount,score:f.sectionCount>=.4*g.sectionCount?100:bf(f.sectionCount,g.sectionCount),unit:"count"}].map(a=>({...a,score:Math.round(Math.min(120,a.score)),passed:a.score>=80})),j={paramDensity:.3,arrowChainCoverage:.2,duplicationRate:.2,tableCount:.15,sectionCount:.15},k=Math.round(Math.min(100,i.reduce((a,b)=>a+b.score*(j[b.key]||0),0)));return{projectType:d,referenceSourceCount:e.sourceCount,overallScore:k,items:i}}(av)},generatedAt:Date.now(),markdown:av}}var co=c(70963),cp=c(25284);let cq=["知识库","系统暂未","项目资料暂未","资料未明确","暂未明确","待确认","待资料复核","待系统","未检索到","资料不足","无法确认","建议补充","不适用","COL","可核验信息"];function cr(a){return a.replace(/\s+/gu,"").toLowerCase()}function cs(a){return`${a.fieldId||""} ${a.fieldName||""} ${a.key} ${(0,z.lG)(a.value)}`.replace(/\s+/gu," ").trim()}function ct(a){return(0,z.lG)(a.value).replace(/\s+/gu," ").trim()}function cu(a,b){let c=cr(cs(a));return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(cr(a)))}function cv(a,b){let c=[...a.works.map(a=>`工程:${a.name} ${a.scope}`),...a.methods.map(a=>`工法:${a.name} ${(a.applicableWorks||[]).join("、")}`),...a.resources.map(a=>`资源:${a.name} ${a.spec} ${a.quantity}${a.unit}`),...a.schedule.map(a=>`工期:${a.milestone} ${a.duration}`),...a.standards.map(a=>`标准:${a.code} ${a.description}`),...a.risks.map(a=>`风险:${a.risk} ${a.mitigation}`),...a.requirements.map(a=>`要求:${a.category} ${a.detail}`),...a.siteConditions.map(a=>`现场:${a.condition} ${a.impact}`)],d=cr(b);return c.filter(a=>cr(a).includes(d)||b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(b=>cr(a).includes(cr(b))))}function cw(a){let b=[];return/重点|难点|危大|风险|安全|应急/u.test(a)&&b.push("安全 文明 危大 风险 应急 临边 洞口 消防 临电 高处 起重 吊装 基坑 脚手架 模板 支护 图纸 施工说明 审查意见"),/工期|进度|节点|计划/u.test(a)&&b.push("工期 日历天 节点 进度 计划 开工 竣工 关键线路"),/质量|验收|标准|实测|通病/u.test(a)&&b.push("质量 验收 合格 标准 规范 检验批 隐蔽 复试 样板"),/资源|材料|机械|人材机|设备/u.test(a)&&b.push("清单 工程量 材料 设备 机械 劳动力 规格 型号 数量 单位"),/概况|说明|依据|范围/u.test(a)&&b.push("工程名称 项目名称 建设地点 建筑面积 建设规模 招标范围 施工范围"),/部署|施工|流水|区段|组织/u.test(a)&&b.push("施工 组织 部署 区段 流水 作业面 工序 穿插 图纸 清单"),b}function cx(a){return/项目特点.*重点.*难点|重点.*难点.*分析/u.test(a)?"系统识别本项目特点、施工重点、施工难点、形成原因、影响范围和应对措施,必须落位项目规模、结构形式、工期、专业范围、现场约束等具体事实,并为“项目主要施工内容”提供逐项对应依据。":/项目主要施工内容/u.test(a)?"按专业工程和关键工序展开施工内容,必须逐项响应“项目特点、重点、难点分析”中的重点难点,说明施工范围、实施内容、控制措施、验收节点和资料闭环。":/工期|进度|节点|计划/u.test(a)?"使用项目工期、节点和资源事实说明进度组织要求。":/质量|验收|标准|实测/u.test(a)?"使用项目质量目标、验收标准和工序事实说明质量控制要求。":/安全|危大|风险|应急/u.test(a)?"使用项目风险、危大工程和安全文明事实说明安全管控要求。":/资源|材料|机械|人材机/u.test(a)?"使用清单、材料、设备和劳动力事实说明资源配置要求。":/概况|说明|依据/u.test(a)?"使用项目基础事实说明编制边界和工程概况。":"使用已确认项目事实形成正式施工组织内容。"}function cy(a){let b=a.facts.slice(0,18).map(a=>`- ${a.key}:${ct(a)}${a.sourceFile?`(来源:${a.sourceFile})`:""}`).join("\n"),c=a.sections.map((a,b)=>`${b+1}. 必须输出三级标题:### ${a.title}
|
|
68
|
+
写作目标:${a.objective}
|
|
69
|
+
支撑情况:证据 ${a.evidenceIds.length},事实 ${a.factIds.length},图谱 ${a.graphNodeIds.length}
|
|
70
|
+
最小正文深度:${a.minChars} 字`).join("\n");return["【Agent 章节任务】",`任务ID:${a.taskId}`,`章节:${a.title}`,a.graphContext?`图谱上下文:
|
|
71
|
+
${a.graphContext}`:"",b?`事实卡:
|
|
72
|
+
${b}`:"",`小节任务:
|
|
73
|
+
${c}`,"写作要求:必须严格按“小节任务”逐项输出,每个任务都必须保留完全一致的三级标题“### 小节标题”;不得合并小节、不得改写小节标题、不得省略小节;项目专属事实只使用事实卡、图谱上下文和绑定证据,法律法规、标准规范等公共知识可直接引用;不得输出后台话术、兜底措辞、待确认、不适用;缺少项目事实的小节不得编造。"].filter(Boolean).join("\n\n")}function cz(a){let b=ct(a);return!(!b||b.length<3||/^(?:见|详见|按|执行|参见|依据).{0,16}(?:前附表|招标公告|招标文件|合同|协议书|通用条款|专用条款|图纸|清单|附件|资料)$/u.test(b)||/^(?:合同协议书|通用条款|专用条款|招标文件|招标公告|投标人须知前附表|附件|资料)$/u.test(b.replace(/[()()\d一二三四五六七八九十、..\s]/gu,"")))&&/项目|工程|编号|地点|规模|范围|工期|质量|安全|资源|材料|设备|验收|\d/u.test(cs(a))}function cA(a){let b=[],c=a.draft.content||"";for(let d of cq)c.includes(d)&&b.push({level:"error",severity:"blocker",category:"style",owner:"system",message:`${a.draft.title} 正文包含禁止话术:${d}`,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,w.V7)(c);let d=a.plannedCoverage,e=a=>{let b=d?.[a];return b&&b.length>0?b[0]:a},f=new Map;for(let a of Object.values(d||{}))a.length>0&&f.set(a[0],(f.get(a[0])||0)+1);let g=a=>{let b=d?.[a];return!!b&&0!==b.length&&(f.get(b[0])||1)>1},h=new Map,i=new Set;for(let b of a.task.sections){let a=e(b.title);g(b.title);let c=h.get(a);h.set(a,void 0===c?b.minChars:Math.max(c,b.minChars))}for(let d of a.task.sections){let a=e(d.title),f=g(d.title),j=(0,z.Xl)(c,a,{fuzzy:!0});if(j.includes("[WRITER_MISSING_SECTION]")||!j&&c.includes("[WRITER_MISSING_SECTION]"))i.has(a)||(i.add(a),b.push({level:"error",severity:"blocker",category:"structure",owner:"system",message:f?`${a} Writer 未完成(承接 ${d.title})`:`${d.title} Writer 未完成`,suggestion:"Repairer 必须基于该小节事实卡和证据生成正式正文,并删除 WRITER_MISSING_SECTION 标记。"}));else if(j&&!i.has(a)){i.add(a);let c=h.get(a)||d.minChars,e=/项目特点.*重点.*难点|重点.*难点.*分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试|见证取样/u.test(d.title),g=f&&!e?Math.max(200,Math.floor(.5*c)):c;(0,w.V7)(j)>=Math.floor(.8*g)||b.push({level:e?"error":"warning",severity:e?"blocker":"warning",category:"structure",owner:"system",message:f?`${a} 正文不足,未达到任务最小深度(承接 ${d.title})`:`${d.title} 正文不足,未达到任务最小深度`,suggestion:e?"关键小节必须基于项目事实和对应关系重写补足;不得仅保留概述性文字。":"应基于该小节事实卡和证据重新生成,不得使用标题占位。"})}else if(!j&&!i.has(a)){i.add(a);let c=/项目特点.*重点.*难点|重点.*难点.*分析|项目主要施工内容|主要分部分项工程施工方案|主要施工方法|危大工程专项施工方案审批流程|原材料进场复试|见证取样/u.test(d.title);b.push({level:c?"error":"warning",severity:c?"blocker":"warning",category:"structure",owner:"system",message:c?`${d.title} 正文不足,未达到任务最小深度`:`${f?`承接小节 ${a} 缺失`:d.title} 未匹配到独立小节标题`,suggestion:c?"关键小节缺失正文,必须基于该小节事实卡和证据生成正式正文,不得以标题占位。":"正文已成文但小节标题与规划标题不完全一致,建议后续按规划标题进一步规范结构。"})}if(d.ready||b.push(...d.issues.map(a=>({...a,level:"warning",severity:"warning"}))),/主要分部分项工程施工方案|主要施工方法/u.test(d.title)){let e=(0,z.Xl)(c,a,{fuzzy:!0}),f=(0,w.V7)(e),g=new Set([...e.match(T.aX)||[],...e.match(T.LT)||[]]).size,h=new Set(e.match(T.s2)||[]).size,i=f>0?h/(f/1e3):0;(0,w.V7)(e)>=800&&(g<4||i<2)&&b.push({level:"warning",severity:"warning",category:"professional_chain",owner:"system",message:`${d.title} 参数落位不足:工艺参数 ${g} 个(要求不少于 4 个),量化参数密度每千字 ${i.toFixed(1)} 个(要求不少于 2 个)`,suggestion:"必须补充 mm/MPa/间距/偏差/坡度/试验压力等工艺参数(来自绑定资料或行业规范值)或设备型号规格参数,并提升量化参数(数量/规格/工期/面积等)落位密度;同一参数不得反复堆砌凑数。"})}if(/主要分部分项工程施工方案|主要施工方法|项目主要施工内容|施工流程|施工顺序|多工序穿插|三检制度|隐蔽工程验收|闭环整改|应急演练|转运路线/u.test(d.title)){let e=(0,z.Xl)(c,a,{fuzzy:!0}),f=(e.match(/→/gu)||[]).length;(0,w.V7)(e)>=500&&f<3&&b.push({level:"warning",severity:"warning",category:"professional_chain",owner:"system",message:`${d.title} 工序链箭头缺失:当前 ${f} 个“→”,工序序列未按箭头链表达`,suggestion:"工艺流程与方法叙述中的连续工序必须用“→”串联(如“基层清理→放线定位→分层摊铺→碾压→压实度检测→验收”),每条链不少于 3 个环节,方法叙述中同样需要箭头链。"})}}let j=a.context.materialScope.selectedRoots;for(let d of a.context.materialScope.rejectedRoots)d&&!j.includes(d)&&c.includes(d)&&b.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 混入非当前资料组名称:${d}`,suggestion:"必须删除跨项目内容并重新检索当前资料组证据。"});let k=a.task.facts.filter(cz),l=k.filter(a=>{let b=ct(a);return b.length>=2&&c.includes(b.slice(0,Math.min(18,b.length)))}).length;k.length>=3&&0===l&&1200>(0,w.V7)(c)&&b.push({level:"warning",severity:"warning",category:"evidence_coverage",owner:"system",message:`${a.draft.title} 未明显落位章节事实卡`,suggestion:"建议将章节事实卡中的关键工程事实写入对应小节,但不因引用型或低可执行事实阻断。"});let m=b.filter(a=>"error"===a.level||"blocker"===a.severity),n=b.filter(a=>/正文不足|未落位章节事实卡/u.test(a.message)),o=m.some(a=>/Writer 未完成|正文不足,未达到任务最小深度/u.test(a.message));return{issues:b,supportedFacts:l,unsupportedSignals:b.map(a=>a.message),repairable:b.length>0&&(b.length<=6||n.length===b.length||0===m.length||o)}}function cB(a){return a.replace(/\s+/gu,"").toLowerCase()}var cC=c(14070);async function cD(a){let b=(0,d.QJ)(a.templateId);if(!b)throw Error("Document template not found");let c=b.chapters.find(b=>b.id===a.chapterId);if(!c)throw Error("Document chapter not found");let f=e.resolve(a.projectRoot||(0,g.aY)());if(!f)throw Error("No knowledge base project found");let h=(0,g.Qh)(),i=(0,ao.Hh)(f,b,{requirement:a.requirement}),j=(0,ao.W9)(f,b,{requirement:a.requirement}),{kindByPath:k,processingByPath:l}=(0,ao.Hz)(j),m=new Set(i),n=aS(f,i),o=new Map([...k.entries()].map(([a,b])=>[a,(0,ao._W)(b)])),p=new Map([...l.entries()].map(([a,b])=>[a,b])),q=b4(await h.getProject(f),[...m],a.maxEvidencePerChapter),r=[],v=[...m].filter(Boolean).sort(),w=b_(c,c.queries,[]),x=b0(c,[]);for(let a of w.slice(0,x)){let b=await h.search(f,a,{scope:"project",filters:{filePaths:v},limit:Math.min(q,12),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});r.push(...b.results.filter(a=>(0,am.Tz)(f,a.filePath,m)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:o.get(a.filePath),processingType:p.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let y=b$(c,aV(r.filter(a=>(0,am.Tz)(f,a.filePath,m)),n),{maxItems:b1(q,c),maxChars:16e3,preservePinned:!0});aX(y,n,`regenerate:${c.id}`);let z=a.currentMarkdown||"",A=new Set(a.existingFacts??[]),B=c.requiredFacts.filter(a=>!A.has(a)&&!y.some(b=>(0,u.Lk)(b,a)));if(0===y.length)throw Error(`${(0,t.GQ)(c.title)} 缺少可支撑正文的项目资料证据`);let C=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",z?`> 当前文档上下文摘要:${z.replace(/\s+/gu," ")}`:"",`本章依据已锁定项目资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`,"","### 资料依据",...y.map(s.OF)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:C,evidence:y,missingFacts:B}}async function cE(a){(0,z.Te)(a.signal);let b=(0,d.QJ)(a.templateId);if(!b)throw Error("Document template not found");let c=e.resolve(a.projectRoot||(0,g.aY)());if(!c)throw Error("No knowledge base project found");let o=(0,f.computeProjectId)(c),p=b,q=(0,g.Qh)(),y=[],A=[],B=(b,c=I)=>{let d=b?[...b].sort((a,b)=>{let c=A.indexOf(a.id),d=A.indexOf(b.id);return(c<0?Number.MAX_SAFE_INTEGER:c)-(d<0?Number.MAX_SAFE_INTEGER:d)}):void 0;a.onProgress?.([...c],d?{chapters:d}:void 0)},C=Math.max(15e3,Math.min(6e4,Number(process.env.DOCUMENT_GENERATION_HEARTBEAT_MS??3e4))),D=async(b,c=I)=>{let d=setInterval(()=>{a.signal?.aborted||B(y,c)},C);try{return await b()}finally{clearInterval(d)}},E=(0,d.N6)(p)||"none",H=(0,i.Mu)(E)?.name||E,I=[(0,al.X5)({type:"role_binding",roleId:E,status:"running",message:`生成任务已创建,正在读取模板与角色配置:${p.name}`,details:[`当前项目:${o}`,`资料目录:${(0,g.NW)(c)}`,"正在读取项目资料包和提示词配置"],progress:{current:1,total:4,label:"初始化配置"}},{subtitle:H,roleName:H,order:0})];B();let J=(0,d.bj)(p),K=J.bindings;(0,al.fx)(I,(0,al.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在分析模板规范、用户要求与项目资料包",details:["解析 OUTLINE 与模板章节","读取项目资料包","自动识别资料类型并构建项目理解"],progress:{current:1,total:3,label:"准备分析"}},{subtitle:"生成准备",order:I.length})),B();let Q=(0,by.Qu)({template:p,requirement:a.requirement,projectRoot:c,facts:[]}).materialScope.selectedFiles;if(0===Q.length)throw Error("模板未绑定可用项目资料包,请先在模板中绑定需要参与生成的项目文件夹。");let R=(0,ao.W9)(c,p,{requirement:a.requirement}),W=(0,ao._n)(p,R),{kindByPath:Y,processingByPath:Z}=(0,ao.Hz)(R),aa=(0,am.fC)([...J.writerPrompts,...J.chapterPrompts]),ab=(0,t.cs)([{text:a.requirement,source:"用户需求",strict:!0},{text:aa,source:"提示词角色",strict:!0}]),ac=ab.length>=2;ac&&(p={...b,chapters:ab});let aq=await D(()=>Promise.resolve((0,k.P)(c,{requirement:a.requirement,boundFilePaths:Q})));(0,al.fx)(I,(0,al.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在生成自动文档规格并评估生成准备度",details:[`项目资料:${Q.length} 份`,`资料类型:${Object.values(R.groups).filter(a=>a.length>0).length} 类`,"生成事实字段与章节约束"],progress:{current:2,total:3,label:"规格评估"}},{subtitle:"生成准备",order:I.length})),B();let ar=await D(()=>Promise.resolve((0,j.x)(p,a.requirement||""))),as=ar.spec,at=function(a,b=""){let c=`${a?.id||""} ${a?.name||""} ${a?.category||""} ${a?.description||""} ${a?.outputTitle||""} ${b}`;return/施工组织设计|施工方案|危大工程|人、材、机|安全文明施工/u.test(c)?m:l}(p,a.requirement||""),au=(0,r.$)({template:p,spec:as,summary:aq,resolvedRoles:[]});if(!au.ready)throw Error(`生成准备度不足:${au.blockingIssues.join(";")}`);let ax=[W.prompt,(0,k.F)(aq,{publicSafe:!0}),(0,j.N)(as,ar.sourceHash,{publicSafe:!0}),(0,r.R)(au,{publicSafe:!0})].filter(Boolean).join("\n\n"),ay=[W.prompt,(0,k.F)(aq),(0,j.N)(as,ar.sourceHash),(0,r.R)(au)].filter(Boolean).join("\n\n"),az=(0,am.fC)([...J.writerPrompts,...J.formattingPrompts]),aB=(0,am.fC)([...J.writerPrompts,...J.chapterPrompts,...J.formattingPrompts]),aD=(0,am.fC)(J.prompts),aE=(0,h.I)().load().webAccess||{enabled:!1,allowProjectFacts:!1,maxQueriesPerChapter:2,maxResultsPerQuery:3,trustedDomains:[]},aF=(0,aI.c_)({promptTexts:[ax,aD].filter(Boolean).join("\n\n"),requirement:a.requirement,template:p,rolePrompts:J.prompts}),aG=[(0,aI.el)(aF),!aE.enabled?"":"公开资料补充使用规则:\n1. 公开资料只可用于补充通用规范、政策、工艺和措施。\n2. 不得使用公开资料新增或修改项目名称、建设地点、建设规模、工期、质量标准、工程量、材料规格、图纸参数、商务数据。\n3. 本地项目资料与公开资料冲突时,必须以本地项目资料为准。\n4. 不得在正文中出现任何检索过程、外部页面、工具调用或系统内部过程性表述。\n5. 不得把公开资料中的其他项目案例参数写入本项目正文。"].filter(Boolean).join("\n\n"),aJ=[ax,aG,`生成前规划章节结构:
|
|
74
|
+
${(0,v.CK)(p)}`,az||aB].filter(Boolean).join("\n\n"),aK=[ay,aG,(0,am.fC)([...J.extractionPrompts,...J.referencePrompts])].filter(Boolean).join("\n\n"),aL=[ax,aG,(0,am.fC)([...J.writerPrompts,...J.chapterPrompts,...J.formattingPrompts])].filter(Boolean).join("\n\n");(0,al.fx)(I,(0,al.X5)({type:"validation",roleId:"document-preparation",status:"success",message:`模板规范与项目资料理解完成,识别 ${Q.length} 份项目资料`,details:[`提示词绑定:${K.length} 个`,`项目资料包:${R.materialRoots.join("、")||"当前知识库"}`,ac?`识别 OUTLINE 章节:${ab.length} 个`:"未识别显式 OUTLINE,使用模板章节"],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备",order:I.length})),B();let aM=new Set(Q),aN=new Map([...Y.entries()].map(([a,b])=>[a,(0,ao._W)(b)])),aO=new Map([...Z.entries()].map(([a,b])=>[a,b]));(0,al.fx)(I,(0,al.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:"running",message:"正在读取项目资料包索引",details:["使用上传阶段已完成的解析、切片和索引结果","不在生成流程中重新解析或入库","准备按资料类型召回章节证据"],progress:{current:1,total:3,label:"读取索引"}},{subtitle:"知识库检索",order:I.length})),B();let aP=await D(()=>q.getProject(c)),aR=function(a,b){let c=new Set(b.filter(Boolean)),d=(a.listFiles?.()||[]).filter(a=>0===c.size||c.has(a.relativePath)),e=new Set(d.map(a=>a.relativePath)),f=[...c].filter(a=>!e.has(a)),g=d.filter(a=>0===Math.max(0,Math.ceil(Number(a.chunkCount)||0))).map(a=>a.relativePath),h=d.filter(a=>"error"===a.status).map(a=>a.relativePath),i="function"==typeof a.countPendingIndexJobs?a.countPendingIndexJobs():0,j="function"==typeof a.getVectorStatus?a.getVectorStatus():void 0,k=d.filter(a=>"error"!==a.status&&Math.max(0,Math.ceil(Number(a.chunkCount)||0))>0),l=k.map(a=>a.relativePath),m=k.reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0),n=[...b3("部分绑定文件未完成索引,已自动跳过",f),...b3("部分绑定文件没有可用切片,已自动跳过",g),...b3("部分绑定文件索引失败,已自动跳过",h)],o=c.size>0&&0===m?["所有绑定文件均无可用切片"]:[],p=[...n,...i>0?[`仍有 ${i} 个待索引任务,建议等待索引完成后生成`]:[],...j&&"ready"!==j.status?[`向量索引状态为 ${j.status},当前召回质量可能下降`]:[]];return{scopedRecords:d,usablePaths:l,missingFiles:f,emptyFiles:g,errorFiles:h,pendingJobs:i,vectorStatus:j,usableChunkCount:m,blockingIssues:o,warnings:p}}(aP,[...aM]);if(aR.blockingIssues.length>0)throw Error(`生成前知识索引不可用:${aR.blockingIssues.join(";")}`);let aT=new Set(aR.usablePaths),aU=aS(o,[...aT]),aY=b4(aP,[...aT],a.maxEvidencePerChapter),aZ=aR.pendingJobs>0||0===aR.usableChunkCount,a$=function(a){let b=Math.max(0,Math.ceil(a.totalChunks||0)),c=Math.max(0,Math.ceil(a.loadedChunks||0)),d=Math.max(0,b-c),e=b>0?c/b:1,f=[...b>=1e3&&e<.35?["切片未完全预加载"]:[],...!1===a.vectorReady?["向量索引未就绪"]:[]];return{totalChunks:b,loadedChunks:c,omittedChunks:d,loadedRatio:e,highRisk:f.length>0,riskReason:f.join("、")||void 0}}({totalChunks:Math.min(aR.usableChunkCount,20*Q.length),loadedChunks:Math.min(aR.usableChunkCount,20*Q.length),vectorReady:aR.vectorStatus?"ready"===aR.vectorStatus.status:void 0});(0,al.fx)(I,(0,al.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:aZ?"failed":"success",message:`已读取知识索引:项目资料 ${aR.scopedRecords.length} 份,可用切片 ${aR.usableChunkCount} 条`,details:[`项目资料:${aM.size} 份`,`可用证据文件:${aT.size} 份`,`向量状态:${aR.vectorStatus?.status||"unknown"}`,...aR.warnings,"后续将按招标正文/清单/图纸/补疑等资料类型召回"],progress:{current:3,total:3,label:"索引已就绪"}},{subtitle:"知识库检索",order:I.length})),B(),(0,z.Te)(a.signal);let a_=[],a0=[],a1={enabled:aE.enabled,queries:[],evidenceCount:0,filteredCount:0,chapters:[]},a2=[],a3=[],a4=[],a5=[],a6=[],a7=-1,a8=new Map,a9=new Map,ba=(a,b)=>{let c=`${a}::${b.maxChunkContentChars}`;if(!a9.has(c))try{a9.set(c,aP.getFileDetail?.(a,b))}catch{a9.set(c,void 0)}return a9.get(c)},bb=async(a,b,d,e)=>{let f=bZ(e),g=(0,z.c6)({query:a,scopedFilePaths:b,limit:d,weights:f,generationMode:!1}),h=a8.get(g);if(h)return h;let i=await q.search(c,a,{scope:"project",filters:{filePaths:b},limit:d,weights:f,generationMode:!1}).catch(()=>null),j=i?.results||[];return a8.set(g,j),j},bc={stage:(0,al.X5)({type:"file_understanding",roleId:"project-understanding",status:"success",message:`已完成项目资料理解:${R.files.length} 份资料,${Object.values(R.groups).filter(a=>a.length>0).length} 类资料类型`,details:W.prompt.split("\n").slice(0,16)},{subtitle:"项目资料理解",order:I.length})};(0,al.fx)(I,bc.stage),B();let bd=aV(await bF({manager:q,project:aP,projectRoot:c,scopedFilePaths:[...aM].filter(Boolean).sort(),fileRoleByPath:aN,fileProcessingByPath:aO,signal:a.signal}),aU);aX(bd,aU,"project-basic-evidence"),bd.length>0&&(a_.push(...bd),(0,al.fx)(I,(0,al.X5)({type:"knowledge_retrieval",roleId:"project-basic-evidence",status:"success",message:`已锁定项目基础事实证据 ${bd.length} 条`,details:bd.slice(0,8).map(a=>`${e.basename(a.filePath)}|${a.sectionTitle||"正文片段"}|score=${a.score.toFixed(2)}`)},{subtitle:"基础事实召回",order:I.length})),B());let bf=aW(V(a_,p,as),aU),bg=aW($(a_),aU),bh=[...bf,...bg,...aW(_(a_,at),aU)],bi=(0,cp.hp)({projectRoot:c,template:p,requirement:a.requirement}),bm=[...bi?.facts||[],...bh],bo=ak(bm,aW(U(a_),aU),a2,as,at),bs=(0,by.Qu)({template:p,requirement:a.requirement,projectRoot:c,facts:bm,projectGraph:bi?.projectGraph,projectGraphSource:bi?"project-intelligence":void 0});for(let a of(0,by.SU)(bs))(0,al.fx)(I,a);bi&&(0,al.fx)(I,(0,al.X5)({type:"file_understanding",roleId:"project-intelligence-cache",status:"success",message:`已复用入库后项目理解资产与绑定 scope 快照:${bi.files.length} 份绑定资料`,details:[`项目级缓存时间:${new Date(bi.cache.createdAt).toLocaleString()}`,`scope 快照:${bi.scopeSnapshot.scopeHash.slice(0,12)}`,`复用预计算事实:${bi.facts.length} 条`,`复用预计算项目图谱:${bi.projectGraph.works.length}工程/${bi.projectGraph.methods.length}工法/${bi.projectGraph.resources.length}资源`,`复用施工组织设计专项图谱:${bi.constructionOrganizationGraph.workPackages.length} 个工作包/${bi.constructionOrganizationGraph.controlMatrix.length} 条控制矩阵`,`图谱来源:${bi.cache.projectGraphMessage}`,`章节意图证据覆盖:${Object.keys(bi.evidenceByChapterId||{}).length}/${p.chapters.length} 章`,`排除正文不适用资料:${bi.files.filter(a=>!a.usableForBody).length} 份`]},{subtitle:"项目理解缓存 / Scope 快照"})),B();let bt=bs.baseProjectGraph;if(!bi){(0,al.fx)(I,(0,al.X5)({type:"file_understanding",roleId:"project-graph",status:"running",message:`正在临时构建完整项目图谱:${a_.length} 条证据 → LLM 结构化提取`,details:["缓存缺失或版本过期,建议重新构建项目理解缓存;本次生成将临时构建完整项目图谱。","提取:工程内容、施工方法、材料设备、技术标准、重点难点"],progress:{current:2,total:3,label:"项目图谱"}},{subtitle:"项目资料图谱分析",order:I.length})),B();let b=await D(()=>(0,co.i)({evidence:a_,signal:a.signal,projectRoot:c,requirement:a.requirement,templateId:p.id}),I);if(!b.graph)throw Error(`完整项目图谱构建失败:${b.stage.message||b.stage.status}`);bt=b.graph,(0,al.fx)(I,b.stage),B()}bt&&(W=(0,ao._n)(p,R,bt));let bv=function(a){var b;let c=(0,z.c6)({version:"canonical-facts-v5",rulesHash:(0,bk.TG)(a.projectRoot),requirement:a.requirement||"",templateId:a.templateId||"",requiredKeys:a.requiredKeys||[],facts:a.facts.map(a=>({key:a.key,fieldId:a.fieldId,fieldName:a.fieldName,value:a.value,sourceFile:a.sourceFile,roleId:a.roleId,confidence:a.confidence})).sort((a,b)=>`${a.sourceFile}${a.key}${a.value}`.localeCompare(`${b.sourceFile}${b.key}${b.value}`)),graphHash:a.projectGraph?(0,z.c6)(a.projectGraph):"",markdownHash:a.markdown?(0,z.c6)(a.markdown.slice(0,2e4)):""}),d=function(a,b){let c=br(a);if(c)try{let a=JSON.parse(P.readFileSync(e.join(c,`canonical-facts-${b}.json`),"utf8"));return a&&a.byKey&&Array.isArray(a.scopeConflicts)?a:void 0}catch{return}}(a.projectRoot,c);if(d)return d;let f=a.facts||[],g=bu(f,(0,bk.bC)(a.projectRoot));for(let a of g.map(a=>({caseType:"scope_conflict_arbitration",recordedAt:Date.now(),kind:a.kind,scope:a.scope,values:a.values.map(a=>({value:a.value,unit:a.unit,sourceFile:a.sourceFile,priority:a.priority})),winner:a.resolution,confidence:a.confidence,manualReviewRequired:!a.resolution})))bj("arbitration-cases.jsonl",a);let h=bx(f,g),i=bp({facts:h,markdown:a.markdown}),j={};for(let[a,b]of i.entries())j[a]=function(a){let b=a.source.includes("generated_markdown")?"generated_markdown":a.source.includes("evidence")?"evidence":"structured_fact";return{key:a.fieldKey,label:a.label,value:a.value,normalizedValue:X(a.value),sourceType:b,sourceFile:a.source,confidence:a.confidence,priority:bq(b),locked:bq(b)>=80,selectedReason:a.selectedReason}}(b);let k=[];for(let a of[{key:"project_name",label:"项目名称",pattern:/项目名称|工程名称|招标项目名称|project_name/u,bucket:"projectIdentity",valueType:"text"},{key:"project_code",label:"项目编号",pattern:/项目编号|招标项目编号|project_code/u,bucket:"projectIdentity",valueType:"identifier"},{key:"owner",label:"招标人",pattern:/招标人|建设单位|发包人|owner/u,bucket:"projectIdentity",valueType:"organization"},{key:"project_location",label:"建设地点",pattern:/建设地点|实施地点|project_location/u,bucket:"projectIdentity",valueType:"location"},{key:"project_scale",label:"建设规模",pattern:/建设规模|工程规模|project_scale/u,bucket:"projectScope",valueType:"scale"},{key:"construction_scope",label:"施工范围",pattern:/施工范围|招标范围|工程范围/u,bucket:"projectScope",valueType:"text"},{key:"duration",label:"计划工期",pattern:/计划工期|合同工期|总工期|schedule_requirement|duration/u,bucket:"schedule",valueType:"duration"},{key:"quality_target",label:"质量目标",pattern:/质量标准|质量目标|quality_standard/u,bucket:"quality",valueType:"standard"}]){let b=function(a,b,c,d,e){let f=bl.find(a=>a.key===b);return a.filter(a=>d.test(`${a.fieldId||""}${a.key||""}${a.fieldName||""}`)).map(a=>(function(a,b,c){let d=(0,z.lG)(a.value),e=function(a){let b=`${a.sourceFile||""} ${a.sourceRef?.sectionTitle||""} ${a.roleId||""}`;return/补疑|答疑|澄清|补充|更正|修改/u.test(b)?"addendum":/合同/u.test(b)?"contract":/招标|公告|前附表|需求书/u.test(b)?"tender":/清单|工程量|BOQ|报价/u.test(b)?"boq":/图纸|设计|CAD|DWG/u.test(b)?"drawing":/规范|标准/u.test(b)?"standard":"structured_fact"}(a);return{key:b,label:c,value:d,normalizedValue:X(d),sourceType:e,sourceFile:a.sourceFile,sourceRef:a.sourceRef?.sectionTitle,confidence:Math.round(100*(a.confidence||.5)),priority:bq(e),locked:bq(e)>=80,selectedReason:"按资料来源优先级和字段置信度决策"}})(a,b,c)).filter(a=>a.value&&!/资料未明确|系统暂未确认/u.test(a.value)).filter(a=>{let d=e??f?.valueType;return!d||"text"===d||!bn(a.value,{key:b,label:c,aliases:[],valueType:d}).rejected}).sort((a,b)=>b.priority-a.priority||b.confidence-a.confidence||a.value.length-b.value.length)}(h,a.key,a.label,a.pattern,a.valueType);!j[a.key]&&b.length>0&&(j[a.key]=b[0]);let c=function(a,b,c){let d=[...new Map(c.map(a=>[a.normalizedValue,a])).values()];if(d.length<=1)return;let e=Math.max(...d.map(a=>a.priority)),f=d.filter(a=>a.priority===e);return{key:a,label:b,values:d.map(a=>({value:a.value,sourceFile:a.sourceFile,priority:a.priority,confidence:a.confidence})),decision:1===f.length?"highest_priority_selected":"manual_review_required"}}(a.key,a.label,b);c&&k.push(c)}let l=(b=a.projectGraph)?[...(b.resources||[]).map(a=>({key:`resource_${a.type}_${a.name}`,label:"equipment"===a.type?"机械设备":"labor"===a.type?"劳动力":"材料资源",value:[a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" "),normalizedValue:X([a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:bq("projectGraph"),locked:!1,selectedReason:"来自项目图谱资源节点"})).filter(a=>a.value),...(b.risks||[]).map(a=>({key:`risk_${a.risk}`,label:"风险源",value:[a.risk,a.level,a.mitigation].filter(Boolean).join(" "),normalizedValue:X([a.risk,a.level,a.mitigation].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:bq("projectGraph"),locked:!1,selectedReason:"来自项目图谱风险节点"})).filter(a=>a.value)]:[],m=l.filter(a=>/resource_/u.test(a.key)),n=l.filter(a=>/risk_/u.test(a.key));for(let a of l)j[a.key]||(j[a.key]=a);let o=(a.requiredKeys||[]).filter(a=>!j[a]).map(a=>({key:a,label:bl.find(b=>b.key===a)?.label||a,reason:"未从用户输入、招标资料、清单、图纸或项目图谱中确认该事实"})),p={projectIdentity:{projectName:j.project_name,projectCode:j.project_code,owner:j.owner,location:j.project_location},projectScope:{scale:j.project_scale,constructionScope:j.construction_scope},schedule:{duration:j.duration||j.schedule_requirement},quality:{target:j.quality_target||j.quality_standard},safety:{risks:n},resources:{resources:m},environment:{},constraints:{},byKey:j,conflicts:k,gaps:o,scopeConflicts:g},q=br(a.projectRoot);return q&&P.writeFileSync(e.join(q,`canonical-facts-${c}.json`),JSON.stringify(p,null,2)),p}({facts:bm,projectGraph:bt,requiredKeys:bl.map(a=>a.key),projectRoot:c,requirement:a.requirement,templateId:p.id});bo.canonical=bv;let bz=(0,t.effectiveTemplateChapters)(p,as,{preserveExplicitOutline:ac}),bC=(0,G.dK)({template:p,chapters:bz,requirement:a.requirement}).chapters,bE=a_.filter(a=>/评审|评分标准|评分办法|评审标准|详细评审/u.test(`${a.sectionTitle||""}${a.content}`.slice(0,600))).map(a=>a.content).slice(0,12),bG=L({template:p,chapters:bC,requirement:a.requirement,evaluationTexts:bE}),bH=(0,N.w9)({chapters:bG.enrichedChapters,projectGraph:bt,canonicalFacts:bv});p={...p,chapters:bH};let bI=new Map;if(bt){let a=new Set;for(let b of[...bt.works,...bt.methods,...bt.resources,...bt.schedule,...bt.standards,...bt.risks,...bt.requirements,...bt.siteConditions])(b.sourceFiles||[]).forEach(b=>a.add(b));for(let b of bH){let c=[b.title,b.purpose,...b.sections||[],...b.requiredFacts||[],...b.queries||[]].join(" "),d=a=>a&&((0,cC.C1)(a,c,.18)||(0,cC.C1)(a,b.title,.12)),e=/概况|总体|部署|施工|进度|工期|质量|安全|资源|人材机|材料|机械|劳动力|风险|危大|绿色|环保/u.test(c),f=bt.works.filter(a=>a.name&&(d(a.name)||e)),g=bt.methods.filter(a=>a.name&&(d(a.name)||(a.applicableWorks||[]).some(d)||e)),h=bt.resources.filter(a=>a.name&&(d(a.name)||/资源|人材机|材料|机械|劳动力/u.test(c)&&/material|equipment|labor/u.test(a.type))),i=bt.gaps.filter(a=>d(a)||e),j=new Set;for(let a of f)(a.sourceFiles||[]).forEach(a=>j.add(a));for(let a of g)(a.sourceFiles||[]).forEach(a=>j.add(a));for(let a of h)(a.sourceFiles||[]).forEach(a=>j.add(a));0===j.size&&e&&[...a].slice(0,12).forEach(a=>j.add(a)),bI.set(b.id,{graphFiles:j,graphBoqItems:h.map(a=>({name:a.name,quantity:a.quantity,unit:a.unit,sourceFiles:a.sourceFiles||[]})),graphWorks:f.map(a=>a.name),graphMethods:g.map(a=>a.name),gaps:i})}bi||((0,al.fx)(I,(0,al.X5)({type:"file_understanding",roleId:"project-graph-match",status:"success",message:`图谱→章节映射完成:${bt.works.length}工程 ${bt.methods.length}工法 ${bt.resources.length}资源 → ${bH.length}章`,details:bH.map(a=>{let b=bI.get(a.id);return`${(0,t.GQ)(a.title)}:匹配文件${b?.graphFiles.size||0}个,BOQ项${b?.graphBoqItems.length||0}个`})},{subtitle:"图谱章节映射"})),B())}let bJ=bH,bK=(0,cp.TD)(bi?.constructionOrganizationGraph)||bi?.constructionOrganizationContext,bL=[W.prompt,bK].filter(Boolean).join("\n\n"),bM=[bL,F({template:{...p,chapters:bJ},chapters:bJ,factsModel:bo,requirement:a.requirement,scopeConflicts:bv.scopeConflicts})].filter(Boolean).join("\n\n"),bN={...p,chapters:bJ},bO=(0,aI.My)([aJ,a.requirement||""].filter(Boolean).join("\n\n"),bJ),bP=(0,w.tF)({requirement:a.requirement,promptTexts:aJ,template:bN,chapters:bJ,spec:as}),bQ=0,bR=0,bS=await (0,z.l$)(bJ.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b,chapterIndex:c})=>{if(b.sections?.length){bQ+=1;let a=bO.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,t.GQ)(a.chapterTitle)===(0,t.GQ)(b.title)).flatMap(a=>a.requiredSections.sort((a,b)=>(a.order||0)-(b.order||0)).map(a=>a.title)),d=(0,aI.k2)([...a,...b.sections],b.title);return{...b,sections:d.length?d:(0,aI.k2)(b.sections,b.title)}}bR+=1;let d=(0,s.QR)(a_.filter(a=>a.chapterId===b.id||(0,u.Lk)(a,b.title)),{maxChars:(0,s.Pc)(bP.chapterTargets.get(b.id)||1200),preservePinned:!0}),e=W.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",f=bU(J,b),g=await (0,aI.SP)({template:bN,chapter:b,chapterIndex:c,evidence:d,promptTexts:f.promptTexts,projectContext:bM,requirement:a.requirement,roleContext:e,targetWords:bP.chapterTargets.get(b.id)||1200,structuralRules:bO,signal:a.signal}),h=bO.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,t.GQ)(a.chapterTitle)===(0,t.GQ)(b.title)).flatMap(a=>a.requiredSections.map(a=>`强制小节:${a.title}`));if((0,al.fx)(I,(0,al.X5)({type:"validation",roleId:"section-planning",promptId:f.primaryPromptId,status:g.length?"success":"failed",message:`${(0,t.GQ)(b.title)} 小节规划${g.length?`生成 ${g.length} 个小节`:"未生成可用小节"}`,details:[...f.promptDetails,...h,...g.length?g.map(a=>`规划小节:${a}`):["规划结果为空或被污染过滤"]]},{subtitle:"小节规划"})),!g.length)throw Error(`${(0,t.GQ)(b.title)} 小节规划未生成可用小节`);return{...b,sections:g}},{kind:"llmRepair",targetWords:bP.targetChars||4e3,concurrency:2}),bV=(0,G.dK)({template:p,chapters:bS,requirement:a.requirement}),bW=bV.chapters;{let a=bV.report;a.unattached.length>0?(0,al.fx)(I,(0,al.X5)({type:"validation",roleId:"construction-org-outline-unattached",status:"success",message:`标准模块挂靠:${a.totals.attachedModules} 个模块、${a.totals.sectionCount} 个小节;${a.unattached.length} 个可选模块未挂靠(无语义匹配章节,已记录)`,details:a.unattached.map(a=>`未挂靠:${a.moduleTitle}(${a.sections.length} 小节,${a.level})`)},{subtitle:"标准模块挂靠"})):(0,al.fx)(I,(0,al.X5)({type:"validation",roleId:"construction-org-outline-attached",status:"success",message:`标准模块挂靠:${a.totals.attachedModules} 个模块、${a.totals.sectionCount} 个小节全部挂靠`,details:a.attached.map(a=>`${"fallback"===a.kind?"兜底挂靠":"挂靠"}:${a.moduleTitle} → ${a.chapterTitle}`)},{subtitle:"标准模块挂靠"}))}let bX=L({template:p,chapters:bW,requirement:a.requirement,evaluationTexts:bE});bJ=(0,N.w9)({chapters:bX.enrichedChapters,projectGraph:bt,canonicalFacts:bv}),(bX.issues.length>0||bG.issues.length>0)&&(0,al.fx)(I,(0,al.X5)({type:"validation",roleId:"bid-structure-audit",status:bX.issues.some(a=>"blocker"===a.severity)?"failed":"success",message:`评标结构符合性校验:${bX.diagnostics.length} 个结构组,${bX.diagnostics.filter(a=>"satisfied"===a.status).length} 个已满足,${bX.diagnostics.filter(a=>"missing"===a.status&&"required"===a.level).length} 个必查缺失(已自动补挂),${bX.diagnostics.filter(a=>"fragmented"===a.status).length} 个分散`,details:[...bX.diagnostics.map(a=>`${"satisfied"===a.status?"满足":"fragmented"===a.status?"分散":"补挂"}:${a.groupTitle}${"missing"===a.status?`(补挂小节:${a.missingSections.join("、")})`:""}`),...bX.issues.map(a=>`提示:${a.message}`).slice(0,8)]},{subtitle:"评标结构校验"})),p={...p,chapters:bJ};let bY=function(a){let b=(0,G.yt)({template:{id:"runtime",name:a.templateName||"",outputTitle:"",description:"",category:"",chapters:a.chapters},chapters:a.chapters,requirement:a.requirement}),c=/施工组织设计|施工组织|施组|技术标/u.test(`${a.templateName||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`)||b.length>0,d=Object.values(a.factsModel?.canonical?.byKey||{}).map(a=>`${a.label}=${a.value}`),e=["正文必须落到本项目资料已确认的事实,不得使用模板化空话或跨小节复制段落",'措施类内容写成"责任岗位+执行动作+量化标准+检查频次+整改时限+复查销项"','工作包级小节按"施工概况/施工流程/施工方法"三段式展开'],f=a.chapters.map(b=>{var c;let d=(c=b.title,M.find(a=>a.pattern.test(c))),e=(a.projectGraph?.works||[]).filter(a=>a.name&&(b.title.includes(a.name.slice(0,2))||/概况|总体|施工内容|方案|施工/u.test(b.title))).slice(0,10),f=(a.projectGraph?.resources||[]).filter(a=>a.quantity&&/概况|资源|总体|施工内容|方案/u.test(b.title)).slice(0,12).map(a=>({itemCode:"",itemName:a.name,quantity:a.quantity,unit:a.unit}));return{chapterId:b.id,chapterTitle:b.title,writingGoal:d?.goal||"结合本章标题与项目资料事实展开专业内容,避免泛化叙述",mustCover:[...d?.mustCover||[],...(b.requiredFacts||[]).slice(0,6)],factDomains:[...b.requiredFacts||[],...e.map(a=>a.name)].slice(0,10),evidenceRefs:b.queries.slice(0,6).map(a=>({filePath:a,kind:"query",priority:"should"})),boqTargets:f,drawingTargets:[],gaps:[]}});return{documentType:c?"施工组织设计":"专业文档",globalWritingFocus:c?[...e,"招标硬性要求必须逐项明确响应:质量标准、计划工期、缺陷责任期与保修、安全文明目标、项目经理及组织机构;工期/质量/保修类承诺可在概况与质量章节落位,不得遗漏",...d.length?[`项目可信基础事实(写作时必须优先落位):${d.slice(0,10).join(";")}`]:[]]:e.slice(0,2),chapters:f}}({chapters:bJ,factsModel:bo,projectGraph:bt||void 0,requirement:a.requirement,templateName:p.name}),b5=[...(0,be.$v)({templateName:p.name,chapterTitles:bJ.map(a=>a.title),requirement:a.requirement,targetWords:bP.targetChars||0}),...(0,be.Al)({templateName:p.name,chapterTitles:bJ.map(a=>a.title),requirement:a.requirement})];b5.length>0&&(0,al.fx)(I,(0,al.X5)({type:"validation",roleId:"reference-benchmark",status:"success",message:"已读取模板参考库同类工程画像,作为质量软性参考注入文档蓝图",details:b5},{subtitle:"参考画像注入",order:I.length}));let b6=F({template:p,chapters:bJ,factsModel:bo,requirement:a.requirement,referenceLines:b5,scopeConflicts:bv.scopeConflicts});bM=[bL,b6].filter(Boolean).join("\n\n"),bi||(0,al.fx)(I,(0,al.X5)({type:"validation",roleId:"document-blueprint",status:"success",message:"已生成全局事实主表与文档蓝图,后续章节和小节将共用同一套专业约束",details:b6.split("\n").slice(0,12)},{subtitle:"全局蓝图"}));let b7=(0,w.tF)({requirement:a.requirement,promptTexts:aJ,template:p,chapters:bJ,spec:as}),b8=function(a){let b=Date.now(),c=a.template.chapters.map(a=>{let b=a.sections?.length?a.sections:[a.title];return{chapterId:a.id,title:a.title,purpose:a.purpose||cx(a.title),requiredFacts:[...new Set([...a.requiredFacts||[],a.title])],requiredGraphNodes:[a.title],evidenceQueries:[...new Set([a.title,...a.queries||[],...a.requiredFacts||[]])],qualityRules:["项目专属事实必须来自锁定资料范围,不得混入其他项目名称","法规规范等公共知识不受锁定范围限制","不得出现后台话术和兜底措辞","章节必须覆盖规划小节"],forbiddenPhrases:cq,sections:b.map(b=>({title:b,objective:cx(b),requiredFacts:[...new Set([b,...a.requiredFacts||[]])],requiredGraphNodes:[b],evidenceQueries:[...new Set([a.title,b,...cw(a.title),...cw(b),...a.queries||[],...a.requiredFacts||[]].filter(Boolean))],forbiddenPhrases:cq,minChars:/项目特点.*重点.*难点|重点.*难点.*分析/u.test(b)?1800:/项目主要施工内容|主要分部分项工程施工方案|主要施工方法/u.test(b)?2200:/原材料进场复试|见证取样|危大工程专项施工方案审批流程/u.test(b)?800:/施工部署|施工流水|主要施工机械|劳动力|材料进场|资源动态|质量控制点|危大工程|安全隐患|临时用水|临时用电/u.test(b)?760:/概况|说明|依据/u.test(b)?260:420}))}});return{plan:{planId:`plan-${(0,z.c6)({templateId:a.template.id,scope:a.context.materialScope.scopeHash,chapters:c.map(a=>a.title)}).slice(0,10)}`,title:a.title||a.template.name,chapters:c,requiredGlobalFacts:["项目名称","工期","质量标准","招标范围"],forbiddenPhrases:cq,qualityRules:["资料范围先锁定","基础图谱必跑","章节任务先于正文","Reviewer 通过后才能导出"]},node:{id:"document-planner",type:"document_planner",status:"completed",startedAt:b,completedAt:Date.now(),outputSummary:`${c.length} 章、${c.reduce((a,b)=>a+b.sections.length,0)} 条细目任务`,metrics:{chapters:c.length}}}}({template:p,context:bs,title:p.name});bs.documentPlan=b8.plan,bs.nodes.push(b8.node),(0,al.fx)(I,(0,al.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:b8.node.outputSummary||"Agent 文档规划完成",details:b8.plan.chapters.map(a=>`${a.title}:${a.sections.length} 条细目`)},{subtitle:"Agent Document Planner",order:I.length})),A=bJ.map(a=>a.id);let b9=b7.targetChars||[...b7.chapterTargets.values()].reduce((a,b)=>a+b,0),ca=(0,am.JP)({template:p,targetWords:b9,requirement:a.requirement,materialFileCount:Q.length,evidenceCount:a_.length}),cb=(0,an.C)({template:p,chapters:bJ,targetWords:b9,requirement:a.requirement,materialFileCount:Q.length,evidenceCount:a_.length,hasVeryLargeExplicitChapter:bJ.some(a=>(a.sections||[]).filter(Boolean).length>=30),configuredChapterConcurrency:Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),strategy:ca}),cc=(0,am.Zk)(ca);(0,S.t5)(b9),(0,al.fx)(I,(0,al.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${ca.mode} 生成策略:章节审查 ${ca.enableChapterReview?"启用":"跳过"}、全局审查 ${ca.enableGlobalReview?`${ca.globalReviewSamplingRate&&ca.globalReviewSamplingRate<1?`抽检 ${Math.round((ca.globalReviewSamplingRate??1)*100)}%`:"启用"}`:"跳过"}、最终质量审查 ${ca.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${ca.enableDocumentBudgetExpansion?"启用":"跳过"}`,details:cb.triggers},{subtitle:"后台自动策略"})),bv.scopeConflicts.length>0&&(0,al.fx)(I,(0,al.X5)({type:"validation",roleId:"scope-conflict-resolution",status:"success",message:`源级数据口径冲突已裁决(补疑/澄清修正文件权威最高):${bv.scopeConflicts.map(a=>a.resolution?`${a.scope} → ${a.resolution}`:`${a.scope} → 待人工复核`).join(";")}`,details:bv.scopeConflicts.flatMap(a=>a.values.map(a=>`来源「${a.sourceFile||"未知文件"}」取值 ${a.value}${a.unit}`))},{subtitle:"数据口径裁决"}));let cd=ac?"OUTLINE 章节":"模板章节",ce=(0,al.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${bR} 章由 LLM 基于${cd}、项目资料理解和证据规划小节,${bQ} 章已由模板显式提供小节并跳过规划`},{subtitle:"小节规划策略"}),cf=ac?`;识别到 OUTLINE 章节 ${ab.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",cg=[...J.prompts.map(a=>`${a.category}|${a.roleId}|${a.id}|${a.name}|${a.bindingSource}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`),...J.unresolvedRoles.map(a=>`unresolved|${a}|项目角色配置中的提示词角色不存在`),...J.missingResourceRoles.map(a=>`missingResource|${a}|提示词角色未显式绑定资源`)];(0,al.fx)(I,(0,al.X5)({type:"role_binding",roleId:E,status:"success",message:`已绑定项目资料 ${Q.length} 份、${J.prompts.length} 个有效提示词;写作 ${J.writerPrompts.length}、章节 ${J.chapterPrompts.length}、抽取 ${J.extractionPrompts.length};已自动抽取运行时规则 ${aF.executionSummary.length} 条${cf}`,details:[...cg,...aF.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:H,roleName:H})),(0,al.fx)(I,(0,al.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${aF.executionSummary.length} 条,版本 ${aF.sourceHash}`,details:aF.executionSummary.length?[...aF.executionSummary,`必需表格:${aF.requiredTables.join("、")||"无"}`,`必含关键词:${aF.requiredKeywords?.join("、")||"无"}`,`禁含内容:${aF.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})),(0,al.fx)(I,(0,al.X5)({type:"validation",roleId:"document-readiness",status:au.ready?"success":"failed",message:"生成准备度:绑定资料已就绪",details:au.diagnostics},{subtitle:"生成准备度检查"})),(0,al.fx)(I,ce),B();let ch=Math.round(([...b7.chapterTargets.values()].reduce((a,b)=>a+b,0)||b7.targetChars||0)/Math.max(1,bJ.length)),ci=Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),cj=cb.chapterConcurrency,ck=cb.reviewConcurrency;(0,al.fx)(I,(0,al.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节流水线调度:${bJ.length} 章全部同批并行生成,审查修复 ${ck} 路流水线(章节生成完立即进入审查,与后续章节生成重叠)`,details:[`有效章节数:${bJ.length}`,`平均章节目标:${ch} 字`,Number.isFinite(ci)&&ci>0?`章节并发来自 DOCUMENT_CHAPTER_CONCURRENCY=${Math.floor(ci)}`:`全部章节并行生成,在飞调用由全局 LLM 并发档位(${cb.llmConcurrency})统一约束;修复轮次预算 ${cb.repairRoundBudget} 轮`]},{subtitle:"章节流水线策略"})),B();let cl=0,cm=new z.jf(ck),cs=[],cz=[...aT].filter(Boolean).sort(),cD=Date.now(),cE=cz.length>0?(await (0,z.l$)(bD,async a=>bb(a,cz,Math.min(aY,12),""),{kind:"search"})).flat():[];cc.evidence.searchQueries+=bD.length,cc.evidence.searchMs+=Date.now()-cD;for(let b=0;b<bJ.length;b+=cj){let d=bJ.slice(b,b+cj);for(let f of(await Promise.all(d.map(async(d,f)=>{let g,h=b+f;(0,z.Te)(a.signal);let i=Date.now(),j=I.length;try{var k;let b,f,m,o;I.push((0,al.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:J.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${h+1}/${bJ.length}`,`二级小节:${d.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:h+1,total:bJ.length,label:"章节生成"}},{subtitle:(0,t.GQ)(d.title),order:h})),B();let r=a.resumeChapters?.find(a=>a.id===d.id||a.title===d.title),A=r?.content?.trim(),C=r?.evidence?.length?[...r.evidence]:[],E=W.chapterPlans.find(a=>a.chapterId===d.id||a.chapterTitle===d.title),F=E?Object.values(E.evidenceQueries).flat().filter(Boolean):[],G=d.queries.length>0?d.queries:[p.name,p.outputTitle,d.title],H=bI.get(d.id);if(bt&&H&&H.graphFiles.size>0){let a=[...aT],b=b=>a.includes(b)?b:a.find(a=>a.endsWith(b)||a.includes(b));for(let a of[...H.graphFiles].map(a=>b(a)||a).filter(a=>(0,am.Tz)(c,a,aT)).slice(0,12)){let b=ba(a,{maxChunkContentChars:8e3});if(b?.chunks?.length)for(let c of b.chunks)C.push({chapterId:d.id,filePath:b.file?.relativePath||a,score:5+(H.graphWorks.length+H.graphMethods.length)*.5,content:c.content,roleId:aN.get(a),processingType:aO.get(a),sectionTitle:c.sectionTitle,source:"graph-evidence"})}}let K=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title),L=b_(d,[...G,...F],[]),M=b0(d,[])+cl,N=Date.now();I[j]=(0,al.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:J.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 正在执行质量优先的章节检索${H?.graphFiles.size?`(图谱匹配 ${H.graphFiles.size} 个文件)`:""}`,details:L.slice(0,M).map(a=>`检索:${a.slice(0,42)}`),progress:{current:h+1,total:bJ.length,label:"证据检索"}},{subtitle:(0,t.GQ)(d.title),order:h}),B();let P=A?[]:[...aT].filter(Boolean).sort(),U=A?[]:bi?.evidenceByChapterId?.[d.id]||[];U.length>0&&C.push(...U);let V=[],X=L.slice(0,M),Y=(d.requiredFacts||[]).filter(a=>!!a&&!X.some(b=>b.includes(a)||a.includes(b))).slice(0,4).map(a=>`${d.title} ${a}`),Z=[...X,...Y];if(P.length>0&&Z.length>0){(0,z.Te)(a.signal);let b=await (0,z.l$)(Z,async a=>bb(a,P,Math.min(aY,12),d.title),{kind:"search"});V.push(...b)}for(let a of(cc.evidence.searchQueries+=Z.length,cc.evidence.searchMs+=Date.now()-N,V))C.push(...a.filter(a=>(0,am.Tz)(c,a.filePath,aM)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:aN.get(a.filePath),processingType:aO.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));K&&P.length>0&&cE.length>0&&C.push(...cE.filter(a=>(0,am.Tz)(c,a.filePath,aM)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:aN.get(a.filePath),processingType:aO.get(a.filePath),sectionTitle:a.sectionTitle,source:"basic-fact-cache"})));let $=A?[]:await (0,ao.$b)({manager:q,projectRoot:c,chapter:d,plan:E,profile:R,scopedFilePaths:P,limitPerQuery:Math.min(aY,10),signal:a.signal}).catch(()=>[]);C.push(...$);let _=new Set((d.pinnedEvidenceFilePaths||[]).filter(Boolean)),aa=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)&&C.push(...bd.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"})));let ab=new Set([..._]),ac=b7.chapterTargets.get(d.id)||1200,ak=(0,s.Pc)(ac,6e3,12e3);for(let a of ab){if(!(0,am.Tz)(c,a,aM))continue;let b=_.has(a),e=ba(a,{maxChunkContentChars:ak});e&&C.push(...e.chunks.map(a=>({chapterId:d.id,filePath:e.file.relativePath,score:1,content:a.content,roleId:aN.get(e.file.relativePath),processingType:aO.get(e.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let an=C.filter(a=>(0,am.Tz)(c,a.filePath,aT));if(!A&&aE.enabled&&aE.allowProjectFacts){let b=await aQ({config:aE,chapterId:d.id,chapterTitle:d.title,sectionTitles:d.sections||[],runtimeRules:aF,localFacts:[...bo.project,...bo.schedule,...bo.quality,...bo.safety,...bo.resources,...bo.preciseFacts],signal:a.signal});a1.queries.push(...b.queries),a1.filteredCount+=b.filtered+b.evidence.length}let aq=(0,s.Pc)(ac,cb.evidenceFloorChars,cb.evidenceCeilingChars),ar=A?[]:(0,ao.SK)({project:aP,chapter:d,plan:E,profile:R,scopedFilePaths:P,highRisk:a$.highRisk});ar.length>0&&an.push(...aV(ar,aU)),an=aV(an,aU);let au=b$(d,an,{maxItems:b1(aY,d,a$.highRisk),maxChars:aq+(a$.highRisk?14e3:4e3),preservePinned:!0},cc);au=bw(au,bv.scopeConflicts),aX(au,aU,`chapter:${d.id}:initial`);let ay=d.requiredFacts.filter(a=>!au.some(b=>(0,u.Lk)(b,a))),az=0,aB=H?[H.graphWorks.length?`图谱识别本章工程内容:${H.graphWorks.join("、")}`:"",H.graphMethods.length?`图谱识别本章施工方法:${H.graphMethods.join("、")}`:"",H.graphBoqItems.length?`图谱识别本章BOQ清单项(${H.graphBoqItems.length}项):${H.graphBoqItems.slice(0,30).map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",H.gaps.length?`图谱识别本章资料缺口:${H.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",aD=function(a){let b=[];for(let c of a){if(!c.resolution)continue;let a=c.values.filter(a=>`${a.value}${a.unit}`!==c.resolution);if(0===a.length)continue;let d=a.map(a=>`${a.value}${a.unit}`).join("、");"high"===c.confidence?b.push(`${c.scope}必须统一为 ${c.resolution}(补疑/答疑/澄清类修正文件权威最高;${d} 已被修正,正文禁止出现)`):"medium"===c.confidence?b.push(`${c.scope}应统一为 ${c.resolution}(按资料来源优先级裁决;${d} 为败选值,正文避免使用)`):b.push(`${c.scope}参考口径为 ${c.resolution}(锚定较弱,请人工复核;${d} 不参与自动改写)`)}return b}(bv.scopeConflicts),aG=[aB,aD.length?`【数据口径强制约束】${aD.join(";")}`:"",E?.writingGoal,E?.mustCover?.length?`本章必须覆盖:${E.mustCover.join("、")}`:"",E?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${E.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),aH=bU(J,d);if(J.writerPrompts.length>0&&!aH.primaryWriter)throw Error(`${(0,t.GQ)(d.title)} 写作主控提示词未进入章节生成阶段`);let aI=[aH.promptTexts,ax].filter(Boolean).join("\n\n"),aJ=aH.promptDetails.length?aH.promptDetails:["未绑定章节写作提示词"],aK=function(a){let b=a.profile||l,c=[],d=[a.template.name,a.template.outputTitle,a.chapter.title,a.chapter.purpose,...a.chapter.sections||[]].filter(Boolean).join(" "),e=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title);for(let d of a.chapter.requiredFacts||[])af(c,b,{label:d,category:n(b,d)?.category||"required",required:!0,source:"template"});for(let d of a.chapter.sections||[])af(c,b,{label:d,category:"section",required:!1,source:"section",queries:ae(d,[a.chapter.title])});for(let d of a.plan?.requiredContents||[])af(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of a.plan?.evidenceNeeds||[])af(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of e?.requiredFactIds||[]){let e=a.spec?.factFields.find(a=>a.id===d);e&&af(c,b,{label:e.name,category:n(b,e.name)?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:ae(e.name,[e.extractionHint||"",e.validationHint||""])})}for(let e of a.spec?.factFields||[]){if(!e.required)continue;let f=n(b,e.name),g=`${e.name} ${e.extractionHint||""} ${e.validationHint||""}`;(d.includes(e.name)||ae(e.name,f?.aliases||[]).some(a=>d.includes(a))||a.chapter.requiredFacts.some(a=>a.includes(e.name)||e.name.includes(a)))&&af(c,b,{label:e.name,category:f?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:ae(e.name,[g])})}for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&d.includes(a))&&ag(c,b,a,"profile","must_use"===a.usagePolicy,[d]);let f=ad(a.requirement||"");if(f)for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&f.includes(a))&&ag(c,b,a,"requirement",!0,[f]);let g=ad(a.promptTexts||"");if(g)for(let d of b.factFields)[d.name,...d.aliases].some(a=>a.length>=2&&g.includes(a))&&ag(c,b,d,"prompt","must_use"===d.usagePolicy,[a.chapter.title]);return c}({template:p,chapter:d,spec:as,profile:at,promptTexts:aI,requirement:a.requirement,plan:E?{requiredContents:E.mustCover,evidenceNeeds:Object.values(E.evidenceQueries).flat()}:void 0}),aL=ai({needs:aK,factsModel:bo,evidence:an,profile:at}),aR=aL.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),aS=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>cB(`${a.sectionTitle||""}${a.content||""}`).includes(cB(b)))),c=(a.chapter.tablePlans||[]).flatMap(a=>a.fillability?.missingProjectFactFields||[]),d=a.evidence.length<3?["章节证据数量不足"]:[],e=b.length+c.length+d.length,f=e>=5?"high":e>=2?"medium":"low",g="high"===f?"evidence_first":c.length>0?"generate_with_review_notes":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:f,missingFacts:b,missingEvidence:d,tableFieldGaps:[...new Set(c)],suggestedStrategy:g,reason:0===e?"章节事实、证据和表格可填性满足常规生成条件。":`识别到 ${e} 项生成前缺口,按 ${g} 策略生成。`}}({chapter:d,evidence:au}),aW=new Set(au.map(a=>a.filePath)).size,aZ=!!H&&(H?.graphFiles.size||0)>=8&&aW>=6&&0===ay.length&&"low"===aS.riskLevel,a4=P.length<=80&&("evidence_first"===aS.suggestedStrategy||a$.highRisk||ay.length>0||aR.length>0||au.length<8&&"low"!==aS.riskLevel);if(!aZ&&a4&&P.length>0){let b=await O({manager:q,projectRoot:c,chapter:d,scopedFilePaths:P,fileRoleByPath:aN,fileProcessingByPath:aO,requiredNeeds:[...new Set([...ay,...aR])],highRisk:a$.highRisk||aR.length>0,signal:a.signal}).catch(()=>[]);az=b.length,b.length>0&&(an=b$(d,[...an,...aV(b,aU)],{maxItems:b1(aY+12,d,a$.highRisk),maxChars:aq+(a$.highRisk?36e3:16e3),preservePinned:!0},cc),an=aV(an,aU),au=b$(d,an,{maxItems:b1(aY+8,d,a$.highRisk),maxChars:aq+(a$.highRisk?28e3:12e3),preservePinned:!0},cc),au=bw(au,bv.scopeConflicts),aX(au,aU,`chapter:${d.id}:deep`),ay=d.requiredFacts.filter(a=>!au.some(b=>(0,u.Lk)(b,a)))),aR=(aL=ai({needs:aK,factsModel:bo,evidence:an,profile:at})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label)}if(aR.length>0&&P.length>0){let b=aV(await O({manager:q,projectRoot:c,chapter:d,scopedFilePaths:P,fileRoleByPath:aN,fileProcessingByPath:aO,requiredNeeds:aR,highRisk:!0,signal:a.signal}).catch(()=>[]),aU);b.length>0&&(an=b$(d,[...an,...b],{maxItems:b1(aY+16,d,!0),maxChars:aq+42e3,preservePinned:!0},cc),an=aV(an,aU),au=b$(d,an,{maxItems:b1(aY+12,d,!0),maxChars:aq+32e3,preservePinned:!0},cc),au=bw(au,bv.scopeConflicts),aX(au,aU,`chapter:${d.id}:supplemental`),ay=d.requiredFacts.filter(a=>!au.some(b=>(0,u.Lk)(b,a))),aR=(aL=ai({needs:aK,factsModel:bo,evidence:an,profile:at})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}for(let a of(aX(au,aU,`chapter:${d.id}:writer-input`),0===au.length&&a2.push(`${d.title}:缺少可支撑正文的项目资料证据`),ay))a2.push(`${d.title}:事实需求未满足 ${a}`);let a8=(0,al.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:a_.length>0?"success":"failed",message:`已检索/绑定 ${a_.length} 条证据`});a7<0?a7=(0,al.fx)(I,a8):I[a7]={...a8,order:I[a7]?.order??a8.order},B(),(0,z.Te)(a.signal),aR.length>0&&cl<2&&(cl+=1);let a9=new Map,bc=b=>{let e=(0,z.c6)({kind:"section",query:`${d.title} ${b}`.trim(),scopedFilePaths:P}),f=a9.get(e);if(f)return Promise.resolve(f);let g=(0,ap.Ym)(b,d,au),h=g.filter(a=>T.AM.test(a.content)).length;if(g.length>=4&&h>=1){let a=g.slice(0,5);return a9.set(e,a),Promise.resolve(a)}return b2({manager:q,projectRoot:c,chapter:d,sectionTitle:b,scopedFilePaths:P,fileRoleByPath:aN,fileProcessingByPath:aO,signal:a.signal}).then(a=>(a9.set(e,a),a))},be=b=>{if(0===b.length||0===P.length)return Promise.resolve([]);let e=b.slice(0,6).join(" ");return b2({manager:q,projectRoot:c,chapter:d,sectionTitle:e,scopedFilePaths:P,fileRoleByPath:aN,fileProcessingByPath:aO,signal:a.signal}).catch(()=>[])},bf=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b)||`${a.sectionTitle||""} ${a.content}`.includes(b))).length,d=a.chapter.requiredFacts.length,e=a.chapter.requiredFacts.filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:d,evidence:au,risk:a$});a0.push(bf);let bh=new Set(au.map(a=>a.filePath)),bj=au.reduce((a,b)=>a+b.content.length,0),bk=[...a$.highRisk?[`召回覆盖风险(${a$.riskReason||"切片未完全预加载"}):已加载 ${a$.loadedChunks}/${a$.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${U.length} 条`,`深召回证据:${az} 条`,`事实覆盖:${bf.requiredFactCovered}/${bf.requiredFactTotal}`,`小节覆盖:${bf.sectionCovered}/${bf.sectionTotal}`];I[j]=(0,al.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:J.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 已选取 ${au.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${bh.size} 份`,`上下文字符:${bj}`,`检索查询:${Math.min(L.length,M)} 组`,...bk],progress:{current:h+1,total:bJ.length,label:"正文生成"}},{subtitle:(0,t.GQ)(d.title),order:h}),B(),cc.evidence.contextChars+=bj;let bl=(k=aL,ah(k.flatMap(a=>a.facts))),bm=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)?bg:[],bn=(0,ap.hZ)({chapter:d,plan:void 0,spec:as,roleFacts:aa,evidence:au,missingFacts:ay,indexedFacts:[...bm,...bl],resolvedFactNeeds:aL,factNeedsPrompt:function(a){let b=a.map(a=>{let b=a.facts.slice(0,5).map(b=>`${b.key||b.fieldName||a.need.label}=${aj(b.value)}${b.sourceFile?`(${e.basename(b.sourceFile)})`:""}`),c=a.facts.length?[]:(a.evidence||[]).slice(0,2).map(a=>`证据片段:${aj(a.content).slice(0,160)}${a.filePath?`(${e.basename(a.filePath)})`:""}`);return`- ${a.need.required?"必须":"相关"}|${a.need.label}|${a.status}${b.length||c.length?`:${[...b,...c].join(";")}`:":未在已解析资料中确认"}`});return b.length?`事实需求覆盖卡片:
|
|
75
|
+
${b.join("\n")}`:""}(aL)}),bp=function(a){let b=Date.now(),c=a.plan.chapters.find(b=>b.chapterId===a.chapter.id)||a.plan.chapters.find(b=>b.title===a.chapter.title);if(!c)throw Error(`缺少章节计划:${a.chapter.title}`);let d=a.context.facts.filter(a=>c.evidenceQueries.some(b=>cu(a,b))||c.requiredFacts.some(b=>cu(a,b))),e=c.sections.map(b=>{let c=a.context.facts.filter(a=>b.evidenceQueries.some(b=>cu(a,b))||b.requiredFacts.some(b=>cu(a,b))).slice(0,24),d=a.evidence.filter(a=>b.evidenceQueries.some(b=>(function(a,b){let c=cr(`${a.sectionTitle||""} ${a.content||""} ${a.filePath||""}`);return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(cr(a)))})(a,b))).slice(0,24),e=b.requiredGraphNodes.flatMap(b=>cv(a.context.baseProjectGraph,b)).slice(0,12),f=[];return/法律法规|法规|规章|规范标准|标准规范|行业标准|现行规范|编制依据/u.test(b.title)||0!==d.length||0!==c.length||0!==e.length||f.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${b.title} 缺少事实、图谱或证据支撑`,suggestion:"应先定向检索和抽取事实,不能生成占位正文。"}),{...b,factIds:c.map(a=>(0,z.c6)({key:a.key,value:(0,z.lG)(a.value),sourceFile:a.sourceFile}).slice(0,12)),evidenceIds:d.map(a=>(0,z.c6)({filePath:a.filePath,content:a.content.slice(0,160),score:a.score}).slice(0,12)),graphNodeIds:e.map(a=>(0,z.c6)(a).slice(0,12)),ready:0===f.length,issues:f}}),f=e.flatMap(a=>a.issues),g={taskId:`chapter-task-${(0,z.c6)({plan:a.plan.planId,chapter:a.chapter.id,evidence:a.evidence.map(a=>(0,z.c6)({filePath:a.filePath,content:a.content.slice(0,120),score:a.score}))}).slice(0,10)}`,chapterId:a.chapter.id,title:a.chapter.title,facts:d.slice(0,48),evidence:a.evidence.slice(0,48),graphContext:cv(a.context.baseProjectGraph,a.chapter.title).slice(0,20).join("\n"),sections:e,ready:0===f.length,issues:f};return{task:g,node:{id:`chapter-task-${a.chapter.id}`,type:"chapter_task_planner",status:g.ready?"completed":"failed",startedAt:b,completedAt:Date.now(),outputSummary:`${g.sections.filter(a=>a.ready).length}/${g.sections.length} 条细目任务就绪`,metrics:{facts:g.facts.length,evidence:g.evidence.length,issues:f.length},issues:f}}}({plan:b8.plan,chapter:d,context:bs,evidence:au});if(bs.chapterTasks=[...(bs.chapterTasks||[]).filter(a=>a.chapterId!==d.id),bp.task],bs.nodes.push(bp.node),(0,by.cN)(bs),(0,al.fx)(I,(0,al.X5)({type:"validation",roleId:`agent-chapter-task-${d.id}`,status:bp.task.ready||A?"success":"failed",message:bp.task.ready?bp.node.outputSummary||`${(0,t.GQ)(d.title)} 章节任务规划完成`:A?`${(0,t.GQ)(d.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:bp.node.outputSummary||`${(0,t.GQ)(d.title)} 章节任务规划完成`,details:bp.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:I.length})),B(y),!bp.task.ready&&!A)throw Error(`${(0,t.GQ)(d.title)} 章节任务未就绪:${bp.task.issues.map(a=>a.message).join(";")}`);let bq=[aI,cy(bp.task)].filter(Boolean).join("\n\n"),br={total:aL.length,satisfied:aL.filter(a=>"satisfied"===a.status).length,missing:aL.filter(a=>"missing"===a.status).length,lowConfidence:aL.filter(a=>"low_confidence"===a.status).length};for(let a of aR)a2.push(`${d.title}:事实需求未确认 ${a}`);let bu=as?.chapterRules.find(a=>a.id===d.id||a.title===d.title),bx=b7.chapterTargets.get(d.id)||1200,bz=d.sections?.filter(Boolean).length||0,bC=/[、,,;;]/u.test(d.title),bD=function(a){let{budgetTarget:b,sectionCount:c,title:d,longformStrict:e}=a,f=/[、,,;;]/u.test(d),g=/工期|进度|质量|安全|危大|资源|人材机|保障|措施|重难点/u.test(d),h=/概况|结语|附录|说明/u.test(d),i=c>0?c*(f?720:g?900:780):g?5200:3600,j=e?h?2600:g?5200:3600:Math.min(1200,b),k=e?Math.min(Math.max(4200,b),c>=30?9800:f?8800:g?9200:7200):b,l=Math.max(j,Math.min(b,i,k));return{budgetTarget:b,roundTarget:l,structureTarget:i,maxWords:Math.ceil(l*(a.longformStrict?1.12:1.18)),label:`章节预算约 ${b} 字,本轮生成约 ${l} 字,结构目标约 ${i} 字`}}({budgetTarget:bx,sectionCount:bz,title:d.title,longformStrict:b7.longformStrict}),bE=Math.ceil(bD.maxWords*(b7.maxChars?1.05:1)),bF=b7.targetChars?Math.min(1800,Math.max(600,Math.floor(.45*bD.roundTarget))):1200,bG=bD.roundTarget,bH=Math.max(Math.min(bu?.minWords||0,bG),Math.min(as?.dynamicChapterRule.minWordsPerChapter||0,bG),Math.floor(.68*bG),bF),bK=(0,ap.uV)(bH,bG),bL=bz>0?Math.min(bG,Math.max(1800,bD.structureTarget)):bG,bN=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),bO=process.env.DOCUMENT_SECTION_FIRST_GENERATION,bP=void 0!==bO&&0===Number(bO),bQ=void 0!==bO&&0!==Number(bO),bR=bG>=6e3&&bz>=4&&bz<=bN&&!bC,bS=!bP&&bz>=2&&(bz>bN||bC||b7.longformStrict&&bz>=6),bV=!bP&&!bS&&bz>=2&&bz<=bN&&(bQ||bR||b7.longformStrict),bW=0,bX=a=>{let b=Date.now();if(b-bW<3e3)return;bW=b;let c=a.filter(Boolean).join("\n\n");c.trim()&&B([...y,{id:d.id,title:d.title,content:`## ${d.title}
|
|
76
|
+
|
|
77
|
+
${c}`,evidence:au,missingFacts:ay,sections:d.sections||[],tablePlans:d.tablePlans||[],inProgress:!0}])},bY=a=>{"complete"===a.phase&&a.partialSections&&bX(a.partialSections)};if(A)o=bT(A,d),g=(0,al.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aH.primaryPromptId,status:"success",message:`${(0,t.GQ)(d.title)} 已复用已有章节正文:当前 ${(0,w.V7)(o)} 字,跳过 Writer,直接进入 Reviewer/Repairer/Final Gate`,details:[`有效证据:${au.length} 条`,`事实需求:${br.satisfied}/${br.total} 已满足,缺失 ${br.missing},低置信 ${br.lowConfidence}`,"来源:resumeChapters/checkpointChapters"],progress:{current:h+1,total:bJ.length,label:"复用章节"}},{subtitle:(0,t.GQ)(d.title),order:h}),I[j]=g,B(y);else{let e;if(I[j]=(0,al.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aH.primaryPromptId,status:"running",message:bS?`${(0,t.GQ)(d.title)} 正在规划主题块并准备并发成稿`:bV?`${(0,t.GQ)(d.title)} 正在按小节并发成稿`:`${(0,t.GQ)(d.title)} 正在整章一次成稿`,details:bS||bV?[...aJ,`有效证据:${au.length} 条`,`事实需求:${br.satisfied}/${br.total} 已满足,缺失 ${br.missing},低置信 ${br.lowConfidence}`,bD.label,`生成上限约 ${bE} 字`,`模板细目:${d.sections?.length||0} 条`,bS?"细目较多,先由章级 Planner 聚类为主题块并语义合并,再按主题块全并发出稿,避免逐小节碎片化":"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...aJ,`有效证据:${au.length} 条`,`事实需求:${br.satisfied}/${br.total} 已满足,缺失 ${br.missing},低置信 ${br.lowConfidence}`,bD.label,`生成上限约 ${bE} 字`,`规划小节:${bz} 个`,"首次生成必须覆盖章节结构、小节和事实,篇幅目标仅作为规划参考"],progress:{current:h+1,total:bJ.length,label:bS?"主题块并发":bV?"小节并发":"整章成稿"}},{subtitle:(0,t.GQ)(d.title),order:h}),B(),bS){let c=(0,t.GQ)(d.title),g=b6.split("\n").filter(a=>a.includes(c)),i=g.length>0?g.join("\n"):b6.slice(0,4e3),k=await D(()=>(0,am.X6)(cc,`chapter-plan:${d.id}`,()=>aA({template:p,chapter:d,evidence:au,projectContext:bM,requirement:a.requirement,roleContext:aG,targetWords:bL,graphContext:bp.task.graphContext,blueprintContext:i,signal:a.signal,diagnostics:cc})));if(k.blocks.length>0){b=k,m=function(a,b){let c={};for(let d of a)for(let a of b.blocks){let b=a.subPoints.filter(a=>a.sources.some(a=>aw(a,d))||aw(a.title,d));if(b.length>0){c[d]=b.map(a=>a.title);break}}return c}(av(d),k);let c=[aI,function(a,b){let c=a.facts.slice(0,18).map(a=>`- ${a.key}:${ct(a)}${a.sourceFile?`(来源:${a.sourceFile})`:""}`).join("\n"),d=b.blocks.map((a,b)=>{let c=a.subPoints.map(a=>a.sources.length>1?` - #### ${a.title}(覆盖评分细目:${a.sources.join("、")})`:` - #### ${a.title}`).join("\n");return`${b+1}. 必须输出三级标题:### ${a.title}
|
|
78
|
+
${c}`}).join("\n");return["【Agent 章节任务】(主题块成稿模式)",`任务ID:${a.taskId}`,`章节:${a.title}`,a.graphContext?`图谱上下文:
|
|
79
|
+
${a.graphContext}`:"",c?`事实卡:
|
|
80
|
+
${c}`:"",`主题块与 H4 要点(必须严格按此两层结构成稿):
|
|
81
|
+
${d}`,"写作要求:必须严格按“主题块→H4 要点”两层结构输出,三级标题与 H4 要点标题必须与给定标题完全一致,不得改名、合并或遗漏 H4 要点;每个 H4 要点必须覆盖其标注的全部评分细目内容,但不得为这些评分细目单独开设小节标题;项目专属事实只使用事实卡、图谱上下文和绑定证据,法律法规、标准规范等公共知识可直接引用;不得输出后台话术、兜底措辞、待确认、不适用;缺少项目事实的小节不得编造。"].filter(Boolean).join("\n\n")}(bp.task,k)].filter(Boolean).join("\n\n");f=c;let g=k.blocks.reduce((a,b)=>a+b.subPoints.length,0),i=k.blocks.reduce((a,b)=>a+b.subPoints.reduce((a,b)=>a+Math.max(0,b.sources.length-1),0),0),l=k.llmPlanned?k.fallbackSections.length>0?`(${k.fallbackSections.length} 条细目由覆盖校验挂回主题块)`:"":`(LLM 规划未命中:${(k.llmFailure||"未返回有效结构").slice(0,50)},已按语义域确定性分组)`;I[j]=(0,al.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aH.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} 已规划 ${k.blocks.length} 个主题块,正在按主题块并发成稿${l}`,details:[...aJ,`有效证据:${au.length} 条`,`输入细目 ${bz} 条 → 主题块 ${k.blocks.length} 个(每块 2~4 个 H4 要点)`,`语义合并 ${i} 条细目,目录级 H4 合计 ${g} 个`,"单块 1200~2200 字,主题块间全并发,单节深度与整体耗时双优"],progress:{current:h+1,total:bJ.length,label:"主题块并发"}},{subtitle:(0,t.GQ)(d.title),order:h});let n=I.find(a=>a.roleId===`agent-chapter-task-${d.id}`);n&&(n.message=`${bp.task.sections.filter(a=>a.ready).length}/${bp.task.sections.length} 条细目任务就绪(已规划为 ${k.blocks.length} 个主题块)`),B(y),e=await D(()=>(0,am.X6)(cc,`chapter-planned-block-draft:${d.id}`,()=>(0,ap.nl)({template:p,chapter:d,evidence:au,missingFacts:ay,promptTexts:c,projectContext:bM,requirement:a.requirement,roleContext:aG,targetWords:bL,maxWords:bE,forbidDrawingImages:!1,factCoverageContext:bn,compactProjectContext:!0,sectionEvidenceProvider:bc,diagnostics:cc,signal:a.signal},k)))}}else e=bV?await D(()=>(0,am.X6)(cc,`chapter-section-draft:${d.id}`,()=>(0,ap.N1)({template:p,chapter:d,evidence:au,missingFacts:ay,promptTexts:bq,projectContext:bM,requirement:a.requirement,roleContext:aG,targetWords:bL,maxWords:bE,forbidDrawingImages:!1,factCoverageContext:bn,projectRoot:c,modelName:(0,S.$y)()?.model.name,materialContextHash:(0,z.c6)({materialFilePaths:Q,promptTexts:aI}),allowPartialResult:!1,compactProjectContext:!0,sectionEvidenceProvider:bc,onSectionProgress:bY,diagnostics:cc,signal:a.signal}))):await D(()=>(0,am.X6)(cc,`chapter-draft:${d.id}`,()=>(0,ap.eu)(p,d,au,ay,bq,bM,a.requirement,aG,{forbidDrawingImages:!1,minWords:bH,targetWords:bG,maxWords:bE,maxTokens:bK,factCoverageContext:bn,signal:a.signal,diagnostics:cc,supplementEvidenceProvider:be,evidenceFloorChars:cb.evidenceFloorChars,evidenceCeilingChars:cb.evidenceCeilingChars})));if(!e&&(bS||bV)&&(bS&&(b=void 0,f=void 0,m=void 0),I[j]=(0,al.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aH.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} ${bS?"主题块成稿未完成":"小节成稿未完成"},正在切换为整章紧凑备用成稿`,details:[`LLM 最近错误:${cc.llm.lastError||"成稿空响应或超时"}`,`有效证据:${au.length} 条`],progress:{current:h+1,total:bJ.length,label:"整章备用"}},{subtitle:(0,t.GQ)(d.title),order:h}),B(y),e=await D(()=>(0,am.X6)(cc,`chapter-compact-fallback:${d.id}`,()=>(0,ap.eu)(p,d,au,ay,bq,bM,a.requirement,aG,{forbidDrawingImages:!1,minWords:Math.floor(.65*bH),targetWords:Math.floor(.75*bL),maxWords:bE,maxTokens:bK,factCoverageContext:bn,signal:a.signal,diagnostics:cc,supplementEvidenceProvider:be,evidenceFloorChars:cb.evidenceFloorChars,evidenceCeilingChars:cb.evidenceCeilingChars}).catch(a=>{cc.llm.lastError=a instanceof Error?a.message:String(a)})))),!e&&au.length>0){I[j]=(0,al.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aH.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} LLM 多路径未返回有效正文,正在反馈失败原因重试紧凑整章生成`,details:[`LLM 最近错误:${cc.llm.lastError||"空响应或超时"}`,`证据条数:${au.length}`],progress:{current:h+1,total:bJ.length,label:"失败原因重试"}},{subtitle:(0,t.GQ)(d.title),order:h}),B(y);let b=[aG,`【上一轮 LLM 生成失败,请先分析失败原因,再调整策略重新输出完整章节正文】失败原因:${cc.llm.lastError||"空响应或超时"}`].filter(Boolean).join("\n");e=await D(()=>(0,am.X6)(cc,`chapter-lastretry:${d.id}`,()=>(0,ap.eu)(p,d,au,ay,bq,bM,a.requirement,b,{forbidDrawingImages:!1,minWords:Math.floor(.55*bH),targetWords:Math.floor(.6*bL),maxWords:bE,maxTokens:bK,factCoverageContext:bn,signal:a.signal,diagnostics:cc,supplementEvidenceProvider:be,evidenceFloorChars:cb.evidenceFloorChars,evidenceCeilingChars:cb.evidenceCeilingChars}).catch(a=>{cc.llm.lastError=a instanceof Error?a.message:String(a)})))}if(!e&&au.length>0&&(I[j]=(0,al.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aH.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} LLM 全故障,正在用当前项目证据生成带阻断标记的可审查骨架草稿`,details:[`LLM 最近错误:${cc.llm.lastError||"空响应或超时"}`,`证据条数:${au.length}`,"骨架草稿将带 [EVIDENCE_SKELETON] 标记并由 Review 门禁强制拦截,不允许静默通过"],progress:{current:h+1,total:bJ.length,label:"证据骨架"}},{subtitle:(0,t.GQ)(d.title),order:h}),B(y),e=`[EVIDENCE_SKELETON]
|
|
82
|
+
${function(a){let b=(a.chapter.sections?.length?a.chapter.sections:["资料依据与施工对象","主要控制措施","检查验收与闭环管理"]).flatMap(b=>{let c=(function(a,b,c){let d=[a,b.title,...a.split(/[、,,;;\s]+/u)].filter(a=>a.length>=2),e=c.map(a=>{let b=(0,s.eE)(a.content||"").replace(/\s+/gu," ").trim(),c=d.reduce((c,d)=>c+(b.includes(d)||(a.sectionTitle||"").includes(d)?1:0),0)+a.score;return{content:b,score:c}}).filter(a=>a.content.length>=30).sort((a,b)=>b.score-a.score),f=[];for(let a of e.slice(0,8)){for(let b of a.content.split(/[。;;\n]/u).map(a=>a.trim()).filter(Boolean))if(!(b.length<18||b.length>180||/报价|单价|税率|利润|后台|知识库|提示词|OCR|文件路径/u.test(b))&&!(/^(?:本节围绕|本小节依据|项目实施时应|实施过程中应|当前绑定资料|当前项目绑定资料)/u.test(b)||/确保各项措施与本工程实施条件相匹配/u.test(b)||/形成责任明确、过程可控、资料完整的管理闭环/u.test(b)||/确保现场管理要求与施工进度、资源组织和验收节点同步推进/u.test(b)||/^管理闭环[。;;]?$/u.test(b)||/资料参数行摘要|房建市政施工评定分离招标示范文本|我方已仔细研究|中标通知书|签订合同|履约保证金|投标函|投标人须知|招标公告|开标|评标|保证金|电子交易系统|公共资源交易|监管部门|专用账户监管协议书|资金托管专用账号/u.test(b)||/^#+\s*/u.test(b)||/^(?\d+)/u.test(b))&&(f.some(a=>a.includes(b)||b.includes(a))||f.push(b),f.length>=10))break;if(f.length>=10)break}return f})(b,a.chapter,a.evidence).slice(0,8);return 0===c.length?[]:[[`### ${b}`,"",...c.map(a=>`- ${a}。`)].join("\n")]});return 0===b.length?"":(0,v.kT)((0,v.FD)(`## ${a.chapter.title}
|
|
83
|
+
|
|
84
|
+
${b.join("\n\n")}`,a.forbidDrawingImages))}({chapter:d,evidence:au,targetWords:bL,forbidDrawingImages:!1})}`),(0,z.Te)(a.signal),!e){let a=`${(0,t.GQ)(d.title)} 大模型未返回有效正文,已阻断生成`;throw I[j]=(0,al.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aH.primaryPromptId,status:"failed",message:a,details:[`LLM 最近错误:${cc.llm.lastError||"空响应或超时"}`,`证据条数:${au.length}`],progress:{current:h+1,total:bJ.length,label:"章节阻断"}},{subtitle:(0,t.GQ)(d.title),order:h}),B(y),Error(a)}let g=e;if(!g.trim())throw Error(`${(0,t.GQ)(d.title)} 首次生成失败,未获得可用于定稿的正文`);o=bT(g,d)}let bZ=aC({chapter:d,content:o,evidence:au}),b3=(0,w.V7)(o),b4=(0,v.r4)(o),b5=b4.length>0?b4:d.sections||[],b9=(0,x.qK)(o,[{title:d.title,content:o,sections:b5}]).map(a=>a.message),ca=bZ.slice(0,6).map(a=>`小节事实密度需优化:${a}`),cd=[...b9,...ca],ce=o.includes("[EVIDENCE_SKELETON]")?"failed":function(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))?"failed":"success"}(b3,0,cd);return g=(0,al.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aH.primaryPromptId,status:ce,message:(0,al.AQ)(`${(0,t.GQ)(d.title)} 已由大模型成稿:当前 ${b3} 字;章节预算约 ${bD.budgetTarget} 字,本轮目标约 ${bD.roundTarget} 字${cd.length?`;待优化:${cd.slice(0,8).join("、")}`:""}`,i),details:[`本轮完成率:${Math.round(b3/Math.max(1,bD.roundTarget)*100)}%`,`结构目标约 ${bD.structureTarget} 字`,...aJ,`二级小节:${b5.length} 个`],progress:{current:h+1,total:bJ.length,label:cd.length?"章节已生成":"章节达标"}},{subtitle:(0,t.GQ)(d.title),order:h}),a6[h]=g,async()=>{try{let c={id:d.id,title:d.title,content:o,evidence:au,missingFacts:ay,sections:b5,tablePlans:d.tablePlans||[]},e=cA({task:bp.task,draft:c,context:bs,plannedCoverage:m});bs.reviewResults={...bs.reviewResults||{},[d.id]:e};let g=e.issues.filter(a=>"blocker"===a.severity||"error"===a.level),i=g.some(a=>/Writer 未完成/u.test(a.message)),j=g.some(a=>/正文不足,未达到任务最小深度/u.test(a.message)),k=bA(e.issues),l=g.length>0&&(e.repairable||i||j)||k,n=cb.repairRoundBudget,q=0;bs.nodes.push({id:`chapter-reviewer-${d.id}`,type:"chapter_reviewer",status:g.length?l?"running":"failed":"completed",startedAt:Date.now(),completedAt:Date.now(),outputSummary:e.issues.length?`${e.issues.length} 个 Reviewer 提示`:"Reviewer 通过",metrics:{supportedFacts:e.supportedFacts},issues:e.issues}),(0,by.cN)(bs),(0,al.fx)(I,(0,al.X5)({type:"llm_review",roleId:`agent-reviewer-${d.id}`,status:g.length?l?"running":"failed":"success",message:g.length?`${(0,t.GQ)(d.title)} Reviewer 发现 ${g.length} 个阻断问题,等待 Repairer 修复(轮次预算 ${n} 轮)`:`${(0,t.GQ)(d.title)} Reviewer 通过${e.issues.length?`(${e.issues.length} 个优化提示)`:""}`,details:e.issues.map(a=>a.message)},{subtitle:"Agent Reviewer",order:I.length})),B(y);let r=new Map;for(let a of bp.task.sections){let b=bB(m,a.title);r.set(b,Math.max(r.get(b)||0,a.minChars))}for(;l&&q<n;){q+=1;let h={...e,issues:g},o=e.repairable?function(a){if(!a.review.repairable)return"";let b=a.plannedMode?"【结构约束】本章采用主题块成稿模式,必须保持现有三级主题块与 H4 要点标题不变;只修复列出的问题,不得新增小节、不得拆分或合并现有小节、不得把评分细目展开为独立标题。":cy(a.task);return["【Agent 定向修复任务】",`章节:${a.task.title}`,"只修复下列问题,不重写无关内容;如果问题是小节正文不足,必须按原小节标题完整补足该小节正式正文,每个小节不得少于任务最小深度:",...a.review.issues.map(a=>`- ${a.message};${a.suggestion||""}`),b].join("\n")}({task:bp.task,review:h,plannedMode:!!b}):["【Agent 定向修复任务】",`章节:${bp.task.title}`,"Reviewer 发现 Writer 未完成小节。必须基于对应小节事实卡和证据生成正式正文,替换并删除 WRITER_MISSING_SECTION 标记;不得跳过这些小节,不得保留占位说明。",...g.map(a=>`- ${a.message};${a.suggestion||""}`)].join("\n"),s=I.length,u=e.issues.filter(a=>/Writer 未完成/u.test(a.message)),v=e.issues.filter(a=>/正文不足,未达到任务最小深度/u.test(a.message)),x=[...u,...v.filter(a=>!u.some(b=>b.message===a.message))],A=[];(0,al.fx)(I,(0,al.X5)({type:"llm_review",roleId:`agent-repairer-${d.id}`,status:"running",message:`${(0,t.GQ)(d.title)} Reviewer 发现 ${g.length} 个阻断问题,正在定向修复`,details:g.map(a=>a.message)},{subtitle:"Agent Repairer",order:s})),B(y);let C=(a,b,c,d)=>{let e=a=>a.replace(/[\u00a0\u3000]/gu," ").replace(/^\d+(?:\.\d+)*\s+/u,"").trim(),f=z.tU,g=a=>[b,d].filter(a=>"string"==typeof a).some(b=>{let c=f(a),d=f(b);return a===b||a.includes(b)||b.includes(a)||c===d||c.includes(d)||d.includes(c)}),h=a=>a.trim().replace(/^#{2,6}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]+\n+/u,"").trim(),i=a.split("\n"),j=0;for(let d=0;d<i.length;d+=1){let f=i[d],k=j;j+=f.length+1;let l=/^(#{3,4})\s+(.+)$/u.exec(f.trim());if(!l)continue;let m=e(l[2]);if(!g(m))continue;let n=3===l[1].length&&z.V.test(b)?/^#{2,3}\s+/u:/^#{2,4}\s+/u,o=i.length;for(let a=d+1;a<i.length;a+=1)if(n.test(i[a].trim())){o=a;break}let p=o<i.length?i.slice(0,o).join("\n").length:a.length,q=h(c);return`${a.slice(0,k)}${f.trim()}
|
|
85
|
+
|
|
86
|
+
${q}${a.slice(p)}`}let k=bp.task.sections.findIndex(a=>f(a.title)===f(b));if(k>=0){let d=bp.task.sections.slice(k+1).map(a=>f(a.title));for(let e=0;e<i.length;e+=1){let g=/^(#{3,4})\s+(.+)$/u.exec(i[e].trim());if(!g||!d.includes(f(g[2])))continue;let j=i.slice(0,e).join("\n").length+ +(e>0),k=h(c);return k?`${a.slice(0,j).trimEnd()}
|
|
87
|
+
|
|
88
|
+
### ${b}
|
|
89
|
+
|
|
90
|
+
${k}
|
|
91
|
+
|
|
92
|
+
${a.slice(j).trimStart()}`:a}}let l=h(c);return l?`${a.trimEnd()}
|
|
93
|
+
|
|
94
|
+
### ${b}
|
|
95
|
+
|
|
96
|
+
${l}`:a},E=async b=>{var c;(0,z.Te)(a.signal);let e=b.message.replace(/\s*Writer 未完成.*$/u,"").replace(/\s*正文不足,未达到任务最小深度.*$/u,"").trim(),g=/Writer 未完成/u.test(b.message)?"缺失小节":"深度不足小节",h=bp.task.sections.find(a=>a.title===e),i=r.get(bB(m,e))||0,j=(c=h?.minChars,Math.max(c||0,i&&i>0?Math.ceil(i/.8):0,/项目主要施工内容/u.test(e)?2200:/主要分部分项工程施工方案|主要施工方法/u.test(e)?1800:/项目特点.*重点.*难点|重点.*难点.*分析/u.test(e)?1500:/原材料进场复试|见证取样|危大工程专项施工方案审批流程/u.test(e)?900:760)),k=/正文不足,未达到任务最小深度/u.test(b.message),l=aV(await bc(e).catch(()=>[]),aU);aX(l.length?l:au,aU,`repair:${d.id}:${e}`),cc.llm.lastError=void 0;let n=await D(()=>(0,am.X6)(cc,`agent-repairer-section:${d.id}:${e}`,()=>(0,ap.mF)({template:p,chapter:d,sectionTitle:e,evidence:l.length?l:au,missingFacts:ay,promptTexts:[f||bq,o].filter(Boolean).join("\n\n"),projectContext:bM,requirement:a.requirement,roleContext:aG,targetWords:j,maxWords:1.25*j,forbidDrawingImages:!1,factCoverageContext:bn,qualityFeedback:`Repairer 定向补写“${e}”。必须输出该小节正式正文并彻底删除 WRITER_MISSING_SECTION 标记。`,diagnostics:cc,signal:a.signal,allowLenientStructureGate:!0})));if(!n||n.includes("WRITER_MISSING_SECTION")){let b=cc.llm.lastError;cc.llm.lastError=void 0,n=await D(()=>(0,am.X6)(cc,`agent-repairer-section-retry:${d.id}:${e}`,()=>(0,ap.mF)({template:p,chapter:d,sectionTitle:e,evidence:l.length?l:au,missingFacts:ay,promptTexts:o,projectContext:bM,requirement:a.requirement,roleContext:aG,targetWords:j,maxWords:1.15*j,forbidDrawingImages:!1,factCoverageContext:bn,qualityFeedback:`第二次定向补写“${e}”:只写该小节正式正文,不写解释,不保留 WRITER_MISSING_SECTION。${b?`上次失败原因:${b},必须逐条修正。`:""}`,diagnostics:cc,signal:a.signal,allowLenientStructureGate:!0})))}if(n&&!n.includes("WRITER_MISSING_SECTION")){let a=/^#{3,4}\s+/u.test(n.trim())?n.trim():`### ${e}
|
|
97
|
+
|
|
98
|
+
${n.trim()}`,b=(0,w.V7)(a),c=Math.min(Math.max(Math.floor(.7*j),(0,ap.ap)(e)),Math.max(500,j)),d=!k||b>=c;return{sectionTitle:e,rewriteReason:g,normalizedSection:a,normalizedLength:b,enoughDepth:d,evidenceCount:l.length||au.length,repairTargetWords:j}}return{sectionTitle:e,rewriteReason:g,normalizedLength:0,enoughDepth:!1,evidenceCount:0,repairTargetWords:j,failed:n?"仍包含 WRITER_MISSING_SECTION":cc.llm.lastError||"空响应"}};for(let b=0;b<x.length;b+=3){let e=x.slice(b,b+3);for(let b of(await Promise.allSettled(e.map(a=>E(a))))){if("rejected"===b.status){if(a.signal?.aborted)throw b.reason;A.push(`失败:${b.reason instanceof Error?b.reason.message:"未知异常"}`);continue}if(!b.value)continue;if(b.value.failed){A.push(`失败:${b.value.sectionTitle}(${b.value.failed})`);continue}let d=bB(m,b.value.sectionTitle),e=b.value.enoughDepth?C(c.content,b.value.sectionTitle,b.value.normalizedSection||"",d):c.content,f=e!==c.content;f&&(c={...c,content:e}),A.push(f?`成功:${b.value.sectionTitle}(${b.value.normalizedLength}字,证据 ${b.value.evidenceCount} 条)`:`失败:${b.value.sectionTitle}(${b.value.enoughDepth?"未定位到原小节块":`补写不足 ${b.value.normalizedLength}/${b.value.repairTargetWords} 字`})`)}(0,al.fx)(I,(0,al.X5)({type:"llm_review",roleId:`agent-repairer-${d.id}`,status:"running",message:`${(0,t.GQ)(d.title)} 已补写深度不足小节 ${Math.min(b+3,x.length)}/${x.length}`,details:A},{subtitle:"Agent Repairer",order:s})),B(y)}let F={content:c.content,appliedCount:0};g.some(a=>!/Writer 未完成|正文不足,未达到任务最小深度/u.test(a.message))&&(F=await D(()=>(0,am.X6)(cc,`agent-repairer:${d.id}`,()=>(0,am.l8)({template:p,chapter:{id:d.id,title:d.title,content:c.content,evidence:au,missingFacts:ay,sections:b5},issues:g.map(a=>`${a.message};${a.suggestion||""}`),promptTexts:[f||bq,o].filter(Boolean).join("\n\n"),requirement:a.requirement,forbidDrawingImages:!1,diagnostics:cc,signal:a.signal})))),c={...c,content:bT(F.content||c.content,d)},e=cA({task:bp.task,draft:c,context:bs,plannedCoverage:m}),bs.reviewResults={...bs.reviewResults||{},[d.id]:e},i=(g=e.issues.filter(a=>"blocker"===a.severity||"error"===a.level)).some(a=>/Writer 未完成/u.test(a.message)),j=g.some(a=>/正文不足,未达到任务最小深度/u.test(a.message)),k=bA(e.issues),l=g.length>0&&(e.repairable||i||j)||k;let G=g.length>0;bs.nodes.push({id:`chapter-repairer-${d.id}`,type:"chapter_repairer",status:G?"failed":"completed",startedAt:Date.now(),completedAt:Date.now(),outputSummary:e.issues.length?`修复后仍有 ${e.issues.length} 个问题`:"定向修复通过",metrics:{supportedFacts:e.supportedFacts},issues:e.issues}),(0,by.cN)(bs),(0,al.fx)(I,(0,al.X5)({type:"llm_review",roleId:`agent-reviewer-${d.id}`,status:G?"failed":"success",message:G?`${(0,t.GQ)(d.title)} Reviewer 第 ${q} 轮复审仍有 ${g.length} 个阻断问题${l&&q<n?",继续下一轮修复":""}`:`${(0,t.GQ)(d.title)} Reviewer 第 ${q} 轮复审通过`,details:e.issues.map(a=>a.message)},{subtitle:"Agent Reviewer",order:s-1})),(0,al.fx)(I,(0,al.X5)({type:"llm_review",roleId:`agent-repairer-${d.id}`,status:G?"failed":"success",message:e.issues.length?`${(0,t.GQ)(d.title)} 第 ${q} 轮定向修复后仍有 ${e.issues.length} 个问题`:`${(0,t.GQ)(d.title)} 定向修复通过`,details:[...A,...e.issues.map(a=>`剩余:${a.message}`)]},{subtitle:"Agent Repairer",order:s})),B(y)}if(e.issues.some(a=>"blocker"===a.severity||"error"===a.level)){let a=function(a){let b=a.filter(a=>/正文不足,未达到任务最小深度|Writer 未完成/u.test(a.message)).length,c=a.length-b;return Math.max(b>0?Math.ceil(b/2):0,+(c>0))}(g);a3.push(`${(0,t.GQ)(d.title)} Reviewer 未通过:${e.issues.map(a=>a.message).join(";")}(修复轮次预算 ${n} 轮已用尽,预估还需 ${a} 轮修复;问题已标记并转入门禁阻断,可在记录详情查看后决定继续修复或调整模板)`)}a5[h]=c,y=a5.filter(a=>!!a),B(y),cc.quality.blockingCount+=e.issues.filter(a=>"error"===a.level).length,cc.quality.importantCount+=e.issues.filter(a=>"warning"===a.level).length}catch(b){if(a.signal?.aborted)throw b;console.error(`[gen] chapter ${d.title} review failed:`,b),a3.push(`${(0,t.GQ)(d.title)}:审查修复阶段失败:${b instanceof Error?b.message:"未知错误"}`)}}}catch(c){if(a.signal?.aborted)throw c;console.error(`[gen] chapter ${d.title} failed:`,c);let b=`${d.title}:${c instanceof Error?c.message:"生成失败"}`;a3.push(b),g=(0,al.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,t.GQ)(d.title)} 生成失败:${b}`},{subtitle:(0,t.GQ)(d.title),order:h}),a6[h]=g}g&&(I[j]=g),B(y)}))))f&&cs.push(cm.run(f))}await Promise.all(cs);let cF=a5.filter(a=>!!a);a4.push(...a6.filter(a=>!!a));let cG=[];if(ca.enableGlobalReview)try{let b=ca.globalReviewSamplingRate??1,c=b>=1||cF.length<=2?cF:cF.filter((a,c)=>c%Math.max(2,Math.round(1/b))==0),d=c.length,e=()=>D(()=>aH({template:p,chapters:c,chapterReviews:[],promptTexts:aL,requirement:a.requirement,projectContext:bM,diagnostics:cc,signal:a.signal})),f=()=>{let a=cF.map(a=>a.content).join("\n\n");return[...(0,x.qm)(a,bo,bv.scopeConflicts).filter(a=>/跨章一致性冲突/u.test(a.message)),...(0,x.hr)(a,bo).filter(a=>"error"===a.level)].map(a=>`${a.message};${a.suggestion||""}`)},g=await e();cG=[...new Set([...g.issues,...f()])];for(let b=0;b<2&&cG.length>0;b+=1){(0,al.fx)(I,(0,al.X5)({type:"llm_review",roleId:"global-consistency-repair",status:"running",message:`跨章一致性冲突第 ${b+1} 轮定向修复(${cG.length} 个冲突)`},{subtitle:"跨章一致性修复"})),B(cF);let c=0;for(let b of cF){let d=b.content.replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡"),e=cG.filter(a=>{if(a.includes(b.title)||(a.match(/不一致的表述\s*([^;;。\n]+)/u)?.[1]||"").split(/[、,,]/u).some(a=>{let b=a.trim().replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡");return b.length>=3&&d.includes(b)}))return!0;let c=a.match(/正文([^配比厚度\s]{1,6}?)(?:配比|厚度)/u)?.[1];return!!(c&&b.content.includes(c))});if(0===e.length)continue;let f=await D(()=>(0,am.X6)(cc,`global-consistency-repair:${b.id}`,()=>(0,am.l8)({template:p,chapter:{id:b.id,title:b.title,content:b.content,evidence:b.evidence||[],missingFacts:b.missingFacts||[],sections:b.sections},issues:e.map(a=>`${a};请严格按冲突描述中给出的资料口径修正本章对应表述,不得引入新的数值;与资料口径一致的既有表述(含分层/子项数值)不得改动。`),promptTexts:aL,requirement:a.requirement,forbidDrawingImages:!0,diagnostics:cc,signal:a.signal})));f.content&&f.content!==b.content&&(b.content=f.content,c+=1)}if(0===c)break;B(cF);let d=await e();cG=[...new Set([...d.issues,...f()])],(0,al.fx)(I,(0,al.X5)({type:"llm_review",roleId:"global-consistency-review",status:cG.length>0?"failed":"success",message:cG.length>0?`跨章一致性复检:仍有 ${cG.length} 个冲突`:"跨章一致性复检通过"},{subtitle:"全局一致性审查"})),B(cF)}let h=(0,x.KI)(cF,bo,bv.scopeConflicts);h.fixedCount>0&&(cG=[...new Set([...cG.filter(a=>!/^跨章一致性冲突|^工序规格冲突/u.test(a)),...f()])],(0,al.fx)(I,(0,al.X5)({type:"llm_review",roleId:"global-consistency-deterministic-fix",status:"success",message:`跨章一致性数值定点修复:${h.fixedCount} 处(${h.details.slice(0,4).join("、")})`,details:h.details.slice(4)},{subtitle:"跨章一致性修复"})),B(cF));let i=d<cF.length?{...g.stage,message:`${g.stage.message||"全局一致性审查完成"}(抽检 ${d}/${cF.length} 章)`}:g.stage;(0,al.fx)(I,i),B(cF)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] global consistency review failed:",b)}let cH=(0,N.Xi)(bJ,cF);if(cH.length>0)for(let b=0;b<2&&cH.length>0;b+=1){(0,al.fx)(I,(0,al.X5)({type:"llm_review",roleId:"table-execution-repair",status:"running",message:`表格执行率修复第 ${b+1} 轮(${cH.length} 个章节缺表)`},{subtitle:"表格执行率修复"})),B(cF);let c=0;for(let b of cH){let d=cF.find(a=>a.title===b.chapterTitle||b.chapterTitle.includes(a.title)||a.title.includes(b.chapterTitle));if(!d)continue;let e=await D(()=>(0,am.X6)(cc,`table-execution-repair:${d.id}`,()=>(0,am.l8)({template:p,chapter:{id:d.id,title:d.title,content:d.content,evidence:d.evidence||[],missingFacts:d.missingFacts||[],sections:d.sections},issues:[`计划表格缺失(计划 ${b.planned} 张,实际仅 ${b.actual} 张):${b.plans.map(a=>`${a.title}(表头:${a.fields.map(a=>a.name).join("、")})`).join(";")}。必须按表头字段补齐这些 markdown 表格并紧跟相关小节输出,不得删除已有正文;每个表格前须有 1~2 句引导叙述说明表格作用与关键结论,表格不能替代小节正文;deriveFromProject 字段基于项目工程量、总工期与工序流水按定额工效推导具体数值,projectFactOnly 字段不得编造。`],promptTexts:aL,requirement:a.requirement,forbidDrawingImages:!0,diagnostics:cc,signal:a.signal})));e.content&&e.content!==d.content&&(d.content=e.content,c+=1)}if(0===c)break;B(cF),cH=(0,N.Xi)(bJ,cF),(0,al.fx)(I,(0,al.X5)({type:"llm_review",roleId:"table-execution-review",status:cH.length>0?"failed":"success",message:cH.length>0?`表格执行率复检:仍有 ${cH.length} 个章节缺表`:"表格执行率复检通过"},{subtitle:"表格执行率核验"}))}return cn({chapterDrafts:cF,chapterDraftsByOrder:a5,chapterGenerationStagesByOrder:a6,chapterGenerationStages:a4,effectiveChapters:bJ,template:p,allEvidence:a_,projectMaterialScope:aU,progressStages:I,documentSpec:as,projectMaterialProfile:R,projectMaterialSummary:aq,domainProfile:at,documentBudget:b7,promptTexts:aJ,reviewPromptTexts:aL,input:a,generationStrategy:ca,generationDiagnostics:cc,promptBindings:K,promptDocumentRules:aF,projectUnderstanding:W,projectContext:bM,projectRoot:c,projectId:o,readiness:au,factExtractionPromptTexts:aK,hasExplicitOutline:ac,missingItems:a2,retrievalCoverageReports:a0,failedChapterMessages:a3,webResearchReport:a1,indexHealth:aR,promptPlan:J,globalConsistencyIssues:cG,scopeConflicts:bv.scopeConflicts,writingTaskBrief:bY,agentWorkflow:bs,emitProgress:B,withProgressHeartbeat:D})}},79227:(a,b,c)=>{c.d(b,{C:()=>f,previewGenerationBudgetForTemplate:()=>g});var d=c(34680),e=c(95734);function f(a){let b=Math.max(1,a.chapters.length),c=a.targetWords>0?Math.round(a.targetWords/b):1200,d=a.strategy,f=[],g=a.materialFileCount<4&&a.evidenceCount<6,h=Math.max(1,Math.min(b,(Number.isFinite(a.configuredChapterConcurrency)&&a.configuredChapterConcurrency>0?Math.floor(a.configuredChapterConcurrency):void 0)??b)),i=(0,e.Qf)(a.targetWords),j="fast"===d.mode?1:Math.max(1,Math.min(i>=32?5:i>=24?4:i>=16?3:2,b)),{floorChars:k,ceilingChars:l}=c>=6e3?{floorChars:7e3,ceilingChars:26e3}:c>=3e3?{floorChars:6e3,ceilingChars:18e3}:{floorChars:4e3,ceilingChars:12e3},m=d.repairRoundBudget??3;return"strict"===d.mode&&f.push("strict:风险领域关键词命中(专项/安全/质量/验收/合同/合规等)"),a.targetWords>=4e4&&f.push("strict:目标篇幅超长(≥4 万字)"),g&&f.push("strict:资料稀疏(资料包文件 <4 且可用证据 <6 条)"),"fast"===d.mode&&f.push("fast:小文档(≤6000 字且 ≤4 章)全局审查降级为 35% 抽检"),"longform"===d.mode&&f.push("longform:长文档(≥3 万字或 ≥8 章)"),"balanced"===d.mode&&f.push("balanced:常规篇幅文档,标准审查深度"),f.push(`全章节并行生成(${h}/${b} 章同批),审查流水线 ${j} 路,全局 LLM 并发档位 ${i},每章证据预算 ${Math.round(k/1e3)}k-${Math.round(l/1e3)}k 字符,修复轮次预算 ${m}`),{strategy:d,chapterConcurrency:h,reviewConcurrency:j,llmConcurrency:i,evidenceFloorChars:k,evidenceCeilingChars:l,repairRoundBudget:m,triggers:f}}function g(a){let b=Math.max(1,a.chapters.length),c=Math.max(0,Math.round(a.targetWords??0)),e=(0,d.JP)({template:a.template,targetWords:c,requirement:a.requirement,materialFileCount:a.materialFileCount,evidenceCount:a.evidenceCount}),g=f({template:a.template,chapters:a.chapters,targetWords:c,requirement:a.requirement,materialFileCount:a.materialFileCount,evidenceCount:a.evidenceCount,hasVeryLargeExplicitChapter:a.hasVeryLargeExplicitChapter??!1,configuredChapterConcurrency:a.configuredChapterConcurrency??0,strategy:e});return{mode:e.mode,enableGlobalReview:e.enableGlobalReview,globalReviewSamplingRate:e.globalReviewSamplingRate??1,repairRoundBudget:g.repairRoundBudget,chapterConcurrency:g.chapterConcurrency,reviewConcurrency:g.reviewConcurrency,evidenceFloorChars:g.evidenceFloorChars,evidenceCeilingChars:g.evidenceCeilingChars,targetWords:c,chapterCount:b,triggers:g.triggers}}},87942:(a,b,c)=>{c.d(b,{x:()=>d});let d={version:"professional-document-workflow-v3",rules:["complete-local-knowledge-assumption","knowledge-coverage-recovery","fact-trace-placement","chapter-coverage-gate","structured-quality-report","post-repair-verification"]}}};
|