@customize-agent/server 4.0.40 → 4.0.41

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 CHANGED
@@ -1 +1 @@
1
- Wv_18X7-62bUq_KmGRhkC
1
+ ylFmZtWjQgli0L2BJjbVg
@@ -5,8 +5,8 @@
5
5
  "devFiles": [],
6
6
  "ampDevFiles": [],
7
7
  "lowPriorityFiles": [
8
- "static/Wv_18X7-62bUq_KmGRhkC/_buildManifest.js",
9
- "static/Wv_18X7-62bUq_KmGRhkC/_ssgManifest.js"
8
+ "static/ylFmZtWjQgli0L2BJjbVg/_buildManifest.js",
9
+ "static/ylFmZtWjQgli0L2BJjbVg/_ssgManifest.js"
10
10
  ],
11
11
  "rootMainFiles": [],
12
12
  "rootMainFilesTree": {},
@@ -3,9 +3,9 @@
3
3
  "routes": {},
4
4
  "dynamicRoutes": {},
5
5
  "preview": {
6
- "previewModeId": "10a42af88f7447f14fcb66de141dfb16",
7
- "previewModeSigningKey": "e0631d1175ab2d3b546276a3e2361f5c61444b1ced5881abf17d22bb170e8d93",
8
- "previewModeEncryptionKey": "9b2b860d344bce429f9a5abb9f7e25cbbe9a9b9e0db0755d6e52c3f6f3ac5383"
6
+ "previewModeId": "5738e9ca4fd573d654398a4b1c2c5862",
7
+ "previewModeSigningKey": "d00a01f1f38d67c75742760946dea1fbfbe3d682622c8f950c7b356c141ccebf",
8
+ "previewModeEncryptionKey": "5841f3f36950fc49dcd5f90929400ff0edf85c3b0f76024404f10b9d697866ca"
9
9
  },
10
10
  "notFoundRoutes": []
11
11
  }
@@ -7,7 +7,7 @@ ${a.content}`;return[...new Set([...b?.requiredFacts||[],"表格数据","规范
7
7
  章节/片段:${a.sectionTitle?.replace(ap,"")||"资料片段"}
8
8
  内容:${ar(a.content).replace(/\s+/gu," ").slice(0,900)}`).join("\n\n---\n\n");return[a.summary,b?`结构化资料:
9
9
  ${b}`:"",c?`文本/附件片段:
10
- ${c}`:""].filter(Boolean).join("\n\n")}function ax(a){return a.replace(/^#+\s*/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节]\s*/u,"").replace(/^\d+(?:\.\d+)*[、..\s]*/u,"").trim()}function ay(a){return ax(a.replace(/\s+/gu," ").trim()).replace(/^[,,、;;::。.!!??\-—\s]+/u,"").trim()}function az(a){let b=a.trim(),c=ay(b);return!(!c||c.length<2||c.length>50||/^#{3,6}\s*/u.test(b)||/^\|.*\|/u.test(b)||/\|/u.test(c)||/^[,,、;;::。.!!??\-—]/u.test(b)||/[{}<>]|Markdown|JSON|变量|占位符/u.test(c)||/[。;;]$/u.test(c)||/[::]\s*[。;;]?$/u.test(c)||/^(目录|章节|大纲|要求|说明|注意|输出|格式|示例|例如|写法|占位)$/u.test(c)||/(评标委员会|完全满足评审要求|项目部对本工程|全面梳理与响应|坚实的技术保障)/u.test(c))&&!aC(c)}let aA=["一","二","三","四","五","六","七","八","九","十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十"];function aB(a,b){let c=ax(b);return`第${aA[a]||a+1}章 ${c}`}function aC(a){return/见(?:招标|公告|文件|图纸)|按(?:图纸|设计要求|相关)|质量标准[::]|招标范围[::]|工程量清单.*图纸设计依据/u.test(a)}function aD(a){let b=new Set;return a.filter(a=>{let c=ay(a.title);return!(!c||b.has(c)||aC(c))&&(b.add(c),a.title=c,!0)})}function aE(a){return Math.max(0,Math.min(2,a?.dynamicChapterRule.maxChapters??2))}function aF(a,b,c=[]){if(!b)return aD([...a.chapters]);if("fixed"===b.chapterMode)return a.chapters.length>0?aD([...a.chapters].map(a=>{let c=ax(a.title),d=b.chapterRules.find(b=>b.id===a.id||ax(b.title)===c);return{...a,title:c,purpose:d?.generationHint||a.purpose,requiredFacts:[...new Set([...a.requiredFacts||[],...d?.requiredFactIds||[]])],queries:[...new Set([...a.queries||[],c,d?.generationHint||"",...a.sections||[]].filter(Boolean))]}})):aD([...b.chapterRules].sort((a,b)=>a.order-b.order).map(a=>{let b=ax(a.title);return{id:a.id,title:b,purpose:a.generationHint||b,requiredFacts:a.requiredFactIds||[],sections:[],queries:[b,a.generationHint||"",...a.requiredFactIds||[]].filter(Boolean),pinnedEvidenceFilePaths:[]}}));if(a.chapters.length>0)return aD([...a.chapters]);let d=b.dynamicChapterRule,f=aE(b),g=Math.min(f,Math.max(0,d.minChapters||0)),h=new Set([...d.sourceRoleIds||[],...d.requiredFileRoleIds||[]]),i=c.filter(a=>0===h.size||a.roleId&&h.has(a.roleId)).filter((a,b,c)=>c.findIndex(b=>`${b.filePath}:${b.sectionTitle||""}`==`${a.filePath}:${a.sectionTitle||""}`)===b).slice(0,f),j=[];for(let b of i){let c=function(a,b,c){let d=(a.sectionTitle||e.basename(a.filePath).replace(/\.[^.]+$/u,"")||`资料片段 ${b+1}`).replace(/\s+/gu," ").slice(0,60);return c?c.replaceAll("{{index}}",String(b+1)).replaceAll("{{sourceTitle}}",d):d}(b,j.length,d.titleTemplate);aN(c,a)||j.push({id:`dynamic-${j.length+1}`,title:c,purpose:d.generationHint||`根据 ${b.filePath} 动态生成章节`,requiredFacts:d.requiredFactIds||[],queries:[c,b.filePath,b.sectionTitle||"",d.generationHint||""].filter(Boolean),pinnedEvidenceFilePaths:[b.filePath]})}if(j.length>=g)return j;let k=a.chapters.length>0?a.chapters.map(a=>a.title):["背景与目标","资料分析","结论与建议"];for(;j.length<g;){let a=j.length,b=k[a]||`动态章节 ${a+1}`;j.push({id:`dynamic-${a+1}`,title:b,purpose:d.generationHint||b,requiredFacts:d.requiredFactIds||[],queries:[b,d.generationHint||"",(d.sourceRoleIds||[]).filter(Boolean).join(" ")].filter(Boolean),pinnedEvidenceFilePaths:[]})}return j}function aG(a,b){let c=`${a.filePath}
10
+ ${c}`:""].filter(Boolean).join("\n\n")}let ax="[零〇一二三四五六七八九十百千万两]+";function ay(a){return a.replace(/^#+\s*/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节]\s*/u,"").replace(/^\d+(?:\.\d+)*[、..\s]*/u,"").trim()}function az(a){return ay(a.replace(/\s+/gu," ").trim()).replace(/^[,,、;;::。.!!??\-—\s]+/u,"").trim()}function aA(a){let b=a.trim(),c=az(b);return!(!c||c.length<2||c.length>50||/^#{3,6}\s*/u.test(b)||/^\|.*\|/u.test(b)||/\|/u.test(c)||/^[,,、;;::。.!!??\-—]/u.test(b)||/[{}<>]|Markdown|JSON|变量|占位符/u.test(c)||/[。;;]$/u.test(c)||/[::]\s*[。;;]?$/u.test(c)||/^(目录|章节|大纲|要求|说明|注意|输出|格式|示例|例如|写法|占位)$/u.test(c)||/(评标委员会|完全满足评审要求|项目部对本工程|全面梳理与响应|坚实的技术保障)/u.test(c))&&!aC(c)}function aB(a,b){let c=ay(b);return`第${function(a){let b=["零","一","二","三","四","五","六","七","八","九"];if(a<=10)return 10===a?"十":b[a];if(a<20)return`十${b[a%10]}`;if(a<100){let c=Math.floor(a/10),d=a%10;return`${b[c]}十${d?b[d]:""}`}return String(a)}(a+1)}章 ${c}`}function aC(a){return/见(?:招标|公告|文件|图纸)|按(?:图纸|设计要求|相关)|质量标准[::]|招标范围[::]|工程量清单.*图纸设计依据/u.test(a)}function aD(a){let b=new Set;return a.filter(a=>{let c=az(a.title);return!(!c||b.has(c)||aC(c))&&(b.add(c),a.title=c,!0)})}function aE(a){return Math.max(0,Math.min(2,a?.dynamicChapterRule.maxChapters??2))}function aF(a,b,c=[]){if(!b)return aD([...a.chapters]);if("fixed"===b.chapterMode)return a.chapters.length>0?aD([...a.chapters].map(a=>{let c=ay(a.title),d=b.chapterRules.find(b=>b.id===a.id||ay(b.title)===c);return{...a,title:c,purpose:d?.generationHint||a.purpose,requiredFacts:[...new Set([...a.requiredFacts||[],...d?.requiredFactIds||[]])],queries:[...new Set([...a.queries||[],c,d?.generationHint||"",...a.sections||[]].filter(Boolean))]}})):aD([...b.chapterRules].sort((a,b)=>a.order-b.order).map(a=>{let b=ay(a.title);return{id:a.id,title:b,purpose:a.generationHint||b,requiredFacts:a.requiredFactIds||[],sections:[],queries:[b,a.generationHint||"",...a.requiredFactIds||[]].filter(Boolean),pinnedEvidenceFilePaths:[]}}));if(a.chapters.length>0)return aD([...a.chapters]);let d=b.dynamicChapterRule,f=aE(b),g=Math.min(f,Math.max(0,d.minChapters||0)),h=new Set([...d.sourceRoleIds||[],...d.requiredFileRoleIds||[]]),i=c.filter(a=>0===h.size||a.roleId&&h.has(a.roleId)).filter((a,b,c)=>c.findIndex(b=>`${b.filePath}:${b.sectionTitle||""}`==`${a.filePath}:${a.sectionTitle||""}`)===b).slice(0,f),j=[];for(let b of i){let c=function(a,b,c){let d=(a.sectionTitle||e.basename(a.filePath).replace(/\.[^.]+$/u,"")||`资料片段 ${b+1}`).replace(/\s+/gu," ").slice(0,60);return c?c.replaceAll("{{index}}",String(b+1)).replaceAll("{{sourceTitle}}",d):d}(b,j.length,d.titleTemplate);aN(c,a)||j.push({id:`dynamic-${j.length+1}`,title:c,purpose:d.generationHint||`根据 ${b.filePath} 动态生成章节`,requiredFacts:d.requiredFactIds||[],queries:[c,b.filePath,b.sectionTitle||"",d.generationHint||""].filter(Boolean),pinnedEvidenceFilePaths:[b.filePath]})}if(j.length>=g)return j;let k=a.chapters.length>0?a.chapters.map(a=>a.title):["背景与目标","资料分析","结论与建议"];for(;j.length<g;){let a=j.length,b=k[a]||`动态章节 ${a+1}`;j.push({id:`dynamic-${a+1}`,title:b,purpose:d.generationHint||b,requiredFacts:d.requiredFactIds||[],queries:[b,d.generationHint||"",(d.sourceRoleIds||[]).filter(Boolean).join(" ")].filter(Boolean),pinnedEvidenceFilePaths:[]})}return j}function aG(a,b){let c=`${a.filePath}
11
11
  ${a.content}`;return(function(a){let b=a.replace(/要求|计划|目标|标准|内容|信息|事实|依据|参数|范围|要点/gu,"");return[a,b].filter(Boolean)})(b).some(a=>c.includes(a))}function aH(a,b){let c=aF(a,b,[]).flatMap(a=>a.requiredFacts).map(a=>({id:a,name:a,required:!0,sourceRoleIds:[],extractionHint:""})),d=b?.factFields.map(a=>({id:a.id,name:a.name,required:a.required,sourceRoleIds:a.sourceRoleIds||[],extractionHint:a.extractionHint||""}))||[],e=new Map;for(let a of[...c,...d])e.set(a.id,{...e.get(a.id)||a,...a,required:a.required||e.get(a.id)?.required||!1});return[...e.values()]}function aI(a,b){return(!b.sourceRoleIds?.length||!!(a.roleId&&b.sourceRoleIds.includes(a.roleId)))&&aG(a,b.name)}function aJ(a){return a.toLowerCase()}function aK(a,b){return(a||b).replace(/[^a-zA-Z0-9\u4e00-\u9fa5_-]/gu,"-").slice(0,80)||b}function aL(a,b){try{return RegExp(b,"iu").test(a)}catch{return a.includes(b)}}function aM(a){let b=`${a.name} ${a.category} ${a.outputTitle} ${a.description}`;return(0,o.V)().chapterTitleFilters.filter(a=>a.templateMatchers.some(a=>aL(b,a)))}function aN(a,b){return aM(b).some(b=>!!(b.minLength&&a.length<b.minLength||b.maxLength&&a.length>b.maxLength||b.forbiddenPatterns.some(b=>aL(a,b)))||b.requiredPatterns.length>0&&!b.requiredPatterns.some(b=>aL(a,b)))}function aO(a){return"string"==typeof a?a:null==a?"":Array.isArray(a)?a.map(a=>aO(a)).filter(Boolean).join(";"):"object"==typeof a?Object.entries(a).map(([a,b])=>`${a}:${aO(b)}`).filter(Boolean).join(";"):String(a)}function aP(a){return Array.isArray(a)?a.filter(a=>!!a&&"object"==typeof a&&!Array.isArray(a)):a&&"object"==typeof a?Object.values(a).filter(a=>!!a&&"object"==typeof a&&!Array.isArray(a)):[]}function aQ(a){return Array.isArray(a)?a.map(a=>aO(a).trim()).filter(Boolean):"string"==typeof a?a.split(/[;;\n]/u).map(a=>a.trim()).filter(Boolean):[]}function aR(a){return!!a&&(null!=a.chapters&&!Array.isArray(a.chapters)||null!=a.facts&&!Array.isArray(a.facts))}async function aS(a,b,c){let d=c.slice(0,36).map(a=>`文件:${a.filePath}
12
12
  片段:${a.sectionTitle||""}
13
13
  内容:${a.content.slice(0,1200)}`).join("\n\n---\n\n"),e=b.promptTexts.join("\n\n")||"请读取绑定文件角色,抽取可用于文档生成的结构化信息。",f=`你正在执行一个“文件角色 \xd7 提示词角色”的读取节点。
@@ -21,7 +21,7 @@ ${a.content}`;return(function(a){let b=a.replace(/要求|计划|目标|标准|
21
21
  ${d}`,g=[],h=d.trim()?await bf(e,f):void 0;if(aR(h)){g.push(`${b.fileRoleName} 结构化读取返回格式异常,已尝试修复 JSON schema。`);let a=await bf("你是 JSON schema 修复器。只根据输入 JSON 重新整理字段类型,不新增事实,不改写事实含义。",`请把下面 JSON 修复为严格结构:{"chapters":[],"facts":[],"outputRequirements":[],"warnings":[],"forbidImageInsertion":false}。chapters 和 facts 必须是数组;如果原值是对象,请转为数组;如果无法转换,使用空数组。只返回 JSON。
22
22
 
23
23
  原始 JSON:
24
- ${JSON.stringify(h).slice(0,12e3)}`);a&&!aR(a)?h=a:g.push(`${b.fileRoleName} 结构化读取修复失败,已降级使用证据片段生成。`)}let i=aP(h?.chapters),j=aP(h?.facts),k=[];i.forEach((b,c)=>{let d="string"==typeof b.title?ay(b.title):"";!d||!az(b.title||d)||aN(d,a)||k.push({id:aK(d,`chapter-${c+1}`),title:d,order:c,sourceRequirement:b.sourceRequirement||d,requiredContents:aQ(b.requiredContents),writingRules:aQ(b.writingRules),evidenceNeeds:aQ(b.evidenceNeeds),minWords:Math.max(800,Math.min(3500,Number(b.minWords)||1200)),requirements:aP(b.requirements).map((a,b)=>({id:aK(`${d}-${a.title||b+1}`,`req-${c+1}-${b+1}`),title:a.title||`要求 ${b+1}`,requirementText:a.requirementText||a.title||"",requiredContents:aQ(a.requiredContents),writingRules:aQ(a.writingRules),evidenceNeeds:aQ(a.evidenceNeeds),preferredSourceRoleIds:aQ(a.preferredSourceRoleIds)}))})});let l=[];return j.forEach(a=>{let d="string"==typeof a.key?a.key.trim():"";d&&null!=a.value&&l.push({key:d,value:ar(aO(a.value)),sourceFile:a.sourceFile||c.find(a=>a.filePath)?.filePath||"",roleId:b.fileRoleId,processingType:b.processingType,relatedChapterHints:aQ(a.relatedChapterHints)})}),(0===k.length||0===l.length)&&g.push(`${b.fileRoleName} 部分结构化结果不足,已补充使用证据片段兜底。`),{node:b,evidence:c,chapters:k.length>0?k:function(a,b,c){if("template_requirements"!==b.outputType)return[];let d=[],e=new Set;for(let b of c){for(let c of b.content.split(/\r?\n/u).map(a=>a.trim()).filter(Boolean)){if(!/^(?:第[一二三四五六七八九十百千万\d]+[章节]|[一二三四五六七八九十]+、|\d+(?:\.\d+)*[、..])/.test(c))continue;let f=ay(c);if(!(!az(c)||e.has(f)||aN(f,a))&&(e.add(f),d.push({id:aK(f,`chapter-${d.length+1}`),title:f,order:d.length,sourceRequirement:b.content.replace(/\s+/gu," ").slice(0,500),requiredContents:[],writingRules:[],evidenceNeeds:[],minWords:1200,requirements:[]}),d.length>=10))break}if(d.length>=10)break}return d}(a,b,c),facts:l.length>0?l:c.slice(0,20).map((a,c)=>({key:`${b.fileRoleName}事实${c+1}`,value:a.content.replace(/\s+/gu," ").slice(0,360),sourceFile:a.filePath,roleId:b.fileRoleId,processingType:b.processingType,relatedChapterHints:a.sectionTitle?[a.sectionTitle]:[]})).filter(a=>a.value.length>20),outputRequirements:aQ(h?.outputRequirements),warnings:[...g,...aQ(h?.warnings)],forbidImageInsertion:h?.forbidImageInsertion??"drawing_facts"===b.outputType}}function aT(a){let b=a.filter(a=>/招标|示范文本|tender/u.test(`${a.filePath} ${a.roleId||""} ${a.processingType||""}`)),c=b.length>0?b:a,d=c.map(a=>a.content).join("\n"),e=[],f=c.find(a=>/招标|示范文本|tender/u.test(a.filePath))?.filePath||c[0]?.filePath||"";for(let[a,b]of[["项目名称",/(?:项目名称|工程名称)\s*[::]?\s*([^\n;;。]{3,80})/u],["项目编号",/(?:项目编号|招标编号|标段编号)\s*[::]?\s*([^\n;;。]{3,80})/u],["招标人",/(?:招标人|建设单位|采购人)\s*[::]?\s*([^\n;;。]{2,80})/u],["建设地点",/(?:建设地点|项目地点|工程地点)\s*[::]?\s*([^\n;;。]{2,100})/u],["建设规模",/(?:建设规模|项目规模)\s*[::]?\s*([^\n;;。]{2,160})/u],["招标范围",/(?:招标范围|工程招标范围|施工范围)\s*[::]?\s*([^\n。]{5,260})/u],["计划工期",/(?:计划工期|工期要求|合同履行期限)\s*[::]?\s*([^\n;;。]{2,100})/u],["质量标准",/(?:质量标准|质量要求)\s*[::]?\s*([^\n;;。]{2,100})/u],["资金来源",/(?:资金来源|资金落实情况)\s*[::]?\s*([^\n;;。]{2,100})/u],["标段划分",/(?:标段划分|标包划分)\s*[::]?\s*([^\n;;。]{2,120})/u]]){let c=b.exec(d)?.[1]?.replace(/\s+/gu," ").trim();c&&!/见(?:招标|公告|文件)|详见|按.*要求/u.test(c)&&e.push({key:a,value:c.slice(0,260),sourceFile:f})}return e}function aU(a){return a?({"knowledge-base":"知识库","document-readiness":"生成准备度检查","quality-repair":"质量补写","export-gate":"导出门禁","context-memory":"项目上下文","final-format":"正式排版","multimodal-files":"多模态文件理解","llm-json":"LLM 事实抽取","llm-review":"LLM 审查","document-workflow":"最终规范校验"})[a]:void 0}function aV(a,b={}){let c={executionVersion:2,title:{role_binding:"项目角色配置绑定",knowledge_retrieval:"知识库证据检索",context_recall:"项目上下文召回",file_understanding:"文件角色读取",fact_extraction:"事实抽取",chapter_generation:"章节正文生成",asset_generation:"生成资源处理",llm_review:"LLM 审查优化",validation:"自动规范与门禁校验",formatting:"正式排版整理",export_ready:"导出就绪检查",reference:"资料增强"}[a.type],group:a.type,...a,...b};return{...c,roleName:c.roleName||aU(c.roleId),subtitle:c.subtitle||c.roleName||aU(c.roleId)}}function aW(a,b,c){let d=[b.title,...b.requiredFacts||[],...c?.requiredContents||[],...c?.evidenceNeeds||[],...c?.requirements.flatMap(a=>[a.title,...a.requiredContents,...a.evidenceNeeds])||[]].filter(Boolean);return a.flatMap(a=>a.facts.map(b=>({artifact:a,fact:b}))).filter(({fact:a})=>{let b=`${a.key}
24
+ ${JSON.stringify(h).slice(0,12e3)}`);a&&!aR(a)?h=a:g.push(`${b.fileRoleName} 结构化读取修复失败,已降级使用证据片段生成。`)}let i=aP(h?.chapters),j=aP(h?.facts),k=[];i.forEach((b,c)=>{let d="string"==typeof b.title?az(b.title):"";!d||!aA(b.title||d)||aN(d,a)||k.push({id:aK(d,`chapter-${c+1}`),title:d,order:c,sourceRequirement:b.sourceRequirement||d,requiredContents:aQ(b.requiredContents),writingRules:aQ(b.writingRules),evidenceNeeds:aQ(b.evidenceNeeds),minWords:Math.max(800,Math.min(3500,Number(b.minWords)||1200)),requirements:aP(b.requirements).map((a,b)=>({id:aK(`${d}-${a.title||b+1}`,`req-${c+1}-${b+1}`),title:a.title||`要求 ${b+1}`,requirementText:a.requirementText||a.title||"",requiredContents:aQ(a.requiredContents),writingRules:aQ(a.writingRules),evidenceNeeds:aQ(a.evidenceNeeds),preferredSourceRoleIds:aQ(a.preferredSourceRoleIds)}))})});let l=[];return j.forEach(a=>{let d="string"==typeof a.key?a.key.trim():"";d&&null!=a.value&&l.push({key:d,value:ar(aO(a.value)),sourceFile:a.sourceFile||c.find(a=>a.filePath)?.filePath||"",roleId:b.fileRoleId,processingType:b.processingType,relatedChapterHints:aQ(a.relatedChapterHints)})}),(0===k.length||0===l.length)&&g.push(`${b.fileRoleName} 部分结构化结果不足,已补充使用证据片段兜底。`),{node:b,evidence:c,chapters:k.length>0?k:function(a,b,c){if("template_requirements"!==b.outputType)return[];let d=[],e=new Set;for(let b of c){for(let c of b.content.split(/\r?\n/u).map(a=>a.trim()).filter(Boolean)){if(!RegExp(`^(?:第(?:\\d{1,3}|${ax})[章节]|[((]?(?:\\d{1,3}|${ax})[))、..]|\\d+(?:\\.\\d+)*[、..])`,"u").test(c))continue;let f=az(c);if(!(!aA(c)||e.has(f)||aN(f,a))&&(e.add(f),d.push({id:aK(f,`chapter-${d.length+1}`),title:f,order:d.length,sourceRequirement:b.content.replace(/\s+/gu," ").slice(0,500),requiredContents:[],writingRules:[],evidenceNeeds:[],minWords:1200,requirements:[]}),d.length>=40))break}if(d.length>=40)break}return d}(a,b,c),facts:l.length>0?l:c.slice(0,20).map((a,c)=>({key:`${b.fileRoleName}事实${c+1}`,value:a.content.replace(/\s+/gu," ").slice(0,360),sourceFile:a.filePath,roleId:b.fileRoleId,processingType:b.processingType,relatedChapterHints:a.sectionTitle?[a.sectionTitle]:[]})).filter(a=>a.value.length>20),outputRequirements:aQ(h?.outputRequirements),warnings:[...g,...aQ(h?.warnings)],forbidImageInsertion:h?.forbidImageInsertion??"drawing_facts"===b.outputType}}function aT(a){let b=a.filter(a=>/招标|示范文本|tender/u.test(`${a.filePath} ${a.roleId||""} ${a.processingType||""}`)),c=b.length>0?b:a,d=c.map(a=>a.content).join("\n"),e=[],f=c.find(a=>/招标|示范文本|tender/u.test(a.filePath))?.filePath||c[0]?.filePath||"";for(let[a,b]of[["项目名称",/(?:项目名称|工程名称)\s*[::]?\s*([^\n;;。]{3,80})/u],["项目编号",/(?:项目编号|招标编号|标段编号)\s*[::]?\s*([^\n;;。]{3,80})/u],["招标人",/(?:招标人|建设单位|采购人)\s*[::]?\s*([^\n;;。]{2,80})/u],["建设地点",/(?:建设地点|项目地点|工程地点)\s*[::]?\s*([^\n;;。]{2,100})/u],["建设规模",/(?:建设规模|项目规模)\s*[::]?\s*([^\n;;。]{2,160})/u],["招标范围",/(?:招标范围|工程招标范围|施工范围)\s*[::]?\s*([^\n。]{5,260})/u],["计划工期",/(?:计划工期|工期要求|合同履行期限)\s*[::]?\s*([^\n;;。]{2,100})/u],["质量标准",/(?:质量标准|质量要求)\s*[::]?\s*([^\n;;。]{2,100})/u],["资金来源",/(?:资金来源|资金落实情况)\s*[::]?\s*([^\n;;。]{2,100})/u],["标段划分",/(?:标段划分|标包划分)\s*[::]?\s*([^\n;;。]{2,120})/u]]){let c=b.exec(d)?.[1]?.replace(/\s+/gu," ").trim();c&&!/见(?:招标|公告|文件)|详见|按.*要求/u.test(c)&&e.push({key:a,value:c.slice(0,260),sourceFile:f})}return e}function aU(a){return a?({"knowledge-base":"知识库","document-readiness":"生成准备度检查","quality-repair":"质量补写","export-gate":"导出门禁","context-memory":"项目上下文","final-format":"正式排版","multimodal-files":"多模态文件理解","llm-json":"LLM 事实抽取","llm-review":"LLM 审查","document-workflow":"最终规范校验"})[a]:void 0}function aV(a,b={}){let c={executionVersion:2,title:{role_binding:"项目角色配置绑定",knowledge_retrieval:"知识库证据检索",context_recall:"项目上下文召回",file_understanding:"文件角色读取",fact_extraction:"事实抽取",chapter_generation:"章节正文生成",asset_generation:"生成资源处理",llm_review:"LLM 审查优化",validation:"自动规范与门禁校验",formatting:"正式排版整理",export_ready:"导出就绪检查",reference:"资料增强"}[a.type],group:a.type,...a,...b};return{...c,roleName:c.roleName||aU(c.roleId),subtitle:c.subtitle||c.roleName||aU(c.roleId)}}function aW(a,b,c){let d=[b.title,...b.requiredFacts||[],...c?.requiredContents||[],...c?.evidenceNeeds||[],...c?.requirements.flatMap(a=>[a.title,...a.requiredContents,...a.evidenceNeeds])||[]].filter(Boolean);return a.flatMap(a=>a.facts.map(b=>({artifact:a,fact:b}))).filter(({fact:a})=>{let b=`${a.key}
25
25
  ${aO(a.value)}
26
26
  ${a.relatedChapterHints.join("\n")}`;return 0===d.length||d.some(c=>b.includes(c)||c.includes(a.key))}).slice(0,80)}function aX(a,b){return a.some(a=>a.forbidImageInsertion||"drawing_facts"===a.node.outputType)}function aY(a,b){return b?a.replace(/^!\[[^\]]*(?:图纸|drawing|cad|地图|平面|剖面|立面)[^\]]*\]\([^)]*\)\s*$/gimu,"").replace(/\n{3,}/gu,"\n\n"):a}let aZ=/.*(?:知识库证据|文件角色|提示词角色|后台自动规范|规范包|事实字段|资料未提供|未检索到|待确认事项|证据来源|来源清单|校验结果).*(?:\n|$)/gu,a$=/^\s*(?:#{1,6}\s*)?(?:PDF\s*第\s*\d+\s*页|rule\b|文件[::]|片段[::]|来源[::]).*$/gimu,a_=/^\s*(?:[│┃┆┊┌┐└┘├┤┬┴┼─━╭╮╰╯]|[↓↑→←⇒⇨➡])+\s*$/gmu;function a0(a){return(function(a){let b=a.trim(),c=/^```(?:markdown|md)?\s*\n([\s\S]*?)\n```\s*$/iu.exec(b);return c?c[1].trim():a})(a).replace(/\b(m|㎡)\s*2\b/giu,"平方米").replace(/\bm\s*[²2]\b/giu,"平方米").replace(/\b(m|㎥)\s*3\b/giu,"立方米").replace(/\bm\s*[³3]\b/giu,"立方米").replace(/\bmm2\b/giu,"平方毫米").replace(/\bcm2\b/giu,"平方厘米").replace(/\bkm2\b/giu,"平方千米").replace(/\s*×\s*/gu,"\xd7").replace(/\s*≤\s*/gu,"≤").replace(/\s*≥\s*/gu,"≥").replace(/\s*±\s*/gu,"\xb1").replace(aZ,"").replace(a$,"").replace(a_,"").replace(ap,"").replace(/^#\s+/gmu,"").replace(ao,"").replace(/第\s*\d+\s*页\s*\/\s*共\s*\d+\s*页/gu,"").replace(/\|\s*(?:[/—-]|无|暂无|待定|待补充|N\/?A)\s*(?=\|)/giu,"| 结合项目资料及现场深化确认 ").replace(/见(?:招标文件|招标公告|图纸|设计文件|相关文件)/gu,"依据已提供招标资料和设计资料").replace(/按(?:图纸|设计要求|相关规范|有关规范|文件要求)/gu,"依据已提供设计资料和现行规范").replace(/满足(?:相关|有关)?要求/gu,"满足招标文件、设计文件及现行验收规范要求").replace(/\n{3,}/gu,"\n\n").trim()}let a1="你正在生成可直接交付的正式业务文档,不是分析报告、证据报告或系统调试报告。\n不得把“知识库、检索、文件角色、提示词角色、规范包、事实字段、动态章节、缺失项、校验结果、资料未提供、未检索到”等后台流程话术写入正文。\n文档结构、禁用标题、必需章节、事实取舍和行业表达必须优先遵循用户绑定的提示词角色、项目角色配置和后台自动规范;通用生成链路不得擅自发明业务规则。\n资料信息应内化为正式正文表达;除非后台自动规范或用户要求来源追溯章节,否则不要单列系统证据清单。\n表格、标题和公式必须使用 Markdown/导出友好的写法,避免 ASCII 流程图和容易导致导出异常的符号组合。\n正式正文不得把招标公告、评标办法、清单编制说明、公共资源交易条款或规程条款原文误作为章节标题或目录项。\n施工组织设计类文件必须内化招标公告项目基本信息,编制依据应覆盖招标资料、清单图纸、国家法律法规、现行规范标准和地方规章;项目基本信息已表格化时,表格前只保留一句引导语,不得逐项重复叙述同一批字段。\n施工组织设计类文件必须以项目实际工程对象、施工部位、工程量、设计参数、工期节点和资源投入为约束;日期、数量、数值、单位、规格不得自由发挥。\n同一施工方案、工艺或措施适用于多个部位、区域、学校、片区或分项时,必须逐项覆盖,不得只写一个代表性数量后泛化到全部范围。\n不得使用“本节”“本章将”“以下从”“以下内容”等模板化前缀;标题后直接进入施工对象、工艺动作、控制措施、检查验收和责任闭环。\n正文二级小节下如需设置三级小节,必须使用“#### 章号.节号.序号 标题”,例如“#### 2.2.1 管沟开挖”;不得用无编号独立加粗行表示三级小节;三级小节不纳入目录。\n资料不足或不同来源数值冲突时,应保持审慎并提示复核口径,不得编造精确数量。\n语言应正式、专业、克制,适合直接导出交付。";function a2(a,b,c,d,e){let f=[];for(let b of c)for(let c of(a.includes(b.title)||f.push(`缺少动态章节:${b.title}`),b.requiredContents.slice(0,12)))c&&!a.includes(c)&&f.push(`${b.title} 未覆盖必写内容:${c}`);for(let d of b){let b=c.find(a=>a.title===d.title),e=b?.minWords||1e3;for(let b of(d.content.length<e&&f.push(`${d.title} 内容深度不足:${d.content.length}/${e}`),(d.sections||[]).length<3&&f.push(`${d.title} 二级小节少于 3 个,必须由模型结合章节主题和项目资料补齐 3-6 个正式二级小节`),d.sections||[]))b&&!a.includes(b)&&f.push(`${d.title} 缺少目录小节:${b}`)}for(let b of d){let c=b.facts.slice(0,5).map(a=>aO(a.value).slice(0,24)).filter(a=>a.length>=6);c.length>0&&!c.some(b=>a.includes(b))&&f.push(`未体现 ${b.node.fileRoleName} 的关键读取结果`)}return e&&/!\[[^\]]*\]\([^)]*\)/iu.test(a)&&f.push("正文包含不应插入的图片"),/\b(?:m\s*[²2]|m\s*[³3]|mm2|cm2|km2)\b/iu.test(a)&&f.push("正文包含导出不友好的计量单位写法"),[...new Set(f)].slice(0,40)}async function a3(a){if(0===a.issues.length)return{markdown:a.markdown,stage:void 0};let b=a.template.chapters.map(a=>[`- ${a.title}`,a.sections?.length?` 二级小节:${a.sections.join("、")}`:"",a.tableSections?.length?` 表格小节:${a.tableSections.join("、")}`:"",a.tableRequirements?.length?` 表格内容要求:${a.tableRequirements.join(";")}`:""].filter(Boolean).join("\n")).join("\n"),c=await be(["你是文档质量补写和纠偏专家。必须严格按照模板、章节计划、后台自动规范、提示词角色和已提供资料补齐内容,禁止编造。",a.forbidDrawingImages?"图片/图纸类资料只作为文本事实来源,禁止插入图片或 Markdown 图片语法。":"","你必须优先修复“配置要求缺少/不得出现/表格不足/Markdown 标题符号”等门禁问题;能通过改写、删除污染文本、补充正式表格解决的问题必须直接修复,不要只解释。","保持 Markdown 标题层级;直接返回修复后的完整 Markdown。","必须保留文档开头的“## 目录”,目录必须是父子级导航:一级章按“第一章 xxx”作为父级单独成行,二级小节按“1.1 xxx、1.2 xxx”缩进列在所属章下方;不得删除目录页和页分隔符。","必须保留模板配置的章节和二级小节;若章节未配置二级小节、出现“缺少模型自行生成的二级小节”或任一章节二级小节少于 3 个,必须由模型结合章节主题和资料补齐 3-6 个正式二级小节,不得使用固定默认小节。配置要求使用表格的小节,应由已提供资料和正文内容归纳生成正式 Markdown 表格,不得输出证据摘录表。","二级小节下如需设置三级小节,必须统一改为“#### 章号.节号.序号 标题”,例如“#### 2.2.1 管沟开挖”;三级小节不纳入目录;不得保留“**管沟开挖**”这类无编号独立加粗标题。","必须进行整文一致性审查:招标公告、清单、图纸、规范、答疑之间如存在项目名称、范围、工期、质量、规格、数量、材料、系统参数冲突,应优先采用招标公告、答疑补遗、图纸设计说明和清单项目特征中的明确事实,并在正文中保持同一口径。","项目基本信息、项目基本信息表、招标公告基本信息只允许出现在第一章;第二章及后续章节如出现此类重复小节或表格,必须删除并改写为本章专业内容;第一章已有项目基本信息表时,表格前只保留一句引导语,不得重复逐项叙述项目名称、编号、地点、工期、质量等字段。","必须删除“本节”“本章将”“以下从”“以下内容”等模板化前缀,标题后直接写实质内容。","必须检查重要信息遗漏:清单/图纸中的规格、管径、尺寸、厚度、强度、工程量、设备数量、试验验收和工艺参数不得被“按设计要求/满足规范”替代;发现遗漏必须补入对应分项章节。","对“量化对象覆盖不足”“量化数值使用不足”的问题,必须按施工对象、部位、区域、学校、片区或分项逐项补齐适用范围、工程量、工期节点、资源配置和控制措施;不得只写一个代表性数量。","补写日期、数量、单位、规格和资源数量时只能使用资料、角色节点产物或正文已有可信事实;缺少依据时不得编造,应改写为需复核的正式管理措施。",a.promptTexts].filter(Boolean).join("\n\n"),[`模板:${a.template.name}`,a.requirement?`用户要求:${a.requirement}`:"",`需要修复的问题:
27
27
  ${a.issues.map(a=>`- ${a}`).join("\n")}`,b?`模板配置结构要求:
@@ -47,21 +47,21 @@ ${b.sections.map(a=>`- ${a}`).join("\n")}`:"本章未预设二级小节,请根
47
47
  ${f}`:"",i.tenderAnnouncementContext||"",!i.tenderAnnouncementContext?"本章不得重复设置“项目基本信息”“项目基本信息表”“招标公告项目基本信息”等小节或表格;项目基本信息只允许出现在第一章。":"",h||"",i.technicalFactContext||"",i.coverageMatrixContext||"",d.length?`需要特别补足的事实:${d.join("、")}`:"","请生成一个专业、充实、可直接导出的正式文档章节,要求:","- 保留章节标题;如模板配置了小节,必须按配置生成;如未配置小节,必须结合本章内容自行生成 3-6 个正式二级小节,且小节不能为空;不要无依据地拆分过细小节;",b.tableSections?.length?`- 本章以下小节适合使用正式工程表格辅助表达:${b.tableSections.join("、")};表格必须由正文归纳形成,禁止直接粘贴证据摘录。`:"","- 表格只用于工程概况、施工部署、重点难点、资源配置、质量安全控制、验收移交等适合结构化表达的位置;项目基本信息已表格化时,表格前只保留一句引导语,不得逐项重复叙述同一批字段;其他表格前后必须有说明,不能整节只有表格。","- 不得使用“本节”“本章将”“以下从”“以下内容”等模板化前缀;标题后直接进入施工对象、工艺动作、控制措施、检查验收和责任闭环。","- 二级小节下如需设置三级小节,必须使用“#### 章号.节号.序号 标题”,例如“#### 2.2.1 管沟开挖”;三级小节不纳入目录;不得使用无编号独立加粗行表示三级小节。","- 必须使用模板节点提取的章节要求和输出规范;","- 必须结合项目事实、表格数据、技术规范等内部资料;","- 对同一对象的事实应综合表达,优先写入准确的数量、单位、规格、参数、做法和标准;","- 日期、数量、数值、规格、工程量、工期、资源配置等量化内容必须来自资料或明确推导;无依据时不得编造具体值。","- 如果同一施工方案、工艺或措施适用于多个部位、区域、学校、片区或分项,必须逐项覆盖适用范围和对应工程量,不得只写其中一个数量。","- 对工程类章节,必须把工程技术事实表和量化事实覆盖矩阵中的参数、规格、数量、部位、工艺动作、试验验收和规范标准落到正文;禁止用“按设计要求、按规范要求、加强管理”等空泛表述替代已知事实;","- 存在事实冲突时,按后台自动规范、文件角色、提示词角色和用户要求指定的优先级处理;","- 默认不要引用原始文件名,不写解析器内部对象名;","- 将资料要点自然融入正文,不单列系统证据或来源章节;","- 小节层级保持适度,除非规范包或提示词要求,不要输出中间分析产物标题;","- 组织关系、流程、职责、资源配置、风险控制等适合表格表达的内容可使用 Markdown 表格;",`- 内容不少于 ${i.minWords||1e3} 字,避免空泛口号。`,"",j?"内部资料:":"",j].filter(Boolean).join("\n"),m=await be(k,l);if(m&&!(m.length<120))return a0(aY(m.startsWith("## ")?m:`## ${b.title}
48
48
 
49
49
  ${m}`,!!i.forbidDrawingImages))}async function bu(a){let b=aw(av({id:"review",title:"全文审查",purpose:"审查全文证据和资源关系",queries:[],requiredFacts:[]},a.evidence)),c=a.spec?[`规范包:${a.spec.name}`,`事实字段:${a.spec.factFields.map(a=>`${a.name}${a.required?"(必需)":""}`).join("、")}`,"dynamic"===a.spec.chapterMode?`章节规则:动态章节|来源=${a.spec.dynamicChapterRule.source}|标题=${a.spec.dynamicChapterRule.titleStrategy||"ai_summary"}|${a.spec.dynamicChapterRule.generationHint||"由资料自动规划"}`:`章节规则:${a.spec.chapterRules.map(a=>`${a.title}${a.minWords?`≥${a.minWords}字`:""}`).join("、")}`,`门禁规则:${a.spec.gateRules.map(a=>`${a.name}:${a.type}`).join("、")}`].join("\n"):"后台自动规范未生成。",d=await be(["你是文档质量审查与优化专家。你要基于模板、后台自动规范、提示词角色和内部资料对初稿进行二次审查和优化,使其成为正式业务文档。",a1,"准确性优先级:后台自动规范/模板要求 > 已绑定或人工确认的知识库证据 > 自动检索知识库证据 > 项目上下文/历史记忆。内部优先级只用于判断事实,不得写入正文。","项目上下文/历史记忆只能用于风格偏好、历史纠偏和连续性检查;如果与知识库证据冲突,必须以知识库证据为准。","必须保持 Markdown 输出;必须保留文档开头的“## 目录”,目录必须是父子级导航结构:一级章单独成行,二级小节缩进列在所属章下方,三级小节不纳入目录;不得平铺成同级列表;不得删除目录页、页分隔符或已有正式标题层级和表格;不得保留或新增证据来源、资料来源、缺失项、校验结果等后台信息。","项目基本信息、项目基本信息表、招标公告基本信息只允许保留在第一章;后续章节如重复出现,应删除并替换为该章对应的分项、工艺、参数、资源、质量安全等内容。","图片/图纸类资料默认只作为文本事实依据,除非用户明确要求插图,否则不要插入图片或 Markdown 图片语法;不得引用 PDF/DWG/Excel 文件名。","重点检查:正式章节完整性、资料事实内化使用、参数数字准确性、冲突事实是否按配置优先级处理、解析器内部对象名清理、表格呈现、表达专业性、导出友好性。","必须检查日期、数量、数值、单位、规格、工程量和资源数量是否有资料依据;同一方案涉及多个部位/区域/学校/片区/分项时,必须检查是否逐项覆盖。","除非后台自动规范或提示词明确要求,删除中间分析产物标题和后台流程说明。",a.promptTexts].filter(Boolean).join("\n\n"),[`模板:${a.template.name}`,a.requirement?`用户要求:${a.requirement}`:"",a.projectContext?`项目上下文/历史记忆(仅作偏好、历史纠偏和连续性参考;如与知识库证据冲突,以知识库证据为准):
50
- ${a.projectContext}`:"",c,"","知识库证据摘要:",b,"","待审查初稿:",a.markdown,"","请直接返回优化后的完整正式 Markdown,不要附加解释。"].filter(Boolean).join("\n"));return d&&!(d.length<.7*a.markdown.length)&&d.includes("#")?{markdown:a0(d),stage:{type:"llm_review",roleId:"llm-review",status:"success",message:"已完成 LLM 二次审查与优化"}}:{markdown:a.markdown,stage:{type:"llm_review",roleId:"llm-review",status:"skipped",message:"无可用模型或审查结果不可用,保留生成初稿"}}}function bv(a){return[...new Set([...a.matchAll(/^###\s+(.+)$/gmu)].map(a=>ax(a[1]||"")).filter(a=>a.length>=2&&a.length<=80))].slice(0,12)}function bw(a){let b=/^\*\*([^*]+?)\*\*\s*[::]?\s*$/u.exec(a.trim());if(!b)return"";let c=ax(b[1]||"");return c.length<2||c.length>40||/[。;;.!!??]$/u.test(c)||/^(注|说明|备注|提示|要求)[::]/u.test(c)?"":c}function bx(a){let b=a.split(/\r?\n/u),c="",d=0;return b.map(a=>{let b=/^###\s+(\d+\.\d+)\s+.+$/u.exec(a.trim());if(b)return c=b[1],d=0,a;if(/^##\s+/u.test(a.trim()))return c="",d=0,a;if(!c)return a;let e=/^####\s+(.+)$/u.exec(a.trim());if(e){let b=(e[1]||"").trim();if(/^\d+\.\d+\.\d+\s+\S/u.test(b))return a;let f=ax(b);return d+=1,`#### ${c}.${d} ${f}`}let f=bw(a);return f?(d+=1,`#### ${c}.${d} ${f}`):a}).join("\n").replace(/\n{3,}/gu,"\n\n").trim()}function by(a){let b=[],c="";for(let d of a.split(/\r?\n/u)){let a=d.trim(),e=/^###\s+(\d+\.\d+)\s+.+$/u.exec(a);if(e){c=e[1];continue}if(/^##\s+/u.test(a)&&(c=""),!c)continue;let f=/^####\s+(.+)$/u.exec(a);if(f){let a=(f[1]||"").trim();RegExp(`^${bA(c)}\\.\\d+\\s+\\S`,"u").test(a)||b.push({level:"warning",message:`三级小节缺少 ${c}.x 编号:${ax(a)}`,suggestion:"三级小节必须使用“#### 章号.节号.序号 标题”,且不纳入目录。"})}let g=bw(a);g&&b.push({level:"warning",message:`独立加粗行疑似未编号三级小节:${g}`,suggestion:"请改为“#### 章号.节号.序号 标题”,不要用无编号加粗行表示三级小节。"})}return b.slice(0,20)}function bz(a){return["## 目录","",...a.flatMap((a,b)=>{let c=a.sections||[];return[aB(b,a.title),"",...c.flatMap((a,c)=>[` ${/^\s*\d+(?:\.\d+)+\s+/.test(a)?a:`${b+1}.${c+1} ${a}`}`,""])]})].join("\n")}function bA(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function bB(a,b){let c=[];for(let d of b.chapters){let b=function(a,b){let c=ax(b),d=RegExp(`(^##\\s+(?:第[一二三四五六七八九十百千万\\d]+章\\s*)?${bA(c)}\\s*$)([\\s\\S]*?)(?=\\n##\\s+|(?![\\s\\S]))`,"mu").exec(a);if(d&&void 0!==d.index)return{start:d.index,end:d.index+d[0].length,heading:d[1]||`## ${b}`,body:d[2]||""}}(a,d.title);if(!b){c.push({level:"error",message:`${d.title} 正文缺少章节标题`,suggestion:"请重新生成,确保模板章节完整输出。"});continue}let e=b.heading+b.body,f=(d.sections||[]).filter(a=>!(function(a){let b=a.replace(/^\s*\d+(?:\.\d+)+\s+/u,"").trim();return RegExp(`^###\\s+(?:${bA(a)}|(?:\\d+(?:\\.\\d+)+\\s+)?${bA(b)})\\s*$`,"mu")})(a).test(e));f.length>0&&c.push({level:"error",message:`${d.title} 正文缺少配置小节:${f.join("、")}`,suggestion:"请重新生成或检查审查阶段是否删除了二级小节。"}),d.tableSections?.length&&!/\|[^\n]+\|\s*\n\s*\|\s*:?-{3,}:?\s*\|/u.test(e)&&c.push({level:"error",message:`${d.title} 缺少必要的正式表格`,suggestion:"请按模板 tableSections/tableRequirements 在对应小节补充正式 Markdown 表格。"})}return c}function bC(a){let b=a.chapters.map((a,b)=>(function(a,b){let c=`## ${aB(b,a.title)}`,d=a0(a.content);return/^##\s+.+$/mu.test(d)?d.replace(/^##\s+.+$/mu,c):`${c}
50
+ ${a.projectContext}`:"",c,"","知识库证据摘要:",b,"","待审查初稿:",a.markdown,"","请直接返回优化后的完整正式 Markdown,不要附加解释。"].filter(Boolean).join("\n"));return d&&!(d.length<.7*a.markdown.length)&&d.includes("#")?{markdown:a0(d),stage:{type:"llm_review",roleId:"llm-review",status:"success",message:"已完成 LLM 二次审查与优化"}}:{markdown:a.markdown,stage:{type:"llm_review",roleId:"llm-review",status:"skipped",message:"无可用模型或审查结果不可用,保留生成初稿"}}}function bv(a){return[...new Set([...a.matchAll(/^###\s+(.+)$/gmu)].map(a=>ay(a[1]||"")).filter(a=>a.length>=2&&a.length<=80))].slice(0,12)}function bw(a){let b=/^\*\*([^*]+?)\*\*\s*[::]?\s*$/u.exec(a.trim());if(!b)return"";let c=ay(b[1]||"");return c.length<2||c.length>40||/[。;;.!!??]$/u.test(c)||/^(注|说明|备注|提示|要求)[::]/u.test(c)?"":c}function bx(a){let b=a.split(/\r?\n/u),c="",d=0;return b.map(a=>{let b=/^###\s+(\d+\.\d+)\s+.+$/u.exec(a.trim());if(b)return c=b[1],d=0,a;if(/^##\s+/u.test(a.trim()))return c="",d=0,a;if(!c)return a;let e=/^####\s+(.+)$/u.exec(a.trim());if(e){let b=(e[1]||"").trim();if(/^\d+\.\d+\.\d+\s+\S/u.test(b))return a;let f=ay(b);return d+=1,`#### ${c}.${d} ${f}`}let f=bw(a);return f?(d+=1,`#### ${c}.${d} ${f}`):a}).join("\n").replace(/\n{3,}/gu,"\n\n").trim()}function by(a){let b=[],c="";for(let d of a.split(/\r?\n/u)){let a=d.trim(),e=/^###\s+(\d+\.\d+)\s+.+$/u.exec(a);if(e){c=e[1];continue}if(/^##\s+/u.test(a)&&(c=""),!c)continue;let f=/^####\s+(.+)$/u.exec(a);if(f){let a=(f[1]||"").trim();RegExp(`^${bA(c)}\\.\\d+\\s+\\S`,"u").test(a)||b.push({level:"warning",message:`三级小节缺少 ${c}.x 编号:${ay(a)}`,suggestion:"三级小节必须使用“#### 章号.节号.序号 标题”,且不纳入目录。"})}let g=bw(a);g&&b.push({level:"warning",message:`独立加粗行疑似未编号三级小节:${g}`,suggestion:"请改为“#### 章号.节号.序号 标题”,不要用无编号加粗行表示三级小节。"})}return b.slice(0,20)}function bz(a){return["## 目录","",...a.flatMap((a,b)=>{let c=a.sections||[];return[aB(b,a.title),"",...c.flatMap((a,c)=>[` ${/^\s*\d+(?:\.\d+)+\s+/.test(a)?a:`${b+1}.${c+1} ${a}`}`,""])]})].join("\n")}function bA(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function bB(a,b){let c=[];for(let d of b.chapters){let b=function(a,b){let c=ay(b),d=RegExp(`(^##\\s+(?:第[一二三四五六七八九十百千万\\d]+章\\s*)?${bA(c)}\\s*$)([\\s\\S]*?)(?=\\n##\\s+|(?![\\s\\S]))`,"mu").exec(a);if(d&&void 0!==d.index)return{start:d.index,end:d.index+d[0].length,heading:d[1]||`## ${b}`,body:d[2]||""}}(a,d.title);if(!b){c.push({level:"error",message:`${d.title} 正文缺少章节标题`,suggestion:"请重新生成,确保模板章节完整输出。"});continue}let e=b.heading+b.body,f=(d.sections||[]).filter(a=>!(function(a){let b=a.replace(/^\s*\d+(?:\.\d+)+\s+/u,"").trim();return RegExp(`^###\\s+(?:${bA(a)}|(?:\\d+(?:\\.\\d+)+\\s+)?${bA(b)})\\s*$`,"mu")})(a).test(e));f.length>0&&c.push({level:"error",message:`${d.title} 正文缺少配置小节:${f.join("、")}`,suggestion:"请重新生成或检查审查阶段是否删除了二级小节。"}),d.tableSections?.length&&!/\|[^\n]+\|\s*\n\s*\|\s*:?-{3,}:?\s*\|/u.test(e)&&c.push({level:"error",message:`${d.title} 缺少必要的正式表格`,suggestion:"请按模板 tableSections/tableRequirements 在对应小节补充正式 Markdown 表格。"})}return c}function bC(a){let b=a.chapters.map((a,b)=>(function(a,b){let c=`## ${aB(b,a.title)}`,d=a0(a.content);return/^##\s+.+$/mu.test(d)?d.replace(/^##\s+.+$/mu,c):`${c}
51
51
 
52
52
  ${d}`})(a,b)).filter(Boolean).join("\n\n"),c=bz(a.chapters);return a0(['<div class="document-cover">',`# ${a.title}`,'\n</div>\n\n<div class="page-break"></div>\n',c,'\n<div class="page-break"></div>\n',b].join("\n"))}function bD(a){if(a?.aborted)throw Error("用户中止")}async function bE(a){var b,c;bD(a.signal);let g=aj(a.templateId);if(!g)throw Error("Document template not found");let h=e.resolve(a.projectRoot||(0,j.aY)());if(!h)throw Error("No knowledge base project found");let i=g,l=(0,j.Qh)(),n=Math.max(5,Math.min(30,a.maxEvidencePerChapter??12)),p=a4(i)||"none",q=(0,m.Mu)(p)?.name||p,r=a9(i),u=ba(i),v=y(i,a.requirement||""),w=v.spec,x=G(h,{requirement:a.requirement,boundFilePaths:u.map(a=>a.filePath),boundFileRoles:a7(u)}),z=u.length>0?u:a8(i,x),A=z.length>0?z:u,B=function(a,b){let c=function(a){let b=[a.name,a.category,a.description,a.outputTitle].join("\n"),c=new Set(["project_overview","construction_scope"]);return/投标|招标|施工|工程|建设|改造/iu.test(b)&&["tender_document","bill_of_quantities","schedule_quality_safety"].forEach(a=>c.add(a)),/图纸|施工|工程|建设|改造/iu.test(b)&&c.add("drawings"),c}(a);return(function(a){let b=new Set(t([a.name,a.description,a.outputTitle,...a.chapters.flatMap(a=>[a.title,a.purpose,...a.requiredFacts||[],...a.queries||[]])].join("\n"),s));return b.add("project_overview"),b.add("construction_scope"),[...b]})(a).map(a=>{let d=b.materialInventory[a]||[],e=c.has(a),f=d.length>0,g=f&&d.length<(e?2:1);return{role:a,required:e,satisfied:f,weak:g,evidenceCount:d.length,filePaths:d.slice(0,20).map(a=>a.filePath),reason:f?`已匹配 ${d.length} 个资料文件`:e?"必需资料角色缺失":"可选资料角色缺失"}})}(i,x),C=function(a){var b;let c=a.resolvedRoles.filter(a=>a.required&&!a.satisfied).map(a=>a.role),d=a.resolvedRoles.filter(a=>a.weak).map(a=>a.role),e=[],f=[];0===a.template.chapters.length&&0===a.spec.chapterRules.length&&"dynamic"!==a.spec.chapterMode&&e.push("模板缺少章节,后台自动规范无法形成稳定结构"),a.template.chapters.some(a=>!a.purpose&&(!a.queries||0===a.queries.length)&&(!a.requiredFacts||0===a.requiredFacts.length))&&f.push("部分模板章节缺少 purpose、queries 或 requiredFacts,生成质量可能不稳定"),a.summary.source.ambiguous&&e.push(a.summary.source.selectionReason),a.summary.fingerprint.confidence<.34&&f.push("项目指纹置信度较低,建议绑定明确的项目资料文件"),a.summary.coverage.materialCompletenessRate<.5&&e.push("项目资料覆盖率过低,无法支撑正式文件生成"),c.length>0&&f.push(`模板必需资料角色未完全满足:${c.join("、")}`),d.length>0&&f.push(`部分资料角色证据较弱:${d.join("、")}`);let g=[a.spec.factFields.length>0,a.spec.chapterRules.length>0||"dynamic"===a.spec.chapterMode,a.spec.gateRules.length>0];return{ready:0===e.length,materialCoverageRate:a.summary.coverage.materialCompletenessRate,roleSatisfactionRate:(b=a.resolvedRoles).length?b.filter(a=>a.satisfied).length/b.length:1,specCompletenessRate:g.filter(Boolean).length/g.length,missingRoles:c,weakRoles:d,blockingIssues:e,warnings:f}}({template:i,spec:w,summary:x,resolvedRoles:B});if(!C.ready)throw Error(`生成准备度不足:${C.blockingIssues.join(";")}`);let D=[["## 后台项目资料摘要",x.extractedSections.projectOverview,`项目指纹:项目名候选 ${x.fingerprint.projectNames.join("、")||"无"};编号 ${x.fingerprint.tenderNos.join("、")||"无"};资料组 ${x.fingerprint.fileGroups.join("、")||"无"};置信度 ${Math.round(100*x.fingerprint.confidence)}%。`,`内容级事实候选:建设/招标单位 ${x.facts.ownerNames?.join("、")||"无"};地点 ${x.facts.locationNames?.join("、")||"无"};工期 ${x.facts.scheduleValues?.join("、")||"无"};质量 ${x.facts.qualityTargets?.join("、")||"无"}。`,x.extractedSections.scopeSummary,x.extractedSections.boqSummary,x.extractedSections.drawingSummary,x.extractedSections.scheduleQualitySafetySummary,x.extractedSections.constraintsAndRisks,`资料满足率:${Math.round(100*x.coverage.materialCompletenessRate)}%`].join("\n"),(b=v.sourceHash,`## 后台自动文档规范
53
53
  规范:${w.name}
54
54
  版本标识:${b}
55
55
  事实字段:${w.factFields.map(a=>`${a.name}${a.required?"(必需)":""}`).join("、")}
56
56
  章节规则:${"fixed"===w.chapterMode?w.chapterRules.map(a=>a.title).join("、"):w.dynamicChapterRule.generationHint}
57
- 校验规则:${w.gateRules.map(a=>a.name).join("、")}`),["## 后台生成准备度",`可生成:${C.ready?"是":"否"}`,`资料覆盖率:${Math.round(100*C.materialCoverageRate)}%`,`资料角色满足率:${Math.round(100*C.roleSatisfactionRate)}%`,`规范完整度:${Math.round(100*C.specCompletenessRate)}%`,C.missingRoles.length?`缺失角色:${C.missingRoles.join("、")}`:"",C.weakRoles.length?`较弱角色:${C.weakRoles.join("、")}`:""].filter(Boolean).join("\n")].filter(Boolean).join("\n\n"),E=[D,bb(r,["chapter_generation","formatting","reference"])].filter(Boolean).join("\n\n"),F=[D,bb(r,["fact_extraction","reference"])].filter(Boolean).join("\n\n"),ac=[D,bb(r,["validation","llm_review","formatting","reference"])].filter(Boolean).join("\n\n"),ad=(function(a){for(let b of a){let a=function(a,b){let c=[];for(let d of[...a.matchAll(/<OUTLINE>([\s\S]*?)<\/OUTLINE>/giu)].map(a=>a[1]||""))for(let a of d.replace(/\r?\n/gu,"\n").replace(/\s+(?=(?:\d{1,2}|[一二三四五六七八九十]{1,3})[、..]\s*)/gu,"\n").split("\n").map(a=>a.replace(/^\s*(?:\d{1,2}|[一二三四五六七八九十]{1,3})[、..]\s*/u,"").replace(/\s+/gu," ").trim()).filter(a=>!(a.length<2||a.length>80||/^(目录|章节|大纲|要求|说明|注意|输出|格式|示例|例如|写法|占位)$/u.test(a)||/^(必须|不得|禁止|需要|请|应|输出|返回|使用|格式|示例)/u.test(a)||/[{}<>]|Markdown|JSON|变量|占位符/u.test(a))))c.push({id:`explicit-${b}-${c.length+1}`,title:a,purpose:`按照${b}中 <OUTLINE> 块明确指定的章节生成:${a},二级小节由模型结合本章内容自行组织且不能为空。`,requiredFacts:[],sections:[],queries:[a]});return aD(c).slice(0,40)}(b.text||"",b.source);if(a.length>=2)return a}return[]})([{text:a.requirement,source:"用户需求"},{text:bb(r,["chapter_generation","formatting","reference"]),source:"提示词角色"}]).filter(a=>{var b;return b=a.title,!aM(g).some(a=>!!a.minLength&&b.length<a.minLength||!!a.maxLength&&b.length>a.maxLength||a.forbiddenPatterns.some(a=>aL(b,a)))});ad.length>=2&&(i={...g,chapters:ad});let ae=a=>[a,e.isAbsolute(a)?e.relative(h,a):e.join(h,a)],af=new Set(A.flatMap(a=>ae(a.filePath))),ag=new Set(Object.values(x.materialInventory).flat().flatMap(a=>ae(a.filePath))),ai=af.size>0?af:ag,ak=(0,m.XB)("file"),al=new Map(A.flatMap(a=>ae(a.filePath).map(b=>[b,a.roleId]))),am=new Map(A.flatMap(a=>ae(a.filePath).map(b=>[b,ak.find(b=>b.id===a.roleId)?.processingType||"reference"]))),an=await l.getProject(h);await an.incrementalIndex(),bD(a.signal);let aq=[],au=[],av=[],aw=[],aA=[],aP=[],aQ=[],aR=function(a,b,c){let d=(0,m.XB)("file"),e=(0,m.XB)("prompt"),f=ah(b),g=new Map;for(let a of c)g.set(a.roleId,[...g.get(a.roleId)||[],a.filePath]);let h=d.filter(a=>g.has(a.id)),i=e.filter(a=>{let b=a.executionType||"reference",c=/technical-review|review-standard|template|章节|目录|评审标准/u.test(`${a.id} ${a.name} ${a.description||""}`);return f.some(b=>b.roleId===a.id)&&(["fact_extraction","reference"].includes(b)||c)});return h.map(a=>{let b=i.map(b=>{let c=f.filter(a=>a.roleId===b.id).map(a=>a.content);return{promptRole:b,texts:c,score:function(a,b,c){let d=aJ(`${a} ${c.join(" ")}`),e=aJ(`${b.id} ${b.name} ${b.processingType||""}`),f=0;for(let a of(/fact|抽取|读取|提取|理解|reference/u.test(d)&&(f+=5),/chapter_generation|章节生成|正文生成/u.test(d)&&(f+=1),[b.id,b.name,b.processingType||""].filter(Boolean)))d.includes(aJ(a))&&(f+=4);return/tender|招标|投标|评审|响应|rule/u.test(e)&&/tender|招标|投标|评审|响应|示范文本|章节|目录|输出要求|编制要求/u.test(d)&&(f+=6),/bill|boq|quantity|清单|工程量/u.test(e)&&/bill|boq|quantity|清单|工程量|项目特征/u.test(d)&&(f+=6),/drawing|cad|图纸|设计/u.test(e)&&/drawing|cad|图纸|设计|文本|标注/u.test(d)&&(f+=6),/material|equipment|brand|材料|设备|品牌/u.test(e)&&/material|equipment|brand|材料|设备|品牌|推荐/u.test(d)&&(f+=6),/schedule|quality|safety|工期|质量|安全|文明/u.test(e)&&/schedule|quality|safety|工期|质量|安全|文明/u.test(d)&&(f+=6),/risk|constraint|重点|难点|约束|风险/u.test(e)&&/risk|constraint|重点|难点|约束|风险/u.test(d)&&(f+=6),f}(b.id,a,c)}}).sort((a,b)=>b.score-a.score),c=b.filter(a=>a.score>5).slice(0,2),d=b.find(a=>{let b=a.promptRole.executionType||"reference";return"fact_extraction"===b||"reference"===b}),e=c.length>0?c:d?[d]:[],h=e.map(a=>a.promptRole.id),j=e.map(a=>a.promptRole.name),k=e.flatMap(a=>a.texts);return{id:`node-${a.id}`,fileRoleId:a.id,fileRoleName:a.name,filePaths:g.get(a.id)||[],processingType:a.processingType,promptRoleIds:h,promptRoleNames:j,promptTexts:k,outputType:function(a,b=[]){let c=aJ(`${a.id} ${a.name} ${a.processingType||""} ${b.join(" ")}`);return/示范文本|招标文件|章节|目录|输出要求|编制要求|template|tender/u.test(c)?"template_requirements":/清单|工程量|bill|boq|quantity/u.test(c)?"bill_facts":/图纸|drawing|cad|设计图|图纸解析/u.test(c)?"drawing_facts":/规范|标准|spec|technical/u.test(c)?"technical_facts":/项目|工程概况|事实|fact/u.test(c)?"project_facts":"reference_facts"}(a,k)}})}(0,r,A),aU=[];for(let b of aR){bD(a.signal);let c=function(a,b,c){let d=[];for(let e of b.filePaths){let f=a.getFileDetail(e);if(f){d.push(...f.chunks.slice(0,120).map(a=>({chapterId:b.id,filePath:f.file.relativePath,score:1,content:a.content,roleId:b.fileRoleId,processingType:b.processingType,sectionTitle:a.sectionTitle,source:"role-node"})));continue}d.push(...at(e,b.fileRoleId,b.processingType,b.id,c))}return as(d,120)}(an,b,h);av.push(...c);let d=await aS(i,b,c);aU.push(d),aQ.push(aV({type:"file_understanding",roleId:b.fileRoleId,promptId:b.promptRoleIds[0],status:c.length>0?"success":"fallback",message:`${b.fileRoleName} 节点已按绑定提示词读取,产出章节建议 ${d.chapters.length} 个、事实 ${d.facts.length} 条`},{subtitle:b.fileRoleName,roleName:b.fileRoleName,promptName:b.promptRoleNames.join("、")||void 0,order:aQ.length})),a.onProgress?.([...aQ])}let aZ=function(a,b){let c=b.filter(a=>"template_requirements"===a.node.outputType).flatMap(a=>a.chapters),d=new Map;for(let b of c.sort((a,b)=>a.order-b.order)){let c=ay(b.title);!(!az(b.title)||aN(c,a))&&(d.has(c)||d.set(c,{...b,title:c}))}return[...d.values()]}(i,aU),a$=[i.name,i.outputTitle,a.requirement,w?.dynamicChapterRule?.generationHint,...w?.dynamicChapterRule?.sourceRoleIds||[]].filter(Boolean).join(" "),a_=w?.chapterMode==="dynamic"&&0===aZ.length?(await l.search(h,a$||i.name,{scope:"project",limit:20,weights:{keyword:.45,vector:.35,rewrite:.65,hybridBonus:.1}})).results.map(a=>({chapterId:"dynamic-planning",filePath:a.filePath,score:a.score,content:a.content,roleId:al.get(a.filePath),processingType:am.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})):[],a1=aF(i,w,a_),a5=function(a,b=2,c=[]){let d=new Set(c.map(a=>ax(a.title)));return a.filter(a=>{let b=ay(a.title);if(!b||!az(a.title)||d.has(b)||aC(b))return!1;let c=`${b}
57
+ 校验规则:${w.gateRules.map(a=>a.name).join("、")}`),["## 后台生成准备度",`可生成:${C.ready?"是":"否"}`,`资料覆盖率:${Math.round(100*C.materialCoverageRate)}%`,`资料角色满足率:${Math.round(100*C.roleSatisfactionRate)}%`,`规范完整度:${Math.round(100*C.specCompletenessRate)}%`,C.missingRoles.length?`缺失角色:${C.missingRoles.join("、")}`:"",C.weakRoles.length?`较弱角色:${C.weakRoles.join("、")}`:""].filter(Boolean).join("\n")].filter(Boolean).join("\n\n"),E=[D,bb(r,["chapter_generation","formatting","reference"])].filter(Boolean).join("\n\n"),F=[D,bb(r,["fact_extraction","reference"])].filter(Boolean).join("\n\n"),ac=[D,bb(r,["validation","llm_review","formatting","reference"])].filter(Boolean).join("\n\n"),ad=(function(a){for(let b of a){let a=function(a,b){let c=[];for(let d of function(a){let b=[...a.matchAll(/<\s*OUTLINE\s*>([\s\S]*?)<\/\s*OUTLINE\s*>/giu)].map(a=>a[1]||"");if(b.length>0)return b;let c=/(?:<\s*)?OUTLINE\s*>?\s*[::]?\s*([\s\S]*?)(?:<\/\s*OUTLINE\s*>|END\s+OUTLINE|$)/iu.exec(a);return c?.[1]?[c[1]]:[]}(a))for(let a of function(a){let b=`(?:第(?:\\d{1,3}|${ax})[章节]|[((]?(?:\\d{1,3}|${ax})[))、..])`;return a.replace(/\r?\n/gu,"\n").replace(RegExp(`\\s+(?=${b}\\s*)`,"gu"),"\n").split("\n").map(a=>a.replace(RegExp(`^\\s*第(?:\\d{1,3}|${ax})[章节]\\s*`,"u"),"").replace(RegExp(`^\\s*[((]?(?:\\d{1,3}|${ax})[))、..]\\s*`,"u"),"").replace(/\s+/gu," ").trim()).filter(a=>!(a.length<2||a.length>80||/^(目录|章节|大纲|要求|说明|注意|输出|格式|示例|例如|写法|占位)$/u.test(a)||/^(必须|不得|禁止|需要|请|应|输出|返回|使用|格式|示例)/u.test(a)||/[{}<>]|Markdown|JSON|变量|占位符/u.test(a)))}(d))c.push({id:`explicit-${b}-${c.length+1}`,title:a,purpose:`按照${b}中 <OUTLINE> 块明确指定的章节生成:${a},二级小节由模型结合本章内容自行组织且不能为空。`,requiredFacts:[],sections:[],queries:[a]});return aD(c).slice(0,80)}(b.text||"",b.source);if(a.length>=2)return a}return[]})([{text:a.requirement,source:"用户需求"},{text:bb(r,["chapter_generation","formatting","reference"]),source:"提示词角色"}]).filter(a=>{var b;return b=a.title,!aM(g).some(a=>!!a.minLength&&b.length<a.minLength||!!a.maxLength&&b.length>a.maxLength||a.forbiddenPatterns.some(a=>aL(b,a)))}),ae=ad.length>=2;ae&&(i={...g,chapters:ad});let af=a=>[a,e.isAbsolute(a)?e.relative(h,a):e.join(h,a)],ag=new Set(A.flatMap(a=>af(a.filePath))),ai=new Set(Object.values(x.materialInventory).flat().flatMap(a=>af(a.filePath))),ak=ag.size>0?ag:ai,al=(0,m.XB)("file"),am=new Map(A.flatMap(a=>af(a.filePath).map(b=>[b,a.roleId]))),an=new Map(A.flatMap(a=>af(a.filePath).map(b=>[b,al.find(b=>b.id===a.roleId)?.processingType||"reference"]))),aq=await l.getProject(h);await aq.incrementalIndex(),bD(a.signal);let au=[],av=[],aw=[],aP=[],aQ=[],aR=[],aU=[],aZ=function(a,b,c){let d=(0,m.XB)("file"),e=(0,m.XB)("prompt"),f=ah(b),g=new Map;for(let a of c)g.set(a.roleId,[...g.get(a.roleId)||[],a.filePath]);let h=d.filter(a=>g.has(a.id)),i=e.filter(a=>{let b=a.executionType||"reference",c=/technical-review|review-standard|template|章节|目录|评审标准/u.test(`${a.id} ${a.name} ${a.description||""}`);return f.some(b=>b.roleId===a.id)&&(["fact_extraction","reference"].includes(b)||c)});return h.map(a=>{let b=i.map(b=>{let c=f.filter(a=>a.roleId===b.id).map(a=>a.content);return{promptRole:b,texts:c,score:function(a,b,c){let d=aJ(`${a} ${c.join(" ")}`),e=aJ(`${b.id} ${b.name} ${b.processingType||""}`),f=0;for(let a of(/fact|抽取|读取|提取|理解|reference/u.test(d)&&(f+=5),/chapter_generation|章节生成|正文生成/u.test(d)&&(f+=1),[b.id,b.name,b.processingType||""].filter(Boolean)))d.includes(aJ(a))&&(f+=4);return/tender|招标|投标|评审|响应|rule/u.test(e)&&/tender|招标|投标|评审|响应|示范文本|章节|目录|输出要求|编制要求/u.test(d)&&(f+=6),/bill|boq|quantity|清单|工程量/u.test(e)&&/bill|boq|quantity|清单|工程量|项目特征/u.test(d)&&(f+=6),/drawing|cad|图纸|设计/u.test(e)&&/drawing|cad|图纸|设计|文本|标注/u.test(d)&&(f+=6),/material|equipment|brand|材料|设备|品牌/u.test(e)&&/material|equipment|brand|材料|设备|品牌|推荐/u.test(d)&&(f+=6),/schedule|quality|safety|工期|质量|安全|文明/u.test(e)&&/schedule|quality|safety|工期|质量|安全|文明/u.test(d)&&(f+=6),/risk|constraint|重点|难点|约束|风险/u.test(e)&&/risk|constraint|重点|难点|约束|风险/u.test(d)&&(f+=6),f}(b.id,a,c)}}).sort((a,b)=>b.score-a.score),c=b.filter(a=>a.score>5).slice(0,2),d=b.find(a=>{let b=a.promptRole.executionType||"reference";return"fact_extraction"===b||"reference"===b}),e=c.length>0?c:d?[d]:[],h=e.map(a=>a.promptRole.id),j=e.map(a=>a.promptRole.name),k=e.flatMap(a=>a.texts);return{id:`node-${a.id}`,fileRoleId:a.id,fileRoleName:a.name,filePaths:g.get(a.id)||[],processingType:a.processingType,promptRoleIds:h,promptRoleNames:j,promptTexts:k,outputType:function(a,b=[]){let c=aJ(`${a.id} ${a.name} ${a.processingType||""} ${b.join(" ")}`);return/示范文本|招标文件|章节|目录|输出要求|编制要求|template|tender/u.test(c)?"template_requirements":/清单|工程量|bill|boq|quantity/u.test(c)?"bill_facts":/图纸|drawing|cad|设计图|图纸解析/u.test(c)?"drawing_facts":/规范|标准|spec|technical/u.test(c)?"technical_facts":/项目|工程概况|事实|fact/u.test(c)?"project_facts":"reference_facts"}(a,k)}})}(0,r,A),a$=[];for(let b of aZ){bD(a.signal);let c=function(a,b,c){let d=[];for(let e of b.filePaths){let f=a.getFileDetail(e);if(f){d.push(...f.chunks.slice(0,120).map(a=>({chapterId:b.id,filePath:f.file.relativePath,score:1,content:a.content,roleId:b.fileRoleId,processingType:b.processingType,sectionTitle:a.sectionTitle,source:"role-node"})));continue}d.push(...at(e,b.fileRoleId,b.processingType,b.id,c))}return as(d,120)}(aq,b,h);aw.push(...c);let d=await aS(i,b,c);a$.push(d),aU.push(aV({type:"file_understanding",roleId:b.fileRoleId,promptId:b.promptRoleIds[0],status:c.length>0?"success":"fallback",message:`${b.fileRoleName} 节点已按绑定提示词读取,产出章节建议 ${d.chapters.length} 个、事实 ${d.facts.length} 条`},{subtitle:b.fileRoleName,roleName:b.fileRoleName,promptName:b.promptRoleNames.join("、")||void 0,order:aU.length})),a.onProgress?.([...aU])}let a_=function(a,b){let c=b.filter(a=>"template_requirements"===a.node.outputType).flatMap(a=>a.chapters),d=new Map;for(let b of c.sort((a,b)=>a.order-b.order)){let c=az(b.title);!(!aA(b.title)||aN(c,a))&&(d.has(c)||d.set(c,{...b,title:c}))}return[...d.values()]}(i,a$),a1=[i.name,i.outputTitle,a.requirement,w?.dynamicChapterRule?.generationHint,...w?.dynamicChapterRule?.sourceRoleIds||[]].filter(Boolean).join(" "),a5=w?.chapterMode==="dynamic"&&0===a_.length?(await l.search(h,a1||i.name,{scope:"project",limit:20,weights:{keyword:.45,vector:.35,rewrite:.65,hybridBonus:.1}})).results.map(a=>({chapterId:"dynamic-planning",filePath:a.filePath,score:a.score,content:a.content,roleId:am.get(a.filePath),processingType:an.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})):[],a6=aF(i,w,a5),bc=function(a,b=2,c=[]){let d=new Set(c.map(a=>ay(a.title)));return a.filter(a=>{let b=az(a.title);if(!b||!aA(a.title)||d.has(b)||aC(b))return!1;let c=`${b}
58
58
  ${a.sourceRequirement}
59
59
  ${a.requiredContents.join("、")}
60
- ${a.writingRules.join("、")}`;return!/(总结|汇总|依据|清单|公告|范围)/u.test(b)&&/缺口|补充|未覆盖|遗漏|查漏补缺|专项|必要|深化|保障/u.test(c)}).slice(0,Math.max(0,b)).map((a,b)=>{let c=ay(a.title);return{id:aK(a.id,`dynamic-${b+1}`),title:c,purpose:[`动态补充章节只能用于查漏补缺,补充评审标准未覆盖但本项目必须响应的专项内容;不得作为资料总结、清单依据或招标范围汇总。`,a.sourceRequirement,...a.writingRules].filter(Boolean).join("\n").slice(0,1200),requiredFacts:[...new Set([...a.requiredContents,...a.evidenceNeeds])],queries:[...new Set([c,...a.requiredContents,...a.evidenceNeeds,...a.requirements.flatMap(a=>[a.title,a.requirementText,...a.evidenceNeeds])].filter(Boolean))],pinnedEvidenceFilePaths:[]}})}(aZ,aE(w),a1),a6=aD([...a1,...a5]),bc=[i.name,i.outputTitle,a.requirement,...a6.flatMap(a=>[a.title,a.purpose])].filter(Boolean).join(" "),bd=(0,k.Hh)(bc,8,h),be=bd.length>0?bd.map((a,b)=>`${b+1}. [${a.type}/${a.importance}] ${a.content}${a.source?`(来源:${a.source})`:""}`).join("\n"):"",bf=aT(aU.flatMap(a=>a.evidence)),bw=0===bf.length?"":["## 招标公告项目基本信息强制落位","以下字段来自招标文件示范文本中的招标公告,必须优先用于第一章项目基本信息表和正文,不得用“见招标公告/见招标文件”替代。","| 字段 | 值 |","|---|---|",...bf.map(a=>`| ${a.key} | ${a.value.replace(/\|/gu,",")} |`)].join("\n"),bE=aV({type:"context_recall",roleId:"project-memory",status:bd.length>0?"success":"skipped",message:bd.length>0?`已注入 ${bd.length} 条短期/长期上下文`:"未召回可用项目上下文"},{subtitle:"项目记忆"});for(let b of(aQ.push(aV({type:"role_binding",roleId:p,status:"success",message:`已绑定 ${A.length} 个文件角色、${r.length} 个提示词角色;后台自动规范 ${w.factFields.length} 个事实字段;资料覆盖率 ${Math.round(100*C.materialCoverageRate)}%`},{subtitle:q,roleName:q})),aQ.push(aV({type:"validation",roleId:"document-readiness",status:C.ready?"success":"failed",message:`生成准备度:资料 ${Math.round(100*C.materialCoverageRate)}%,资料角色 ${Math.round(100*C.roleSatisfactionRate)}%,规范 ${Math.round(100*C.specCompletenessRate)}%;${x.source.selectionReason}`},{subtitle:"生成准备度检查"})),aQ.push(bE),a.onProgress?.([...aQ]),a6)){bD(a.signal);try{let c=[],d=function(a,b){return b.find(b=>b.id===a.id||b.title===a.title)}(b,aZ),e=d?[d.title,...d.requiredContents,...d.evidenceNeeds,...d.requirements.flatMap(a=>[a.title,a.requirementText,...a.requiredContents,...a.evidenceNeeds])].filter(Boolean):[];for(let a of[...new Set([...b.queries.length>0?b.queries:[i.name,i.outputTitle,b.title],...e])]){let d=await l.search(h,a,{scope:"project",limit:Math.max(n,ai.size>0?30:n),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});c.push(...d.results.filter(a=>0===ai.size||ae(a.filePath).some(a=>ai.has(a))).map(a=>({chapterId:b.id,filePath:a.filePath,score:a.score,content:a.content,roleId:al.get(a.filePath),processingType:am.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let f=new Set(b.pinnedEvidenceFilePaths||[]),g=aW(aU,b,d);for(let a of(c.push(...g.flatMap(({artifact:a})=>a.evidence.slice(0,8).map(a=>({...a,chapterId:b.id,source:"role-node"})))),new Set([...f]))){let d=f.has(a),e=an.getFileDetail(a);if(!e){c.push(...at(a,al.get(a),am.get(a),b.id,h).map(a=>({...a,source:d?"pinned-evidence":a.source})));continue}c.push(...e.chunks.slice(0,Math.max(n,20)).map(a=>({chapterId:b.id,filePath:e.file.relativePath,score:1,content:a.content,roleId:al.get(e.file.relativePath),processingType:am.get(e.file.relativePath),sectionTitle:a.sectionTitle,source:d?"pinned-evidence":"bound-file"})))}let j=as(c,n),k=as(c,120);av.push(...j);let m=function(a,b=220){let c=[],d=new Set;for(let e of a)for(let a of function(a){let b=X(a),c=b.split(/[。;;\n]/u).map(a=>a.trim()).filter(a=>a.length>=12);return c.length?c:b?[b]:[]}(e.content)){if(!function(a){return[J,K,L,M,N,O,P].some(b=>(function(a,b){b.lastIndex=0;let c=b.test(a);return b.lastIndex=0,c})(a,b))||[...Q,...R,...S,...T,...U,...V].some(b=>a.includes(b))}(a))continue;let f=X(a).slice(0,420),g=f.replace(/\d+/gu,"#").slice(0,180);if(d.has(g))continue;d.add(g);let h=function(a){return I.find(([,b])=>b.test(a))?.[0]||"通用工程"}(f),i=Z(f,J).slice(0,8),j=Z(f,K).slice(0,8),k=Z(f,L).slice(0,8),l=Z(f,M).slice(0,6),m=Z(f,N).slice(0,8),n=Z(f,O).slice(0,8),o=Z(f,P).slice(0,5),p=$(f,Q),q=$(f,R),r=$(f,S),s=$(f,T),t=function(a){return U.some(b=>a.text.includes(b))?"dangerous_work":V.some(b=>a.text.includes(b))?"subdivision_work":a.costValues.length?"cost_commitment":a.scheduleValues.length?a.riskControl.length?"risk_response":"schedule_milestone":a.frequencyValues.length?a.inspection.length?"inspection_ratio":"management_frequency":a.resourceValues.length?"resource_allocation":a.quantities.length?"engineering_quantity":a.standards.length?"standard_requirement":"technical_parameter"}({text:f,parameters:i,quantities:j,scheduleValues:k,costValues:l,frequencyValues:m,resourceValues:n,standards:o,inspection:q,riskControl:s});if(c.push({id:`tech-${c.length+1}`,category:t,discipline:h,workItem:function(a,b){return["砌筑","构造柱","防水","闭水试验","地砖","墙砖","吊顶","涂料","给水","排水","消防水","消防电","电气","风管","排烟","油烟净化","厨房设备","明厨亮灶","隔油池","临时用电","动火作业"].find(b=>a.includes(b))||b}(f,h),specification:i.join("、")||void 0,parameter:i.join("、")||void 0,quantities:j,scheduleValues:k,costValues:l,frequencyValues:m,resourceValues:n,commitmentValues:[...k,...l,...m].slice(0,10),process:p,qualityControl:r,inspection:q,standard:o,riskControl:s,sourceRole:e.roleId,sourceFile:e.filePath,text:f,confidence:Math.min(1,.42+.06*i.length+.05*j.length+.05*k.length+.05*l.length+.05*m.length+.07*o.length+.04*p.length+.04*q.length)}),c.length>=b)return c}return c}(k,160),o=function(a,b,c=24){let d=b.filter(b=>(function(a,b){let c=`${b.title} ${b.purpose} ${(b.sections||[]).join(" ")} ${(b.requiredFacts||[]).join(" ")} ${(b.queries||[]).join(" ")}`;return/施工方法|主要.*方法|工艺|分项|分部分项/u.test(c)?/土建|砌筑|防水|装饰|给排水|电气|消防|暖通|厨房|设备|排烟/u.test(a.discipline+a.workItem)||["technical_parameter","subdivision_work","dangerous_work"].includes(a.category):/质量|工期|进度/u.test(c)?a.qualityControl?.length||a.inspection?.length||a.standard?.length||["schedule_milestone","inspection_ratio","management_frequency","cost_commitment"].includes(a.category):/人.*材.*机|资源|材料|机械/u.test(c)?["resource_allocation","engineering_quantity"].includes(a.category)||/材料|设备|机械|厨房设备|暖通|电气|给排水/u.test(a.discipline+a.workItem+a.text):/安全|文明|应急|危大|危险性较大|专项/u.test(c)?a.riskControl?.length||["risk_response","management_frequency","cost_commitment","dangerous_work"].includes(a.category)||/临时用电|动火|高处|消防|应急|扬尘|有限空间|拆除/u.test(a.text):/重点|难点/u.test(c)?a.confidence>=.65:[a.discipline,a.workItem].some(a=>c.includes(a))})(b,a)).sort((a,b)=>b.confidence-a.confidence).slice(0,c);return{chapterId:a.id,chapterTitle:a.title,facts:d}}(b,m);au.push(o);let p=0===o.facts.length?"":["本章必须优先落位以下工程量化事实和技术事实。不得用“按设计要求、按规范要求、加强管理”等空泛表述替代已列出的工程量、工期节点、频次、人员资源、金额承诺、参数、工艺、试验和验收指标。","","| 序号 | 类型 | 专业 | 分项 | 参数/规格 | 工程量/工期/频次/资源/金额 | 工艺动作 | 试验验收 | 规范标准 | 可写入正文的事实 |","|---|---|---|---|---|---|---|---|---|---|",...o.facts.map((a,b)=>{let c=[...a.quantities||[],...a.scheduleValues||[],...a.costValues||[],...a.frequencyValues||[],...a.resourceValues||[]].join("、");return`| ${b+1} | ${a.category} | ${a.discipline} | ${a.workItem} | ${a.parameter||a.specification||""} | ${c} | ${(a.process||[]).join("、")} | ${(a.inspection||[]).join("、")} | ${(a.standard||[]).join("、")} | ${a.text.replace(/\|/gu,",").slice(0,220)} |`}),"","强制写作要求:","- 主要施工方法类章节按“适用部位/材料参数/工艺流程/操作要点/质量验收/安全与成品保护”展开。","- 本章事实表中出现的工程数量、涉及学校数量、工期节点、检查频次、人员资源、设备数量、金额/违约承诺、数字、单位、强度、厚度、管径、试验时间、验收指标和规范编号,应自然写入正文。","- 如果资料中已有具体参数,禁止只写“满足设计要求”“按规范施工”。","- 每个主要分项至少写出施工动作、检查动作和验收动作。","- 识别到分部分项、危大工程、危险性较大工程、有限空间、动火、高处、临电、拆除等风险线索时,必须写入对应章节的风险识别、专项方案、交底、旁站检查、验收放行和应急闭环。"].join("\n"),q=function(a){let b=aa(a.facts).slice(0,18);return 0===b.length?"":["## 本章量化事实覆盖矩阵","以下对象、部位、工程量、工期、频次、资源或金额来自项目资料。正文必须逐项覆盖;同一施工方案涉及多处对象时,不得只写其中一处或把多个工程量合并成一个笼统数量。","| 序号 | 施工对象/部位/分项 | 量化值 | 参数/规格 | 来源角色 | 来源文件 | 原始事实 |","|---|---|---|---|---|---|---|",...b.map((a,b)=>{let c=[...a.quantities||[],...a.scheduleValues||[],...a.frequencyValues||[],...a.resourceValues||[],...a.costValues||[]].join("、");return`| ${b+1} | ${_(a)} | ${c} | ${a.parameter||a.specification||""} | ${a.sourceRole||""} | ${a.sourceFile||""} | ${a.text.replace(/\|/gu,",").slice(0,180)} |`}),"","覆盖要求:","- 日期、数量、规格、工程量、资源数量和工期节点只能使用资料中的值或由资料明确推导的值;没有依据时不得编造。","- 如果同一工艺适用于多个部位、区域、学校、片区或分项,应使用表格或分项段落分别说明适用范围、工程量和控制要点。","- 资料中存在多个来源值或口径不一致时,应保持审慎表述并提示需按招标文件、答疑、图纸或清单优先级复核,不得随意选择一个数值。"].join("\n")}(o),s=b.requiredFacts.filter(a=>!j.some(b=>aG(b,a)));for(let a of(0===j.length&&aw.push(`${b.title}:未检索到明确资料依据`),s))aw.push(`${b.title}:${a} 未检索到明确依据`);aQ.some(a=>"knowledge_retrieval"===a.type)||(aQ.push(aV({type:"knowledge_retrieval",roleId:"knowledge-base",status:av.length>0?"success":"fallback",message:`已检索/绑定 ${av.length} 条证据`})),a.onProgress?.([...aQ])),bD(a.signal);let t=aX(aU,i),u=function(a,b,c){let d=aW(a,b,c),e=c?[`章节来源要求:${c.sourceRequirement}`,c.requiredContents.length?`必须包含:${c.requiredContents.join("、")}`:"",c.writingRules.length?`写作规范:${c.writingRules.join("、")}`:"",c.evidenceNeeds.length?`需要证据:${c.evidenceNeeds.join("、")}`:"",c.requirements.length?`要求项:
60
+ ${a.writingRules.join("、")}`;return!/(总结|汇总|依据|清单|公告|范围)/u.test(b)&&/缺口|补充|未覆盖|遗漏|查漏补缺|专项|必要|深化|保障/u.test(c)}).slice(0,Math.max(0,b)).map((a,b)=>{let c=az(a.title);return{id:aK(a.id,`dynamic-${b+1}`),title:c,purpose:[`动态补充章节只能用于查漏补缺,补充评审标准未覆盖但本项目必须响应的专项内容;不得作为资料总结、清单依据或招标范围汇总。`,a.sourceRequirement,...a.writingRules].filter(Boolean).join("\n").slice(0,1200),requiredFacts:[...new Set([...a.requiredContents,...a.evidenceNeeds])],queries:[...new Set([c,...a.requiredContents,...a.evidenceNeeds,...a.requirements.flatMap(a=>[a.title,a.requirementText,...a.evidenceNeeds])].filter(Boolean))],pinnedEvidenceFilePaths:[]}})}(a_,aE(w),a6),bd=aD([...a6,...bc]),be=[i.name,i.outputTitle,a.requirement,...bd.flatMap(a=>[a.title,a.purpose])].filter(Boolean).join(" "),bf=(0,k.Hh)(be,8,h),bw=bf.length>0?bf.map((a,b)=>`${b+1}. [${a.type}/${a.importance}] ${a.content}${a.source?`(来源:${a.source})`:""}`).join("\n"):"",bE=aT(a$.flatMap(a=>a.evidence)),bF=0===bE.length?"":["## 招标公告项目基本信息强制落位","以下字段来自招标文件示范文本中的招标公告,必须优先用于第一章项目基本信息表和正文,不得用“见招标公告/见招标文件”替代。","| 字段 | 值 |","|---|---|",...bE.map(a=>`| ${a.key} | ${a.value.replace(/\|/gu,",")} |`)].join("\n"),bG=aV({type:"context_recall",roleId:"project-memory",status:bf.length>0?"success":"skipped",message:bf.length>0?`已注入 ${bf.length} 条短期/长期上下文`:"未召回可用项目上下文"},{subtitle:"项目记忆"}),bH=ae?`;识别到 OUTLINE 章节 ${ad.length} 个`:";未识别到有效 OUTLINE,将使用模板/资料兜底章节";for(let b of(aU.push(aV({type:"role_binding",roleId:p,status:"success",message:`已绑定 ${A.length} 个文件角色、${r.length} 个提示词角色;后台自动规范 ${w.factFields.length} 个事实字段;资料覆盖率 ${Math.round(100*C.materialCoverageRate)}%${bH}`},{subtitle:q,roleName:q})),aU.push(aV({type:"validation",roleId:"document-readiness",status:C.ready?"success":"failed",message:`生成准备度:资料 ${Math.round(100*C.materialCoverageRate)}%,资料角色 ${Math.round(100*C.roleSatisfactionRate)}%,规范 ${Math.round(100*C.specCompletenessRate)}%;${x.source.selectionReason}`},{subtitle:"生成准备度检查"})),aU.push(bG),a.onProgress?.([...aU]),bd)){bD(a.signal);try{let c=[],d=function(a,b){return b.find(b=>b.id===a.id||b.title===a.title)}(b,a_),e=d?[d.title,...d.requiredContents,...d.evidenceNeeds,...d.requirements.flatMap(a=>[a.title,a.requirementText,...a.requiredContents,...a.evidenceNeeds])].filter(Boolean):[];for(let a of[...new Set([...b.queries.length>0?b.queries:[i.name,i.outputTitle,b.title],...e])]){let d=await l.search(h,a,{scope:"project",limit:Math.max(n,ak.size>0?30:n),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});c.push(...d.results.filter(a=>0===ak.size||af(a.filePath).some(a=>ak.has(a))).map(a=>({chapterId:b.id,filePath:a.filePath,score:a.score,content:a.content,roleId:am.get(a.filePath),processingType:an.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let f=new Set(b.pinnedEvidenceFilePaths||[]),g=aW(a$,b,d);for(let a of(c.push(...g.flatMap(({artifact:a})=>a.evidence.slice(0,8).map(a=>({...a,chapterId:b.id,source:"role-node"})))),new Set([...f]))){let d=f.has(a),e=aq.getFileDetail(a);if(!e){c.push(...at(a,am.get(a),an.get(a),b.id,h).map(a=>({...a,source:d?"pinned-evidence":a.source})));continue}c.push(...e.chunks.slice(0,Math.max(n,20)).map(a=>({chapterId:b.id,filePath:e.file.relativePath,score:1,content:a.content,roleId:am.get(e.file.relativePath),processingType:an.get(e.file.relativePath),sectionTitle:a.sectionTitle,source:d?"pinned-evidence":"bound-file"})))}let j=as(c,n),k=as(c,120);aw.push(...j);let m=function(a,b=220){let c=[],d=new Set;for(let e of a)for(let a of function(a){let b=X(a),c=b.split(/[。;;\n]/u).map(a=>a.trim()).filter(a=>a.length>=12);return c.length?c:b?[b]:[]}(e.content)){if(!function(a){return[J,K,L,M,N,O,P].some(b=>(function(a,b){b.lastIndex=0;let c=b.test(a);return b.lastIndex=0,c})(a,b))||[...Q,...R,...S,...T,...U,...V].some(b=>a.includes(b))}(a))continue;let f=X(a).slice(0,420),g=f.replace(/\d+/gu,"#").slice(0,180);if(d.has(g))continue;d.add(g);let h=function(a){return I.find(([,b])=>b.test(a))?.[0]||"通用工程"}(f),i=Z(f,J).slice(0,8),j=Z(f,K).slice(0,8),k=Z(f,L).slice(0,8),l=Z(f,M).slice(0,6),m=Z(f,N).slice(0,8),n=Z(f,O).slice(0,8),o=Z(f,P).slice(0,5),p=$(f,Q),q=$(f,R),r=$(f,S),s=$(f,T),t=function(a){return U.some(b=>a.text.includes(b))?"dangerous_work":V.some(b=>a.text.includes(b))?"subdivision_work":a.costValues.length?"cost_commitment":a.scheduleValues.length?a.riskControl.length?"risk_response":"schedule_milestone":a.frequencyValues.length?a.inspection.length?"inspection_ratio":"management_frequency":a.resourceValues.length?"resource_allocation":a.quantities.length?"engineering_quantity":a.standards.length?"standard_requirement":"technical_parameter"}({text:f,parameters:i,quantities:j,scheduleValues:k,costValues:l,frequencyValues:m,resourceValues:n,standards:o,inspection:q,riskControl:s});if(c.push({id:`tech-${c.length+1}`,category:t,discipline:h,workItem:function(a,b){return["砌筑","构造柱","防水","闭水试验","地砖","墙砖","吊顶","涂料","给水","排水","消防水","消防电","电气","风管","排烟","油烟净化","厨房设备","明厨亮灶","隔油池","临时用电","动火作业"].find(b=>a.includes(b))||b}(f,h),specification:i.join("、")||void 0,parameter:i.join("、")||void 0,quantities:j,scheduleValues:k,costValues:l,frequencyValues:m,resourceValues:n,commitmentValues:[...k,...l,...m].slice(0,10),process:p,qualityControl:r,inspection:q,standard:o,riskControl:s,sourceRole:e.roleId,sourceFile:e.filePath,text:f,confidence:Math.min(1,.42+.06*i.length+.05*j.length+.05*k.length+.05*l.length+.05*m.length+.07*o.length+.04*p.length+.04*q.length)}),c.length>=b)return c}return c}(k,160),o=function(a,b,c=24){let d=b.filter(b=>(function(a,b){let c=`${b.title} ${b.purpose} ${(b.sections||[]).join(" ")} ${(b.requiredFacts||[]).join(" ")} ${(b.queries||[]).join(" ")}`;return/施工方法|主要.*方法|工艺|分项|分部分项/u.test(c)?/土建|砌筑|防水|装饰|给排水|电气|消防|暖通|厨房|设备|排烟/u.test(a.discipline+a.workItem)||["technical_parameter","subdivision_work","dangerous_work"].includes(a.category):/质量|工期|进度/u.test(c)?a.qualityControl?.length||a.inspection?.length||a.standard?.length||["schedule_milestone","inspection_ratio","management_frequency","cost_commitment"].includes(a.category):/人.*材.*机|资源|材料|机械/u.test(c)?["resource_allocation","engineering_quantity"].includes(a.category)||/材料|设备|机械|厨房设备|暖通|电气|给排水/u.test(a.discipline+a.workItem+a.text):/安全|文明|应急|危大|危险性较大|专项/u.test(c)?a.riskControl?.length||["risk_response","management_frequency","cost_commitment","dangerous_work"].includes(a.category)||/临时用电|动火|高处|消防|应急|扬尘|有限空间|拆除/u.test(a.text):/重点|难点/u.test(c)?a.confidence>=.65:[a.discipline,a.workItem].some(a=>c.includes(a))})(b,a)).sort((a,b)=>b.confidence-a.confidence).slice(0,c);return{chapterId:a.id,chapterTitle:a.title,facts:d}}(b,m);av.push(o);let p=0===o.facts.length?"":["本章必须优先落位以下工程量化事实和技术事实。不得用“按设计要求、按规范要求、加强管理”等空泛表述替代已列出的工程量、工期节点、频次、人员资源、金额承诺、参数、工艺、试验和验收指标。","","| 序号 | 类型 | 专业 | 分项 | 参数/规格 | 工程量/工期/频次/资源/金额 | 工艺动作 | 试验验收 | 规范标准 | 可写入正文的事实 |","|---|---|---|---|---|---|---|---|---|---|",...o.facts.map((a,b)=>{let c=[...a.quantities||[],...a.scheduleValues||[],...a.costValues||[],...a.frequencyValues||[],...a.resourceValues||[]].join("、");return`| ${b+1} | ${a.category} | ${a.discipline} | ${a.workItem} | ${a.parameter||a.specification||""} | ${c} | ${(a.process||[]).join("、")} | ${(a.inspection||[]).join("、")} | ${(a.standard||[]).join("、")} | ${a.text.replace(/\|/gu,",").slice(0,220)} |`}),"","强制写作要求:","- 主要施工方法类章节按“适用部位/材料参数/工艺流程/操作要点/质量验收/安全与成品保护”展开。","- 本章事实表中出现的工程数量、涉及学校数量、工期节点、检查频次、人员资源、设备数量、金额/违约承诺、数字、单位、强度、厚度、管径、试验时间、验收指标和规范编号,应自然写入正文。","- 如果资料中已有具体参数,禁止只写“满足设计要求”“按规范施工”。","- 每个主要分项至少写出施工动作、检查动作和验收动作。","- 识别到分部分项、危大工程、危险性较大工程、有限空间、动火、高处、临电、拆除等风险线索时,必须写入对应章节的风险识别、专项方案、交底、旁站检查、验收放行和应急闭环。"].join("\n"),q=function(a){let b=aa(a.facts).slice(0,18);return 0===b.length?"":["## 本章量化事实覆盖矩阵","以下对象、部位、工程量、工期、频次、资源或金额来自项目资料。正文必须逐项覆盖;同一施工方案涉及多处对象时,不得只写其中一处或把多个工程量合并成一个笼统数量。","| 序号 | 施工对象/部位/分项 | 量化值 | 参数/规格 | 来源角色 | 来源文件 | 原始事实 |","|---|---|---|---|---|---|---|",...b.map((a,b)=>{let c=[...a.quantities||[],...a.scheduleValues||[],...a.frequencyValues||[],...a.resourceValues||[],...a.costValues||[]].join("、");return`| ${b+1} | ${_(a)} | ${c} | ${a.parameter||a.specification||""} | ${a.sourceRole||""} | ${a.sourceFile||""} | ${a.text.replace(/\|/gu,",").slice(0,180)} |`}),"","覆盖要求:","- 日期、数量、规格、工程量、资源数量和工期节点只能使用资料中的值或由资料明确推导的值;没有依据时不得编造。","- 如果同一工艺适用于多个部位、区域、学校、片区或分项,应使用表格或分项段落分别说明适用范围、工程量和控制要点。","- 资料中存在多个来源值或口径不一致时,应保持审慎表述并提示需按招标文件、答疑、图纸或清单优先级复核,不得随意选择一个数值。"].join("\n")}(o),s=b.requiredFacts.filter(a=>!j.some(b=>aG(b,a)));for(let a of(0===j.length&&aP.push(`${b.title}:未检索到明确资料依据`),s))aP.push(`${b.title}:${a} 未检索到明确依据`);aU.some(a=>"knowledge_retrieval"===a.type)||(aU.push(aV({type:"knowledge_retrieval",roleId:"knowledge-base",status:aw.length>0?"success":"fallback",message:`已检索/绑定 ${aw.length} 条证据`})),a.onProgress?.([...aU])),bD(a.signal);let t=aX(a$,i),u=function(a,b,c){let d=aW(a,b,c),e=c?[`章节来源要求:${c.sourceRequirement}`,c.requiredContents.length?`必须包含:${c.requiredContents.join("、")}`:"",c.writingRules.length?`写作规范:${c.writingRules.join("、")}`:"",c.evidenceNeeds.length?`需要证据:${c.evidenceNeeds.join("、")}`:"",c.requirements.length?`要求项:
61
61
  ${c.requirements.map(a=>`- ${a.title}:${a.requirementText||a.requiredContents.join("、")}`).join("\n")}`:""].filter(Boolean).join("\n"):"",f=new Map;for(let{artifact:a,fact:b}of d){let c=`${a.node.fileRoleName}(${a.node.outputType})`;f.set(c,[...f.get(c)||[],`- ${b.key}:${ar(aO(b.value))}`])}let g=[...f.entries()].map(([a,b])=>`### ${a}
62
62
  ${b.slice(0,18).map(a=>a.replace(ap,"").replace(ao,"")).join("\n")}`).join("\n\n");return[e?`【本章章节计划】
63
63
  ${e}`:"",g?`【角色节点结构化产物】
64
- ${g}`:""].filter(Boolean).join("\n\n")}(aU,b,d),v=w?.chapterRules.find(a=>a.id===b.id||a.title===b.title),x=d?.minWords||v?.minWords||w?.dynamicChapterRule.minWordsPerChapter||1200,y=0===aq.length,z=await Promise.race([bt(i,b,j,s,E,be,a.requirement,u,{forbidDrawingImages:t,minWords:x,technicalFactContext:p,coverageMatrixContext:q,tenderAnnouncementContext:y?bw:""}),new Promise(a=>setTimeout(()=>a(null),12e4))]);if(bD(a.signal),!z){let c=j.slice(0,80),d=u.slice(0,12e3);z=await Promise.race([bt(i,b,c,s,E,be,a.requirement,d,{forbidDrawingImages:t,minWords:Math.max(900,Math.floor(.75*x)),technicalFactContext:p.slice(0,12e3),coverageMatrixContext:q.slice(0,8e3),tenderAnnouncementContext:y?bw.slice(0,8e3):""}),new Promise(a=>setTimeout(()=>a(null),12e4))])}if(bD(a.signal),!z)throw Error(`${b.title} 大模型未返回有效章节正文`);let A=z,B=b.sections?.length?b.sections:bv(A);aP.push(aV({type:"chapter_generation",roleId:"chapter_generation",promptId:r.find(a=>"chapter_generation"===a.roleId)?.promptId,status:"success",message:`${ax(b.title)} 已由大模型生成`},{subtitle:ax(b.title),order:aP.length})),aq.push({id:b.id,title:b.title,content:A,evidence:j,missingFacts:s,sections:B})}catch(c){if(a.signal?.aborted)throw c;console.error(`[gen] chapter ${b.title} failed:`,c),aA.push(`${b.title}:${c instanceof Error?c.message:"生成失败"}`),aP.push(aV({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${ax(b.title)} 生成失败`},{subtitle:ax(b.title),order:aP.length}))}aQ.some(a=>"chapter_generation"===a.type&&a.message===aP[aP.length-1]?.message)||aQ.push(aP[aP.length-1]),a.onProgress?.([...aQ])}if(0===aq.length)throw Error(`章节生成未完成:${aA.slice(0,6).join(";")||"没有生成任何有效章节"}`);bD(a.signal);let bF={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{bF=await bg(h,av)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fileUnderstanding failed:",b)}for(let b of(bD(a.signal),bF.notes))av.push({chapterId:"multimodal-file-understanding",filePath:"多模态模型文件理解结果",score:1,content:b,roleId:"multimodal-files",processingType:"reference",source:"multimodal"});let bG=function(a,b,c){let d={};for(let e of aH(a,c)){let a=b.find(a=>aI(a,e));a&&(d[e.name]=`${a.content.replace(/\s+/gu," ").slice(0,180)}(来源:${a.filePath},角色:${a.roleId||"未标注"})`)}return d}(i,av,w);for(let a of aU)for(let b of a.facts)bG[b.key]=`${aO(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let bH=function(a,b,c){let d=aH(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(!aI(b,a))continue;let d=b.content.match(c)||[void 0,b.content.replace(/\s+/gu," ").slice(0,220)],f=d?.[1]?.trim();f&&!e.some(b=>b.fieldId===a.id&&b.value===f)&&e.push({key:a.name,fieldId:a.id,fieldName:a.name,value:f.slice(0,300),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}(av,i,w),bI={facts:[],stages:[]};try{bI=await bh(av,F,i,w)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fact extraction failed:",b)}bD(a.signal);let bJ=aU.flatMap(a=>a.facts.map(a=>({key:a.key,value:aO(a.value),sourceFile:a.sourceFile,roleId:a.roleId,confidence:.9}))),bK=[...bf.map(a=>({key:a.key,value:a.value,sourceFile:a.sourceFile,roleId:"tender_announcement",confidence:.95})),...bJ,...bH,...bI.facts];for(let a of(aQ.some(a=>a.type===bF.stage.type)||aQ.push(bF.stage),bI.stages))aQ.some(b=>b.type===a.type)||aQ.push(a);a.onProgress?.([...aQ]);let bL=function(a){let b=[],c=new Set;for(let g of a.filter(a=>"table"===a.processingType)){if(c.has(g.filePath))continue;c.add(g.filePath);let a=(0,j.aY)(),h=e.isAbsolute(g.filePath)?g.filePath:d.existsSync(e.join(a,"knowledgeBase",g.filePath))?e.join(a,"knowledgeBase",g.filePath):e.join(a,g.filePath),i=e.extname(g.filePath).toLowerCase();if(d.existsSync(h)&&[".xlsx",".xls",".csv"].includes(i))try{let a=f.readFile(h,{cellDates:!0,sheetStubs:!1});for(let c of a.SheetNames){let d=a.Sheets[c],e=f.utils.sheet_to_json(d,{header:1,raw:!1,defval:""}).map(a=>a.map(a=>String(a).trim())).filter(a=>a.some(Boolean));if(e.length<2)continue;let h=e.findIndex(a=>a.filter(Boolean).length>=2);if(h<0)continue;let i=e[h].filter(Boolean),j=e.slice(h+1).map(a=>a.slice(0,i.length)).filter(a=>a.some(Boolean));0!==j.length&&b.push({tableType:g.roleId||"table",sheet:c,headers:i,rows:j.slice(0,200),sourceFile:g.filePath,sourceRange:d["!ref"]})}continue}catch{}let k=g.content.split("\n").map(a=>a.trim()).filter(Boolean).filter(a=>a.includes("|")||a.includes(" ")||a.includes(","));if(k.length<2)continue;let l=k[0].includes("|")?"|":k[0].includes(" ")?" ":",",m=k.map(a=>a.split(l).map(a=>a.trim()).filter(Boolean)).filter(a=>a.length>1);m.length<2||b.push({tableType:g.roleId||"table",headers:m[0],rows:m.slice(1,80),sourceFile:g.filePath,sourceRange:g.sectionTitle})}return b}(av),bM=av.filter(a=>"pinned-evidence"===a.source).length,bN=av.filter(a=>"pinned-evidence"!==a.source&&"bound-file"!==a.source).length,bO=aV({type:"reference",roleId:"quality-enhancement",status:av.length>0?"success":"skipped",message:`增强贡献:知识库证据 ${av.length} 条,人工确认/固定证据 ${bM} 条,项目上下文 ${bd.length} 条,自动检索证据 ${bN} 条`},{subtitle:"证据与上下文增强"});for(let b of(aQ.push(bO),a.onProgress?.([...aQ]),bK))bG[b.key]=`${aO(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let bP=new Map;for(let a of av)bP.set(a.filePath,(bP.get(a.filePath)??0)+1);let bQ=[...bP.entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),bR=function(a,b=[],c=[],d){let e=b=>a.filter(a=>b.some(b=>a.key.includes(b))),f=b=>a.filter(a=>a.processingType===b||a.roleId.includes(b)),g=a.filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|MPa|kPa|℃|%|GB|JGJ|CJJ|台|套|个|项|㎡/iu.test(`${a.key} ${a.value}`)),h=a.filter(a=>"table"===a.processingType||/bill|boq|清单|工程量/u.test(`${a.roleId} ${a.sourceFile}`));return{project:a,schedule:e(["工期","开工","竣工","节点"]),quality:e(["质量"]),safety:e(["安全"]),resources:e(["劳动力","材料","机械","设备"]),tables:b,drawings:f("drawing"),bills:h,preciseFacts:g,rules:f("rule"),specifications:f("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),missing:[...new Set(c)],conflicts:function(a,b){let c=b?.factFields.map(a=>a.name)||[...new Set(a.map(a=>a.key))],d=[];for(let b of c){let c=a.filter(a=>a.key===b||a.fieldName===b),e=new Map;for(let a of c){let b=aO(a.value).replace(/\s+/gu,"").replace(/[,。,.;;::]/gu,"").toLowerCase();b&&e.set(b,[...e.get(b)||[],a])}if(e.size>1){let a=[...e.values()].map(a=>`${a[0].value}(${a.map(a=>a.sourceFile).join("、")})`).join(" vs ");d.push(`事实冲突:${b} 存在多个来源值:${a}`)}}return d}(a,d)}}(bK,bL,aw,w),bS=aq.map(a=>{let b=w.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=[...new Set([...a.missingFacts||[],...b?.requiredFactIds||[]].filter(Boolean))],d=c.filter(b=>!a.missingFacts.includes(b)),e=c.filter(b=>a.missingFacts.includes(b)),f=+(a.evidence.length>0),g=c.length?d.length/c.length:1;return{chapterId:a.id,title:a.title,requiredFacts:c,coveredFacts:d,missingFacts:e,evidenceCount:a.evidence.length,readinessRate:Math.min(1,.7*g+.3*f)}}),bT=function(a,b=[],c){let d=[],e=[];for(let b of a)0===b.evidence.length&&d.push(`${b.title} 未检索到资料证据`),b.content.length<80&&d.push(`${b.title} 内容较短,建议人工补充或重新生成`);c&&a.length<c.chapters.length&&e.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===a9(c).length&&e.push("模板未绑定任何提示词");let f=new Set(b.map(a=>a.roleId));for(let a of["project_fact","rule"])c?.fileBindings?.some(b=>b.roleId===a)&&!f.has(a)&&d.push(`${a} 角色未抽取到结构化事实`);return{passed:0===e.length,warnings:d,errors:e}}(aq,bK,i);bT.warnings.push(...C.warnings),bT.errors.push(...C.blockingIssues);let bU=function(a,b,c){let d=[...a.errors.map(a=>({level:"error",message:a,suggestion:"请补充配置或资料后重新生成。"})),...a.warnings.map(a=>({level:"warning",message:a,suggestion:"建议人工确认或补充对应资料。"}))];return c.some(a=>a.content.includes("资料未提供"))&&d.push({level:"warning",message:"存在资料未提供章节",suggestion:"请检查项目角色配置中的文件绑定和顺序。"}),b.conflicts.length>0&&d.push(...b.conflicts.map(a=>({level:"error",message:a}))),d}(bT,bR,aq);bU.push(...function(a){let b=[];for(let c of a)0===c.evidenceCount?b.push({level:"error",message:`章节缺少证据:${c.title}`,suggestion:"请补充对应项目资料或调整模板章节检索词。"}):c.readinessRate<.5&&b.push({level:"warning",message:`章节事实覆盖率较低:${c.title} ${Math.round(100*c.readinessRate)}%`,suggestion:"建议补充章节 requiredFacts 或项目资料证据。"});return b}(bS));let bV=aP.filter(a=>"chapter_generation"===a.type&&"fallback"===a.status).length,bW=aP.filter(a=>"chapter_generation"===a.type&&"failed"===a.status).length;bV>0&&bU.push({level:"error",message:`章节生成存在兜底:${bV} 章`,suggestion:"请检查模型调用、提示词长度或证据负载后重新生成。"}),bW>0&&bU.push({level:"warning",message:`部分章节生成失败:${bW} 章`,suggestion:aA.slice(0,6).join(";")||"请检查模型调用或资料配置后重新生成失败章节。"});let bX=bU.filter(a=>"error"===a.level&&bi(a)).length,bY=[aV({type:"role_binding",roleId:p,status:A.length>0?"success":"fallback",message:`已绑定 ${A.length} 个文件角色、${r.length} 个提示词角色;后台自动规范 ${w.factFields.length} 个事实字段`},{subtitle:q,roleName:q}),aV({type:"validation",roleId:"document-readiness",status:C.ready?"success":"failed",message:`生成准备度:资料 ${Math.round(100*C.materialCoverageRate)}%,资料角色 ${Math.round(100*C.roleSatisfactionRate)}%,规范 ${Math.round(100*C.specCompletenessRate)}%;${x.source.selectionReason}`},{subtitle:"生成准备度检查"}),bE,aV({type:"knowledge_retrieval",roleId:"knowledge-base",status:av.length>0?"success":"fallback",message:`已检索/绑定 ${av.length} 条证据`}),bO,aV(bF.stage),...bI.stages.map(a=>aV(a)),...aP,aV({type:"validation",roleId:"document-workflow",status:bX>0?"failed":"success",message:`阻断 ${bX},错误 ${bT.errors.length},警告 ${bT.warnings.length}`},{subtitle:"最终规范校验"}),aV({type:"formatting",roleId:"document-workflow",status:"success",message:"已生成正式排版 Markdown"}),aV({type:"export_ready",roleId:"document-workflow",status:bX>0?"failed":"success",message:bX>0?"导出门禁存在阻断项":"已准备好导出 Markdown/HTML/DOCX/PDF"})],bZ={templateId:i.id,templateName:i.name,title:i.outputTitle,requirement:a.requirement||"",exportSettings:i.exportSettings,generationSettings:i.generationSettings,facts:bG,structuredFacts:bK,factsModel:bR,chapters:aq,sources:bQ,missingItems:[...new Set(aw)],validation:bT,validationIssues:bU,executionStages:bY,exportGate:{passed:!0,blockingIssues:[],checklist:[]},assets:[],generatedAt:Date.now()},b$=bC(bZ);bD(a.signal);let b_=await bu({template:i,spec:w,markdown:b$,evidence:av,promptTexts:ac||E,projectContext:be,requirement:a.requirement});bD(a.signal);let b0=aX(aU,i),b1=bx(aY(b_.markdown===b$?bC({...bZ,validationIssues:bU,exportGate:bZ.exportGate,executionStages:bY}):b_.markdown,b0)),b2=bB(b1,i).map(a=>a.message),b3=br(b1).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),b4=bs(b1,i).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),b5=bq(b1,bR).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),b6=ab({assignments:au,markdown:b1}).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),b7=bp(b1).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),b8=bm(b1).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),b9=bn(b1).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),ca=bo(aq).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cb=by(b1).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cc=[...a2(b1,aq,aZ,aU,b0),...b2,...b3,...b4,...b5,...b6,...b7,...b8,...b9,...ca,...cb],cd=await a3({markdown:b1,template:i,plan:aZ,artifacts:aU,promptTexts:E,requirement:a.requirement,issues:cc,forbidDrawingImages:b0});bD(a.signal);let ce=cd.stage?[...bY,b_.stage,cd.stage]:[...bY,b_.stage],cf=aY(cd.markdown,b0),cg=aq.map((a,b)=>{if(a.sections?.length)return a.sections;let c=cf.search(RegExp(`^##\\s+${bA(aB(b,a.title))}\\s*$`,"mu"));if(c<0)return[];let d=cf.slice(c),e=d.slice(1).search(/^##\s+/mu);return bv(e>=0?d.slice(0,e+1):d)}),ch=aq.map((a,b)=>({...a,sections:cg[b]||a.sections||[]})),ci=bx(a0(function(a,b){let c=function(a,b){let c=a;b.forEach((a,b)=>{let d=ax(a.title),e=RegExp(`^##\\s+(?:第[一二三四五六七八九十百千万\\d]+章\\s*)?${bA(d)}\\s*$`,"mu");c=e.test(c)?c.replace(e,`## ${aB(b,a.title)}`):c});let d=c.split(/\r?\n/u),e=-1,f=0;return d.map(a=>{if(/^##\s+第[一二三四五六七八九十百千万\d]+章\s+/u.test(a.trim()))return e+=1,f=0,a;let b=/^###\s+(?:(\d+)\.(\d+)\s+)?(.+)$/u.exec(a.trim());return e>=0&&b?(f+=1,`### ${e+1}.${f} ${ax(b[3]||"")}`):a}).join("\n")}(a,b),d=bz(b);if(/^##\s+目录\s*$/mu.test(c))return c.replace(/^##\s+目录\s*$[\s\S]*?(?=\n<div class="page-break"><\/div>|\n##\s+)/mu,d.trim());let e='<div class="page-break"></div>',f=c.indexOf(e);if(f>=0){let a=f+e.length;return`${c.slice(0,a)}
64
+ ${g}`:""].filter(Boolean).join("\n\n")}(a$,b,d),v=w?.chapterRules.find(a=>a.id===b.id||a.title===b.title),x=d?.minWords||v?.minWords||w?.dynamicChapterRule.minWordsPerChapter||1200,y=0===au.length,z=await Promise.race([bt(i,b,j,s,E,bw,a.requirement,u,{forbidDrawingImages:t,minWords:x,technicalFactContext:p,coverageMatrixContext:q,tenderAnnouncementContext:y?bF:""}),new Promise(a=>setTimeout(()=>a(null),12e4))]);if(bD(a.signal),!z){let c=j.slice(0,80),d=u.slice(0,12e3);z=await Promise.race([bt(i,b,c,s,E,bw,a.requirement,d,{forbidDrawingImages:t,minWords:Math.max(900,Math.floor(.75*x)),technicalFactContext:p.slice(0,12e3),coverageMatrixContext:q.slice(0,8e3),tenderAnnouncementContext:y?bF.slice(0,8e3):""}),new Promise(a=>setTimeout(()=>a(null),12e4))])}if(bD(a.signal),!z)throw Error(`${b.title} 大模型未返回有效章节正文`);let A=z,B=b.sections?.length?b.sections:bv(A);aR.push(aV({type:"chapter_generation",roleId:"chapter_generation",promptId:r.find(a=>"chapter_generation"===a.roleId)?.promptId,status:"success",message:`${ay(b.title)} 已由大模型生成`},{subtitle:ay(b.title),order:aR.length})),au.push({id:b.id,title:b.title,content:A,evidence:j,missingFacts:s,sections:B})}catch(c){if(a.signal?.aborted)throw c;console.error(`[gen] chapter ${b.title} failed:`,c),aQ.push(`${b.title}:${c instanceof Error?c.message:"生成失败"}`),aR.push(aV({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${ay(b.title)} 生成失败`},{subtitle:ay(b.title),order:aR.length}))}aU.some(a=>"chapter_generation"===a.type&&a.message===aR[aR.length-1]?.message)||aU.push(aR[aR.length-1]),a.onProgress?.([...aU])}if(0===au.length)throw Error(`章节生成未完成:${aQ.slice(0,6).join(";")||"没有生成任何有效章节"}`);bD(a.signal);let bI={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{bI=await bg(h,aw)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fileUnderstanding failed:",b)}for(let b of(bD(a.signal),bI.notes))aw.push({chapterId:"multimodal-file-understanding",filePath:"多模态模型文件理解结果",score:1,content:b,roleId:"multimodal-files",processingType:"reference",source:"multimodal"});let bJ=function(a,b,c){let d={};for(let e of aH(a,c)){let a=b.find(a=>aI(a,e));a&&(d[e.name]=`${a.content.replace(/\s+/gu," ").slice(0,180)}(来源:${a.filePath},角色:${a.roleId||"未标注"})`)}return d}(i,aw,w);for(let a of a$)for(let b of a.facts)bJ[b.key]=`${aO(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let bK=function(a,b,c){let d=aH(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(!aI(b,a))continue;let d=b.content.match(c)||[void 0,b.content.replace(/\s+/gu," ").slice(0,220)],f=d?.[1]?.trim();f&&!e.some(b=>b.fieldId===a.id&&b.value===f)&&e.push({key:a.name,fieldId:a.id,fieldName:a.name,value:f.slice(0,300),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}(aw,i,w),bL={facts:[],stages:[]};try{bL=await bh(aw,F,i,w)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fact extraction failed:",b)}bD(a.signal);let bM=a$.flatMap(a=>a.facts.map(a=>({key:a.key,value:aO(a.value),sourceFile:a.sourceFile,roleId:a.roleId,confidence:.9}))),bN=[...bE.map(a=>({key:a.key,value:a.value,sourceFile:a.sourceFile,roleId:"tender_announcement",confidence:.95})),...bM,...bK,...bL.facts];for(let a of(aU.some(a=>a.type===bI.stage.type)||aU.push(bI.stage),bL.stages))aU.some(b=>b.type===a.type)||aU.push(a);a.onProgress?.([...aU]);let bO=function(a){let b=[],c=new Set;for(let g of a.filter(a=>"table"===a.processingType)){if(c.has(g.filePath))continue;c.add(g.filePath);let a=(0,j.aY)(),h=e.isAbsolute(g.filePath)?g.filePath:d.existsSync(e.join(a,"knowledgeBase",g.filePath))?e.join(a,"knowledgeBase",g.filePath):e.join(a,g.filePath),i=e.extname(g.filePath).toLowerCase();if(d.existsSync(h)&&[".xlsx",".xls",".csv"].includes(i))try{let a=f.readFile(h,{cellDates:!0,sheetStubs:!1});for(let c of a.SheetNames){let d=a.Sheets[c],e=f.utils.sheet_to_json(d,{header:1,raw:!1,defval:""}).map(a=>a.map(a=>String(a).trim())).filter(a=>a.some(Boolean));if(e.length<2)continue;let h=e.findIndex(a=>a.filter(Boolean).length>=2);if(h<0)continue;let i=e[h].filter(Boolean),j=e.slice(h+1).map(a=>a.slice(0,i.length)).filter(a=>a.some(Boolean));0!==j.length&&b.push({tableType:g.roleId||"table",sheet:c,headers:i,rows:j.slice(0,200),sourceFile:g.filePath,sourceRange:d["!ref"]})}continue}catch{}let k=g.content.split("\n").map(a=>a.trim()).filter(Boolean).filter(a=>a.includes("|")||a.includes(" ")||a.includes(","));if(k.length<2)continue;let l=k[0].includes("|")?"|":k[0].includes(" ")?" ":",",m=k.map(a=>a.split(l).map(a=>a.trim()).filter(Boolean)).filter(a=>a.length>1);m.length<2||b.push({tableType:g.roleId||"table",headers:m[0],rows:m.slice(1,80),sourceFile:g.filePath,sourceRange:g.sectionTitle})}return b}(aw),bP=aw.filter(a=>"pinned-evidence"===a.source).length,bQ=aw.filter(a=>"pinned-evidence"!==a.source&&"bound-file"!==a.source).length,bR=aV({type:"reference",roleId:"quality-enhancement",status:aw.length>0?"success":"skipped",message:`增强贡献:知识库证据 ${aw.length} 条,人工确认/固定证据 ${bP} 条,项目上下文 ${bf.length} 条,自动检索证据 ${bQ} 条`},{subtitle:"证据与上下文增强"});for(let b of(aU.push(bR),a.onProgress?.([...aU]),bN))bJ[b.key]=`${aO(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let bS=new Map;for(let a of aw)bS.set(a.filePath,(bS.get(a.filePath)??0)+1);let bT=[...bS.entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),bU=function(a,b=[],c=[],d){let e=b=>a.filter(a=>b.some(b=>a.key.includes(b))),f=b=>a.filter(a=>a.processingType===b||a.roleId.includes(b)),g=a.filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|MPa|kPa|℃|%|GB|JGJ|CJJ|台|套|个|项|㎡/iu.test(`${a.key} ${a.value}`)),h=a.filter(a=>"table"===a.processingType||/bill|boq|清单|工程量/u.test(`${a.roleId} ${a.sourceFile}`));return{project:a,schedule:e(["工期","开工","竣工","节点"]),quality:e(["质量"]),safety:e(["安全"]),resources:e(["劳动力","材料","机械","设备"]),tables:b,drawings:f("drawing"),bills:h,preciseFacts:g,rules:f("rule"),specifications:f("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),missing:[...new Set(c)],conflicts:function(a,b){let c=b?.factFields.map(a=>a.name)||[...new Set(a.map(a=>a.key))],d=[];for(let b of c){let c=a.filter(a=>a.key===b||a.fieldName===b),e=new Map;for(let a of c){let b=aO(a.value).replace(/\s+/gu,"").replace(/[,。,.;;::]/gu,"").toLowerCase();b&&e.set(b,[...e.get(b)||[],a])}if(e.size>1){let a=[...e.values()].map(a=>`${a[0].value}(${a.map(a=>a.sourceFile).join("、")})`).join(" vs ");d.push(`事实冲突:${b} 存在多个来源值:${a}`)}}return d}(a,d)}}(bN,bO,aP,w),bV=au.map(a=>{let b=w.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=[...new Set([...a.missingFacts||[],...b?.requiredFactIds||[]].filter(Boolean))],d=c.filter(b=>!a.missingFacts.includes(b)),e=c.filter(b=>a.missingFacts.includes(b)),f=+(a.evidence.length>0),g=c.length?d.length/c.length:1;return{chapterId:a.id,title:a.title,requiredFacts:c,coveredFacts:d,missingFacts:e,evidenceCount:a.evidence.length,readinessRate:Math.min(1,.7*g+.3*f)}}),bW=function(a,b=[],c){let d=[],e=[];for(let b of a)0===b.evidence.length&&d.push(`${b.title} 未检索到资料证据`),b.content.length<80&&d.push(`${b.title} 内容较短,建议人工补充或重新生成`);c&&a.length<c.chapters.length&&e.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===a9(c).length&&e.push("模板未绑定任何提示词");let f=new Set(b.map(a=>a.roleId));for(let a of["project_fact","rule"])c?.fileBindings?.some(b=>b.roleId===a)&&!f.has(a)&&d.push(`${a} 角色未抽取到结构化事实`);return{passed:0===e.length,warnings:d,errors:e}}(au,bN,i);bW.warnings.push(...C.warnings),bW.errors.push(...C.blockingIssues);let bX=function(a,b,c){let d=[...a.errors.map(a=>({level:"error",message:a,suggestion:"请补充配置或资料后重新生成。"})),...a.warnings.map(a=>({level:"warning",message:a,suggestion:"建议人工确认或补充对应资料。"}))];return c.some(a=>a.content.includes("资料未提供"))&&d.push({level:"warning",message:"存在资料未提供章节",suggestion:"请检查项目角色配置中的文件绑定和顺序。"}),b.conflicts.length>0&&d.push(...b.conflicts.map(a=>({level:"error",message:a}))),d}(bW,bU,au);bX.push(...function(a){let b=[];for(let c of a)0===c.evidenceCount?b.push({level:"error",message:`章节缺少证据:${c.title}`,suggestion:"请补充对应项目资料或调整模板章节检索词。"}):c.readinessRate<.5&&b.push({level:"warning",message:`章节事实覆盖率较低:${c.title} ${Math.round(100*c.readinessRate)}%`,suggestion:"建议补充章节 requiredFacts 或项目资料证据。"});return b}(bV));let bY=aR.filter(a=>"chapter_generation"===a.type&&"fallback"===a.status).length,bZ=aR.filter(a=>"chapter_generation"===a.type&&"failed"===a.status).length;bY>0&&bX.push({level:"error",message:`章节生成存在兜底:${bY} 章`,suggestion:"请检查模型调用、提示词长度或证据负载后重新生成。"}),bZ>0&&bX.push({level:"warning",message:`部分章节生成失败:${bZ} 章`,suggestion:aQ.slice(0,6).join(";")||"请检查模型调用或资料配置后重新生成失败章节。"});let b$=bX.filter(a=>"error"===a.level&&bi(a)).length,b_=[aV({type:"role_binding",roleId:p,status:A.length>0?"success":"fallback",message:`已绑定 ${A.length} 个文件角色、${r.length} 个提示词角色;后台自动规范 ${w.factFields.length} 个事实字段`},{subtitle:q,roleName:q}),aV({type:"validation",roleId:"document-readiness",status:C.ready?"success":"failed",message:`生成准备度:资料 ${Math.round(100*C.materialCoverageRate)}%,资料角色 ${Math.round(100*C.roleSatisfactionRate)}%,规范 ${Math.round(100*C.specCompletenessRate)}%;${x.source.selectionReason}`},{subtitle:"生成准备度检查"}),bG,aV({type:"knowledge_retrieval",roleId:"knowledge-base",status:aw.length>0?"success":"fallback",message:`已检索/绑定 ${aw.length} 条证据`}),bR,aV(bI.stage),...bL.stages.map(a=>aV(a)),...aR,aV({type:"validation",roleId:"document-workflow",status:b$>0?"failed":"success",message:`阻断 ${b$},错误 ${bW.errors.length},警告 ${bW.warnings.length}`},{subtitle:"最终规范校验"}),aV({type:"formatting",roleId:"document-workflow",status:"success",message:"已生成正式排版 Markdown"}),aV({type:"export_ready",roleId:"document-workflow",status:b$>0?"failed":"success",message:b$>0?"导出门禁存在阻断项":"已准备好导出 Markdown/HTML/DOCX/PDF"})],b0={templateId:i.id,templateName:i.name,title:i.outputTitle,requirement:a.requirement||"",exportSettings:i.exportSettings,generationSettings:i.generationSettings,facts:bJ,structuredFacts:bN,factsModel:bU,chapters:au,sources:bT,missingItems:[...new Set(aP)],validation:bW,validationIssues:bX,executionStages:b_,exportGate:{passed:!0,blockingIssues:[],checklist:[]},assets:[],generatedAt:Date.now()},b1=bC(b0);bD(a.signal);let b2=await bu({template:i,spec:w,markdown:b1,evidence:aw,promptTexts:ac||E,projectContext:bw,requirement:a.requirement});bD(a.signal);let b3=aX(a$,i),b4=bx(aY(b2.markdown===b1?bC({...b0,validationIssues:bX,exportGate:b0.exportGate,executionStages:b_}):b2.markdown,b3)),b5=bB(b4,i).map(a=>a.message),b6=br(b4).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),b7=bs(b4,i).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),b8=bq(b4,bU).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),b9=ab({assignments:av,markdown:b4}).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),ca=bp(b4).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cb=bm(b4).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cc=bn(b4).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cd=bo(au).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),ce=by(b4).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cf=[...a2(b4,au,a_,a$,b3),...b5,...b6,...b7,...b8,...b9,...ca,...cb,...cc,...cd,...ce],cg=await a3({markdown:b4,template:i,plan:a_,artifacts:a$,promptTexts:E,requirement:a.requirement,issues:cf,forbidDrawingImages:b3});bD(a.signal);let ch=cg.stage?[...b_,b2.stage,cg.stage]:[...b_,b2.stage],ci=aY(cg.markdown,b3),cj=au.map((a,b)=>{if(a.sections?.length)return a.sections;let c=ci.search(RegExp(`^##\\s+${bA(aB(b,a.title))}\\s*$`,"mu"));if(c<0)return[];let d=ci.slice(c),e=d.slice(1).search(/^##\s+/mu);return bv(e>=0?d.slice(0,e+1):d)}),ck=au.map((a,b)=>({...a,sections:cj[b]||a.sections||[]})),cl=bx(a0(function(a,b){let c=function(a,b){let c=a;b.forEach((a,b)=>{let d=ay(a.title),e=RegExp(`^##\\s+(?:第[一二三四五六七八九十百千万\\d]+章\\s*)?${bA(d)}\\s*$`,"mu");c=e.test(c)?c.replace(e,`## ${aB(b,a.title)}`):c});let d=c.split(/\r?\n/u),e=-1,f=0;return d.map(a=>{if(/^##\s+第[一二三四五六七八九十百千万\d]+章\s+/u.test(a.trim()))return e+=1,f=0,a;let b=/^###\s+(?:(\d+)\.(\d+)\s+)?(.+)$/u.exec(a.trim());return e>=0&&b?(f+=1,`### ${e+1}.${f} ${ay(b[3]||"")}`):a}).join("\n")}(a,b),d=bz(b);if(/^##\s+目录\s*$/mu.test(c))return c.replace(/^##\s+目录\s*$[\s\S]*?(?=\n<div class="page-break"><\/div>|\n##\s+)/mu,d.trim());let e='<div class="page-break"></div>',f=c.indexOf(e);if(f>=0){let a=f+e.length;return`${c.slice(0,a)}
65
65
 
66
66
  ${d}
67
67
 
@@ -71,9 +71,9 @@ ${c.slice(a).trimStart()}`}return`${d}
71
71
 
72
72
  <div class="page-break"></div>
73
73
 
74
- ${c}`}(cf,ch))),cj=[...a2(b1,aq,aZ,aU,b0),...b2];for(let a of((bU=function(a,b,c,d,e,f,g){if(!a)return b;let h=[...b],i=[...c.project,...c.schedule,...c.quality,...c.safety,...c.resources,...Object.values(c.schemaFacts).flat()],j=new Set([...i.map(a=>a.key),...i.map(a=>a.fieldName).filter(Boolean),...c.tables.flatMap(a=>[...a.headers,...a.rows.flat()])]),k=new Set(d.map(a=>a.title));for(let b of a.factFields.filter(a=>a.required)){let a=c.schemaFacts[b.id]||[],e=d.some(a=>!a.missingFacts.includes(b.name)&&a.evidence.some(a=>aI(a,b))),f=!b.sourceRoleIds?.length||a.some(a=>b.sourceRoleIds?.includes(a.roleId))||d.some(a=>a.evidence.some(a=>aI(a,b)));0!==a.length||j.has(b.name)||e||h.push({level:"warning",message:`必需事实缺失:${b.name}`,suggestion:b.extractionHint||"请补充资料或调整事实字段配置。"}),f||h.push({level:"warning",message:`必需事实来源角色不匹配:${b.name}`,suggestion:`请确认该事实来自角色:${b.sourceRoleIds?.join("、")}`})}if("fixed"===a.chapterMode)for(let b of a.chapterRules.filter(a=>a.required)){k.has(b.title)||h.push({level:"error",message:`必需章节缺失:${b.title}`,suggestion:"请在模板或规范包章节规则中补齐章节。"});let a=d.find(a=>a.title===b.title);a&&b.minWords&&a.content.length<b.minWords&&h.push({level:"warning",message:`章节内容低于最低字数:${b.title}`,suggestion:`建议不少于 ${b.minWords} 字。`})}else{let b=a.dynamicChapterRule;if(b.minChapters&&d.length<b.minChapters&&h.push({level:"warning",message:`动态章节数量低于最少章节:${d.length}/${b.minChapters}`,suggestion:"请补充资料或降低最少章节数。"}),b.maxChapters&&d.length>b.maxChapters&&h.push({level:"warning",message:`动态章节数量超过最多章节:${d.length}/${b.maxChapters}`,suggestion:"请收紧来源文件角色或降低召回范围。"}),b.minWordsPerChapter)for(let a of d)a.content.length<b.minWordsPerChapter&&h.push({level:"warning",message:`动态章节内容低于最低字数:${a.title}`,suggestion:`建议不少于 ${b.minWordsPerChapter} 字。`})}let l=bk(e),m=[...e.matchAll(/!\[([^\]]*)\]\(([^)]+)\)/gu)].map(a=>({alt:a[1]||"",url:a[2]||"",index:a.index??0})),n=bj(e);for(let b of a.gateRules){let a=b.level,o=b.evaluator?b.evaluator:"required_fact"===b.type?{subject:"fact",operator:"exists",target:b.target}:"required_chapter"===b.type?{subject:"chapter",operator:"exists",target:b.target}:"required_file_role"===b.type?{subject:"file_role",operator:"exists",target:b.target}:"required_prompt_role"===b.type?{subject:"prompt_role",operator:"exists",target:b.target}:"source_required"===b.type?{subject:"source",operator:"all_have_source"}:"forbidden_text"===b.type?{subject:"document",operator:"not_contains",value:b.value}:"min_chapter_length"===b.type?{subject:"chapter",operator:"min_length",target:b.target,min:Number(b.value)||void 0}:"table_required"===b.type?{subject:"table",operator:"min_count",min:1}:{subject:"document",operator:"contains",value:b.value||b.target},p=o.target||b.target||"",q=o.value||b.value||p,r=o.min||Number(b.value)||1,s=d.find(a=>a.title===p),t="chapter"===o.subject&&s?s.content:e,u=q?function(a){try{return RegExp(a,"iu")}catch{return}}(q):void 0;"fact"===o.subject&&"exists"===o.operator&&p&&!j.has(p)&&h.push({level:a,message:bl(b,`缺少事实 ${p}`)}),"chapter"===o.subject&&"exists"===o.operator&&p&&!k.has(p)&&h.push({level:a,message:bl(b,`缺少章节 ${p}`)}),"file_role"===o.subject&&"exists"===o.operator&&p&&!f.some(a=>a.roleId===p)&&h.push({level:a,message:bl(b,`缺少文件角色 ${p}`)}),"prompt_role"===o.subject&&"exists"===o.operator&&p&&!g.some(a=>a.roleId===p)&&h.push({level:a,message:bl(b,`缺少提示词角色 ${p}`)}),"document"===o.subject&&"contains"===o.operator&&q&&!e.includes(q)&&h.push({level:a,message:bl(b,`全文必须包含 ${q}`)}),"document"===o.subject&&"not_contains"===o.operator&&q&&e.includes(q)&&h.push({level:a,message:bl(b,`出现禁用文本 ${q}`)}),"document"!==o.subject&&"chapter"!==o.subject||"regex_match"!==o.operator||!q||u&&u.test(t)||h.push({level:a,message:bl(b,`未匹配正则 ${q}`)}),("document"===o.subject||"chapter"===o.subject)&&"regex_not_match"===o.operator&&u?.test(t)&&h.push({level:a,message:bl(b,`匹配到禁止正则 ${q}`)}),"chapter"===o.subject&&"contains"===o.operator&&p&&q&&(!s||!s.content.includes(q))&&h.push({level:a,message:bl(b,`章节 ${p} 必须包含 ${q}`)}),"chapter"===o.subject&&"not_contains"===o.operator&&s?.content.includes(q)&&h.push({level:a,message:bl(b,`章节 ${p} 出现禁用文本 ${q}`)}),"chapter"===o.subject&&"min_length"===o.operator&&p&&(!s||s.content.length<r)&&h.push({level:a,message:bl(b,`章节 ${p} 低于 ${r} 字`)}),"table"===o.subject&&"min_count"===o.operator&&c.tables.length+l.length<r&&h.push({level:a,message:bl(b,`表格数量少于 ${r}`)}),"table"===o.subject&&"table_explanation_required"===o.operator&&l.some(a=>e.indexOf(a)>=0&&e.slice(e.indexOf(a)+a.length,e.indexOf(a)+a.length+120).trim().length<10)&&h.push({level:a,message:bl(b,"存在缺少说明文字的表格")}),"image"===o.subject&&"min_count"===o.operator&&m.length<r&&h.push({level:a,message:bl(b,`图片数量少于 ${r}`)}),"page"===o.subject&&"min_count"===o.operator&&n<r&&h.push({level:a,message:bl(b,`预计页数 ${n} 少于 ${r}`)}),"page"===o.subject&&"max_count"===o.operator&&n>r&&h.push({level:a,message:bl(b,`预计页数 ${n} 超过 ${r}`)}),"image"===o.subject&&"image_caption_required"===o.operator&&m.some(a=>!a.alt&&e.slice(a.index+a.url.length,a.index+a.url.length+120).trim().length<10)&&h.push({level:a,message:bl(b,"存在缺少说明文字的图片")}),"source"===o.subject&&"all_have_source"===o.operator&&i.some(a=>!a.sourceFile)&&h.push({level:a,message:bl(b,"存在无来源事实")}),"source"===o.subject&&"min_count"===o.operator&&new Set(i.map(a=>a.sourceFile).filter(Boolean)).size<r&&h.push({level:a,message:bl(b,`来源数量少于 ${r}`)})}return h}(w,[...bU,...cj.map(a=>({level:"warning",message:a}))],bR,ch,ci,A,r)).push(...function(a){let b=[],c=a.markdown||"";for(let d of a.spec.factFields.filter(a=>a.required))!c.includes(d.name)&&d.name.length>=3&&b.push({level:"warning",message:`后台自动规范提示:正文可能未显式覆盖“${d.name}”`,suggestion:"建议检查对应章节是否已自然表达该事实。"});let d=a.summary.facts.projectName;d&&"当前知识库项目"!==d&&!c.includes(d)&&b.push({level:"warning",message:"正文未明显体现项目名称",suggestion:"建议在工程概况或首页标题中体现当前项目名称。"});let e=a.summary.facts.tenderNo;for(let a of(e&&!c.includes(e)&&b.push({level:"info",message:"正文未体现招标/项目编号",suggestion:"如正式文件需要编号,请在工程概况中补充。"}),["知识库证据","文件角色","提示词角色","文档规范包","规范包","后台自动规范","资料未提供","未检索到"]))c.includes(a)&&b.push({level:"error",message:`正文包含后台流程话术:${a}`,suggestion:"请重新生成或在审查阶段删除后台流程描述。"});return b}({markdown:ci,spec:w,summary:x})),bU.push(...function(a){let b=[];for(let c of[{label:"项目名称",keys:["项目名称","工程名称"]},{label:"招标编号",keys:["招标编号","项目编号"]},{label:"工期要求",keys:["工期","进度节点"]},{label:"质量要求",keys:["质量"]}]){let d=new Map;for(let b of function(a,b){return a.filter(a=>b.some(b=>a.key.includes(b)||a.fieldName?.includes(b))).map(a=>({value:String(a.value),source:a.sourceFile}))}(a.facts,c.keys)){let a=b.value.replace(/\s+/gu,"").replace(/[,。,.;;::]/gu,"").toLowerCase();a&&!(a.length<2)&&d.set(a,[...d.get(a)||[],b])}if(d.size>1){let a=[...d.values()].map(a=>`${a[0].value}(${a.map(a=>a.source).filter(Boolean).join("、")||"未知来源"})`).join(" vs ");b.push({level:"error",message:`事实一致性冲突:${c.label} 存在多个值:${a}`,suggestion:"请确认当前项目资料组,或在模板绑定中只绑定当前项目资料。"})}}let c=a.summary.facts.projectName;return c&&"当前知识库项目"!==c&&!a.markdown.includes(c)&&b.push({level:"error",message:`正文未包含当前项目名称:${c}`,suggestion:"请重新生成,确保标题或工程概况体现当前项目名称。"}),b}({markdown:ci,facts:bK,summary:x})),bU.push(...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)&&H(a,e)&&c.push({level:"error",message:`正文疑似混入其他项目名称:${e}`,suggestion:"请检查项目资料组选择、模板绑定文件和知识库证据范围。"});let e=b.fingerprint.tenderNos,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}(ci,x)),bU.push(...function(a){let b=[],c=(0,o.V)().technicalDetailGate,d=`${a.template.name} ${a.template.category} ${a.template.outputTitle}`;if(!(c?.templateMatchers?.length?c.templateMatchers:["施工组织设计","施工方案","技术标.*施工","施工.*技术标"]).some(a=>RegExp(a,"iu").test(d)))return b;let e=a.finalMarkdown||a.chapters.map(a=>`${a.title}
75
- ${a.content}`).join("\n\n"),f=Z(a.chapters.filter(a=>/施工方法|主要.*方法|工艺/u.test(a.title)).map(a=>a.content).join("\n")||e,J).length,g=[K,L,M,N,O].reduce((a,b)=>a+Z(e,b).length,0),h=Z(e,P).length,i=Q.filter(a=>e.includes(a)).length,j=R.filter(a=>e.includes(a)).length,k=(c?.genericPhrases?.length?c.genericPhrases:W).reduce((a,b)=>a+(e.match(RegExp(b,"gu"))?.length||0),0),l=a.assignments.flatMap(a=>a.facts),m=Y(l.flatMap(a=>{var b;return Y([...Z(b=`${a.parameter||""} ${a.specification||""} ${a.text}`,J),...Z(b,K),...Z(b,L),...Z(b,M),...Z(b,N),...Z(b,O),...Z(b,P)].map(a=>a.replace(/\s+/gu,"")))})).slice(0,120),n=m.filter(a=>e.replace(/\s+/gu,"").includes(a)),p=m.length?n.length/m.length:1,q=c?.minAssignedFactCountForBlocking??12;return l.length>=q&&p<(c?.minTechnicalFactUsageRate??.35)&&b.push({level:"error",message:`工程技术事实使用率不足:${Math.round(100*p)}%`,suggestion:"请把清单、图纸、设计说明中的材料规格、尺寸参数、试验验收和规范编号写入对应章节。"}),f<(c?.minMethodParameterCount??18)&&l.length>=q&&b.push({level:"error",message:`施工方法参数密度不足:仅识别 ${f} 个数字/规格参数`,suggestion:"主要施工方法应补充材料强度、厚度、尺寸、管径、试验时间、压力、偏差和数量等可核查参数。"}),g<(c?.minQuantitativeFactCount??20)&&l.length>=q&&b.push({level:"error",message:`工程量化事实密度不足:仅识别 ${g} 个工程量/工期/频次/资源/金额类数据`,suggestion:"请把工程数量、学校数量、工期节点、检查频次、人员驻场、机械设备、检测比例、响应时限和违约承诺写入对应章节。"}),h<(c?.minStandardCount??4)&&b.push({level:"warning",message:`规范标准引用不足:仅识别 ${h} 个规范编号`,suggestion:"请结合图纸、设计说明和招标文件补充 GB/JGJ/CJJ 等规范或验收标准。"}),i<(c?.minProcessActionCount??6)&&b.push({level:"warning",message:`工艺动作覆盖不足:仅识别 ${i} 类施工动作`,suggestion:"请补充基层处理、测量放线、样板、安装连接、隐蔽验收、调试和成品保护等工艺链。"}),j<(c?.minInspectionActionCount??6)&&b.push({level:"warning",message:`试验验收表达不足:仅识别 ${j} 类试验/验收动作`,suggestion:"请补充闭水、打压、通球、绝缘、联动、复试、允许偏差等验收控制。"}),k>Math.max(c?.maxGenericPhraseCountPer1800Chars??10,Math.floor(e.length/1800)*(c?.maxGenericPhraseCountPer1800Chars??10))&&b.push({level:"error",message:`空泛表达过多:识别 ${k} 处泛化表述`,suggestion:"请减少“按规范要求、满足设计要求、加强管理”等空话,并用具体参数、流程和验收动作替代。"}),b}({template:i,chapters:ch,assignments:au,finalMarkdown:ci})),bU.push(...ab({assignments:au,markdown:ci})),bU.push(...bp(ci)),bU.push(...bm(ci)),bU.push(...bn(ci)),bU.push(...by(ci)),bU.push(...bo(ch)),bU.push(...bq(ci,bR)),bU.push(...br(ci)),c={template:i,chapters:ch,markdown:ci},(0,o.V)().qualityBenchmarks.filter(a=>(function(a,b){let c=`${a.name} ${a.category} ${a.outputTitle} ${a.description}`;return b.templateMatchers.some(a=>RegExp(a,"iu").test(c))})(c.template,a)).map(a=>{let b=0,d=0,e=[];for(let f of a.rules){let a=Math.max(0,f.weight||0);d+=a,function(a,b,c){let d=c||b.map(a=>`${a.title}
76
- ${a.content}`).join("\n\n"),e=function(a,b=[]){return b.filter(b=>b&&a.includes(b)).length}(d,a.keywords),f=function(a,b=[]){return b.filter(b=>a.some(a=>RegExp(b,"iu").test(a.title))).length}(b,a.titlePatterns),g=[a.keywords?.length?e/a.keywords.length:void 0,a.titlePatterns?.length?f/a.titlePatterns.length:void 0,a.tableRequired?+!!/\n\s*\|[^\n]+\|\s*\n\s*\|\s*[-:| ]+\|/u.test(d):void 0].filter(a=>"number"==typeof a),h=g.length?g.reduce((a,b)=>a+b,0)/g.length:1,i=null==a.minRatio||h>=a.minRatio,j=null==a.minCount||e+f>=a.minCount;return{passed:i&&j,ratio:h,keywordCount:e,titleCount:f}}(f,c.chapters,c.markdown).passed?b+=a:e.push({level:f.level||"warning",message:`质量基准未达标:${f.name}`,suggestion:f.suggestion||"请补充专业细节、表格或对应章节内容。"})}let f=d>0?Math.round(b/d*100):100,g=f<a.blockBelowScore||e.some(a=>"error"===a.level);return{benchmarkId:a.id,benchmarkName:a.name,score:f,pass:f>=a.passScore,blocked:g,issues:g?[{level:"error",message:`文档质量基准评分未达标:${a.name} ${f}分`,suggestion:"请重新生成或补充模板、资料、章节内容后再导出。"},...e]:e}})))bU.push(...a.issues);bU.push(...function(a){let b=[],c=a.markdown;for(let c of a.roles.filter(a=>a.required))c.satisfied?c.weak&&b.push({level:"warning",message:`工程专项资料角色证据较弱:${c.role}`,suggestion:"建议补充更多同类资料以提高正式文件可靠性。"}):b.push({level:"error",message:`工程专项资料角色缺失:${c.role}`,suggestion:"请补充对应项目资料或调整模板角色绑定。"});for(let d of(a.summary.facts.professionalScopes||[]).slice(0,10))d.length>=4&&!H(c,d)&&b.push({level:"warning",message:`正文可能未覆盖资料中的专业/范围:${d}`,suggestion:"建议检查施工范围、施工方法或资源配置章节。"});let d=a.chapters.map(a=>a.title).join("、");if(/施工组织|施工方案|技术标|施工/iu.test(c+d))for(let a of["质量","安全","进度"])c.includes(a)||d.includes(a)||b.push({level:"warning",message:`施工类正式文件缺少“${a}”控制内容`,suggestion:`建议补充${a}管理目标、措施和责任体系。`});return b}({markdown:ci,chapters:ch,summary:x,roles:B})),bU.push(...bs(ci,i)),bU.push(...function(a,b){let c=a?.targetPages;if(!c?.min&&!c?.target&&!c?.max)return[];let d=bj(b,a),e=c.min||c.target,f=c.max||c.target,g=[];return e&&d<e&&g.push({level:"error",message:`正文篇幅低于目标页数:预计约 ${d} 页,目标不少于 ${e} 页`,suggestion:"请重新生成或增加章节正文深度后再导出正式文件。"}),f&&d>f+4&&g.push({level:"warning",message:`正文篇幅可能超过目标页数:预计约 ${d} 页,目标不超过 ${f} 页`,suggestion:"建议检查是否存在重复段落或过度展开。"}),g}(i.generationSettings||i.exportSettings,ci)),bU.push(...bB(ci,i));let ck=function(a,b,c){let d=[{key:"no_errors",label:"无阻断级校验错误",passed:!a.some(a=>"error"===a.level&&bi(a))},{key:"project_facts",label:"项目基础事实齐全",passed:b.project.length>0},{key:"source_traceability",label:"事实具备来源追踪",passed:[...b.project,...b.schedule,...b.quality,...b.safety].every(a=>!!a.sourceFile)},{key:"bill_drawing_precision",label:"清单/图纸精确参数已使用",passed:b.preciseFacts.length<20||a.every(a=>!/清单\/图纸精确参数使用不足|未体现工程量清单|未体现图纸/u.test(a.message))},{key:"chapter_evidence",label:"章节均具备证据",passed:c.every(a=>a.evidence.length>0)},{key:"no_missing_content",label:"无资料未提供章节",passed:c.every(a=>!a.content.includes("资料未提供"))},{key:"no_project_contamination",label:"无项目污染和事实一致性阻断",passed:!a.some(a=>"error"===a.level&&/其他项目|项目编号|项目名称|事实一致性冲突/iu.test(a.message))}],e=a.filter(a=>"error"===a.level&&bi(a));return{passed:0===e.length&&d.every(a=>a.passed),blockingIssues:e,checklist:d}}(bU,bR,ch),cl=ck.blockingIssues.length,cm=ce.map(a=>"validation"===a.type?{...a,status:cl>0?"failed":"success",message:`阻断 ${cl},问题 ${bU.length}`}:"export_ready"===a.type?{...a,status:ck.passed?"success":"failed",message:ck.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁存在阻断项"}:a);return{...bZ,chapters:ch,validationIssues:bU,exportGate:ck,executionStages:cm,markdown:ci}}async function bF(a){let b=aj(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 d=a.projectRoot||(0,j.aY)();if(!d)throw Error("No knowledge base project found");let e=(0,j.Qh)(),f=Math.max(5,Math.min(30,a.maxEvidencePerChapter??12)),g=[];for(let a of c.queries){let b=await e.search(d,a,{scope:"project",limit:f,weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});g.push(...b.results.map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,sectionTitle:a.sectionTitle,source:a.source})))}let h=as(g,f),i=a.currentMarkdown?a.currentMarkdown.slice(0,4e3):"",k=new Set(a.existingFacts??[]),l=c.requiredFacts.filter(a=>!k.has(a)&&!h.some(b=>aG(b,a))),m=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",i?`> 当前文档上下文摘要:${i.replace(/\s+/gu," ").slice(0,800)}`:"",h.length>0?`本章根据知识库资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`:"建议补充更多资料后复核。","",h.length>0?"### 资料依据":"",...h.map(au),"",l.length>0?"### 待确认事项":"",...l.map(a=>`- ${a}:建议人工复核或补充更明确资料。`)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:m,evidence:h,missingFacts:l}}},79181:(a,b,c)=>{c.d(b,{V:()=>h});var d=c(73024),e=c(48161),f=c(76760);let g={reviewStandardQueries:[],reviewChapterTemplateMatchers:[],reviewChapterSectionDefaults:{firstChapterSections:[],chapterSections:[],firstChapterTableSections:[],firstChapterTableRequirements:[]},templates:[],roles:[],roleConfigs:[],qualityBenchmarks:[],autoSpecGates:[],chapterTitleFilters:[]};function h(){try{var a;let b=function(){let a=f.join(e.homedir(),".customize-agent");return d.mkdirSync(a,{recursive:!0}),f.join(a,"engineering-document-config.json")}();if(!d.existsSync(b))return g;return a=JSON.parse(d.readFileSync(b,"utf-8")),{reviewStandardQueries:Array.isArray(a.reviewStandardQueries)?a.reviewStandardQueries.filter(Boolean):[],reviewChapterTemplateMatchers:Array.isArray(a.reviewChapterTemplateMatchers)?a.reviewChapterTemplateMatchers.filter(Boolean):[],reviewChapterSectionDefaults:{firstChapterSections:Array.isArray(a.reviewChapterSectionDefaults?.firstChapterSections)?a.reviewChapterSectionDefaults.firstChapterSections.filter(Boolean):[],chapterSections:Array.isArray(a.reviewChapterSectionDefaults?.chapterSections)?a.reviewChapterSectionDefaults.chapterSections.filter(Boolean):[],firstChapterTableSections:Array.isArray(a.reviewChapterSectionDefaults?.firstChapterTableSections)?a.reviewChapterSectionDefaults.firstChapterTableSections.filter(Boolean):[],firstChapterTableRequirements:Array.isArray(a.reviewChapterSectionDefaults?.firstChapterTableRequirements)?a.reviewChapterSectionDefaults.firstChapterTableRequirements.filter(Boolean):[]},templates:Array.isArray(a.templates)?a.templates:[],roles:Array.isArray(a.roles)?a.roles:[],roleConfigs:Array.isArray(a.roleConfigs)?a.roleConfigs:[],qualityBenchmarks:Array.isArray(a.qualityBenchmarks)?a.qualityBenchmarks:[],technicalDetailGate:a.technicalDetailGate,autoSpecGates:Array.isArray(a.autoSpecGates)?a.autoSpecGates:[],chapterTitleFilters:Array.isArray(a.chapterTitleFilters)?a.chapterTitleFilters:[]}}catch{return g}}},89952:(a,b,c)=>{c.d(b,{DZ:()=>t,FV:()=>s,Mu:()=>u,NR:()=>v,XB:()=>q,dg:()=>r,dw:()=>w,ov:()=>A,tl:()=>z});var d=c(73024),e=c(48161),f=c(76760),g=c(79181);function h(){let a=f.join(e.homedir(),".customize-agent");return d.mkdirSync(a,{recursive:!0}),f.join(a,"document-roles.json")}function i(a){return(a||`item-${Date.now()}`).replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80)}function j(a=[]){let b=new Set;return a.filter(a=>!(!a.roleId||b.has(a.roleId))&&(b.add(a.roleId),!0))}function k(a){var b,c;let d="prompt"===a.type?"prompt":"file";return{id:i(a.id),name:a.name||"未命名角色",description:a.description||"",type:d,builtIn:!!a.builtIn,resourceId:"prompt"===d&&(a.resourceId||a.resourceIds?.[0])||void 0,resourceIds:"prompt"===d?function(a=[]){return[...new Set(a.filter(Boolean))]}(Array.isArray(a.resourceIds)&&a.resourceIds.length>0?a.resourceIds:a.resourceId?[a.resourceId]:[]):[],executionType:"prompt"===d?"fact_extraction"===(b=a.executionType)||"chapter_generation"===b||"llm_review"===b||"validation"===b||"formatting"===b||"reference"===b?b:"reference":void 0,processingType:"file"===d?"rule"===(c=a.processingType)||"project_fact"===c||"table"===c||"drawing"===c||"specification"===c||"reference"===c?c:"reference":void 0}}function l(a){return{id:i(a.id),name:a.name||"未命名配置",description:a.description||"",builtIn:!!a.builtIn,fileRoles:j(Array.isArray(a.fileRoles)?a.fileRoles.filter(a=>a.roleId).map((a,b)=>({roleId:a.roleId,order:Number.isFinite(a.order)?a.order:b})):[]),promptRoles:j(Array.isArray(a.promptRoles)?a.promptRoles.filter(a=>a.roleId).map((a,b)=>({roleId:a.roleId,order:Number.isFinite(a.order)?a.order:b})):[])}}function m(){try{let a=h();if(!d.existsSync(a))return{roles:[],configs:[]};let b=JSON.parse(d.readFileSync(a,"utf-8"));if(Array.isArray(b))return{roles:b.map(k),configs:[]};return{roles:Array.isArray(b.roles)?b.roles.map(k):[],configs:Array.isArray(b.configs)?b.configs.map(l):[]}}catch{return{roles:[],configs:[]}}}function n(a){d.writeFileSync(h(),JSON.stringify({roles:a.roles.map(k),configs:a.configs.map(l)},null,2),"utf-8")}function o(){return(0,g.V)().roles.map(a=>k({...a,builtIn:!0}))}function p(){return(0,g.V)().roleConfigs.map(a=>l({...a,builtIn:!0}))}function q(a){let b=o(),c=m().roles.filter(a=>!b.some(b=>b.id===a.id&&b.type===a.type)),d=[...b,...c];return a?d.filter(b=>b.type===a):d}function r(a){let b=k(a),c=m();return c.roles=c.roles.filter(a=>a.id!==b.id||a.type!==b.type),c.roles.push(b),n(c),b}function s(a,b){if(o().some(c=>c.id===b&&c.type===a))throw Error("Configured role cannot be deleted");let c=m();c.roles=c.roles.filter(c=>c.id!==b||c.type!==a),c.configs=c.configs.map(a=>({...a,fileRoles:a.fileRoles.filter(a=>a.roleId!==b),promptRoles:a.promptRoles.filter(a=>a.roleId!==b)})),n(c)}function t(){let a=p(),b=m().configs.filter(b=>!a.some(a=>a.id===b.id));return[...a,...b]}function u(a){return t().find(b=>b.id===a)}function v(a){let b={...l(a),builtIn:!1},c=m();return c.configs=c.configs.filter(a=>a.id!==b.id),c.configs.push(b),n(c),b}function w(a){if(p().some(b=>b.id===a))throw Error("Configured role config cannot be deleted");let b=m();b.configs=b.configs.filter(b=>b.id!==a),n(b)}function x(a,b){let c=i(a);if(!b.has(c))return b.add(c),c;do c=i(`${a}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,7)}`);while(b.has(c));return b.add(c),c}function y(a=[],b){return a.map((a,c)=>({roleId:b.get(a.roleId)||a.roleId,order:Number.isFinite(a.order)?a.order:c}))}function z(a){let b=a?.roleIds?new Set(a.roleIds):null,c=a?.configIds?new Set(a.configIds):null,d=m();return{type:"customize-agent.documentRoles",version:1,exportedAt:new Date().toISOString(),roles:d.roles.filter(a=>!b||b.has(a.id)).map(k),configs:d.configs.filter(a=>!c||c.has(a.id)).map(l)}}function A(a){let b=a&&"object"==typeof a?a:{},c=Array.isArray(b.roles)?b.roles:[],d=Array.isArray(b.configs)?b.configs:[];if(0===c.length&&0===d.length)throw Error("没有可导入的角色配置");let e=m(),f=new Set([...o().map(a=>a.id),...e.roles.map(a=>a.id)]),g=new Set([...p().map(a=>a.id),...e.configs.map(a=>a.id)]),h=new Map,i=[];for(let a of c){let b=k(a),c=x(b.id,f);h.set(b.id,c),i.push({...b,id:c,builtIn:!1})}let j=new Set([...o().map(a=>a.id),...e.roles.map(a=>a.id),...i.map(a=>a.id)]),q=d.map(a=>{let b=l(a),c=x(b.id,g);return l({...b,id:c,builtIn:!1,fileRoles:y(b.fileRoles,h).filter(a=>j.has(a.roleId)),promptRoles:y(b.promptRoles,h).filter(a=>j.has(a.roleId))})});return e.roles.push(...i),e.configs.push(...q),n(e),{importedRoles:i.length,importedConfigs:q.length}}},99842:(a,b,c)=>{c.d(b,{E:()=>t,Hh:()=>n,PH:()=>u,dg:()=>l,h0:()=>p,i3:()=>o,jk:()=>q,p:()=>s,pJ:()=>m});var d=c(87550),e=c.n(d),f=c(33873),g=c(21820),h=c(29021);let i={project_fact:"项目知识",user_preference:"用户偏好",feedback:"历史纠偏",pattern:"解决方案"};function j(){let a=f.join(g.homedir(),".customize-agent","memory.db");return h.existsSync(a)?new(e())(a,{readonly:!0}):null}function k(a){let b=Number(a.access_count??0);return{id:String(a.id),title:String(a.content||"").slice(0,80),content:String(a.content||""),type:String(a.type||"project_fact"),importance:b>=5?"high":b>=2?"medium":"low",tags:[i[String(a.type)]||String(a.type)],source:String(a.context||"").slice(0,100),created_at:new Date(String(a.created_at)).getTime(),updated_at:new Date(String(a.updated_at)).getTime()}}function l(a){let b=j();if(!b)return[];try{let c="SELECT * FROM memories WHERE access_count >= 2",d=[];return a&&(c+=" AND (content LIKE ? OR context LIKE ?)",d.push(`%${a}%`,`%${a}%`)),c+=" ORDER BY access_count DESC, updated_at DESC LIMIT 200",b.prepare(c).all(...d).map(k)}finally{b.close()}}function m(a){let b=j();if(!b)return[];try{let c="SELECT * FROM memories WHERE access_count < 2",d=[];return a&&(c+=" AND (content LIKE ? OR context LIKE ?)",d.push(`%${a}%`,`%${a}%`)),c+=" ORDER BY updated_at DESC LIMIT 200",b.prepare(c).all(...d).map(k)}finally{b.close()}}function n(a,b=8,c){let d=j();if(!d)return[];try{let e=a.split(/[\s,,。;;::、/\\|]+/u).map(a=>a.trim()).filter(a=>a.length>=2).slice(0,8),g=c?`%Project: ${f.resolve(c)}%`:void 0;if(0===e.length)return(g?d.prepare("SELECT * FROM memories WHERE context LIKE ? ORDER BY access_count DESC, updated_at DESC LIMIT ?").all(g,b):d.prepare("SELECT * FROM memories ORDER BY access_count DESC, updated_at DESC LIMIT ?").all(b)).map(k);let h=e.map(()=>"(content LIKE ? OR context LIKE ?)").join(" OR "),i=e.flatMap(a=>[`%${a}%`,`%${a}%`]);return(g?d.prepare(`
74
+ ${c}`}(ci,ck))),cm=[...a2(b4,au,a_,a$,b3),...b5];for(let a of((bX=function(a,b,c,d,e,f,g){if(!a)return b;let h=[...b],i=[...c.project,...c.schedule,...c.quality,...c.safety,...c.resources,...Object.values(c.schemaFacts).flat()],j=new Set([...i.map(a=>a.key),...i.map(a=>a.fieldName).filter(Boolean),...c.tables.flatMap(a=>[...a.headers,...a.rows.flat()])]),k=new Set(d.map(a=>a.title));for(let b of a.factFields.filter(a=>a.required)){let a=c.schemaFacts[b.id]||[],e=d.some(a=>!a.missingFacts.includes(b.name)&&a.evidence.some(a=>aI(a,b))),f=!b.sourceRoleIds?.length||a.some(a=>b.sourceRoleIds?.includes(a.roleId))||d.some(a=>a.evidence.some(a=>aI(a,b)));0!==a.length||j.has(b.name)||e||h.push({level:"warning",message:`必需事实缺失:${b.name}`,suggestion:b.extractionHint||"请补充资料或调整事实字段配置。"}),f||h.push({level:"warning",message:`必需事实来源角色不匹配:${b.name}`,suggestion:`请确认该事实来自角色:${b.sourceRoleIds?.join("、")}`})}if("fixed"===a.chapterMode)for(let b of a.chapterRules.filter(a=>a.required)){k.has(b.title)||h.push({level:"error",message:`必需章节缺失:${b.title}`,suggestion:"请在模板或规范包章节规则中补齐章节。"});let a=d.find(a=>a.title===b.title);a&&b.minWords&&a.content.length<b.minWords&&h.push({level:"warning",message:`章节内容低于最低字数:${b.title}`,suggestion:`建议不少于 ${b.minWords} 字。`})}else{let b=a.dynamicChapterRule;if(b.minChapters&&d.length<b.minChapters&&h.push({level:"warning",message:`动态章节数量低于最少章节:${d.length}/${b.minChapters}`,suggestion:"请补充资料或降低最少章节数。"}),b.maxChapters&&d.length>b.maxChapters&&h.push({level:"warning",message:`动态章节数量超过最多章节:${d.length}/${b.maxChapters}`,suggestion:"请收紧来源文件角色或降低召回范围。"}),b.minWordsPerChapter)for(let a of d)a.content.length<b.minWordsPerChapter&&h.push({level:"warning",message:`动态章节内容低于最低字数:${a.title}`,suggestion:`建议不少于 ${b.minWordsPerChapter} 字。`})}let l=bk(e),m=[...e.matchAll(/!\[([^\]]*)\]\(([^)]+)\)/gu)].map(a=>({alt:a[1]||"",url:a[2]||"",index:a.index??0})),n=bj(e);for(let b of a.gateRules){let a=b.level,o=b.evaluator?b.evaluator:"required_fact"===b.type?{subject:"fact",operator:"exists",target:b.target}:"required_chapter"===b.type?{subject:"chapter",operator:"exists",target:b.target}:"required_file_role"===b.type?{subject:"file_role",operator:"exists",target:b.target}:"required_prompt_role"===b.type?{subject:"prompt_role",operator:"exists",target:b.target}:"source_required"===b.type?{subject:"source",operator:"all_have_source"}:"forbidden_text"===b.type?{subject:"document",operator:"not_contains",value:b.value}:"min_chapter_length"===b.type?{subject:"chapter",operator:"min_length",target:b.target,min:Number(b.value)||void 0}:"table_required"===b.type?{subject:"table",operator:"min_count",min:1}:{subject:"document",operator:"contains",value:b.value||b.target},p=o.target||b.target||"",q=o.value||b.value||p,r=o.min||Number(b.value)||1,s=d.find(a=>a.title===p),t="chapter"===o.subject&&s?s.content:e,u=q?function(a){try{return RegExp(a,"iu")}catch{return}}(q):void 0;"fact"===o.subject&&"exists"===o.operator&&p&&!j.has(p)&&h.push({level:a,message:bl(b,`缺少事实 ${p}`)}),"chapter"===o.subject&&"exists"===o.operator&&p&&!k.has(p)&&h.push({level:a,message:bl(b,`缺少章节 ${p}`)}),"file_role"===o.subject&&"exists"===o.operator&&p&&!f.some(a=>a.roleId===p)&&h.push({level:a,message:bl(b,`缺少文件角色 ${p}`)}),"prompt_role"===o.subject&&"exists"===o.operator&&p&&!g.some(a=>a.roleId===p)&&h.push({level:a,message:bl(b,`缺少提示词角色 ${p}`)}),"document"===o.subject&&"contains"===o.operator&&q&&!e.includes(q)&&h.push({level:a,message:bl(b,`全文必须包含 ${q}`)}),"document"===o.subject&&"not_contains"===o.operator&&q&&e.includes(q)&&h.push({level:a,message:bl(b,`出现禁用文本 ${q}`)}),"document"!==o.subject&&"chapter"!==o.subject||"regex_match"!==o.operator||!q||u&&u.test(t)||h.push({level:a,message:bl(b,`未匹配正则 ${q}`)}),("document"===o.subject||"chapter"===o.subject)&&"regex_not_match"===o.operator&&u?.test(t)&&h.push({level:a,message:bl(b,`匹配到禁止正则 ${q}`)}),"chapter"===o.subject&&"contains"===o.operator&&p&&q&&(!s||!s.content.includes(q))&&h.push({level:a,message:bl(b,`章节 ${p} 必须包含 ${q}`)}),"chapter"===o.subject&&"not_contains"===o.operator&&s?.content.includes(q)&&h.push({level:a,message:bl(b,`章节 ${p} 出现禁用文本 ${q}`)}),"chapter"===o.subject&&"min_length"===o.operator&&p&&(!s||s.content.length<r)&&h.push({level:a,message:bl(b,`章节 ${p} 低于 ${r} 字`)}),"table"===o.subject&&"min_count"===o.operator&&c.tables.length+l.length<r&&h.push({level:a,message:bl(b,`表格数量少于 ${r}`)}),"table"===o.subject&&"table_explanation_required"===o.operator&&l.some(a=>e.indexOf(a)>=0&&e.slice(e.indexOf(a)+a.length,e.indexOf(a)+a.length+120).trim().length<10)&&h.push({level:a,message:bl(b,"存在缺少说明文字的表格")}),"image"===o.subject&&"min_count"===o.operator&&m.length<r&&h.push({level:a,message:bl(b,`图片数量少于 ${r}`)}),"page"===o.subject&&"min_count"===o.operator&&n<r&&h.push({level:a,message:bl(b,`预计页数 ${n} 少于 ${r}`)}),"page"===o.subject&&"max_count"===o.operator&&n>r&&h.push({level:a,message:bl(b,`预计页数 ${n} 超过 ${r}`)}),"image"===o.subject&&"image_caption_required"===o.operator&&m.some(a=>!a.alt&&e.slice(a.index+a.url.length,a.index+a.url.length+120).trim().length<10)&&h.push({level:a,message:bl(b,"存在缺少说明文字的图片")}),"source"===o.subject&&"all_have_source"===o.operator&&i.some(a=>!a.sourceFile)&&h.push({level:a,message:bl(b,"存在无来源事实")}),"source"===o.subject&&"min_count"===o.operator&&new Set(i.map(a=>a.sourceFile).filter(Boolean)).size<r&&h.push({level:a,message:bl(b,`来源数量少于 ${r}`)})}return h}(w,[...bX,...cm.map(a=>({level:"warning",message:a}))],bU,ck,cl,A,r)).push(...function(a){let b=[],c=a.markdown||"";for(let d of a.spec.factFields.filter(a=>a.required))!c.includes(d.name)&&d.name.length>=3&&b.push({level:"warning",message:`后台自动规范提示:正文可能未显式覆盖“${d.name}”`,suggestion:"建议检查对应章节是否已自然表达该事实。"});let d=a.summary.facts.projectName;d&&"当前知识库项目"!==d&&!c.includes(d)&&b.push({level:"warning",message:"正文未明显体现项目名称",suggestion:"建议在工程概况或首页标题中体现当前项目名称。"});let e=a.summary.facts.tenderNo;for(let a of(e&&!c.includes(e)&&b.push({level:"info",message:"正文未体现招标/项目编号",suggestion:"如正式文件需要编号,请在工程概况中补充。"}),["知识库证据","文件角色","提示词角色","文档规范包","规范包","后台自动规范","资料未提供","未检索到"]))c.includes(a)&&b.push({level:"error",message:`正文包含后台流程话术:${a}`,suggestion:"请重新生成或在审查阶段删除后台流程描述。"});return b}({markdown:cl,spec:w,summary:x})),bX.push(...function(a){let b=[];for(let c of[{label:"项目名称",keys:["项目名称","工程名称"]},{label:"招标编号",keys:["招标编号","项目编号"]},{label:"工期要求",keys:["工期","进度节点"]},{label:"质量要求",keys:["质量"]}]){let d=new Map;for(let b of function(a,b){return a.filter(a=>b.some(b=>a.key.includes(b)||a.fieldName?.includes(b))).map(a=>({value:String(a.value),source:a.sourceFile}))}(a.facts,c.keys)){let a=b.value.replace(/\s+/gu,"").replace(/[,。,.;;::]/gu,"").toLowerCase();a&&!(a.length<2)&&d.set(a,[...d.get(a)||[],b])}if(d.size>1){let a=[...d.values()].map(a=>`${a[0].value}(${a.map(a=>a.source).filter(Boolean).join("、")||"未知来源"})`).join(" vs ");b.push({level:"error",message:`事实一致性冲突:${c.label} 存在多个值:${a}`,suggestion:"请确认当前项目资料组,或在模板绑定中只绑定当前项目资料。"})}}let c=a.summary.facts.projectName;return c&&"当前知识库项目"!==c&&!a.markdown.includes(c)&&b.push({level:"error",message:`正文未包含当前项目名称:${c}`,suggestion:"请重新生成,确保标题或工程概况体现当前项目名称。"}),b}({markdown:cl,facts:bN,summary:x})),bX.push(...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)&&H(a,e)&&c.push({level:"error",message:`正文疑似混入其他项目名称:${e}`,suggestion:"请检查项目资料组选择、模板绑定文件和知识库证据范围。"});let e=b.fingerprint.tenderNos,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}(cl,x)),bX.push(...function(a){let b=[],c=(0,o.V)().technicalDetailGate,d=`${a.template.name} ${a.template.category} ${a.template.outputTitle}`;if(!(c?.templateMatchers?.length?c.templateMatchers:["施工组织设计","施工方案","技术标.*施工","施工.*技术标"]).some(a=>RegExp(a,"iu").test(d)))return b;let e=a.finalMarkdown||a.chapters.map(a=>`${a.title}
75
+ ${a.content}`).join("\n\n"),f=Z(a.chapters.filter(a=>/施工方法|主要.*方法|工艺/u.test(a.title)).map(a=>a.content).join("\n")||e,J).length,g=[K,L,M,N,O].reduce((a,b)=>a+Z(e,b).length,0),h=Z(e,P).length,i=Q.filter(a=>e.includes(a)).length,j=R.filter(a=>e.includes(a)).length,k=(c?.genericPhrases?.length?c.genericPhrases:W).reduce((a,b)=>a+(e.match(RegExp(b,"gu"))?.length||0),0),l=a.assignments.flatMap(a=>a.facts),m=Y(l.flatMap(a=>{var b;return Y([...Z(b=`${a.parameter||""} ${a.specification||""} ${a.text}`,J),...Z(b,K),...Z(b,L),...Z(b,M),...Z(b,N),...Z(b,O),...Z(b,P)].map(a=>a.replace(/\s+/gu,"")))})).slice(0,120),n=m.filter(a=>e.replace(/\s+/gu,"").includes(a)),p=m.length?n.length/m.length:1,q=c?.minAssignedFactCountForBlocking??12;return l.length>=q&&p<(c?.minTechnicalFactUsageRate??.35)&&b.push({level:"error",message:`工程技术事实使用率不足:${Math.round(100*p)}%`,suggestion:"请把清单、图纸、设计说明中的材料规格、尺寸参数、试验验收和规范编号写入对应章节。"}),f<(c?.minMethodParameterCount??18)&&l.length>=q&&b.push({level:"error",message:`施工方法参数密度不足:仅识别 ${f} 个数字/规格参数`,suggestion:"主要施工方法应补充材料强度、厚度、尺寸、管径、试验时间、压力、偏差和数量等可核查参数。"}),g<(c?.minQuantitativeFactCount??20)&&l.length>=q&&b.push({level:"error",message:`工程量化事实密度不足:仅识别 ${g} 个工程量/工期/频次/资源/金额类数据`,suggestion:"请把工程数量、学校数量、工期节点、检查频次、人员驻场、机械设备、检测比例、响应时限和违约承诺写入对应章节。"}),h<(c?.minStandardCount??4)&&b.push({level:"warning",message:`规范标准引用不足:仅识别 ${h} 个规范编号`,suggestion:"请结合图纸、设计说明和招标文件补充 GB/JGJ/CJJ 等规范或验收标准。"}),i<(c?.minProcessActionCount??6)&&b.push({level:"warning",message:`工艺动作覆盖不足:仅识别 ${i} 类施工动作`,suggestion:"请补充基层处理、测量放线、样板、安装连接、隐蔽验收、调试和成品保护等工艺链。"}),j<(c?.minInspectionActionCount??6)&&b.push({level:"warning",message:`试验验收表达不足:仅识别 ${j} 类试验/验收动作`,suggestion:"请补充闭水、打压、通球、绝缘、联动、复试、允许偏差等验收控制。"}),k>Math.max(c?.maxGenericPhraseCountPer1800Chars??10,Math.floor(e.length/1800)*(c?.maxGenericPhraseCountPer1800Chars??10))&&b.push({level:"error",message:`空泛表达过多:识别 ${k} 处泛化表述`,suggestion:"请减少“按规范要求、满足设计要求、加强管理”等空话,并用具体参数、流程和验收动作替代。"}),b}({template:i,chapters:ck,assignments:av,finalMarkdown:cl})),bX.push(...ab({assignments:av,markdown:cl})),bX.push(...bp(cl)),bX.push(...bm(cl)),bX.push(...bn(cl)),bX.push(...by(cl)),bX.push(...bo(ck)),bX.push(...bq(cl,bU)),bX.push(...br(cl)),c={template:i,chapters:ck,markdown:cl},(0,o.V)().qualityBenchmarks.filter(a=>(function(a,b){let c=`${a.name} ${a.category} ${a.outputTitle} ${a.description}`;return b.templateMatchers.some(a=>RegExp(a,"iu").test(c))})(c.template,a)).map(a=>{let b=0,d=0,e=[];for(let f of a.rules){let a=Math.max(0,f.weight||0);d+=a,function(a,b,c){let d=c||b.map(a=>`${a.title}
76
+ ${a.content}`).join("\n\n"),e=function(a,b=[]){return b.filter(b=>b&&a.includes(b)).length}(d,a.keywords),f=function(a,b=[]){return b.filter(b=>a.some(a=>RegExp(b,"iu").test(a.title))).length}(b,a.titlePatterns),g=[a.keywords?.length?e/a.keywords.length:void 0,a.titlePatterns?.length?f/a.titlePatterns.length:void 0,a.tableRequired?+!!/\n\s*\|[^\n]+\|\s*\n\s*\|\s*[-:| ]+\|/u.test(d):void 0].filter(a=>"number"==typeof a),h=g.length?g.reduce((a,b)=>a+b,0)/g.length:1,i=null==a.minRatio||h>=a.minRatio,j=null==a.minCount||e+f>=a.minCount;return{passed:i&&j,ratio:h,keywordCount:e,titleCount:f}}(f,c.chapters,c.markdown).passed?b+=a:e.push({level:f.level||"warning",message:`质量基准未达标:${f.name}`,suggestion:f.suggestion||"请补充专业细节、表格或对应章节内容。"})}let f=d>0?Math.round(b/d*100):100,g=f<a.blockBelowScore||e.some(a=>"error"===a.level);return{benchmarkId:a.id,benchmarkName:a.name,score:f,pass:f>=a.passScore,blocked:g,issues:g?[{level:"error",message:`文档质量基准评分未达标:${a.name} ${f}分`,suggestion:"请重新生成或补充模板、资料、章节内容后再导出。"},...e]:e}})))bX.push(...a.issues);bX.push(...function(a){let b=[],c=a.markdown;for(let c of a.roles.filter(a=>a.required))c.satisfied?c.weak&&b.push({level:"warning",message:`工程专项资料角色证据较弱:${c.role}`,suggestion:"建议补充更多同类资料以提高正式文件可靠性。"}):b.push({level:"error",message:`工程专项资料角色缺失:${c.role}`,suggestion:"请补充对应项目资料或调整模板角色绑定。"});for(let d of(a.summary.facts.professionalScopes||[]).slice(0,10))d.length>=4&&!H(c,d)&&b.push({level:"warning",message:`正文可能未覆盖资料中的专业/范围:${d}`,suggestion:"建议检查施工范围、施工方法或资源配置章节。"});let d=a.chapters.map(a=>a.title).join("、");if(/施工组织|施工方案|技术标|施工/iu.test(c+d))for(let a of["质量","安全","进度"])c.includes(a)||d.includes(a)||b.push({level:"warning",message:`施工类正式文件缺少“${a}”控制内容`,suggestion:`建议补充${a}管理目标、措施和责任体系。`});return b}({markdown:cl,chapters:ck,summary:x,roles:B})),bX.push(...bs(cl,i)),bX.push(...function(a,b){let c=a?.targetPages;if(!c?.min&&!c?.target&&!c?.max)return[];let d=bj(b,a),e=c.min||c.target,f=c.max||c.target,g=[];return e&&d<e&&g.push({level:"error",message:`正文篇幅低于目标页数:预计约 ${d} 页,目标不少于 ${e} 页`,suggestion:"请重新生成或增加章节正文深度后再导出正式文件。"}),f&&d>f+4&&g.push({level:"warning",message:`正文篇幅可能超过目标页数:预计约 ${d} 页,目标不超过 ${f} 页`,suggestion:"建议检查是否存在重复段落或过度展开。"}),g}(i.generationSettings||i.exportSettings,cl)),bX.push(...bB(cl,i));let cn=function(a,b,c){let d=[{key:"no_errors",label:"无阻断级校验错误",passed:!a.some(a=>"error"===a.level&&bi(a))},{key:"project_facts",label:"项目基础事实齐全",passed:b.project.length>0},{key:"source_traceability",label:"事实具备来源追踪",passed:[...b.project,...b.schedule,...b.quality,...b.safety].every(a=>!!a.sourceFile)},{key:"bill_drawing_precision",label:"清单/图纸精确参数已使用",passed:b.preciseFacts.length<20||a.every(a=>!/清单\/图纸精确参数使用不足|未体现工程量清单|未体现图纸/u.test(a.message))},{key:"chapter_evidence",label:"章节均具备证据",passed:c.every(a=>a.evidence.length>0)},{key:"no_missing_content",label:"无资料未提供章节",passed:c.every(a=>!a.content.includes("资料未提供"))},{key:"no_project_contamination",label:"无项目污染和事实一致性阻断",passed:!a.some(a=>"error"===a.level&&/其他项目|项目编号|项目名称|事实一致性冲突/iu.test(a.message))}],e=a.filter(a=>"error"===a.level&&bi(a));return{passed:0===e.length&&d.every(a=>a.passed),blockingIssues:e,checklist:d}}(bX,bU,ck),co=cn.blockingIssues.length,cp=ch.map(a=>"validation"===a.type?{...a,status:co>0?"failed":"success",message:`阻断 ${co},问题 ${bX.length}`}:"export_ready"===a.type?{...a,status:cn.passed?"success":"failed",message:cn.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁存在阻断项"}:a);return{...b0,chapters:ck,validationIssues:bX,exportGate:cn,executionStages:cp,markdown:cl}}async function bF(a){let b=aj(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 d=a.projectRoot||(0,j.aY)();if(!d)throw Error("No knowledge base project found");let e=(0,j.Qh)(),f=Math.max(5,Math.min(30,a.maxEvidencePerChapter??12)),g=[];for(let a of c.queries){let b=await e.search(d,a,{scope:"project",limit:f,weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});g.push(...b.results.map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,sectionTitle:a.sectionTitle,source:a.source})))}let h=as(g,f),i=a.currentMarkdown?a.currentMarkdown.slice(0,4e3):"",k=new Set(a.existingFacts??[]),l=c.requiredFacts.filter(a=>!k.has(a)&&!h.some(b=>aG(b,a))),m=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",i?`> 当前文档上下文摘要:${i.replace(/\s+/gu," ").slice(0,800)}`:"",h.length>0?`本章根据知识库资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`:"建议补充更多资料后复核。","",h.length>0?"### 资料依据":"",...h.map(au),"",l.length>0?"### 待确认事项":"",...l.map(a=>`- ${a}:建议人工复核或补充更明确资料。`)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:m,evidence:h,missingFacts:l}}},79181:(a,b,c)=>{c.d(b,{V:()=>h});var d=c(73024),e=c(48161),f=c(76760);let g={reviewStandardQueries:[],reviewChapterTemplateMatchers:[],reviewChapterSectionDefaults:{firstChapterSections:[],chapterSections:[],firstChapterTableSections:[],firstChapterTableRequirements:[]},templates:[],roles:[],roleConfigs:[],qualityBenchmarks:[],autoSpecGates:[],chapterTitleFilters:[]};function h(){try{var a;let b=function(){let a=f.join(e.homedir(),".customize-agent");return d.mkdirSync(a,{recursive:!0}),f.join(a,"engineering-document-config.json")}();if(!d.existsSync(b))return g;return a=JSON.parse(d.readFileSync(b,"utf-8")),{reviewStandardQueries:Array.isArray(a.reviewStandardQueries)?a.reviewStandardQueries.filter(Boolean):[],reviewChapterTemplateMatchers:Array.isArray(a.reviewChapterTemplateMatchers)?a.reviewChapterTemplateMatchers.filter(Boolean):[],reviewChapterSectionDefaults:{firstChapterSections:Array.isArray(a.reviewChapterSectionDefaults?.firstChapterSections)?a.reviewChapterSectionDefaults.firstChapterSections.filter(Boolean):[],chapterSections:Array.isArray(a.reviewChapterSectionDefaults?.chapterSections)?a.reviewChapterSectionDefaults.chapterSections.filter(Boolean):[],firstChapterTableSections:Array.isArray(a.reviewChapterSectionDefaults?.firstChapterTableSections)?a.reviewChapterSectionDefaults.firstChapterTableSections.filter(Boolean):[],firstChapterTableRequirements:Array.isArray(a.reviewChapterSectionDefaults?.firstChapterTableRequirements)?a.reviewChapterSectionDefaults.firstChapterTableRequirements.filter(Boolean):[]},templates:Array.isArray(a.templates)?a.templates:[],roles:Array.isArray(a.roles)?a.roles:[],roleConfigs:Array.isArray(a.roleConfigs)?a.roleConfigs:[],qualityBenchmarks:Array.isArray(a.qualityBenchmarks)?a.qualityBenchmarks:[],technicalDetailGate:a.technicalDetailGate,autoSpecGates:Array.isArray(a.autoSpecGates)?a.autoSpecGates:[],chapterTitleFilters:Array.isArray(a.chapterTitleFilters)?a.chapterTitleFilters:[]}}catch{return g}}},89952:(a,b,c)=>{c.d(b,{DZ:()=>t,FV:()=>s,Mu:()=>u,NR:()=>v,XB:()=>q,dg:()=>r,dw:()=>w,ov:()=>A,tl:()=>z});var d=c(73024),e=c(48161),f=c(76760),g=c(79181);function h(){let a=f.join(e.homedir(),".customize-agent");return d.mkdirSync(a,{recursive:!0}),f.join(a,"document-roles.json")}function i(a){return(a||`item-${Date.now()}`).replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80)}function j(a=[]){let b=new Set;return a.filter(a=>!(!a.roleId||b.has(a.roleId))&&(b.add(a.roleId),!0))}function k(a){var b,c;let d="prompt"===a.type?"prompt":"file";return{id:i(a.id),name:a.name||"未命名角色",description:a.description||"",type:d,builtIn:!!a.builtIn,resourceId:"prompt"===d&&(a.resourceId||a.resourceIds?.[0])||void 0,resourceIds:"prompt"===d?function(a=[]){return[...new Set(a.filter(Boolean))]}(Array.isArray(a.resourceIds)&&a.resourceIds.length>0?a.resourceIds:a.resourceId?[a.resourceId]:[]):[],executionType:"prompt"===d?"fact_extraction"===(b=a.executionType)||"chapter_generation"===b||"llm_review"===b||"validation"===b||"formatting"===b||"reference"===b?b:"reference":void 0,processingType:"file"===d?"rule"===(c=a.processingType)||"project_fact"===c||"table"===c||"drawing"===c||"specification"===c||"reference"===c?c:"reference":void 0}}function l(a){return{id:i(a.id),name:a.name||"未命名配置",description:a.description||"",builtIn:!!a.builtIn,fileRoles:j(Array.isArray(a.fileRoles)?a.fileRoles.filter(a=>a.roleId).map((a,b)=>({roleId:a.roleId,order:Number.isFinite(a.order)?a.order:b})):[]),promptRoles:j(Array.isArray(a.promptRoles)?a.promptRoles.filter(a=>a.roleId).map((a,b)=>({roleId:a.roleId,order:Number.isFinite(a.order)?a.order:b})):[])}}function m(){try{let a=h();if(!d.existsSync(a))return{roles:[],configs:[]};let b=JSON.parse(d.readFileSync(a,"utf-8"));if(Array.isArray(b))return{roles:b.map(k),configs:[]};return{roles:Array.isArray(b.roles)?b.roles.map(k):[],configs:Array.isArray(b.configs)?b.configs.map(l):[]}}catch{return{roles:[],configs:[]}}}function n(a){d.writeFileSync(h(),JSON.stringify({roles:a.roles.map(k),configs:a.configs.map(l)},null,2),"utf-8")}function o(){return(0,g.V)().roles.map(a=>k({...a,builtIn:!0}))}function p(){return(0,g.V)().roleConfigs.map(a=>l({...a,builtIn:!0}))}function q(a){let b=o(),c=m().roles.filter(a=>!b.some(b=>b.id===a.id&&b.type===a.type)),d=[...b,...c];return a?d.filter(b=>b.type===a):d}function r(a){let b=k(a),c=m();return c.roles=c.roles.filter(a=>a.id!==b.id||a.type!==b.type),c.roles.push(b),n(c),b}function s(a,b){if(o().some(c=>c.id===b&&c.type===a))throw Error("Configured role cannot be deleted");let c=m();c.roles=c.roles.filter(c=>c.id!==b||c.type!==a),c.configs=c.configs.map(a=>({...a,fileRoles:a.fileRoles.filter(a=>a.roleId!==b),promptRoles:a.promptRoles.filter(a=>a.roleId!==b)})),n(c)}function t(){let a=p(),b=m().configs.filter(b=>!a.some(a=>a.id===b.id));return[...a,...b]}function u(a){return t().find(b=>b.id===a)}function v(a){let b={...l(a),builtIn:!1},c=m();return c.configs=c.configs.filter(a=>a.id!==b.id),c.configs.push(b),n(c),b}function w(a){if(p().some(b=>b.id===a))throw Error("Configured role config cannot be deleted");let b=m();b.configs=b.configs.filter(b=>b.id!==a),n(b)}function x(a,b){let c=i(a);if(!b.has(c))return b.add(c),c;do c=i(`${a}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,7)}`);while(b.has(c));return b.add(c),c}function y(a=[],b){return a.map((a,c)=>({roleId:b.get(a.roleId)||a.roleId,order:Number.isFinite(a.order)?a.order:c}))}function z(a){let b=a?.roleIds?new Set(a.roleIds):null,c=a?.configIds?new Set(a.configIds):null,d=m();return{type:"customize-agent.documentRoles",version:1,exportedAt:new Date().toISOString(),roles:d.roles.filter(a=>!b||b.has(a.id)).map(k),configs:d.configs.filter(a=>!c||c.has(a.id)).map(l)}}function A(a){let b=a&&"object"==typeof a?a:{},c=Array.isArray(b.roles)?b.roles:[],d=Array.isArray(b.configs)?b.configs:[];if(0===c.length&&0===d.length)throw Error("没有可导入的角色配置");let e=m(),f=new Set([...o().map(a=>a.id),...e.roles.map(a=>a.id)]),g=new Set([...p().map(a=>a.id),...e.configs.map(a=>a.id)]),h=new Map,i=[];for(let a of c){let b=k(a),c=x(b.id,f);h.set(b.id,c),i.push({...b,id:c,builtIn:!1})}let j=new Set([...o().map(a=>a.id),...e.roles.map(a=>a.id),...i.map(a=>a.id)]),q=d.map(a=>{let b=l(a),c=x(b.id,g);return l({...b,id:c,builtIn:!1,fileRoles:y(b.fileRoles,h).filter(a=>j.has(a.roleId)),promptRoles:y(b.promptRoles,h).filter(a=>j.has(a.roleId))})});return e.roles.push(...i),e.configs.push(...q),n(e),{importedRoles:i.length,importedConfigs:q.length}}},99842:(a,b,c)=>{c.d(b,{E:()=>t,Hh:()=>n,PH:()=>u,dg:()=>l,h0:()=>p,i3:()=>o,jk:()=>q,p:()=>s,pJ:()=>m});var d=c(87550),e=c.n(d),f=c(33873),g=c(21820),h=c(29021);let i={project_fact:"项目知识",user_preference:"用户偏好",feedback:"历史纠偏",pattern:"解决方案"};function j(){let a=f.join(g.homedir(),".customize-agent","memory.db");return h.existsSync(a)?new(e())(a,{readonly:!0}):null}function k(a){let b=Number(a.access_count??0);return{id:String(a.id),title:String(a.content||"").slice(0,80),content:String(a.content||""),type:String(a.type||"project_fact"),importance:b>=5?"high":b>=2?"medium":"low",tags:[i[String(a.type)]||String(a.type)],source:String(a.context||"").slice(0,100),created_at:new Date(String(a.created_at)).getTime(),updated_at:new Date(String(a.updated_at)).getTime()}}function l(a){let b=j();if(!b)return[];try{let c="SELECT * FROM memories WHERE access_count >= 2",d=[];return a&&(c+=" AND (content LIKE ? OR context LIKE ?)",d.push(`%${a}%`,`%${a}%`)),c+=" ORDER BY access_count DESC, updated_at DESC LIMIT 200",b.prepare(c).all(...d).map(k)}finally{b.close()}}function m(a){let b=j();if(!b)return[];try{let c="SELECT * FROM memories WHERE access_count < 2",d=[];return a&&(c+=" AND (content LIKE ? OR context LIKE ?)",d.push(`%${a}%`,`%${a}%`)),c+=" ORDER BY updated_at DESC LIMIT 200",b.prepare(c).all(...d).map(k)}finally{b.close()}}function n(a,b=8,c){let d=j();if(!d)return[];try{let e=a.split(/[\s,,。;;::、/\\|]+/u).map(a=>a.trim()).filter(a=>a.length>=2).slice(0,8),g=c?`%Project: ${f.resolve(c)}%`:void 0;if(0===e.length)return(g?d.prepare("SELECT * FROM memories WHERE context LIKE ? ORDER BY access_count DESC, updated_at DESC LIMIT ?").all(g,b):d.prepare("SELECT * FROM memories ORDER BY access_count DESC, updated_at DESC LIMIT ?").all(b)).map(k);let h=e.map(()=>"(content LIKE ? OR context LIKE ?)").join(" OR "),i=e.flatMap(a=>[`%${a}%`,`%${a}%`]);return(g?d.prepare(`
77
77
  SELECT * FROM memories
78
78
  WHERE context LIKE ? AND (${h})
79
79
  ORDER BY access_count DESC, updated_at DESC