@customize-agent/server 4.1.37 → 4.1.38

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 (41) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +20 -20
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/server/chunks/1985.js +7 -7
  5. package/.next/server/chunks/5284.js +3 -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/chunks/{289-35ac595388bbd018.js → 289-12dfcb3abec1c4b4.js} +1 -1
  25. package/.next/static/chunks/563-2b116a2500a97dba.js +1 -0
  26. package/.next/static/chunks/788-961761f5858f9189.js +1 -0
  27. package/.next/static/chunks/pages/documents-4d295412f0371924.js +1 -0
  28. package/.next/static/chunks/pages/knowledge/files-dcc806117e92dc9d.js +1 -0
  29. package/.next/static/chunks/pages/knowledge/manage-ca9bafc8b0f4a76b.js +1 -0
  30. package/.next/static/chunks/pages/prompt-200241126dbfb31a.js +1 -0
  31. package/.next/static/chunks/pages/system/logs-c5a8920c6506a7e8.js +1 -0
  32. package/.next/static/{KfEyuJ5jYwrIOzH82SKWZ → zcG9KWFoOs2NPqPa-je9y}/_buildManifest.js +1 -1
  33. package/package.json +1 -1
  34. package/.next/static/chunks/563-b12f299d34bb9e44.js +0 -1
  35. package/.next/static/chunks/788-3afeb069ed706ac0.js +0 -1
  36. package/.next/static/chunks/pages/documents-fa7e8bb1b86f68b7.js +0 -1
  37. package/.next/static/chunks/pages/knowledge/files-8503246ce2bc07c6.js +0 -1
  38. package/.next/static/chunks/pages/knowledge/manage-a00bb7fc6a76f820.js +0 -1
  39. package/.next/static/chunks/pages/prompt-224af05519ef8304.js +0 -1
  40. package/.next/static/chunks/pages/system/logs-6f45ef8d862759a2.js +0 -1
  41. /package/.next/static/{KfEyuJ5jYwrIOzH82SKWZ → zcG9KWFoOs2NPqPa-je9y}/_ssgManifest.js +0 -0
package/.next/BUILD_ID CHANGED
@@ -1 +1 @@
1
- KfEyuJ5jYwrIOzH82SKWZ
1
+ zcG9KWFoOs2NPqPa-je9y
@@ -5,8 +5,8 @@
5
5
  "devFiles": [],
6
6
  "ampDevFiles": [],
7
7
  "lowPriorityFiles": [
8
- "static/KfEyuJ5jYwrIOzH82SKWZ/_buildManifest.js",
9
- "static/KfEyuJ5jYwrIOzH82SKWZ/_ssgManifest.js"
8
+ "static/zcG9KWFoOs2NPqPa-je9y/_buildManifest.js",
9
+ "static/zcG9KWFoOs2NPqPa-je9y/_ssgManifest.js"
10
10
  ],
11
11
  "rootMainFiles": [],
12
12
  "rootMainFilesTree": {},
@@ -39,9 +39,9 @@
39
39
  "static/chunks/717-743b697a417dd5ee.js",
40
40
  "static/chunks/883-506cbca959974997.js",
41
41
  "static/chunks/665-88e20299084b9e73.js",
42
- "static/chunks/563-b12f299d34bb9e44.js",
42
+ "static/chunks/563-2b116a2500a97dba.js",
43
43
  "static/chunks/7-20bcc985742a9ae1.js",
44
- "static/chunks/289-35ac595388bbd018.js",
44
+ "static/chunks/289-12dfcb3abec1c4b4.js",
45
45
  "static/chunks/994-241f87efc61005b8.js",
46
46
  "static/chunks/pages/asset-library-a1047694e888e655.js"
47
47
  ],
@@ -53,9 +53,9 @@
53
53
  "static/chunks/883-506cbca959974997.js",
54
54
  "static/chunks/665-88e20299084b9e73.js",
55
55
  "static/chunks/44-d3545eedd5c75ef1.js",
56
- "static/chunks/563-b12f299d34bb9e44.js",
56
+ "static/chunks/563-2b116a2500a97dba.js",
57
57
  "static/chunks/7-20bcc985742a9ae1.js",
58
- "static/chunks/289-35ac595388bbd018.js",
58
+ "static/chunks/289-12dfcb3abec1c4b4.js",
59
59
  "static/chunks/787-c18af810af3433f6.js",
60
60
  "static/chunks/195-2c0168eacab722d2.js",
61
61
  "static/chunks/455-e1b41ac4946d2b6f.js",
@@ -69,14 +69,14 @@
69
69
  "static/chunks/883-506cbca959974997.js",
70
70
  "static/chunks/665-88e20299084b9e73.js",
71
71
  "static/chunks/44-d3545eedd5c75ef1.js",
72
- "static/chunks/563-b12f299d34bb9e44.js",
72
+ "static/chunks/563-2b116a2500a97dba.js",
73
73
  "static/chunks/7-20bcc985742a9ae1.js",
74
74
  "static/chunks/787-c18af810af3433f6.js",
75
75
  "static/chunks/195-2c0168eacab722d2.js",
76
76
  "static/chunks/455-e1b41ac4946d2b6f.js",
77
77
  "static/chunks/506-93f730bc149d0dce.js",
78
78
  "static/chunks/230-8184e70eae35f2bb.js",
79
- "static/chunks/pages/documents-fa7e8bb1b86f68b7.js"
79
+ "static/chunks/pages/documents-4d295412f0371924.js"
80
80
  ],
81
81
  "/guide": [
82
82
  "static/chunks/webpack-4224e970a97a4a86.js",
@@ -102,9 +102,9 @@
102
102
  "static/chunks/883-506cbca959974997.js",
103
103
  "static/chunks/665-88e20299084b9e73.js",
104
104
  "static/chunks/44-d3545eedd5c75ef1.js",
105
- "static/chunks/563-b12f299d34bb9e44.js",
105
+ "static/chunks/563-2b116a2500a97dba.js",
106
106
  "static/chunks/7-20bcc985742a9ae1.js",
107
- "static/chunks/289-35ac595388bbd018.js",
107
+ "static/chunks/289-12dfcb3abec1c4b4.js",
108
108
  "static/chunks/787-c18af810af3433f6.js",
109
109
  "static/chunks/506-93f730bc149d0dce.js",
110
110
  "static/chunks/850-0f48354694fc6b3e.js",
@@ -119,11 +119,11 @@
119
119
  "static/chunks/883-506cbca959974997.js",
120
120
  "static/chunks/665-88e20299084b9e73.js",
121
121
  "static/chunks/44-d3545eedd5c75ef1.js",
122
- "static/chunks/563-b12f299d34bb9e44.js",
122
+ "static/chunks/563-2b116a2500a97dba.js",
123
123
  "static/chunks/7-20bcc985742a9ae1.js",
124
- "static/chunks/289-35ac595388bbd018.js",
124
+ "static/chunks/289-12dfcb3abec1c4b4.js",
125
125
  "static/css/ad5a592c79d1448b.css",
126
- "static/chunks/pages/knowledge/files-8503246ce2bc07c6.js"
126
+ "static/chunks/pages/knowledge/files-dcc806117e92dc9d.js"
127
127
  ],
128
128
  "/knowledge/manage": [
129
129
  "static/chunks/webpack-4224e970a97a4a86.js",
@@ -134,8 +134,8 @@
134
134
  "static/chunks/665-88e20299084b9e73.js",
135
135
  "static/chunks/787-c18af810af3433f6.js",
136
136
  "static/chunks/506-93f730bc149d0dce.js",
137
- "static/chunks/788-3afeb069ed706ac0.js",
138
- "static/chunks/pages/knowledge/manage-a00bb7fc6a76f820.js"
137
+ "static/chunks/788-961761f5858f9189.js",
138
+ "static/chunks/pages/knowledge/manage-ca9bafc8b0f4a76b.js"
139
139
  ],
140
140
  "/models": [
141
141
  "static/chunks/webpack-4224e970a97a4a86.js",
@@ -164,10 +164,10 @@
164
164
  "static/chunks/717-743b697a417dd5ee.js",
165
165
  "static/chunks/883-506cbca959974997.js",
166
166
  "static/chunks/44-d3545eedd5c75ef1.js",
167
- "static/chunks/563-b12f299d34bb9e44.js",
167
+ "static/chunks/563-2b116a2500a97dba.js",
168
168
  "static/chunks/195-2c0168eacab722d2.js",
169
169
  "static/chunks/187-358527d7061417bf.js",
170
- "static/chunks/pages/prompt-224af05519ef8304.js"
170
+ "static/chunks/pages/prompt-200241126dbfb31a.js"
171
171
  ],
172
172
  "/settings": [
173
173
  "static/chunks/webpack-4224e970a97a4a86.js",
@@ -183,11 +183,11 @@
183
183
  "static/chunks/883-506cbca959974997.js",
184
184
  "static/chunks/665-88e20299084b9e73.js",
185
185
  "static/chunks/44-d3545eedd5c75ef1.js",
186
- "static/chunks/563-b12f299d34bb9e44.js",
186
+ "static/chunks/563-2b116a2500a97dba.js",
187
187
  "static/chunks/7-20bcc985742a9ae1.js",
188
- "static/chunks/289-35ac595388bbd018.js",
188
+ "static/chunks/289-12dfcb3abec1c4b4.js",
189
189
  "static/chunks/195-2c0168eacab722d2.js",
190
- "static/chunks/pages/system/logs-6f45ef8d862759a2.js"
190
+ "static/chunks/pages/system/logs-c5a8920c6506a7e8.js"
191
191
  ]
192
192
  },
193
193
  "ampFirstPages": []
@@ -3,9 +3,9 @@
3
3
  "routes": {},
4
4
  "dynamicRoutes": {},
5
5
  "preview": {
6
- "previewModeId": "68fbe1f4a33940c5defdca3cbb530ec1",
7
- "previewModeSigningKey": "ccf3646662deb242b96acbda268f3efca6078f4a0e2accf082c78b07c534f711",
8
- "previewModeEncryptionKey": "8e5edac115aa15067f1df5b9110198dc95367c975799070e3b3c670fb723cb79"
6
+ "previewModeId": "7fdb8f0ab44fd5f6487641b36dc47f91",
7
+ "previewModeSigningKey": "b63ab964ff4cea1fed74cd66034db91dfc4d52478dc6529747575f0add57a1a3",
8
+ "previewModeEncryptionKey": "e21bcc45310ba29f83ac6cb314eaa07c8d2b8f7a75ae3cb4da60987bc3c89e7c"
9
9
  },
10
10
  "notFoundRoutes": []
11
11
  }
@@ -101,17 +101,17 @@ ${c}`,"写作要求:必须严格按“小节任务”逐项输出,每个任
101
101
  ${b.map((a,b)=>`${b+1}. ${a}`).join("\n")}`}(aH),!aG.enabled?"":"公开资料补充使用规则:\n1. 公开资料只可用于补充通用规范、政策、工艺和措施。\n2. 不得使用公开资料新增或修改项目名称、建设地点、建设规模、工期、质量标准、工程量、材料规格、图纸参数、商务数据。\n3. 本地项目资料与公开资料冲突时,必须以本地项目资料为准。\n4. 不得在正文中出现任何检索过程、外部页面、工具调用或系统内部过程性表述。\n5. 不得把公开资料中的其他项目案例参数写入本项目正文。"].filter(Boolean).join("\n\n"),aN=[an,aJ,`生成前规划章节结构:
102
102
  ${(0,v.CK)(q)}`,ap||az].filter(Boolean).join("\n\n"),aV=[ao,aJ,aD([...Q.extractionPrompts,...Q.referencePrompts])].filter(Boolean).join("\n\n"),aW=[an,aJ,aD([...Q.writerPrompts,...Q.chapterPrompts,...Q.formattingPrompts])].filter(Boolean).join("\n\n");(0,ay.fx)(P,(0,ay.X5)({type:"validation",roleId:"document-preparation",status:"success",message:`模板规范与项目资料理解完成,识别 ${T.length} 份项目资料`,details:[`提示词绑定:${R.length} 个`,`项目资料包:${U.materialRoots.join("、")||"当前知识库"}`,ab?`识别 OUTLINE 章节:${Z.length} 个`:"未识别显式 OUTLINE,使用模板章节"],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备",order:P.length})),I();let aX=new Set(T),aY=new Map([...W.entries()].map(([a,b])=>[a,(0,aE._W)(b)])),aZ=new Map([...X.entries()].map(([a,b])=>[a,b]));(0,ay.fx)(P,(0,ay.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:"running",message:"正在读取项目资料包索引",details:["使用上传阶段已完成的解析、切片和索引结果","不在生成流程中重新解析或入库","准备按资料类型召回章节证据"],progress:{current:1,total:3,label:"读取索引"}},{subtitle:"知识库检索",order:P.length})),I();let a$=await K(()=>y.getProject(o)),a_=function(a,b){let c=new Set(b.filter(Boolean)),d=(a.listFiles?.()||[]).filter(a=>0===c.size||c.has(a.relativePath)),e=new Set(d.map(a=>a.relativePath)),f=[...c].filter(a=>!e.has(a)),g=d.filter(a=>0===Math.max(0,Math.ceil(Number(a.chunkCount)||0))).map(a=>a.relativePath),h=d.filter(a=>"error"===a.status).map(a=>a.relativePath),i="function"==typeof a.countPendingIndexJobs?a.countPendingIndexJobs():0,j="function"==typeof a.getVectorStatus?a.getVectorStatus():void 0,k=d.filter(a=>"error"!==a.status&&Math.max(0,Math.ceil(Number(a.chunkCount)||0))>0),l=k.map(a=>a.relativePath),m=k.reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0),n=[...cA("部分绑定文件未完成索引,已自动跳过",f),...cA("部分绑定文件没有可用切片,已自动跳过",g),...cA("部分绑定文件索引失败,已自动跳过",h)],o=c.size>0&&0===m?["所有绑定文件均无可用切片"]:[],p=[...n,...i>0?[`仍有 ${i} 个待索引任务,建议等待索引完成后生成`]:[],...j&&"ready"!==j.status?[`向量索引状态为 ${j.status},当前召回质量可能下降`]:[]];return{scopedRecords:d,usablePaths:l,missingFiles:f,emptyFiles:g,errorFiles:h,pendingJobs:i,vectorStatus:j,usableChunkCount:m,blockingIssues:o,warnings:p}}(a$,[...aX]);if(a_.blockingIssues.length>0)throw Error(`生成前知识索引不可用:${a_.blockingIssues.join(";")}`);let a0=new Set(a_.usablePaths),a1=bq(p,[...a0]),a2=cB(a$,[...a0],a.maxEvidencePerChapter),a3=a_.pendingJobs>0||a_.vectorStatus&&"ready"!==a_.vectorStatus.status||0===a_.usableChunkCount,a5=function(a){let b=Math.max(0,Math.ceil(a.totalChunks||0)),c=Math.max(0,Math.ceil(a.loadedChunks||0)),d=Math.max(0,b-c),e=b>0?c/b:1,f=[...b>=1e3&&e<.35?["切片未完全预加载"]:[],...!1===a.vectorReady?["向量索引未就绪"]:[]];return{totalChunks:b,loadedChunks:c,omittedChunks:d,loadedRatio:e,highRisk:f.length>0,riskReason:f.join("、")||void 0}}({totalChunks:Math.min(a_.usableChunkCount,20*T.length),loadedChunks:Math.min(a_.usableChunkCount,20*T.length),vectorReady:a_.vectorStatus?"ready"===a_.vectorStatus.status:void 0});(0,ay.fx)(P,(0,ay.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:a3?"failed":"success",message:`已读取知识索引:项目资料 ${a_.scopedRecords.length} 份,可用切片 ${a_.usableChunkCount} 条`,details:[`项目资料:${aX.size} 份`,`可用证据文件:${a0.size} 份`,`向量状态:${a_.vectorStatus?.status||"unknown"}`,...a_.warnings,"后续将按招标正文/清单/图纸/补疑等资料类型召回"],progress:{current:3,total:3,label:"索引已就绪"}},{subtitle:"知识库检索",order:P.length})),I(),(0,M.Te)(a.signal);let a6=[],a7=[],a8={enabled:aG.enabled,queries:[],evidenceCount:0,filteredCount:0,chapters:[]},a9=[],bb=[],bf=[],bg=[],bh=[],bi=-1,bj=new Map,bk=new Map,bl=(a,b)=>{let c=`${a}::${b.maxChunkContentChars}`;if(!bk.has(c))try{bk.set(c,a$.getFileDetail?.(a,b))}catch{bk.set(c,void 0)}return bk.get(c)},bm=async(a,b,c,d)=>{let e=ct(d),f=(0,M.c6)({query:a,scopedFilePaths:b,limit:c,weights:e,generationMode:!1}),g=bj.get(f);if(g)return g;let h=await y.search(o,a,{scope:"project",filters:{filePaths:b},limit:c,weights:e,generationMode:!1}).catch(()=>null),i=h?.results||[];return bj.set(f,i),i},bn={stage:(0,ay.X5)({type:"file_understanding",roleId:"project-understanding",status:"success",message:`已完成项目资料理解:${U.files.length} 份资料,${Object.values(U.groups).filter(a=>a.length>0).length} 类资料类型`,details:V.prompt.split("\n").slice(0,16)},{subtitle:"项目资料理解",order:P.length})};(0,ay.fx)(P,bn.stage),I();let bp=bt(await b9({manager:y,project:a$,projectRoot:o,scopedFilePaths:[...aX].filter(Boolean).sort(),fileRoleByPath:aY,fileProcessingByPath:aZ,signal:a.signal}),a1);bv(bp,a1,"project-basic-evidence"),bp.length>0&&(a6.push(...bp),(0,ay.fx)(P,(0,ay.X5)({type:"knowledge_retrieval",roleId:"project-basic-evidence",status:"success",message:`已锁定项目基础事实证据 ${bp.length} 条`,details:bp.slice(0,8).map(a=>`${e.basename(a.filePath)}|${a.sectionTitle||"正文片段"}|score=${a.score.toFixed(2)}`)},{subtitle:"基础事实召回",order:P.length})),I());let br=bu(af(a6,q,ah),a1),bs=bu(al(a6),a1),bw=[...br,...bs,...bu(am(a6,aj),a1)],bx=(0,cH.hp)({projectRoot:o,template:q,requirement:a.requirement}),by=[...bx?.facts||[],...bw],bz=ax(by,bu(ae(a6),a1),a9,ah,aj),bA=(0,b5.Qu)({template:q,requirement:a.requirement,projectRoot:o,facts:by});for(let a of(bx&&(bA.baseProjectGraph=bx.baseProjectGraph,bA.facts=[...bx.facts,...bA.facts],bA.nodes.push({id:"project-intelligence-cache",type:"base_project_graph",status:"completed",startedAt:bx.cache.createdAt,completedAt:bx.cache.createdAt,outputSummary:`复用项目理解缓存:${bx.files.length} 份绑定资料,${bx.facts.length} 条预计算事实`,metrics:{cachedFiles:bx.files.length,cachedFacts:bx.facts.length}})),(0,b5.SU)(bA)))(0,ay.fx)(P,a);bx&&(0,ay.fx)(P,(0,ay.X5)({type:"file_understanding",roleId:"project-intelligence-cache",status:"success",message:`已复用入库后项目理解缓存:${bx.files.length} 份绑定资料`,details:[`项目级缓存时间:${new Date(bx.cache.createdAt).toLocaleString()}`,`缓存 sourceHash:${bx.cache.sourceHash.slice(0,12)}`,`绑定文件事实:${bx.facts.length} 条`,`排除正文不适用资料:${bx.files.filter(a=>!a.usableForBody).length} 份`]},{subtitle:"项目理解缓存"})),I(),"1"===process.env.DOCUMENT_PROJECT_GRAPH_ENHANCED?((0,ay.fx)(P,(0,ay.X5)({type:"file_understanding",roleId:"project-graph",status:"running",message:`正在进行项目资料图谱分析:${a6.length} 条证据 → LLM 结构化提取`,details:["提取:工程内容、施工方法、材料设备、技术标准、重点难点"],progress:{current:2,total:3,label:"图谱分析"}},{subtitle:"项目资料图谱分析",order:P.length})),I(),b=await K(()=>(0,cG.i)({evidence:a6,signal:a.signal,projectRoot:o,requirement:a.requirement,templateId:q.id}),P)):b={graph:bA.baseProjectGraph,stage:(0,ay.X5)({type:"file_understanding",roleId:"project-graph",status:"success",message:"已使用确定性基础项目图谱,LLM 增强图谱按配置关闭",details:["基础图谱来自事实记忆和资料快照",`事实数:${bw.length}`],progress:{current:3,total:3,label:"基础图谱"}},{subtitle:"项目资料图谱分析",order:P.length})};let bB=b.graph||bA.baseProjectGraph;b.graph||(b={graph:bB,stage:(0,ay.X5)({type:"file_understanding",roleId:"project-graph",status:"success",message:"确定性基础项目图谱已完成,LLM 增强图谱未通过",details:["基础图谱为必跑结果,继续作为 Planner/Writer 图谱上下文",`增强阶段:${b.stage.message||b.stage.status}`]},{subtitle:"项目资料图谱分析",order:P.length})}),(0,ay.fx)(P,b.stage),I(),bB&&(V=(0,aE._n)(q,U,bB));let bC=function(a){var b;let c=(0,M.c6)({version:"canonical-facts-v2",requirement:a.requirement||"",templateId:a.templateId||"",requiredKeys:a.requiredKeys||[],facts:a.facts.map(a=>({key:a.key,fieldId:a.fieldId,fieldName:a.fieldName,value:a.value,sourceFile:a.sourceFile,roleId:a.roleId,confidence:a.confidence})).sort((a,b)=>`${a.sourceFile}${a.key}${a.value}`.localeCompare(`${b.sourceFile}${b.key}${b.value}`)),graphHash:a.projectGraph?(0,M.c6)(a.projectGraph):"",markdownHash:a.markdown?(0,M.c6)(a.markdown.slice(0,2e4)):""}),d=function(a,b){let c=b4(a);if(c)try{let a=JSON.parse(aa.readFileSync(e.join(c,`canonical-facts-${b}.json`),"utf8"));return a&&a.byKey?a:void 0}catch{return}}(a.projectRoot,c);if(d)return d;let f=b2({facts:a.facts,markdown:a.markdown}),g={};for(let[a,b]of f.entries())g[a]=function(a){let b=a.source.includes("generated_markdown")?"generated_markdown":a.source.includes("evidence")?"evidence":"structured_fact";return{key:a.fieldKey,label:a.label,value:a.value,normalizedValue:ai(a.value),sourceType:b,sourceFile:a.source,confidence:a.confidence,priority:b3(b),locked:b3(b)>=80,selectedReason:a.selectedReason}}(b);let h=a.facts||[],i=[];for(let a of[{key:"project_name",label:"项目名称",pattern:/项目名称|工程名称|招标项目名称|project_name/u,bucket:"projectIdentity"},{key:"project_code",label:"项目编号",pattern:/项目编号|招标项目编号|project_code/u,bucket:"projectIdentity"},{key:"owner",label:"招标人",pattern:/招标人|建设单位|发包人|owner/u,bucket:"projectIdentity"},{key:"project_location",label:"建设地点",pattern:/建设地点|实施地点|project_location/u,bucket:"projectIdentity"},{key:"project_scale",label:"建设规模",pattern:/建设规模|工程规模|project_scale/u,bucket:"projectScope"},{key:"construction_scope",label:"施工范围",pattern:/施工范围|招标范围|工程范围/u,bucket:"projectScope"},{key:"duration",label:"计划工期",pattern:/计划工期|合同工期|总工期|schedule_requirement|duration/u,bucket:"schedule"},{key:"quality_target",label:"质量目标",pattern:/质量标准|质量目标|quality_standard/u,bucket:"quality"}]){let b=function(a,b,c,d){return a.filter(a=>d.test(`${a.fieldId||""}${a.key||""}${a.fieldName||""}`)).map(a=>(function(a,b,c){let d=(0,M.lG)(a.value),e=function(a){let b=`${a.sourceFile||""} ${a.sourceRef?.sectionTitle||""} ${a.roleId||""}`;return/合同/u.test(b)?"contract":/招标|公告|前附表|需求书/u.test(b)?"tender":/清单|工程量|BOQ|报价/u.test(b)?"boq":/图纸|设计|CAD|DWG/u.test(b)?"drawing":/规范|标准/u.test(b)?"standard":"structured_fact"}(a);return{key:b,label:c,value:d,normalizedValue:ai(d),sourceType:e,sourceFile:a.sourceFile,sourceRef:a.sourceRef?.sectionTitle,confidence:Math.round(100*(a.confidence||.5)),priority:b3(e),locked:b3(e)>=80,selectedReason:"按资料来源优先级和字段置信度决策"}})(a,b,c)).filter(a=>a.value&&!/资料未明确|系统暂未确认/u.test(a.value)).sort((a,b)=>b.priority-a.priority||b.confidence-a.confidence||a.value.length-b.value.length)}(h,a.key,a.label,a.pattern);!g[a.key]&&b.length>0&&(g[a.key]=b[0]);let c=function(a,b,c){let d=[...new Map(c.map(a=>[a.normalizedValue,a])).values()];if(d.length<=1)return;let e=Math.max(...d.map(a=>a.priority)),f=d.filter(a=>a.priority===e);return{key:a,label:b,values:d.map(a=>({value:a.value,sourceFile:a.sourceFile,priority:a.priority,confidence:a.confidence})),decision:1===f.length?"highest_priority_selected":"manual_review_required"}}(a.key,a.label,b);c&&i.push(c)}let j=(b=a.projectGraph)?[...(b.resources||[]).map(a=>({key:`resource_${a.type}_${a.name}`,label:"equipment"===a.type?"机械设备":"labor"===a.type?"劳动力":"材料资源",value:[a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" "),normalizedValue:ai([a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:b3("projectGraph"),locked:!1,selectedReason:"来自项目图谱资源节点"})).filter(a=>a.value),...(b.risks||[]).map(a=>({key:`risk_${a.risk}`,label:"风险源",value:[a.risk,a.level,a.mitigation].filter(Boolean).join(" "),normalizedValue:ai([a.risk,a.level,a.mitigation].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:b3("projectGraph"),locked:!1,selectedReason:"来自项目图谱风险节点"})).filter(a=>a.value)]:[],k=j.filter(a=>/resource_/u.test(a.key)),l=j.filter(a=>/risk_/u.test(a.key));for(let a of j)g[a.key]||(g[a.key]=a);let m=(a.requiredKeys||[]).filter(a=>!g[a]).map(a=>({key:a,label:b_.find(b=>b.key===a)?.label||a,reason:"未从用户输入、招标资料、清单、图纸或项目图谱中确认该事实"})),n={projectIdentity:{projectName:g.project_name,projectCode:g.project_code,owner:g.owner,location:g.project_location},projectScope:{scale:g.project_scale,constructionScope:g.construction_scope},schedule:{duration:g.duration||g.schedule_requirement},quality:{target:g.quality_target||g.quality_standard},safety:{risks:l},resources:{resources:k},environment:{},constraints:{},byKey:g,conflicts:i,gaps:m},o=b4(a.projectRoot);return o&&aa.writeFileSync(e.join(o,`canonical-facts-${c}.json`),JSON.stringify(n,null,2)),n}({facts:by,projectGraph:bB,requiredKeys:b_.map(a=>a.key),projectRoot:o,requirement:a.requirement,templateId:q.id});bz.canonical=bC;let bD=(0,t._9)(q,ah,{preserveExplicitOutline:ab}),bE=$({chapters:function(a){if(!function(a){let b=A(`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`);return!!/施工组织设计|施工组织|施组|技术标|投标技术|施工方案/u.test(b)||["施工","工程","质量","安全","进度","文明","部署","方案"].filter(a=>b.includes(a)).length>=3&&!/监理|可研|运维|维护|保养/u.test(b)}(a))return a.chapters;let b=C(a),c=A(`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>`${a.title} ${(a.sections||[]).join(" ")}`).join(" ")}`),d=a.chapters.some(a=>/概况|部署|总体|组织|主要施工方案|保障|保证|综合措施|管理体系/u.test(a.title)&&!/雨季|冬季|高温|防汛|扬尘|噪声|工资|劳务|应急|BIM|智慧|管线|交通导改/u.test(a.title)),e=z.filter(a=>D(a,b,c)),f=new Set,g=a.chapters.map(a=>({...a,sections:[...a.sections||[]],queries:[...a.queries||[]],requiredFacts:[...a.requiredFacts||[]],tableSections:[...a.tableSections||[]]}));for(let a of e){let e=g.map((b,c)=>({index:c,score:E(b.title,a),chapter:b})).filter(d=>(function(a,b,c,d){var e;if(!D(a,c,d))return!1;let f=A(b.title);if(a.aliases.some(a=>f.includes(A(a)))||a.sectionItems.some(a=>f.includes(A(a))))return!0;if(e=b.title,/雨季|冬季|高温|防汛|扬尘|噪声|工资|劳务|实名|应急|BIM|智慧|管线|交通导改|垃圾分类|多塔|成品保护/u.test(e))return!1;let g=E(b.title,a);return g>=10||("optional"===a.level?g>=12||/BIM|智慧|数字|创新/iu.test(d):"conditional"===a.level?g>=8||a.projectTypes?.some(a=>c.includes(a))===!0||a.aliases.some(a=>d.includes(A(a))):g>=6)})(a,d.chapter,b,c)).sort((a,b)=>b.score-a.score),h=e[0]?.index??(d&&("core"===a.level||"mandatory"===a.level)?F(a,g):-1);if(h<0)continue;let i=g[h],j=function(a,b){let c=A(b.title);return a.aliases.some(a=>c.includes(A(a)))||c.includes(A(a.title)),a.title}(a,i);i.sections=B(i.sections,[j,...a.sectionItems],50),i.queries=B(i.queries,[a.title,...a.queries],30),i.requiredFacts=B(i.requiredFacts,a.facts,30),i.tableSections=B(i.tableSections,a.tableSections||[],20),i.purpose=`${i.purpose};系统已按施工组织设计标准模块库自动挂靠“${a.title}”,仅在本章范围内展开与章节语义、项目类型和资料事实合理相关的内容,禁止机械塞入无关内容。`,f.add(a.id)}for(let a of d?e.filter(a=>("mandatory"===a.level||"core"===a.level)&&!f.has(a.id)):[]){let b=F(a,g),c=g[b];c.sections=B(c.sections,[a.title,...a.sectionItems],50),c.queries=B(c.queries,[a.title,...a.queries],30),c.requiredFacts=B(c.requiredFacts,a.facts,30),c.tableSections=B(c.tableSections,a.tableSections||[],20),c.purpose=`${c.purpose};系统已补足施工组织设计必备模块“${a.title}”,需以合理挂靠方式呈现,不改变用户一级章节。`}return g}({template:q,chapters:bD,requirement:a.requirement}),projectGraph:bB,canonicalFacts:bC});q={...q,chapters:bE};let bF=new Map;if(bB){let a=new Set;for(let b of[...bB.works,...bB.methods,...bB.resources,...bB.schedule,...bB.standards,...bB.risks,...bB.requirements,...bB.siteConditions])(b.sourceFiles||[]).forEach(b=>a.add(b));for(let b of bE){let c=[b.title,b.purpose,...b.sections||[],...b.requiredFacts||[],...b.queries||[]].join(" "),d=a=>a&&((0,cU.C1)(a,c,.18)||(0,cU.C1)(a,b.title,.12)),e=/概况|总体|部署|施工|进度|工期|质量|安全|资源|人材机|材料|机械|劳动力|风险|危大|绿色|环保/u.test(c),f=bB.works.filter(a=>a.name&&(d(a.name)||e)),g=bB.methods.filter(a=>a.name&&(d(a.name)||(a.applicableWorks||[]).some(d)||e)),h=bB.resources.filter(a=>a.name&&(d(a.name)||/资源|人材机|材料|机械|劳动力/u.test(c)&&/material|equipment|labor/u.test(a.type))),i=bB.gaps.filter(a=>d(a)||e),j=new Set;for(let a of f)(a.sourceFiles||[]).forEach(a=>j.add(a));for(let a of g)(a.sourceFiles||[]).forEach(a=>j.add(a));for(let a of h)(a.sourceFiles||[]).forEach(a=>j.add(a));0===j.size&&e&&[...a].slice(0,12).forEach(a=>j.add(a)),bF.set(b.id,{graphFiles:j,graphBoqItems:h.map(a=>({name:a.name,quantity:a.quantity,unit:a.unit,sourceFiles:a.sourceFiles||[]})),graphWorks:f.map(a=>a.name),graphMethods:g.map(a=>a.name),gaps:i})}(0,ay.fx)(P,(0,ay.X5)({type:"file_understanding",roleId:"project-graph-match",status:"success",message:`图谱→章节映射完成:${bB.works.length}工程 ${bB.methods.length}工法 ${bB.resources.length}资源 → ${bE.length}章`,details:bE.map(a=>{let b=bF.get(a.id);return`${(0,t.GQ)(a.title)}:图谱文件${b?.graphFiles.size||0}个,BOQ项${b?.graphBoqItems.length||0}个`})},{subtitle:"图谱章节映射"})),I()}let bG=bE,bH=V.prompt,bI=[bH,S({template:{...q,chapters:bG},chapters:bG,factsModel:bz,requirement:a.requirement})].filter(Boolean).join("\n\n"),bJ={...q,chapters:bG},bK=function(a,b){let c=a.replace(/\\n/gu,"\n"),d=new Map,e=[...c.matchAll(/第([一二两三四五六七八九十\d]+)章[^\n。;;]{0,80}(?:强制|必须|挂靠|小节|排序|最先|之后|之前)/gu)];for(let a of e){let b=function(a){let b={零:0,一:1,二:2,两:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};if(/^\d+$/u.test(a))return Number(a);if(void 0!==b[a])return b[a];if("十"===a)return 10;let c=/^(?:(一|二|两|三|四|五|六|七|八|九)?)十(?:(一|二|两|三|四|五|六|七|八|九))?$/u.exec(a);if(c)return 10*(c[1]?b[c[1]]:1)+(c[2]?b[c[2]]:0)}(a[1]);if(!b)continue;let f=Math.max(0,a.index||0),g=e.find(a=>(a.index||0)>f)?.index,h=c.slice(f,Math.min(c.length,g??f+1400));if(aL(h)&&!/(强制小节|必须小节|以下小节设置和排序|必须设置独立的|必须包含独立的)/u.test(h))continue;let i=function(a){let b=/(?:以下小节设置和排序|强制小节|必须小节)[::]\s*([\s\S]*?)(?:\n\s*#{2,6}\s|\n\s*第[一二两三四五六七八九十\d]+章|$)/u.exec(a)?.[1];if(b){let c=aM([...b.matchAll(/(?:^|\n)\s*\d+[..、]\s*([^——\-—::。;;\n]{2,30})(?:[——\-—::]|,|,|。|;|;|\n|$)/gu)].map(a=>a[1]),a);if(c.length>0)return c}let c=[];for(let b of a.matchAll(/第[一二两三四五六七八九十\d]+章[^。;;\n]{0,50}(?:强制)?(?:包含|设置|输出|排序|挂靠)[^::。;;\n]{0,20}[::]\s*([^。;;\n]{2,120})/gu))for(let a of b[1].split(/[、,,//及和与]/u))c.push(a);for(let b of a.matchAll(/[“"]([^”"]{2,30})[”"]\s*(?:二级)?小节/gu))c.push(b[1]);for(let b of a.matchAll(/([\p{Script=Han}A-Za-z0-9()()]{2,30})(?:——|—|-|:|:)\s*(?:独立的)?(?:二级)?小节/gu))c.push(b[1]);for(let b of a.matchAll(/(?:必须|应当|需|需要|包含|设置|输出)[^。;;\n]{0,30}(?:独立的)?(?:二级)?小节[::]\s*([^。;;\n]{2,80})/gu))for(let a of b[1].split(/[、,,//及和与]/u))c.push(a);return aM(c,a)}(h);if(0===i.length)continue;let j=d.get(b)||{blocks:[],titles:[]};for(let a of(j.blocks.push(h),i))j.titles.some(b=>aK(b,a))||j.titles.push(a);d.set(b,j)}return[...d.entries()].map(([a,c])=>{let d=b?.[a-1];return{chapterIndex:a-1,chapterTitle:d?.title,source:c.blocks[0]?.split("\n").find(a=>a.trim())?.trim().slice(0,120),requiredSections:c.titles.map((a,b)=>({title:a,order:b+1,required:!0,source:c.blocks[0]?.slice(0,240)}))}})}([aN,a.requirement||""].filter(Boolean).join("\n\n"),bG),bL=(0,w.tF)({requirement:a.requirement,promptTexts:aN,template:bJ,chapters:bG,spec:ah}),bM=0,bN=0;bG=$({chapters:await (0,M.l$)(bG.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b,chapterIndex:c})=>{if(b.sections?.length){bM+=1;let a=aS([...bK.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,t.GQ)(a.chapterTitle)===(0,t.GQ)(b.title)).flatMap(a=>a.requiredSections.sort((a,b)=>(a.order||0)-(b.order||0)).map(a=>a.title)),...b.sections],b.title);return{...b,sections:a.length?a:aS(b.sections,b.title)}}bN+=1;let d=(0,s.QR)(a6.filter(a=>a.chapterId===b.id||(0,u.Lk)(a,b.title)),{maxChars:(0,s.Pc)(bL.chapterTargets.get(b.id)||1200),preservePinned:!0}),e=V.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",f=co(Q,b),g=await aT({template:bJ,chapter:b,chapterIndex:c,evidence:d,promptTexts:f.promptTexts,projectContext:bI,requirement:a.requirement,roleContext:e,targetWords:bL.chapterTargets.get(b.id)||1200,structuralRules:bK,signal:a.signal}),h=bK.filter(a=>a.chapterIndex===c||a.chapterTitle&&(0,t.GQ)(a.chapterTitle)===(0,t.GQ)(b.title)).flatMap(a=>a.requiredSections.map(a=>`强制小节:${a.title}`));if((0,ay.fx)(P,(0,ay.X5)({type:"validation",roleId:"section-planning",promptId:f.primaryPromptId,status:g.length?"success":"failed",message:`${(0,t.GQ)(b.title)} 小节规划${g.length?`生成 ${g.length} 个小节`:"未生成可用小节"}`,details:[...f.promptDetails,...h,...g.length?g.map(a=>`规划小节:${a}`):["规划结果为空或被污染过滤"]]},{subtitle:"小节规划"})),!g.length)throw Error(`${(0,t.GQ)(b.title)} 小节规划未生成可用小节`);return{...b,sections:g}},{kind:"llmRepair",targetWords:bL.targetChars||4e3,concurrency:2}),projectGraph:bB,canonicalFacts:bC});let bO=S({template:q={...q,chapters:bG},chapters:bG,factsModel:bz,requirement:a.requirement});bI=[bH,bO].filter(Boolean).join("\n\n"),(0,ay.fx)(P,(0,ay.X5)({type:"validation",roleId:"document-blueprint",status:"success",message:"已生成全局事实主表与文档蓝图,后续章节和小节将共用同一套专业约束",details:bO.split("\n").slice(0,12)},{subtitle:"全局蓝图"}));let bP=(0,w.tF)({requirement:a.requirement,promptTexts:aN,template:q,chapters:bG,spec:ah}),bQ=function(a){let b=Date.now(),c=a.template.chapters.map(a=>{let b=a.sections?.length?a.sections:[a.title];return{chapterId:a.id,title:a.title,purpose:a.purpose||cO(a.title),requiredFacts:[...new Set([...a.requiredFacts||[],a.title])],requiredGraphNodes:[a.title],evidenceQueries:[...new Set([a.title,...a.queries||[],...a.requiredFacts||[]])],qualityRules:["事实必须来自锁定资料范围","不得出现后台话术和兜底措辞","不得混入其他项目名称","章节必须覆盖规划小节"],forbiddenPhrases:cI,sections:b.map(b=>({title:b,objective:cO(b),requiredFacts:[...new Set([b,...a.requiredFacts||[]])],requiredGraphNodes:[b],evidenceQueries:[...new Set([a.title,b,...cN(a.title),...cN(b),...a.queries||[],...a.requiredFacts||[]].filter(Boolean))],forbiddenPhrases:cI,minChars:/项目特点.*重点.*难点|重点.*难点.*分析/u.test(b)?1800:/项目主要施工内容|主要分部分项工程施工方案|主要施工方法/u.test(b)?2200:/原材料进场复试|见证取样|危大工程专项施工方案审批流程/u.test(b)?1200:/施工部署|施工流水|主要施工机械|劳动力|材料进场|资源动态|质量控制点|危大工程|安全隐患|临时用水|临时用电/u.test(b)?760:/概况|说明|依据/u.test(b)?260:420}))}});return{plan:{planId:`plan-${(0,M.c6)({templateId:a.template.id,scope:a.context.materialScope.scopeHash,chapters:c.map(a=>a.title)}).slice(0,10)}`,title:a.title||a.template.name,chapters:c,requiredGlobalFacts:["项目名称","工期","质量标准","招标范围"],forbiddenPhrases:cI,qualityRules:["资料范围先锁定","基础图谱必跑","章节任务先于正文","Reviewer 通过后才能导出"]},node:{id:"document-planner",type:"document_planner",status:"completed",startedAt:b,completedAt:Date.now(),outputSummary:`${c.length} 章、${c.reduce((a,b)=>a+b.sections.length,0)} 个小节任务`,metrics:{chapters:c.length}}}}({template:q,context:bA,title:q.name});bA.documentPlan=bQ.plan,bA.nodes.push(bQ.node),(0,ay.fx)(P,(0,ay.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:bQ.node.outputSummary||"Agent 文档规划完成",details:bQ.plan.chapters.map(a=>`${a.title}:${a.sections.length} 个小节任务`)},{subtitle:"Agent Document Planner",order:P.length})),H=bG.map(a=>a.id);let bR=function(a){let b=a.template.chapters.length,c=b>0?a.targetWords/b:a.targetWords,d=`${a.template.name}
103
103
  ${a.template.category||""}
104
- ${a.requirement||""}`,e=/专项|安全|质量|验收|审核|合同|合规|审计|风控|风险/u.test(d),f=a.targetWords>=3e4||b>=8||c>=4e3,g=a.targetWords<=6e3&&b<=4&&!e;return{mode:e?"strict":f?"longform":g?"fast":"balanced",enableChapterReview:!0,enableGlobalReview:!0,enableDocumentBudgetExpansion:!1,enableFinalQualityReview:!0}}({template:q,targetWords:bP.targetChars||[...bP.chapterTargets.values()].reduce((a,b)=>a+b,0),requirement:a.requirement}),bS={strategy:bR,metrics:[],llm:{calls:0,failures:0,maxActive:0,retries:0},evidence:{raw:0,used:0,filteredNoise:0,avgNoiseScore:0,avgFactDensity:0,searchQueries:0,searchMs:0,contextChars:0},quality:{blockingCount:0,importantCount:0,minorCount:0,repairedCount:0}};(0,ay.fx)(P,(0,ay.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${bR.mode} 生成策略:章节审查 ${bR.enableChapterReview?"启用":"跳过"}、全局审查 ${bR.enableGlobalReview?"启用":"跳过"}、最终质量审查 ${bR.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${bR.enableDocumentBudgetExpansion?"启用":"跳过"};LLM 调用按工作流任务自然并行`},{subtitle:"后台自动策略"}));let bT=ab?"OUTLINE 章节":"模板章节",bU=(0,ay.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${bN} 章由 LLM 基于${bT}、项目资料理解和证据规划小节,${bM} 章已由模板显式提供小节并跳过规划`},{subtitle:"小节规划策略"}),bV=ab?`;识别到 OUTLINE 章节 ${Z.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",bW=[...Q.prompts.map(a=>`${a.category}|${a.roleId}|${a.id}|${a.name}|${a.bindingSource}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`),...Q.unresolvedRoles.map(a=>`unresolved|${a}|项目角色配置中的提示词角色不存在`),...Q.missingResourceRoles.map(a=>`missingResource|${a}|提示词角色未显式绑定资源`)];(0,ay.fx)(P,(0,ay.X5)({type:"role_binding",roleId:L,status:"success",message:`已绑定项目资料 ${T.length} 份、${Q.prompts.length} 个有效提示词;写作 ${Q.writerPrompts.length}、章节 ${Q.chapterPrompts.length}、抽取 ${Q.extractionPrompts.length};已自动抽取运行时规则 ${aH.executionSummary.length} 条;语义资料覆盖 ${Math.round(100*ak.materialCoverageRate)}%${bV}`,details:[...bW,...aH.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:O,roleName:O})),(0,ay.fx)(P,(0,ay.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${aH.executionSummary.length} 条,版本 ${aH.sourceHash}`,details:aH.executionSummary.length?[...aH.executionSummary,`必需表格:${aH.requiredTables.join("、")||"无"}`,`必含关键词:${aH.requiredKeywords?.join("、")||"无"}`,`禁含内容:${aH.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})),(0,ay.fx)(P,(0,ay.X5)({type:"validation",roleId:"document-readiness",status:ak.ready?"success":"failed",message:`生成准备度:绑定资料已就绪,语义覆盖 ${Math.round(100*ak.materialCoverageRate)}%,角色匹配 ${Math.round(100*ak.roleSatisfactionRate)}%,优化建议 ${Math.round(100*ak.specCompletenessRate)}%`,details:ak.diagnostics},{subtitle:"生成准备度检查"})),(0,ay.fx)(P,bU),I();let bX=Math.round(([...bP.chapterTargets.values()].reduce((a,b)=>a+b,0)||bP.targetChars||0)/Math.max(1,bG.length)),bY=Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),bZ=bG.length<=1?1:bP.longformStrict||bX>=9e3?2:bX>=6500?Math.min(3,bG.length):Math.min(4,bG.length),b$=Math.max(1,Math.min(bG.length||1,Number.isFinite(bY)&&bY>0?Math.floor(bY):bZ));(0,ay.fx)(P,(0,ay.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节自适应调度:本轮 ${b$}/${bG.length} 章并发`,details:[`有效章节数:${bG.length}`,`平均章节目标:${bX} 字`,Number.isFinite(bY)&&bY>0?`章节并发来自 DOCUMENT_CHAPTER_CONCURRENCY=${Math.floor(bY)}`:`章节并发自适应=${bZ},长章保守、短章提速`]},{subtitle:"章节并发策略"})),I();for(let b=0;b<bG.length;b+=b$){let c=bG.slice(b,b+b$);await Promise.all(c.map(async(c,d)=>{let f,g=b+d;(0,M.Te)(a.signal);let h=Date.now(),i=P.length;try{var j,k;let b;P.push((0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:Q.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(c.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${g+1}/${bG.length}`,`二级小节:${c.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:g+1,total:bG.length,label:"章节生成"}},{subtitle:(0,t.GQ)(c.title),order:g})),I();let d=a.resumeChapters?.find(a=>a.id===c.id||a.title===c.title),m=d?.content?.trim(),p=d?.evidence?.length?[...d.evidence]:[],r=V.chapterPlans.find(a=>a.chapterId===c.id||a.chapterTitle===c.title),z=r?Object.values(r.evidenceQueries).flat().filter(Boolean):[],A=c.queries.length>0?c.queries:[q.name,q.outputTitle,c.title],B=bF.get(c.id);if(bB&&B&&B.graphFiles.size>0){let a=[...a0],b=b=>a.includes(b)?b:a.find(a=>a.endsWith(b)||a.includes(b));for(let a of[...B.graphFiles].map(a=>b(a)||a).filter(a=>aC(o,a,a0)).slice(0,12)){let b=bl(a,{maxChunkContentChars:8e3});if(b?.chunks?.length)for(let d of b.chunks)p.push({chapterId:c.id,filePath:b.file?.relativePath||a,score:5+(B.graphWorks.length+B.graphMethods.length)*.5,content:d.content,roleId:aY.get(a),processingType:aZ.get(a),sectionTitle:d.sectionTitle,source:"graph-evidence"})}}let C=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(c.title)?b7:[],D=cv(c,[...A,...z],C),E=cw(c,C),F=Date.now();P[i]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:Q.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(c.title)} 正在执行质量优先的章节检索${B?.graphFiles.size?`(图谱匹配 ${B.graphFiles.size} 个文件)`:""}`,details:D.slice(0,E).map(a=>`检索:${a.slice(0,42)}`),progress:{current:g+1,total:bG.length,label:"证据检索"}},{subtitle:(0,t.GQ)(c.title),order:g}),I();let H=m?[]:[...a0].filter(Boolean).sort(),J=[],L=D.slice(0,E);if(H.length>0&&L.length>0){(0,M.Te)(a.signal);let b=await (0,M.l$)(L,async a=>bm(a,H,Math.min(a2,12),c.title),{kind:"search"});J.push(...b)}for(let a of(bS.evidence.searchQueries+=Math.min(D.length,E),bS.evidence.searchMs+=Date.now()-F,J))p.push(...a.filter(a=>aC(o,a.filePath,aX)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:aY.get(a.filePath),processingType:aZ.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));let O=m?[]:await (0,aE.$b)({manager:y,projectRoot:o,chapter:c,plan:r,profile:U,scopedFilePaths:H,limitPerQuery:Math.min(a2,10),signal:a.signal}).catch(()=>[]);p.push(...O);let R=new Set((c.pinnedEvidenceFilePaths||[]).filter(Boolean)),S=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(c.title)&&p.push(...bp.map(a=>({...a,chapterId:c.id,source:"pinned-evidence"})));let W=new Set([...R]),X=bP.chapterTargets.get(c.id)||1200,Y=(0,s.Pc)(X,6e3,12e3);for(let a of W){if(!aC(o,a,aX))continue;let b=R.has(a),d=bl(a,{maxChunkContentChars:Y});d&&p.push(...d.chunks.map(a=>({chapterId:c.id,filePath:d.file.relativePath,score:1,content:a.content,roleId:aY.get(d.file.relativePath),processingType:aZ.get(d.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let Z=p.filter(a=>aC(o,a.filePath,a0));if(!m&&aG.enabled&&aG.allowProjectFacts){let b=await bo({config:aG,chapterId:c.id,chapterTitle:c.title,sectionTitles:c.sections||[],runtimeRules:aH,localFacts:[...bz.project,...bz.schedule,...bz.quality,...bz.safety,...bz.resources,...bz.preciseFacts],signal:a.signal});a8.queries.push(...b.queries),a8.filteredCount+=b.filtered+b.evidence.length}let $=(0,s.Pc)(X,7e3,26e3),aa=m?[]:(0,aE.SK)({project:a$,chapter:c,plan:r,profile:U,scopedFilePaths:H,highRisk:a5.highRisk});aa.length>0&&Z.push(...bt(aa,a1)),Z=bt(Z,a1);let ab=cu(c,Z,{maxItems:cx(a2,c,a5.highRisk),maxChars:$+(a5.highRisk?14e3:4e3),preservePinned:!0},bS);bv(ab,a1,`chapter:${c.id}:initial`);let ac=c.requiredFacts.filter(a=>!ab.some(b=>(0,u.Lk)(b,a))),ae=0,af=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>cT(`${a.sectionTitle||""}${a.content||""}`).includes(cT(b)))),c=(a.chapter.tablePlans||[]).flatMap(a=>a.fillability?.missingProjectFactFields||[]),d=a.evidence.length<3?["章节证据数量不足"]:[],e=b.length+c.length+d.length,f=e>=5?"high":e>=2?"medium":"low",g="high"===f?"evidence_first":c.length>0?"generate_with_review_notes":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:f,missingFacts:b,missingEvidence:d,tableFieldGaps:[...new Set(c)],suggestedStrategy:g,reason:0===e?"章节事实、证据和表格可填性满足常规生成条件。":`识别到 ${e} 项生成前缺口,按 ${g} 策略生成。`}}({chapter:c,evidence:ab}),ag=new Set(ab.map(a=>a.filePath)).size,ai=!!B&&(B?.graphFiles.size||0)>=8&&ag>=6&&0===ac.length&&"low"===af.riskLevel,ak=H.length<=80&&("evidence_first"===af.suggestedStrategy||a5.highRisk||ac.length>0||ab.length<8&&"low"!==af.riskLevel);if(!ai&&ak&&H.length>0){let b=await _({manager:y,projectRoot:o,chapter:c,scopedFilePaths:H,fileRoleByPath:aY,fileProcessingByPath:aZ,requiredNeeds:ac,highRisk:a5.highRisk,signal:a.signal}).catch(()=>[]);ae=b.length,b.length>0&&(Z=cu(c,[...Z,...bt(b,a1)],{maxItems:cx(a2+12,c,a5.highRisk),maxChars:$+(a5.highRisk?36e3:16e3),preservePinned:!0},bS),Z=bt(Z,a1),ab=cu(c,Z,{maxItems:cx(a2+8,c,a5.highRisk),maxChars:$+(a5.highRisk?28e3:12e3),preservePinned:!0},bS),bv(ab,a1,`chapter:${c.id}:deep`),ac=c.requiredFacts.filter(a=>!ab.some(b=>(0,u.Lk)(b,a))))}for(let a of(0===ab.length&&a9.push(`${c.title}:缺少可支撑正文的项目资料证据`),ac))a9.push(`${c.title}:事实需求未满足 ${a}`);let al=(0,ay.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:a6.length>0?"success":"failed",message:`已检索/绑定 ${a6.length} 条证据`});bi<0?bi=(0,ay.fx)(P,al):P[bi]={...al,order:P[bi]?.order??al.order},I(),(0,M.Te)(a.signal);let am=[B?[B.graphWorks.length?`图谱识别本章工程内容:${B.graphWorks.join("、")}`:"",B.graphMethods.length?`图谱识别本章施工方法:${B.graphMethods.join("、")}`:"",B.graphBoqItems.length?`图谱识别本章BOQ清单项(${B.graphBoqItems.length}项):${B.graphBoqItems.slice(0,30).map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",B.gaps.length?`图谱识别本章资料缺口:${B.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",r?.writingGoal,r?.mustCover?.length?`本章必须覆盖:${r.mustCover.join("、")}`:"",r?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${r.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),ao=co(Q,c);if(Q.writerPrompts.length>0&&!ao.primaryWriter)throw Error(`${(0,t.GQ)(c.title)} 写作主控提示词未进入章节生成阶段`);let ap=[ao.promptTexts,an].filter(Boolean).join("\n\n"),ax=ao.promptDetails.length?ao.promptDetails:["未绑定章节写作提示词"],az=function(a){let b=a.profile||l,c=[],d=[a.template.name,a.template.outputTitle,a.chapter.title,a.chapter.purpose,...a.chapter.sections||[]].filter(Boolean).join(" "),e=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title);for(let d of a.chapter.requiredFacts||[])as(c,b,{label:d,category:n(b,d)?.category||"required",required:!0,source:"template"});for(let d of a.chapter.sections||[])as(c,b,{label:d,category:"section",required:!1,source:"section",queries:ar(d,[a.chapter.title])});for(let d of a.plan?.requiredContents||[])as(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of a.plan?.evidenceNeeds||[])as(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of e?.requiredFactIds||[]){let e=a.spec?.factFields.find(a=>a.id===d);e&&as(c,b,{label:e.name,category:n(b,e.name)?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:ar(e.name,[e.extractionHint||"",e.validationHint||""])})}for(let e of a.spec?.factFields||[]){if(!e.required)continue;let f=n(b,e.name),g=`${e.name} ${e.extractionHint||""} ${e.validationHint||""}`;(d.includes(e.name)||ar(e.name,f?.aliases||[]).some(a=>d.includes(a))||a.chapter.requiredFacts.some(a=>a.includes(e.name)||e.name.includes(a)))&&as(c,b,{label:e.name,category:f?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:ar(e.name,[g])})}for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&d.includes(a))&&at(c,b,a,"profile","must_use"===a.usagePolicy,[d]);let f=aq(a.requirement||"");if(f)for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&f.includes(a))&&at(c,b,a,"requirement",!0,[f]);let g=aq(a.promptTexts||"");if(g)for(let d of b.factFields)[d.name,...d.aliases].some(a=>a.length>=2&&g.includes(a))&&at(c,b,d,"prompt","must_use"===d.usagePolicy,[a.chapter.title]);return c}({template:q,chapter:c,spec:ah,profile:aj,promptTexts:ap,requirement:a.requirement,plan:r?{requiredContents:r.mustCover,evidenceNeeds:Object.values(r.evidenceQueries).flat()}:void 0}),aD=av({needs:az,factsModel:bz,evidence:Z,profile:aj}),aF=aD.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label);if(aF.length>0&&H.length>0){let b=await cz({manager:y,projectRoot:o,chapter:c,needs:aF,scopedFilePaths:H,fileRoleByPath:aY,fileProcessingByPath:aZ,signal:a.signal}).catch(()=>[]),d=await _({manager:y,projectRoot:o,chapter:c,scopedFilePaths:H,fileRoleByPath:aY,fileProcessingByPath:aZ,requiredNeeds:aF,highRisk:!0,signal:a.signal}).catch(()=>[]),e=bt([...b,...d],a1);e.length>0&&(Z=cu(c,[...Z,...e],{maxItems:cx(a2+16,c,!0),maxChars:$+42e3,preservePinned:!0},bS),Z=bt(Z,a1),ab=cu(c,Z,{maxItems:cx(a2+12,c,!0),maxChars:$+32e3,preservePinned:!0},bS),bv(ab,a1,`chapter:${c.id}:supplemental`),ac=c.requiredFacts.filter(a=>!ab.some(b=>(0,u.Lk)(b,a))),aF=(aD=av({needs:az,factsModel:bz,evidence:Z,profile:aj})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}bv(ab,a1,`chapter:${c.id}:writer-input`);let aI=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b)||`${a.sectionTitle||""} ${a.content}`.includes(b))).length,d=a.chapter.requiredFacts.length,e=a.chapter.requiredFacts.filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:c,evidence:ab,risk:a5});a7.push(aI);let aJ=new Set(ab.map(a=>a.filePath)),aK=ab.reduce((a,b)=>a+b.content.length,0),aL=[...a5.highRisk?[`召回覆盖风险(${a5.riskReason||"切片未完全预加载"}):已加载 ${a5.loadedChunks}/${a5.totalChunks},已启用深召回`]:[],`深召回证据:${ae} 条`,`事实覆盖:${aI.requiredFactCovered}/${aI.requiredFactTotal}`,`小节覆盖:${aI.sectionCovered}/${aI.sectionTotal}`];P[i]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:Q.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(c.title)} 已选取 ${ab.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aJ.size} 份`,`上下文字符:${aK}`,`检索查询:${Math.min(D.length,E)} 组`,...aL],progress:{current:g+1,total:bG.length,label:"正文生成"}},{subtitle:(0,t.GQ)(c.title),order:g}),I(),bS.evidence.contextChars+=aK;let aM=(j=aD,au(j.flatMap(a=>a.facts))),aN=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(c.title)?bs:[],aO=function(a){let b=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title),c=(b?.requiredFactIds||[]).map(b=>a.spec?.factFields.find(a=>a.id===b)?.name).filter(Boolean),d=[...new Set([...a.chapter.requiredFacts,...c,...a.plan?.requiredContents||[],...a.plan?.evidenceNeeds||[],...(a.resolvedFactNeeds||[]).filter(a=>a.need.required).map(a=>a.need.label)].filter(Boolean))],e=a.roleFacts.map(({fact:a})=>`- ${a.key}:${(0,s.eE)((0,M.lG)(a.value))}`),f=(a.resolvedFactNeeds||[]).flatMap(a=>a.facts),g=a.indexedFacts||[],h=(0,N.Cr)(g,a=>(0,N.rF)(a),{maxItems:48,maxChars:12e3},"indexedFacts"),i=f.length>0?[]:h.selected.map(a=>`- ${a.key||a.fieldName||"资料事实"}:${(0,s.eE)((0,M.lG)(a.value)).slice(0,180)}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`),j=h.dropped.length>0?[`⚠️ ${h.dropped.length} 个低优先级事实未列出(完整列表见事实主表)`]:[],k=[...f,...g].filter(a=>/建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`)).filter((a,b,c)=>c.findIndex(b=>`${b.key||b.fieldName}:${(0,M.lG)(b.value)}`==`${a.key||a.fieldName}:${(0,M.lG)(a.value)}`)===b),l=[...new Set([...function(a){let b=new Set,c=/(?:\b[A-Z]{1,8}[\w./-]*\d[\w./-]*\b|\b\d+(?:\.\d+)?\s*(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|L|ml|MPa|kPa|℃|%|台|套|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年|万元|元)\b|\b\d+\s*[×xX]\s*\d+(?:\s*[×xX]\s*\d+)?\b|\b(?:GB|GB\/T|ISO|IEC|IEEE|RFC|API|DB\d*|T\/[A-Z]+)\s*[\w.-]+\b)/giu;for(let d of a){let a=(0,M.lG)(d.content).replace(/\s+/gu," ");if((!/报价明细|投标报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(a)||/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(a))&&!/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂/u.test(a)){for(let d of a.matchAll(c))b.add(d[0].trim());if(b.size>=40)break}}return[...b].slice(0,40)}(a.evidence),...f.map(a=>(0,M.lG)(a.value)).filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|JGJ|ISO|台|套|个|项|批|次|份|人|㎡|日历天|万元|元/iu.test(a)),...g.map(a=>(0,M.lG)(a.value)).filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|JGJ|ISO|台|套|个|项|批|次|份|人|㎡|日历天|万元|元/iu.test(a))])],m=0,n=[];for(let a of l){if(m+a.length>3e3&&n.length>=10)break;n.push(a),m+=a.length+1}let o=new Set([...a.evidence.map(a=>a.filePath),...f.map(a=>a.sourceFile),...(a.indexedFacts||[]).map(a=>a.sourceFile)]).size,p=(a.resolvedFactNeeds||[]).filter(a=>"satisfied"!==a.status&&a.need.required).map(a=>a.need.label);return["【本章事实覆盖与参数落位要求】",d.length?`必须优先覆盖的事实/要求:
104
+ ${a.requirement||""}`,e=/专项|安全|质量|验收|审核|合同|合规|审计|风控|风险/u.test(d),f=a.targetWords>=3e4||b>=8||c>=4e3,g=a.targetWords<=6e3&&b<=4&&!e;return{mode:e?"strict":f?"longform":g?"fast":"balanced",enableChapterReview:!0,enableGlobalReview:!0,enableDocumentBudgetExpansion:!1,enableFinalQualityReview:!0}}({template:q,targetWords:bP.targetChars||[...bP.chapterTargets.values()].reduce((a,b)=>a+b,0),requirement:a.requirement}),bS={strategy:bR,metrics:[],llm:{calls:0,failures:0,maxActive:0,retries:0},evidence:{raw:0,used:0,filteredNoise:0,avgNoiseScore:0,avgFactDensity:0,searchQueries:0,searchMs:0,contextChars:0},quality:{blockingCount:0,importantCount:0,minorCount:0,repairedCount:0}};(0,ay.fx)(P,(0,ay.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${bR.mode} 生成策略:章节审查 ${bR.enableChapterReview?"启用":"跳过"}、全局审查 ${bR.enableGlobalReview?"启用":"跳过"}、最终质量审查 ${bR.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${bR.enableDocumentBudgetExpansion?"启用":"跳过"};LLM 调用按工作流任务自然并行`},{subtitle:"后台自动策略"}));let bT=ab?"OUTLINE 章节":"模板章节",bU=(0,ay.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${bN} 章由 LLM 基于${bT}、项目资料理解和证据规划小节,${bM} 章已由模板显式提供小节并跳过规划`},{subtitle:"小节规划策略"}),bV=ab?`;识别到 OUTLINE 章节 ${Z.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",bW=[...Q.prompts.map(a=>`${a.category}|${a.roleId}|${a.id}|${a.name}|${a.bindingSource}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`),...Q.unresolvedRoles.map(a=>`unresolved|${a}|项目角色配置中的提示词角色不存在`),...Q.missingResourceRoles.map(a=>`missingResource|${a}|提示词角色未显式绑定资源`)];(0,ay.fx)(P,(0,ay.X5)({type:"role_binding",roleId:L,status:"success",message:`已绑定项目资料 ${T.length} 份、${Q.prompts.length} 个有效提示词;写作 ${Q.writerPrompts.length}、章节 ${Q.chapterPrompts.length}、抽取 ${Q.extractionPrompts.length};已自动抽取运行时规则 ${aH.executionSummary.length} 条;语义资料覆盖 ${Math.round(100*ak.materialCoverageRate)}%${bV}`,details:[...bW,...aH.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:O,roleName:O})),(0,ay.fx)(P,(0,ay.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${aH.executionSummary.length} 条,版本 ${aH.sourceHash}`,details:aH.executionSummary.length?[...aH.executionSummary,`必需表格:${aH.requiredTables.join("、")||"无"}`,`必含关键词:${aH.requiredKeywords?.join("、")||"无"}`,`禁含内容:${aH.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})),(0,ay.fx)(P,(0,ay.X5)({type:"validation",roleId:"document-readiness",status:ak.ready?"success":"failed",message:`生成准备度:绑定资料已就绪,语义覆盖 ${Math.round(100*ak.materialCoverageRate)}%,角色匹配 ${Math.round(100*ak.roleSatisfactionRate)}%,优化建议 ${Math.round(100*ak.specCompletenessRate)}%`,details:ak.diagnostics},{subtitle:"生成准备度检查"})),(0,ay.fx)(P,bU),I();let bX=Math.round(([...bP.chapterTargets.values()].reduce((a,b)=>a+b,0)||bP.targetChars||0)/Math.max(1,bG.length)),bY=Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),bZ=bG.length<=1?1:bP.longformStrict||bX>=9e3?2:bX>=6500?Math.min(3,bG.length):Math.min(4,bG.length),b$=Math.max(1,Math.min(bG.length||1,Number.isFinite(bY)&&bY>0?Math.floor(bY):bZ));(0,ay.fx)(P,(0,ay.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节自适应调度:本轮 ${b$}/${bG.length} 章并发`,details:[`有效章节数:${bG.length}`,`平均章节目标:${bX} 字`,Number.isFinite(bY)&&bY>0?`章节并发来自 DOCUMENT_CHAPTER_CONCURRENCY=${Math.floor(bY)}`:`章节并发自适应=${bZ},长章保守、短章提速`]},{subtitle:"章节并发策略"})),I();for(let b=0;b<bG.length;b+=b$){let c=bG.slice(b,b+b$);await Promise.all(c.map(async(c,d)=>{let f,g=b+d;(0,M.Te)(a.signal);let h=Date.now(),i=P.length;try{var j,k;let b;P.push((0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:Q.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(c.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${g+1}/${bG.length}`,`二级小节:${c.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:g+1,total:bG.length,label:"章节生成"}},{subtitle:(0,t.GQ)(c.title),order:g})),I();let d=a.resumeChapters?.find(a=>a.id===c.id||a.title===c.title),m=d?.content?.trim(),p=d?.evidence?.length?[...d.evidence]:[],r=V.chapterPlans.find(a=>a.chapterId===c.id||a.chapterTitle===c.title),z=r?Object.values(r.evidenceQueries).flat().filter(Boolean):[],A=c.queries.length>0?c.queries:[q.name,q.outputTitle,c.title],B=bF.get(c.id);if(bB&&B&&B.graphFiles.size>0){let a=[...a0],b=b=>a.includes(b)?b:a.find(a=>a.endsWith(b)||a.includes(b));for(let a of[...B.graphFiles].map(a=>b(a)||a).filter(a=>aC(o,a,a0)).slice(0,12)){let b=bl(a,{maxChunkContentChars:8e3});if(b?.chunks?.length)for(let d of b.chunks)p.push({chapterId:c.id,filePath:b.file?.relativePath||a,score:5+(B.graphWorks.length+B.graphMethods.length)*.5,content:d.content,roleId:aY.get(a),processingType:aZ.get(a),sectionTitle:d.sectionTitle,source:"graph-evidence"})}}let C=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(c.title)?b7:[],D=cv(c,[...A,...z],C),E=cw(c,C),F=Date.now();P[i]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:Q.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(c.title)} 正在执行质量优先的章节检索${B?.graphFiles.size?`(图谱匹配 ${B.graphFiles.size} 个文件)`:""}`,details:D.slice(0,E).map(a=>`检索:${a.slice(0,42)}`),progress:{current:g+1,total:bG.length,label:"证据检索"}},{subtitle:(0,t.GQ)(c.title),order:g}),I();let H=m?[]:[...a0].filter(Boolean).sort(),J=m?[]:bx?.evidenceByChapterId?.[c.id]||[];J.length>0&&p.push(...J);let L=[],O=D.slice(0,E);if(H.length>0&&O.length>0){(0,M.Te)(a.signal);let b=await (0,M.l$)(O,async a=>bm(a,H,Math.min(a2,12),c.title),{kind:"search"});L.push(...b)}for(let a of(bS.evidence.searchQueries+=Math.min(D.length,E),bS.evidence.searchMs+=Date.now()-F,L))p.push(...a.filter(a=>aC(o,a.filePath,aX)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:aY.get(a.filePath),processingType:aZ.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));let R=m?[]:await (0,aE.$b)({manager:y,projectRoot:o,chapter:c,plan:r,profile:U,scopedFilePaths:H,limitPerQuery:Math.min(a2,10),signal:a.signal}).catch(()=>[]);p.push(...R);let S=new Set((c.pinnedEvidenceFilePaths||[]).filter(Boolean)),W=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(c.title)&&p.push(...bp.map(a=>({...a,chapterId:c.id,source:"pinned-evidence"})));let X=new Set([...S]),Y=bP.chapterTargets.get(c.id)||1200,Z=(0,s.Pc)(Y,6e3,12e3);for(let a of X){if(!aC(o,a,aX))continue;let b=S.has(a),d=bl(a,{maxChunkContentChars:Z});d&&p.push(...d.chunks.map(a=>({chapterId:c.id,filePath:d.file.relativePath,score:1,content:a.content,roleId:aY.get(d.file.relativePath),processingType:aZ.get(d.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let $=p.filter(a=>aC(o,a.filePath,a0));if(!m&&aG.enabled&&aG.allowProjectFacts){let b=await bo({config:aG,chapterId:c.id,chapterTitle:c.title,sectionTitles:c.sections||[],runtimeRules:aH,localFacts:[...bz.project,...bz.schedule,...bz.quality,...bz.safety,...bz.resources,...bz.preciseFacts],signal:a.signal});a8.queries.push(...b.queries),a8.filteredCount+=b.filtered+b.evidence.length}let aa=(0,s.Pc)(Y,7e3,26e3),ab=m?[]:(0,aE.SK)({project:a$,chapter:c,plan:r,profile:U,scopedFilePaths:H,highRisk:a5.highRisk});ab.length>0&&$.push(...bt(ab,a1)),$=bt($,a1);let ac=cu(c,$,{maxItems:cx(a2,c,a5.highRisk),maxChars:aa+(a5.highRisk?14e3:4e3),preservePinned:!0},bS);bv(ac,a1,`chapter:${c.id}:initial`);let ae=c.requiredFacts.filter(a=>!ac.some(b=>(0,u.Lk)(b,a))),af=0,ag=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>cT(`${a.sectionTitle||""}${a.content||""}`).includes(cT(b)))),c=(a.chapter.tablePlans||[]).flatMap(a=>a.fillability?.missingProjectFactFields||[]),d=a.evidence.length<3?["章节证据数量不足"]:[],e=b.length+c.length+d.length,f=e>=5?"high":e>=2?"medium":"low",g="high"===f?"evidence_first":c.length>0?"generate_with_review_notes":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:f,missingFacts:b,missingEvidence:d,tableFieldGaps:[...new Set(c)],suggestedStrategy:g,reason:0===e?"章节事实、证据和表格可填性满足常规生成条件。":`识别到 ${e} 项生成前缺口,按 ${g} 策略生成。`}}({chapter:c,evidence:ac}),ai=new Set(ac.map(a=>a.filePath)).size,ak=!!B&&(B?.graphFiles.size||0)>=8&&ai>=6&&0===ae.length&&"low"===ag.riskLevel,al=H.length<=80&&("evidence_first"===ag.suggestedStrategy||a5.highRisk||ae.length>0||ac.length<8&&"low"!==ag.riskLevel);if(!ak&&al&&H.length>0){let b=await _({manager:y,projectRoot:o,chapter:c,scopedFilePaths:H,fileRoleByPath:aY,fileProcessingByPath:aZ,requiredNeeds:ae,highRisk:a5.highRisk,signal:a.signal}).catch(()=>[]);af=b.length,b.length>0&&($=cu(c,[...$,...bt(b,a1)],{maxItems:cx(a2+12,c,a5.highRisk),maxChars:aa+(a5.highRisk?36e3:16e3),preservePinned:!0},bS),$=bt($,a1),ac=cu(c,$,{maxItems:cx(a2+8,c,a5.highRisk),maxChars:aa+(a5.highRisk?28e3:12e3),preservePinned:!0},bS),bv(ac,a1,`chapter:${c.id}:deep`),ae=c.requiredFacts.filter(a=>!ac.some(b=>(0,u.Lk)(b,a))))}for(let a of(0===ac.length&&a9.push(`${c.title}:缺少可支撑正文的项目资料证据`),ae))a9.push(`${c.title}:事实需求未满足 ${a}`);let am=(0,ay.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:a6.length>0?"success":"failed",message:`已检索/绑定 ${a6.length} 条证据`});bi<0?bi=(0,ay.fx)(P,am):P[bi]={...am,order:P[bi]?.order??am.order},I(),(0,M.Te)(a.signal);let ao=[B?[B.graphWorks.length?`图谱识别本章工程内容:${B.graphWorks.join("、")}`:"",B.graphMethods.length?`图谱识别本章施工方法:${B.graphMethods.join("、")}`:"",B.graphBoqItems.length?`图谱识别本章BOQ清单项(${B.graphBoqItems.length}项):${B.graphBoqItems.slice(0,30).map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",B.gaps.length?`图谱识别本章资料缺口:${B.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",r?.writingGoal,r?.mustCover?.length?`本章必须覆盖:${r.mustCover.join("、")}`:"",r?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${r.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),ap=co(Q,c);if(Q.writerPrompts.length>0&&!ap.primaryWriter)throw Error(`${(0,t.GQ)(c.title)} 写作主控提示词未进入章节生成阶段`);let ax=[ap.promptTexts,an].filter(Boolean).join("\n\n"),az=ap.promptDetails.length?ap.promptDetails:["未绑定章节写作提示词"],aD=function(a){let b=a.profile||l,c=[],d=[a.template.name,a.template.outputTitle,a.chapter.title,a.chapter.purpose,...a.chapter.sections||[]].filter(Boolean).join(" "),e=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title);for(let d of a.chapter.requiredFacts||[])as(c,b,{label:d,category:n(b,d)?.category||"required",required:!0,source:"template"});for(let d of a.chapter.sections||[])as(c,b,{label:d,category:"section",required:!1,source:"section",queries:ar(d,[a.chapter.title])});for(let d of a.plan?.requiredContents||[])as(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of a.plan?.evidenceNeeds||[])as(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of e?.requiredFactIds||[]){let e=a.spec?.factFields.find(a=>a.id===d);e&&as(c,b,{label:e.name,category:n(b,e.name)?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:ar(e.name,[e.extractionHint||"",e.validationHint||""])})}for(let e of a.spec?.factFields||[]){if(!e.required)continue;let f=n(b,e.name),g=`${e.name} ${e.extractionHint||""} ${e.validationHint||""}`;(d.includes(e.name)||ar(e.name,f?.aliases||[]).some(a=>d.includes(a))||a.chapter.requiredFacts.some(a=>a.includes(e.name)||e.name.includes(a)))&&as(c,b,{label:e.name,category:f?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:ar(e.name,[g])})}for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&d.includes(a))&&at(c,b,a,"profile","must_use"===a.usagePolicy,[d]);let f=aq(a.requirement||"");if(f)for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&f.includes(a))&&at(c,b,a,"requirement",!0,[f]);let g=aq(a.promptTexts||"");if(g)for(let d of b.factFields)[d.name,...d.aliases].some(a=>a.length>=2&&g.includes(a))&&at(c,b,d,"prompt","must_use"===d.usagePolicy,[a.chapter.title]);return c}({template:q,chapter:c,spec:ah,profile:aj,promptTexts:ax,requirement:a.requirement,plan:r?{requiredContents:r.mustCover,evidenceNeeds:Object.values(r.evidenceQueries).flat()}:void 0}),aF=av({needs:aD,factsModel:bz,evidence:$,profile:aj}),aI=aF.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label);if(aI.length>0&&H.length>0){let b=await cz({manager:y,projectRoot:o,chapter:c,needs:aI,scopedFilePaths:H,fileRoleByPath:aY,fileProcessingByPath:aZ,signal:a.signal}).catch(()=>[]),d=await _({manager:y,projectRoot:o,chapter:c,scopedFilePaths:H,fileRoleByPath:aY,fileProcessingByPath:aZ,requiredNeeds:aI,highRisk:!0,signal:a.signal}).catch(()=>[]),e=bt([...b,...d],a1);e.length>0&&($=cu(c,[...$,...e],{maxItems:cx(a2+16,c,!0),maxChars:aa+42e3,preservePinned:!0},bS),$=bt($,a1),ac=cu(c,$,{maxItems:cx(a2+12,c,!0),maxChars:aa+32e3,preservePinned:!0},bS),bv(ac,a1,`chapter:${c.id}:supplemental`),ae=c.requiredFacts.filter(a=>!ac.some(b=>(0,u.Lk)(b,a))),aI=(aF=av({needs:aD,factsModel:bz,evidence:$,profile:aj})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}bv(ac,a1,`chapter:${c.id}:writer-input`);let aJ=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b)||`${a.sectionTitle||""} ${a.content}`.includes(b))).length,d=a.chapter.requiredFacts.length,e=a.chapter.requiredFacts.filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:c,evidence:ac,risk:a5});a7.push(aJ);let aK=new Set(ac.map(a=>a.filePath)),aL=ac.reduce((a,b)=>a+b.content.length,0),aM=[...a5.highRisk?[`召回覆盖风险(${a5.riskReason||"切片未完全预加载"}):已加载 ${a5.loadedChunks}/${a5.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${J.length} 条`,`深召回证据:${af} 条`,`事实覆盖:${aJ.requiredFactCovered}/${aJ.requiredFactTotal}`,`小节覆盖:${aJ.sectionCovered}/${aJ.sectionTotal}`];P[i]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:Q.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(c.title)} 已选取 ${ac.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aK.size} 份`,`上下文字符:${aL}`,`检索查询:${Math.min(D.length,E)} 组`,...aM],progress:{current:g+1,total:bG.length,label:"正文生成"}},{subtitle:(0,t.GQ)(c.title),order:g}),I(),bS.evidence.contextChars+=aL;let aN=(j=aF,au(j.flatMap(a=>a.facts))),aO=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(c.title)?bs:[],aP=function(a){let b=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title),c=(b?.requiredFactIds||[]).map(b=>a.spec?.factFields.find(a=>a.id===b)?.name).filter(Boolean),d=[...new Set([...a.chapter.requiredFacts,...c,...a.plan?.requiredContents||[],...a.plan?.evidenceNeeds||[],...(a.resolvedFactNeeds||[]).filter(a=>a.need.required).map(a=>a.need.label)].filter(Boolean))],e=a.roleFacts.map(({fact:a})=>`- ${a.key}:${(0,s.eE)((0,M.lG)(a.value))}`),f=(a.resolvedFactNeeds||[]).flatMap(a=>a.facts),g=a.indexedFacts||[],h=(0,N.Cr)(g,a=>(0,N.rF)(a),{maxItems:48,maxChars:12e3},"indexedFacts"),i=f.length>0?[]:h.selected.map(a=>`- ${a.key||a.fieldName||"资料事实"}:${(0,s.eE)((0,M.lG)(a.value)).slice(0,180)}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`),j=h.dropped.length>0?[`⚠️ ${h.dropped.length} 个低优先级事实未列出(完整列表见事实主表)`]:[],k=[...f,...g].filter(a=>/建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`)).filter((a,b,c)=>c.findIndex(b=>`${b.key||b.fieldName}:${(0,M.lG)(b.value)}`==`${a.key||a.fieldName}:${(0,M.lG)(a.value)}`)===b),l=[...new Set([...function(a){let b=new Set,c=/(?:\b[A-Z]{1,8}[\w./-]*\d[\w./-]*\b|\b\d+(?:\.\d+)?\s*(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|L|ml|MPa|kPa|℃|%|台|套|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年|万元|元)\b|\b\d+\s*[×xX]\s*\d+(?:\s*[×xX]\s*\d+)?\b|\b(?:GB|GB\/T|ISO|IEC|IEEE|RFC|API|DB\d*|T\/[A-Z]+)\s*[\w.-]+\b)/giu;for(let d of a){let a=(0,M.lG)(d.content).replace(/\s+/gu," ");if((!/报价明细|投标报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(a)||/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(a))&&!/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂/u.test(a)){for(let d of a.matchAll(c))b.add(d[0].trim());if(b.size>=40)break}}return[...b].slice(0,40)}(a.evidence),...f.map(a=>(0,M.lG)(a.value)).filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|JGJ|ISO|台|套|个|项|批|次|份|人|㎡|日历天|万元|元/iu.test(a)),...g.map(a=>(0,M.lG)(a.value)).filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|m³|MPa|kPa|℃|%|GB|JGJ|ISO|台|套|个|项|批|次|份|人|㎡|日历天|万元|元/iu.test(a))])],m=0,n=[];for(let a of l){if(m+a.length>3e3&&n.length>=10)break;n.push(a),m+=a.length+1}let o=new Set([...a.evidence.map(a=>a.filePath),...f.map(a=>a.sourceFile),...(a.indexedFacts||[]).map(a=>a.sourceFile)]).size,p=(a.resolvedFactNeeds||[]).filter(a=>"satisfied"!==a.status&&a.need.required).map(a=>a.need.label);return["【本章事实覆盖与参数落位要求】",d.length?`必须优先覆盖的事实/要求:
105
105
  ${d.map(a=>`- ${a}`).join("\n")}`:"",e.length?`角色节点已抽取事实:
106
106
  ${e.join("\n")}`:"",k.length?`项目基础事实卡片(资料已明确,项目概况、项目基本信息表、进度和质量相关内容必须优先使用,不得输出任何占位话术):
107
107
  ${k.map(a=>`- ${a.key||a.fieldName}:${(0,s.eE)((0,M.lG)(a.value)).slice(0,220)}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`).join("\n")}
108
108
  项目基本信息表必须使用固定表头:| 信息项 | 内容 |,不得使用“序号|项目名称|内容参数”表头,不得输出后台溯源列。`:"",a.factNeedsPrompt||"",i.length?`全局资料事实索引匹配到的本章可写事实:
109
- ${i.join("\n")}`:"",n.length?`本章资料中可直接使用的可靠精确参数/编号:${n.join("、")}。这些参数来自绑定资料,不属于编造;涉及对应对象、部位、工序、材料、设备、项目概况、质量验收或安全控制时必须自然写入正文,并保持原样或等价专业表达。项目基础事实中的合同估算价、计划工期可用于项目概况;不得写入报价明细、单价、税率、预留金。`:"",p.length?`当前事实需求仍未充分确认:${p.join("、")}。未确认项不得编造;但已满足事实需求中的资料事实必须写入对应小节。`:"",a.missingFacts.length?`模板显式要求中当前检索未充分命中的项:${a.missingFacts.join("、")}。未命中项不得编造,但不得因此省略上方已经明确的可靠参数。`:"",`本章可用材料来源约 ${o} 个文件,正文必须按事实需求把可用事实内化到对应小节,不得单列后台资料清单。`,...j].filter(Boolean).join("\n")}({chapter:c,plan:void 0,spec:ah,roleFacts:S,evidence:ab,missingFacts:ac,indexedFacts:[...aN,...aM],resolvedFactNeeds:aD,factNeedsPrompt:function(a){let b=a.map(a=>{let b=a.facts.slice(0,5).map(b=>`${b.key||b.fieldName||a.need.label}=${aw(b.value)}${b.sourceFile?`(${e.basename(b.sourceFile)})`:""}`),c=a.facts.length?[]:(a.evidence||[]).slice(0,2).map(a=>`证据片段:${aw(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?`事实需求覆盖卡片:
110
- ${b.join("\n")}`:""}(aD)}),aP=function(a){let b=Date.now(),c=a.plan.chapters.find(b=>b.chapterId===a.chapter.id)||a.plan.chapters.find(b=>b.title===a.chapter.title);if(!c)throw Error(`缺少章节计划:${a.chapter.title}`);let d=a.context.facts.filter(a=>c.evidenceQueries.some(b=>cL(a,b))||c.requiredFacts.some(b=>cL(a,b))),e=c.sections.map(b=>{let c=a.context.facts.filter(a=>b.evidenceQueries.some(b=>cL(a,b))||b.requiredFacts.some(b=>cL(a,b))).slice(0,24),d=a.evidence.filter(a=>b.evidenceQueries.some(b=>(function(a,b){let c=cJ(`${a.sectionTitle||""} ${a.content||""} ${a.filePath||""}`);return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(cJ(a)))})(a,b))).slice(0,24),e=b.requiredGraphNodes.flatMap(b=>cM(a.context.baseProjectGraph,b)).slice(0,12),f=[];return 0===d.length&&0===c.length&&0===e.length&&f.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${b.title} 缺少事实、图谱或证据支撑`,suggestion:"应先定向检索和抽取事实,不能生成占位正文。"}),{...b,factIds:c.map(a=>(0,M.c6)({key:a.key,value:(0,M.lG)(a.value),sourceFile:a.sourceFile}).slice(0,12)),evidenceIds:d.map(a=>(0,M.c6)({filePath:a.filePath,content:a.content.slice(0,160),score:a.score}).slice(0,12)),graphNodeIds:e.map(a=>(0,M.c6)(a).slice(0,12)),ready:0===f.length,issues:f}}),f=e.flatMap(a=>a.issues),g={taskId:`chapter-task-${(0,M.c6)({plan:a.plan.planId,chapter:a.chapter.id,evidence:a.evidence.map(a=>(0,M.c6)({filePath:a.filePath,content:a.content.slice(0,120),score:a.score}))}).slice(0,10)}`,chapterId:a.chapter.id,title:a.chapter.title,facts:d.slice(0,48),evidence:a.evidence.slice(0,48),graphContext:cM(a.context.baseProjectGraph,a.chapter.title).slice(0,20).join("\n"),sections:e,ready:0===f.length,issues:f};return{task:g,node:{id:`chapter-task-${a.chapter.id}`,type:"chapter_task_planner",status:g.ready?"completed":"failed",startedAt:b,completedAt:Date.now(),outputSummary:`${g.sections.filter(a=>a.ready).length}/${g.sections.length} 个小节任务就绪`,metrics:{facts:g.facts.length,evidence:g.evidence.length,issues:f.length},issues:f}}}({plan:bQ.plan,chapter:c,context:bA,evidence:ab});if(bA.chapterTasks=[...(bA.chapterTasks||[]).filter(a=>a.chapterId!==c.id),aP.task],bA.nodes.push(aP.node),(0,ay.fx)(P,(0,ay.X5)({type:"validation",roleId:`agent-chapter-task-${c.id}`,status:aP.task.ready||m?"success":"failed",message:aP.task.ready?aP.node.outputSummary||`${(0,t.GQ)(c.title)} 章节任务规划完成`:m?`${(0,t.GQ)(c.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:aP.node.outputSummary||`${(0,t.GQ)(c.title)} 章节任务规划完成`,details:aP.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:P.length})),I(G),!aP.task.ready&&!m)throw Error(`${(0,t.GQ)(c.title)} 章节任务未就绪:${aP.task.issues.map(a=>a.message).join(";")}`);let aQ=[ap,cP(aP.task)].filter(Boolean).join("\n\n"),aR={total:aD.length,satisfied:aD.filter(a=>"satisfied"===a.status).length,missing:aD.filter(a=>"missing"===a.status).length,lowConfidence:aD.filter(a=>"low_confidence"===a.status).length};for(let a of aF)a9.push(`${c.title}:事实需求未确认 ${a}`);let aS=ah?.chapterRules.find(a=>a.id===c.id||a.title===c.title),aT=bP.chapterTargets.get(c.id)||1200,aV=c.sections?.filter(Boolean).length||0,aW=/[、,,;;]/u.test(c.title),a_=function(a){let{budgetTarget:b,sectionCount:c,title:d,longformStrict:e}=a,f=/[、,,;;]/u.test(d),g=/工期|进度|质量|安全|危大|资源|人材机|保障|措施|重难点/u.test(d),h=/概况|结语|附录|说明/u.test(d),i=c>0?c*(f?720:g?900:780):g?5200:3600,j=e?h?2600:g?5200:3600:Math.min(1200,b),k=e?Math.min(Math.max(4200,b),c>=30?9800:f?8800:g?9200:7200):b,l=Math.max(j,Math.min(b,i,k));return{budgetTarget:b,roundTarget:l,structureTarget:i,maxWords:Math.ceil(l*(a.longformStrict?1.12:1.18)),label:`章节预算约 ${b} 字,本轮生成约 ${l} 字,结构目标约 ${i} 字`}}({budgetTarget:aT,sectionCount:aV,title:c.title,longformStrict:bP.longformStrict}),a3=Math.ceil(a_.maxWords*(bP.maxChars?1.05:1)),bf=bP.targetChars?Math.min(1800,Math.max(600,Math.floor(.45*a_.roundTarget))):1200,bj=a_.roundTarget,bk=Math.max(Math.min(aS?.minWords||0,bj),Math.min(ah?.dynamicChapterRule.minWordsPerChapter||0,bj),Math.floor(.68*bj),bf),bn=be(bk,bj),bq=aV>0?Math.min(bj,Math.max(1800,a_.structureTarget)):bj,br=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),bu=process.env.DOCUMENT_SECTION_FIRST_GENERATION,bw=void 0!==bu&&0===Number(bu),bx=void 0!==bu&&0!==Number(bu),by=bj>=6e3&&aV>=4&&aV<=br&&!aW,bC=!bw&&aV>=2&&(aV>br||aW||bP.longformStrict&&aV>=6),bD=!bw&&!bC&&aV>=2&&aV<=br&&(bx||by||bP.longformStrict);if(m)b=cn(m,c),f=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"success",message:`${(0,t.GQ)(c.title)} 已复用已有章节正文:当前 ${(0,w.V7)(b)} 字,跳过 Writer,直接进入 Reviewer/Repairer/Final Gate`,details:[`有效证据:${ab.length} 条`,`事实需求:${aR.satisfied}/${aR.total} 已满足,缺失 ${aR.missing},低置信 ${aR.lowConfidence}`,"来源:resumeChapters/checkpointChapters"],progress:{current:g+1,total:bG.length,label:"复用章节"}},{subtitle:(0,t.GQ)(c.title),order:g}),P[i]=f,I(G);else{P[i]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:bC?`${(0,t.GQ)(c.title)} 正在按语义小节组并发成稿`:bD?`${(0,t.GQ)(c.title)} 正在按小节并发成稿`:`${(0,t.GQ)(c.title)} 正在整章一次成稿`,details:bC||bD?[...ax,`有效证据:${ab.length} 条`,`事实需求:${aR.satisfied}/${aR.total} 已满足,缺失 ${aR.missing},低置信 ${aR.lowConfidence}`,a_.label,`生成上限约 ${a3} 字`,`规划小节:${c.sections?.length||0} 个`,bC?"小节较多,按工期/质量/安全/资源等语义组并发生成,避免整章长调用低产":"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...ax,`有效证据:${ab.length} 条`,`事实需求:${aR.satisfied}/${aR.total} 已满足,缺失 ${aR.missing},低置信 ${aR.lowConfidence}`,a_.label,`生成上限约 ${a3} 字`,`规划小节:${aV} 个`,"首次生成必须覆盖章节结构、小节和事实,篇幅目标仅作为规划参考"],progress:{current:g+1,total:bG.length,label:bC?"小节分组":bD?"小节并发":"整章成稿"}},{subtitle:(0,t.GQ)(c.title),order:g}),I();let d=bC?await K(()=>aA(bS,`chapter-section-group-draft:${c.id}`,()=>bc({template:q,chapter:c,evidence:ab,missingFacts:ac,promptTexts:aQ,projectContext:bI,requirement:a.requirement,roleContext:am,targetWords:bq,maxWords:a3,forbidDrawingImages:!1,factCoverageContext:aO,sectionEvidenceProvider:b=>cy({manager:y,projectRoot:o,chapter:c,sectionTitle:b,scopedFilePaths:H,fileRoleByPath:aY,fileProcessingByPath:aZ,signal:a.signal}),diagnostics:bS,signal:a.signal}))):bD?await K(()=>aA(bS,`chapter-section-draft:${c.id}`,()=>bd({template:q,chapter:c,evidence:ab,missingFacts:ac,promptTexts:aQ,projectContext:bI,requirement:a.requirement,roleContext:am,targetWords:bq,maxWords:a3,forbidDrawingImages:!1,factCoverageContext:aO,projectRoot:o,modelName:(0,ad.$y)()?.model.name,materialContextHash:(0,M.c6)({materialFilePaths:T,promptTexts:ap}),allowPartialResult:!1,sectionEvidenceProvider:b=>cy({manager:y,projectRoot:o,chapter:c,sectionTitle:b,scopedFilePaths:H,fileRoleByPath:aY,fileProcessingByPath:aZ,signal:a.signal}),diagnostics:bS,signal:a.signal}))):await K(()=>aA(bS,`chapter-draft:${c.id}`,()=>aU(q,c,ab,ac,aQ,bI,a.requirement,am,{forbidDrawingImages:!1,minWords:bk,targetWords:bj,maxWords:a3,maxTokens:bn,factCoverageContext:aO,signal:a.signal})));if(!d&&bC&&(P[i]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:`${(0,t.GQ)(c.title)} 小节组未返回有效正文,正在切换为逐小节备用成稿`,details:[`LLM 最近错误:${bS.llm.lastError||"小节组空响应或超时"}`,`有效证据:${ab.length} 条`],progress:{current:g+1,total:bG.length,label:"备用成稿"}},{subtitle:(0,t.GQ)(c.title),order:g}),I(G),d=await K(()=>aA(bS,`chapter-section-fallback:${c.id}`,()=>bd({template:q,chapter:c,evidence:ab,missingFacts:ac,promptTexts:aQ,projectContext:bI,requirement:a.requirement,roleContext:am,targetWords:bq,maxWords:a3,forbidDrawingImages:!1,factCoverageContext:aO,projectRoot:o,modelName:(0,ad.$y)()?.model.name,materialContextHash:(0,M.c6)({materialFilePaths:T,promptTexts:ap,fallback:"section-parallel"}),allowPartialResult:!1,sectionEvidenceProvider:b=>cy({manager:y,projectRoot:o,chapter:c,sectionTitle:b,scopedFilePaths:H,fileRoleByPath:aY,fileProcessingByPath:aZ,signal:a.signal}),diagnostics:bS,signal:a.signal}).catch(a=>{bS.llm.lastError=a instanceof Error?a.message:String(a)})))),!d&&(bC||bD)&&(P[i]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:`${(0,t.GQ)(c.title)} 小节成稿未完成,正在切换为整章紧凑备用成稿`,details:[`LLM 最近错误:${bS.llm.lastError||"小节成稿空响应或超时"}`,`有效证据:${ab.length} 条`],progress:{current:g+1,total:bG.length,label:"整章备用"}},{subtitle:(0,t.GQ)(c.title),order:g}),I(G),d=await K(()=>aA(bS,`chapter-compact-fallback:${c.id}`,()=>aU(q,c,ab,ac,aQ,bI,a.requirement,am,{forbidDrawingImages:!1,minWords:Math.floor(.65*bk),targetWords:Math.floor(.75*bq),maxWords:a3,maxTokens:bn,factCoverageContext:aO,signal:a.signal}).catch(a=>{bS.llm.lastError=a instanceof Error?a.message:String(a)})))),!d&&ab.length>0&&(P[i]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:`${(0,t.GQ)(c.title)} LLM 多路径未返回有效正文,正在用当前项目证据生成可审查草稿`,details:[`LLM 最近错误:${bS.llm.lastError||"空响应或超时"}`,`证据条数:${ab.length}`],progress:{current:g+1,total:bG.length,label:"证据草稿"}},{subtitle:(0,t.GQ)(c.title),order:g}),I(G),d=function(a){let b=(a.chapter.sections?.length?a.chapter.sections:["资料依据与施工对象","主要控制措施","检查验收与闭环管理"]).flatMap(b=>{let c=(function(a,b,c){let d=[a,b.title,...a.split(/[、,,;;\s]+/u)].filter(a=>a.length>=2),e=c.map(a=>{let b=(0,s.eE)(a.content||"").replace(/\s+/gu," ").trim(),c=d.reduce((c,d)=>c+(b.includes(d)||(a.sectionTitle||"").includes(d)?1:0),0)+a.score;return{content:b,score:c}}).filter(a=>a.content.length>=30).sort((a,b)=>b.score-a.score),f=[];for(let a of e.slice(0,8)){for(let b of a.content.split(/[。;;\n]/u).map(a=>a.trim()).filter(Boolean))if(!(b.length<18||b.length>180||/报价|单价|税率|利润|后台|知识库|提示词|OCR|文件路径/u.test(b))&&!(/^(?:本节围绕|本小节依据|项目实施时应|实施过程中应|当前绑定资料|当前项目绑定资料)/u.test(b)||/确保各项措施与本工程实施条件相匹配/u.test(b)||/形成责任明确、过程可控、资料完整的管理闭环/u.test(b)||/确保现场管理要求与施工进度、资源组织和验收节点同步推进/u.test(b)||/^管理闭环[。;;]?$/u.test(b)||/资料参数行摘要|房建市政施工评定分离招标示范文本|我方已仔细研究|中标通知书|签订合同|履约保证金|投标函|投标人须知|招标公告|开标|评标|保证金|电子交易系统|公共资源交易|监管部门|专用账户监管协议书|资金托管专用账号/u.test(b)||/^#+\s*/u.test(b)||/^(?\d+)/u.test(b))&&(f.some(a=>a.includes(b)||b.includes(a))||f.push(b),f.length>=10))break;if(f.length>=10)break}return f})(b,a.chapter,a.evidence).slice(0,8);return 0===c.length?[]:[[`### ${b}`,"",...c.map(a=>`- ${a}。`)].join("\n")]});return 0===b.length?"":(0,v.kT)((0,v.FD)(`## ${a.chapter.title}
109
+ ${i.join("\n")}`:"",n.length?`本章资料中可直接使用的可靠精确参数/编号:${n.join("、")}。这些参数来自绑定资料,不属于编造;涉及对应对象、部位、工序、材料、设备、项目概况、质量验收或安全控制时必须自然写入正文,并保持原样或等价专业表达。项目基础事实中的合同估算价、计划工期可用于项目概况;不得写入报价明细、单价、税率、预留金。`:"",p.length?`当前事实需求仍未充分确认:${p.join("、")}。未确认项不得编造;但已满足事实需求中的资料事实必须写入对应小节。`:"",a.missingFacts.length?`模板显式要求中当前检索未充分命中的项:${a.missingFacts.join("、")}。未命中项不得编造,但不得因此省略上方已经明确的可靠参数。`:"",`本章可用材料来源约 ${o} 个文件,正文必须按事实需求把可用事实内化到对应小节,不得单列后台资料清单。`,...j].filter(Boolean).join("\n")}({chapter:c,plan:void 0,spec:ah,roleFacts:W,evidence:ac,missingFacts:ae,indexedFacts:[...aO,...aN],resolvedFactNeeds:aF,factNeedsPrompt:function(a){let b=a.map(a=>{let b=a.facts.slice(0,5).map(b=>`${b.key||b.fieldName||a.need.label}=${aw(b.value)}${b.sourceFile?`(${e.basename(b.sourceFile)})`:""}`),c=a.facts.length?[]:(a.evidence||[]).slice(0,2).map(a=>`证据片段:${aw(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?`事实需求覆盖卡片:
110
+ ${b.join("\n")}`:""}(aF)}),aQ=function(a){let b=Date.now(),c=a.plan.chapters.find(b=>b.chapterId===a.chapter.id)||a.plan.chapters.find(b=>b.title===a.chapter.title);if(!c)throw Error(`缺少章节计划:${a.chapter.title}`);let d=a.context.facts.filter(a=>c.evidenceQueries.some(b=>cL(a,b))||c.requiredFacts.some(b=>cL(a,b))),e=c.sections.map(b=>{let c=a.context.facts.filter(a=>b.evidenceQueries.some(b=>cL(a,b))||b.requiredFacts.some(b=>cL(a,b))).slice(0,24),d=a.evidence.filter(a=>b.evidenceQueries.some(b=>(function(a,b){let c=cJ(`${a.sectionTitle||""} ${a.content||""} ${a.filePath||""}`);return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(cJ(a)))})(a,b))).slice(0,24),e=b.requiredGraphNodes.flatMap(b=>cM(a.context.baseProjectGraph,b)).slice(0,12),f=[];return 0===d.length&&0===c.length&&0===e.length&&f.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${b.title} 缺少事实、图谱或证据支撑`,suggestion:"应先定向检索和抽取事实,不能生成占位正文。"}),{...b,factIds:c.map(a=>(0,M.c6)({key:a.key,value:(0,M.lG)(a.value),sourceFile:a.sourceFile}).slice(0,12)),evidenceIds:d.map(a=>(0,M.c6)({filePath:a.filePath,content:a.content.slice(0,160),score:a.score}).slice(0,12)),graphNodeIds:e.map(a=>(0,M.c6)(a).slice(0,12)),ready:0===f.length,issues:f}}),f=e.flatMap(a=>a.issues),g={taskId:`chapter-task-${(0,M.c6)({plan:a.plan.planId,chapter:a.chapter.id,evidence:a.evidence.map(a=>(0,M.c6)({filePath:a.filePath,content:a.content.slice(0,120),score:a.score}))}).slice(0,10)}`,chapterId:a.chapter.id,title:a.chapter.title,facts:d.slice(0,48),evidence:a.evidence.slice(0,48),graphContext:cM(a.context.baseProjectGraph,a.chapter.title).slice(0,20).join("\n"),sections:e,ready:0===f.length,issues:f};return{task:g,node:{id:`chapter-task-${a.chapter.id}`,type:"chapter_task_planner",status:g.ready?"completed":"failed",startedAt:b,completedAt:Date.now(),outputSummary:`${g.sections.filter(a=>a.ready).length}/${g.sections.length} 个小节任务就绪`,metrics:{facts:g.facts.length,evidence:g.evidence.length,issues:f.length},issues:f}}}({plan:bQ.plan,chapter:c,context:bA,evidence:ac});if(bA.chapterTasks=[...(bA.chapterTasks||[]).filter(a=>a.chapterId!==c.id),aQ.task],bA.nodes.push(aQ.node),(0,ay.fx)(P,(0,ay.X5)({type:"validation",roleId:`agent-chapter-task-${c.id}`,status:aQ.task.ready||m?"success":"failed",message:aQ.task.ready?aQ.node.outputSummary||`${(0,t.GQ)(c.title)} 章节任务规划完成`:m?`${(0,t.GQ)(c.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:aQ.node.outputSummary||`${(0,t.GQ)(c.title)} 章节任务规划完成`,details:aQ.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:P.length})),I(G),!aQ.task.ready&&!m)throw Error(`${(0,t.GQ)(c.title)} 章节任务未就绪:${aQ.task.issues.map(a=>a.message).join(";")}`);let aR=[ax,cP(aQ.task)].filter(Boolean).join("\n\n"),aS={total:aF.length,satisfied:aF.filter(a=>"satisfied"===a.status).length,missing:aF.filter(a=>"missing"===a.status).length,lowConfidence:aF.filter(a=>"low_confidence"===a.status).length};for(let a of aI)a9.push(`${c.title}:事实需求未确认 ${a}`);let aT=ah?.chapterRules.find(a=>a.id===c.id||a.title===c.title),aV=bP.chapterTargets.get(c.id)||1200,aW=c.sections?.filter(Boolean).length||0,a_=/[、,,;;]/u.test(c.title),a3=function(a){let{budgetTarget:b,sectionCount:c,title:d,longformStrict:e}=a,f=/[、,,;;]/u.test(d),g=/工期|进度|质量|安全|危大|资源|人材机|保障|措施|重难点/u.test(d),h=/概况|结语|附录|说明/u.test(d),i=c>0?c*(f?720:g?900:780):g?5200:3600,j=e?h?2600:g?5200:3600:Math.min(1200,b),k=e?Math.min(Math.max(4200,b),c>=30?9800:f?8800:g?9200:7200):b,l=Math.max(j,Math.min(b,i,k));return{budgetTarget:b,roundTarget:l,structureTarget:i,maxWords:Math.ceil(l*(a.longformStrict?1.12:1.18)),label:`章节预算约 ${b} 字,本轮生成约 ${l} 字,结构目标约 ${i} 字`}}({budgetTarget:aV,sectionCount:aW,title:c.title,longformStrict:bP.longformStrict}),bf=Math.ceil(a3.maxWords*(bP.maxChars?1.05:1)),bj=bP.targetChars?Math.min(1800,Math.max(600,Math.floor(.45*a3.roundTarget))):1200,bk=a3.roundTarget,bn=Math.max(Math.min(aT?.minWords||0,bk),Math.min(ah?.dynamicChapterRule.minWordsPerChapter||0,bk),Math.floor(.68*bk),bj),bq=be(bn,bk),br=aW>0?Math.min(bk,Math.max(1800,a3.structureTarget)):bk,bu=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),bw=process.env.DOCUMENT_SECTION_FIRST_GENERATION,by=void 0!==bw&&0===Number(bw),bC=void 0!==bw&&0!==Number(bw),bD=bk>=6e3&&aW>=4&&aW<=bu&&!a_,bE=!by&&aW>=2&&(aW>bu||a_||bP.longformStrict&&aW>=6),bH=!by&&!bE&&aW>=2&&aW<=bu&&(bC||bD||bP.longformStrict);if(m)b=cn(m,c),f=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ap.primaryPromptId,status:"success",message:`${(0,t.GQ)(c.title)} 已复用已有章节正文:当前 ${(0,w.V7)(b)} 字,跳过 Writer,直接进入 Reviewer/Repairer/Final Gate`,details:[`有效证据:${ac.length} 条`,`事实需求:${aS.satisfied}/${aS.total} 已满足,缺失 ${aS.missing},低置信 ${aS.lowConfidence}`,"来源:resumeChapters/checkpointChapters"],progress:{current:g+1,total:bG.length,label:"复用章节"}},{subtitle:(0,t.GQ)(c.title),order:g}),P[i]=f,I(G);else{P[i]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ap.primaryPromptId,status:"running",message:bE?`${(0,t.GQ)(c.title)} 正在按语义小节组并发成稿`:bH?`${(0,t.GQ)(c.title)} 正在按小节并发成稿`:`${(0,t.GQ)(c.title)} 正在整章一次成稿`,details:bE||bH?[...az,`有效证据:${ac.length} 条`,`事实需求:${aS.satisfied}/${aS.total} 已满足,缺失 ${aS.missing},低置信 ${aS.lowConfidence}`,a3.label,`生成上限约 ${bf} 字`,`规划小节:${c.sections?.length||0} 个`,bE?"小节较多,按工期/质量/安全/资源等语义组并发生成,避免整章长调用低产":"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...az,`有效证据:${ac.length} 条`,`事实需求:${aS.satisfied}/${aS.total} 已满足,缺失 ${aS.missing},低置信 ${aS.lowConfidence}`,a3.label,`生成上限约 ${bf} 字`,`规划小节:${aW} 个`,"首次生成必须覆盖章节结构、小节和事实,篇幅目标仅作为规划参考"],progress:{current:g+1,total:bG.length,label:bE?"小节分组":bH?"小节并发":"整章成稿"}},{subtitle:(0,t.GQ)(c.title),order:g}),I();let d=bE?await K(()=>aA(bS,`chapter-section-group-draft:${c.id}`,()=>bc({template:q,chapter:c,evidence:ac,missingFacts:ae,promptTexts:aR,projectContext:bI,requirement:a.requirement,roleContext:ao,targetWords:br,maxWords:bf,forbidDrawingImages:!1,factCoverageContext:aP,sectionEvidenceProvider:b=>cy({manager:y,projectRoot:o,chapter:c,sectionTitle:b,scopedFilePaths:H,fileRoleByPath:aY,fileProcessingByPath:aZ,signal:a.signal}),diagnostics:bS,signal:a.signal}))):bH?await K(()=>aA(bS,`chapter-section-draft:${c.id}`,()=>bd({template:q,chapter:c,evidence:ac,missingFacts:ae,promptTexts:aR,projectContext:bI,requirement:a.requirement,roleContext:ao,targetWords:br,maxWords:bf,forbidDrawingImages:!1,factCoverageContext:aP,projectRoot:o,modelName:(0,ad.$y)()?.model.name,materialContextHash:(0,M.c6)({materialFilePaths:T,promptTexts:ax}),allowPartialResult:!1,sectionEvidenceProvider:b=>cy({manager:y,projectRoot:o,chapter:c,sectionTitle:b,scopedFilePaths:H,fileRoleByPath:aY,fileProcessingByPath:aZ,signal:a.signal}),diagnostics:bS,signal:a.signal}))):await K(()=>aA(bS,`chapter-draft:${c.id}`,()=>aU(q,c,ac,ae,aR,bI,a.requirement,ao,{forbidDrawingImages:!1,minWords:bn,targetWords:bk,maxWords:bf,maxTokens:bq,factCoverageContext:aP,signal:a.signal})));if(!d&&bE&&(P[i]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ap.primaryPromptId,status:"running",message:`${(0,t.GQ)(c.title)} 小节组未返回有效正文,正在切换为逐小节备用成稿`,details:[`LLM 最近错误:${bS.llm.lastError||"小节组空响应或超时"}`,`有效证据:${ac.length} 条`],progress:{current:g+1,total:bG.length,label:"备用成稿"}},{subtitle:(0,t.GQ)(c.title),order:g}),I(G),d=await K(()=>aA(bS,`chapter-section-fallback:${c.id}`,()=>bd({template:q,chapter:c,evidence:ac,missingFacts:ae,promptTexts:aR,projectContext:bI,requirement:a.requirement,roleContext:ao,targetWords:br,maxWords:bf,forbidDrawingImages:!1,factCoverageContext:aP,projectRoot:o,modelName:(0,ad.$y)()?.model.name,materialContextHash:(0,M.c6)({materialFilePaths:T,promptTexts:ax,fallback:"section-parallel"}),allowPartialResult:!1,sectionEvidenceProvider:b=>cy({manager:y,projectRoot:o,chapter:c,sectionTitle:b,scopedFilePaths:H,fileRoleByPath:aY,fileProcessingByPath:aZ,signal:a.signal}),diagnostics:bS,signal:a.signal}).catch(a=>{bS.llm.lastError=a instanceof Error?a.message:String(a)})))),!d&&(bE||bH)&&(P[i]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ap.primaryPromptId,status:"running",message:`${(0,t.GQ)(c.title)} 小节成稿未完成,正在切换为整章紧凑备用成稿`,details:[`LLM 最近错误:${bS.llm.lastError||"小节成稿空响应或超时"}`,`有效证据:${ac.length} 条`],progress:{current:g+1,total:bG.length,label:"整章备用"}},{subtitle:(0,t.GQ)(c.title),order:g}),I(G),d=await K(()=>aA(bS,`chapter-compact-fallback:${c.id}`,()=>aU(q,c,ac,ae,aR,bI,a.requirement,ao,{forbidDrawingImages:!1,minWords:Math.floor(.65*bn),targetWords:Math.floor(.75*br),maxWords:bf,maxTokens:bq,factCoverageContext:aP,signal:a.signal}).catch(a=>{bS.llm.lastError=a instanceof Error?a.message:String(a)})))),!d&&ac.length>0&&(P[i]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ap.primaryPromptId,status:"running",message:`${(0,t.GQ)(c.title)} LLM 多路径未返回有效正文,正在用当前项目证据生成可审查草稿`,details:[`LLM 最近错误:${bS.llm.lastError||"空响应或超时"}`,`证据条数:${ac.length}`],progress:{current:g+1,total:bG.length,label:"证据草稿"}},{subtitle:(0,t.GQ)(c.title),order:g}),I(G),d=function(a){let b=(a.chapter.sections?.length?a.chapter.sections:["资料依据与施工对象","主要控制措施","检查验收与闭环管理"]).flatMap(b=>{let c=(function(a,b,c){let d=[a,b.title,...a.split(/[、,,;;\s]+/u)].filter(a=>a.length>=2),e=c.map(a=>{let b=(0,s.eE)(a.content||"").replace(/\s+/gu," ").trim(),c=d.reduce((c,d)=>c+(b.includes(d)||(a.sectionTitle||"").includes(d)?1:0),0)+a.score;return{content:b,score:c}}).filter(a=>a.content.length>=30).sort((a,b)=>b.score-a.score),f=[];for(let a of e.slice(0,8)){for(let b of a.content.split(/[。;;\n]/u).map(a=>a.trim()).filter(Boolean))if(!(b.length<18||b.length>180||/报价|单价|税率|利润|后台|知识库|提示词|OCR|文件路径/u.test(b))&&!(/^(?:本节围绕|本小节依据|项目实施时应|实施过程中应|当前绑定资料|当前项目绑定资料)/u.test(b)||/确保各项措施与本工程实施条件相匹配/u.test(b)||/形成责任明确、过程可控、资料完整的管理闭环/u.test(b)||/确保现场管理要求与施工进度、资源组织和验收节点同步推进/u.test(b)||/^管理闭环[。;;]?$/u.test(b)||/资料参数行摘要|房建市政施工评定分离招标示范文本|我方已仔细研究|中标通知书|签订合同|履约保证金|投标函|投标人须知|招标公告|开标|评标|保证金|电子交易系统|公共资源交易|监管部门|专用账户监管协议书|资金托管专用账号/u.test(b)||/^#+\s*/u.test(b)||/^(?\d+)/u.test(b))&&(f.some(a=>a.includes(b)||b.includes(a))||f.push(b),f.length>=10))break;if(f.length>=10)break}return f})(b,a.chapter,a.evidence).slice(0,8);return 0===c.length?[]:[[`### ${b}`,"",...c.map(a=>`- ${a}。`)].join("\n")]});return 0===b.length?"":(0,v.kT)((0,v.FD)(`## ${a.chapter.title}
111
111
 
112
- ${b.join("\n\n")}`,a.forbidDrawingImages))}({chapter:c,evidence:ab,targetWords:bq,forbidDrawingImages:!1})),(0,M.Te)(a.signal),!d){let a=`${(0,t.GQ)(c.title)} 大模型未返回有效正文,已阻断生成`;throw P[i]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"failed",message:a,details:[`LLM 最近错误:${bS.llm.lastError||"空响应或超时"}`,`证据条数:${ab.length}`],progress:{current:g+1,total:bG.length,label:"章节阻断"}},{subtitle:(0,t.GQ)(c.title),order:g}),I(G),Error(a)}let e=d;if(!e.trim())throw Error(`${(0,t.GQ)(c.title)} 首次生成失败,未获得可用于定稿的正文`);b=cn(e,c)}let bE=ba({chapter:c,content:b,evidence:ab}),bH=(0,w.V7)(b),bJ=(0,v.r4)(b),bK=bJ.length>0?bJ:c.sections||[],bL=(0,x.qK)(b,[{title:c.title,content:b,sections:bK}]).map(a=>a.message),bM=bE.slice(0,6).map(a=>`小节事实密度需优化:${a}`),bN=[...bL,...bM],bO=function(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))?"failed":"success"}(bH,0,bN);f=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:bO,message:(0,ay.AQ)(`${(0,t.GQ)(c.title)} 已由大模型成稿:当前 ${bH} 字;章节预算约 ${a_.budgetTarget} 字,本轮目标约 ${a_.roundTarget} 字${bN.length?`;待优化:${bN.slice(0,8).join("、")}`:""}`,h),details:[`本轮完成率:${Math.round(bH/Math.max(1,a_.roundTarget)*100)}%`,`结构目标约 ${a_.structureTarget} 字`,...ax,`二级小节:${bK.length} 个`,`扩写轮次:0`],progress:{current:g+1,total:bG.length,label:bN.length?"章节已生成":"章节达标"}},{subtitle:(0,t.GQ)(c.title),order:g}),bh[g]=f;let bR={id:c.id,title:c.title,content:b,evidence:ab,missingFacts:ac,sections:bK,tablePlans:c.tablePlans||[]},bT=cS({task:aP.task,draft:bR,context:bA});bA.reviewResults={...bA.reviewResults||{},[c.id]:bT};let bU=bT.issues.length>0&&(bT.repairable||bT.issues.some(a=>/Writer 未完成/u.test(a.message)));bA.nodes.push({id:`chapter-reviewer-${c.id}`,type:"chapter_reviewer",status:bT.issues.length?bU?"running":"failed":"completed",startedAt:Date.now(),completedAt:Date.now(),outputSummary:bT.issues.length?`${bT.issues.length} 个 Reviewer 问题`:"Reviewer 通过",metrics:{supportedFacts:bT.supportedFacts},issues:bT.issues}),(0,ay.fx)(P,(0,ay.X5)({type:"llm_review",roleId:`agent-reviewer-${c.id}`,status:bT.issues.length?bU?"running":"failed":"success",message:bT.issues.length?`${(0,t.GQ)(c.title)} Reviewer 发现 ${bT.issues.length} 个问题,等待 Repairer 修复`:`${(0,t.GQ)(c.title)} Reviewer 通过`,details:bT.issues.map(a=>a.message)},{subtitle:"Agent Reviewer",order:P.length})),I(G);let bV=bT.issues.some(a=>/Writer 未完成/u.test(a.message));if(bT.issues.length>0&&(bT.repairable||bV)){let b=bT.repairable?(k={task:aP.task,review:bT}).review.repairable?["【Agent 定向修复任务】",`章节:${k.task.title}`,"只修复下列问题,不重写无关内容;如果问题是小节正文不足,必须按原小节标题完整补足该小节正式正文,每个小节不得少于任务最小深度:",...k.review.issues.map(a=>`- ${a.message};${a.suggestion||""}`),cP(k.task)].join("\n"):"":["【Agent 定向修复任务】",`章节:${aP.task.title}`,"Reviewer 发现 Writer 未完成小节。必须基于对应小节事实卡和证据生成正式正文,替换并删除 WRITER_MISSING_SECTION 标记;不得跳过这些小节,不得保留占位说明。",...bT.issues.map(a=>`- ${a.message};${a.suggestion||""}`)].join("\n"),d=P.length,e=bT.issues.filter(a=>/Writer 未完成/u.test(a.message)),f=bT.issues.filter(a=>/正文不足,未达到任务最小深度/u.test(a.message)),g=[...e,...f.filter(a=>!e.some(b=>b.message===a.message))],h=[];for(let[e,f]of((0,ay.fx)(P,(0,ay.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:"running",message:`${(0,t.GQ)(c.title)} Reviewer 发现 ${bT.issues.length} 个问题,正在定向修复`,details:bT.issues.map(a=>a.message)},{subtitle:"Agent Repairer",order:d})),I(G),g.entries())){let i=f.message.replace(/\s*Writer 未完成.*$/u,"").replace(/\s*正文不足,未达到任务最小深度.*$/u,"").trim(),j=/Writer 未完成/u.test(f.message)?"缺失小节":"深度不足小节";(0,ay.fx)(P,(0,ay.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:"running",message:`${(0,t.GQ)(c.title)} 正在补写${j} ${e+1}/${g.length}:${i}`,details:[...h,`当前:${i}`]},{subtitle:"Agent Repairer",order:d})),I(G);let k=aP.task.sections.find(a=>a.title===i),l=(a,b,c)=>{let d=a=>a.replace(/[\u00a0\u3000]/gu," ").replace(/^\d+(?:\.\d+)*\s+/u,"").trim(),e=a=>d(a).replace(/施工(?=方案|流程|方法)/gu,"").replace(/专项(?=方案)/gu,"").replace(/\s/gu,""),f=a=>a.trim().replace(/^#{2,6}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]+\n+/u,"").trim(),g=a.split("\n"),h=0;for(let i=0;i<g.length;i+=1){let j=g[i],k=h;h+=j.length+1;let l=/^(#{3,4})\s+(.+)$/u.exec(j.trim());if(!l)continue;let m=d(l[2]),n=e(m),o=e(b);if(m!==b&&!m.includes(b)&&!b.includes(m)&&n!==o&&!n.includes(o)&&!o.includes(n))continue;let p=g.length;for(let a=i+1;a<g.length;a+=1)if(/^#{2,4}\s+/u.test(g[a].trim())){p=a;break}let q=p<g.length?g.slice(0,p).join("\n").length:a.length,r=f(c);return`${a.slice(0,k)}${j.trim()}
112
+ ${b.join("\n\n")}`,a.forbidDrawingImages))}({chapter:c,evidence:ac,targetWords:br,forbidDrawingImages:!1})),(0,M.Te)(a.signal),!d){let a=`${(0,t.GQ)(c.title)} 大模型未返回有效正文,已阻断生成`;throw P[i]=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ap.primaryPromptId,status:"failed",message:a,details:[`LLM 最近错误:${bS.llm.lastError||"空响应或超时"}`,`证据条数:${ac.length}`],progress:{current:g+1,total:bG.length,label:"章节阻断"}},{subtitle:(0,t.GQ)(c.title),order:g}),I(G),Error(a)}let e=d;if(!e.trim())throw Error(`${(0,t.GQ)(c.title)} 首次生成失败,未获得可用于定稿的正文`);b=cn(e,c)}let bJ=ba({chapter:c,content:b,evidence:ac}),bK=(0,w.V7)(b),bL=(0,v.r4)(b),bM=bL.length>0?bL:c.sections||[],bN=(0,x.qK)(b,[{title:c.title,content:b,sections:bM}]).map(a=>a.message),bO=bJ.slice(0,6).map(a=>`小节事实密度需优化:${a}`),bR=[...bN,...bO],bT=function(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))?"failed":"success"}(bK,0,bR);f=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ap.primaryPromptId,status:bT,message:(0,ay.AQ)(`${(0,t.GQ)(c.title)} 已由大模型成稿:当前 ${bK} 字;章节预算约 ${a3.budgetTarget} 字,本轮目标约 ${a3.roundTarget} 字${bR.length?`;待优化:${bR.slice(0,8).join("、")}`:""}`,h),details:[`本轮完成率:${Math.round(bK/Math.max(1,a3.roundTarget)*100)}%`,`结构目标约 ${a3.structureTarget} 字`,...az,`二级小节:${bM.length} 个`,`扩写轮次:0`],progress:{current:g+1,total:bG.length,label:bR.length?"章节已生成":"章节达标"}},{subtitle:(0,t.GQ)(c.title),order:g}),bh[g]=f;let bU={id:c.id,title:c.title,content:b,evidence:ac,missingFacts:ae,sections:bM,tablePlans:c.tablePlans||[]},bV=cS({task:aQ.task,draft:bU,context:bA});bA.reviewResults={...bA.reviewResults||{},[c.id]:bV};let bW=bV.issues.length>0&&(bV.repairable||bV.issues.some(a=>/Writer 未完成/u.test(a.message)));bA.nodes.push({id:`chapter-reviewer-${c.id}`,type:"chapter_reviewer",status:bV.issues.length?bW?"running":"failed":"completed",startedAt:Date.now(),completedAt:Date.now(),outputSummary:bV.issues.length?`${bV.issues.length} 个 Reviewer 问题`:"Reviewer 通过",metrics:{supportedFacts:bV.supportedFacts},issues:bV.issues}),(0,ay.fx)(P,(0,ay.X5)({type:"llm_review",roleId:`agent-reviewer-${c.id}`,status:bV.issues.length?bW?"running":"failed":"success",message:bV.issues.length?`${(0,t.GQ)(c.title)} Reviewer 发现 ${bV.issues.length} 个问题,等待 Repairer 修复`:`${(0,t.GQ)(c.title)} Reviewer 通过`,details:bV.issues.map(a=>a.message)},{subtitle:"Agent Reviewer",order:P.length})),I(G);let bX=bV.issues.some(a=>/Writer 未完成/u.test(a.message));if(bV.issues.length>0&&(bV.repairable||bX)){let b=bV.repairable?(k={task:aQ.task,review:bV}).review.repairable?["【Agent 定向修复任务】",`章节:${k.task.title}`,"只修复下列问题,不重写无关内容;如果问题是小节正文不足,必须按原小节标题完整补足该小节正式正文,每个小节不得少于任务最小深度:",...k.review.issues.map(a=>`- ${a.message};${a.suggestion||""}`),cP(k.task)].join("\n"):"":["【Agent 定向修复任务】",`章节:${aQ.task.title}`,"Reviewer 发现 Writer 未完成小节。必须基于对应小节事实卡和证据生成正式正文,替换并删除 WRITER_MISSING_SECTION 标记;不得跳过这些小节,不得保留占位说明。",...bV.issues.map(a=>`- ${a.message};${a.suggestion||""}`)].join("\n"),d=P.length,e=bV.issues.filter(a=>/Writer 未完成/u.test(a.message)),f=bV.issues.filter(a=>/正文不足,未达到任务最小深度/u.test(a.message)),g=[...e,...f.filter(a=>!e.some(b=>b.message===a.message))],h=[];for(let[e,f]of((0,ay.fx)(P,(0,ay.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:"running",message:`${(0,t.GQ)(c.title)} Reviewer 发现 ${bV.issues.length} 个问题,正在定向修复`,details:bV.issues.map(a=>a.message)},{subtitle:"Agent Repairer",order:d})),I(G),g.entries())){let i=f.message.replace(/\s*Writer 未完成.*$/u,"").replace(/\s*正文不足,未达到任务最小深度.*$/u,"").trim(),j=/Writer 未完成/u.test(f.message)?"缺失小节":"深度不足小节";(0,ay.fx)(P,(0,ay.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:"running",message:`${(0,t.GQ)(c.title)} 正在补写${j} ${e+1}/${g.length}:${i}`,details:[...h,`当前:${i}`]},{subtitle:"Agent Repairer",order:d})),I(G);let k=aQ.task.sections.find(a=>a.title===i),l=(a,b,c)=>{let d=a=>a.replace(/[\u00a0\u3000]/gu," ").replace(/^\d+(?:\.\d+)*\s+/u,"").trim(),e=a=>d(a).replace(/施工(?=方案|流程|方法)/gu,"").replace(/专项(?=方案)/gu,"").replace(/\s/gu,""),f=a=>a.trim().replace(/^#{2,6}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]+\n+/u,"").trim(),g=a.split("\n"),h=0;for(let i=0;i<g.length;i+=1){let j=g[i],k=h;h+=j.length+1;let l=/^(#{3,4})\s+(.+)$/u.exec(j.trim());if(!l)continue;let m=d(l[2]),n=e(m),o=e(b);if(m!==b&&!m.includes(b)&&!b.includes(m)&&n!==o&&!n.includes(o)&&!o.includes(n))continue;let p=g.length;for(let a=i+1;a<g.length;a+=1)if(/^#{2,4}\s+/u.test(g[a].trim())){p=a;break}let q=p<g.length?g.slice(0,p).join("\n").length:a.length,r=f(c);return`${a.slice(0,k)}${j.trim()}
113
113
 
114
- ${r}${a.slice(q)}`}let i=aP.task.sections.findIndex(a=>e(a.title)===e(b));if(i>=0){let d=aP.task.sections.slice(i+1).map(a=>e(a.title));for(let h=0;h<g.length;h+=1){let i=/^(#{3,4})\s+(.+)$/u.exec(g[h].trim());if(!i||!d.includes(e(i[2])))continue;let j=g.slice(0,h).join("\n").length+ +(h>0),k=f(c);return k?`${a.slice(0,j).trimEnd()}
114
+ ${r}${a.slice(q)}`}let i=aQ.task.sections.findIndex(a=>e(a.title)===e(b));if(i>=0){let d=aQ.task.sections.slice(i+1).map(a=>e(a.title));for(let h=0;h<g.length;h+=1){let i=/^(#{3,4})\s+(.+)$/u.exec(g[h].trim());if(!i||!d.includes(e(i[2])))continue;let j=g.slice(0,h).join("\n").length+ +(h>0),k=f(c);return k?`${a.slice(0,j).trimEnd()}
115
115
 
116
116
  ### ${b}
117
117
 
@@ -121,6 +121,6 @@ ${a.slice(j).trimStart()}`:a}}let j=f(c);return j?`${a.trimEnd()}
121
121
 
122
122
  ### ${b}
123
123
 
124
- ${j}`:a},m=bt(await cy({manager:y,projectRoot:o,chapter:c,sectionTitle:i,scopedFilePaths:H,fileRoleByPath:aY,fileProcessingByPath:aZ,signal:a.signal}).catch(()=>[]),a1);bv(m.length?m:ab,a1,`repair:${c.id}:${i}`);let n=Math.max(k?.minChars||0,/项目主要施工内容|主要分部分项工程施工方案|主要施工方法/u.test(i)?2200:/项目特点.*重点.*难点|重点.*难点.*分析/u.test(i)?1800:/原材料进场复试|见证取样|危大工程专项施工方案审批流程/u.test(i)?1200:760),p=/正文不足,未达到任务最小深度/u.test(f.message);bS.llm.lastError=void 0;let r=await K(()=>aA(bS,`agent-repairer-section:${c.id}:${i}`,()=>a4({template:q,chapter:c,sectionTitle:i,evidence:m.length?m:ab,missingFacts:ac,promptTexts:[aQ,b].filter(Boolean).join("\n\n"),projectContext:bI,requirement:a.requirement,roleContext:am,targetWords:n,maxWords:1.25*n,forbidDrawingImages:!1,factCoverageContext:aO,qualityFeedback:`Repairer 定向补写“${i}”。必须输出该小节正式正文并彻底删除 WRITER_MISSING_SECTION 标记。`,diagnostics:bS,signal:a.signal})));if((!r||r.includes("WRITER_MISSING_SECTION"))&&(bS.llm.lastError=void 0,(0,ay.fx)(P,(0,ay.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:"running",message:`${(0,t.GQ)(c.title)} 正在二次补写${j} ${e+1}/${g.length}:${i}`,details:[...h,`重试:${i}`]},{subtitle:"Agent Repairer",order:d})),I(G),r=await K(()=>aA(bS,`agent-repairer-section-retry:${c.id}:${i}`,()=>a4({template:q,chapter:c,sectionTitle:i,evidence:m.length?m:ab,missingFacts:ac,promptTexts:b,projectContext:bI,requirement:a.requirement,roleContext:am,targetWords:n,maxWords:1.15*n,forbidDrawingImages:!1,factCoverageContext:aO,qualityFeedback:`第二次定向补写“${i}”:只写该小节正式正文,不写解释,不保留 WRITER_MISSING_SECTION。`,diagnostics:bS,signal:a.signal})))),r&&!r.includes("WRITER_MISSING_SECTION")){let a=/^#{3,4}\s+/u.test(r.trim())?r.trim():`### ${i}
124
+ ${j}`:a},m=bt(await cy({manager:y,projectRoot:o,chapter:c,sectionTitle:i,scopedFilePaths:H,fileRoleByPath:aY,fileProcessingByPath:aZ,signal:a.signal}).catch(()=>[]),a1);bv(m.length?m:ac,a1,`repair:${c.id}:${i}`);let n=Math.max(k?.minChars||0,/项目主要施工内容|主要分部分项工程施工方案|主要施工方法/u.test(i)?2200:/项目特点.*重点.*难点|重点.*难点.*分析/u.test(i)?1800:/原材料进场复试|见证取样|危大工程专项施工方案审批流程/u.test(i)?1200:760),p=/正文不足,未达到任务最小深度/u.test(f.message);bS.llm.lastError=void 0;let r=await K(()=>aA(bS,`agent-repairer-section:${c.id}:${i}`,()=>a4({template:q,chapter:c,sectionTitle:i,evidence:m.length?m:ac,missingFacts:ae,promptTexts:[aR,b].filter(Boolean).join("\n\n"),projectContext:bI,requirement:a.requirement,roleContext:ao,targetWords:n,maxWords:1.25*n,forbidDrawingImages:!1,factCoverageContext:aP,qualityFeedback:`Repairer 定向补写“${i}”。必须输出该小节正式正文并彻底删除 WRITER_MISSING_SECTION 标记。`,diagnostics:bS,signal:a.signal})));if((!r||r.includes("WRITER_MISSING_SECTION"))&&(bS.llm.lastError=void 0,(0,ay.fx)(P,(0,ay.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:"running",message:`${(0,t.GQ)(c.title)} 正在二次补写${j} ${e+1}/${g.length}:${i}`,details:[...h,`重试:${i}`]},{subtitle:"Agent Repairer",order:d})),I(G),r=await K(()=>aA(bS,`agent-repairer-section-retry:${c.id}:${i}`,()=>a4({template:q,chapter:c,sectionTitle:i,evidence:m.length?m:ac,missingFacts:ae,promptTexts:b,projectContext:bI,requirement:a.requirement,roleContext:ao,targetWords:n,maxWords:1.15*n,forbidDrawingImages:!1,factCoverageContext:aP,qualityFeedback:`第二次定向补写“${i}”:只写该小节正式正文,不写解释,不保留 WRITER_MISSING_SECTION。`,diagnostics:bS,signal:a.signal})))),r&&!r.includes("WRITER_MISSING_SECTION")){let a=/^#{3,4}\s+/u.test(r.trim())?r.trim():`### ${i}
125
125
 
126
- ${r.trim()}`,b=(0,w.V7)(a),c=!p||b>=Math.floor(.85*n),d=c?l(bR.content,i,a):bR.content,e=d!==bR.content;e&&(bR={...bR,content:d}),h.push(e?`成功:${i}(${b}字,证据 ${m.length||ab.length} 条)`:`失败:${i}(${c?"未定位到原小节块":`补写不足 ${b}/${n} 字`})`)}else h.push(`失败:${i}(${!r?bS.llm.lastError||"空响应":"仍包含 WRITER_MISSING_SECTION"})`);(0,ay.fx)(P,(0,ay.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:"running",message:`${(0,t.GQ)(c.title)} 已补写${j} ${e+1}/${g.length}`,details:h},{subtitle:"Agent Repairer",order:d})),I(G)}let i={content:bR.content,appliedCount:0};bT.issues.some(a=>!/Writer 未完成|正文不足,未达到任务最小深度/u.test(a.message))&&(i=await K(()=>aA(bS,`agent-repairer:${c.id}`,()=>aB({template:q,chapter:{id:c.id,title:c.title,content:bR.content,evidence:ab,missingFacts:ac,sections:bK},issues:bT.issues.map(a=>`${a.message};${a.suggestion||""}`),promptTexts:[aQ,b].filter(Boolean).join("\n\n"),requirement:a.requirement,forbidDrawingImages:!1,diagnostics:bS,signal:a.signal})))),bR={...bR,content:cn(i.content||bR.content,c)},bT=cS({task:aP.task,draft:bR,context:bA}),bA.reviewResults={...bA.reviewResults||{},[c.id]:bT};let j=bT.issues.some(a=>"blocker"===a.severity||"error"===a.level);bA.nodes.push({id:`chapter-repairer-${c.id}`,type:"chapter_repairer",status:j?"failed":"completed",startedAt:Date.now(),completedAt:Date.now(),outputSummary:bT.issues.length?`修复后仍有 ${bT.issues.length} 个问题`:"定向修复通过",metrics:{supportedFacts:bT.supportedFacts},issues:bT.issues}),(0,ay.fx)(P,(0,ay.X5)({type:"llm_review",roleId:`agent-reviewer-${c.id}`,status:j?"failed":"success",message:j?`${(0,t.GQ)(c.title)} Reviewer 复审仍有 ${bT.issues.length} 个阻断问题`:`${(0,t.GQ)(c.title)} Reviewer 复审通过`,details:bT.issues.map(a=>a.message)},{subtitle:"Agent Reviewer",order:d-1})),(0,ay.fx)(P,(0,ay.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:j?"failed":"success",message:bT.issues.length?`${(0,t.GQ)(c.title)} 定向修复后仍有 ${bT.issues.length} 个问题`:`${(0,t.GQ)(c.title)} 定向修复通过`,details:[...h,...bT.issues.map(a=>`剩余:${a.message}`)]},{subtitle:"Agent Repairer",order:d})),I(G)}bT.issues.some(a=>"blocker"===a.severity||"error"===a.level)&&bb.push(`${(0,t.GQ)(c.title)} Reviewer 未通过:${bT.issues.map(a=>a.message).join(";")}`),bg[g]=bR,G=bg.filter(a=>!!a),I(G),bS.quality.blockingCount+=bT.issues.filter(a=>"error"===a.level).length,bS.quality.importantCount+=bT.issues.filter(a=>"warning"===a.level).length}catch(d){if(a.signal?.aborted)throw d;console.error(`[gen] chapter ${c.title} failed:`,d);let b=`${c.title}:${d instanceof Error?d.message:"生成失败"}`;bb.push(b),f=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,t.GQ)(c.title)} 生成失败:${b}`},{subtitle:(0,t.GQ)(c.title),order:g}),bh[g]=f}f&&(P[i]=f),I(G)}))}let b0=bg.filter(a=>!!a);return bf.push(...bh.filter(a=>!!a)),cF({chapterDrafts:b0,chapterDraftsByOrder:bg,chapterGenerationStagesByOrder:bh,chapterGenerationStages:bf,effectiveChapters:bG,template:q,allEvidence:a6,projectMaterialScope:a1,progressStages:P,documentSpec:ah,projectMaterialProfile:U,projectMaterialSummary:ac,domainProfile:aj,documentBudget:bP,promptTexts:aN,reviewPromptTexts:aW,input:a,generationStrategy:bR,generationDiagnostics:bS,promptBindings:R,promptDocumentRules:aH,projectUnderstanding:V,projectContext:bI,projectRoot:o,projectId:p,readiness:ak,factExtractionPromptTexts:aV,hasExplicitOutline:ab,missingItems:a9,retrievalCoverageReports:a7,failedChapterMessages:bb,webResearchReport:a8,indexHealth:a_,promptPlan:Q,agentWorkflow:bA,emitProgress:I,withProgressHeartbeat:K})}async function cW(a){let b=(0,d.QJ)(a.templateId);if(!b)throw Error("Document template not found");let c=b.chapters.find(b=>b.id===a.chapterId);if(!c)throw Error("Document chapter not found");let f=e.resolve(a.projectRoot||(0,g.aY)());if(!f)throw Error("No knowledge base project found");let h=(0,g.Qh)(),i=(0,aE.Hh)(f,b,{requirement:a.requirement}),j=(0,aE.W9)(f,b,{requirement:a.requirement}),{kindByPath:k,processingByPath:l}=(0,aE.Hz)(j),m=new Set(i),n=bq(f,i),o=new Map([...k.entries()].map(([a,b])=>[a,(0,aE._W)(b)])),p=new Map([...l.entries()].map(([a,b])=>[a,b])),q=cB(await h.getProject(f),[...m],a.maxEvidencePerChapter),r=[],v=[...m].filter(Boolean).sort(),w=cv(c,c.queries,[]),x=cw(c,[]);for(let a of w.slice(0,x)){let b=await h.search(f,a,{scope:"project",filters:{filePaths:v},limit:Math.min(q,12),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});r.push(...b.results.filter(a=>aC(f,a.filePath,m)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:o.get(a.filePath),processingType:p.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let y=cu(c,bt(r.filter(a=>aC(f,a.filePath,m)),n),{maxItems:cx(q,c),maxChars:16e3,preservePinned:!0});bv(y,n,`regenerate:${c.id}`);let z=a.currentMarkdown||"",A=new Set(a.existingFacts??[]),B=c.requiredFacts.filter(a=>!A.has(a)&&!y.some(b=>(0,u.Lk)(b,a)));if(0===y.length)throw Error(`${(0,t.GQ)(c.title)} 缺少可支撑正文的项目资料证据`);let C=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",z?`> 当前文档上下文摘要:${z.replace(/\s+/gu," ")}`:"",`本章依据已锁定项目资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`,"","### 资料依据",...y.map(s.OF)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:C,evidence:y,missingFacts:B}}}};
126
+ ${r.trim()}`,b=(0,w.V7)(a),c=!p||b>=Math.floor(.85*n),d=c?l(bU.content,i,a):bU.content,e=d!==bU.content;e&&(bU={...bU,content:d}),h.push(e?`成功:${i}(${b}字,证据 ${m.length||ac.length} 条)`:`失败:${i}(${c?"未定位到原小节块":`补写不足 ${b}/${n} 字`})`)}else h.push(`失败:${i}(${!r?bS.llm.lastError||"空响应":"仍包含 WRITER_MISSING_SECTION"})`);(0,ay.fx)(P,(0,ay.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:"running",message:`${(0,t.GQ)(c.title)} 已补写${j} ${e+1}/${g.length}`,details:h},{subtitle:"Agent Repairer",order:d})),I(G)}let i={content:bU.content,appliedCount:0};bV.issues.some(a=>!/Writer 未完成|正文不足,未达到任务最小深度/u.test(a.message))&&(i=await K(()=>aA(bS,`agent-repairer:${c.id}`,()=>aB({template:q,chapter:{id:c.id,title:c.title,content:bU.content,evidence:ac,missingFacts:ae,sections:bM},issues:bV.issues.map(a=>`${a.message};${a.suggestion||""}`),promptTexts:[aR,b].filter(Boolean).join("\n\n"),requirement:a.requirement,forbidDrawingImages:!1,diagnostics:bS,signal:a.signal})))),bU={...bU,content:cn(i.content||bU.content,c)},bV=cS({task:aQ.task,draft:bU,context:bA}),bA.reviewResults={...bA.reviewResults||{},[c.id]:bV};let j=bV.issues.some(a=>"blocker"===a.severity||"error"===a.level);bA.nodes.push({id:`chapter-repairer-${c.id}`,type:"chapter_repairer",status:j?"failed":"completed",startedAt:Date.now(),completedAt:Date.now(),outputSummary:bV.issues.length?`修复后仍有 ${bV.issues.length} 个问题`:"定向修复通过",metrics:{supportedFacts:bV.supportedFacts},issues:bV.issues}),(0,ay.fx)(P,(0,ay.X5)({type:"llm_review",roleId:`agent-reviewer-${c.id}`,status:j?"failed":"success",message:j?`${(0,t.GQ)(c.title)} Reviewer 复审仍有 ${bV.issues.length} 个阻断问题`:`${(0,t.GQ)(c.title)} Reviewer 复审通过`,details:bV.issues.map(a=>a.message)},{subtitle:"Agent Reviewer",order:d-1})),(0,ay.fx)(P,(0,ay.X5)({type:"llm_review",roleId:`agent-repairer-${c.id}`,status:j?"failed":"success",message:bV.issues.length?`${(0,t.GQ)(c.title)} 定向修复后仍有 ${bV.issues.length} 个问题`:`${(0,t.GQ)(c.title)} 定向修复通过`,details:[...h,...bV.issues.map(a=>`剩余:${a.message}`)]},{subtitle:"Agent Repairer",order:d})),I(G)}bV.issues.some(a=>"blocker"===a.severity||"error"===a.level)&&bb.push(`${(0,t.GQ)(c.title)} Reviewer 未通过:${bV.issues.map(a=>a.message).join(";")}`),bg[g]=bU,G=bg.filter(a=>!!a),I(G),bS.quality.blockingCount+=bV.issues.filter(a=>"error"===a.level).length,bS.quality.importantCount+=bV.issues.filter(a=>"warning"===a.level).length}catch(d){if(a.signal?.aborted)throw d;console.error(`[gen] chapter ${c.title} failed:`,d);let b=`${c.title}:${d instanceof Error?d.message:"生成失败"}`;bb.push(b),f=(0,ay.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,t.GQ)(c.title)} 生成失败:${b}`},{subtitle:(0,t.GQ)(c.title),order:g}),bh[g]=f}f&&(P[i]=f),I(G)}))}let b0=bg.filter(a=>!!a);return bf.push(...bh.filter(a=>!!a)),cF({chapterDrafts:b0,chapterDraftsByOrder:bg,chapterGenerationStagesByOrder:bh,chapterGenerationStages:bf,effectiveChapters:bG,template:q,allEvidence:a6,projectMaterialScope:a1,progressStages:P,documentSpec:ah,projectMaterialProfile:U,projectMaterialSummary:ac,domainProfile:aj,documentBudget:bP,promptTexts:aN,reviewPromptTexts:aW,input:a,generationStrategy:bR,generationDiagnostics:bS,promptBindings:R,promptDocumentRules:aH,projectUnderstanding:V,projectContext:bI,projectRoot:o,projectId:p,readiness:ak,factExtractionPromptTexts:aV,hasExplicitOutline:ab,missingItems:a9,retrievalCoverageReports:a7,failedChapterMessages:bb,webResearchReport:a8,indexHealth:a_,promptPlan:Q,agentWorkflow:bA,emitProgress:I,withProgressHeartbeat:K})}async function cW(a){let b=(0,d.QJ)(a.templateId);if(!b)throw Error("Document template not found");let c=b.chapters.find(b=>b.id===a.chapterId);if(!c)throw Error("Document chapter not found");let f=e.resolve(a.projectRoot||(0,g.aY)());if(!f)throw Error("No knowledge base project found");let h=(0,g.Qh)(),i=(0,aE.Hh)(f,b,{requirement:a.requirement}),j=(0,aE.W9)(f,b,{requirement:a.requirement}),{kindByPath:k,processingByPath:l}=(0,aE.Hz)(j),m=new Set(i),n=bq(f,i),o=new Map([...k.entries()].map(([a,b])=>[a,(0,aE._W)(b)])),p=new Map([...l.entries()].map(([a,b])=>[a,b])),q=cB(await h.getProject(f),[...m],a.maxEvidencePerChapter),r=[],v=[...m].filter(Boolean).sort(),w=cv(c,c.queries,[]),x=cw(c,[]);for(let a of w.slice(0,x)){let b=await h.search(f,a,{scope:"project",filters:{filePaths:v},limit:Math.min(q,12),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});r.push(...b.results.filter(a=>aC(f,a.filePath,m)).map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,roleId:o.get(a.filePath),processingType:p.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let y=cu(c,bt(r.filter(a=>aC(f,a.filePath,m)),n),{maxItems:cx(q,c),maxChars:16e3,preservePinned:!0});bv(y,n,`regenerate:${c.id}`);let z=a.currentMarkdown||"",A=new Set(a.existingFacts??[]),B=c.requiredFacts.filter(a=>!A.has(a)&&!y.some(b=>(0,u.Lk)(b,a)));if(0===y.length)throw Error(`${(0,t.GQ)(c.title)} 缺少可支撑正文的项目资料证据`);let C=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",z?`> 当前文档上下文摘要:${z.replace(/\s+/gu," ")}`:"",`本章依据已锁定项目资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`,"","### 资料依据",...y.map(s.OF)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:C,evidence:y,missingFacts:B}}}};