@customize-agent/server 4.19.2 → 4.19.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/1153.js +1 -1
- package/.next/server/chunks/5284.js +10 -10
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/asset-library.html +1 -1
- package/.next/server/pages/document-roles.html +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/guide.html +1 -1
- package/.next/server/pages/index.html +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/overview.html +1 -1
- package/.next/server/pages/prompt.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages/template-references.html +1 -1
- package/.next/server/pages-manifest.json +23 -23
- package/package.json +1 -1
- /package/.next/static/{0LmEHdzWSVcOp-K_WixrR → 1sNH46jWeMaBSzTtUWHyj}/_buildManifest.js +0 -0
- /package/.next/static/{0LmEHdzWSVcOp-K_WixrR → 1sNH46jWeMaBSzTtUWHyj}/_ssgManifest.js +0 -0
package/.next/BUILD_ID
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
1sNH46jWeMaBSzTtUWHyj
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"ampDevFiles": [],
|
|
7
7
|
"lowPriorityFiles": [
|
|
8
|
-
"static/
|
|
9
|
-
"static/
|
|
8
|
+
"static/1sNH46jWeMaBSzTtUWHyj/_buildManifest.js",
|
|
9
|
+
"static/1sNH46jWeMaBSzTtUWHyj/_ssgManifest.js"
|
|
10
10
|
],
|
|
11
11
|
"rootMainFiles": [],
|
|
12
12
|
"rootMainFilesTree": {},
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"routes": {},
|
|
4
4
|
"dynamicRoutes": {},
|
|
5
5
|
"preview": {
|
|
6
|
-
"previewModeId": "
|
|
7
|
-
"previewModeSigningKey": "
|
|
8
|
-
"previewModeEncryptionKey": "
|
|
6
|
+
"previewModeId": "083ec4896efeaf9776232c8a762ab6ac",
|
|
7
|
+
"previewModeSigningKey": "cf80e4c84a93116640452583038f88681e59d456dda722e8bbfd2437cda84caf",
|
|
8
|
+
"previewModeEncryptionKey": "de092a78dc7c87dff9e15fce31c41668bce1b17f6f1e72b08a3a25f9c7df4799"
|
|
9
9
|
},
|
|
10
10
|
"notFoundRoutes": []
|
|
11
11
|
}
|
|
@@ -97,7 +97,7 @@ ${(0,A.TP)("以上为系统提取的评分项要求内容:实质要求(奖
|
|
|
97
97
|
## ${c.id} ${c.title}(目标 ${c.targetWords??2400} 字)`);let a=c.requiredParams.filter(a=>"must_cite"===a.mode).map(a=>a.path);for(let d of(a.length>0&&b.push(`must_cite 参数(正文必须出现且与蓝图一致):${a.join("、")}`),c.workPackages)){b.push(`
|
|
98
98
|
### 工作包:${d.name}(${"major"===d.kind?"主要":"一般"}工作包)`);let a=Object.entries(d.quantities).map(([a,b])=>`${a} ${b.value}${b.unit}`).join("、");a&&b.push(`- 工程量:${a}`),d.processChain.length>0&&b.push(`- 工序链:${d.processChain.join(" → ")}`),d.methods.length>0&&b.push(`- 施工方法(清单特征原文):${d.methods.join(";")}`),d.params.length>0&&b.push(`- 工艺参数:${d.params.map(a=>`${a.key}=${a.value}`).join(";")}`),d.acceptance.length>0&&b.push(`- 验收要求:${d.acceptance.join(";")}`),d.standards.length>0&&b.push(`- 规范依据:${d.standards.join(";")}`)}}return b.join("\n")}(be):"",bg=be&&b?function(a,b){let c=new Set,d=[];for(let e of a.subSections.flatMap(a=>a.requiredParams.filter(a=>"must_cite"===a.mode&&a.strict)))if(!c.has(e.path)){if(c.add(e.path),"data.contract.total_days"===e.path&&b.contract.totalDays>0){d.push(`总工期 ${b.contract.totalDays} 日历天`);continue}if(e.path.startsWith("data.quantities.")){let a=b.quantities[e.path.slice(16)];a&&a.value>0&&d.push(`${e.path.slice(16)} ${a.value}${a.unit}`)}}return d.join(";")}(be,b.data):"",bh=bc.roundTarget,bi=(0,aM.uV)(bh,bh),bj=ba>0?cH.longformStrict?bh:Math.min(bh,Math.max(1800,bc.structureTarget)):bh,bk=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),bl=process.env.DOCUMENT_SECTION_FIRST_GENERATION,bm=void 0!==bl&&0===Number(bl),bn=void 0!==bl&&0!==Number(bl),bo=ba>=2&&ba<=bk&&!bb,br=!!(be&&be.subSections.length>ba),bs=!bm&&ba>=2&&(ba>bk||bb||br||cH.longformStrict&&ba>=6),bt=!bm&&!bs&&ba>=2&&ba<=bk&&(bn||bo||cH.longformStrict),bu=0,bw=a=>{let b=Date.now();if(b-bu<3e3)return;bu=b;let c=a.filter(Boolean).join("\n\n");c.trim()&&J([...H,{id:d.id,title:d.title,content:`## ${d.title}
|
|
99
99
|
|
|
100
|
-
${c}`,evidence:_,missingFacts:aa,sections:d.sections||[],tablePlans:d.tablePlans||[],inProgress:!0}])},bE=a=>{"complete"===a.phase&&a.partialSections&&bw(a.partialSections)};if(k)e=dl(k,d),e=await dc(e,bM),f=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"success",message:`${(0,o.GQ)(d.title)} 已复用已有章节正文:当前 ${(0,r.V7)(e)} 字,跳过 Writer,直接进入章节收口`,details:[`有效证据:${_.length} 条`,`事实需求:${a3.satisfied}/${a3.total} 已满足,缺失 ${a3.missing},低置信 ${a3.lowConfidence}`,"来源:resumeChapters/checkpointChapters"],progress:{current:g+1,total:b8.length,label:"复用章节"}},{subtitle:(0,o.GQ)(d.title),order:g}),T[i]=f,J(H);else{let f;T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"running",message:bs?`${(0,o.GQ)(d.title)} 正在规划主题块并准备并发成稿`:bt?`${(0,o.GQ)(d.title)} 正在按小节并发成稿`:`${(0,o.GQ)(d.title)} 正在整章一次成稿`,details:bs||bt?[...ap,`有效证据:${_.length} 条`,`事实需求:${a3.satisfied}/${a3.total} 已满足,缺失 ${a3.missing},低置信 ${a3.lowConfidence}`,bc.label,`生成上限约 ${bd} 字`,`模板细目:${d.sections?.length||0} 条`,bs?"细目较多,先由章级 Planner 聚类为主题块并语义合并,再按主题块全并发出稿,避免逐小节碎片化":"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...ap,`有效证据:${_.length} 条`,`事实需求:${a3.satisfied}/${a3.total} 已满足,缺失 ${a3.missing},低置信 ${a3.lowConfidence}`,bc.label,`生成上限约 ${bd} 字`,`规划小节:${ba} 个`,"首次生成必须覆盖章节结构、小节和事实,篇幅目标仅作为规划参考"],progress:{current:g+1,total:b8.length,label:bs?"主题块并发":bt?"小节并发":"整章成稿"}},{subtitle:(0,o.GQ)(d.title),order:g}),J();let h=async(a,b,c)=>{let d=await Promise.all(b.map(({block:b})=>(0,aM.nl)({...a,targetWords:b.targetWords,maxWords:Math.ceil(1.1*b.targetWords)},{blocks:[b],coveredSections:[],fallbackSections:[],llmPlanned:!1}).then(a=>a?.markdown).catch(()=>void 0))),e=[...c];return b.forEach(({index:a},b)=>{let c=d[b];c&&(e[a]=c.replace(/^##\s+.+$/mu,"").trim())}),e};if(bs){let b=await P(()=>(0,aJ.X6)(cO,`chapter-plan:${d.id}`,async()=>(function(a){let b,{blueprintChapter:c,inputSections:d,chapterTitle:e,targetWords:f}=a,g=[],h=[];if(c&&0!==c.subSections.length){for(let a of c.subSections){let b=a.workPackages.map(a=>({title:a.name,sources:[a.name]}));for(let c=0;c<b.length;c+=6){let d=b.slice(c,c+6);g.push({title:1===d.length?a.title:`${a.title}(${c/6+1})`,subPoints:d,facts:[],targetWords:1200})}}if(0===g.length){let a=bD(d,e,f);g=a.blocks,h=a.coveredSections,b=a.fallbackSections}else h=d.filter(a=>g.some(b=>bA(b.title,a)||b.subPoints.some(b=>b.sources.some(b=>bA(b,a))||bA(b.title,a)))),b=d.filter(a=>!h.includes(a))}else{let a=bD(d,e,f);g=a.blocks,h=a.coveredSections,b=a.fallbackSections}if(b.length>0){for(let a of bD(b,e,f).blocks)g.some(b=>bA(b.title,a.title)||a.subPoints.some(a=>b.subPoints.some(b=>bA(b.title,a.title))))||g.push(a);h=[...h,...b],b=[]}if(a.projectContext&&a.evidence){let b=a.projectContext,c=a.evidence,d=a9.gG.test(e)?[]:(a.blueprintChapter?.subSections??[]).map(a=>a.title);g=g.map(a=>{if(!bC(a.title))return a;let e=function(a,b){let c=[];for(let b of a){let a=b.trim(),d=a.replace(/\s+/gu,"");if(!(!d||/^其他$|^其它$|^其他工程$|^其余/u.test(d))&&!c.some(a=>{let b=a.replace(/\s+/gu,"");return b.includes(d)||d.includes(b)})&&(c.push(a),c.length>=12))break}return c}([...(0,a8.Ep)(b,c),...d],0);return e.length<3?a:{...a,subPoints:e.map(a=>({title:a,sources:[a]}))}})}return bB(g,f),{blocks:g,coveredSections:h,fallbackSections:b,llmPlanned:!1}})({blueprintChapter:be,inputSections:d.sections||[],chapterTitle:(0,o.GQ)(d.title),targetWords:bj,projectContext:cc,evidence:_}))),e=function(a){if(!a.blocks.some(a=>1===a.subPoints.length&&a.targetWords>2400&&!bC(a.title)))return a;let b=a.blocks.flatMap(a=>{if(1!==a.subPoints.length||a.targetWords<=2400||bC(a.title))return[a];let b=Math.max(1200,Math.floor(a.targetWords/2));return[{...a,title:`${a.title}(一)`,targetWords:b,halfFocus:"本部分为该主题的前半部分,聚焦总体构成与组织框架:逐项列明构成要素、总体规模指标与组织方式;只写本部分内容,不得涉及后半部分的具体展开。"},{...a,title:`${a.title}(二)`,targetWords:b,halfFocus:"本部分为该主题的后半部分,聚焦具体展开与实施要求:逐项展开实施内容、工艺要求与衔接安排;只写本部分内容,不得重复前半部分的总体框架。"}]});return{...a,blocks:b}}(b);if(e.blocks.length>0){c=e;let b=[ao,(0,eh.$8)(aU.task,e)].filter(Boolean).join("\n\n"),j=e.blocks.reduce((a,b)=>a+b.subPoints.length,0),k=e.blocks.reduce((a,b)=>a+b.subPoints.reduce((a,b)=>a+Math.max(0,b.sources.length-1),0),0),l=be?e.fallbackSections.length>0?`(蓝图章切片确定性转换:${e.fallbackSections.length} 条细目由覆盖校验挂回主题块)`:"(蓝图章切片确定性转换:主题块来自蓝图小节/工作包)":"(蓝图未覆盖本章,已按语义域确定性分组)";T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"running",message:`${(0,o.GQ)(d.title)} 已规划 ${e.blocks.length} 个主题块,正在按主题块并发成稿${l}`,details:[...ap,`有效证据:${_.length} 条`,`输入细目 ${ba} 条 → 主题块 ${e.blocks.length} 个(每块 2~4 个 H4 要点)`,`语义合并 ${k} 条细目,目录级 H4 合计 ${j} 个`,"单块 1200~2200 字,主题块间全并发,单节深度与整体耗时双优"],progress:{current:g+1,total:b8.length,label:"主题块并发"}},{subtitle:(0,o.GQ)(d.title),order:g});let m=T.find(a=>a.roleId===`agent-chapter-task-${d.id}`);m&&(m.message=`${aU.task.sections.filter(a=>a.ready).length}/${aU.task.sections.length} 条细目任务就绪(已规划为 ${e.blocks.length} 个主题块)`),J(H);let n={template:E,chapter:d,evidence:_,missingFacts:aa,promptTexts:b,projectContext:cF(d),skeletonProjectContext:cc,requirement:a.requirement,roleContext:am,targetWords:bj,maxWords:bd,forbidDrawingImages:!1,factCoverageContext:aT,compactProjectContext:!0,scopedProjectContext:cE,blueprintDataText:c8,blueprintSliceText:bf,blueprintMustCiteHint:bg,sectionEvidenceProvider:aC,onSectionProgress:bE,diagnostics:cO,signal:a.signal},p=await P(()=>(0,aJ.X6)(cO,`chapter-planned-block-draft:${d.id}`,()=>(0,aM.nl)(n,e)));if(p?.allSucceeded)f=p.markdown;else if(p){let a=await h(n,p.failedBlocks,p.sections),b=p.failedBlocks.filter(({index:b})=>!a[b]);b.length>0&&(a=await h(n,b,a)),a.every(a=>!!a)&&(f=`## ${d.title}
|
|
100
|
+
${c}`,evidence:_,missingFacts:aa,sections:d.sections||[],tablePlans:d.tablePlans||[],inProgress:!0}])},bE=a=>{"complete"===a.phase&&a.partialSections&&bw(a.partialSections)};if(k)e=dl(k,d),e=await dc(e,bM),f=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"success",message:`${(0,o.GQ)(d.title)} 已复用已有章节正文:当前 ${(0,r.V7)(e)} 字,跳过 Writer,直接进入章节收口`,details:[`有效证据:${_.length} 条`,`事实需求:${a3.satisfied}/${a3.total} 已满足,缺失 ${a3.missing},低置信 ${a3.lowConfidence}`,"来源:resumeChapters/checkpointChapters"],progress:{current:g+1,total:b8.length,label:"复用章节"}},{subtitle:(0,o.GQ)(d.title),order:g}),T[i]=f,J(H);else{let f;T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"running",message:bs?`${(0,o.GQ)(d.title)} 正在规划主题块并准备并发成稿`:bt?`${(0,o.GQ)(d.title)} 正在按小节并发成稿`:`${(0,o.GQ)(d.title)} 正在整章一次成稿`,details:bs||bt?[...ap,`有效证据:${_.length} 条`,`事实需求:${a3.satisfied}/${a3.total} 已满足,缺失 ${a3.missing},低置信 ${a3.lowConfidence}`,bc.label,`生成上限约 ${bd} 字`,`模板细目:${d.sections?.length||0} 条`,bs?"细目较多,先由章级 Planner 聚类为主题块并语义合并,再按主题块全并发出稿,避免逐小节碎片化":"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...ap,`有效证据:${_.length} 条`,`事实需求:${a3.satisfied}/${a3.total} 已满足,缺失 ${a3.missing},低置信 ${a3.lowConfidence}`,bc.label,`生成上限约 ${bd} 字`,`规划小节:${ba} 个`,"首次生成必须覆盖章节结构、小节和事实,篇幅目标仅作为规划参考"],progress:{current:g+1,total:b8.length,label:bs?"主题块并发":bt?"小节并发":"整章成稿"}},{subtitle:(0,o.GQ)(d.title),order:g}),J();let h=async(a,b,c)=>{let d=await Promise.all(b.map(({block:b})=>(0,aM.nl)({...a,targetWords:b.targetWords,maxWords:Math.ceil(1.1*b.targetWords)},{blocks:[b],coveredSections:[],fallbackSections:[],llmPlanned:!1}).then(a=>a?.markdown).catch(()=>void 0))),e=[...c];return b.forEach(({index:a},b)=>{let c=d[b];c&&(e[a]=c.replace(/^##\s+.+$/mu,"").trim())}),e};if(bs){let b=await P(()=>(0,aJ.X6)(cO,`chapter-plan:${d.id}`,async()=>(function(a){let b,{blueprintChapter:c,inputSections:d,chapterTitle:e,targetWords:f}=a,g=[],h=[];if(c&&0!==c.subSections.length){for(let a of c.subSections){let b=a.workPackages.map(a=>({title:a.name,sources:[a.name]}));for(let c=0;c<b.length;c+=6){let d=b.slice(c,c+6);g.push({title:1===d.length?a.title:`${a.title}(${c/6+1})`,subPoints:d,facts:[],targetWords:1200})}}if(0===g.length){let a=bD(d,e,f);g=a.blocks,h=a.coveredSections,b=a.fallbackSections}else h=d.filter(a=>g.some(b=>bA(b.title,a)||b.subPoints.some(b=>b.sources.some(b=>bA(b,a))||bA(b.title,a)))),b=d.filter(a=>!h.includes(a))}else{let a=bD(d,e,f);g=a.blocks,h=a.coveredSections,b=a.fallbackSections}if(b.length>0){for(let a of bD(b,e,f).blocks)g.some(b=>bA(b.title,a.title)||a.subPoints.some(a=>b.subPoints.some(b=>bA(b.title,a.title))))||g.push(a);h=[...h,...b],b=[]}if(a.projectContext&&a.evidence){let b=a.projectContext,c=a.evidence,d=a9.gG.test(e)?[]:(a.blueprintChapter?.subSections??[]).map(a=>a.title),f=a9.gG.test(e)?new Set(g.map(a=>(0,A.Sw)(a.title)).filter(Boolean)):new Set;g=g.map(a=>{if(!bC(a.title))return a;let e=function(a,b){let c=[];for(let b of a){let a=b.trim(),d=a.replace(/\s+/gu,"");if(!(!d||/^其他$|^其它$|^其他工程$|^其余/u.test(d))&&!c.some(a=>{let b=a.replace(/\s+/gu,"");return b.includes(d)||d.includes(b)})&&(c.push(a),c.length>=12))break}return c}([...(0,a8.Ep)(b,c).filter(a=>!f.has((0,A.Sw)(a))),...d],0);return e.length<3?a:{...a,subPoints:e.map(a=>({title:a,sources:[a]}))}})}return bB(g,f),{blocks:g,coveredSections:h,fallbackSections:b,llmPlanned:!1}})({blueprintChapter:be,inputSections:d.sections||[],chapterTitle:(0,o.GQ)(d.title),targetWords:bj,projectContext:cc,evidence:_}))),e=function(a){if(!a.blocks.some(a=>1===a.subPoints.length&&a.targetWords>2400&&!bC(a.title)))return a;let b=a.blocks.flatMap(a=>{if(1!==a.subPoints.length||a.targetWords<=2400||bC(a.title))return[a];let b=Math.max(1200,Math.floor(a.targetWords/2));return[{...a,title:`${a.title}(一)`,targetWords:b,halfFocus:"本部分为该主题的前半部分,聚焦总体构成与组织框架:逐项列明构成要素、总体规模指标与组织方式;只写本部分内容,不得涉及后半部分的具体展开。"},{...a,title:`${a.title}(二)`,targetWords:b,halfFocus:"本部分为该主题的后半部分,聚焦具体展开与实施要求:逐项展开实施内容、工艺要求与衔接安排;只写本部分内容,不得重复前半部分的总体框架。"}]});return{...a,blocks:b}}(b);if(e.blocks.length>0){c=e;let b=[ao,(0,eh.$8)(aU.task,e)].filter(Boolean).join("\n\n"),j=e.blocks.reduce((a,b)=>a+b.subPoints.length,0),k=e.blocks.reduce((a,b)=>a+b.subPoints.reduce((a,b)=>a+Math.max(0,b.sources.length-1),0),0),l=be?e.fallbackSections.length>0?`(蓝图章切片确定性转换:${e.fallbackSections.length} 条细目由覆盖校验挂回主题块)`:"(蓝图章切片确定性转换:主题块来自蓝图小节/工作包)":"(蓝图未覆盖本章,已按语义域确定性分组)";T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"running",message:`${(0,o.GQ)(d.title)} 已规划 ${e.blocks.length} 个主题块,正在按主题块并发成稿${l}`,details:[...ap,`有效证据:${_.length} 条`,`输入细目 ${ba} 条 → 主题块 ${e.blocks.length} 个(每块 2~4 个 H4 要点)`,`语义合并 ${k} 条细目,目录级 H4 合计 ${j} 个`,"单块 1200~2200 字,主题块间全并发,单节深度与整体耗时双优"],progress:{current:g+1,total:b8.length,label:"主题块并发"}},{subtitle:(0,o.GQ)(d.title),order:g});let m=T.find(a=>a.roleId===`agent-chapter-task-${d.id}`);m&&(m.message=`${aU.task.sections.filter(a=>a.ready).length}/${aU.task.sections.length} 条细目任务就绪(已规划为 ${e.blocks.length} 个主题块)`),J(H);let n={template:E,chapter:d,evidence:_,missingFacts:aa,promptTexts:b,projectContext:cF(d),skeletonProjectContext:cc,requirement:a.requirement,roleContext:am,targetWords:bj,maxWords:bd,forbidDrawingImages:!1,factCoverageContext:aT,compactProjectContext:!0,scopedProjectContext:cE,blueprintDataText:c8,blueprintSliceText:bf,blueprintMustCiteHint:bg,sectionEvidenceProvider:aC,onSectionProgress:bE,diagnostics:cO,signal:a.signal},p=await P(()=>(0,aJ.X6)(cO,`chapter-planned-block-draft:${d.id}`,()=>(0,aM.nl)(n,e)));if(p?.allSucceeded)f=p.markdown;else if(p){let a=await h(n,p.failedBlocks,p.sections),b=p.failedBlocks.filter(({index:b})=>!a[b]);b.length>0&&(a=await h(n,b,a)),a.every(a=>!!a)&&(f=`## ${d.title}
|
|
101
101
|
|
|
102
102
|
${a.join("\n\n")}`)}}}else f=bt?await P(()=>(0,aJ.X6)(cO,`chapter-section-draft:${d.id}`,()=>(0,aM.N1)({template:E,chapter:d,evidence:_,missingFacts:aa,promptTexts:aZ,projectContext:cF(d),skeletonProjectContext:cc,requirement:a.requirement,roleContext:am,targetWords:bj,maxWords:bd,forbidDrawingImages:!1,factCoverageContext:aT,projectRoot:C,modelName:(0,y.$y)()?.model.name,materialContextHash:(0,A.c6)({materialFilePaths:ae,promptTexts:ao}),allowPartialResult:!1,compactProjectContext:!0,scopedProjectContext:cE,blueprintDataText:c8,blueprintSliceText:bf,sectionEvidenceProvider:aC,onSectionProgress:bE,diagnostics:cO,signal:a.signal}))):await P(()=>(0,aJ.X6)(cO,`chapter-draft:${d.id}`,()=>(0,aM.eu)(E,d,_,aa,aZ,cF(d),a.requirement,am,{forbidDrawingImages:!1,minWords:bh,targetWords:bh,maxWords:bd,maxTokens:bi,factCoverageContext:aT,blueprintDataText:c8,blueprintSliceText:bf,signal:a.signal,diagnostics:cO,supplementEvidenceProvider:aD,evidenceFloorChars:cL.evidenceFloorChars,evidenceCeilingChars:cL.evidenceCeilingChars})));if(f||(cO.llm.lastError=cO.llm.lastError||"全部成稿路径未返回有效正文"),f&&be&&b){let a=function(a,b,c){let d=[],e=[],f=a,g=b.subSections.flatMap(a=>a.requiredParams.filter(a=>"must_cite"===a.mode&&a.strict)),h=new Set;for(let a of g)if(!h.has(a.path)){if(h.add(a.path),"data.contract.total_days"===a.path){if(c.contract.totalDays<=0)continue;let a=/(?:总工期|施工工期|合同工期|工期)(?:为|约|共计|控制)?[^\n。;;]{0,20}?(\d+(?:\.\d+)?)\s*(?:日历)?天/gu,b=!1;f=f.replace(a,(a,e)=>{b=!0;let f=Number(e);return f===c.contract.totalDays||f<=0?a:(d.push({anchor:"总工期",from:`${f}天`,to:`${c.contract.totalDays}天`}),a.replace(e,String(c.contract.totalDays)))}),b||e.push(`总工期 ${c.contract.totalDays} 日历天`);continue}if(a.path.startsWith("data.quantities.")){let b=a.path.slice(16),g=c.quantities[b];if(!g||g.value<=0)continue;let h=g.unit||"",i=RegExp(`${bv(b)}[^\\n。;;]{0,40}?(\\d+(?:\\.\\d+)?)\\s*${h?bv(h):""}`,"gu"),j=!1;f=f.replace(i,(a,c)=>{j=!0;let e=Number(c);return e===g.value||e<=0?a:(d.push({anchor:b,from:`${e}${h}`,to:`${g.value}${h}`}),a.replace(c,String(g.value)))}),j||e.push(`${b} ${g.value}${h}`)}}return{markdown:f,fixed:d,missing:e}}(f,be,b.data);a.fixed.length>0?(f=a.markdown,cO.llm.lastInfo=`蓝图引用对齐:${d.title} 回填 ${a.fixed.length} 处(${a.fixed.map(a=>`${a.anchor} ${a.from}→${a.to}`).join("、")})${a.missing.length?`;未引用缺口 ${a.missing.length} 项:${a.missing.join("、")}`:""}`):a.missing.length>0&&(cO.llm.lastInfo=`蓝图引用缺口观测:${d.title} 未在正文引用 ${a.missing.length} 项 must_cite 参数(${a.missing.slice(0,6).join("、")}${a.missing.length>6?" 等":""}),由跨章一致性审查兑底`)}if((0,A.Te)(a.signal),!f){let a=`${(0,o.GQ)(d.title)} 大模型未返回有效正文,已阻断生成`;throw T[i]=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:"failed",message:a,details:[`LLM 最近错误:${cO.llm.lastError||"空响应或超时"}`,`证据条数:${_.length}`],progress:{current:g+1,total:b8.length,label:"章节阻断"}},{subtitle:(0,o.GQ)(d.title),order:g}),J(H),Error(a)}if(!f.trim())throw Error(`${(0,o.GQ)(d.title)} 首次生成失败,未获得可用于定稿的正文`);let j=c&&c.blocks.length>0?c.blocks.map(a=>a.title):(d.sections||[]).filter(Boolean),k=c&&c.blocks.length>0?c.blocks.flatMap(a=>a.subPoints.map(a=>a.title)):[],l=f;j.length>0&&(l=(0,A.Ww)(l,j,3)),k.length>0&&(l=(0,A.Ww)(l,k,4)),e=dl(l,d),e=await dc(e,bM)}let bF=await aO({chapter:d,content:e,evidence:_}),bI=(0,r.V7)(e),bJ=(0,q.r4)(e),bL=c&&c.blocks.length>0?c.blocks.map(a=>a.title):(d.sections||[]).filter(Boolean),bP=bL.length>0?bL:bJ.length>0?bJ:[],bQ=(0,s.qK)(e,[{title:d.title,content:e,sections:bP}]).map(a=>a.message),bS=bF.slice(0,6).map(a=>`小节事实密度需优化:${a}`),bU=[...bQ,...bS],bV=function(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))||c.some(a=>/空小节|缺少规划小节/u.test(a))?"failed":"success"}(bI,0,bU);return f=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:an.primaryPromptId,status:bV,message:(0,aI.AQ)(`${(0,o.GQ)(d.title)} 已由大模型成稿:当前 ${bI} 字;章节预算约 ${bc.budgetTarget} 字,本轮目标约 ${bc.roundTarget} 字${bU.length?`;待优化:${bU.slice(0,8).join("、")}`:""}`,h),details:[`本轮完成率:${Math.round(bI/Math.max(1,bc.roundTarget)*100)}%`,`结构目标约 ${bc.structureTarget} 字`,...ap,`二级小节:${bP.length} 个`],progress:{current:g+1,total:b8.length,label:bU.length?"章节已生成":"章节达标"}},{subtitle:(0,o.GQ)(d.title),order:g}),by[g]=f,async()=>{let a={id:d.id,title:d.title,content:e,evidence:_,missingFacts:aa,sections:bP,tablePlans:d.tablePlans||[]};bx[g]=a,H=bx.filter(a=>!!a),J(H)}}catch(h){if(a.signal?.aborted)throw h;let b=cO.llm.lastError,c=`failures=${cO.llm.failures} retries=${cO.llm.retries} reasoningTokens=${cO.llm.reasoningTokens||0}`;console.error(`[gen] chapter ${d.title} failed:`,h,b?`| LLM lastError: ${b}`:"| LLM lastError: (none)","|",c);let e=`${d.title}:${h instanceof Error?h.message:"生成失败"}`;br.push(e),f=(0,aI.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,o.GQ)(d.title)} 生成失败:${e}`,details:[`LLM 最近错误:${b||"无记录"}`,`LLM 调用失败 ${cO.llm.failures} 次、重试 ${cO.llm.retries} 次`]},{subtitle:(0,o.GQ)(d.title),order:g}),by[g]=f}f&&(T[i]=f),J(H)}))))e&&c2.push(c1.run(e))}await Promise.all(c2),cO.metrics.push({name:"phase:draft",startedAt:c9,endedAt:Date.now(),durationMs:Date.now()-c9});let da=Date.now(),db=bx.filter(a=>!!a);bw.push(...by.filter(a=>!!a));let dd=[],de=!1;if(cK.enableGlobalReview){let c=await ep({globalReviewSamplingRate:cK.globalReviewSamplingRate,chapterDraftsFinal:db,template:E,reviewPromptTexts:aT,repairPromptTexts:aU,requirement:a.requirement,signal:a.signal,projectContext:cc,generationDiagnostics:cO,preliminaryFactsModel:bW,scopeConflicts:bZ.scopeConflicts,progressStages:T,emitProgress:J,withProgressHeartbeat:P,blueprintData:b?.validation.passed?b.data:void 0});dd=c.issues,de=c.dedupRan}else await eo({chapterDraftsFinal:db,template:E,repairPromptTexts:aU,projectContext:cc,requirement:a.requirement,signal:a.signal,generationDiagnostics:cO,progressStages:T,emitProgress:J,withProgressHeartbeat:P});let{tableFixApplied:df}=await em({effectiveChapters:b8,chapterDraftsFinal:db,template:E,repairPromptTexts:aU,requirement:a.requirement,signal:a.signal,generationDiagnostics:cO,progressStages:T,emitProgress:J,withProgressHeartbeat:P});return(df||!de)&&(dd=await el({chapterDraftsFinal:db,globalConsistencyIssues:dd,progressStages:T,emitProgress:J})),!function(a){let{generationDiagnostics:b,progressStages:c,chapterDraftsFinal:d,emitProgress:e}=a,f=b.evidence,g=b.llm,h=(0,v.Bd)();b.semantic=h;let i=h.embedCacheHits+h.embedCacheMisses,j=i>0?Math.round(1e4*h.embedCacheHits/i)/100:null,k=(g.promptCacheHitTokens||0)+(g.promptCacheMissTokens||0),l=k>0?Math.round(1e4*(g.promptCacheHitTokens||0)/k)/100:null,m=g.layerChars,n=m?m.l0+m.l1+m.l2+m.l3:0,o=a=>n>0?Math.round(1e4*a/n)/100:0,p=m&&n>0?`上下文分层:L0 system 恒定 ${m.l0} 字(${o(m.l0)}%)、L1 任务级 ${m.l1} 字(${o(m.l1)}%)、L2 章级 ${m.l2} 字(${o(m.l2)}%)、L3 小节级 ${m.l3} 字(${o(m.l3)}%)`:"上下文分层:本次生成未采集 L0-L3 分层统计";(0,aI.fx)(c,(0,aI.X5)({type:"validation",roleId:"budget-trim-report",status:"success",message:`预算裁剪报告:证据 ${f.raw} 条 → 采用 ${f.used} 条(噪声过滤 ${f.filteredNoise} 条、预算兜底裁剪 ${f.budgetDropped} 条),证据上下文 ${f.contextChars} 字`,details:[`证据质量:平均噪声分 ${f.avgNoiseScore},平均事实密度 ${f.avgFactDensity}`,`证据分层(T0 关键事实/T1 高相关片段/T2 目录索引):T0 注入 ${f.t0Chars||0} 字、T1 注入 ${f.t1Chars||0} 字、T2 索引 ${f.t2Lines||0} 行、目录省略 ${f.omittedChars||0} 字——A2 块级增量压缩后 T1 应显著低于 T0+T2`,`检索:${f.searchQueries} 组查询,耗时 ${Math.round(f.searchMs/1e3)} 秒`,`LLM:${g.calls} 次调用,失败 ${g.failures} 次,重试 ${g.retries} 次,schema 校验失败 ${g.schemaFailures} 次`,`LLM 上下文输入:${g.inputChars||0} 字符(system+user)${g.unlayeredChars?`(其中未分层调用 ${g.unlayeredChars} 字符,占比 ${Math.round(g.unlayeredChars/(g.inputChars||1)*1e4)/100}%)`:""},输入 ${g.inputTokens||0} token / 输出 ${g.outputTokens||0} token`,p,null===l?"上下文缓存:提供商未返回 prefix cache 指标(prompt_cache_hit/miss_tokens),无法观测命中率":`上下文缓存:命中 ${g.promptCacheHitTokens} token / 未命中 ${g.promptCacheMissTokens} token(命中率 ${l}%)——未命中占比高说明固定前缀未收敛,system/user 分离(A5)后应显著上升`,`推理 token:${g.reasoningTokens?`${g.reasoningTokens} token(思考未完全关闭,disableThinking 未生效风险)`:"0(思考已关闭)"}`,null===j?"bge 嵌入缓存:本次生成无嵌入调用":`bge 嵌入缓存:命中 ${h.embedCacheHits} 条 / 未命中 ${h.embedCacheMisses} 条(命中率 ${j}%,全局 LRU 容量 ${process.env.DOCUMENT_EMBED_CACHE_SIZE||2e3})`,"防爆兜底类软限制(保留并逐项记录裁剪量):selectEvidenceByBudget 的 maxItems/maxChars、uniqueEvidence 噪声过滤、evidenceBundlePrompt 的 maxChars、块级证据 top-k 截断、块级 facts 截断","语义取舍类软限制(已迁移本地语义模型):evaluationTexts 词面过滤→条目对象化、criterionFeatures 二字滑窗→bge-small 余弦、章节证据字符硬截→语义排序取 top-k","LLM 输出侧:schema 校验(截断位置可诊断)、空响应重试提示词收敛、块成稿 maxTokens 按目标字数 1:1.2(不走 thinking \xd76 放大)"]},{subtitle:"预算裁剪审计"})),e(d)}({generationDiagnostics:cO,progressStages:T,chapterDraftsFinal:db,emitProgress:J}),cO.metrics.push({name:"phase:global-review",startedAt:da,endedAt:Date.now(),durationMs:Date.now()-da}),(0,aJ.X6)(cO,"phase:finalize",()=>ee({chapterDrafts:db,chapterDraftsByOrder:bx,chapterGenerationStagesByOrder:by,chapterGenerationStages:bw,effectiveChapters:b8,template:E,allEvidence:a5,projectMaterialScope:a1,progressStages:T,documentSpec:au,projectMaterialProfile:ag,projectMaterialSummary:aq,domainProfile:av,documentBudget:cH,promptTexts:aR,reviewPromptTexts:aT,input:a,generationStrategy:cK,generationDiagnostics:cO,chapterScopedContext:cF,promptBindings:ac,promptDocumentRules:aP,projectUnderstanding:ah,projectContext:cc,projectRoot:C,projectId:D,readiness:aw,factExtractionPromptTexts:aS,blueprintData:b?.validation.passed?b.data:void 0,hasExplicitOutline:ap,missingItems:bq,retrievalCoverageReports:a6,failedChapterMessages:br,webResearchReport:bp,indexHealth:aZ,promptPlan:Y,globalConsistencyIssues:dd,scopeConflicts:bZ.scopeConflicts,writingTaskBrief:cC,evaluationCriteriaItems:b1.map(a=>a.title).filter(Boolean),tenderRequirements:ck,requirementsSimilarity:cw,factTokenScopeClassifier:cA,professionalDepthClassifier:cB,agentWorkflow:bX,emitProgress:J,withProgressHeartbeat:P}))}},48661:(a,b,c)=>{c.d(b,{BH:()=>P,Gl:()=>x,JU:()=>T,Jz:()=>U,M$:()=>J,Oy:()=>D,QG:()=>O,QH:()=>C,SE:()=>E,YL:()=>$,a6:()=>M,r:()=>N,v7:()=>K,yE:()=>S});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(31557),i=c(23760),j=c(87942),k=c(19898),l=c(44533),m=c(78217),n=c(37095);function o(a,b){return a?.map(a=>"running"===a.status?{...a,status:"failed",message:b}:a)}function p(a){return a.title&&"生成中"!==a.title?a.title:`${a.templateName||"文档"}生成失败`}function q(...a){let b=new Map;for(let c of a)for(let a of c||[])a.id&&a.content?.trim()&&b.set(a.id,a);return[...b.values()]}function r(a){return(a||[]).map(a=>({id:a.id,title:a.title,chars:(0,m.V7)(a.content),status:a.inProgress?"in_progress":a.content.trim().length>0?"completed":"failed",updatedAt:Date.now(),timedOut:a.timedOut,elapsedMs:a.elapsedMs}))}let s=globalThis,t=s.__generatedDocumentTasks??=new Map,u=Math.max(36e5,Number(process.env.DOCUMENT_ABANDONED_RECORD_STALE_MS??864e5)),v=s.__generatedDocumentProcessStartedAt??=Date.now(),w=Math.max(3e4,Number(process.env.DOCUMENT_RECENT_UPDATE_GRACE_MS??6e4));function x(a=(0,l.aY)()){let b=g.join(f.homedir(),".customize-agent","projects",function(a=(0,l.aY)()){return(0,k.computeProjectId)(g.resolve(a))}(a),"generatedDocuments");return e.mkdirSync(g.join(b,"drafts"),{recursive:!0}),e.mkdirSync(g.join(b,"assets"),{recursive:!0}),b}function y(a=(0,l.aY)()){return g.join(x(a),"index.json")}function z(a=(0,l.aY)()){return g.join(x(a),"assets.json")}function A(a,b=(0,l.aY)()){return g.join(x(b),"drafts",`${a}.json`)}function B(a,b=(0,l.aY)()){return g.join(x(b),"drafts",`${a}.meta.json`)}function C(a,b=(0,l.aY)()){let c=F(B(a,b),null);return c&&Number.isFinite(c.updatedAt)?c:null}function D(a){return!(!a||"generating"!==a.status||Date.now()-a.updatedAt<w)&&(a.updatedAt<v||Date.now()-a.updatedAt>=u)}function E(a,b=(0,l.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(x(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join((0,l.NW)(b),a.path):null}function F(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function G(a,b){e.mkdirSync(g.dirname(a),{recursive:!0});let c=`${a}.${process.pid}.${Date.now()}.tmp`;e.writeFileSync(c,JSON.stringify(b,null,2)),e.renameSync(c,a)}function H(a){for(let b of t.values())if(b.documentId===a)return b;return null}function I(a,b=(0,l.aY)()){if("generating"!==a.status||H(a.id)||Date.now()-a.updatedAt<w)return a;let c=a.updatedAt<v?0:u;if(Date.now()-a.updatedAt<c)return a;let d="生成任务已中断,请点击继续生成或重新生成",e=a.checkpointChapters?.length?"warning":"failed",f={...a,title:p(a),status:e,error:a.error||d,executionStages:o(a.executionStages,d),completedAt:Date.now(),warningIssues:a.checkpointChapters?.length?[...a.warningIssues||[],d]:a.warningIssues};return a.taskId&&Z(b,{taskId:a.taskId,title:`生成 ${f.title}`,status:"warning"===e?"warning":"error",percent:100,message:d,stages:f.executionStages,error:d}),f}function J(a=(0,l.aY)()){return F(y(a),[]).map(b=>{if("generating"!==b.status)return b;let c=F(A(b.id,a),null);if(!c)return b;let d=I(c,a);return d!==c?W(L(d,a,{preserveUpdatedAt:!0})):W(c)}).sort((a,b)=>(b.createdAt||b.updatedAt)-(a.createdAt||a.updatedAt))}function K(a,b=(0,l.aY)()){let c=F(A(a,b),null);if(!c)return null;let d=I(c,b);return function(a,b=(0,l.aY)()){if("generating"===a.status||!(a.editedMarkdown||a.markdown)?.trim())return a;let c=`document-${a.id}`;if(a.assets?.some(a=>a.id===c&&a.path))return a;let d=R(a,b);return d?L({...a,assets:[d,...(a.assets||[]).filter(a=>a.id!==d.id)]},b):a}(d!==c?L(d,b,{preserveUpdatedAt:!0}):d,b)}function L(a,b=(0,l.aY)(),c){let d=Date.now(),e=X({...a,updatedAt:c?.preserveUpdatedAt?a.updatedAt:d});G(A(e.id,b),e),G(B(e.id,b),{updatedAt:e.updatedAt,status:e.status,completedAt:e.completedAt});let f=F(y(b),[]).filter(a=>a.id!==e.id);return f.unshift(W(e)),G(y(b),f),e}function M(a,b,c=(0,l.aY)()){let d=K(a,c);return d?L({...d,...b,id:a},c):null}function N(a,b=(0,l.aY)()){let c=K(a,b);if(!c)return null;if("generating"!==c.status)return c;for(let[b,c]of t)c.documentId===a&&(c.status="aborted",c.controller.abort(),t.delete(b));let d="用户中止",e=o(c.executionStages,d),f=L({...c,status:"aborted",error:d,executionStages:e,completedAt:Date.now()},b);return f.taskId&&Z(b,{taskId:f.taskId,title:`生成 ${f.title}`,status:"warning",percent:100,message:d,stages:e,error:d}),f}function O(a,b=(0,l.aY)()){try{e.rmSync(A(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}let c=F(y(b),[]).filter(b=>b.id!==a);G(y(b),c)}function P(a=(0,l.aY)()){return F(z(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function Q(a,b,c=(0,l.aY)()){let d=Date.now(),e=[...P(c)];for(let c of a){let a=e.findIndex(a=>a.id===c.id),f=c.path?.startsWith("generatedDocuments/assets/")||"generated"===c.status||"prompt_ready"===c.status?"generated":"knowledge_base",h={...c,name:g.basename(c.path||c.url||c.id),source:f,indexed:a>=0&&e[a].indexed,usedByDocumentIds:a>=0?[...new Set([...e[a].usedByDocumentIds,b])]:[b],createdAt:a>=0?e[a].createdAt:d,updatedAt:d};a>=0?e[a]={...e[a],...h}:e.push(h)}return G(z(c),e),e}function R(a,b=(0,l.aY)()){let c=a.editedMarkdown||a.markdown;if(!c?.trim())return null;let d=`generatedDocuments/assets/${a.title.replace(/[\\/:*?"<>|]/gu,"_").slice(0,120)||"generated-document"}-${a.id}.md`,f=g.join(x(b),d.replace(/^generatedDocuments\//u,""));e.mkdirSync(g.dirname(f),{recursive:!0}),e.writeFileSync(f,c,"utf8");let h={id:`document-${a.id}`,type:"file",role:"generated",path:d,status:"generated",message:"模板运行生成的 Markdown 文档,仅登记到生成资源,不进入知识库"};return Q([h],a.id,b).find(a=>a.id===h.id)||null}function S(a,b=(0,l.aY)()){return P(b).find(b=>b.id===a)||null}function T(a,b=(0,l.aY)()){let c=S(a,b);if(!c)return!1;let d=E(c,b);if(d&&d.startsWith(x(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return G(z(b),P(b).filter(b=>b.id!==a)),!0}function U(a,b,c=(0,l.aY)()){let d=S(a,c);if(!d)return null;let f=E(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function V(a){let b=Math.max(4,Math.floor(Number(process.env.DOCUMENT_PERSIST_EVIDENCE_MAX_ITEMS??10))),c=Math.max(300,Math.floor(Number(process.env.DOCUMENT_PERSIST_EVIDENCE_ITEM_CHARS??900)));return{...a,evidence:(a.evidence||[]).slice(0,b).map(a=>({...a,content:"string"==typeof a.content?a.content.replace(/\s+/gu," ").slice(0,c):""}))}}function W(a){let b=[...a.executionStages||a.draft?.executionStages||[]].reverse().find(a=>a.message||a.subtitle||a.roleId),c=a.partialChapters||r(a.checkpointChapters||a.draft?.checkpointChapters||a.draft?.chapters),d=a.draft?.validationIssues||[],e=a.draft?.exportGate?a.draft.exportGate.blockingIssues?.length??0:d.filter(a=>"blocker"===a.severity||"error"===a.level).length,f=d.filter(a=>"warning"===a.severity||"warning"===a.level).length||a.warningIssues?.length||0,g=d.filter(a=>"suggestion"===a.severity||"info"===a.level).length;return{id:a.id,taskId:a.taskId,templateId:a.templateId,templateName:a.templateName,templateVersion:a.templateVersion,title:a.title,requirement:a.requirement,projectRoot:a.projectRoot,projectId:a.projectId,knowledgeBasePath:a.knowledgeBasePath,status:a.status,createdAt:a.createdAt,updatedAt:a.updatedAt,completedAt:a.completedAt,elapsedMs:a.completedAt?a.completedAt-a.createdAt:a.updatedAt-a.createdAt,error:a.error,warningIssues:(a.warningIssues||[]).slice(0,12),warningCount:f,blockerCount:e,suggestionCount:g,wordCount:(0,m.V7)(a.editedMarkdown||a.markdown||a.draft?.markdown||""),chapterCount:c?.length||a.draft?.chapters?.length||0,completedChapterCount:(c||[]).filter(a=>"completed"===a.status).length,latestStage:b?.subtitle||b?.roleName||b?.roleId,latestMessage:b?.message,assets:(a.assets||[]).slice(0,8),partialChapters:c}}function X(a){let b=a.draft?{...a.draft,chapters:a.draft.chapters?.map(V),checkpointChapters:a.draft.checkpointChapters?.map(V)}:a.draft;return{...a,draft:b,checkpointChapters:a.checkpointChapters?.map(V)}}function Y(a,b){let c=K(a.documentId,b);return c&&"generating"===c.status?{taskId:a.id,documentId:a.documentId,record:c}:null}function Z(a,b){(0,n.Qf)(a,{id:b.taskId,type:"document",title:b.title,stage:"processing"===b.status?"generating":"error"===b.status?"error":"done",status:b.status,percent:b.percent,message:b.message,error:b.error,details:(b.stages||[]).filter(a=>"role_binding"===a.type||"runtime-prompt-rules"===a.roleId||"document-readiness"===a.roleId||"failed"===a.status).flatMap(a=>[`${a.subtitle||a.roleName||a.roleId}:${a.message||a.status}`,...(a.details||[]).slice(0,8).map(a=>` - ${a}`)]).slice(0,80)})}function $(a,b=(0,l.aY)()){let c,e=g.resolve(b),f=(0,k.computeProjectId)(e),n=Date.now(),s=a.resumeDocumentId?K(a.resumeDocumentId,e):null;if(s){let a=H(s.id),b=a?Y(a,e):null;if(b)return b}if(!s)for(let b of t.values()){let c=Y(b,e);if(c&&c.record.templateId===a.templateId&&c.record.projectRoot===e)return c}let u=Math.max(1,Number(process.env.DOCUMENT_MAX_CONCURRENT_GENERATIONS??2));if(t.size>=u)throw Error(`当前已有 ${t.size} 个文档生成任务在运行(上限 ${u}),请等待完成或中止后再运行`);let v=s?.id||`doc-${n}-${d.randomBytes(4).toString("hex")}`,w=`task-${n}-${d.randomBytes(4).toString("hex")}`,x=s?{...s,taskId:w,status:"generating",error:void 0,completedAt:void 0,executionStages:[{type:"validation",roleId:"resume-generation",status:"running",message:"已重新进入生成流程;仅复用通过当前工作流版本、项目、模板、需求和导出门禁校验的章节,其余章节重新生成"}],partialChapters:void 0,checkpointChapters:void 0,draft:void 0,warningIssues:void 0,updatedAt:n}:{id:v,taskId:w,templateId:a.templateId,templateVersion:(0,h.QJx)(a.templateId)?.version,title:"生成中",requirement:a.requirement||"",maxEvidencePerChapter:a.maxEvidencePerChapter,projectRoot:e,projectId:f,knowledgeBasePath:(0,l.NW)(e),markdown:"",status:"generating",assets:[],createdAt:n,updatedAt:n};L(x,e),Z(e,{taskId:w,title:`生成 ${x.title}`,status:"processing",percent:1,message:"文档生成任务已进入后台队列",stages:x.executionStages});let y=new AbortController,z={},A=function(a,b,c){if(!a)return[];let d=(0,h.QJx)(b.templateId),e=a.reviewMetadata?.workflowVersion?.version||a.draft?.reviewMetadata?.workflowVersion?.version,f=a.draft?.exportGate?.passed===!0,g=a.templateId===b.templateId&&(!d||!a.templateVersion||a.templateVersion===d.version),i=a.projectRoot===c&&a.projectId===(0,k.computeProjectId)(c),l=(a.requirement||"")===(b.requirement||"");if(!g||!i||!l||e!==j.x.version||!f)return[];let m=new Set((a.draft?.partialChapters||a.partialChapters||[]).filter(a=>"completed"===a.status).map(a=>a.id));return q(a.draft?.chapters,a.checkpointChapters).filter(a=>m.has(a.id)&&!!a.content?.trim()&&!/WRITER_MISSING_SECTION|Writer 未完成/u.test(a.content))}(s,a,e),B="",C=0,D="",E=Math.max(1e3,Math.min(15e3,Number(process.env.DOCUMENT_PROGRESS_SAVE_INTERVAL_MS??5e3))),F=Math.max(3e4,Math.min(3e5,Number(process.env.DOCUMENT_PROGRESS_HEARTBEAT_SAVE_INTERVAL_MS??6e4))),G=(0,h.OXS)({...a,projectRoot:e,resumeChapters:A,signal:y.signal,onProgress:(a,b)=>{try{z.current&&(z.current.lastProgressAt=Date.now()),c=a,b?.chapters?.length&&(B=b.chapters.map(a=>`# ${a.title}
|
|
103
103
|
|