@customize-agent/server 4.1.4 → 4.1.6

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.
Files changed (36) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +7 -7
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/server/chunks/1924.js +2 -2
  5. package/.next/server/chunks/8204.js +1 -1
  6. package/.next/server/middleware-build-manifest.js +1 -1
  7. package/.next/server/pages/404.html +1 -1
  8. package/.next/server/pages/500.html +1 -1
  9. package/.next/server/pages/asset-library.html +1 -1
  10. package/.next/server/pages/document-roles.html +1 -1
  11. package/.next/server/pages/documents.html +1 -1
  12. package/.next/server/pages/guide.html +1 -1
  13. package/.next/server/pages/index.html +1 -1
  14. package/.next/server/pages/knowledge/file-detail.html +1 -1
  15. package/.next/server/pages/knowledge/files.html +1 -1
  16. package/.next/server/pages/knowledge/manage.html +1 -1
  17. package/.next/server/pages/knowledge.html +1 -1
  18. package/.next/server/pages/models.html +1 -1
  19. package/.next/server/pages/overview.html +1 -1
  20. package/.next/server/pages/prompt.html +1 -1
  21. package/.next/server/pages/settings.html +1 -1
  22. package/.next/server/pages/system/logs.html +1 -1
  23. package/.next/server/pages-manifest.json +25 -25
  24. package/.next/static/{wB9LaBIYrhSY_zVgmRAhH → -jHL0x9p8AJ8mlNAe865m}/_buildManifest.js +1 -1
  25. package/.next/static/chunks/pages/{_app-34260fc817f32ddc.js → _app-1c5f09be429599e4.js} +2 -2
  26. package/.next/static/chunks/pages/knowledge/{file-detail-b9b728f62832b91c.js → file-detail-f70a35f5b24a5b61.js} +1 -1
  27. package/.next/static/chunks/pages/knowledge/files-1717b23d66330620.js +1 -0
  28. package/.next/static/chunks/pages/prompt-08ecf369f65abdfd.js +1 -0
  29. package/.next/static/chunks/pages/system/logs-a76f9e3131e0cd79.js +1 -0
  30. package/messages/en-US.json +0 -14
  31. package/messages/zh-CN.json +0 -15
  32. package/package.json +1 -1
  33. package/.next/static/chunks/pages/knowledge/files-cf9a04089447fcd8.js +0 -1
  34. package/.next/static/chunks/pages/prompt-09514790e22505cb.js +0 -1
  35. package/.next/static/chunks/pages/system/logs-b274976ce158117c.js +0 -1
  36. /package/.next/static/{wB9LaBIYrhSY_zVgmRAhH → -jHL0x9p8AJ8mlNAe865m}/_ssgManifest.js +0 -0
package/.next/BUILD_ID CHANGED
@@ -1 +1 @@
1
- wB9LaBIYrhSY_zVgmRAhH
1
+ -jHL0x9p8AJ8mlNAe865m
@@ -5,8 +5,8 @@
5
5
  "devFiles": [],
6
6
  "ampDevFiles": [],
7
7
  "lowPriorityFiles": [
8
- "static/wB9LaBIYrhSY_zVgmRAhH/_buildManifest.js",
9
- "static/wB9LaBIYrhSY_zVgmRAhH/_ssgManifest.js"
8
+ "static/-jHL0x9p8AJ8mlNAe865m/_buildManifest.js",
9
+ "static/-jHL0x9p8AJ8mlNAe865m/_ssgManifest.js"
10
10
  ],
11
11
  "rootMainFiles": [],
12
12
  "rootMainFilesTree": {},
@@ -24,7 +24,7 @@
24
24
  "static/chunks/framework-161be364fd69a7ce.js",
25
25
  "static/chunks/main-91fb767ebd74c9c1.js",
26
26
  "static/css/9daa4d0938f1a323.css",
27
- "static/chunks/pages/_app-34260fc817f32ddc.js"
27
+ "static/chunks/pages/_app-1c5f09be429599e4.js"
28
28
  ],
29
29
  "/_error": [
30
30
  "static/chunks/webpack-4224e970a97a4a86.js",
@@ -102,7 +102,7 @@
102
102
  "static/chunks/506-93f730bc149d0dce.js",
103
103
  "static/chunks/850-0f48354694fc6b3e.js",
104
104
  "static/css/ad5a592c79d1448b.css",
105
- "static/chunks/pages/knowledge/file-detail-b9b728f62832b91c.js"
105
+ "static/chunks/pages/knowledge/file-detail-f70a35f5b24a5b61.js"
106
106
  ],
107
107
  "/knowledge/files": [
108
108
  "static/chunks/webpack-4224e970a97a4a86.js",
@@ -115,7 +115,7 @@
115
115
  "static/chunks/7-20bcc985742a9ae1.js",
116
116
  "static/chunks/289-35ac595388bbd018.js",
117
117
  "static/css/ad5a592c79d1448b.css",
118
- "static/chunks/pages/knowledge/files-cf9a04089447fcd8.js"
118
+ "static/chunks/pages/knowledge/files-1717b23d66330620.js"
119
119
  ],
120
120
  "/knowledge/manage": [
121
121
  "static/chunks/webpack-4224e970a97a4a86.js",
@@ -156,7 +156,7 @@
156
156
  "static/chunks/209-5117020514c2bd0c.js",
157
157
  "static/chunks/195-2c0168eacab722d2.js",
158
158
  "static/chunks/187-358527d7061417bf.js",
159
- "static/chunks/pages/prompt-09514790e22505cb.js"
159
+ "static/chunks/pages/prompt-08ecf369f65abdfd.js"
160
160
  ],
161
161
  "/settings": [
162
162
  "static/chunks/webpack-4224e970a97a4a86.js",
@@ -175,7 +175,7 @@
175
175
  "static/chunks/7-20bcc985742a9ae1.js",
176
176
  "static/chunks/195-2c0168eacab722d2.js",
177
177
  "static/chunks/289-35ac595388bbd018.js",
178
- "static/chunks/pages/system/logs-b274976ce158117c.js"
178
+ "static/chunks/pages/system/logs-a76f9e3131e0cd79.js"
179
179
  ]
180
180
  },
181
181
  "ampFirstPages": []
@@ -3,9 +3,9 @@
3
3
  "routes": {},
4
4
  "dynamicRoutes": {},
5
5
  "preview": {
6
- "previewModeId": "fb2beab90be88679e8a23032287ded1f",
7
- "previewModeSigningKey": "6f779a60ec933f0ecef980b8087a2243a34eafddea8843761ab219eced88f95c",
8
- "previewModeEncryptionKey": "c5a146035a8753baa3de751abde1d71948d4dc9630cf06074d373d59fe10fc24"
6
+ "previewModeId": "5cac2684f9fa2f3d6d664c22635c7cf0",
7
+ "previewModeSigningKey": "b7c3c49c012f024e38cd5d4b1aaaa24f3207690375a8257df1d661a33d62a6d4",
8
+ "previewModeEncryptionKey": "59f93e0fa7bbff96130aa8831503504fd5bf9490595913d7f8134c98e06d4f64"
9
9
  },
10
10
  "notFoundRoutes": []
11
11
  }
@@ -131,7 +131,7 @@ ${j.join("\n\n")}`,a.forbidDrawingImages))}function cA(a,b){return Math.min(32e3
131
131
  ${e}`:"","当前章节 Markdown 分片(必须保留并覆盖全部已有内容,不得只基于末尾扩写):",function(a,b){let c=bZ(a,12e3);return 0===c.length?"":1===c.length?c[0]:c.map((a,b)=>`【片段 ${b+1}/${c.length}】
132
132
  ${a}`).join("\n\n")}(a.currentContent,0)].filter(Boolean).join("\n\n"),!1,{maxTokens:a.maxTokens??cA(b,a.targetChars),temperature:.25,signal:a.signal});if(!f||f.length<120)return a.currentContent;let g=Y(R(f.startsWith("## ")?f:`## ${a.chapter.title}
133
133
 
134
- ${f}`,a.forbidDrawingImages));return!function(a,b,c,d,e=Math.ceil(1.12*d)){let f=(0,av.V7)(a),g=(0,av.V7)(b),h=(0,Q.GQ)(c),i=Math.max(0,d-f),j=Math.min(300,Math.max(80,Math.floor(.2*i)));return!(g>e)&&(!(i>0)||!(g<f+j))&&!(g<.98*f)&&(!h||!!b.includes(h))}(a.currentContent,g,a.chapter.title,a.targetChars,c)?a.currentContent:g}function cE(a){let b=Number(process.env.DOCUMENT_SECTION_SUPPLEMENT_ATTEMPTS??2);return Math.max(1,Math.min(3,Number.isFinite(b)?Math.floor(b):2,a))}async function cF(a,b){let c;for(let d=0;d<b;d+=1){let b=await ct({...a,qualityFeedback:c});if(!b){c="上一轮未生成有效正文,请重新生成完整小节正文。";continue}let d=function(a,b){let c=b.replace(/^#{3,4}\s+.*\n+/u,"").split(/\r?\n/u).filter(a=>!/^\s*\|/u.test(a)).filter(a=>!/^\s*\|?\s*:?-{3,}:?/u.test(a)).join("\n"),d=(0,av.V7)(c);return d<360?`正文有效内容不足:${a} 当前约 ${d} 字`:/资料未提供|信息有限|无法确定|待补充|建议扩大本地知识库检索|以下是|本文档|本小节围绕/u.test(c)?`存在空泛或说明性话术:${a}`:void 0}(a.sectionTitle,b);if(!d)return b;c=d}}async function cG(a){let b=b7(a.chapter,a.targetWords),c=new Map(b.map(a=>[a.title,a])),d=(a.forcedSections||[]).filter(b=>b.chapterTitle===a.chapter.title&&(b.planned||["missing_planned_section","empty","too_short","table_only"].includes(b.reason))).map(d=>({title:d.sectionTitle,targetWords:Math.max(c.get(d.sectionTitle)?.targetWords||0,Math.floor(a.targetWords/Math.max(1,b.length||a.forcedSections?.length||1))),forced:!0,reason:d.reason})),e=[...b];for(let a of d)e.some(b=>b.title===a.title)||e.push(a);if(e.length<1)return a.content;let f=a.content,g=new Set(d.map(a=>a.title)),h=e.map(a=>{let b=a.title.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),c=f.match(RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${b}\\s*\\n([\\s\\S]*?)(?=^#{3,4}\\s+|^##\\s+|$)`,"mu")),d=(0,av.V7)(c?.[1]||""),e=g.has(a.title);return{...a,currentWords:d,priority:e?0:d<80?1:2,forced:e}}).filter(a=>a.forced||a.currentWords<Math.max(360,Math.floor(.7*a.targetWords))).sort((a,b)=>a.priority-b.priority||a.currentWords-b.currentWords).slice(0,Math.max(1,Math.min(6,Number(process.env.DOCUMENT_SECTION_REPAIR_MAX_TARGETS??4)))),i=new Map,j=Math.max(1,Math.min(3,h.length||1));for(let b=0;b<h.length;b+=j){let c=h.slice(b,b+j),d=cE(h.length),e=await Promise.all(c.map(async b=>{try{let c=Math.max(0,b.targetWords-b.currentWords),e=Math.max(c,b.forced?Math.ceil(.85*b.targetWords):Math.ceil(.35*b.targetWords));return await cF({...a,evidence:a.evidence,sectionTitle:b.title,targetWords:e,maxWords:Math.ceil(1.25*e),timeoutMs:Math.max(12e4,Math.min(3e5,Math.ceil(.7*cB(e))))},d)}catch{return}}));c.forEach((a,b)=>{i.set(a.title,e[b])})}for(let a of h){let b=i.get(a.title);b&&(f=function(a,b,c){let d=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=RegExp(`(^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${d}\\s*\\n)([\\s\\S]*?)(?=^#{3,4}\\s+|^##\\s+|$)`,"mu"),f=c.trim().replace(/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]+\n+/u,"").trim();return e.test(a)?a.replace(e,(a,b,c)=>{let d=function(a,b){let c=a.trim(),d=b.trim();if(!d)return"";if(/【本小节生成未达标,需重新生成】/u.test(c)||!c)return d;if(c.includes(d))return"";if(d.includes(c))return d.slice(d.indexOf(c)+c.length).trim();let e=c.slice(-240),f=e.length>=80?d.indexOf(e):-1;return f>=0?d.slice(f+e.length).trim():d}(c,f);return/【本小节生成未达标,需重新生成】/u.test(c)?d?`${b}${d}
134
+ ${f}`,a.forbidDrawingImages));return!function(a,b,c,d,e=Math.ceil(1.12*d)){let f=(0,av.V7)(a),g=(0,av.V7)(b),h=(0,Q.GQ)(c),i=Math.max(0,d-f),j=Math.min(300,Math.max(80,Math.floor(.2*i)));return!(g>e)&&(!(i>0)||!(g<f+j))&&!(g<.98*f)&&(!h||!!b.includes(h))}(a.currentContent,g,a.chapter.title,a.targetChars,c)?a.currentContent:g}function cE(a){let b=Number(process.env.DOCUMENT_SECTION_SUPPLEMENT_ATTEMPTS??2);return Math.max(1,Math.min(3,Number.isFinite(b)?Math.floor(b):2,a))}async function cF(a,b){let c;for(let d=0;d<b;d+=1){let b=await ct({...a,qualityFeedback:c});if(!b){c="上一轮未生成有效正文,请重新生成完整小节正文。";continue}let d=function(a,b){let c=b.replace(/^#{3,4}\s+.*\n+/u,"").split(/\r?\n/u).filter(a=>!/^\s*\|/u.test(a)).filter(a=>!/^\s*\|?\s*:?-{3,}:?/u.test(a)).join("\n"),d=(0,av.V7)(c);return d<360?`正文有效内容不足:${a} 当前约 ${d} 字`:/资料未提供|信息有限|无法确定|待补充|建议扩大本地知识库检索|以下是|本文档|本小节围绕/u.test(c)?`存在空泛或说明性话术:${a}`:void 0}(a.sectionTitle,b);if(!d)return b;c=d}}async function cG(a){let b=b7(a.chapter,a.targetWords),c=new Map(b.map(a=>[a.title,a])),d=(a.forcedSections||[]).filter(b=>b.chapterTitle===a.chapter.title&&(b.planned||["missing_planned_section","empty","too_short","table_only"].includes(b.reason))).map(d=>({title:d.sectionTitle,targetWords:Math.max(c.get(d.sectionTitle)?.targetWords||0,Math.floor(a.targetWords/Math.max(1,b.length||a.forcedSections?.length||1))),forced:!0,reason:d.reason})),e=[...b];for(let a of d)e.some(b=>b.title===a.title)||e.push(a);if(e.length<1)return a.content;let f=a.content,g=new Set(d.map(a=>a.title)),h=e.map(a=>{let b=a.title.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),c=f.match(RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${b}\\s*\\n([\\s\\S]*?)(?=^#{3,4}\\s+|^##\\s+|$)`,"mu")),e=(0,av.V7)(c?.[1]||""),h=g.has(a.title);return{...a,currentWords:e,priority:h?0:e<80?1:2,forced:h,reason:d.find(b=>b.title===a.title)?.reason}}).filter(a=>a.forced||a.currentWords<Math.max(360,Math.floor(.7*a.targetWords))).sort((a,b)=>a.priority-b.priority||a.currentWords-b.currentWords),i=Number(process.env.DOCUMENT_SECTION_REPAIR_MAX_TARGETS||0),j=i>0?h.slice(0,i):h,k=new Map,l=Math.max(1,Math.min(3,j.length||1));for(let b=0;b<j.length;b+=l){let c=j.slice(b,b+l),d=cE(j.length),e=await Promise.all(c.map(async b=>{try{let c=Math.max(0,b.targetWords-b.currentWords),e=/概况|范围|工期|质量|安全|危大|资源|材料|设备|验收|清单|图纸|设计/u.test(b.title),f=e?.8:.65,g=e?.5:.35,h=Math.max(280,Math.ceil(b.targetWords*f)),i=Math.max(220,Math.ceil(b.targetWords*g)),j=Math.max(h-b.currentWords,i),k=Math.max(b.forced?j:c,Math.ceil(.35*b.targetWords));return await cF({...a,evidence:a.evidence,sectionTitle:b.title,targetWords:k,maxWords:Math.ceil(1.25*k),timeoutMs:Math.max(12e4,Math.min(3e5,Math.ceil(.7*cB(k))))},d)}catch{return}}));c.forEach((a,b)=>{k.set(a.title,e[b])})}for(let a of j){let b=k.get(a.title);b&&(f=function(a,b,c){let d=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=RegExp(`(^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${d}\\s*\\n)([\\s\\S]*?)(?=^#{3,4}\\s+|^##\\s+|$)`,"mu"),f=c.trim().replace(/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]+\n+/u,"").trim();return e.test(a)?a.replace(e,(a,b,c)=>{let d=function(a,b){let c=a.trim(),d=b.trim();if(!d)return"";if(/【本小节生成未达标,需重新生成】/u.test(c)||!c)return d;if(c.includes(d))return"";if(d.includes(c))return d.slice(d.indexOf(c)+c.length).trim();let e=c.slice(-240),f=e.length>=80?d.indexOf(e):-1;return f>=0?d.slice(f+e.length).trim():d}(c,f);return/【本小节生成未达标,需重新生成】/u.test(c)?d?`${b}${d}
135
135
 
136
136
  `:`${b}${c.trim()}
137
137
 
@@ -181,7 +181,7 @@ ${e.join("\n")}`:"",h.length?`项目基础事实卡片(资料已明确,项
181
181
  ${h.map(a=>`- ${a.key||a.fieldName}:${G((0,ay.lG)(a.value)).slice(0,220)}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`).join("\n")}
182
182
  项目基本信息表必须使用固定表头:| 信息项 | 内容 |,不得使用“序号|项目名称|内容参数”表头,不得输出后台溯源列。`:"",a.factNeedsPrompt||"",g.length?`全局资料事实索引匹配到的本章可写事实:
183
183
  ${g.join("\n")}`:"",i.length?`本章资料中可直接使用的可靠精确参数/编号:${i.join("、")}。这些参数来自绑定资料,不属于编造;涉及对应对象、部位、工序、材料、设备、项目概况、质量验收或安全控制时必须自然写入正文,并保持原样或等价专业表达。项目基础事实中的合同估算价、计划工期可用于项目概况;不得写入报价明细、单价、税率、预留金。`:"",k.length?`当前事实需求仍未充分确认:${k.join("、")}。未确认项不得编造;但已满足事实需求中的资料事实必须写入对应小节。`:"",a.missingFacts.length?`模板显式要求中当前检索未充分命中的项:${a.missingFacts.join("、")}。未命中项不得编造,但不得因此省略上方已经明确的可靠参数。`:"",`本章可用材料来源约 ${j} 个文件,正文必须按事实需求把可用事实内化到对应小节,不得单列后台资料清单。`].filter(Boolean).join("\n")}({chapter:c,plan:d,spec:Y,roleFacts:x,evidence:P,missingFacts:R,indexedFacts:[...al,...ak],resolvedFactNeeds:ac,factNeedsPrompt:function(a){let b=a.map(a=>{let b=a.facts.slice(0,5).map(b=>`${b.key||b.fieldName||a.need.label}=${bu(b.value)}${b.sourceFile?`(${e.basename(b.sourceFile)})`:""}`),c=a.facts.length?[]:(a.evidence||[]).slice(0,2).map(a=>`证据片段:${bu(a.content).slice(0,160)}${a.filePath?`(${e.basename(a.filePath)})`:""}`);return`- ${a.need.required?"必须":"相关"}|${a.need.label}|${a.status}${b.length||c.length?`:${[...b,...c].join(";")}`:":未在已解析资料中确认"}`});return b.length?`事实需求覆盖卡片:
184
- ${b.join("\n")}`:""}(ac)}),ao={total:ac.length,satisfied:ac.filter(a=>"satisfied"===a.status).length,missing:ac.filter(a=>"missing"===a.status).length,lowConfidence:ac.filter(a=>"low_confidence"===a.status).length};for(let a of ad)aO.push(`${c.title}:事实需求未确认 ${a}`);let aq=Y?.chapterRules.find(a=>a.id===c.id||a.title===c.title),ar=b$.chapterTargets.get(c.id)||1200,at=Math.ceil(ar*(b$.maxChars?1.1:1.18)),au=b$.targetChars?Math.min(1800,Math.max(600,Math.floor(.5*ar))):1200,az=Math.max(Math.min(d?.minWords||0,ar),Math.min(aq?.minWords||0,ar),Math.min(Y?.dynamicChapterRule.minWordsPerChapter||0,ar),Math.floor(.78*ar),au),aB=cA(az,ar),aC=Math.min(ar,6e3),aD=Math.max(900,Math.min(ar,Math.ceil(.55*ar),aC)),aE=Math.max(450,Math.min(az,Math.floor(.72*aD))),aF=Math.max(aD+300,Math.min(at,Math.ceil(1.25*aD))),aG=cA(aE,aD),aH=Math.min(cB(aD),18e4),aI=Math.max(900,Math.min(aD,3600)),aN=Math.max(450,Math.min(aE,Math.floor(.72*aI))),aP=Math.max(aI+300,Math.min(at,Math.ceil(1.2*aI))),aQ=cA(aN,aI),aU=Math.min(cB(aI),15e4),aW=c.sections?.filter(Boolean).length||0,aX=/[、,,;;]/u.test(c.title),aY=0!==Number(process.env.DOCUMENT_SECTION_FIRST_GENERATION??1)&&aW>=2&&(b$.longformStrict||!aX);N[j]=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:aY?`${(0,Q.GQ)(c.title)} 正在按小节并发成稿`:`${(0,Q.GQ)(c.title)} 正在整章一次成稿`,details:aY?[...$,`有效证据:${P.length} 条`,`事实需求:${ao.satisfied}/${ao.total} 已满足,缺失 ${ao.missing},低置信 ${ao.lowConfidence}`,`首轮质量目标:约 ${ar} 字${ar!=ar?`,总预算分配约 ${ar} 字`:""},上限约 ${at} 字`,`规划小节:${c.sections?.length||0} 个`,"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...$,`有效证据:${P.length} 条`,`事实需求:${ao.satisfied}/${ao.total} 已满足,缺失 ${ao.missing},低置信 ${ao.lowConfidence}`,`目标字数:约 ${ar} 字,上限约 ${at} 字`,"首次生成必须覆盖章节结构、小节、事实和目标篇幅,后置修复仅兜底"],progress:{current:h+1,total:bn.length,label:aY?"小节并发":"整章成稿"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F();let aZ=aY?Math.min(cB(ar)+3e4,33e4):Math.min(cB(ar),18e4);!function(a,b){try{let c=e.join(a,".dbg","document-generation-timeout.env");if(!f.existsSync(c))return;let d=Object.fromEntries(f.readFileSync(c,"utf8").split(/\r?\n/u).map(a=>a.split("=")).filter(a=>a.length>=2).map(([a,...b])=>[a,b.join("=")])),g=d.DEBUG_SERVER_URL;if(!g)return;fetch(g,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({sessionId:d.DEBUG_SESSION_ID||"document-generation-timeout",runId:"pre",ts:Date.now(),...b})}).catch(()=>void 0)}catch{}}(v,{event:"chapter-generation-start",hypothesisId:"H1",chapterId:c.id,chapterTitle:c.title,useSectionFirst:aY,sectionCount:aW,targetWords:ar,sectionFirstTimeoutMs:aZ,fallbackTargetWords:aD,fallbackTimeoutMs:aH,compactTargetWords:aI,compactTimeoutMs:aU});let a$=aY?await I(()=>bF(b0,`chapter-section-draft:${c.id}`,()=>ba(b=>cz({template:z,chapter:c,evidence:P,missingFacts:R,promptTexts:X,projectContext:bx,requirement:a.requirement,roleContext:V,targetWords:ar,maxWords:at,forbidDrawingImages:U,factCoverageContext:am,projectRoot:v,modelName:a7,fileRolesHash:bb,allowPartialResult:!0,sectionEvidenceProvider:a=>df({manager:A,projectRoot:v,chapter:c,sectionTitle:a,scopedFilePaths:t,fileRoleByPath:ap,fileProcessingByPath:as,signal:b}),diagnostics:b0,signal:b}),aZ,a.signal))):await I(()=>bF(b0,`chapter-draft:${c.id}`,()=>ba(b=>b6(z,c,P,R,X,bx,a.requirement,V,{forbidDrawingImages:U,minWords:az,targetWords:ar,maxWords:at,maxTokens:aB,factCoverageContext:am,signal:b}),cB(ar),a.signal)));if(!a$&&aY)throw N[j]=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"failed",message:`${(0,Q.GQ)(c.title)} 小节并发未在限定时间内返回,已跳过整章重试并标记为章节阻断`,details:["小节优先模式不再执行整章重试,避免单章长时间空等;请优先重试失败小节或降低目标篇幅。"],progress:{current:h+1,total:bn.length,label:"小节超时"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),Error(`${c.title} 小节并发超时,已跳过整章重试`);if(a$||(N[j]=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 整章成稿未完整返回,正在执行整章重试生成`,details:[`目标字数:约 ${ar} 字`,`有效证据:${P.length} 条`],progress:{current:h+1,total:bn.length,label:"整章重试"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),a$=await I(()=>bF(b0,`chapter-draft-fallback:${c.id}`,()=>ba(b=>b6(z,c,P,R,X,bx,a.requirement,V,{forbidDrawingImages:U,minWords:aE,targetWords:aD,maxWords:aF,maxTokens:aG,factCoverageContext:am,signal:b}),aH,a.signal)))),(0,ay.Te)(a.signal),a$||(N[j]=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 正在压缩上下文后重试生成`,details:["已压缩证据与上下文后重新请求模型生成",`目标字数:约 ${ar} 字`],progress:{current:h+1,total:bn.length,label:"紧凑重试"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),a$=await I(()=>bF(b0,`chapter-draft-compact-fallback:${c.id}`,()=>ba(b=>b6(z,c,P,R,X,bx,a.requirement,V,{forbidDrawingImages:U,minWords:aN,targetWords:aI,maxWords:aP,maxTokens:aQ,factCoverageContext:am,signal:b}),aU,a.signal)))),(0,ay.Te)(a.signal),!a$)throw Error(`${c.title} 大模型未返回有效章节正文`);let a_=a$,a3=cQ(a_,c),a6=0,a8=a3.map(a=>`${a.sectionTitle}:${a.reason}:${a.bodyLength}`).join("|");for(;a3.length>0;){a6+=1,N[j]=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 存在 ${a3.length} 个小节缺口,正在按目标缺口强制补写`,details:a3.map(a=>a.message),progress:{current:h+1,total:bn.length,label:`小节补写第 ${a6} 轮`}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C);let b=a_,d=await I(()=>bF(b0,`chapter-section-repair:${c.id}:${a6}`,()=>cG({template:z,chapter:c,content:b,evidence:P,missingFacts:R,promptTexts:X,projectContext:bx,requirement:a.requirement,roleContext:V,targetWords:ar,maxWords:at,forbidDrawingImages:U,factCoverageContext:am,forcedSections:a3,signal:a.signal})));d?.trim()&&(a_=d);let e=(a3=cQ(a_,c)).map(a=>`${a.sectionTitle}:${a.reason}:${a.bodyLength}`).join("|"),f=e!==a8;if(0===a3.length||!f)break;a8=e}a3.length>0&&(N[j]=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"failed",message:`${(0,Q.GQ)(c.title)} 小节补齐仍未完全达标,已标记为阻断问题`,details:a3.map(a=>a.message),progress:{current:h+1,total:bn.length,label:"小节未达标"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C));let a9=bQ({chapter:c,content:a_,missingFacts:R,targetWords:ar}),bc=(0,aw.Ff)(a9);b0.quality.blockingCount+=bc.blocking,b0.quality.importantCount+=bc.important,b0.quality.minorCount+=bc.minor;let bd=bI(a9);if(bd.length>0){let b=a_;N[j]=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 正在根据质量问题修复章节:${bd.length} 个阻断问题`,details:bd,progress:{current:h+1,total:bn.length,label:"章节修复"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C);let d=await I(()=>bF(b0,`chapter-repair:${c.id}`,()=>bR({template:z,chapter:{id:c.id,title:c.title,content:b,evidence:P,missingFacts:[...R,...ad.map(a=>`事实需求未确认:${a}`)],sections:c.sections||[]},issues:bd,promptTexts:X,requirement:a.requirement,forbidDrawingImages:U,diagnostics:b0,signal:a.signal})));a_=d.content,d.appliedCount>0&&(b0.quality.repairedCount+=1),(0,ay.Te)(a.signal)}if(!a_.trim())throw Error(`${(0,Q.GQ)(c.title)} 首次生成失败,未获得可用于定稿的正文`);let be=a_,bf=0;if((0,av.V7)(be)<Math.floor(.82*ar)||bI(bQ({chapter:c,content:be,missingFacts:R,targetWords:ar})).length>0){N[j]=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 首次成稿未达定稿门槛,正在定向扩写`,details:[`当前 ${(0,av.V7)(be)} 字 / 目标 ${Math.floor(.95*ar)} 字`,`章节并发:${b7}`],progress:{current:h+1,total:bn.length,label:"章节扩写"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C);let b=await I(()=>bF(b0,`chapter-expand:${c.id}`,()=>cH({template:z,chapter:c,content:a_,evidence:P,promptTexts:X,requirement:a.requirement,roleContext:V,targetChars:Math.floor(.95*ar),maxChars:at,forbidDrawingImages:U,maxTokens:Math.min(aB,aG),signal:a.signal})));be=b.content,bf=b.rounds}be=c3(be,c);let bg=(0,aw.yw)(be,[{title:c.title,content:be,sections:c.sections||[]}]);bg.length>0&&(N[j]=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 正在小节级定向补写 ${bg.length} 个未达标小节`,details:bg.slice(0,8).map(a=>a.message),progress:{current:h+1,total:bn.length,label:"小节补写"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),be=await I(()=>bF(b0,`section-repair:${c.id}`,()=>cG({template:z,chapter:c,content:be,evidence:P,missingFacts:R,promptTexts:X,projectContext:bx,requirement:a.requirement,roleContext:V,targetWords:Math.max(1200,Math.floor(.35*ar)),maxWords:Math.min(at,Math.max(2400,Math.floor(.55*ar))),forbidDrawingImages:U,factCoverageContext:am,forcedSections:bg,signal:a.signal}))),be=c3(be,c),bg=(0,aw.yw)(be,[{title:c.title,content:be,sections:c.sections||[]}]),0===bg.length&&(b0.quality.repairedCount+=1));let bi=cw({chapter:c,content:be,evidence:P}),bj=(0,av.V7)(be),bk=c.sections?.length?c.sections:ab(be),bv=(0,aw.qK)(be,[{title:c.title,content:be,sections:bk}]).map(a=>a.message),bw=bi.slice(0,6).map(a=>`小节事实密度需优化:${a}`),by=[...bQ({chapter:{...c,sections:bk},content:be,missingFacts:R,targetWords:ar}),...bv,...bw],bz=function(a,b,c=[]){if(a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a)))return"failed";let d=Math.max(1,Math.floor(.95*b));return a<Math.floor(.75*d)?"failed":a<Math.floor(.9*d)||c.length>0?"fallback":"success"}(bj,ar,by);g=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:bz,message:bD(`${(0,Q.GQ)(c.title)} 已由大模型首轮成稿${bf>0?`并定向扩写 ${bf} 轮`:""}:当前 ${bj} 字 / 目标 ${Math.floor(.95*ar)} 字${"success"!==bz?`;风险:${by.join("、")||"篇幅未达标"}`:""}`,i),details:[`达标率:${Math.round(bj/Math.max(1,Math.floor(.95*ar))*100)}%`,...$,`二级小节:${bk.length} 个`,`扩写轮次:${bf}`],progress:{current:h+1,total:bn.length,label:"success"===bz?"章节达标":"章节风险"}},{subtitle:(0,Q.GQ)(c.title),order:h}),aS[h]=g;let bA={id:c.id,title:c.title,content:be,evidence:P,missingFacts:R,sections:bk};aR[h]=bA,C=aR.filter(a=>!!a),F(C);let bE=bQ({chapter:c,content:be,missingFacts:R,targetWords:ar}),bG=(0,aw.Ff)(bE);b0.quality.blockingCount+=bG.blocking,b0.quality.importantCount+=bG.important,b0.quality.minorCount+=bG.minor}catch(b){if(a.signal?.aborted)throw b;console.error(`[gen] chapter ${c.title} failed:`,b),aP.push(`${c.title}:${b instanceof Error?b.message:"生成失败"}`),aS[h]=bB({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,Q.GQ)(c.title)} 生成失败`},{subtitle:(0,Q.GQ)(c.title),order:h})}g&&(N[j]=g),F(C)}))}C=aR.filter(a=>!!a),aQ.push(...aS.filter(a=>!!a));let b8=C.flatMap(a=>a.evidence||[]);if(b8.length>0){aK.push(...b8);let a=J(aK,{maxChars:Math.max(5e4,9e3*bn.length),preservePinned:!0});aK.splice(0,aK.length,...a)}if(0===C.length)throw Error(`章节生成未完成:${aP.join(";")||"没有生成任何有效章节"}`);if(U&&C.length<bn.length)throw Error(`OUTLINE 指定 ${bn.length} 章,实际只生成 ${C.length} 章:${aP.join(";")||"部分章节未生成"}`);(0,ay.Te)(a.signal),bC(N,bB({type:"file_understanding",roleId:"multimodal-files",status:"running",message:"正在理解多模态参考文件"},{subtitle:"多模态参考文件"})),F(C);let b9={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{b9=await b5(v,aK,a.signal)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fileUnderstanding failed:",b)}for(let b of(bC(N,b9.stage),F(C),(0,ay.Te)(a.signal),b9.notes))aK.push({chapterId:"multimodal-file-understanding",filePath:"多模态模型文件理解结果",score:1,content:b,roleId:"multimodal-files",processingType:"reference",source:"multimodal"});let ca=J(aK,{maxItems:Math.max(48,10*bn.length),maxChars:Math.max(52e3,9e3*bn.length),preservePinned:!0});aK.splice(0,aK.length,...ca);let cc=function(a,b,c){let d={};for(let e of(0,E.Uy)(a,c)){let a=b.find(a=>(0,E.I2)(a,e));a&&(d[e.name]=`${a.content.replace(/\s+/gu," ")}(来源:${a.filePath},角色:${a.roleId||"未标注"})`)}return d}(z,aK,Y);for(let a of a5)for(let b of a.facts)cc[b.key]=`${(0,ay.lG)(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let cl=bd(aK,z,Y),cm=bj(aK),cn=bk(aK,Z),co=a5.flatMap(a=>a.facts.map(a=>({key:a.key,value:(0,ay.lG)(a.value),sourceFile:a.sourceFile,roleId:a.roleId,confidence:.9}))),cp={facts:[],stages:[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"已有本地/角色事实覆盖主要必需字段,跳过 LLM 全量事实抽取"}]};if(function(a,b,c){let d=(0,E.Uy)(b,c).filter(a=>a.required);return 0===d.length?a.filter(a=>a.confidence>=.75&&(0,ay.lG)(a.value).trim().length>=2).length<12:d.filter(b=>a.some(a=>(function(a,b){let c=(0,ay.lG)(a.value).trim();if(!c||c.length<2||c.length>220&&a.confidence<.8)return!1;let d=`${a.fieldId||""} ${a.fieldName||""} ${a.key}`.toLowerCase();return!!(d.includes(b.id.toLowerCase())||d.includes(b.name.toLowerCase()))&&("project_basic_fact"===a.roleId||a.roleId?.startsWith("role-")||a.sourceRef?.filePath?a.confidence>=.55:a.confidence>=.75)})(a,b))).length/d.length<.9}([...co,...cl,...cm,...cn],z,Y)){let b=J(aK,{maxItems:48,maxChars:45e3,preservePinned:!0});try{cp=await be(b,al,z,Y,a.signal)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fact extraction failed:",b)}}(0,ay.Te)(a.signal);let cq=function(a,b){let c=b.find(a=>a.filePath)?.filePath||"";return c?a.map(a=>a.sourceFile?a:{...a,sourceFile:c,sourceRef:{filePath:c,roleId:a.sourceRef?.roleId||a.roleId,processingType:a.sourceRef?.processingType||a.processingType,sectionTitle:a.sourceRef?.sectionTitle,chunkIndex:a.sourceRef?.chunkIndex,cellRange:a.sourceRef?.cellRange}}):a}([...co,...cl,...cm,...cn,...cp.facts],aK);for(let a of(bC(N,b9.stage),cp.stages))bC(N,a);F();let cr=bc(aK),cs=aK.filter(a=>"pinned-evidence"===a.source).length,ct=aK.filter(a=>"pinned-evidence"!==a.source&&"bound-file"!==a.source).length,cu=bB({type:"reference",roleId:"quality-enhancement",status:aK.length>0?"success":"skipped",message:`增强贡献:知识库证据 ${aK.length} 条,人工确认/固定证据 ${cs} 条,自动检索证据 ${ct} 条`},{subtitle:"证据与上下文增强"});for(let a of(N.push(cu),F(),cq))cc[a.key]=`${(0,ay.lG)(a.value)}(来源:${a.sourceFile},角色:${a.roleId})`;let cv=new Map;for(let a of aK)cv.set(a.filePath,(cv.get(a.filePath)??0)+1);let cx=new Map;for(let a of aK)cx.set(a.source||"unknown",(cx.get(a.source||"unknown")??0)+1);let cy=[...cv.entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),cC=bv(cq,cr,aO,Y,Z),cD=C.map(a=>{let b=Y.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=(b?.requiredFactIds||[]).map(a=>Y.factFields.find(b=>b.id===a)?.name).filter(Boolean),d=[...new Set([...a.missingFacts||[],...c].filter(Boolean))],e=d.filter(b=>!a.missingFacts.includes(b)),f=d.filter(b=>a.missingFacts.includes(b)),g=+(a.evidence.length>0),h=d.length?e.length/d.length:1;return{chapterId:a.id,title:a.title,requiredFacts:d,coveredFacts:e,missingFacts:f,evidenceCount:a.evidence.length,readinessRate:Math.min(1,.7*h+.3*g)}}),cE=function(a,b=[],c){let e=[],f=[];for(let b of a)0===b.evidence.length&&e.push(`${b.title} 未检索到资料证据`),b.content.length<80&&e.push(`${b.title} 内容较短,建议人工补充或重新生成`);c&&a.length<c.chapters.length&&f.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===(0,d.zY)(c).length&&f.push("模板未绑定任何提示词");let g=new Set(b.map(a=>a.roleId));return c?.fileBindings?.some(a=>"rule"===a.roleId)&&!g.has("rule")&&e.push("rule 角色未抽取到结构化事实"),{passed:0===f.length,warnings:e,errors:f}}(C,cq,z);cE.warnings=[...cE.warnings,..._.warnings],cE.errors=[...cE.errors,..._.blockingIssues];let cF=a5.flatMap(a=>a.warnings.map(a=>({level:/结构化事实读取不足|结构化章节读取不足|兜底|片段/u.test(a)?"info":"warning",message:a,suggestion:"这是资料抽取诊断,不代表已抽取到的可靠参数不可用;生成时仍应优先使用绑定资料中的可靠参数。"}))),cO=aE(function(a,b,c){let d=[...a.errors.map(a=>({level:"error",message:a,suggestion:"请补充配置或资料后重新生成。"})),...a.warnings.map(a=>({level:"warning",message:a,suggestion:"建议人工确认或补充对应资料。"}))];return c.some(a=>/资料未提供|系统暂未从知识库确认/u.test(a.content))&&d.push({level:"warning",message:"存在系统暂未从知识库确认的章节内容",suggestion:"请检查项目角色配置、文件绑定顺序和事实抽取落位结果。"}),b.conflicts.length>0&&d.push(...b.conflicts.map(a=>({level:"warning",message:a,suggestion:"请根据当前模板绑定的角色、文件证据和用户要求复核取值口径。"}))),d}(cE,cC,C),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}(cD),cF),cR=bO(a5,z),cT=Date.now(),cU=(0,av.V7)(C.map(a=>a.content).join("\n\n"));bC(N,bB({type:"validation",roleId:"document-budget",status:"running",message:`正在进行全文预算校准:当前 ${cU} 字`,details:[`章节数:${C.length}`,`目标:${b$.targetChars||b$.targetPages||"按章节深度"}`],progress:{current:1,total:2,label:"预算校准"}},{subtitle:"文档预算"})),F(C);let cV=b_.enableDocumentBudgetExpansion?await I(()=>cI({template:z,chapters:C,budget:b$,promptTexts:ak,requirement:a.requirement,forbidDrawingImages:cR,signal:a.signal})):C;C.splice(0,C.length,...cV);let cW=C.map(a=>a.content).join("\n\n"),cX=c9(C,cq,cW);cX.patchedCount>0&&(C.splice(0,C.length,...cX.chapters),cO=[...cO,{level:"info",message:`已自动补写未落位事实 ${cX.patchedCount} 项`,suggestion:"补写仅使用知识库已确认事实,未补写商务敏感信息或系统暂未确认内容。"}]);let cY=(0,av.fW)(b$,C.map(a=>a.content).join("\n\n")),cZ=[b$.targetChars?`目标 ${b$.targetChars} 字${b$.minChars||b$.maxChars?`(区间 ${b$.minChars||0}-${b$.maxChars||"∞"} 字)`:""}`:void 0,b$.targetPages?`目标 ${b$.targetPages} 页${b$.minPages||b$.maxPages?`(区间 ${b$.minPages||0}-${b$.maxPages||"∞"} 页)`:""}`:void 0].filter(Boolean).join(" / ")||"默认章节深度";bC(N,bB({type:"validation",roleId:"document-budget",status:b$.maxChars&&cY.currentChars>b$.maxChars||b$.minChars&&cY.currentChars<b$.minChars?"fallback":"success",message:bD(`文档预算:当前 ${cY.currentChars} 字,新增 ${Math.max(0,cY.currentChars-cU)} 字,预计 ${cY.estimatedPages} 页;${cZ}`,cT)},{subtitle:"文档预算"})),F(C);let c$=aQ.filter(a=>"chapter_generation"===a.type&&"fallback"===a.status).length,c_=Math.max(0,bn.length-C.length),c5=[...c$>0?[{level:"info",message:`章节生成存在补充完善:${c$} 章`,suggestion:"已保留章节成果;如需更高质量可复核对应章节,但不阻断导出。"}]:[],...c_>0?[{level:"error",message:`部分章节生成失败:${c_} 章`,suggestion:aP.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。"}]:[]],c6=C.flatMap(a=>{let b=bn.find(b=>b.id===a.id);if(!b)return[];let c=cw({chapter:b,content:a.content,evidence:a.evidence||[]});return c.length>0?[{level:"error",message:`${(0,Q.GQ)(a.title)} 小节知识库事实或量化参数落位不足:${c.slice(0,5).join(";")}`,suggestion:"请扩大本地知识库检索并定向补写对应小节,优先使用清单、图纸、招标要求中的原始事实、规格、数量、标准和工期参数。"}]:[]}),c7=(cO=aE(cO,c5,c6)).filter(a=>"error"===a.level&&(0,aw.Nz)(a)).length,dj=[...N];bC(dj,bB({type:"reference",roleId:"knowledge-usage-report",status:"success",message:`资料使用报告:证据 ${aK.length} 条,来源文件 ${cy.length} 份,结构化事实 ${cq.length} 条`,details:[`证据类型:${[...cx.entries()].map(([a,b])=>`${a} ${b}`).join(",")||"无"}`,`索引健康:可用切片 ${az.usableChunkCount} 条,待索引 ${az.pendingJobs} 个,向量 ${az.vectorStatus?.status||"unknown"}`,cX.patchedCount>0?`自动补写事实:${cX.patchedCount}/${cX.missingCount}`:`事实落位补写:0/${cX.missingCount}`]},{subtitle:"资料使用报告"})),bC(dj,bB({type:"reference",roleId:"web-research-report",status:aM.enabled?"success":"skipped",message:aM.enabled?`联网增强:检索章节 ${new Set(aM.chapters).size} 个,查询 ${aM.queries.length} 个,使用公开资料 ${aM.evidenceCount} 条`:"联网增强未开启",details:aM.enabled?[`检索主题:${[...new Set(aM.queries)].join(";")||"无"}`,`过滤结果:${aM.filteredCount} 条`,"公开资料仅用于通用规范、政策、工艺和措施补充,不作为项目事实来源"]:["可在模型配置中开启联网增强"]},{subtitle:"联网增强报告"})),bC(dj,bB({type:"validation",roleId:"document-workflow",status:c7>0?"failed":"success",message:`阻断 ${c7},错误 ${cE.errors.length},警告 ${cE.warnings.length}`},{subtitle:"最终规范校验"})),bC(dj,bB({type:"formatting",roleId:"document-workflow",status:"success",message:"已生成正式排版 Markdown"})),bC(dj,bB({type:"export_ready",roleId:"document-workflow",status:c7>0?"failed":"success",message:c7>0?"导出门禁未通过,请完成阻断问题修复后再导出":"已准备好导出 Markdown/HTML/DOCX/PDF"}));let dk={templateId:z.id,templateName:z.name,title:z.outputTitle,requirement:a.requirement||"",projectRoot:v,projectId:w,exportSettings:z.exportSettings,generationSettings:z.generationSettings,facts:cc,structuredFacts:cq,factsModel:cC,chapters:C,sources:cy,missingItems:[...new Set(aO)],validation:cE,validationIssues:cO,executionStages:dj,exportGate:{passed:0===c7,blockingIssues:cO.filter(a=>"error"===a.level&&(0,aw.Nz)(a)),checklist:[]},assets:[],partialChapters:C.map(a=>({id:a.id,title:a.title,chars:(0,av.V7)(a.content),status:cM(a,b$.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:C,generatedAt:Date.now()},dl=au(dk,{forbidDrawingImages:cR,promptRules:ai});if("1"!==process.env.DOCUMENT_ENABLE_POST_EXPORT_REVIEW){let b,c=at(dl,C,{forbidDrawingImages:cR,promptRules:ai}).chapters.map(a=>{let b=bn.find(b=>b.id===a.id)||a;return{...a,content:c3(a.content,b)}}),d=c0(cS(c2(at(au({...dk,chapters:c},{forbidDrawingImages:cR,promptRules:ai}),c,{forbidDrawingImages:cR,promptRules:ai}).markdown),cq),cq),e=(a,b)=>aE(cO,x({markdown:a,spec:Y,summary:W}),B({markdown:a,facts:cq,summary:W,profile:Z}),y(a,W),c1(a,cq),aW({markdown:a,chapters:b,factsModel:cC,template:z,promptBindings:P,promptDocumentRules:ai}),(0,av.PE)(z.generationSettings||z.exportSettings,a).filter(a=>!(b$.minPages&&/低于目标页数/u.test(a.message))),(0,av.ty)(b$,a)),f=aF(e(d,c)),g=f.filter(a=>"error"===a.level||/提示词要求|正式表格|禁止内容|后台|占位|空小节|缺少规划小节|目录|封面/u.test(a.message)).map(a=>aH(a)).slice(0,24);if(g.length>0){let h=await I(()=>bF(b0,"default-path-quality-repair",()=>bS({markdown:d,template:z,chapters:c,promptTexts:ak,requirement:a.requirement,issues:g,forbidDrawingImages:cR,strategy:b_,diagnostics:b0,signal:a.signal}),{issues:g.length}),dj);if(b=h.stage?{...h.stage,message:`${h.stage.message||"默认路径质量修复完成"};触发问题 ${g.length} 个`}:void 0,h.chapters!==c){c=h.chapters.map(a=>{let b=bn.find(b=>b.id===a.id)||a;return{...a,sections:a.sections||[],content:c3(a.content,b)}});let i=aI(g,f=aF(e(d=c0(cS(c2(at(au({...dk,chapters:c},{forbidDrawingImages:cR,promptRules:ai}),c,{forbidDrawingImages:cR,promptRules:ai}).markdown),cq),cq),c))).slice(0,8);if(i.length>0){let g=await I(()=>bF(b0,"default-path-quality-repair-escalation",()=>bS({markdown:d,template:z,chapters:c,promptTexts:ak,requirement:a.requirement,issues:i,forbidDrawingImages:cR,strategy:b_,diagnostics:b0,signal:a.signal}),{issues:i.length}),dj);g.chapters!==c&&(c=g.chapters.map(a=>{let b=bn.find(b=>b.id===a.id)||a;return{...a,sections:a.sections||[],content:c3(a.content,b)}}),f=aF(e(d=c0(cS(c2(at(au({...dk,chapters:c},{forbidDrawingImages:cR,promptRules:ai}),c,{forbidDrawingImages:cR,promptRules:ai}).markdown),cq),cq),c))),b=bB({type:"llm_review",roleId:"default-repair-verify",status:f.some(a=>i.some(b=>aG(b)===aG(a)))?"fallback":"success",message:`修复后验证闭环完成:升级修复 ${i.length} 个残留问题`,details:i},{subtitle:"修复后验证"})}}}let h=(0,aw.Ai)(f,cC,c),i=dj.map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:h.blockingIssues.length>0?"failed":"success",message:`阻断 ${h.blockingIssues.length},问题 ${f.length}`}:"export_ready"===a.type?{...a,status:h.passed?"success":"failed",message:h.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:a);b&&i.push(b),i.push(bB({type:"llm_review",roleId:"post-export-review",status:"skipped",message:"已跳过导出后的重型 LLM 复审;默认路径已执行本地硬规则校验与必要的精准局部修复;如需开启重型复审请设置 DOCUMENT_ENABLE_POST_EXPORT_REVIEW=1"},{subtitle:"导出后复审"}));let j=c.map(a=>({...a,evidence:J(a.evidence||[],{maxItems:12,maxChars:9e3,preservePinned:!0})}));return{...dk,chapters:j,validationIssues:f,exportGate:h,executionStages:i,partialChapters:c.map(a=>({id:a.id,title:a.title,chars:(0,av.V7)(a.content),status:cM(a,b$.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:j,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:b0},markdown:d}}(0,ay.Te)(a.signal);let dm=C.map(a=>{let b=bQ({chapter:bn.find(b=>b.id===a.id)||{id:a.id,title:a.title,purpose:"",queries:[],requiredFacts:[],sections:a.sections},content:a.content,missingFacts:a.missingFacts,targetWords:b$.chapterTargets.get(a.id)||1200}),c=b.some(a=>/缺少|空小节|只有标题|只有表格|正文篇幅明显低于目标|后台流程话术|占位|requiredFacts/u.test(a));return{chapterId:a.id,title:a.title,status:c?"fail":b.length>0?"warn":"pass",issues:b,suggestions:[],chars:(0,av.V7)(a.content)}}),dn=dm.filter(a=>"pass"!==a.status).length,dp=b_.enableChapterReview&&dn>0;dp&&(bC(dj,bB({type:"llm_review",roleId:"chapter-review",status:"running",message:`正在进行章节级质量审查:${dn}/${C.length} 章存在本地风险`,details:["仅对本地扫描发现风险的生成结果触发 LLM 审查,按风险章节自然并行"],progress:{current:1,total:3,label:"章节审查"}},{subtitle:"章节级质量审查"})),F(C,dj));let dq=dp?await I(()=>bF(b0,"chapter-review",()=>cJ({template:z,chapters:C,budget:b$,promptTexts:am||ak,requirement:a.requirement,strategy:b_,diagnostics:b0,signal:a.signal}),{chapters:C.length}),dj):{summaries:dm,stage:bB({type:"llm_review",roleId:"chapter-review",status:"skipped",message:b_.enableChapterReview?"本地章节扫描未发现需要 LLM 章节审查的问题,已跳过":"当前策略未启用章节级 LLM 审查"},{subtitle:"章节级质量审查"})};dj.push(dq.stage);let dr=dq.summaries,ds=dr.filter(a=>"pass"!==a.status&&a.issues.length>0);if(ds.length>0){bC(dj,bB({type:"llm_review",roleId:"chapter-review-repair",status:"running",message:`正在按章节审查结果就地修复:${ds.length} 章`,details:ds.map(a=>`${a.title}:${a.issues.slice(0,5).join(";")}`),progress:{current:1,total:ds.length,label:"章节就地修复"}},{subtitle:"章节就地修复"})),F(C,dj);let b=new Map,c=0,d=Math.max(1,ds.length||1);for(let e=0;e<ds.length;e+=d){(0,ay.Te)(a.signal);let f=ds.slice(e,e+d);for(let d of(await Promise.all(f.map(async b=>{let c=C.find(a=>a.id===b.chapterId);if(!c)return{chapterId:b.chapterId,content:void 0,appliedCount:0};try{let d=await ba(d=>bR({template:z,chapter:c,issues:b.issues.slice(0,4),promptTexts:am||ak,requirement:a.requirement,forbidDrawingImages:cR,diagnostics:b0,signal:d}),9e4,a.signal);return{chapterId:b.chapterId,content:d?.content,appliedCount:d?.appliedCount||0}}catch{return{chapterId:b.chapterId,content:void 0,appliedCount:0}}}))))d.content&&b.set(d.chapterId,d.content),c+=d.appliedCount}let e=0,f=new Set;for(let a=0;a<C.length;a+=1){let c=b.get(C[a].id);c&&c!==C[a].content&&(C[a]={...C[a],content:c},f.add(C[a].id),e+=1)}e>0&&(dr=dr.map(a=>f.has(a.chapterId)?{...a,status:"warn",issues:[],suggestions:[`已按章节审查结果应用局部修复,修复前问题已移交最终校验复核。`],chars:(0,av.V7)(C.find(b=>b.id===a.chapterId)?.content||"")}:a),dl=au({...dk,chapters:C,validationIssues:cO,executionStages:dj},{forbidDrawingImages:cR,promptRules:ai})),dj.push(bB({type:"llm_review",roleId:"chapter-review-repair",status:"success",message:`章节就地修复完成:修复 ${e} 章,应用 ${c} 个 patch`},{subtitle:"章节就地修复"})),F(C,dj)}if(dp){let a=dr.filter(a=>"pass"!==a.status&&a.issues.length>0).map(a=>({level:"fail"===a.status?"error":"warning",message:`${a.title} 章节审查:共 ${a.issues.length} 个问题;${a.issues.join(";")||"存在质量风险"}`,suggestion:a.suggestions.join(";")||"请复核章节事实覆盖、结构完整性和角色证据覆盖。"}));cO=aE(cO,a)}let dt=b_.enableGlobalReview&&(dp||cO.some(a=>/事实一致性|项目污染|章节缺失|结构/u.test(a.message)));dt&&(bC(dj,bB({type:"llm_review",roleId:"global-consistency-review",status:"running",message:"正在进行全局一致性审查",details:["仅在章节审查或本地校验发现跨章节风险时触发"],progress:{current:2,total:3,label:"全局审查"}},{subtitle:"全局一致性审查"})),F(C,dj));let du=dt?await I(()=>bF(b0,"global-consistency-review",()=>cK({template:z,chapters:C,chapterReviews:dr,promptTexts:am||ak,requirement:a.requirement,projectContext:bx,diagnostics:b0,signal:a.signal}),{chapters:C.length}),dj):{issues:[],stage:bB({type:"llm_review",roleId:"global-consistency-review",status:"skipped",message:b_.enableGlobalReview?"未发现需要 LLM 全局一致性审查的跨章节风险,已跳过":"当前策略未启用全局一致性审查"},{subtitle:"全局一致性审查"})};dj.push(du.stage),cO=aE(cO,du.issues.map(a=>({level:"warning",message:`全局一致性审查:${a}`,suggestion:"请复核跨章节术语、关键事实、范围边界和上下文一致性。"}))),F(C,dj);let dv=C.filter(a=>0===a.evidence.length||a.missingFacts.length>0||(0,av.V7)(a.content)<Math.floor(.7*(b$.chapterTargets.get(a.id)||1200))||dr.some(b=>b.chapterId===a.id&&"fail"===b.status)||bQ({chapter:bn.find(b=>b.id===a.id)||{id:a.id,title:a.title,purpose:"",queries:[],requiredFacts:[],sections:a.sections},content:a.content,missingFacts:a.missingFacts,targetWords:b$.chapterTargets.get(a.id)||1200}).length>0),dw=c7>0||du.issues.length>0||dr.some(a=>"fail"===a.status)||cO.some(a=>/事实一致性|项目污染|章节生成存在兜底|章节生成失败|阻断/u.test(a.message)),dx=b_.enableFinalQualityReview&&(dw||dv.length>Math.max(3,Math.floor(.35*C.length))),dy=Date.now();dx&&(bC(dj,bB({type:"llm_review",roleId:"llm-review",status:"running",message:`正在进行最终质量审查:风险章节 ${dv.length} 个`,details:["只检查结构、事实一致性、目录层级和正式文档风格,不重写正文"],progress:{current:3,total:3,label:"质量审查"}},{subtitle:"最终质量审查"})),F(C,dj));let dz=J(aK,{maxItems:Math.max(32,8*bn.length),maxChars:Math.max(36e3,6e3*bn.length),preservePinned:!0}),dA=dx?await I(()=>cL({template:z,spec:Y,markdown:dl,evidence:dz,promptTexts:am||ak,projectContext:bx,requirement:a.requirement,diagnostics:b0,signal:a.signal}),dj):{markdown:dl,stage:{type:"llm_review",roleId:"llm-review",status:dv.length>0?"fallback":"success",message:dv.length>0?`本地风险扫描发现 ${dv.length} 个低/中风险章节,未达到最终 LLM 审查触发阈值,保留为待复核 warning`:"本地风险扫描未发现需要 LLM 最终质量审查的章节"}};dA.stage.message=bD(dA.stage.message||"LLM 审查完成",dy),(0,ay.Te)(a.signal);let dB=at(dA.markdown===dl?au({...dk,validationIssues:cO,exportGate:dk.exportGate,executionStages:dj},{forbidDrawingImages:cR,promptRules:ai}):dA.markdown,C,{forbidDrawingImages:cR,promptRules:ai}).markdown,dC=ar(dB,z).map(a=>aH(a)),dD=(0,aw.bM)(dB).map(a=>aH(a)),dE=(0,aw.mR)(dB,z).map(a=>aH(a)),dF=(0,aw.N1)(dB,cC).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dG=ai.forbidToc?[]:[...(0,aw.gN)(dB),...(0,aw.f8)(dB)].map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dH=(0,aw.k0)(dB).map(a=>aH(a)),dI=(0,aw.qK)(dB,C).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dJ=(b={markdown:dB,chapters:C,factsModel:cC},[...(0,aw.ji)(b.chapters),...(0,aw.i0)(b.chapters),...(0,aw.ST)(b.chapters),...(0,aw.xX)(b.chapters),...(0,aw.qm)(b.markdown,b.factsModel),...aB(b.markdown,b.factsModel),...aC(b.markdown),...aD(b.chapters),...(0,aw.vY)(b.markdown,b.factsModel)]).map(a=>aH(a)),dK=(0,aw.iC)(dB).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dL=(0,aw.BV)(dB).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dM=function(...a){return a.flat()}(dC,dD,dE,dF,dG,dH,dI,dJ,dK,dL,(0,aw.Ty)(C).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),ad(dB).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`)),dN=new Set(dI),dO=Date.now(),dP=dM.filter(a=>!dN.has(a));bC(dj,bB({type:"llm_review",roleId:"quality-repair",status:dP.length>0?"running":"success",message:dP.length>0?`正在进行精准质量修复:${dP.length} 个问题`:"未发现需要精准修复的问题",details:dP,progress:{current:1,total:Math.max(1,dP.length),label:"质量修复"}},{subtitle:"精准质量修复"})),F(C,dj);let dQ=await I(()=>bF(b0,"local-patch-quality-repair",()=>bS({markdown:dB,template:z,chapters:C,promptTexts:ak,requirement:a.requirement,issues:dP,forbidDrawingImages:cR,strategy:b_,diagnostics:b0,signal:a.signal}),{issues:dP.length}),dj);dQ.stage&&(dQ.stage.message=bD(dQ.stage.message||"质量修复完成",dO)),(0,ay.Te)(a.signal);let dR=dQ.stage?[...dj,dA.stage,dQ.stage]:[...dj,dA.stage],dS=dQ.chapters,dT=au({...dk,chapters:dS,validationIssues:cO,exportGate:dk.exportGate,executionStages:dj},{forbidDrawingImages:cR,promptRules:ai}),dU=aI(dP,[...ar((c={markdown:dT,chapters:dS,template:z,factsModel:cC}).markdown,c.template),...(0,aw.bM)(c.markdown),...(0,aw.k0)(c.markdown),...(0,aw.ji)(c.chapters),...(0,aw.i0)(c.chapters),...(0,aw.ST)(c.chapters),...(0,aw.xX)(c.chapters),...(0,aw.qm)(c.markdown,c.factsModel),...aB(c.markdown,c.factsModel),...aC(c.markdown),...aD(c.chapters),...(0,aw.vY)(c.markdown,c.factsModel)]).slice(0,8);if(dU.length>0){let b=await I(()=>bF(b0,"local-patch-quality-repair-escalation",()=>bS({markdown:dT,template:z,chapters:dS,promptTexts:ak,requirement:a.requirement,issues:dU,forbidDrawingImages:cR,strategy:b_,diagnostics:b0,signal:a.signal}),{issues:dU.length}),dR);dS=b.chapters,dT=au({...dk,chapters:dS,validationIssues:cO,exportGate:dk.exportGate,executionStages:dj},{forbidDrawingImages:cR,promptRules:ai}),dR=b.stage?[...dR,{...b.stage,roleId:"quality-repair-escalation",message:`修复后验证发现残留问题,已升级修复 ${dU.length} 个问题`}]:dR}let dV=(0,aw.yw)(dT,dS).filter(a=>a.planned||"missing_planned_section"===a.reason||"empty"===a.reason||"table_only"===a.reason);if(dV.length>0){let b=Date.now();bC(dR,bB({type:"llm_review",roleId:"section-content-repair",status:"running",message:`正在补写空洞小节:${dV.length} 个问题`,details:dV.map(a=>a.message),progress:{current:1,total:dV.length,label:"小节补写"}},{subtitle:"小节内容补写"})),F(dS,dR);let c=[...dS];for(let b=0;b<dS.length;b+=Math.max(1,dS.length||1)){(0,ay.Te)(a.signal);let d=dS.slice(b,b+Math.max(1,dS.length||1));(await Promise.all(d.map(async b=>{let c=dV.filter(a=>a.chapterTitle===b.title);if(0===c.length)return b;let d=bn.find(a=>a.id===b.id||a.title===b.title)||{id:b.id,title:b.title,purpose:"",queries:[],requiredFacts:[],sections:b.sections},e=b$.chapterTargets.get(b.id)||1200,f=bL(d,bm);try{let g=await ba(g=>cG({template:z,chapter:d,content:b.content,evidence:b.evidence,missingFacts:b.missingFacts,promptTexts:ak,projectContext:bx,requirement:a.requirement,roleContext:bN(a5,d,f),targetWords:e,forbidDrawingImages:cR,forcedSections:c,signal:g}),Math.min(3e5,Math.max(9e4,9e4*c.length)),a.signal);if(!g)return b;let h=b.sections?.length?b.sections:ab(g);return{...b,content:g,markdown:g,sections:h}}catch{return b}}))).forEach((a,d)=>{c[b+d]=a})}dS=c;let d=(0,aw.qK)(au({...dk,chapters:dS,validationIssues:cO,exportGate:dk.exportGate,executionStages:dj},{forbidDrawingImages:cR,promptRules:ai}),dS);bC(dR,bB({type:"llm_review",roleId:"section-content-repair",status:d.length>0?"fallback":"success",message:bD(d.length>0?`小节补写后仍存在 ${d.length} 个内容缺口`:"小节内容补写完成",b),details:d.map(a=>a.message)},{subtitle:"小节内容补写"})),F(dS,dR)}let dW=(0,av.fW)(b$,dS.map(a=>a.content).join("\n\n"));if(b_.enableDocumentBudgetExpansion&&b$.minChars&&dW.currentChars<Math.floor(.9*b$.minChars)&&(!b$.maxChars||dW.currentChars<b$.maxChars)){let b=Date.now(),c=dW.currentChars;bC(dR,bB({type:"validation",roleId:"document-budget-repair",status:"running",message:`正在进行修复后预算补齐:当前 ${c} 字`,details:[`目标下限:${b$.minChars} 字`,`章节数:${dS.length}`],progress:{current:1,total:2,label:"预算补齐"}},{subtitle:"修复后预算补齐"})),F(dS,dR),dS=await I(()=>cI({template:z,chapters:dS,budget:b$,promptTexts:ak,requirement:a.requirement,forbidDrawingImages:cR,signal:a.signal}),dR);let d=(0,av.fW)(b$,dS.map(a=>a.content).join("\n\n"));bC(dR,bB({type:"validation",roleId:"document-budget-repair",status:b$.minChars&&d.currentChars<b$.minChars?"fallback":"success",message:bD(`修复后预算补齐:当前 ${d.currentChars} 字,新增 ${Math.max(0,d.currentChars-c)} 字,预计 ${d.estimatedPages} 页`,b)},{subtitle:"修复后预算补齐"}))}let dX=at(au({...dk,chapters:dS,validationIssues:cO,exportGate:dk.exportGate,executionStages:dj},{forbidDrawingImages:cR,promptRules:ai}),dS,{forbidDrawingImages:cR,promptRules:ai}),dY=dX.chapters,dZ=dX.markdown,d$=dY.map(a=>{let b=dS.find(b=>b.id===a.id||b.title===a.title);return{...a,sections:b?.sections||[]}}),d_=(0,aw.yw)(dZ,d$).filter(a=>a.planned||"missing_planned_section"===a.reason||"empty"===a.reason||"table_only"===a.reason);if(d_.length>0){let b=Date.now();bC(dR,bB({type:"llm_review",roleId:"final-section-content-repair",status:"running",message:`最终结构化后补写残留空洞小节:${d_.length} 个问题`,details:d_.map(a=>a.message),progress:{current:1,total:d_.length,label:"最终小节补写"}},{subtitle:"最终小节内容补写"})),F(dY,dR);let c=[...dY];for(let b=0;b<dY.length;b+=Math.max(1,dY.length||1)){(0,ay.Te)(a.signal);let d=dY.slice(b,b+Math.max(1,dY.length||1));(await Promise.all(d.map(async b=>{let c=d_.filter(a=>a.chapterTitle===b.title);if(0===c.length)return b;let d=bn.find(a=>a.id===b.id||a.title===b.title)||{id:b.id,title:b.title,purpose:"",queries:[],requiredFacts:[],sections:b.sections},e=b$.chapterTargets.get(b.id)||1200,f=bL(d,bm);try{let g=await ba(g=>cG({template:z,chapter:d,content:b.content,evidence:b.evidence,missingFacts:b.missingFacts,promptTexts:ak,projectContext:bx,requirement:a.requirement,roleContext:bN(a5,d,f),targetWords:e,forbidDrawingImages:cR,forcedSections:c,signal:g}),Math.min(3e5,Math.max(9e4,9e4*c.length)),a.signal);if(!g)return b;let h=b.sections?.length?b.sections:ab(g);return{...b,content:g,markdown:g,sections:h}}catch{return b}}))).forEach((a,d)=>{c[b+d]=a})}dY=(dX=at(au({...dk,chapters:c,validationIssues:cO,exportGate:dk.exportGate,executionStages:dj},{forbidDrawingImages:cR,promptRules:ai}),c,{forbidDrawingImages:cR,promptRules:ai})).chapters,dZ=dX.markdown;let d=(0,aw.qK)(dZ,dY);bC(dR,bB({type:"llm_review",roleId:"final-section-content-repair",status:d.length>0?"fallback":"success",message:bD(d.length>0?`最终补写后仍存在 ${d.length} 个内容缺口`:"最终小节内容补写完成",b),details:d.map(a=>a.message)},{subtitle:"最终小节内容补写"})),F(dY,dR)}dY=(dX=at(au({...dk,chapters:dY,validationIssues:cO,exportGate:dk.exportGate,executionStages:dj},{forbidDrawingImages:cR,promptRules:ai}),dY,{forbidDrawingImages:cR,promptRules:ai})).chapters,dZ=c0(cS(dX.markdown,cq),cq);let d0=bz({facts:cq,markdown:dZ});d0.size>0&&dj.push({type:"fact_extraction",roleId:"canonical-facts",status:"success",message:`已决策可信基础事实 ${d0.size} 项`,details:[...d0.values()].map(a=>`${a.label}=${a.value}(${a.source},confidence=${a.confidence})`).slice(0,12)});let d1=[...dC];cO=aE((0,aw.kQ)(Y,[...cO,...d1.map(a=>({level:"warning",message:a}))],cC,dY,dZ,V,P),x({markdown:dZ,spec:Y,summary:W}),B({markdown:dZ,facts:cq,summary:W,profile:Z}),y(dZ,W),c1(dZ,cq),aW({markdown:dZ,chapters:dY,factsModel:cC,template:z,promptBindings:P,promptDocumentRules:ai}));let d2=c9(dY,cq,dZ);d2.patchedCount>0&&(dY=d2.chapters.map(a=>({...a,sections:a.sections||[]})),cO=[...cO,{level:"info",message:`最终审查阶段已补写未落位事实 ${d2.patchedCount} 项`,suggestion:"补写仅使用知识库已确认事实,未补写商务敏感信息或系统暂未确认内容。"}],dZ=at(au({...dk,chapters:dY,validationIssues:cO,exportGate:dk.exportGate,executionStages:dj},{forbidDrawingImages:cR,promptRules:ai}),dY,{forbidDrawingImages:cR,promptRules:ai}).markdown),cO=aE(cO,function(a,b,c={}){return c8(a,b,{maxItems:c.maxIssues}).map(a=>({level:"warning",message:`已确认事实未在正文中落位:${a.label}=${a.value}`,suggestion:"请将该事实自然写入对应章节或小节,不得改变原始数值和单位。"}))}(dZ,[...cq,...cC.preciseFacts],{maxIssues:30})),dZ=at(dZ,dY,{forbidDrawingImages:cR,promptRules:ai}).markdown;let d3=(0,av.ty)(b$,dZ),d4=(0,av.PE)(z.generationSettings||z.exportSettings,dZ).filter(a=>!(b$.minPages&&/低于目标页数/u.test(a.message)));cO=aF(aE(cO,d4,d3,ar(dZ,z),aq(dZ,ai)));let d5=function(a){let b=a.chapters.map(b=>{let c=function(a){let b=["project"];return/进度|工期|节点|部署/u.test(a.title)&&b.push("schedule"),/质量|验收|材料/u.test(a.title)&&b.push("quality","rules"),/安全|文明|风险|危大/u.test(a.title)&&b.push("safety","rules"),/资源|材料|设备|劳动力|机械/u.test(a.title)&&b.push("resources"),/施工|工艺|技术|方案|清单|工程量|图纸/u.test(a.title)&&b.push("quantities"),[...new Set(b)]}(a.templateChapters.find(a=>a.id===b.id||a.title===b.title)||b),d=c.filter(c=>{var d;return d=a.factsModel,("project"===c?d.project.length>0||d.preciseFacts.length>0:"schedule"===c?d.schedule.length>0:"quality"===c?d.quality.length>0||d.specifications.length>0:"safety"===c?d.safety.length>0||d.rules.length>0:"resources"===c?d.resources.length>0||d.bills.length>0:"quantities"===c?d.bills.length>0||d.drawings.length>0||d.tables.length>0:"rules"===c&&(d.rules.length>0||d.specifications.length>0))||(b.evidence||[]).some(a=>RegExp(aX[c]||c,"u").test(`${a.sectionTitle||""} ${a.content||""}`))}),e=c.filter(a=>!d.includes(a)),f=c.length?Math.round(d.length/c.length*100):100;return{chapterId:b.id,title:b.title,requiredDomains:c,confirmedDomains:d,unconfirmedDomains:e,score:f}}),c=new Set(a.evidence.map(a=>a.filePath).filter(Boolean)),d=b.length?Math.round(b.reduce((a,b)=>a+b.score,0)/b.length):100;return{score:d,evidenceCount:a.evidence.length,confirmedFiles:c.size,chapterReports:b,unconfirmedDomains:[...new Set(b.flatMap(a=>a.unconfirmedDomains))],remediation:d>=95?"知识库事实覆盖已达到高置信交付要求。":"系统需扩大本地知识库检索、补抽结构化事实,并将已确认事实落位到对应章节。"}}({chapters:dY,templateChapters:bn,factsModel:cC,evidence:aK}),d6=function(a,b){let c=new Set,d=[];for(let e of[...b.project,...b.schedule,...b.quality,...b.safety,...b.resources,...b.preciseFacts,...b.bills,...b.drawings,...b.rules,...b.specifications]){let b=(0,ay.lG)(e.value).replace(/\s+/gu," ").trim(),f=e.fieldName||e.key||e.fieldId||"资料事实",g=`${f}:${b}`;!b||c.has(g)||(c.add(g),d.push({label:f,value:b,sourceFile:e.sourceFile,status:!function(a,b){let c=aY(a),d=aY(b);return!!(!d||d.length<2||c.includes(d))||(b.match(/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年|万元|元|平方米|㎡|m²|立方米|m³|米|m|mm|cm|台|套|人|项|%|MPa|kPa)?/giu)||[]).some(a=>aY(a).length>=2&&c.includes(aY(a)))}(a,b)?"unplaced":"used",confidence:e.confidence}))}return d}(dZ,cC),d7=(p={chapters:dY,templateChapters:bn,factsModel:cC}).chapters.map(a=>{let b=p.templateChapters.find(b=>b.id===a.id||b.title===a.title),c=function(a,b){let c=`${a.title} ${(b?.sections||a.sections||[]).join(" ")}`;return[{key:"structure",label:"结构完整",passed:(a.sections||b?.sections||[]).length>=2||/###\s+/u.test(a.content)},{key:"depth",label:"内容深度",passed:(0,av.V7)(a.content)>=600},{key:"evidence",label:"证据绑定",passed:(a.evidence||[]).length>0},{key:"professional",label:"专业控制点",passed:/验收|复核|检查|交底|控制点|整改|闭环|台账|进场|工序/u.test(a.content)},{key:"schedule",label:"工期支撑",passed:!/进度|工期|节点/u.test(c)||/工期|节点|计划|纠偏|资源|穿插/u.test(a.content)},{key:"quality",label:"质量验收",passed:!/质量|验收/u.test(c)||/质量|验收|复验|隐蔽|检验批|整改/u.test(a.content)},{key:"safety",label:"安全闭环",passed:!/安全|文明|风险|危大/u.test(c)||/风险|检查|整改|应急|培训|交底/u.test(a.content)}]}(a,b),d=c.filter(a=>a.passed).length;return{chapterId:a.id,title:a.title,score:c.length?Math.round(d/c.length*100):100,checks:c,action:d===c.length?"章节覆盖完整。":"系统需补齐章节结构、证据绑定、专业控制点和跨章依赖。"}});cO=aF(aE(cO,d5.score>=85?[]:[{level:"warning",message:`系统知识库覆盖确认率偏低:${d5.score}%`,suggestion:`${d5.remediation} 未确认事实域:${d5.unconfirmedDomains.map(a=>aX[a]||a).join("、")||"无"}`}],function(a,b={}){return a.filter(a=>"unplaced"===a.status&&/项目|工程|编号|地点|规模|范围|工期|质量|安全|资源|材料|设备|验收|\d/u.test(`${a.label}${a.value}`)).slice(0,b.maxIssues||20).map(a=>({level:"warning",message:`已确认知识库事实未落位:${a.label}=${a.value}`,suggestion:`请将该事实落位到对应章节,并保持来源 ${a.sourceFile||"结构化事实主表"} 的原始口径。`}))}(d6,{maxIssues:20}),d7.filter(a=>a.score<80).map(a=>({level:"warning",message:`章节覆盖不足:${a.title} ${a.score}%`,suggestion:`${a.action} 未通过项:${a.checks.filter(a=>!a.passed).map(a=>a.label).join("、")}`})),aL.filter(a=>a.risk.highRisk&&(0===a.requiredFactTotal?a.evidenceCount<8:a.requiredFactCovered<a.requiredFactTotal)).map(a=>({level:"warning",message:`系统延迟切片召回覆盖需复核:${a.chapterTitle}`,suggestion:`知识库总切片 ${a.risk.totalChunks},当前预加载 ${a.risk.loadedChunks},已启用深召回;事实覆盖 ${a.requiredFactCovered}/${a.requiredFactTotal},小节覆盖 ${a.sectionCovered}/${a.sectionTotal}。`}))));let d8=(0,aw.Ai)(cO,cC,dY),d9=a$({markdown:dZ,chapters:dY,issues:cO,knowledgeCoverage:d5,factTraces:d6,chapterCoverage:d7}),ea=function(a){let b=[],c=a.issues.filter(a=>"error"===a.level);c.length>0&&b.push({priority:"high",title:"阻断问题修复",action:`修复 ${c.length} 个导出阻断问题,优先处理事实冲突、结构缺失、模板规则违规和占位残留。`});let d=(a.factTraces||[]).filter(a=>"unplaced"===a.status).slice(0,10);d.length>0&&b.push({priority:"high",title:"事实落位修复",action:`将 ${d.length} 项已确认知识库事实写入对应章节,保持原始数值、单位和来源口径。`}),a.knowledgeCoverage&&a.knowledgeCoverage.score<95&&b.push({priority:"medium",title:"知识库确认覆盖修复",action:"扩大本地知识库检索范围,执行事实补抽和章节证据重分配;这是系统检索、抽取、落位问题,不要求用户追加资料。"});let e=(a.chapterCoverage||[]).filter(a=>a.score<80).slice(0,8);return e.length>0&&b.push({priority:"medium",title:"章节覆盖修复",action:`补齐低覆盖章节:${e.map(a=>a.title).join("、")}。`}),a.qualityReport&&!a.qualityReport.passed&&b.push({priority:"medium",title:"交付置信度修复",action:a.qualityReport.actions.join(" ")}),b}({issues:cO,qualityReport:d9,knowledgeCoverage:d5,factTraces:d6,chapterCoverage:d7});cO=aF(aE(cO,(q=d9).passed?[]:[{level:"warning",message:`交付置信度未达目标:${q.deliveryProbability}% / ${q.target}%`,suggestion:q.actions.join(" ")}],ea.filter(a=>"high"===a.priority).map(a=>({level:"warning",message:`修复策略待执行:${a.title}`,suggestion:a.action})))),d8=(0,aw.Ai)(cO,cC,dY),d9=a$({markdown:dZ,chapters:dY,issues:cO,knowledgeCoverage:d5,factTraces:d6,chapterCoverage:d7});let eb=[{key:"export-gate",label:"导出门禁",passed:(r={exportGate:d8,qualityReport:d9,repairStrategies:ea}).exportGate.passed,message:r.exportGate.passed?"导出门禁通过":`仍有 ${r.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:r.qualityReport.passed,message:`${r.qualityReport.deliveryProbability}% / ${r.qualityReport.target}%`},{key:"factuality",label:"事实准确性",passed:r.qualityReport.scores.factuality>=85,message:`${r.qualityReport.scores.factuality}/100`},{key:"evidence-coverage",label:"知识库证据覆盖",passed:r.qualityReport.scores.evidenceCoverage>=85,message:`${r.qualityReport.scores.evidenceCoverage}/100`},{key:"professional-depth",label:"专业深度",passed:r.qualityReport.scores.professionalDepth>=80,message:`${r.qualityReport.scores.professionalDepth}/100`},{key:"repair-strategies",label:"修复策略",passed:0===r.repairStrategies.filter(a=>"high"===a.priority).length,message:r.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}],ec=function(a){let b=[...a.diagnostics.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>({name:a.name,durationMs:a.durationMs}));return{llmCalls:a.diagnostics.llm.calls,llmFailures:a.diagnostics.llm.failures,maxParallelLlm:a.diagnostics.llm.maxActive,searchQueries:a.diagnostics.evidence.searchQueries,evidenceContextChars:a.diagnostics.evidence.contextChars,qualityIssues:{...a.diagnostics.quality},slowMetrics:b,elapsedMs:a.startedAt&&a.endedAt?a.endedAt-a.startedAt:void 0}}({diagnostics:b0}),ed=d8.blockingIssues.length,ee=(0,aw.Ff)(cO);b0.quality.blockingCount+=ee.blocking,b0.quality.importantCount+=ee.important,b0.quality.minorCount+=ee.minor;let ef=dR.map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:ed>0?"failed":"success",message:`阻断 ${ed},问题 ${cO.length}`}:"export_ready"===a.type?{...a,status:d8.passed?"success":"failed",message:d8.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:a);ef.push(bB({type:"validation",roleId:"document-delivery-score",status:d9.passed?"success":"fallback",message:d9.summary,details:d9.actions},{subtitle:"交付评分"})),ef.push(bB({type:"reference",roleId:"knowledge-coverage",status:d5.score>=85?"success":"fallback",message:`知识库确认覆盖率:${d5.score}%(证据 ${d5.evidenceCount} 条,文件 ${d5.confirmedFiles} 份)`,details:[d5.remediation]},{subtitle:"知识库覆盖"})),ef.push(bB({type:"validation",roleId:"document-review-checklist",status:eb.every(a=>a.passed)?"success":"fallback",message:`交付复核清单:通过 ${eb.filter(a=>a.passed).length}/${eb.length}`,details:eb.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let eg=[...b0.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(",");ef.push(bB({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${b0.llm.calls} 次,失败 ${b0.llm.failures} 次,峰值并行 ${b0.llm.maxActive},检索 ${b0.evidence.searchQueries} 次/${Math.round(b0.evidence.searchMs/1e3)} 秒,证据上下文 ${b0.evidence.contextChars} 字,噪声过滤 ${b0.evidence.filteredNoise} 条,质量问题 阻断${b0.quality.blockingCount}/重要${b0.quality.importantCount}/轻微${b0.quality.minorCount}${eg?`,Top耗时:${eg}`:""}`},{subtitle:"后台诊断"}));let eh=dY.map(a=>({...a,evidence:J(a.evidence||[],{maxItems:12,maxChars:9e3,preservePinned:!0})}));return{...{...dk,chapters:eh,validationIssues:cO,exportGate:d8,executionStages:ef,partialChapters:dY.map(a=>({id:a.id,title:a.title,chars:(0,av.V7)(a.content),status:cM(a,b$.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:eh,reviewMetadata:{chapterSummaries:dr,globalIssues:du.issues,diagnostics:b0,profile:function(a){let b=`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`,c=[{pattern:/专项施工|危大|专项方案/u,type:"专项施工方案",dimensions:["专项对象边界","工艺参数","风险控制","验收要求","应急措施"]},{pattern:/投标|技术标|响应|招标/u,type:"投标技术方案",dimensions:["招标响应","技术优势","工期质量安全承诺","资源保障","履约可实施性"]},{pattern:/监理|旁站|巡视|平行检验/u,type:"监理规划/细则",dimensions:["监理目标","旁站巡视","平行检验","验收程序","资料签认"]},{pattern:/可研|可行性|项目建议书|投资估算/u,type:"可研/项目建议类文档",dimensions:["建设必要性","方案比选","投资估算","风险分析","实施效益"]},{pattern:/运维|维护|保养|巡检/u,type:"运维维护方案",dimensions:["巡检频次","维护流程","故障响应","备品备件","记录闭环"]}].find(a=>a.pattern.test(b));return{type:c?.type||"施工组织设计/施工技术方案",dimensions:c?.dimensions||["工程概况","施工部署","进度质量安全","资源配置","施工工艺和验收闭环"],requiredEvidencePolicy:"本地知识库为完整事实源;系统暂未确认的事实必须通过扩大检索、事实补抽或落位修复解决,不得归因为用户资料缺失。"}}({template:z,chapters:bn,requirement:a.requirement}),knowledgeCoverage:d5,factTraces:d6,chapterCoverage:d7,retrievalCoverage:aL,qualityReport:d9,repairStrategies:ea,reviewChecklist:eb,workflowVersion:a_,telemetry:ec}},markdown:dZ}}async function dk(a){let b=(0,d.QJ)(a.templateId);if(!b)throw Error("Document template not found");let c=b.chapters.find(b=>b.id===a.chapterId);if(!c)throw Error("Document chapter not found");let f=e.resolve(a.projectRoot||(0,h.aY)());if(!f)throw Error("No knowledge base project found");let g=(0,h.Qh)(),i=(0,d.Vh)(b),k=bV(f,i),l=(0,j.XB)("file"),m=new Map(i.flatMap(a=>bT(f,a.filePath).map(b=>[b,a.roleId]))),n=new Map(i.flatMap(a=>bT(f,a.filePath).map(b=>[b,l.find(b=>b.id===a.roleId)?.processingType||"reference"]))),o=di(await g.getProject(f),[...k],a.maxEvidencePerChapter),p=[],q=[...k].filter(Boolean).sort(),r=dc(c,c.queries,[]),s=dd(c,[]);for(let a of r.slice(0,s)){let b=await g.search(f,a,{scope:"project",filters:{filePaths:q},limit:Math.min(o,12),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});p.push(...b.results.filter(a=>bU(f,a.filePath,k)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:m.get(a.filePath),processingType:n.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let t=db(c,p.filter(a=>bU(f,a.filePath,k)),{maxItems:de(o,c),maxChars:16e3,preservePinned:!0}),u=a.currentMarkdown||"",v=new Set(a.existingFacts??[]),w=c.requiredFacts.filter(a=>!v.has(a)&&!t.some(b=>(0,E.Lk)(b,a))),x=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",u?`> 当前文档上下文摘要:${u.replace(/\s+/gu," ")}`:"",t.length>0?`本章根据知识库资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`:"系统暂未检索到足够证据,建议扩大本地知识库检索后复核。","",t.length>0?"### 资料依据":"",...t.map(K),"",w.length>0?"### 待确认事项":"",...w.map(a=>`- ${a}:建议扩大本地知识库检索、事实补抽或人工复核系统落位结果。`)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:x,evidence:t,missingFacts:w}}},44533:(a,b,c)=>{c.d(b,{Qh:()=>l,VS:()=>p,Yy:()=>o,aY:()=>n});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021);let j=null;function k(){return g.join(h.homedir(),".customize-agent")}function l(){return j||(j=new d.MultiProjectManager(k())),j}function m(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))&&(b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function n(){let a=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(a&&i.existsSync(a)&&!m(a))return g.resolve(a);let b=function(){let a=g.join(k(),"projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!m(a))}finally{b.close()}}();return b.length>0?b[0]:process.env.INIT_CWD&&!m(process.env.INIT_CWD)?process.env.INIT_CWD:g.resolve(process.cwd(),"../..")}function o(a,b={}){let c=new Map;for(let b of function(a){let b=g.join(h.homedir(),".customize-agent","projects",(0,d.computeProjectId)(g.resolve(a)),"kb.db");if(!i.existsSync(b))return[];let c=new d.IndexStateStore(b);try{return c.listRecords().map(a=>({...a,matchedBy:"metadata"}))}finally{c.close()}}(a))c.set(b.relativePath,b);for(let b of function(a){let b=g.join(a,"knowledgeBase");if(!i.existsSync(b))return[];let c=[],d=a=>{for(let e of i.readdirSync(a,{withFileTypes:!0})){let f=g.join(a,e.name);if(e.isDirectory()){d(f);continue}if(e.name.endsWith(".source.txt"))continue;let h=i.statSync(f),j=g.relative(b,f).split(g.sep).join("/");c.push({relativePath:j,category:j.includes("表格数据/")?"spreadsheet":j.includes("图片素材/")?"image":j.includes("图纸文件/")?"cad":j.includes("文档资料/")?"document":"other",format:g.extname(j).slice(1).toLowerCase()||"text",contentHash:"",fileSize:h.size,mtime:h.mtimeMs,chunkCount:0,collectionName:"",indexedAt:0,lastVerifiedAt:0,status:"disk",matchedBy:"disk"})}};return d(b),c}(a)){let a=c.get(b.relativePath);c.set(b.relativePath,a?{...a,fileSize:b.fileSize,mtime:b.mtime,matchedBy:"metadata"}:b)}return Array.from(c.values()).filter(a=>!b.category||a.category===b.category).sort((a,b)=>b.mtime-a.mtime||a.relativePath.localeCompare(b.relativePath,"zh-CN"))}async function p(a,b={}){let c=(b.query||"").trim(),d=Math.max(1,Math.min(500,b.limit??50)),e=new Map,f=o(a,{category:b.category});for(let a of f)(!c||`${a.relativePath}
184
+ ${b.join("\n")}`:""}(ac)}),ao={total:ac.length,satisfied:ac.filter(a=>"satisfied"===a.status).length,missing:ac.filter(a=>"missing"===a.status).length,lowConfidence:ac.filter(a=>"low_confidence"===a.status).length};for(let a of ad)aO.push(`${c.title}:事实需求未确认 ${a}`);let aq=Y?.chapterRules.find(a=>a.id===c.id||a.title===c.title),ar=b$.chapterTargets.get(c.id)||1200,at=Math.ceil(ar*(b$.maxChars?1.1:1.18)),au=b$.targetChars?Math.min(1800,Math.max(600,Math.floor(.5*ar))):1200,az=Math.max(Math.min(d?.minWords||0,ar),Math.min(aq?.minWords||0,ar),Math.min(Y?.dynamicChapterRule.minWordsPerChapter||0,ar),Math.floor(.78*ar),au),aB=cA(az,ar),aC=Math.min(ar,6e3),aD=Math.max(900,Math.min(ar,Math.ceil(.55*ar),aC)),aE=Math.max(450,Math.min(az,Math.floor(.72*aD))),aF=Math.max(aD+300,Math.min(at,Math.ceil(1.25*aD))),aG=cA(aE,aD),aH=Math.min(cB(aD),18e4),aI=Math.max(900,Math.min(aD,3600)),aN=Math.max(450,Math.min(aE,Math.floor(.72*aI))),aP=Math.max(aI+300,Math.min(at,Math.ceil(1.2*aI))),aQ=cA(aN,aI),aU=Math.min(cB(aI),15e4),aW=c.sections?.filter(Boolean).length||0,aX=/[、,,;;]/u.test(c.title),aY=0!==Number(process.env.DOCUMENT_SECTION_FIRST_GENERATION??1)&&aW>=2&&(b$.longformStrict||!aX);N[j]=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:aY?`${(0,Q.GQ)(c.title)} 正在按小节并发成稿`:`${(0,Q.GQ)(c.title)} 正在整章一次成稿`,details:aY?[...$,`有效证据:${P.length} 条`,`事实需求:${ao.satisfied}/${ao.total} 已满足,缺失 ${ao.missing},低置信 ${ao.lowConfidence}`,`首轮质量目标:约 ${ar} 字${ar!=ar?`,总预算分配约 ${ar} 字`:""},上限约 ${at} 字`,`规划小节:${c.sections?.length||0} 个`,"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...$,`有效证据:${P.length} 条`,`事实需求:${ao.satisfied}/${ao.total} 已满足,缺失 ${ao.missing},低置信 ${ao.lowConfidence}`,`目标字数:约 ${ar} 字,上限约 ${at} 字`,"首次生成必须覆盖章节结构、小节、事实和目标篇幅,后置修复仅兜底"],progress:{current:h+1,total:bn.length,label:aY?"小节并发":"整章成稿"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F();let aZ=aY?Math.min(cB(ar)+3e4,33e4):Math.min(cB(ar),18e4),a$=aY?await I(()=>bF(b0,`chapter-section-draft:${c.id}`,()=>ba(b=>cz({template:z,chapter:c,evidence:P,missingFacts:R,promptTexts:X,projectContext:bx,requirement:a.requirement,roleContext:V,targetWords:ar,maxWords:at,forbidDrawingImages:U,factCoverageContext:am,projectRoot:v,modelName:a7,fileRolesHash:bb,allowPartialResult:!0,sectionEvidenceProvider:a=>df({manager:A,projectRoot:v,chapter:c,sectionTitle:a,scopedFilePaths:t,fileRoleByPath:ap,fileProcessingByPath:as,signal:b}),diagnostics:b0,signal:b}),aZ,a.signal))):await I(()=>bF(b0,`chapter-draft:${c.id}`,()=>ba(b=>b6(z,c,P,R,X,bx,a.requirement,V,{forbidDrawingImages:U,minWords:az,targetWords:ar,maxWords:at,maxTokens:aB,factCoverageContext:am,signal:b}),cB(ar),a.signal)));if(!a$&&aY)throw N[j]=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"failed",message:`${(0,Q.GQ)(c.title)} 小节并发未在限定时间内返回,已跳过整章重试并标记为章节阻断`,details:["小节优先模式不再执行整章重试,避免单章长时间空等;请优先重试失败小节或降低目标篇幅。"],progress:{current:h+1,total:bn.length,label:"小节超时"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),Error(`${c.title} 小节并发超时,已跳过整章重试`);if(a$||(N[j]=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 整章成稿未完整返回,正在执行整章重试生成`,details:[`目标字数:约 ${ar} 字`,`有效证据:${P.length} 条`],progress:{current:h+1,total:bn.length,label:"整章重试"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),a$=await I(()=>bF(b0,`chapter-draft-fallback:${c.id}`,()=>ba(b=>b6(z,c,P,R,X,bx,a.requirement,V,{forbidDrawingImages:U,minWords:aE,targetWords:aD,maxWords:aF,maxTokens:aG,factCoverageContext:am,signal:b}),aH,a.signal)))),(0,ay.Te)(a.signal),a$||(N[j]=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 正在压缩上下文后重试生成`,details:["已压缩证据与上下文后重新请求模型生成",`目标字数:约 ${ar} 字`],progress:{current:h+1,total:bn.length,label:"紧凑重试"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),a$=await I(()=>bF(b0,`chapter-draft-compact-fallback:${c.id}`,()=>ba(b=>b6(z,c,P,R,X,bx,a.requirement,V,{forbidDrawingImages:U,minWords:aN,targetWords:aI,maxWords:aP,maxTokens:aQ,factCoverageContext:am,signal:b}),aU,a.signal)))),(0,ay.Te)(a.signal),!a$)throw Error(`${c.title} 大模型未返回有效章节正文`);let a_=a$,a3=cQ(a_,c),a6=0,a8=a3.map(a=>`${a.sectionTitle}:${a.reason}:${a.bodyLength}`).join("|");for(;a3.length>0;){a6+=1,N[j]=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 存在 ${a3.length} 个小节缺口,正在按目标缺口强制补写`,details:a3.map(a=>a.message),progress:{current:h+1,total:bn.length,label:`小节补写第 ${a6} 轮`}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C);let b=a_,d=await I(()=>bF(b0,`chapter-section-repair:${c.id}:${a6}`,()=>cG({template:z,chapter:c,content:b,evidence:P,missingFacts:R,promptTexts:X,projectContext:bx,requirement:a.requirement,roleContext:V,targetWords:ar,maxWords:at,forbidDrawingImages:U,factCoverageContext:am,forcedSections:a3,signal:a.signal})));d?.trim()&&(a_=d);let e=(a3=cQ(a_,c)).map(a=>`${a.sectionTitle}:${a.reason}:${a.bodyLength}`).join("|"),f=e!==a8;if(0===a3.length||!f)break;a8=e}a3.length>0&&(N[j]=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"failed",message:`${(0,Q.GQ)(c.title)} 小节补齐仍未完全达标,已标记为阻断问题`,details:a3.map(a=>a.message),progress:{current:h+1,total:bn.length,label:"小节未达标"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C));let a9=bQ({chapter:c,content:a_,missingFacts:R,targetWords:ar}),bc=(0,aw.Ff)(a9);b0.quality.blockingCount+=bc.blocking,b0.quality.importantCount+=bc.important,b0.quality.minorCount+=bc.minor;let bd=bI(a9);if(bd.length>0){let b=a_;N[j]=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 正在根据质量问题修复章节:${bd.length} 个阻断问题`,details:bd,progress:{current:h+1,total:bn.length,label:"章节修复"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C);let d=await I(()=>bF(b0,`chapter-repair:${c.id}`,()=>bR({template:z,chapter:{id:c.id,title:c.title,content:b,evidence:P,missingFacts:[...R,...ad.map(a=>`事实需求未确认:${a}`)],sections:c.sections||[]},issues:bd,promptTexts:X,requirement:a.requirement,forbidDrawingImages:U,diagnostics:b0,signal:a.signal})));a_=d.content,d.appliedCount>0&&(b0.quality.repairedCount+=1),(0,ay.Te)(a.signal)}if(!a_.trim())throw Error(`${(0,Q.GQ)(c.title)} 首次生成失败,未获得可用于定稿的正文`);let be=a_,bf=0;if((0,av.V7)(be)<Math.floor(.82*ar)||bI(bQ({chapter:c,content:be,missingFacts:R,targetWords:ar})).length>0){N[j]=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 首次成稿未达定稿门槛,正在定向扩写`,details:[`当前 ${(0,av.V7)(be)} 字 / 目标 ${Math.floor(.95*ar)} 字`,`章节并发:${b7}`],progress:{current:h+1,total:bn.length,label:"章节扩写"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C);let b=await I(()=>bF(b0,`chapter-expand:${c.id}`,()=>cH({template:z,chapter:c,content:a_,evidence:P,promptTexts:X,requirement:a.requirement,roleContext:V,targetChars:Math.floor(.95*ar),maxChars:at,forbidDrawingImages:U,maxTokens:Math.min(aB,aG),signal:a.signal})));be=b.content,bf=b.rounds}be=c3(be,c);let bg=(0,aw.yw)(be,[{title:c.title,content:be,sections:c.sections||[]}]);!function(a,b){try{let c=["chapter-generation-failure.env","document-generation-timeout.env"].map(b=>e.join(a,".dbg",b)).find(a=>f.existsSync(a));if(!c)return;let d=Object.fromEntries(f.readFileSync(c,"utf8").split(/\r?\n/u).map(a=>a.split("=")).filter(a=>a.length>=2).map(([a,...b])=>[a,b.join("=")])),g=d.DEBUG_SERVER_URL;if(!g)return;fetch(g,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({sessionId:d.DEBUG_SESSION_ID||"chapter-generation-failure",runId:"pre",ts:Date.now(),...b})}).catch(()=>void 0)}catch{}}(v,{event:"section-repair-check",hypothesisId:"H1",chapterId:c.id,chapterTitle:c.title,gapCount:bg.length,gaps:bg.slice(0,10).map(a=>({title:a.sectionTitle,reason:a.reason,message:a.message})),contentChars:(0,av.V7)(be),targetWords:ar}),bg.length>0&&(N[j]=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:"running",message:`${(0,Q.GQ)(c.title)} 正在小节级定向补写 ${bg.length} 个未达标小节`,details:bg.slice(0,8).map(a=>a.message),progress:{current:h+1,total:bn.length,label:"小节补写"}},{subtitle:(0,Q.GQ)(c.title),order:h}),F(C),be=await I(()=>bF(b0,`section-repair:${c.id}`,()=>cG({template:z,chapter:c,content:be,evidence:P,missingFacts:R,promptTexts:X,projectContext:bx,requirement:a.requirement,roleContext:V,targetWords:Math.max(1200,Math.floor(.35*ar)),maxWords:Math.min(at,Math.max(2400,Math.floor(.55*ar))),forbidDrawingImages:U,factCoverageContext:am,forcedSections:bg,signal:a.signal}))),be=c3(be,c),bg=(0,aw.yw)(be,[{title:c.title,content:be,sections:c.sections||[]}]),0===bg.length&&(b0.quality.repairedCount+=1));let bi=cw({chapter:c,content:be,evidence:P}),bj=(0,av.V7)(be),bk=c.sections?.length?c.sections:ab(be),bv=(0,aw.qK)(be,[{title:c.title,content:be,sections:bk}]).map(a=>a.message),bw=bi.slice(0,6).map(a=>`小节事实密度需优化:${a}`),by=[...bQ({chapter:{...c,sections:bk},content:be,missingFacts:R,targetWords:ar}),...bv,...bw],bz=function(a,b,c=[]){if(a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a)))return"failed";let d=Math.max(1,Math.floor(.95*b));return a<Math.floor(.75*d)?"failed":a<Math.floor(.9*d)||c.length>0?"fallback":"success"}(bj,ar,by);g=bB({type:"chapter_generation",roleId:"chapter_generation",promptId:W.primaryPromptId,status:bz,message:bD(`${(0,Q.GQ)(c.title)} 已由大模型首轮成稿${bf>0?`并定向扩写 ${bf} 轮`:""}:当前 ${bj} 字 / 目标 ${Math.floor(.95*ar)} 字${"success"!==bz?`;风险:${by.join("、")||"篇幅未达标"}`:""}`,i),details:[`达标率:${Math.round(bj/Math.max(1,Math.floor(.95*ar))*100)}%`,...$,`二级小节:${bk.length} 个`,`扩写轮次:${bf}`],progress:{current:h+1,total:bn.length,label:"success"===bz?"章节达标":"章节风险"}},{subtitle:(0,Q.GQ)(c.title),order:h}),aS[h]=g;let bA={id:c.id,title:c.title,content:be,evidence:P,missingFacts:R,sections:bk};aR[h]=bA,C=aR.filter(a=>!!a),F(C);let bE=bQ({chapter:c,content:be,missingFacts:R,targetWords:ar}),bG=(0,aw.Ff)(bE);b0.quality.blockingCount+=bG.blocking,b0.quality.importantCount+=bG.important,b0.quality.minorCount+=bG.minor}catch(b){if(a.signal?.aborted)throw b;console.error(`[gen] chapter ${c.title} failed:`,b),aP.push(`${c.title}:${b instanceof Error?b.message:"生成失败"}`),aS[h]=bB({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,Q.GQ)(c.title)} 生成失败`},{subtitle:(0,Q.GQ)(c.title),order:h})}g&&(N[j]=g),F(C)}))}C=aR.filter(a=>!!a),aQ.push(...aS.filter(a=>!!a));let b8=C.flatMap(a=>a.evidence||[]);if(b8.length>0){aK.push(...b8);let a=J(aK,{maxChars:Math.max(5e4,9e3*bn.length),preservePinned:!0});aK.splice(0,aK.length,...a)}if(0===C.length)throw Error(`章节生成未完成:${aP.join(";")||"没有生成任何有效章节"}`);if(U&&C.length<bn.length)throw Error(`OUTLINE 指定 ${bn.length} 章,实际只生成 ${C.length} 章:${aP.join(";")||"部分章节未生成"}`);(0,ay.Te)(a.signal),bC(N,bB({type:"file_understanding",roleId:"multimodal-files",status:"running",message:"正在理解多模态参考文件"},{subtitle:"多模态参考文件"})),F(C);let b9={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{b9=await b5(v,aK,a.signal)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fileUnderstanding failed:",b)}for(let b of(bC(N,b9.stage),F(C),(0,ay.Te)(a.signal),b9.notes))aK.push({chapterId:"multimodal-file-understanding",filePath:"多模态模型文件理解结果",score:1,content:b,roleId:"multimodal-files",processingType:"reference",source:"multimodal"});let ca=J(aK,{maxItems:Math.max(48,10*bn.length),maxChars:Math.max(52e3,9e3*bn.length),preservePinned:!0});aK.splice(0,aK.length,...ca);let cc=function(a,b,c){let d={};for(let e of(0,E.Uy)(a,c)){let a=b.find(a=>(0,E.I2)(a,e));a&&(d[e.name]=`${a.content.replace(/\s+/gu," ")}(来源:${a.filePath},角色:${a.roleId||"未标注"})`)}return d}(z,aK,Y);for(let a of a5)for(let b of a.facts)cc[b.key]=`${(0,ay.lG)(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let cl=bd(aK,z,Y),cm=bj(aK),cn=bk(aK,Z),co=a5.flatMap(a=>a.facts.map(a=>({key:a.key,value:(0,ay.lG)(a.value),sourceFile:a.sourceFile,roleId:a.roleId,confidence:.9}))),cp={facts:[],stages:[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"已有本地/角色事实覆盖主要必需字段,跳过 LLM 全量事实抽取"}]};if(function(a,b,c){let d=(0,E.Uy)(b,c).filter(a=>a.required);return 0===d.length?a.filter(a=>a.confidence>=.75&&(0,ay.lG)(a.value).trim().length>=2).length<12:d.filter(b=>a.some(a=>(function(a,b){let c=(0,ay.lG)(a.value).trim();if(!c||c.length<2||c.length>220&&a.confidence<.8)return!1;let d=`${a.fieldId||""} ${a.fieldName||""} ${a.key}`.toLowerCase();return!!(d.includes(b.id.toLowerCase())||d.includes(b.name.toLowerCase()))&&("project_basic_fact"===a.roleId||a.roleId?.startsWith("role-")||a.sourceRef?.filePath?a.confidence>=.55:a.confidence>=.75)})(a,b))).length/d.length<.9}([...co,...cl,...cm,...cn],z,Y)){let b=J(aK,{maxItems:48,maxChars:45e3,preservePinned:!0});try{cp=await be(b,al,z,Y,a.signal)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fact extraction failed:",b)}}(0,ay.Te)(a.signal);let cq=function(a,b){let c=b.find(a=>a.filePath)?.filePath||"";return c?a.map(a=>a.sourceFile?a:{...a,sourceFile:c,sourceRef:{filePath:c,roleId:a.sourceRef?.roleId||a.roleId,processingType:a.sourceRef?.processingType||a.processingType,sectionTitle:a.sourceRef?.sectionTitle,chunkIndex:a.sourceRef?.chunkIndex,cellRange:a.sourceRef?.cellRange}}):a}([...co,...cl,...cm,...cn,...cp.facts],aK);for(let a of(bC(N,b9.stage),cp.stages))bC(N,a);F();let cr=bc(aK),cs=aK.filter(a=>"pinned-evidence"===a.source).length,ct=aK.filter(a=>"pinned-evidence"!==a.source&&"bound-file"!==a.source).length,cu=bB({type:"reference",roleId:"quality-enhancement",status:aK.length>0?"success":"skipped",message:`增强贡献:知识库证据 ${aK.length} 条,人工确认/固定证据 ${cs} 条,自动检索证据 ${ct} 条`},{subtitle:"证据与上下文增强"});for(let a of(N.push(cu),F(),cq))cc[a.key]=`${(0,ay.lG)(a.value)}(来源:${a.sourceFile},角色:${a.roleId})`;let cv=new Map;for(let a of aK)cv.set(a.filePath,(cv.get(a.filePath)??0)+1);let cx=new Map;for(let a of aK)cx.set(a.source||"unknown",(cx.get(a.source||"unknown")??0)+1);let cy=[...cv.entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),cC=bv(cq,cr,aO,Y,Z),cD=C.map(a=>{let b=Y.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=(b?.requiredFactIds||[]).map(a=>Y.factFields.find(b=>b.id===a)?.name).filter(Boolean),d=[...new Set([...a.missingFacts||[],...c].filter(Boolean))],e=d.filter(b=>!a.missingFacts.includes(b)),f=d.filter(b=>a.missingFacts.includes(b)),g=+(a.evidence.length>0),h=d.length?e.length/d.length:1;return{chapterId:a.id,title:a.title,requiredFacts:d,coveredFacts:e,missingFacts:f,evidenceCount:a.evidence.length,readinessRate:Math.min(1,.7*h+.3*g)}}),cE=function(a,b=[],c){let e=[],f=[];for(let b of a)0===b.evidence.length&&e.push(`${b.title} 未检索到资料证据`),b.content.length<80&&e.push(`${b.title} 内容较短,建议人工补充或重新生成`);c&&a.length<c.chapters.length&&f.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===(0,d.zY)(c).length&&f.push("模板未绑定任何提示词");let g=new Set(b.map(a=>a.roleId));return c?.fileBindings?.some(a=>"rule"===a.roleId)&&!g.has("rule")&&e.push("rule 角色未抽取到结构化事实"),{passed:0===f.length,warnings:e,errors:f}}(C,cq,z);cE.warnings=[...cE.warnings,..._.warnings],cE.errors=[...cE.errors,..._.blockingIssues];let cF=a5.flatMap(a=>a.warnings.map(a=>({level:/结构化事实读取不足|结构化章节读取不足|兜底|片段/u.test(a)?"info":"warning",message:a,suggestion:"这是资料抽取诊断,不代表已抽取到的可靠参数不可用;生成时仍应优先使用绑定资料中的可靠参数。"}))),cO=aE(function(a,b,c){let d=[...a.errors.map(a=>({level:"error",message:a,suggestion:"请补充配置或资料后重新生成。"})),...a.warnings.map(a=>({level:"warning",message:a,suggestion:"建议人工确认或补充对应资料。"}))];return c.some(a=>/资料未提供|系统暂未从知识库确认/u.test(a.content))&&d.push({level:"warning",message:"存在系统暂未从知识库确认的章节内容",suggestion:"请检查项目角色配置、文件绑定顺序和事实抽取落位结果。"}),b.conflicts.length>0&&d.push(...b.conflicts.map(a=>({level:"warning",message:a,suggestion:"请根据当前模板绑定的角色、文件证据和用户要求复核取值口径。"}))),d}(cE,cC,C),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}(cD),cF),cR=bO(a5,z),cT=Date.now(),cU=(0,av.V7)(C.map(a=>a.content).join("\n\n"));bC(N,bB({type:"validation",roleId:"document-budget",status:"running",message:`正在进行全文预算校准:当前 ${cU} 字`,details:[`章节数:${C.length}`,`目标:${b$.targetChars||b$.targetPages||"按章节深度"}`],progress:{current:1,total:2,label:"预算校准"}},{subtitle:"文档预算"})),F(C);let cV=b_.enableDocumentBudgetExpansion?await I(()=>cI({template:z,chapters:C,budget:b$,promptTexts:ak,requirement:a.requirement,forbidDrawingImages:cR,signal:a.signal})):C;C.splice(0,C.length,...cV);let cW=C.map(a=>a.content).join("\n\n"),cX=c9(C,cq,cW);cX.patchedCount>0&&(C.splice(0,C.length,...cX.chapters),cO=[...cO,{level:"info",message:`已自动补写未落位事实 ${cX.patchedCount} 项`,suggestion:"补写仅使用知识库已确认事实,未补写商务敏感信息或系统暂未确认内容。"}]);let cY=(0,av.fW)(b$,C.map(a=>a.content).join("\n\n")),cZ=[b$.targetChars?`目标 ${b$.targetChars} 字${b$.minChars||b$.maxChars?`(区间 ${b$.minChars||0}-${b$.maxChars||"∞"} 字)`:""}`:void 0,b$.targetPages?`目标 ${b$.targetPages} 页${b$.minPages||b$.maxPages?`(区间 ${b$.minPages||0}-${b$.maxPages||"∞"} 页)`:""}`:void 0].filter(Boolean).join(" / ")||"默认章节深度";bC(N,bB({type:"validation",roleId:"document-budget",status:b$.maxChars&&cY.currentChars>b$.maxChars||b$.minChars&&cY.currentChars<b$.minChars?"fallback":"success",message:bD(`文档预算:当前 ${cY.currentChars} 字,新增 ${Math.max(0,cY.currentChars-cU)} 字,预计 ${cY.estimatedPages} 页;${cZ}`,cT)},{subtitle:"文档预算"})),F(C);let c$=aQ.filter(a=>"chapter_generation"===a.type&&"fallback"===a.status).length,c_=Math.max(0,bn.length-C.length),c5=[...c$>0?[{level:"info",message:`章节生成存在补充完善:${c$} 章`,suggestion:"已保留章节成果;如需更高质量可复核对应章节,但不阻断导出。"}]:[],...c_>0?[{level:"error",message:`部分章节生成失败:${c_} 章`,suggestion:aP.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。"}]:[]],c6=C.flatMap(a=>{let b=bn.find(b=>b.id===a.id);if(!b)return[];let c=cw({chapter:b,content:a.content,evidence:a.evidence||[]});return c.length>0?[{level:"error",message:`${(0,Q.GQ)(a.title)} 小节知识库事实或量化参数落位不足:${c.slice(0,5).join(";")}`,suggestion:"请扩大本地知识库检索并定向补写对应小节,优先使用清单、图纸、招标要求中的原始事实、规格、数量、标准和工期参数。"}]:[]}),c7=(cO=aE(cO,c5,c6)).filter(a=>"error"===a.level&&(0,aw.Nz)(a)).length,dj=[...N];bC(dj,bB({type:"reference",roleId:"knowledge-usage-report",status:"success",message:`资料使用报告:证据 ${aK.length} 条,来源文件 ${cy.length} 份,结构化事实 ${cq.length} 条`,details:[`证据类型:${[...cx.entries()].map(([a,b])=>`${a} ${b}`).join(",")||"无"}`,`索引健康:可用切片 ${az.usableChunkCount} 条,待索引 ${az.pendingJobs} 个,向量 ${az.vectorStatus?.status||"unknown"}`,cX.patchedCount>0?`自动补写事实:${cX.patchedCount}/${cX.missingCount}`:`事实落位补写:0/${cX.missingCount}`]},{subtitle:"资料使用报告"})),bC(dj,bB({type:"reference",roleId:"web-research-report",status:aM.enabled?"success":"skipped",message:aM.enabled?`联网增强:检索章节 ${new Set(aM.chapters).size} 个,查询 ${aM.queries.length} 个,使用公开资料 ${aM.evidenceCount} 条`:"联网增强未开启",details:aM.enabled?[`检索主题:${[...new Set(aM.queries)].join(";")||"无"}`,`过滤结果:${aM.filteredCount} 条`,"公开资料仅用于通用规范、政策、工艺和措施补充,不作为项目事实来源"]:["可在模型配置中开启联网增强"]},{subtitle:"联网增强报告"})),bC(dj,bB({type:"validation",roleId:"document-workflow",status:c7>0?"failed":"success",message:`阻断 ${c7},错误 ${cE.errors.length},警告 ${cE.warnings.length}`},{subtitle:"最终规范校验"})),bC(dj,bB({type:"formatting",roleId:"document-workflow",status:"success",message:"已生成正式排版 Markdown"})),bC(dj,bB({type:"export_ready",roleId:"document-workflow",status:c7>0?"failed":"success",message:c7>0?"导出门禁未通过,请完成阻断问题修复后再导出":"已准备好导出 Markdown/HTML/DOCX/PDF"}));let dk={templateId:z.id,templateName:z.name,title:z.outputTitle,requirement:a.requirement||"",projectRoot:v,projectId:w,exportSettings:z.exportSettings,generationSettings:z.generationSettings,facts:cc,structuredFacts:cq,factsModel:cC,chapters:C,sources:cy,missingItems:[...new Set(aO)],validation:cE,validationIssues:cO,executionStages:dj,exportGate:{passed:0===c7,blockingIssues:cO.filter(a=>"error"===a.level&&(0,aw.Nz)(a)),checklist:[]},assets:[],partialChapters:C.map(a=>({id:a.id,title:a.title,chars:(0,av.V7)(a.content),status:cM(a,b$.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:C,generatedAt:Date.now()},dl=au(dk,{forbidDrawingImages:cR,promptRules:ai});if("1"!==process.env.DOCUMENT_ENABLE_POST_EXPORT_REVIEW){let b,c=at(dl,C,{forbidDrawingImages:cR,promptRules:ai}).chapters.map(a=>{let b=bn.find(b=>b.id===a.id)||a;return{...a,content:c3(a.content,b)}}),d=c0(cS(c2(at(au({...dk,chapters:c},{forbidDrawingImages:cR,promptRules:ai}),c,{forbidDrawingImages:cR,promptRules:ai}).markdown),cq),cq),e=(a,b)=>aE(cO,x({markdown:a,spec:Y,summary:W}),B({markdown:a,facts:cq,summary:W,profile:Z}),y(a,W),c1(a,cq),aW({markdown:a,chapters:b,factsModel:cC,template:z,promptBindings:P,promptDocumentRules:ai}),(0,av.PE)(z.generationSettings||z.exportSettings,a).filter(a=>!(b$.minPages&&/低于目标页数/u.test(a.message))),(0,av.ty)(b$,a)),f=aF(e(d,c)),g=f.filter(a=>"error"===a.level||/提示词要求|正式表格|禁止内容|后台|占位|空小节|缺少规划小节|目录|封面/u.test(a.message)).map(a=>aH(a)).slice(0,24);if(g.length>0){let h=await I(()=>bF(b0,"default-path-quality-repair",()=>bS({markdown:d,template:z,chapters:c,promptTexts:ak,requirement:a.requirement,issues:g,forbidDrawingImages:cR,strategy:b_,diagnostics:b0,signal:a.signal}),{issues:g.length}),dj);if(b=h.stage?{...h.stage,message:`${h.stage.message||"默认路径质量修复完成"};触发问题 ${g.length} 个`}:void 0,h.chapters!==c){c=h.chapters.map(a=>{let b=bn.find(b=>b.id===a.id)||a;return{...a,sections:a.sections||[],content:c3(a.content,b)}});let i=aI(g,f=aF(e(d=c0(cS(c2(at(au({...dk,chapters:c},{forbidDrawingImages:cR,promptRules:ai}),c,{forbidDrawingImages:cR,promptRules:ai}).markdown),cq),cq),c))).slice(0,8);if(i.length>0){let g=await I(()=>bF(b0,"default-path-quality-repair-escalation",()=>bS({markdown:d,template:z,chapters:c,promptTexts:ak,requirement:a.requirement,issues:i,forbidDrawingImages:cR,strategy:b_,diagnostics:b0,signal:a.signal}),{issues:i.length}),dj);g.chapters!==c&&(c=g.chapters.map(a=>{let b=bn.find(b=>b.id===a.id)||a;return{...a,sections:a.sections||[],content:c3(a.content,b)}}),f=aF(e(d=c0(cS(c2(at(au({...dk,chapters:c},{forbidDrawingImages:cR,promptRules:ai}),c,{forbidDrawingImages:cR,promptRules:ai}).markdown),cq),cq),c))),b=bB({type:"llm_review",roleId:"default-repair-verify",status:f.some(a=>i.some(b=>aG(b)===aG(a)))?"fallback":"success",message:`修复后验证闭环完成:升级修复 ${i.length} 个残留问题`,details:i},{subtitle:"修复后验证"})}}}let h=(0,aw.Ai)(f,cC,c),i=dj.map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:h.blockingIssues.length>0?"failed":"success",message:`阻断 ${h.blockingIssues.length},问题 ${f.length}`}:"export_ready"===a.type?{...a,status:h.passed?"success":"failed",message:h.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:a);b&&i.push(b),i.push(bB({type:"llm_review",roleId:"post-export-review",status:"skipped",message:"已跳过导出后的重型 LLM 复审;默认路径已执行本地硬规则校验与必要的精准局部修复;如需开启重型复审请设置 DOCUMENT_ENABLE_POST_EXPORT_REVIEW=1"},{subtitle:"导出后复审"}));let j=c.map(a=>({...a,evidence:J(a.evidence||[],{maxItems:12,maxChars:9e3,preservePinned:!0})}));return{...dk,chapters:j,validationIssues:f,exportGate:h,executionStages:i,partialChapters:c.map(a=>({id:a.id,title:a.title,chars:(0,av.V7)(a.content),status:cM(a,b$.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:j,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:b0},markdown:d}}(0,ay.Te)(a.signal);let dm=C.map(a=>{let b=bQ({chapter:bn.find(b=>b.id===a.id)||{id:a.id,title:a.title,purpose:"",queries:[],requiredFacts:[],sections:a.sections},content:a.content,missingFacts:a.missingFacts,targetWords:b$.chapterTargets.get(a.id)||1200}),c=b.some(a=>/缺少|空小节|只有标题|只有表格|正文篇幅明显低于目标|后台流程话术|占位|requiredFacts/u.test(a));return{chapterId:a.id,title:a.title,status:c?"fail":b.length>0?"warn":"pass",issues:b,suggestions:[],chars:(0,av.V7)(a.content)}}),dn=dm.filter(a=>"pass"!==a.status).length,dp=b_.enableChapterReview&&dn>0;dp&&(bC(dj,bB({type:"llm_review",roleId:"chapter-review",status:"running",message:`正在进行章节级质量审查:${dn}/${C.length} 章存在本地风险`,details:["仅对本地扫描发现风险的生成结果触发 LLM 审查,按风险章节自然并行"],progress:{current:1,total:3,label:"章节审查"}},{subtitle:"章节级质量审查"})),F(C,dj));let dq=dp?await I(()=>bF(b0,"chapter-review",()=>cJ({template:z,chapters:C,budget:b$,promptTexts:am||ak,requirement:a.requirement,strategy:b_,diagnostics:b0,signal:a.signal}),{chapters:C.length}),dj):{summaries:dm,stage:bB({type:"llm_review",roleId:"chapter-review",status:"skipped",message:b_.enableChapterReview?"本地章节扫描未发现需要 LLM 章节审查的问题,已跳过":"当前策略未启用章节级 LLM 审查"},{subtitle:"章节级质量审查"})};dj.push(dq.stage);let dr=dq.summaries,ds=dr.filter(a=>"pass"!==a.status&&a.issues.length>0);if(ds.length>0){bC(dj,bB({type:"llm_review",roleId:"chapter-review-repair",status:"running",message:`正在按章节审查结果就地修复:${ds.length} 章`,details:ds.map(a=>`${a.title}:${a.issues.slice(0,5).join(";")}`),progress:{current:1,total:ds.length,label:"章节就地修复"}},{subtitle:"章节就地修复"})),F(C,dj);let b=new Map,c=0,d=Math.max(1,ds.length||1);for(let e=0;e<ds.length;e+=d){(0,ay.Te)(a.signal);let f=ds.slice(e,e+d);for(let d of(await Promise.all(f.map(async b=>{let c=C.find(a=>a.id===b.chapterId);if(!c)return{chapterId:b.chapterId,content:void 0,appliedCount:0};try{let d=await ba(d=>bR({template:z,chapter:c,issues:b.issues.slice(0,4),promptTexts:am||ak,requirement:a.requirement,forbidDrawingImages:cR,diagnostics:b0,signal:d}),9e4,a.signal);return{chapterId:b.chapterId,content:d?.content,appliedCount:d?.appliedCount||0}}catch{return{chapterId:b.chapterId,content:void 0,appliedCount:0}}}))))d.content&&b.set(d.chapterId,d.content),c+=d.appliedCount}let e=0,f=new Set;for(let a=0;a<C.length;a+=1){let c=b.get(C[a].id);c&&c!==C[a].content&&(C[a]={...C[a],content:c},f.add(C[a].id),e+=1)}e>0&&(dr=dr.map(a=>f.has(a.chapterId)?{...a,status:"warn",issues:[],suggestions:[`已按章节审查结果应用局部修复,修复前问题已移交最终校验复核。`],chars:(0,av.V7)(C.find(b=>b.id===a.chapterId)?.content||"")}:a),dl=au({...dk,chapters:C,validationIssues:cO,executionStages:dj},{forbidDrawingImages:cR,promptRules:ai})),dj.push(bB({type:"llm_review",roleId:"chapter-review-repair",status:"success",message:`章节就地修复完成:修复 ${e} 章,应用 ${c} 个 patch`},{subtitle:"章节就地修复"})),F(C,dj)}if(dp){let a=dr.filter(a=>"pass"!==a.status&&a.issues.length>0).map(a=>({level:"fail"===a.status?"error":"warning",message:`${a.title} 章节审查:共 ${a.issues.length} 个问题;${a.issues.join(";")||"存在质量风险"}`,suggestion:a.suggestions.join(";")||"请复核章节事实覆盖、结构完整性和角色证据覆盖。"}));cO=aE(cO,a)}let dt=b_.enableGlobalReview&&(dp||cO.some(a=>/事实一致性|项目污染|章节缺失|结构/u.test(a.message)));dt&&(bC(dj,bB({type:"llm_review",roleId:"global-consistency-review",status:"running",message:"正在进行全局一致性审查",details:["仅在章节审查或本地校验发现跨章节风险时触发"],progress:{current:2,total:3,label:"全局审查"}},{subtitle:"全局一致性审查"})),F(C,dj));let du=dt?await I(()=>bF(b0,"global-consistency-review",()=>cK({template:z,chapters:C,chapterReviews:dr,promptTexts:am||ak,requirement:a.requirement,projectContext:bx,diagnostics:b0,signal:a.signal}),{chapters:C.length}),dj):{issues:[],stage:bB({type:"llm_review",roleId:"global-consistency-review",status:"skipped",message:b_.enableGlobalReview?"未发现需要 LLM 全局一致性审查的跨章节风险,已跳过":"当前策略未启用全局一致性审查"},{subtitle:"全局一致性审查"})};dj.push(du.stage),cO=aE(cO,du.issues.map(a=>({level:"warning",message:`全局一致性审查:${a}`,suggestion:"请复核跨章节术语、关键事实、范围边界和上下文一致性。"}))),F(C,dj);let dv=C.filter(a=>0===a.evidence.length||a.missingFacts.length>0||(0,av.V7)(a.content)<Math.floor(.7*(b$.chapterTargets.get(a.id)||1200))||dr.some(b=>b.chapterId===a.id&&"fail"===b.status)||bQ({chapter:bn.find(b=>b.id===a.id)||{id:a.id,title:a.title,purpose:"",queries:[],requiredFacts:[],sections:a.sections},content:a.content,missingFacts:a.missingFacts,targetWords:b$.chapterTargets.get(a.id)||1200}).length>0),dw=c7>0||du.issues.length>0||dr.some(a=>"fail"===a.status)||cO.some(a=>/事实一致性|项目污染|章节生成存在兜底|章节生成失败|阻断/u.test(a.message)),dx=b_.enableFinalQualityReview&&(dw||dv.length>Math.max(3,Math.floor(.35*C.length))),dy=Date.now();dx&&(bC(dj,bB({type:"llm_review",roleId:"llm-review",status:"running",message:`正在进行最终质量审查:风险章节 ${dv.length} 个`,details:["只检查结构、事实一致性、目录层级和正式文档风格,不重写正文"],progress:{current:3,total:3,label:"质量审查"}},{subtitle:"最终质量审查"})),F(C,dj));let dz=J(aK,{maxItems:Math.max(32,8*bn.length),maxChars:Math.max(36e3,6e3*bn.length),preservePinned:!0}),dA=dx?await I(()=>cL({template:z,spec:Y,markdown:dl,evidence:dz,promptTexts:am||ak,projectContext:bx,requirement:a.requirement,diagnostics:b0,signal:a.signal}),dj):{markdown:dl,stage:{type:"llm_review",roleId:"llm-review",status:dv.length>0?"fallback":"success",message:dv.length>0?`本地风险扫描发现 ${dv.length} 个低/中风险章节,未达到最终 LLM 审查触发阈值,保留为待复核 warning`:"本地风险扫描未发现需要 LLM 最终质量审查的章节"}};dA.stage.message=bD(dA.stage.message||"LLM 审查完成",dy),(0,ay.Te)(a.signal);let dB=at(dA.markdown===dl?au({...dk,validationIssues:cO,exportGate:dk.exportGate,executionStages:dj},{forbidDrawingImages:cR,promptRules:ai}):dA.markdown,C,{forbidDrawingImages:cR,promptRules:ai}).markdown,dC=ar(dB,z).map(a=>aH(a)),dD=(0,aw.bM)(dB).map(a=>aH(a)),dE=(0,aw.mR)(dB,z).map(a=>aH(a)),dF=(0,aw.N1)(dB,cC).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dG=ai.forbidToc?[]:[...(0,aw.gN)(dB),...(0,aw.f8)(dB)].map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dH=(0,aw.k0)(dB).map(a=>aH(a)),dI=(0,aw.qK)(dB,C).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dJ=(b={markdown:dB,chapters:C,factsModel:cC},[...(0,aw.ji)(b.chapters),...(0,aw.i0)(b.chapters),...(0,aw.ST)(b.chapters),...(0,aw.xX)(b.chapters),...(0,aw.qm)(b.markdown,b.factsModel),...aB(b.markdown,b.factsModel),...aC(b.markdown),...aD(b.chapters),...(0,aw.vY)(b.markdown,b.factsModel)]).map(a=>aH(a)),dK=(0,aw.iC)(dB).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dL=(0,aw.BV)(dB).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),dM=function(...a){return a.flat()}(dC,dD,dE,dF,dG,dH,dI,dJ,dK,dL,(0,aw.Ty)(C).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),ad(dB).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`)),dN=new Set(dI),dO=Date.now(),dP=dM.filter(a=>!dN.has(a));bC(dj,bB({type:"llm_review",roleId:"quality-repair",status:dP.length>0?"running":"success",message:dP.length>0?`正在进行精准质量修复:${dP.length} 个问题`:"未发现需要精准修复的问题",details:dP,progress:{current:1,total:Math.max(1,dP.length),label:"质量修复"}},{subtitle:"精准质量修复"})),F(C,dj);let dQ=await I(()=>bF(b0,"local-patch-quality-repair",()=>bS({markdown:dB,template:z,chapters:C,promptTexts:ak,requirement:a.requirement,issues:dP,forbidDrawingImages:cR,strategy:b_,diagnostics:b0,signal:a.signal}),{issues:dP.length}),dj);dQ.stage&&(dQ.stage.message=bD(dQ.stage.message||"质量修复完成",dO)),(0,ay.Te)(a.signal);let dR=dQ.stage?[...dj,dA.stage,dQ.stage]:[...dj,dA.stage],dS=dQ.chapters,dT=au({...dk,chapters:dS,validationIssues:cO,exportGate:dk.exportGate,executionStages:dj},{forbidDrawingImages:cR,promptRules:ai}),dU=aI(dP,[...ar((c={markdown:dT,chapters:dS,template:z,factsModel:cC}).markdown,c.template),...(0,aw.bM)(c.markdown),...(0,aw.k0)(c.markdown),...(0,aw.ji)(c.chapters),...(0,aw.i0)(c.chapters),...(0,aw.ST)(c.chapters),...(0,aw.xX)(c.chapters),...(0,aw.qm)(c.markdown,c.factsModel),...aB(c.markdown,c.factsModel),...aC(c.markdown),...aD(c.chapters),...(0,aw.vY)(c.markdown,c.factsModel)]).slice(0,8);if(dU.length>0){let b=await I(()=>bF(b0,"local-patch-quality-repair-escalation",()=>bS({markdown:dT,template:z,chapters:dS,promptTexts:ak,requirement:a.requirement,issues:dU,forbidDrawingImages:cR,strategy:b_,diagnostics:b0,signal:a.signal}),{issues:dU.length}),dR);dS=b.chapters,dT=au({...dk,chapters:dS,validationIssues:cO,exportGate:dk.exportGate,executionStages:dj},{forbidDrawingImages:cR,promptRules:ai}),dR=b.stage?[...dR,{...b.stage,roleId:"quality-repair-escalation",message:`修复后验证发现残留问题,已升级修复 ${dU.length} 个问题`}]:dR}let dV=(0,aw.yw)(dT,dS).filter(a=>a.planned||"missing_planned_section"===a.reason||"empty"===a.reason||"table_only"===a.reason);if(dV.length>0){let b=Date.now();bC(dR,bB({type:"llm_review",roleId:"section-content-repair",status:"running",message:`正在补写空洞小节:${dV.length} 个问题`,details:dV.map(a=>a.message),progress:{current:1,total:dV.length,label:"小节补写"}},{subtitle:"小节内容补写"})),F(dS,dR);let c=[...dS];for(let b=0;b<dS.length;b+=Math.max(1,dS.length||1)){(0,ay.Te)(a.signal);let d=dS.slice(b,b+Math.max(1,dS.length||1));(await Promise.all(d.map(async b=>{let c=dV.filter(a=>a.chapterTitle===b.title);if(0===c.length)return b;let d=bn.find(a=>a.id===b.id||a.title===b.title)||{id:b.id,title:b.title,purpose:"",queries:[],requiredFacts:[],sections:b.sections},e=b$.chapterTargets.get(b.id)||1200,f=bL(d,bm);try{let g=await ba(g=>cG({template:z,chapter:d,content:b.content,evidence:b.evidence,missingFacts:b.missingFacts,promptTexts:ak,projectContext:bx,requirement:a.requirement,roleContext:bN(a5,d,f),targetWords:e,forbidDrawingImages:cR,forcedSections:c,signal:g}),Math.min(3e5,Math.max(9e4,9e4*c.length)),a.signal);if(!g)return b;let h=b.sections?.length?b.sections:ab(g);return{...b,content:g,markdown:g,sections:h}}catch{return b}}))).forEach((a,d)=>{c[b+d]=a})}dS=c;let d=(0,aw.qK)(au({...dk,chapters:dS,validationIssues:cO,exportGate:dk.exportGate,executionStages:dj},{forbidDrawingImages:cR,promptRules:ai}),dS);bC(dR,bB({type:"llm_review",roleId:"section-content-repair",status:d.length>0?"fallback":"success",message:bD(d.length>0?`小节补写后仍存在 ${d.length} 个内容缺口`:"小节内容补写完成",b),details:d.map(a=>a.message)},{subtitle:"小节内容补写"})),F(dS,dR)}let dW=(0,av.fW)(b$,dS.map(a=>a.content).join("\n\n"));if(b_.enableDocumentBudgetExpansion&&b$.minChars&&dW.currentChars<Math.floor(.9*b$.minChars)&&(!b$.maxChars||dW.currentChars<b$.maxChars)){let b=Date.now(),c=dW.currentChars;bC(dR,bB({type:"validation",roleId:"document-budget-repair",status:"running",message:`正在进行修复后预算补齐:当前 ${c} 字`,details:[`目标下限:${b$.minChars} 字`,`章节数:${dS.length}`],progress:{current:1,total:2,label:"预算补齐"}},{subtitle:"修复后预算补齐"})),F(dS,dR),dS=await I(()=>cI({template:z,chapters:dS,budget:b$,promptTexts:ak,requirement:a.requirement,forbidDrawingImages:cR,signal:a.signal}),dR);let d=(0,av.fW)(b$,dS.map(a=>a.content).join("\n\n"));bC(dR,bB({type:"validation",roleId:"document-budget-repair",status:b$.minChars&&d.currentChars<b$.minChars?"fallback":"success",message:bD(`修复后预算补齐:当前 ${d.currentChars} 字,新增 ${Math.max(0,d.currentChars-c)} 字,预计 ${d.estimatedPages} 页`,b)},{subtitle:"修复后预算补齐"}))}let dX=at(au({...dk,chapters:dS,validationIssues:cO,exportGate:dk.exportGate,executionStages:dj},{forbidDrawingImages:cR,promptRules:ai}),dS,{forbidDrawingImages:cR,promptRules:ai}),dY=dX.chapters,dZ=dX.markdown,d$=dY.map(a=>{let b=dS.find(b=>b.id===a.id||b.title===a.title);return{...a,sections:b?.sections||[]}}),d_=(0,aw.yw)(dZ,d$).filter(a=>a.planned||"missing_planned_section"===a.reason||"empty"===a.reason||"table_only"===a.reason);if(d_.length>0){let b=Date.now();bC(dR,bB({type:"llm_review",roleId:"final-section-content-repair",status:"running",message:`最终结构化后补写残留空洞小节:${d_.length} 个问题`,details:d_.map(a=>a.message),progress:{current:1,total:d_.length,label:"最终小节补写"}},{subtitle:"最终小节内容补写"})),F(dY,dR);let c=[...dY];for(let b=0;b<dY.length;b+=Math.max(1,dY.length||1)){(0,ay.Te)(a.signal);let d=dY.slice(b,b+Math.max(1,dY.length||1));(await Promise.all(d.map(async b=>{let c=d_.filter(a=>a.chapterTitle===b.title);if(0===c.length)return b;let d=bn.find(a=>a.id===b.id||a.title===b.title)||{id:b.id,title:b.title,purpose:"",queries:[],requiredFacts:[],sections:b.sections},e=b$.chapterTargets.get(b.id)||1200,f=bL(d,bm);try{let g=await ba(g=>cG({template:z,chapter:d,content:b.content,evidence:b.evidence,missingFacts:b.missingFacts,promptTexts:ak,projectContext:bx,requirement:a.requirement,roleContext:bN(a5,d,f),targetWords:e,forbidDrawingImages:cR,forcedSections:c,signal:g}),Math.min(3e5,Math.max(9e4,9e4*c.length)),a.signal);if(!g)return b;let h=b.sections?.length?b.sections:ab(g);return{...b,content:g,markdown:g,sections:h}}catch{return b}}))).forEach((a,d)=>{c[b+d]=a})}dY=(dX=at(au({...dk,chapters:c,validationIssues:cO,exportGate:dk.exportGate,executionStages:dj},{forbidDrawingImages:cR,promptRules:ai}),c,{forbidDrawingImages:cR,promptRules:ai})).chapters,dZ=dX.markdown;let d=(0,aw.qK)(dZ,dY);bC(dR,bB({type:"llm_review",roleId:"final-section-content-repair",status:d.length>0?"fallback":"success",message:bD(d.length>0?`最终补写后仍存在 ${d.length} 个内容缺口`:"最终小节内容补写完成",b),details:d.map(a=>a.message)},{subtitle:"最终小节内容补写"})),F(dY,dR)}dY=(dX=at(au({...dk,chapters:dY,validationIssues:cO,exportGate:dk.exportGate,executionStages:dj},{forbidDrawingImages:cR,promptRules:ai}),dY,{forbidDrawingImages:cR,promptRules:ai})).chapters,dZ=c0(cS(dX.markdown,cq),cq);let d0=bz({facts:cq,markdown:dZ});d0.size>0&&dj.push({type:"fact_extraction",roleId:"canonical-facts",status:"success",message:`已决策可信基础事实 ${d0.size} 项`,details:[...d0.values()].map(a=>`${a.label}=${a.value}(${a.source},confidence=${a.confidence})`).slice(0,12)});let d1=[...dC];cO=aE((0,aw.kQ)(Y,[...cO,...d1.map(a=>({level:"warning",message:a}))],cC,dY,dZ,V,P),x({markdown:dZ,spec:Y,summary:W}),B({markdown:dZ,facts:cq,summary:W,profile:Z}),y(dZ,W),c1(dZ,cq),aW({markdown:dZ,chapters:dY,factsModel:cC,template:z,promptBindings:P,promptDocumentRules:ai}));let d2=c9(dY,cq,dZ);d2.patchedCount>0&&(dY=d2.chapters.map(a=>({...a,sections:a.sections||[]})),cO=[...cO,{level:"info",message:`最终审查阶段已补写未落位事实 ${d2.patchedCount} 项`,suggestion:"补写仅使用知识库已确认事实,未补写商务敏感信息或系统暂未确认内容。"}],dZ=at(au({...dk,chapters:dY,validationIssues:cO,exportGate:dk.exportGate,executionStages:dj},{forbidDrawingImages:cR,promptRules:ai}),dY,{forbidDrawingImages:cR,promptRules:ai}).markdown),cO=aE(cO,function(a,b,c={}){return c8(a,b,{maxItems:c.maxIssues}).map(a=>({level:"warning",message:`已确认事实未在正文中落位:${a.label}=${a.value}`,suggestion:"请将该事实自然写入对应章节或小节,不得改变原始数值和单位。"}))}(dZ,[...cq,...cC.preciseFacts],{maxIssues:30})),dZ=at(dZ,dY,{forbidDrawingImages:cR,promptRules:ai}).markdown;let d3=(0,av.ty)(b$,dZ),d4=(0,av.PE)(z.generationSettings||z.exportSettings,dZ).filter(a=>!(b$.minPages&&/低于目标页数/u.test(a.message)));cO=aF(aE(cO,d4,d3,ar(dZ,z),aq(dZ,ai)));let d5=function(a){let b=a.chapters.map(b=>{let c=function(a){let b=["project"];return/进度|工期|节点|部署/u.test(a.title)&&b.push("schedule"),/质量|验收|材料/u.test(a.title)&&b.push("quality","rules"),/安全|文明|风险|危大/u.test(a.title)&&b.push("safety","rules"),/资源|材料|设备|劳动力|机械/u.test(a.title)&&b.push("resources"),/施工|工艺|技术|方案|清单|工程量|图纸/u.test(a.title)&&b.push("quantities"),[...new Set(b)]}(a.templateChapters.find(a=>a.id===b.id||a.title===b.title)||b),d=c.filter(c=>{var d;return d=a.factsModel,("project"===c?d.project.length>0||d.preciseFacts.length>0:"schedule"===c?d.schedule.length>0:"quality"===c?d.quality.length>0||d.specifications.length>0:"safety"===c?d.safety.length>0||d.rules.length>0:"resources"===c?d.resources.length>0||d.bills.length>0:"quantities"===c?d.bills.length>0||d.drawings.length>0||d.tables.length>0:"rules"===c&&(d.rules.length>0||d.specifications.length>0))||(b.evidence||[]).some(a=>RegExp(aX[c]||c,"u").test(`${a.sectionTitle||""} ${a.content||""}`))}),e=c.filter(a=>!d.includes(a)),f=c.length?Math.round(d.length/c.length*100):100;return{chapterId:b.id,title:b.title,requiredDomains:c,confirmedDomains:d,unconfirmedDomains:e,score:f}}),c=new Set(a.evidence.map(a=>a.filePath).filter(Boolean)),d=b.length?Math.round(b.reduce((a,b)=>a+b.score,0)/b.length):100;return{score:d,evidenceCount:a.evidence.length,confirmedFiles:c.size,chapterReports:b,unconfirmedDomains:[...new Set(b.flatMap(a=>a.unconfirmedDomains))],remediation:d>=95?"知识库事实覆盖已达到高置信交付要求。":"系统需扩大本地知识库检索、补抽结构化事实,并将已确认事实落位到对应章节。"}}({chapters:dY,templateChapters:bn,factsModel:cC,evidence:aK}),d6=function(a,b){let c=new Set,d=[];for(let e of[...b.project,...b.schedule,...b.quality,...b.safety,...b.resources,...b.preciseFacts,...b.bills,...b.drawings,...b.rules,...b.specifications]){let b=(0,ay.lG)(e.value).replace(/\s+/gu," ").trim(),f=e.fieldName||e.key||e.fieldId||"资料事实",g=`${f}:${b}`;!b||c.has(g)||(c.add(g),d.push({label:f,value:b,sourceFile:e.sourceFile,status:!function(a,b){let c=aY(a),d=aY(b);return!!(!d||d.length<2||c.includes(d))||(b.match(/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年|万元|元|平方米|㎡|m²|立方米|m³|米|m|mm|cm|台|套|人|项|%|MPa|kPa)?/giu)||[]).some(a=>aY(a).length>=2&&c.includes(aY(a)))}(a,b)?"unplaced":"used",confidence:e.confidence}))}return d}(dZ,cC),d7=(p={chapters:dY,templateChapters:bn,factsModel:cC}).chapters.map(a=>{let b=p.templateChapters.find(b=>b.id===a.id||b.title===a.title),c=function(a,b){let c=`${a.title} ${(b?.sections||a.sections||[]).join(" ")}`;return[{key:"structure",label:"结构完整",passed:(a.sections||b?.sections||[]).length>=2||/###\s+/u.test(a.content)},{key:"depth",label:"内容深度",passed:(0,av.V7)(a.content)>=600},{key:"evidence",label:"证据绑定",passed:(a.evidence||[]).length>0},{key:"professional",label:"专业控制点",passed:/验收|复核|检查|交底|控制点|整改|闭环|台账|进场|工序/u.test(a.content)},{key:"schedule",label:"工期支撑",passed:!/进度|工期|节点/u.test(c)||/工期|节点|计划|纠偏|资源|穿插/u.test(a.content)},{key:"quality",label:"质量验收",passed:!/质量|验收/u.test(c)||/质量|验收|复验|隐蔽|检验批|整改/u.test(a.content)},{key:"safety",label:"安全闭环",passed:!/安全|文明|风险|危大/u.test(c)||/风险|检查|整改|应急|培训|交底/u.test(a.content)}]}(a,b),d=c.filter(a=>a.passed).length;return{chapterId:a.id,title:a.title,score:c.length?Math.round(d/c.length*100):100,checks:c,action:d===c.length?"章节覆盖完整。":"系统需补齐章节结构、证据绑定、专业控制点和跨章依赖。"}});cO=aF(aE(cO,d5.score>=85?[]:[{level:"warning",message:`系统知识库覆盖确认率偏低:${d5.score}%`,suggestion:`${d5.remediation} 未确认事实域:${d5.unconfirmedDomains.map(a=>aX[a]||a).join("、")||"无"}`}],function(a,b={}){return a.filter(a=>"unplaced"===a.status&&/项目|工程|编号|地点|规模|范围|工期|质量|安全|资源|材料|设备|验收|\d/u.test(`${a.label}${a.value}`)).slice(0,b.maxIssues||20).map(a=>({level:"warning",message:`已确认知识库事实未落位:${a.label}=${a.value}`,suggestion:`请将该事实落位到对应章节,并保持来源 ${a.sourceFile||"结构化事实主表"} 的原始口径。`}))}(d6,{maxIssues:20}),d7.filter(a=>a.score<80).map(a=>({level:"warning",message:`章节覆盖不足:${a.title} ${a.score}%`,suggestion:`${a.action} 未通过项:${a.checks.filter(a=>!a.passed).map(a=>a.label).join("、")}`})),aL.filter(a=>a.risk.highRisk&&(0===a.requiredFactTotal?a.evidenceCount<8:a.requiredFactCovered<a.requiredFactTotal)).map(a=>({level:"warning",message:`系统延迟切片召回覆盖需复核:${a.chapterTitle}`,suggestion:`知识库总切片 ${a.risk.totalChunks},当前预加载 ${a.risk.loadedChunks},已启用深召回;事实覆盖 ${a.requiredFactCovered}/${a.requiredFactTotal},小节覆盖 ${a.sectionCovered}/${a.sectionTotal}。`}))));let d8=(0,aw.Ai)(cO,cC,dY),d9=a$({markdown:dZ,chapters:dY,issues:cO,knowledgeCoverage:d5,factTraces:d6,chapterCoverage:d7}),ea=function(a){let b=[],c=a.issues.filter(a=>"error"===a.level);c.length>0&&b.push({priority:"high",title:"阻断问题修复",action:`修复 ${c.length} 个导出阻断问题,优先处理事实冲突、结构缺失、模板规则违规和占位残留。`});let d=(a.factTraces||[]).filter(a=>"unplaced"===a.status).slice(0,10);d.length>0&&b.push({priority:"high",title:"事实落位修复",action:`将 ${d.length} 项已确认知识库事实写入对应章节,保持原始数值、单位和来源口径。`}),a.knowledgeCoverage&&a.knowledgeCoverage.score<95&&b.push({priority:"medium",title:"知识库确认覆盖修复",action:"扩大本地知识库检索范围,执行事实补抽和章节证据重分配;这是系统检索、抽取、落位问题,不要求用户追加资料。"});let e=(a.chapterCoverage||[]).filter(a=>a.score<80).slice(0,8);return e.length>0&&b.push({priority:"medium",title:"章节覆盖修复",action:`补齐低覆盖章节:${e.map(a=>a.title).join("、")}。`}),a.qualityReport&&!a.qualityReport.passed&&b.push({priority:"medium",title:"交付置信度修复",action:a.qualityReport.actions.join(" ")}),b}({issues:cO,qualityReport:d9,knowledgeCoverage:d5,factTraces:d6,chapterCoverage:d7});cO=aF(aE(cO,(q=d9).passed?[]:[{level:"warning",message:`交付置信度未达目标:${q.deliveryProbability}% / ${q.target}%`,suggestion:q.actions.join(" ")}],ea.filter(a=>"high"===a.priority).map(a=>({level:"warning",message:`修复策略待执行:${a.title}`,suggestion:a.action})))),d8=(0,aw.Ai)(cO,cC,dY),d9=a$({markdown:dZ,chapters:dY,issues:cO,knowledgeCoverage:d5,factTraces:d6,chapterCoverage:d7});let eb=[{key:"export-gate",label:"导出门禁",passed:(r={exportGate:d8,qualityReport:d9,repairStrategies:ea}).exportGate.passed,message:r.exportGate.passed?"导出门禁通过":`仍有 ${r.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:r.qualityReport.passed,message:`${r.qualityReport.deliveryProbability}% / ${r.qualityReport.target}%`},{key:"factuality",label:"事实准确性",passed:r.qualityReport.scores.factuality>=85,message:`${r.qualityReport.scores.factuality}/100`},{key:"evidence-coverage",label:"知识库证据覆盖",passed:r.qualityReport.scores.evidenceCoverage>=85,message:`${r.qualityReport.scores.evidenceCoverage}/100`},{key:"professional-depth",label:"专业深度",passed:r.qualityReport.scores.professionalDepth>=80,message:`${r.qualityReport.scores.professionalDepth}/100`},{key:"repair-strategies",label:"修复策略",passed:0===r.repairStrategies.filter(a=>"high"===a.priority).length,message:r.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}],ec=function(a){let b=[...a.diagnostics.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>({name:a.name,durationMs:a.durationMs}));return{llmCalls:a.diagnostics.llm.calls,llmFailures:a.diagnostics.llm.failures,maxParallelLlm:a.diagnostics.llm.maxActive,searchQueries:a.diagnostics.evidence.searchQueries,evidenceContextChars:a.diagnostics.evidence.contextChars,qualityIssues:{...a.diagnostics.quality},slowMetrics:b,elapsedMs:a.startedAt&&a.endedAt?a.endedAt-a.startedAt:void 0}}({diagnostics:b0}),ed=d8.blockingIssues.length,ee=(0,aw.Ff)(cO);b0.quality.blockingCount+=ee.blocking,b0.quality.importantCount+=ee.important,b0.quality.minorCount+=ee.minor;let ef=dR.map(a=>"validation"===a.type&&"document-workflow"===a.roleId?{...a,status:ed>0?"failed":"success",message:`阻断 ${ed},问题 ${cO.length}`}:"export_ready"===a.type?{...a,status:d8.passed?"success":"failed",message:d8.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁未通过,请完成阻断问题修复后再导出"}:a);ef.push(bB({type:"validation",roleId:"document-delivery-score",status:d9.passed?"success":"fallback",message:d9.summary,details:d9.actions},{subtitle:"交付评分"})),ef.push(bB({type:"reference",roleId:"knowledge-coverage",status:d5.score>=85?"success":"fallback",message:`知识库确认覆盖率:${d5.score}%(证据 ${d5.evidenceCount} 条,文件 ${d5.confirmedFiles} 份)`,details:[d5.remediation]},{subtitle:"知识库覆盖"})),ef.push(bB({type:"validation",roleId:"document-review-checklist",status:eb.every(a=>a.passed)?"success":"fallback",message:`交付复核清单:通过 ${eb.filter(a=>a.passed).length}/${eb.length}`,details:eb.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let eg=[...b0.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(",");ef.push(bB({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${b0.llm.calls} 次,失败 ${b0.llm.failures} 次,峰值并行 ${b0.llm.maxActive},检索 ${b0.evidence.searchQueries} 次/${Math.round(b0.evidence.searchMs/1e3)} 秒,证据上下文 ${b0.evidence.contextChars} 字,噪声过滤 ${b0.evidence.filteredNoise} 条,质量问题 阻断${b0.quality.blockingCount}/重要${b0.quality.importantCount}/轻微${b0.quality.minorCount}${eg?`,Top耗时:${eg}`:""}`},{subtitle:"后台诊断"}));let eh=dY.map(a=>({...a,evidence:J(a.evidence||[],{maxItems:12,maxChars:9e3,preservePinned:!0})}));return{...{...dk,chapters:eh,validationIssues:cO,exportGate:d8,executionStages:ef,partialChapters:dY.map(a=>({id:a.id,title:a.title,chars:(0,av.V7)(a.content),status:cM(a,b$.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:eh,reviewMetadata:{chapterSummaries:dr,globalIssues:du.issues,diagnostics:b0,profile:function(a){let b=`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`,c=[{pattern:/专项施工|危大|专项方案/u,type:"专项施工方案",dimensions:["专项对象边界","工艺参数","风险控制","验收要求","应急措施"]},{pattern:/投标|技术标|响应|招标/u,type:"投标技术方案",dimensions:["招标响应","技术优势","工期质量安全承诺","资源保障","履约可实施性"]},{pattern:/监理|旁站|巡视|平行检验/u,type:"监理规划/细则",dimensions:["监理目标","旁站巡视","平行检验","验收程序","资料签认"]},{pattern:/可研|可行性|项目建议书|投资估算/u,type:"可研/项目建议类文档",dimensions:["建设必要性","方案比选","投资估算","风险分析","实施效益"]},{pattern:/运维|维护|保养|巡检/u,type:"运维维护方案",dimensions:["巡检频次","维护流程","故障响应","备品备件","记录闭环"]}].find(a=>a.pattern.test(b));return{type:c?.type||"施工组织设计/施工技术方案",dimensions:c?.dimensions||["工程概况","施工部署","进度质量安全","资源配置","施工工艺和验收闭环"],requiredEvidencePolicy:"本地知识库为完整事实源;系统暂未确认的事实必须通过扩大检索、事实补抽或落位修复解决,不得归因为用户资料缺失。"}}({template:z,chapters:bn,requirement:a.requirement}),knowledgeCoverage:d5,factTraces:d6,chapterCoverage:d7,retrievalCoverage:aL,qualityReport:d9,repairStrategies:ea,reviewChecklist:eb,workflowVersion:a_,telemetry:ec}},markdown:dZ}}async function dk(a){let b=(0,d.QJ)(a.templateId);if(!b)throw Error("Document template not found");let c=b.chapters.find(b=>b.id===a.chapterId);if(!c)throw Error("Document chapter not found");let f=e.resolve(a.projectRoot||(0,h.aY)());if(!f)throw Error("No knowledge base project found");let g=(0,h.Qh)(),i=(0,d.Vh)(b),k=bV(f,i),l=(0,j.XB)("file"),m=new Map(i.flatMap(a=>bT(f,a.filePath).map(b=>[b,a.roleId]))),n=new Map(i.flatMap(a=>bT(f,a.filePath).map(b=>[b,l.find(b=>b.id===a.roleId)?.processingType||"reference"]))),o=di(await g.getProject(f),[...k],a.maxEvidencePerChapter),p=[],q=[...k].filter(Boolean).sort(),r=dc(c,c.queries,[]),s=dd(c,[]);for(let a of r.slice(0,s)){let b=await g.search(f,a,{scope:"project",filters:{filePaths:q},limit:Math.min(o,12),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});p.push(...b.results.filter(a=>bU(f,a.filePath,k)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:m.get(a.filePath),processingType:n.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let t=db(c,p.filter(a=>bU(f,a.filePath,k)),{maxItems:de(o,c),maxChars:16e3,preservePinned:!0}),u=a.currentMarkdown||"",v=new Set(a.existingFacts??[]),w=c.requiredFacts.filter(a=>!v.has(a)&&!t.some(b=>(0,E.Lk)(b,a))),x=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",u?`> 当前文档上下文摘要:${u.replace(/\s+/gu," ")}`:"",t.length>0?`本章根据知识库资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`:"系统暂未检索到足够证据,建议扩大本地知识库检索后复核。","",t.length>0?"### 资料依据":"",...t.map(K),"",w.length>0?"### 待确认事项":"",...w.map(a=>`- ${a}:建议扩大本地知识库检索、事实补抽或人工复核系统落位结果。`)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:x,evidence:t,missingFacts:w}}},44533:(a,b,c)=>{c.d(b,{Qh:()=>l,VS:()=>p,Yy:()=>o,aY:()=>n});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021);let j=null;function k(){return g.join(h.homedir(),".customize-agent")}function l(){return j||(j=new d.MultiProjectManager(k())),j}function m(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))&&(b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function n(){let a=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(a&&i.existsSync(a)&&!m(a))return g.resolve(a);let b=function(){let a=g.join(k(),"projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!m(a))}finally{b.close()}}();return b.length>0?b[0]:process.env.INIT_CWD&&!m(process.env.INIT_CWD)?process.env.INIT_CWD:g.resolve(process.cwd(),"../..")}function o(a,b={}){let c=new Map;for(let b of function(a){let b=g.join(h.homedir(),".customize-agent","projects",(0,d.computeProjectId)(g.resolve(a)),"kb.db");if(!i.existsSync(b))return[];let c=new d.IndexStateStore(b);try{return c.listRecords().map(a=>({...a,matchedBy:"metadata"}))}finally{c.close()}}(a))c.set(b.relativePath,b);for(let b of function(a){let b=g.join(a,"knowledgeBase");if(!i.existsSync(b))return[];let c=[],d=a=>{for(let e of i.readdirSync(a,{withFileTypes:!0})){let f=g.join(a,e.name);if(e.isDirectory()){d(f);continue}if(e.name.endsWith(".source.txt"))continue;let h=i.statSync(f),j=g.relative(b,f).split(g.sep).join("/");c.push({relativePath:j,category:j.includes("表格数据/")?"spreadsheet":j.includes("图片素材/")?"image":j.includes("图纸文件/")?"cad":j.includes("文档资料/")?"document":"other",format:g.extname(j).slice(1).toLowerCase()||"text",contentHash:"",fileSize:h.size,mtime:h.mtimeMs,chunkCount:0,collectionName:"",indexedAt:0,lastVerifiedAt:0,status:"disk",matchedBy:"disk"})}};return d(b),c}(a)){let a=c.get(b.relativePath);c.set(b.relativePath,a?{...a,fileSize:b.fileSize,mtime:b.mtime,matchedBy:"metadata"}:b)}return Array.from(c.values()).filter(a=>!b.category||a.category===b.category).sort((a,b)=>b.mtime-a.mtime||a.relativePath.localeCompare(b.relativePath,"zh-CN"))}async function p(a,b={}){let c=(b.query||"").trim(),d=Math.max(1,Math.min(500,b.limit??50)),e=new Map,f=o(a,{category:b.category});for(let a of f)(!c||`${a.relativePath}
185
185
  ${a.category}
186
186
  ${a.format}
187
187
  ${a.status}`.toLowerCase().includes(c.toLowerCase()))&&e.set(a.relativePath,{...a,matchedBy:c?"path":a.matchedBy});if(c&&!1!==b.includeContent)try{for(let b of(await l().search(a,c,{limit:Math.max(20,d)})).results){let a=b.filePath,c=e.get(a)||f.find(b=>b.relativePath===a);e.set(a,{...c||{relativePath:a,category:"content",format:"knowledge",fileSize:0,mtime:0,chunkCount:0,indexedAt:0,lastVerifiedAt:0,status:"active"},matchedBy:"content",score:b.score})}}catch{}let g=Array.from(e.values()).sort((a,b)=>{let c=a=>"content"===a.matchedBy?3:"path"===a.matchedBy?2:+("metadata"===a.matchedBy);return c(b)-c(a)||(b.score??0)-(a.score??0)||b.mtime-a.mtime||a.relativePath.localeCompare(b.relativePath,"zh-CN")});return{files:g.slice(0,d),total:g.length}}},52511:(a,b,c)=>{c.d(b,{Bh:()=>B,C1:()=>H,DX:()=>I,N6:()=>J,QJ:()=>A,Vh:()=>O,bV:()=>E,bj:()=>y,dU:()=>x,h0:()=>D,jG:()=>z,wR:()=>L,xm:()=>C,zY:()=>N});var d=c(73024),e=c(76760),f=c(48161),g=c(77598),h=c(44533),i=c(25840),j=c(8753),k=c(6444),l=c(85441),m=c(92808),n=c(81125),o=c(56942);function p(){let a=e.join(f.homedir(),".customize-agent");return d.mkdirSync(a,{recursive:!0}),a}function q(){return e.join(p(),"document-templates.json")}function r(a){return{...a,id:a.id.replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80)||`template-${Date.now()}`,name:a.name||"未命名模板",description:a.description||"",category:a.category||"自定义",outputTitle:a.outputTitle||a.name||"文档",projectRoleConfigId:a.projectRoleConfigId||void 0,chapters:Array.isArray(a.chapters)&&a.chapters.length>0?a.chapters.map((a,b)=>({id:(a.id||`chapter-${b+1}`).replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80),title:a.title||`第 ${b+1} 章`,purpose:a.purpose||"",queries:Array.isArray(a.queries)?a.queries.filter(Boolean):[],requiredFacts:Array.isArray(a.requiredFacts)?a.requiredFacts.filter(Boolean):[],sections:Array.isArray(a.sections)?a.sections.filter(Boolean):[],tableSections:Array.isArray(a.tableSections)?a.tableSections.filter(Boolean):[],tableRequirements:Array.isArray(a.tableRequirements)?a.tableRequirements.filter(Boolean):[],pinnedEvidenceFilePaths:Array.isArray(a.pinnedEvidenceFilePaths)?a.pinnedEvidenceFilePaths.filter(Boolean):[]})):[{id:"document",title:a.outputTitle||a.name||"文档",purpose:a.description||"",queries:[],requiredFacts:[]}],exportSettings:a.exportSettings,generationSettings:a.generationSettings,promptIds:Array.isArray(a.promptIds)?a.promptIds.filter(Boolean):[],boundFilePaths:Array.isArray(a.boundFilePaths)?a.boundFilePaths.filter(Boolean):[],promptBindings:Array.isArray(a.promptBindings)?a.promptBindings.filter(a=>a.promptId&&a.roleId):Array.isArray(a.promptIds)?a.promptIds.filter(Boolean).map(a=>({promptId:a,roleId:"chapter_generation"})):[],fileBindings:Array.isArray(a.fileBindings)?a.fileBindings.filter(a=>a.filePath&&a.roleId):Array.isArray(a.boundFilePaths)?a.boundFilePaths.filter(Boolean).map(a=>({filePath:a,roleId:"reference"})):[],builtIn:!1}}function s(){try{let a=q();if(!d.existsSync(a))return[];return JSON.parse(d.readFileSync(a,"utf-8")).map(r)}catch{return[]}}function t(a){d.writeFileSync(q(),JSON.stringify(a.map(r),null,2),"utf-8")}function u(a){return(0,g.createHash)("sha256").update(a).digest("hex").slice(0,12)}function v(a){return a.replace(/\s+/gu," ").trim().slice(0,160)}function w(a){let b=function(){try{let a=JSON.parse(d.readFileSync(e.join(p(),"prompts.json"),"utf-8"));return Array.isArray(a.customPrompts)?a.customPrompts:[]}catch{return[]}}();if(a.startsWith("custom:")){let c=b.find(b=>b.id===a);return c?{id:a,name:c.name,content:c.content,source:"custom"}:void 0}if(a.startsWith("file:")){let b=a.slice(5);if(d.existsSync(b))return{id:a,name:e.basename(e.dirname(b))||b,content:d.readFileSync(b,"utf-8"),source:"file"}}}function x(a=[]){if(0===a.length)return[];let b=[];for(let c of a){let a=w(c.promptId);a&&b.push({...a,roleId:c.roleId,contentHash:u(a.content),contentPreview:v(a.content)})}return b}function y(a){let b=K(a),c=(0,i.XB)("prompt"),d=N(a),e=[],f=[];if(b)for(let a of b.promptRoles){let b=c.find(b=>b.id===a.roleId);if(!b){e.push(a.roleId);continue}0===(b.resourceIds?.length?b.resourceIds:b.resourceId?[b.resourceId]:[]).length&&f.push(a.roleId)}let g=M(d),h=[];for(let a of g){let b=w(a.promptId);if(!b)continue;let d=c.find(b=>b.id===a.roleId),e=d?.executionType||function(a){var b;return b=a,/extract|extraction|抽取|清单|图纸|品牌/u.test(b)?"fact_extraction":/validation|校验|审查|审核/u.test(b)?"validation":/format|排版/u.test(b)?"formatting":/writer|method|schedule|quality|resource|safety|dangerous|施工|进度|质量|资源|安全|危大/u.test(b)?"chapter_generation":"reference"}(a.roleId),f=function(a,b,c=""){let d=`${a} ${b} ${c}`;return/extract|extraction|抽取|清单|图纸|品牌|识别/u.test(d)?"extraction":/format|排版/u.test(d)?"formatting":/总控|writer|施工组织设计总控|写作主控/u.test(d)?"writer":/chapter_generation|method|schedule|quality|resource|safety|dangerous|施工|进度|质量|资源|安全|危大/u.test(d)?"chapter":"reference"}(a.roleId,e,b.name);h.push({...b,roleId:a.roleId,contentHash:u(b.content),contentPreview:v(b.content),executionType:e,category:f,bindingSource:"projectRole"})}return{bindings:g,prompts:h,writerPrompts:h.filter(a=>"writer"===a.category),chapterPrompts:h.filter(a=>"chapter"===a.category),extractionPrompts:h.filter(a=>"extraction"===a.category),formattingPrompts:h.filter(a=>"formatting"===a.category),referencePrompts:h.filter(a=>"reference"===a.category),unresolvedRoles:[...new Set(e)],missingResourceRoles:[...new Set(f)]}}function z(){let a=(0,j.V)().templates,b=s().filter(b=>!a.some(a=>a.id===b.id));return[...a,...b]}function A(a){return z().find(b=>b.id===a)}function B(a){let b=r(a),c=s().filter(a=>a.id!==b.id);return c.push(b),t(c),b}async function C(a,b=(0,h.aY)()){let c,d=A(a),f=[];if(!d)return{issues:[{level:"error",message:"文档模板不存在或已删除"}],fileDiagnostics:[],promptDiagnostics:[],config:void 0};let g=(0,i.XB)("prompt"),j=(0,i.XB)("file"),m=J(d),p=K(d);m||f.push({level:"error",message:"模板未绑定项目角色配置,且未匹配到自动专业角色配置"}),m&&!p&&f.push({level:"error",message:`项目角色配置不存在或已删除:${m}`}),d.promptIds?.length&&f.push({level:"warning",message:"模板存在旧 promptIds 字段残留,该字段已不参与生成,请清理模板历史数据。"}),d.promptBindings?.length&&f.push({level:"warning",message:"模板存在旧 promptBindings 字段残留,该字段已不参与生成,请清理模板历史数据。"}),d.boundFilePaths?.length&&f.push({level:"warning",message:"模板存在旧 boundFilePaths 字段残留,生成只使用项目角色配置和显式文件角色绑定。"});let q=N(d),r=O(d);p&&0===p.promptRoles.length&&f.push({level:"error",message:"项目角色配置未配置提示词角色。"}),p&&p.promptRoles.length>0&&0===q.length&&f.push({level:"error",message:"项目角色配置中的提示词角色未绑定任何有效提示词资源。"});let s=e.resolve(b),t=(0,h.Yy)(s),u=function(a,b){if(0===a.length)return a;let c=new Set(b.map(a=>a.relativePath)),d=[],e=new Set;for(let f of a){let a=f.filePath.replace(/^\/+|\/+$/gu,"");for(let g of c.has(a)?[a]:b.filter(b=>{var c;return b.relativePath.startsWith(`${a}/`)&&"disk"!==(c=b).status&&"error"!==c.status&&Number(c.indexedAt||0)>0&&Number(c.chunkCount||0)>0}).map(a=>a.relativePath)){let a=`${f.roleId}