@customize-agent/server 4.1.36 → 4.1.37
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/1985.js +126 -0
- package/.next/server/chunks/5284.js +86 -0
- package/.next/server/chunks/8661.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/api/assets/generated/preview.js +1 -1
- package/.next/server/pages/api/assets/generated/preview.js.nft.json +1 -1
- package/.next/server/pages/api/assets/generated.js +1 -1
- package/.next/server/pages/api/assets/generated.js.nft.json +1 -1
- package/.next/server/pages/api/documents/chapter/regenerate.js +1 -1
- package/.next/server/pages/api/documents/chapter/regenerate.js.nft.json +1 -1
- package/.next/server/pages/api/documents/export.js +1 -1
- package/.next/server/pages/api/documents/export.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generate.js +2 -2
- package/.next/server/pages/api/documents/generate.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id].js +1 -1
- package/.next/server/pages/api/documents/generated/[id].js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated.js +1 -1
- package/.next/server/pages/api/documents/generated.js.nft.json +1 -1
- package/.next/server/pages/api/documents/templates.js +1 -1
- package/.next/server/pages/api/documents/templates.js.nft.json +1 -1
- package/.next/server/pages/api/jobs/[id].js +1 -1
- package/.next/server/pages/api/jobs.js +1 -1
- package/.next/server/pages/api/kb/categories.js +1 -1
- package/.next/server/pages/api/kb/duplicates.js +1 -1
- package/.next/server/pages/api/kb/evaluate.js +1 -1
- package/.next/server/pages/api/kb/files/detail.js +1 -1
- package/.next/server/pages/api/kb/files/open.js +1 -1
- package/.next/server/pages/api/kb/files/preview-pdf-page.js +1 -1
- package/.next/server/pages/api/kb/files/reindex.js +2 -1
- package/.next/server/pages/api/kb/files/reindex.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/search.js +1 -1
- package/.next/server/pages/api/kb/files/tree.js +1 -1
- package/.next/server/pages/api/kb/files.js +1 -1
- package/.next/server/pages/api/kb/ignore.js +1 -1
- package/.next/server/pages/api/kb/operations.js +1 -1
- package/.next/server/pages/api/kb/reindex.js +2 -1
- package/.next/server/pages/api/kb/reindex.js.nft.json +1 -1
- package/.next/server/pages/api/kb/search.js +1 -1
- package/.next/server/pages/api/kb/stats.js +1 -1
- package/.next/server/pages/api/kb/tags.js +1 -1
- package/.next/server/pages/api/kb/upload/complete.js +1 -1
- package/.next/server/pages/api/kb/upload/progress.js +1 -1
- package/.next/server/pages/api/kb/upload.js +2 -1
- package/.next/server/pages/api/kb/upload.js.nft.json +1 -1
- package/.next/server/pages/asset-library.html +1 -1
- package/.next/server/pages/document-roles.html +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/guide.html +1 -1
- package/.next/server/pages/index.html +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/overview.html +1 -1
- package/.next/server/pages/prompt.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages-manifest.json +22 -22
- package/package.json +1 -1
- package/.next/server/chunks/273.js +0 -211
- package/.next/server/chunks/8203.js +0 -5
- /package/.next/static/{tR9b1RDn9IyDznEGa-VyV → KfEyuJ5jYwrIOzH82SKWZ}/_buildManifest.js +0 -0
- /package/.next/static/{tR9b1RDn9IyDznEGa-VyV → KfEyuJ5jYwrIOzH82SKWZ}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";exports.id=5284,exports.ids=[5284],exports.modules={2773:(a,b,c)=>{c.d(b,{$b:()=>A,Hh:()=>u,Hz:()=>x,SK:()=>B,W9:()=>v,_W:()=>y,_n:()=>w,qp:()=>t});var d=c(76760),e=c(44533),f=c(70963),g=c(70933),h=c(14070),i=c(51144);let j=["tender_document","bill_of_quantities","drawing","addendum","contract","technical_specification","schedule_document","quality_safety_document","other"],k={tender_document:"招标文件正文",bill_of_quantities:"工程量清单",drawing:"图纸/设计资料",addendum:"补疑/澄清/答疑",contract:"合同资料",technical_specification:"技术规范/技术要求",schedule_document:"工期/进度资料",quality_safety_document:"质量安全文明资料",other:"其他资料"},l={addendum:100,tender_document:90,contract:80,technical_specification:75,bill_of_quantities:70,drawing:65,schedule_document:60,quality_safety_document:60,other:10};function m(a){return k[a]||"其他资料"}function n(a){return"disk"!==a.status&&"error"!==a.status&&Number(a.indexedAt||0)>0&&Number(a.chunkCount||0)>0}function o(a){return a.replace(/\\/gu,"/").replace(/^\/+|\/+$/gu,"")}function p(a){let b=o(a).split("/").filter(Boolean);return b.length>1?b[0]:d.basename(b[0]||"当前项目")}function q(a){return a.replace(/[\s_\-—()()【】、,,.。·]/gu,"").replaceAll("[","").replaceAll("]","").toLowerCase()}function r(a,b,c){let d=a.filter(n),e=(b||[]).map(a=>o(a.materialRootPath)).filter(Boolean);if(e.length>0){let a=d.filter(a=>e.some(b=>o(a.relativePath)===b||o(a.relativePath).startsWith(`${b}/`))),b=s(a,c);return{files:b.files,roots:b.roots.length?b.roots:e,warnings:0===a.length?["项目资料包下未找到已完成索引的可用文件。"]:[]}}let f=s(d,c);return f.scoped?{files:f.files,roots:f.roots,warnings:[]}:{files:d,roots:[...new Set(d.map(a=>p(a.relativePath)).filter(Boolean))],warnings:["模板未显式绑定项目资料包,已使用当前知识库全部可用资料。"]}}function s(a,b){let c=(b||"").trim();if(!c)return{files:a,roots:[...new Set(a.map(a=>p(a.relativePath)).filter(Boolean))],scoped:!1};let d=new Map;for(let b of a){let a=p(b.relativePath);a&&d.set(a,[...d.get(a)||[],b])}let e=[...d.entries()].map(([a,b])=>({group:a,groupFiles:b,score:function(a,b){let c=q(a),d=q(b);if(c.length>=4&&d.includes(c.slice(0,Math.min(16,c.length))))return 100;let e=new Set(["项目","工程","施工","总承包","资料","招标","图纸","清单"]);return a.split(/(?:\s|_|-|—|(|)|\(|\)|【|】|\[|\]|、|,|,|\.)+/u).filter(a=>a.length>=2&&!e.has(a)).reduce((a,c)=>a+(b.includes(c)?Math.min(20,c.length):0),0)}(a,c)})).filter(a=>a.score>0).sort((a,b)=>b.score-a.score);return e.length>0&&(1===e.length||e[0].score>e[1].score)?{files:e[0].groupFiles,roots:[e[0].group],scoped:!0}:{files:a,roots:[...d.keys()],scoped:!1}}function t(a){return(a.projectBindings||[]).filter(a=>a.materialRootPath).map(a=>({materialRootPath:o(a.materialRootPath)}))}function u(a,b,c={}){return r((0,e.Yy)(a),t(b),c.requirement).files.map(a=>a.relativePath)}function v(a,b,c={}){let f=r((0,e.Yy)(a),t(b),c.requirement),g={tender_document:[],bill_of_quantities:[],drawing:[],addendum:[],contract:[],technical_specification:[],schedule_document:[],quality_safety_document:[],other:[]},h=f.files.map(a=>{let b=function(a){let b=o(a).toLowerCase(),c=[],d=(d,e)=>(d.lastIndex=0,(!!d.test(a)||!!d.test(b))&&(c.push(e),!0));return d(/补疑|答疑|澄清|疑问回复|答复|变更|更正|补充通知|addendum|clarification/iu,"补疑/澄清关键词")?{kind:"addendum",confidence:.92,signals:c}:d(/清单|工程量|分部分项|措施项目|项目特征|招标控制价|boq|bill.?of.?quantities/iu,"清单/工程量关键词")?{kind:"bill_of_quantities",confidence:.9,signals:c}:d(/图纸|施工图|建筑图|结构图|安装图|设计图|总平|平面图|立面图|剖面图|节点|dwg|drawing|cad/iu,"图纸/设计关键词")?{kind:"drawing",confidence:.88,signals:c}:d(/招标文件|投标人须知|评标办法|招标公告|招标正文|招标需求|tender|bidding/iu,"招标文件关键词")?{kind:"tender_document",confidence:.9,signals:c}:d(/合同|协议书|专用条款|通用条款|contract/iu,"合同关键词")?{kind:"contract",confidence:.82,signals:c}:d(/技术规范|技术要求|施工规范|验收规范|标准|做法说明|specification|standard/iu,"技术规范关键词")?{kind:"technical_specification",confidence:.8,signals:c}:d(/工期|进度|计划|节点|里程碑|schedule/iu,"工期进度关键词")?{kind:"schedule_document",confidence:.72,signals:c}:d(/质量|安全|文明|环保|危大|验收|quality|safety/iu,"质量安全关键词")?{kind:"quality_safety_document",confidence:.72,signals:c}:{kind:"other",confidence:.35,signals:["未命中明确资料类型,按其他资料处理"]}}(a.relativePath),c={filePath:a.relativePath,fileName:d.basename(a.relativePath),kind:b.kind,confidence:b.confidence,priority:l[b.kind],chunkCount:a.chunkCount,summary:`${m(b.kind)}:${d.basename(a.relativePath)},可用切片 ${a.chunkCount||0} 条。`,keySignals:b.signals};return g[b.kind].push(c),c}).sort((a,b)=>b.priority-a.priority||b.confidence-a.confidence),i=(f.roots[0]||p(h[0]?.filePath||"")||"当前知识库项目").replace(/\.(?:pdf|docx?|xlsx?|xls|dwg|zip)$/iu,"").replace(/^\d+(?:\.\d+)?[-_\s]*/u,"").trim(),j=[...f.warnings];return 0===g.tender_document.length&&j.push("未识别到招标文件正文,工程概况、招标响应和评审要求可能不足。"),0===g.bill_of_quantities.length&&j.push("未识别到工程量清单,施工范围、资源配置和主要工程内容可能不足。"),0===g.drawing.length&&j.push("未识别到图纸/设计资料,施工方法、专业接口和构造做法可能不足。"),{projectName:i,materialRoots:f.roots,files:h,groups:g,warnings:j}}function w(a,b,c){let d=c?(0,f.C)(c):"",e=[`本次文档必须围绕项目资料包”${b.projectName}”展开,不得把其他项目资料混入正文。`,"招标文件正文用于确定项目边界、招标响应、工期质量安全目标和评审关注点。","工程量清单用于确定主要工程内容、分部分项、项目特征、资源配置和施工方法依据。","图纸/设计资料用于确定施工对象、空间关系、构造做法、专业接口和重点难点。","补疑/澄清/答疑属于高优先级修正资料,如与原文件冲突,以补疑/澄清/答疑为准。"],g=a.chapters.map(a=>{var d;let e=(d=a.title,/概况|工程|项目|总体/u.test(d)?["tender_document","addendum","bill_of_quantities"]:/部署|组织|平面|准备/u.test(d)?["tender_document","bill_of_quantities","drawing","addendum"]:/施工|工艺|技术|方案|方法|分部分项/u.test(d)?["bill_of_quantities","drawing","technical_specification","addendum"]:/进度|工期/u.test(d)?["tender_document","addendum","schedule_document","bill_of_quantities"]:/质量|验收/u.test(d)?["tender_document","technical_specification","drawing","quality_safety_document","addendum"]:/安全|文明|环保|风险|危大/u.test(d)?["tender_document","quality_safety_document","drawing","addendum"]:/资源|材料|设备|劳动力|机械/u.test(d)?["bill_of_quantities","drawing","tender_document"]:["tender_document","bill_of_quantities","drawing","addendum","technical_specification"]).filter(a=>b.groups[a]?.length>0),f=e.length?e:["tender_document","bill_of_quantities","drawing"].filter(a=>b.groups[a]?.length>0),g=(c?.works||[]).filter(b=>{if(!b.name)return!1;let c=(0,h.C1)(b.name,a.title),d=(a.sections||[]).some(a=>(0,h.C1)(b.name,a));return c||d}).map(a=>`${a.name}:${a.scope.slice(0,120)}`),k=(c?.methods||[]).filter(b=>!!b.applicableWorks?.length&&b.applicableWorks.some(b=>{let c=(0,h.C1)(b,a.title),d=(a.sections||[]).some(a=>(0,h.C1)(b,a));return c||d})).map(a=>a.name);return{chapterId:a.id,chapterTitle:a.title,writingGoal:`围绕”${a.title}”组织本项目资料事实,优先体现招标要求、清单工程内容、图纸施工对象和补疑修正口径。`,mustUseMaterialKinds:f,evidenceQueries:Object.fromEntries(j.map(b=>[b,function(a,b){let c=(0,i.Cr)(a.sections||[],a=>(0,i.Ox)(a),{maxItems:12,maxChars:600},`queriesForKind:${a.id}:sections`),d=(0,i.Cr)(a.requiredFacts,a=>(0,i.Ox)(a),{maxItems:12,maxChars:600},`queriesForKind:${a.id}:facts`),e=c.selected.join(" "),f=d.selected.join(" "),g=`${a.title} ${e} ${f}`.trim();return[...new Set(({tender_document:[g,`${a.title} 招标范围 工期 质量 标准 评审 响应要求`,"项目概况 招标范围 投标文件 技术标 施工组织设计"],bill_of_quantities:[g,`${a.title} 工程量清单 分部分项 项目特征 数量 单位`,"清单 工程内容 主要分部分项 工程量 项目特征"],drawing:[g,`${a.title} 图纸 设计说明 构造做法 施工部位 节点`,"图纸 设计说明 平面 节点 构造 做法 专业接口"],addendum:[g,`${a.title} 补疑 澄清 答疑 变更 修正`,"补疑 澄清 答疑 招标文件 清单 图纸 修正"],contract:[g,`${a.title} 合同 条款 履约 责任 验收`],technical_specification:[g,`${a.title} 技术规范 施工要求 验收标准 控制要点`],schedule_document:[g,`${a.title} 工期 进度 节点 计划 里程碑`],quality_safety_document:[g,`${a.title} 质量 安全 文明 环保 验收 风险`],other:[g]})[b].filter(Boolean))]}(a,b)])),mustCover:[...new Set([a.purpose,...a.sections||[],...a.requiredFacts,...g,...k])].filter(Boolean).slice(0,24),avoidWriting:["不得脱离项目资料泛泛套写通用内容","不得编造资料未确认的数字、日期、金额、工程量、规格和标准","不得忽略补疑/澄清对原始资料的修正"]}}),k=function(a){let{profile:b}=a,c=j.map(a=>`${m(a)}:${b.groups[a].length?b.groups[a].map(a=>`${a.fileName}(${a.chunkCount||0})`).join("、"):"未识别"}`).join("\n"),d=a.chapterPlans.map((a,b)=>`${b+1}. ${a.chapterTitle}
|
|
2
|
+
- 写作目标:${a.writingGoal}
|
|
3
|
+
- 必用资料类型:${a.mustUseMaterialKinds.map(m).join("、")||"按现有资料综合使用"}
|
|
4
|
+
- 必须覆盖:${a.mustCover.join("、")||"按章节目标展开"}
|
|
5
|
+
- 禁止:${a.avoidWriting.join(";")}`).join("\n");return["## 项目资料理解模型",`项目资料包:${b.projectName}`,`资料根目录:${b.materialRoots.join("、")||"当前知识库全部资料"}`,"资料类型清单:",c,b.warnings.length?`资料风险:${b.warnings.join(";")}`:"","全局写作重点:",...a.globalWritingFocus.map(a=>`- ${a}`),"章节资料使用计划:",d,a.graphPrompt||""].filter(Boolean).join("\n")}({profile:b,globalWritingFocus:e,chapterPlans:g,graphPrompt:d});return{profile:b,globalWritingFocus:e,chapterPlans:g,prompt:k}}function x(a){let b=new Map,c=new Map;for(let d of a.files)b.set(d.filePath,d.kind),c.set(d.filePath,"drawing"===d.kind?"drawing":"bill_of_quantities"===d.kind?"table":"technical_specification"===d.kind?"specification":"tender_document"===d.kind||"addendum"===d.kind?"rule":"reference");return{kindByPath:b,processingByPath:c}}function y(a){return a||"other"}function z(a){return"drawing"===a?"drawing":"bill_of_quantities"===a?"table":"technical_specification"===a?"specification":"tender_document"===a||"addendum"===a?"rule":"reference"}async function A(a){let b=[];if(!a.plan)return b;for(let c of a.plan.mustUseMaterialKinds){let d=a.profile.groups[c].map(a=>a.filePath).filter(b=>a.scopedFilePaths.includes(b));if(0!==d.length)for(let e of(0,i.Cr)(a.plan.evidenceQueries[c]||[],a=>(0,i.Ox)(a),{maxItems:6,maxChars:1200},`evidence-queries:${c}`).selected){if(a.signal?.aborted)throw Error("aborted");let f=await a.manager.search(a.projectRoot,e,{scope:"project",filters:{filePaths:d},limit:a.limitPerQuery,weights:{keyword:.68,vector:.25,rewrite:.85,hybridBonus:.3},generationMode:!1});b.push(...f.results.filter(a=>d.includes(a.filePath)).map(b=>({chapterId:a.chapter.id,filePath:b.filePath,score:b.score+l[c]/100+2,content:b.content,roleId:y(c),processingType:z(c),sectionTitle:b.sectionTitle,source:`material-plan:${c}`})))}}return(0,g.QR)(b,{maxItems:48,maxChars:52e3,preservePinned:!0})}function B(a){let b=[],c=new Set(a.plan?.mustUseMaterialKinds||[]),d=a.profile.files.filter(b=>a.scopedFilePaths.includes(b.filePath)&&(0===c.size||c.has(b.kind))),e=a.highRisk?80:40,f=d.sort((a,b)=>b.priority-a.priority).slice(0,e),h=[a.chapter.title,...a.chapter.sections||[],...a.chapter.requiredFacts].filter(Boolean),i=a.highRisk?6:3;for(let c of f){let d=a.project.getFileDetail?.(c.filePath,{maxChunkContentChars:a.highRisk?24e3:12e3});if(d?.chunks?.length)for(let e of d.chunks.map((a,b)=>{let d=(0,g.eE)(a.content),e=`${a.sectionTitle||""}
|
|
6
|
+
${d}`;return{chunk:a,index:b,score:.8*h.filter(a=>e.includes(a)).length+ +!!/\d+(?:\.\d+)?\s*(?:日历天|天|月|年|万元|元|㎡|m²|m³|米|mm|台|套|人|项|%|MPa|kPa)/u.test(d)+.4*(0===b)+c.priority/120}}).filter(a=>a.score>0).sort((a,b)=>b.score-a.score).slice(0,i))b.push({chapterId:a.chapter.id,filePath:d.file.relativePath,score:1.8+e.score,content:e.chunk.content,roleId:y(c.kind),processingType:z(c.kind),sectionTitle:e.chunk.sectionTitle,source:"project-material-sample"})}return(0,g.QR)(b,{maxItems:a.highRisk?60:30,maxChars:a.highRisk?6e4:3e4,preservePinned:!0})}},6444:(a,b,c)=>{c.d(b,{N:()=>l,x:()=>k});var d=c(77598),e=c(8753),f=c(92808);function g(a){return a.replace(/[^a-zA-Z0-9\u4e00-\u9fa5_-]/gu,"-").slice(0,60)||`fact-${Date.now()}`}function h(a){let b=RegExp("[“”\"'‘’「」『』《》](.{2,80}?)[“”\"'‘’「」『』《》]","gu");return[...a.matchAll(b)].map(a=>a[1].trim()).filter(Boolean)}function i(a){return a.split(/[\n;;。]/u).map(a=>a.trim()).filter(a=>a.length>=2)}function j(a,b=""){let c=function(a,b=""){return`${b} ${a.name} ${a.category} ${a.outputTitle} ${a.description}`}(a,b);return(0,e.V)().autoSpecGates.filter(a=>a.templateMatchers.some(a=>(function(a,b){try{return RegExp(b,"iu").test(a)}catch{return a.includes(b)}})(c,a)))}function k(a,b=""){let c=function(a,b=""){return d.createHash("sha1").update(JSON.stringify({id:a.id,name:a.name,description:a.description,outputTitle:a.outputTitle,chapters:a.chapters,promptBindings:a.promptBindings,projectBindings:a.projectBindings,projectRoleConfigId:a.projectRoleConfigId,requirement:b})).digest("hex").slice(0,12)}(a,b),e=function(a){let b=`${a.name} ${a.category} ${a.outputTitle} ${a.description}`;return(0,f.rs)(b,f.nt)||a.category||"文档"}(a),l=function(a,b){let c=[a.name,a.category,a.outputTitle,a.description],d=[];for(let b of a.chapters)for(let a of(c.push(b.title,b.purpose,...b.sections||[],...b.requiredFacts||[],...b.queries||[]),b.requiredFacts||[]))d.push(a);let e=c.filter(Boolean).join("\n"),g=new Set(d);for(let a of(0,f.t0)(e,f.NT))g.add(a);for(let c of j(a,b))for(let a of c.requiredFacts)g.add(a);return[...g].filter(Boolean)}(a,e),m=function(a=""){let b=new Set;for(let c of[/(?:必须|需要|要求|增加|包含|包括|补充|设置|新增).{0,12}?(?:章节|章|节|小节)[::为是]?\s*([^。;;\n]{2,80})/giu,/(?:章节|目录).{0,8}?(?:包括|包含|为|是)[::]?\s*([^。;;\n]{2,120})/giu])for(let d of a.matchAll(c))for(let a of d[1].split(/[、,,/]/u).map(a=>a.trim()).filter(Boolean))!/不要|禁止|不得|不能/iu.test(a)&&a.length<=40&&b.add(a.replace(/[。;;::]+$/u,""));return[...b]}(b),n=function(a=""){let b=new Set;for(let c of i(a).filter(a=>/必须|一定要|务必|输出|写明/iu.test(a)&&!/章节|章|节|小节/iu.test(a))){for(let a of h(c))b.add(a);let a=c.match(/(?:输出|写明)\s*([^。;;\n]{2,30})/iu);a&&b.add(a[1].trim())}return[...b].filter(a=>a&&a.length<=30&&!/不要|禁止|不得|不能|生成|要求内容|专业|结构完整|直接用于/u.test(a))}(b),o=function(a=""){let b=new Set;for(let c of i(a).filter(a=>/不要|禁止|不得|不能|不允许|严禁/iu.test(a))){for(let a of h(c))b.add(a);let a=c.match(/(?:不要|禁止|不得|不能|不允许|严禁)(?:出现|输出|写|包含)?\s*([^。;;\n]{2,40})/iu);a&&b.add(a[1].replace(/^(这些|以下|内容|词语|文字)[::]?/u,"").trim())}return[...b].filter(a=>a&&!/章节|页|表格/u.test(a))}(b),p=function(a=""){let b=a.match(/(?:大概|约|左右|不少于|至少|控制在|不超过|最多)?\s*(\d{1,3})\s*(?:页|page)/iu);if(!b)return;let c=Number(b[1]);if(Number.isFinite(c)&&!(c<=0))return/不少于|至少/iu.test(a)?{min:c}:/不超过|最多|以内|控制在/iu.test(a)?{max:c}:{target:c,min:Math.max(1,Math.floor(.85*c)),max:Math.ceil(1.15*c)}}(b),q=j(a,e),r=Math.max(0,...q.map(a=>a.minTables||0)),s=Math.max(function(a=""){let b=a.match(/(?:至少|不少于)?\s*(\d{1,2})\s*(?:个|张)?\s*表格/iu);return b?Number(b[1]):/表格化|用表格|表格形式|表格表达/iu.test(a)?1:void 0}(b)||0,r)||void 0,t=a.chapters.map((a,b)=>{let c=[a.title,a.purpose,...a.sections||[],...a.requiredFacts||[],...a.queries||[]].join("\n"),d=new Set(a.requiredFacts||[]);for(let a of l)(c.includes(a)||RegExp(a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"iu").test(c))&&d.add(a);for(let a of(0,f.t0)(c,f.Ny))d.add(a);return{id:a.id,title:a.title,required:!0,order:b,minWords:900,requiredFactIds:[...d].filter(a=>l.includes(a)).map(g),requiredFileRoleIds:[],requiredPromptRoleIds:[],generationHint:[a.purpose,a.sections?.length?`必须包含小节:${a.sections.join("、")}`:"",d.size?`重点覆盖事实:${[...d].join("、")}`:""].filter(Boolean).join("\n")}}),u=m.filter(a=>!t.some(b=>b.title.includes(a)||a.includes(b.title))).map((a,b)=>({id:`user-chapter-${g(a)}`,title:a,required:!0,order:t.length+b,minWords:600,requiredFactIds:[],requiredFileRoleIds:[],requiredPromptRoleIds:[],generationHint:`用户明确要求包含该章节:${a}`})),v=[{id:"auto-source-required",name:"事实必须有来源",type:"source_required",level:"warning",evaluator:{subject:"source",operator:"all_have_source"}},{id:"auto-min-source",name:"至少使用绑定材料来源",type:"source_required",level:"warning",evaluator:{subject:"source",operator:"min_count",min:2}},{id:"auto-no-debug-text",name:"不得输出后台流程话术",type:"forbidden_text",level:"error",value:"知识库证据",evaluator:{subject:"document",operator:"not_contains",value:"知识库证据"}},...q.flatMap(a=>a.requiredTexts.map(a=>({id:`configured-required-${g(a)}`,name:`配置建议包含:${a}`,type:"configured_required_text",level:"warning",value:a,evaluator:{subject:"document",operator:"contains",value:a}}))),...q.flatMap(a=>a.forbiddenTexts.map(a=>({id:`configured-forbidden-${g(a)}`,name:`配置建议避免:${a}`,type:"configured_forbidden_text",level:"warning",value:a,evaluator:{subject:"document",operator:"not_contains",value:a}}))),...r?[{id:"configured-min-table-count",name:`配置建议正式表格不少于 ${r} 个`,type:"configured_table_density",level:"warning",evaluator:{subject:"table",operator:"min_count",min:r}}]:[],...m.map(a=>({id:`user-required-chapter-${g(a)}`,name:`用户提到章节:${a}`,type:"user_required_chapter",level:"warning",target:a,evaluator:{subject:"chapter",operator:"exists",target:a}})),...n.map(a=>({id:`user-required-text-${g(a)}`,name:`用户提到应包含:${a}`,type:"user_required_text",level:"warning",value:a,evaluator:{subject:"document",operator:"contains",value:a}})),...o.map(a=>({id:`user-forbidden-text-${g(a)}`,name:`用户要求不得包含:${a}`,type:"user_forbidden_text",level:"error",value:a,evaluator:{subject:"document",operator:"not_contains",value:a}})),...s?[{id:"user-min-table-count",name:`用户提到表格数量不少于 ${s}`,type:"user_format_table",level:"warning",evaluator:{subject:"table",operator:"min_count",min:s}}]:[],...p?.min?[{id:"user-min-page-count",name:`用户提到页数不少于 ${p.min}`,type:"user_page_target",level:"warning",evaluator:{subject:"page",operator:"min_count",min:p.min}}]:[],...p?.max?[{id:"user-max-page-count",name:`用户要求页数不超过 ${p.max}`,type:"user_page_target",level:"warning",evaluator:{subject:"page",operator:"max_count",min:p.max}}]:[]],w=[...t,...u];return{sourceHash:c,managedBy:"system",spec:{id:`auto-${a.id}-${c}`.replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80),name:`后台优化建议 - ${a.name}`,description:`${e}后台优化建议,由模板、提示词、角色绑定和用户临时要求静默生成,仅用于提升内容完整性,不接管章节结构。`,factFields:l.map(a=>({id:g(a),name:a,type:"auto",required:q.some(b=>b.requiredFacts.includes(a))||!/资源|品牌|重点|难点|约束/iu.test(a),extractionHint:`从绑定材料摘要、角色绑定证据和知识库证据中抽取“${a}”。`,validationHint:`生成内容涉及“${a}”时必须与绑定材料一致,不得引入无关事实。`})),chapterMode:"fixed",chapterRules:w,dynamicChapterRule:{source:"ai_plan",minChapters:0,maxChapters:0,titleStrategy:"template",minWordsPerChapter:0,generationHint:`不自动规划或补充章节;仅按${e}正式文件要求提供内容完整性建议。`},gateRules:v,builtIn:!0}}}function l(a,b,c={}){return c.publicSafe?`## 文档事实与质量要求
|
|
7
|
+
建议关注事实:${a.factFields.map(a=>a.name).join("、")}
|
|
8
|
+
章节内容要求:${a.chapterRules.map(a=>`${a.title}${a.generationHint?`:${a.generationHint.replace(/\s+/gu," ")}`:""}`).join(";")||"以当前模板章节为准"}
|
|
9
|
+
质量控制点:${a.gateRules.map(a=>a.name).join("、")}`:`## 结构化检查摘要
|
|
10
|
+
摘要名称:${a.name}
|
|
11
|
+
版本标识:${b}
|
|
12
|
+
说明:以下内容仅用于事实覆盖、检索命中和质量检查,不得新增、删除、重排用户或模板章节。
|
|
13
|
+
建议关注事实:${a.factFields.map(a=>a.name).join("、")}
|
|
14
|
+
章节内容建议:${a.chapterRules.map(a=>`${a.title}${a.generationHint?`:${a.generationHint.replace(/\s+/gu," ")}`:""}`).join(";")||"以当前模板章节为准"}
|
|
15
|
+
质量提醒:${a.gateRules.map(a=>a.name).join("、")}`}},14070:(a,b,c)=>{function d(a){let b=a.split(/[,。;:、\s\d()()《》<>【】"“”'‘’\-/\\|,.:;]+/u).filter(Boolean),c=new Set;for(let a of b){let b=a.trim();if(b.length>=2&&c.add(b),b.length>=3)for(let a=0;a<=b.length-2;a++){let d=b.slice(a,a+2);d.length>=2&&!/^[a-zA-Z0-9]+$/u.test(d)&&c.add(d)}}return[...c]}function e(a,b,c=.3){return function(a,b){let c=new Set(d(a)),e=new Set(d(b));if(0===c.size||0===e.size)return 0;let f=0;for(let a of c)if(e.has(a))f+=1;else if(a.length>=2){for(let b of e)if(b.length>=2&&(b.includes(a)||a.includes(b))){f+=.5;break}}return f/Math.max(c.size,1)}(a,b)>=c}c.d(b,{C1:()=>e})},22157:(a,b,c)=>{c.d(b,{Te:()=>g,c6:()=>e,l$:()=>h,lG:()=>f});var d=c(77598);function e(a){return(0,d.createHash)("sha1").update(JSON.stringify(a)).digest("hex")}function f(a){if(null==a)return"";if("string"==typeof a)return a;if("number"==typeof a||"boolean"==typeof a)return String(a);try{return JSON.stringify(a)}catch{return String(a)}}function g(a){if(a?.aborted)throw Error("用户中止")}async function h(a,b,c){if(0===a.length)return[];let d=Math.max(1,Math.min(a.length,c.concurrency||function(a){let b=Math.max(1,a.total);return"chapter"===a.kind?b<=3?b:b<=6?Math.min(b,4):b<=10?Math.min(b,6):Math.min(b,8):"search"===a.kind?b<=6?b:Math.min(b,8):"deepRetrieval"===a.kind?Math.min(b,a.highRisk?6:4):"sectionRepair"===a.kind?b<=3?b:b<=8?4:Math.min(b,6):Math.min(b,4)}({total:a.length,kind:c.kind,targetWords:c.targetWords,highRisk:c.highRisk}))),e=Array(a.length),f=0;return await Promise.all(Array.from({length:d},async()=>{for(;f<a.length;){let c=f;f+=1,e[c]=await b(a[c],c)}})),e}},25284:(a,b,c)=>{c.d(b,{b3:()=>o,hp:()=>n});var d=c(73024),e=c(76760),f=c(19898),g=c(44533),h=c(32434),i=c(22157);function j(a){return e.join(function(a){let b=e.join((0,g.a2)(),"projects",(0,f.computeProjectId)(a),"project-intelligence");return d.mkdirSync(b,{recursive:!0}),b}(a),"project-intelligence.json")}function k(a){let b=[],c=(c,d,e=.72)=>{d&&b.push({key:c,value:d,sourceFile:a.relativePath,roleId:a.roles[0]||"project_overview",processingType:"project_intelligence",confidence:e})};for(let b of(c("资料文件",a.fileName,.6),a.root&&c("资料组",a.root,.65),a.roles))c("资料角色",b,.58);let d=a.relativePath.match(/([^/\\]*项目[^/\\]*)/u)?.[1]||a.root;return d&&c("项目名称候选",d,.62),b}function l(a){return(0,i.c6)(a.map(a=>({path:a.relativePath,hash:a.contentHash,chunkCount:a.chunkCount,indexedAt:a.indexedAt,status:a.status})).sort((a,b)=>a.path.localeCompare(b.path)))}async function m(a){let b=await (0,g.Qh)().getProject(a),c=(0,g.Yy)(a).filter(a=>"disk"!==a.status&&"error"!==a.status&&Number(a.indexedAt||0)>0&&Number(a.chunkCount||0)>0).map(a=>{var c;let d=a.relativePath.split(/[\\/]/u).filter(Boolean)[0],f=function(a){let b=new Set(["project_overview"]);return/招标|发包人要求|答疑|补疑|澄清/u.test(a)&&b.add("tender_requirement"),/图纸|设计说明|施工图|道路|桥梁|园林|交通|结构/u.test(a)&&b.add("drawing"),/清单|工程量|xls|xlsx/u.test(a)&&b.add("boq"),/质量|验收|规范|标准/u.test(a)&&b.add("quality_standard"),/安全|危大|风险|文明|环保/u.test(a)&&b.add("safety_requirement"),/施工|方案|组织|进度|工期|材料|机械|劳动力/u.test(a)&&b.add("construction_method"),[...b]}(a.relativePath),g=b.listChunks({relativePath:a.relativePath,limit:3}).map(a=>String(a.content||"").replace(/\s+/gu," ").trim()).filter(Boolean).slice(0,3);return{relativePath:a.relativePath,root:d,fileName:e.basename(a.relativePath),category:a.category,format:a.format,chunkCount:a.chunkCount,indexedAt:a.indexedAt,contentHash:a.contentHash,status:a.status,roles:f,usableForBody:(c=a.relativePath,!/投标函|保证金|开标|评标|交易系统|账户|协议书|示范文本|报价|税率|利润/u.test(c)),summarySignals:g}}),i=c.flatMap(k),m={selectedRoots:[...new Set(c.map(a=>a.root).filter(Boolean))],selectedFiles:c.map(a=>a.relativePath),totalAvailableFiles:c.length,ambiguous:!1,locked:!0,reason:"项目入库完成后预计算的项目级资料范围",rejectedRoots:[],scopeHash:l(c)},n=(0,h.hw)(a,m),o=(0,h.rj)({facts:i,materialSnapshot:n}),p={version:"project-intelligence-v1",projectRoot:a,projectId:(0,f.computeProjectId)(a),createdAt:Date.now(),sourceHash:l(c),files:c,facts:i,baseProjectGraph:o,blueprint:{projectNames:[...new Set(i.filter(a=>/项目名称/u.test(a.key)).map(a=>a.value))].slice(0,8),roots:[...new Set(c.map(a=>a.root).filter(Boolean))],usableFiles:c.filter(a=>a.usableForBody).length,excludedFiles:c.filter(a=>!a.usableForBody).length,signals:c.flatMap(a=>a.summarySignals.slice(0,1)).slice(0,12)}};return d.writeFileSync(j(a),JSON.stringify(p,null,2)),p}function n(a){let b=function(a){let b=j(a);if(d.existsSync(b))try{return JSON.parse(d.readFileSync(b,"utf8"))}catch{return}}(a.projectRoot);if(!b)return;let c=(0,h.ZR)(a.projectRoot,a.template,a.requirement||"");if(c.ambiguous||!c.locked||0===c.selectedFiles.length)return;let e=new Set(c.selectedFiles),f=new Map((0,g.Yy)(a.projectRoot).map(a=>[a.relativePath,a])),i=b.files.filter(a=>e.has(a.relativePath));if(0!==i.length&&!i.some(a=>{let b=f.get(a.relativePath);return!b||"error"===b.status||"disk"===b.status||Number(b.indexedAt||0)!==a.indexedAt||Number(b.chunkCount||0)!==a.chunkCount||(b.contentHash||"")!==(a.contentHash||"")}))return{cache:b,scope:c,files:i,facts:b.facts.filter(a=>e.has(a.sourceFile)),baseProjectGraph:function(a,b){let c=a=>!a?.length||a.some(a=>b.has(a));return{...a,works:a.works.filter(a=>c(a.sourceFiles)),methods:a.methods.filter(a=>c(a.sourceFiles)),resources:a.resources.filter(a=>c(a.sourceFiles)),schedule:a.schedule.filter(a=>c(a.sourceFiles)),standards:a.standards.filter(a=>c(a.sourceFiles)),risks:a.risks.filter(a=>c(a.sourceFiles)),requirements:a.requirements.filter(a=>c(a.sourceFiles)),siteConditions:a.siteConditions.filter(a=>c(a.sourceFiles)),addendumChanges:a.addendumChanges.filter(a=>b.has(a.sourceFile))}}(b.baseProjectGraph,e)}}function o(a){m(a).catch(a=>{console.warn("[project-intelligence] build failed",a instanceof Error?a.message:a)})}},29281:(a,b,c)=>{c.d(b,{I:()=>f});var d=c(96770);let e=null;function f(){return e||(e=new d.ConfigStore),e}},32434:(a,b,c)=>{c.d(b,{IA:()=>u,Qu:()=>s,SU:()=>t,ZR:()=>n,hw:()=>o,rj:()=>r});var d=c(76760),e=c(44533),f=c(40299),g=c(80439),h=c(22157);let i=/知识库|系统暂未|项目资料暂未|资料未明确|暂未明确|待确认|待资料复核|待系统|兜底|未检索到|资料不足|无法确认|建议补充|不适用|COL\d+|围绕[^,。;\n]{2,40}编制|可核验信息|以本项目招标文件明确内容为准/u;function j(a){return a.replace(/\\/gu,"/").replace(/^\/+|\/+$/gu,"")}function k(a){let b=j(a).split("/").filter(Boolean);return b.length>1?b[0]:d.basename(b[0]||"当前项目")}function l(a){return a.replace(/[\s_\-—()()【】、,,.。·]/gu,"").replaceAll("[","").replaceAll("]","").toLowerCase()}function m(a){return"disk"!==a.status&&"error"!==a.status&&Number(a.indexedAt||0)>0&&Number(a.chunkCount||0)>0}function n(a,b,c=""){let d=(0,e.Yy)(a).filter(m),f=(b.projectBindings||[]).filter(a=>a.materialRootPath).map(a=>({materialRootPath:j(a.materialRootPath)})).map(a=>a.materialRootPath).filter(Boolean),g=f.length?d.filter(a=>f.some(b=>j(a.relativePath)===b||j(a.relativePath).startsWith(`${b}/`))):d,i=function(a){let b=new Map;for(let c of a){let a=k(c.relativePath);b.set(a,[...b.get(a)||[],c])}return b}(g),o=c.trim(),p=[...i.keys()];if(o){let a=[...i.entries()].map(([a,b])=>({root:a,files:b,score:function(a,b){let c=l(a),d=l(b);if(c.length>=4&&d.includes(c.slice(0,Math.min(16,c.length))))return 100;let e=new Set(["项目","工程","施工","总承包","资料","招标","图纸","清单"]);return a.split(/(?:\s|_|-|—|(|)|\(|\)|【|】|\[|\]|、|,|,|\.)+/u).filter(a=>a.length>=2&&!e.has(a)).reduce((a,c)=>a+(b.includes(c)?Math.min(20,c.length):0),0)}(a,o)})).filter(a=>a.score>0).sort((a,b)=>b.score-a.score);if(1===a.length||a.length>1&&a[0].score>a[1].score){let b=[a[0].root],c=a[0].files.map(a=>a.relativePath);return{selectedRoots:b,selectedFiles:c,totalAvailableFiles:d.length,ambiguous:!1,locked:!0,reason:`用户需求唯一匹配资料组:${a[0].root}`,rejectedRoots:p.filter(a=>!b.includes(a)),scopeHash:(0,h.c6)({selectedRoots:b,selectedFiles:c})}}if(a.length>1){let b=a.filter(b=>b.score===a[0].score).map(a=>a.root);return{selectedRoots:[],selectedFiles:[],totalAvailableFiles:d.length,ambiguous:!0,locked:!1,reason:`用户需求同时匹配多个资料组:${b.join("、")}`,rejectedRoots:p,scopeHash:(0,h.c6)({ambiguous:!0,selectedRoots:b})}}}if(1===f.length){let a=g.map(a=>a.relativePath);return{selectedRoots:f,selectedFiles:a,totalAvailableFiles:d.length,ambiguous:!1,locked:!0,reason:`模板绑定唯一资料组:${f[0]}`,rejectedRoots:p.filter(a=>!f.includes(a)),scopeHash:(0,h.c6)({selectedRoots:f,selectedFiles:a})}}return{selectedRoots:[],selectedFiles:[],totalAvailableFiles:d.length,ambiguous:!0,locked:!1,reason:f.length>1?`模板绑定多个资料组但需求未唯一指定:${f.join("、")}`:"未绑定资料组且需求未唯一指定资料范围,禁止回退全量资料",rejectedRoots:p,scopeHash:(0,h.c6)({ambiguous:!0,boundRoots:f,requirement:c})}}function o(a,b){let c=new Map((0,e.Yy)(a).map(a=>[a.relativePath,a])),f=b.selectedFiles.map(a=>{let b=c.get(a),e=Number(b?.chunkCount||0);return{path:a,root:k(a),fileName:d.basename(a),chunkCount:e,indexedAt:b?.indexedAt,status:b?.status,hash:(0,h.c6)({filePath:a,chunkCount:e,indexedAt:b?.indexedAt,status:b?.status})}});return{files:f,totalFiles:f.length,totalChunks:f.reduce((a,b)=>a+b.chunkCount,0),roots:[...new Set(f.map(a=>a.root))],createdAt:Date.now(),snapshotHash:(0,h.c6)(f.map(a=>({path:a.path,hash:a.hash})))}}function p(a,b){return a.filter(a=>b.test(`${a.fieldId||""} ${a.fieldName||""} ${a.key} ${(0,h.lG)(a.value)}`))}function q(a){return(0,h.lG)(a.value).replace(/\s+/gu," ").trim()}function r(a){let b=a.facts.filter(a=>q(a)),c=p(b,/项目名称|工程名称|招标项目名称|建设地点|建设规模|招标范围|施工范围|建设内容/u),d=p(b,/工期|日历天|进度|开工|竣工/u),e=p(b,/质量|验收|合格|标准|规范/u),f=p(b,/清单|工程量|材料|设备|机械|劳动力|资源/u),g=p(b,/安全|文明|环保|危大|风险/u),h=c.slice(0,8).map(a=>`${a.key}:${q(a)}`).join(";");return{works:h?[{name:a.materialSnapshot.roots[0]||"当前项目",scope:h,sourceFiles:[...new Set(c.map(a=>a.sourceFile).filter(Boolean))],relatedItems:f.slice(0,8).map(a=>q(a))}]:[],methods:[],resources:f.slice(0,30).map(a=>({name:a.key,type:"material",spec:q(a),quantity:"",unit:"",sourceFiles:a.sourceFile?[a.sourceFile]:[]})),schedule:d.slice(0,10).map(a=>({milestone:a.key,duration:q(a),startDate:"",endDate:"",sourceFiles:a.sourceFile?[a.sourceFile]:[]})),standards:e.slice(0,16).map(a=>({code:a.key,description:q(a),sourceFiles:a.sourceFile?[a.sourceFile]:[]})),risks:g.slice(0,16).map(a=>({risk:q(a),level:"medium",mitigation:"",sourceFiles:a.sourceFile?[a.sourceFile]:[]})),requirements:p(b,/招标|投标|合同|承包|响应|要求|补疑|澄清|答疑/u).slice(0,20).map(a=>({category:a.key,detail:q(a),sourceFiles:a.sourceFile?[a.sourceFile]:[]})),siteConditions:p(b,/现场|周边|交通|既有|保护|场地/u).slice(0,12).map(a=>({condition:q(a),impact:"",sourceFiles:a.sourceFile?[a.sourceFile]:[]})),addendumChanges:[],gaps:[],generatedAt:Date.now()}}function s(a){let b=n(a.projectRoot,a.template,a.requirement||"");if(b.ambiguous||!b.locked||0===b.selectedFiles.length)throw Error(`资料范围未锁定:${b.reason}`);let c=o(a.projectRoot,b),d=r({facts:a.facts,materialSnapshot:c,requirement:a.requirement}),e=Date.now();return{runId:`run-${e}-${(0,h.c6)({templateId:a.template.id,requirement:a.requirement||"",scopeHash:b.scopeHash}).slice(0,8)}`,templateId:a.template.id,requirement:a.requirement||"",projectRoot:a.projectRoot,materialScope:b,materialSnapshot:c,nodes:[{id:"material-scope",type:"material_scope",status:"completed",startedAt:e,completedAt:e,outputSummary:b.reason,metrics:{selectedFiles:b.selectedFiles.length,rejectedRoots:b.rejectedRoots.length}},{id:"material-snapshot",type:"material_snapshot",status:"completed",startedAt:e,completedAt:e,outputSummary:`${c.totalFiles} 份资料,${c.totalChunks} 个切片`,metrics:{totalFiles:c.totalFiles,totalChunks:c.totalChunks}},{id:"base-project-graph",type:"base_project_graph",status:"completed",startedAt:e,completedAt:e,outputSummary:`${d.works.length}工程 ${d.resources.length}资源 ${d.schedule.length}工期 ${d.standards.length}标准`,metrics:{facts:a.facts.length}}],facts:a.facts,baseProjectGraph:d,issues:[],createdAt:e}}function t(a){return[(0,g.X5)({type:"validation",roleId:"agent-material-scope",status:"success",message:`资料范围已锁定:${a.materialScope.selectedRoots.join("、")}`,details:[`${a.materialScope.reason}`,`入选资料:${a.materialScope.selectedFiles.length}/${a.materialScope.totalAvailableFiles}`,`已排除资料组:${a.materialScope.rejectedRoots.slice(0,8).join("、")||"无"}`]},{subtitle:"Agent 资料范围锁定"}),(0,g.X5)({type:"knowledge_retrieval",roleId:"agent-material-snapshot",status:"success",message:`资料快照已固定:${a.materialSnapshot.totalFiles} 份资料、${a.materialSnapshot.totalChunks} 个切片`,details:a.materialSnapshot.files.slice(0,10).map(a=>`${a.root}|${a.fileName}|${a.chunkCount}切片`)},{subtitle:"Agent 资料快照"}),(0,g.X5)({type:"file_understanding",roleId:"agent-base-project-graph",status:"success",message:`基础项目图谱已生成:${a.baseProjectGraph.works.length}工程 ${a.baseProjectGraph.resources.length}资源 ${a.baseProjectGraph.schedule.length}工期 ${a.baseProjectGraph.standards.length}标准`,details:[`基础图谱来自确定性事实层,不依赖 LLM`,`事实数:${a.facts.length}`]},{subtitle:"Agent 基础图谱"})]}function u(a){let b=a.split(/\r?\n/u),c=[];return b.forEach((a,b)=>{i.test(a)&&c.push({level:"error",severity:"blocker",category:"style",owner:"system",message:`正式正文不得出现后台或兜底话术:第 ${b+1} 行`,suggestion:"必须改为有事实依据的正式表达;非必填缺失字段应删除,必填事实缺失应阻断生成。"})}),[...c,...(0,f.bx)(a)].slice(0,20)}},40299:(a,b,c)=>{c.d(b,{CK:()=>R,Ed:()=>S,FD:()=>f,K7:()=>v,KX:()=>z,Re:()=>p,UG:()=>T,V3:()=>W,bR:()=>D,bx:()=>w,dh:()=>E,kT:()=>x,r4:()=>C,rd:()=>y,rs:()=>V,wi:()=>m,z1:()=>t});var d=c(58965),e=c(70208);function f(a,b){return b?a.replace(/^!\[[^\]]*(?:图纸|drawing|cad|地图|平面|剖面|立面)[^\]]*\]\([^)]*\)\s*$/gimu,"").replace(/\n{3,}/gu,"\n\n"):a}let g=/^.*(?:知识库证据|知识库已确认事实|资料类型|提示词角色|后台自动规范|规范包|事实字段|资料未提供|未检索到|待确认事项|证据来源|来源清单|校验结果|修复任务包|修复类型|修复对象|输出要求|当前项目绑定资料|已召回证据|证据边界|可审查草稿|Reviewer|Repairer).*$(?:\n)?|^.*本节围绕.+确保各项措施与本工程实施条件相匹配。?\s*$(?:\n)?|^.*建立施工准备、过程控制、检查验收和资料归档要求.*$(?:\n)?|^.*形成责任明确、过程可控、资料完整的管理闭环。?\s*$(?:\n)?|^.*确保现场管理要求与施工进度、资源组织和验收节点同步推进。?\s*$(?:\n)?|^\s*(?:管理闭环|责任明确、过程可控、资料完整|与本工程实施条件相匹配)[。;;]?\s*$(?:\n)?/gmu,h=/^\s*(?:#{1,6}\s*)?(?:PDF\s*第\s*\d+\s*页|rule\b|文件[::]|片段[::]|来源[::]).*$/gimu,i=/^\s*(?:[│┃┆┊┌┐└┘├┤┬┴┼─━╭╮╰╯]|[↓↑→←⇒⇨➡])+\s*$/gmu,j=/^#{2,6}\s+(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用)|^#{2,6}\s+(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:如|若|如果)(?:涉及|不涉及|适用|不适用)|^#{2,6}\s+.*(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成)|^#{2,6}\s+.*(?:按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|说明要求|注意事项)\s*$/gmu,k=/^(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用).*|(?:如|若|如果)(?:涉及|不涉及|适用|不适用).*|.*(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成).*|.*(?:按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|说明要求|注意事项))\s*$/u;function l(a){let b=a.replace(/^#{1,6}\s+/u,"").replace(/^\s*\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").trim(),c=(0,e.GQ)(b);return k.test(b)||k.test(c)}function m(a){return a.replace(/PDF\s*第\s*\d+\s*页/giu,"相关资料").replace(/第\s*\d+\s*页\s*(?:\/|共)\s*\d+\s*页/gu,"").replace(/第\s*\d+\s*(?:[-—至到~~]\s*\d+)?\s*页/gu,"相关资料").replace(/(装饰工程|土建工程|加固工程|给排水工程|电气工程|智能化工程|消防工程|弱电智能化工程|室外道排工程|建筑结构加固工程)\s*(?:(?:施工)?图纸|资料|文件)?\s*[((]?\s*(?:(?:共|多达|约|合计)\s*)?\d+\s*页\s*[))]?/gu,"$1施工图纸").replace(/\d+\s*页\s*(装饰|土建|加固|给排水|电气|智能化|消防|弱电智能化|室外道排|建筑结构加固)\s*(?:专业)?\s*(?:(?:施工)?图纸)?/gu,"$1专业图纸").replace(/(装饰|土建|加固|给排水|电气|智能化|消防|弱电智能化|室外道排|建筑结构加固)\s*(?:专业)?\s*(?:[((]\s*)?\d+\s*页\s*(?:(?:施工)?图纸)?\s*[))]?/gu,"$1专业图纸").replace(/([\u4e00-\u9fa5A-Za-z0-9、及与和]{2,24})\s*(?:共|多达|约|合计)\s*\d+\s*页/gu,"$1相关专业图纸").replace(/([\u4e00-\u9fa5A-Za-z0-9()()、·-]{2,24}工程)\s*(?:图纸|资料|文件)?\s*[((]?\s*(?:(?:共|多达|约|合计)\s*)?\d+\s*页\s*[))]?/gu,"$1施工图纸").replace(/([\u4e00-\u9fa5A-Za-z0-9()()、·-]{2,24})(?<!施工)\s*(?:施工)?图纸\s*[((]?\s*(?:(?:共|多达|约|合计)\s*)?\d+\s*页\s*[))]?/gu,"$1施工图纸").replace(/(给排水|电气|智能化|消防|暖通|人防)\s*[((]\s*\d+\s*页\s*[))]/gu,"$1专业图纸").replace(/(?:依据|按照|结合)?\s*图纸\s*[((]\s*\d+\s*页\s*[))]/gu,"依据相关专业图纸").replace(/(?:依据|按照|结合)?\s*清单\s*[((]?\s*\d+\s*页\s*[))]?/gu,"依据工程量清单").replace(/资料\s*[((]?\s*\d+\s*页\s*[))]?/gu,"项目资料").replace(/[((]?[\u4e00-\u9fa5A-Za-z0-9、及与和]*(?:图纸|清单|资料|文件|工程)?[\u4e00-\u9fa5A-Za-z0-9、及与和]*(?:(?:共|多达|约|合计)\s*)?\d+\s*页[\u4e00-\u9fa5A-Za-z0-9、及与和]*(?:图纸|清单|资料|文件)?[))]?/gu,a=>/图纸|工程|装饰|土建|加固|给排水|电气|智能化|消防/u.test(a)?"相关专业图纸":/清单/u.test(a)?"工程量清单":"相关资料").replace(/(?:位于|详见|见|参见|依据|按照|结合)?\s*相关资料(?:\s*相关资料)+/gu,"相关资料")}let n=String.raw`(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)`;function o(a){return/^\s*\|/u.test(a)||/^\s*\|?\s*:?-{3,}:?/u.test(a)?a:a.replace(/([。;;])\s*(?=(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)\S)/gu,"$1\n").replace(/([^\n])\s+(?=(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)\*\*)/gu,"$1\n")}function p(a){return a.split(/\r?\n/u).map(o).join("\n").replace(/\n{3,}/gu,"\n\n")}function q(a){return/^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a)}function r(a){let b=a.trim();return/^\|.*\|$/u.test(b)&&b.split("|").length>=3}function s(a){return`| ${Array.from({length:Math.max(2,a)},()=>"---").join(" | ")} |`}function t(a){let b=a.split(/\r?\n/u),c=[],d=0;for(let a=0;a<b.length;a+=1){let e=b[a];if(!r(e)||q(e)){q(e)||(d=0),c.push(e);continue}let f=b[a+1]||"",g=d||e.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).length;if(c.push(function(a,b){let c=a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>a.trim());for(;c.length<b;)c.push("");return`| ${c.slice(0,b).join(" | ")} |`}(e,g)),q(f)){c.push(s(g)),d=g,a+=1;continue}!d&&r(f)&&function(a){let b=a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>a.replace(/\*\*/gu,"").trim());return!(b.length<2)&&b.filter(a=>/^(?:序号|信息项|内容|控制项目|控制内容|执行要求|责任主体|检查(?:与验收)?|验收标准|备注|名称|规格(?:型号)?|单位|数量|阶段|措施|风险|应急物资名称|资源类别|投入计划|管理要求)$/u.test(a)).length>=Math.min(2,b.length)}(e)&&(c.push(s(g)),d=g)}return c.join("\n").replace(/\n{3,}/gu,"\n\n")}RegExp(String.raw`\S.+(?:\s|[。;;])${n}\S.+(?:\s|[。;;])${n}\S`,"u");let u=/(?:项目部|本项目|本工程)?(?:根据|依据|结合|按照|以)?(?:本项目|项目|[^。;;\n]{0,30}?)?(?:招标文件|补疑澄清文件|补遗澄清文件|补疑补遗|答疑(?:回复)?文件|答疑修正口径|补充答疑修正口径|澄清文件|工程量清单|设计图纸|施工图纸|图纸资料|设计修改通知单)(?:[、,,及和与\s]*(?:招标文件|补疑澄清文件|补遗澄清文件|补疑补遗|答疑(?:回复)?文件|答疑修正口径|补充答疑修正口径|澄清文件|工程量清单|设计图纸|施工图纸|图纸资料|设计修改通知单|现行规范|规范)){1,}(?:[^。;;\n]{0,80})?[,,]/u;function v(a){return a.split(/\r?\n/u).map(a=>/^\s*\|/u.test(a.trim())?a:a.replace(u,"").replace(/(?:施工图设计说明|工程量清单项目特征|补充答疑修正口径|答疑修正口径)(?:[、,,及和与\s]*(?:施工图设计说明|工程量清单项目特征|补充答疑修正口径|答疑修正口径)){1,}/gu,"项目技术文件").replace(/(?:根据|依据|以)(?:[^。;;\n]{0,30})?(?:招标文件|补疑澄清文件|补遗澄清文件|补疑补遗|答疑(?:回复)?文件|答疑修正口径|补充答疑修正口径|澄清文件|工程量清单|设计图纸|施工图纸)(?:[^。;;\n]{0,40})(?:编制|确定|要求|为编制基础)[。;;]?/gu,"").replace(/\s{2,}/gu," ").trimEnd()).filter(a=>!/^(?:本节|本小节|本章)?(?:内容|措施)?(?:根据|依据)(?:招标文件|补疑澄清文件|补遗澄清文件|答疑(?:回复)?文件|澄清文件|工程量清单|设计图纸|施工图纸)[^。;;\n]*[。;;]?$/u.test(a.trim())).join("\n").replace(/\n{3,}/gu,"\n\n")}function w(a){let b=[];return a.split(/\r?\n/u).forEach((a,c)=>{u.test(a)&&b.push({level:"error",severity:"blocker",category:"style",owner:"system",message:`正式正文不得出现资料来源罗列话术:第 ${c+1} 行`,suggestion:"删除“根据/依据招标文件、清单、图纸”等来源罗列,直接保留项目事实、施工内容和控制措施。"}),/^\s*\*\*[^*]{2,40}表\*\*\s*$/u.test(a)&&b.push({level:"error",severity:"blocker",category:"format",owner:"system",message:`正式正文不得用粗体段落充当表名:第 ${c+1} 行`,suggestion:"表名必须转换为 #### 四级标题,避免导出后混入正文段落。"})}),b.slice(0,20)}function x(a){return(function(a){let b=a.split(/\r?\n/u),c=[];for(let a=0;a<b.length;a+=1){if(!r(b[a])||!q(b[a+1]||"")){c.push(b[a]);continue}let d=[];for(;a<b.length&&r(b[a]);)d.push(b[a]),a+=1;a-=1;let e=d.map(a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>a.trim())),f=Array.from({length:Math.max(...e.map(a=>a.length))},(a,b)=>e.some((a,c)=>1!==c&&!!a[b]?.trim())),g=e.map((a,b)=>{let c=f.map((b,c)=>b?a[c]||"":null).filter(a=>null!==a);return 1===b?s(c.length):`| ${c.join(" | ")} |`});c.push(...g)}return c.join("\n")})(t(p(m(v(function(a){let b=a.trim(),c=/^```(?:markdown|md)?\s*\n([\s\S]*?)\n```\s*$/iu.exec(b);return c?c[1].trim():a}(a)).replace(/\b(m|㎡)\s*2\b/giu,"平方米").replace(/\bm\s*[²2]\b/giu,"平方米").replace(/\b(m|㎥)\s*3\b/giu,"立方米").replace(/\bm\s*[³3]\b/giu,"立方米").replace(/\bmm2\b/giu,"平方毫米").replace(/\bcm2\b/giu,"平方厘米").replace(/\bkm2\b/giu,"平方千米").replace(/\s*×\s*/gu,"\xd7").replace(/\s*≤\s*/gu,"≤").replace(/\s*≥\s*/gu,"≥").replace(/\s*±\s*/gu,"\xb1"))))).split(/\r?\n/u).map(a=>/^\s*\|/u.test(a)?a.replace(/\s*不适用\s*(?=\|)/gu," "):a).join("\n").replace(/承包人案/gu,"方案").replace(/承包人法/gu,"方法").replace(g,"").replace(h,"").replace(i,"").replace(j,"").replace(d.tK,"").replace(/^#\s+/gmu,"").replace(d.VX,"").split(/\r?\n/u).filter((a,b,c)=>{let d=b>0?(0,e.GQ)((c[b-1]||"").trim().replace(/^#{1,6}\s+/u,"")):"",f=(0,e.GQ)(a.trim().replace(/^#{1,6}\s+/u,""));if(d&&l(d)&&f.length>0&&f.length<=12&&!/^#{1,6}\s/u.test(a.trim()))return!1;let g=a.trim();if(!g)return!0;if(/该小节围绕.+进行补充说明/u.test(g)||/仅作为内部事实提取依据|正式正文不得引用文件名|后台事实|内部事实/u.test(g))return!1;if(/^\s*\|/u.test(g)||/^\s*\|?\s*:?-{3,}:?/u.test(g))return!0;let h=(0,e.GQ)(g.replace(/^#{1,6}\s+/u,""));return!(/^(?:雨季|冬季|高温|台风|大风等特殊气候|雨季、冬季、高温、台风、大风等特殊气候)$/u.test(h)||h.length<=1||l(h))&&!(/[,、;:和与在为对将]$/u.test(h)||/(通过|包括|如下|主要包括)$/u.test(h))}).join("\n").replace(/\n{3,}/gu,"\n\n").trim()}let y="以下规则仅用于保障导出格式正确和事实安全,不得覆盖用户在提示词中已明确的要求。\n不得把”知识库、检索、资料类型、提示词角色、规范包、事实字段、缺失项、校验结果、资料未提供、未检索到”等后台流程话术写入正文。\n严禁使用“根据/依据招标文件、补疑澄清文件、工程量清单及设计图纸”等资料来源罗列开头;正文必须直接写项目事实、施工内容、控制措施、验收节点。\n【导出格式】章标题用 ## ,节标题用 ### 加数字编号(如 1.1),小节标题用 #### 加数字编号(如 1.1.1)。禁止用数字编号或粗体代替 ###/#### 标题。\nMarkdown 表格格式硬约束:凡是输出 Markdown 表格,必须使用标准 GFM 表格格式。\n表格必须包含表头行、分隔线和数据行;表头下一行必须是分隔线,例如 |---|---|。\n禁止只输出连续的“| 字段 | 值 |”裸表格行;两列键值信息表默认使用表头 | 信息项 | 内容 |。\n表头、分隔线和数据行必须连续,中间不得插入正文、说明、空行或补充段落。\n正文表格不得展示后台溯源列或系统过程列,如“资料来源/说明”“资料来源/证明”“知识库来源”等。\n项目名称、项目编号、招标人/业主/建设单位、建设地点、建设规模、计划工期、质量标准、合同估算价等项目基础信息,只能在项目基本信息表中集中输出一次;后续章节如需引用,应写入正文或专业表格的业务字段,不得重复生成项目基础信息键值表。\n【段落格式】段落之间必须空行(双换行)分隔,不得用单换行连续写大段文字。列表项逐行独占。步骤描述之间加空行。\n正文事实必须来自绑定材料;信息不足时保持审慎,不得编造精确数量。",z="只生成当前小节正文,不生成其他二级小节,不重复章节一级标题。\n优先使用当前模板、用户要求、绑定提示词和绑定材料中的事实;缺少依据时不得编造具体数值、名称、时间、规格或责任。\n小节应有实质正文;除非用户或模板明确要求纯表格,否则表格只能作为辅助表达,不能整节只有表格。\n不得用通用兜底段落、空泛管理话术或后台缺料说明冒充正文;信息不足时只写已有事实、适用边界和待复核口径。";function A(a){return(0,e.GQ)(a.replace(/^#+\s*/u,"")).replace(/^(?:第)?[一二三四五六七八九十百千万\d]+章\s*/u,"").trim().replace(/\s+/gu,"")}function B(a,b){let c=A(a),d=A(b);return!!(c&&d&&c===d)}function C(a){return[...new Set([...a.matchAll(/^###\s+(.+)$/gmu)].map(a=>(0,e.GQ)(a[1]||"")).filter(a=>a.length>=2&&a.length<=80).filter(a=>!l(a)).filter(a=>!/^\d+(?:\.\d+){2,}\s+/u.test(a)))]}function D(a){let b=a.split(/\r?\n/u),c="",d=0;return b.map(a=>{let b=/^\*\*([^*]{2,40}表)\*\*\s*$/u.exec(a.trim());if(b&&c)return d+=1,`#### ${c}.${d} ${(0,e.GQ)(b[1]||"")}`;let f=/^###\s+(\d+\.\d+)\s+.+$/u.exec(a.trim());if(f)return c=f[1],d=0,a;if(/^##\s+/u.test(a.trim()))return c="",d=0,a;let g=/^(#{4,5})\s+(.+)$/u.exec(a.trim());if(g){if(!c)return"#####"===g[1]?a.replace(/^\s*#####/u,"####"):a;let b=(g[2]||"").trim(),f=(0,e.GQ)(b.replace(/^\d+\.\d+\.\d+\s+/u,""));return f?(d+=1,`#### ${c}.${d} ${f}`):a}return a}).join("\n").replace(/\n{3,}/gu,"\n\n").trim()}function E(a){let b=[],c="";for(let d of a.split(/\r?\n/u)){let a=d.trim(),f=/^###\s+(\d+\.\d+)\s+.+$/u.exec(a);if(f){c=f[1];continue}if(/^##\s+/u.test(a)&&(c=""),!c)continue;let g=/^####\s+(.+)$/u.exec(a);if(g){let a=(g[1]||"").trim();RegExp(`^${O(c)}\\.\\d+\\s+\\S`,"u").test(a)||b.push({level:"warning",message:`三级小节缺少 ${c}.x 编号:${(0,e.GQ)(a)}`,suggestion:"三级小节必须使用“#### 章号.节号.序号 标题”,且不纳入目录。"})}}return b}function F(a){let b=a.replace(/\*+/gu,"").trim();if(l(b))return"";let c=(0,e.GQ)(b).replace(/^[-—–]\s*/u,"").trim();return l(c)||/^(?:雨季|冬季|高温|台风|大风等特殊气候)$/u.test(c)?"":c}function G(a=[]){return[...new Set(a.map(F).filter(a=>a.length>=2))]}function H(a){return["## 目录","",...a.flatMap((a,b)=>{let c=G(a.sections||[]);return[`- ${(0,e.tb)(b,a.title)}`,...c.map((a,c)=>` - ${function(a,b,c){let d=(0,e.GQ)(c);return!function(a){let b=/^\s*(\d+)\.(\d+)[..、]?\s+(.+)$/u.exec(a);return!!b&&(0,e.GQ)(b[3]||"").trim()===(0,e.GQ)(a).trim()}(c)?`${a+1}.${b+1} ${d}`:d}(b,c,a)}`)]})].join("\n")}function I(a){return a.replace(/<div class="document-cover">[\s\S]*?<\/div>\s*(?:<div class="page-break"><\/div>\s*)?/giu,"").replace(/^#\s+.+\n{1,2}/u,"")}function J(a){return a.replace(/^##\s+目录\s*$[\s\S]*?(?=\n<div class="page-break"><\/div>|\n##\s+第[一二三四五六七八九十百千万\d]+章|\n##\s+)/gmu,"").replace(/^<div class="page-break"><\/div>\s*(?=##\s+第[一二三四五六七八九十百千万\d]+章)/gmu,"")}function K(a){let b=!1;return a.replace(/^##\s+目录\s*$[\s\S]*?(?=\n<div class="page-break"><\/div>|\n##\s+)/gmu,a=>b?"":(b=!0,a)).replace(/\n{3,}/gu,"\n\n").trim()}function L(a,b){let c=K(a);b.forEach((a,b)=>{let d=(0,e.GQ)(a.title),f=RegExp(`^##\\s+(?:第[一二三四五六七八九十百千万\\d]+章\\s*)?${O(d)}\\s*$`,"mu");c=f.test(c)?c.replace(f,`## ${(0,e.tb)(b,a.title)}`):c});let d=c.split(/\r?\n/u),f=-1,g=0,h=0,i="",j=new Set,k=a=>{let c=b[f]?.sections||[],d=Q(a);return c.findIndex(a=>Q(a)===d)},m=(a,c)=>{let d=F(a);if(!d||l(a)||l(d))return"";let m=k(d),n=b[f]?.sections||[],o=m>=0?m+1:g+1,p=m>=0?Q(n[m]):Q(d);return j.has(p)?(g=o,i=c||`${f+1}.${g}`,h+=1,`#### ${f+1}.${g}.${h} ${d}`):(g=o,h=0,i=c||`${f+1}.${g}`,j.add(p),`### ${f+1}.${g} ${m>=0?(0,e.GQ)(n[m]):d}`)},n=!1;return d.map(a=>{let c=a.trim();if(/^##\s+目录\s*$/u.test(c))return n=!0,a;if(n&&/^<div class="page-break"><\/div>$/u.test(c))return n=!1,a;if(n)return a;if(/^##\s+第[一二三四五六七八九十百千万\d]+章\s+/u.test(c))return f+=1,g=0,h=0,i="",j=new Set,a;let d=/^##\s+第[一二三四五六七八九十百千万\d]+节\s+(.+)$/u.exec(c);if(f>=0&&d)return m(d[1]||"");let l=/^##\s+\d+[..、]\s+(.+)$/u.exec(c);if(f>=0&&l)return m(l[1]||"");let o=/^##\s+(\d+)\.(\d+)\s+(.+)$/u.exec(c);if(f>=0&&o)return m(o[3]||"",`${o[1]}.${o[2]}`);let p=/^##\s+(.+)$/u.exec(c);if(f>=0&&p){let a=(0,e.GQ)(p[1]||"");return/^本章目录$/u.test(a)?"":m(a)}let q=/^###\s+(?:(\d+)\.(\d+)\s+)?(.+)$/u.exec(c);if(f>=0&&q)return m(q[3]||"",q[1]&&q[2]?`${q[1]}.${q[2]}`:void 0);let r=/^####\s+(\d+)\.(\d+)(?!\.)\s+(.+)$/u.exec(c);if(f>=0&&r)return m(r[3]||"",`${r[1]}.${r[2]}`);let s=/^####\s+(?:(\d+)\.(\d+)\.(\d+)\s+)?(.+)$/u.exec(c);if(f>=0&&s){let a=s[1]&&s[2]?`${s[1]}.${s[2]}`:i,c=(0,e.GQ)(s[4]||""),d=Q(c),l=k(c)>=0&&!j.has(d);return!g||a&&a!==i&&(0===(b[f]?.sections||[]).length||l)?m(c,a):(h+=1)<=4?`#### ${f+1}.${g}.${h} ${c}`:`**${c}**`}return a}).filter(a=>""!==a).join("\n")}function M(a,b){let c=a.replace(/承包人案/gu,"方案").replace(/承包人法/gu,"方法").replace(/(?:本|我)施工方/gu,"我公司").replace(/(?:本|我)投标人/gu,"我公司").replace(/高度重视/gu,"严格落实").replace(/重中之重/gu,"关键控制事项");for(let a of b?.forbiddenTerms||[])a&&/^(?:报价明细表|最高投标限价|招标控制价)$/u.test(a)&&(c=c.split(/\r?\n/u).filter(b=>!RegExp(O(a),"u").test(b)).join("\n"));return c}function N(a,b){if(!b)return M(a);let c=function(a,b){let c=a;for(let a of b?.requiredTables||[])c=function(a,b){if(/项目基本信息/u.test(b)&&(/项目基本信息/u.test(a)||/\|\s*信息项\s*\|\s*内容\s*\|/u.test(a)||/\|\s*项目名称\s*\|[^\n]*(?:徽光阁|项目施工|工程)/u.test(a))||RegExp(O(b),"u").test(a))return a;let c=/项目基本信息/u.test(b)?"":`**${b}**
|
|
16
|
+
|
|
17
|
+
| 控制项目 | 控制内容 | 执行要求 | 复核要求 |
|
|
18
|
+
|---|---|---|---|
|
|
19
|
+
| ${b.replace(/表$/u,"")} | 依据招标文件、施工图设计文件、工程量清单和施工组织安排填写 | 实施前完成专业复核、审批确认和交底闭环 | 不采用无依据的工程实体参数 |`;if(!c)return a;let d=/项目基本信息|概况/u.test(b)?/工程概况|项目概况/u:/应急/u.test(b)?/主要施工方法|应急|安全/u:/材料|物资/u.test(b)?/物资|材料/u:/机械|设备/u.test(b)&&!/检测|试验/u.test(b)?/机械|设备/u:/检测|试验/u.test(b)?/质量|检测|试验/u:/劳动力/u.test(b)?/劳动力/u:/进度|工期/u.test(b)?/工期|进度/u:void 0,e=[...a.matchAll(/^##\s+(.+)$/gmu)],f=e.find(a=>d?.test(a[1]||""))||e[0];if(!f?.index&&f?.index!==0)return`${a.trim()}
|
|
20
|
+
|
|
21
|
+
${c}`;let g=e.find(a=>(a.index||0)>(f.index||0)),h=g?.index??a.length;return`${a.slice(0,h).trimEnd()}
|
|
22
|
+
|
|
23
|
+
${c}
|
|
24
|
+
|
|
25
|
+
${a.slice(h).trimStart()}`}(c,a);return c}(a,b);for(let a of(b.forbidCover&&(c=I(c)),b.forbidToc&&(c=J(c)),b.preferredTerms||[]))if(a.from&&a.from!==a.to&&!(a.from.length<2)){if("施工方"===a.from){c=c.replace(/施工方(?!法|案|式|针|向|面)/gu,a.to);continue}c=c.replace(RegExp(O(a.from),"gu"),a.to)}return(c=M(c,b)).replace(/\n{3,}/gu,"\n\n").trim()}function O(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function P(a){return/\|[^\n]+\|\s*\n\s*\|\s*:?-{3,}:?\s*\|/u.test(a)}function Q(a){return(0,e.GQ)(a.replace(/^\s*\d+(?:\.\d+)*(?:[..、]|\s)+/u,"")).replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").replace(/[()]/gu,a=>"("===a?"(":")").replace(/[\s::.。;;,,、]+$/gu,"").replace(/的(?=保障体系|管理体系|控制体系|措施|方案|计划|要求)/gu,"").replace(/[\s()()::.。;;,,、-]/gu,"").trim()}function R(a){return a.chapters.map(a=>[`- ${a.title}`,a.sections?.length?` 规划小节:${a.sections.join("、")}`:"",a.tableSections?.length?` 表格小节:${a.tableSections.join("、")}`:"",a.tableRequirements?.length?` 表格内容要求:${a.tableRequirements.join(";")}`:"",a.tablePlans?.length?` 结构化表格规划:${a.tablePlans.map(a=>`${a.title}(${a.fields.map(a=>a.name).join("/")})`).join(";")}`:""].filter(Boolean).join("\n")).join("\n")}function S(a,b){if(!b)return[];let c=[],d=[...a.matchAll(j)].map(a=>(a[0]||"").replace(/^#{2,6}\s+/u,"").trim()).filter(Boolean);d.length>0&&c.push({level:"error",message:`正文存在疑似提示词指令标题:${d.slice(0,5).join("、")}`,suggestion:"请删除或改写为正式施工组织设计小节标题。"});let f=/document-cover|^#\s+/mu.test(a),g=/^##\s+目录\s*$/mu.test(a);"required"!==b.coverPolicy||f||c.push({level:"error",message:"正文缺少提示词要求的封面",suggestion:"用户明确要求封面时,应保留封面内容。"}),"required"!==b.tocPolicy||g||c.push({level:"error",message:"正文缺少提示词要求的目录",suggestion:"用户明确要求目录时,应基于最终合法正文标题生成目录。"}),b.forbidCover&&f&&c.push({level:"error",message:"正文残留封面内容",suggestion:"总控提示词禁止封面时,正式正文必须直接进入第一章。"}),b.forbidToc&&g&&c.push({level:"error",message:"正文残留目录内容",suggestion:"总控提示词禁止目录时,正式正文不得生成目录或导航页。"});let h=(b.requiredTables||[]).filter(b=>!RegExp(O(b),"u").test(a)||!function(a,b){let c=a.search(RegExp(O(b),"u"));return!(c<0)&&P(a.slice(c,Math.min(a.length,c+1600)))}(a,b));h.length>0&&c.push({level:"error",message:`正文缺少总控提示词要求的正式表格:${h.join("、")}`,suggestion:"请在对应章节补齐表名、表头、分隔线和数据行,不得只写表名或空表。"});let i=(b.requiredKeywords||[]).filter(b=>b&&!RegExp(O(b),"u").test(a));i.length>0&&c.push({level:"warning",message:`正文缺少提示词要求覆盖的关键词:${i.join("、")}`,suggestion:"请在相关章节自然补齐这些要点,避免堆砌关键词。"});let k=(b.forbiddenPatterns||[]).filter(b=>b&&RegExp(O(b),"u").test(a));k.length>0&&c.push({level:"warning",message:`正文出现提示词禁止内容:${k.join("、")}`,suggestion:"请删除或替换为正式交付表述。"});let l=(b.forbiddenTerms||[]).filter(b=>b&&!/^(?:工程造价|造价|报价|投标报价|综合单价|单价|合价|金额|税率|增值税|利润|预留金|暂列金额|兜底)$/u.test(b)&&RegExp(O(b),"u").test(a));l.length>0&&c.push({level:"warning",message:`正文残留总控提示词禁止词:${l.join("、")}`,suggestion:"请改为正式交付语言,删除后台话术、第三人称和口号式表达。"});let m=b.exactHeadings||[];if(m.length>0){let d=[...a.matchAll(/^##\s+(.+)$/gmu)].map(a=>(0,e.GQ)(a[1]||"")).filter(a=>"目录"!==a||"required"!==b.tocPolicy),f=m.map(e.GQ),g=m.filter(a=>!d.includes((0,e.GQ)(a))),h=b.forbidExtraHeadings?d.filter(a=>!f.includes((0,e.GQ)(a))):[];g.length>0&&c.push({level:"error",message:`正文缺少提示词指定一级章节:${g.join("、")}`,suggestion:"请严格按用户提示词 OUTLINE 输出一级章节。"}),h.length>0&&c.push({level:"warning",message:`正文出现提示词未允许的一级章节:${h.join("、")}`,suggestion:"请检查是否为正文内部层级误升;如不影响指定 OUTLINE 完整性,可在后续排版中并入所属章节。"})}let n=(b.forbiddenSubjects||[]).filter(b=>b&&RegExp(O(b),"u").test(a));n.length>0&&c.push({level:"warning",message:`正文残留禁用主体表达:${n.join("、")}`,suggestion:"请统一改为用户提示词指定的表达主体。"});let o=a.replace(/\s/gu,"").length;return b.minChars&&o<b.minChars&&c.push({level:"warning",message:`正文长度低于提示词要求:当前 ${o} 字,要求不少于 ${b.minChars} 字`,suggestion:"请按章节深度扩写,但不得编造资料外事实。"}),c.map(a=>"warning"===a.level&&/提示词|禁止|禁用|低于提示词要求|必含关键词|必需表格|主体表达/u.test(a.message)?{...a,level:"error",severity:a.severity||"blocker"}:a)}function T(a,b){let c=[];for(let d of b.chapters){let b=function(a,b){let c=(0,e.YZ)(b),d=[...a.matchAll(/^##\s+(.+)$/gmu)].map(a=>({index:a.index||0,raw:a[0],title:(0,e.YZ)(a[1]||"")})),f=d.find(a=>a.title===c);if(!f)return;let g=d.find(a=>a.index>f.index&&a.title!==c),h=f.index+f.raw.length,i=g?.index??a.length;return{start:f.index,end:i,heading:f.raw,body:a.slice(h,i)}}(a,d.title);if(!b){c.push({level:"error",message:`${d.title} 正文缺少章节标题`,suggestion:"请重新生成,确保模板章节完整输出。"});continue}let f=b.heading+b.body;d.tableSections?.length&&!P(f)&&c.push({level:"warning",message:`${d.title} 缺少必要的正式表格`,suggestion:"建议按模板 tableSections/tableRequirements 在对应小节补充正式 Markdown 表格。"})}return c}function U(a){let b=[...a.matchAll(/^##\s+.+$/gmu)];if(0===b.length)return a;let c=a.slice(0,b[0].index||0);for(let d=0;d<b.length;d+=1){let e=b[d].index||0,f=b[d+1]?.index??a.length,g=a.slice(e,f),h=[...g.matchAll(/^###\s+(\d+)\.(\d+)\s+.+$/gmu)];if(h.length<2){c+=g;continue}let i=h[0].index||0;c+=g.slice(0,i)+h.map((a,b)=>{let c=a.index||0,d=h[b+1]?.index??g.length;return{order:Number(a[2]||b+1),content:g.slice(c,d).trim()}}).sort((a,b)=>a.order-b.order).map(a=>a.content).join("\n\n")+"\n\n"}return c.replace(/\n{3,}/gu,"\n\n").trim()}function V(a,b,c={}){let d=N(f(a,!!c.forbidDrawingImages),c.promptRules),g=U(function(a){let b=[...a.matchAll(/^##\s+(.+)$/gmu)].filter(a=>/^第[一二三四五六七八九十百千万\d]+章\s+/u.test(a[1]||""));if(0===b.length)return a;let c=a.slice(0,b[0].index||0);for(let d=0;d<b.length;d+=1){let f=b[d].index||0,g=b[d+1]?.index??a.length,h=a.slice(f,g),i=[...h.matchAll(/^###\s+(\d+)\.(\d+)\s+(.+)$/gmu)];if(1!==i.length){c+=h;continue}let j=i[0],k=(0,e.GQ)((b[d][1]||"").replace(/^第[一二三四五六七八九十百千万\d]+章\s*/u,"")),l=(0,e.GQ)(j[3]||""),m=j.index||0,n=[...h.slice(m).matchAll(/^####\s+\d+\.\d+\.\d+\s+(.+)$/gmu)];if(n.length<2||!B(l,k)){c+=h;continue}let o=h.slice(0,m).trimEnd(),p=h.slice(m),q=p.search(/^####\s+/mu),r=q>0?p.slice(j[0].length,q).trim():"",s=n.map((a,b)=>{let c=a.index||0,f=n[b+1]?.index??p.length,g=(0,e.GQ)(a[1]||""),h=p.slice(c+a[0].length,f).trim(),i=`### ${d+1}.${b+1} ${g}`;return`${i}
|
|
26
|
+
|
|
27
|
+
${0===b&&r?`${r}
|
|
28
|
+
|
|
29
|
+
`:""}${h}`.trim()}).join("\n\n");c+=`${o}
|
|
30
|
+
|
|
31
|
+
${s}
|
|
32
|
+
|
|
33
|
+
`}return c.replace(/\n{3,}/gu,"\n\n").trim()}(D(x(c.promptRules?"required"===c.promptRules.coverPolicy?"required"===c.promptRules.tocPolicy?d:J(d):"required"===c.promptRules.tocPolicy?I(d):I(J(d)):d)))),h=function(a,b){let c=L(K(J(a)),b),d=[...c.matchAll(/^##\s+(.+)$/gmu)];return b.map((a,f)=>{let g=(0,e.tb)(f,a.title),h=d.find(b=>B(b[1]||"",a.title)||B(b[1]||"",g));if(!h||void 0===h.index)return a.sections||[];let i=d.find(a=>(a.index||0)>(h.index||0)&&b.some(b=>B(a[1]||"",b.title))),j=C(c.slice(h.index,i?.index??c.length));return j.length>0?j.slice(0,12):a.sections||[]})}(g,b),i=b.map((a,b)=>({...a,sections:h[b]?.length?h[b]:a.sections||[]}));return{markdown:N(U(D(x(c.promptRules?.tocPolicy==="required"?function(a,b){let c=L(a,b),d=J(c),e=[...d.matchAll(/^##\s+(.+)$/gmu)],f=H(b.map(a=>{if(a.sections?.length)return a;let c=e.find(b=>B(b[1]||"",a.title));if(!c||void 0===c.index)return a;let f=e.find(a=>(a.index||0)>(c.index||0)&&b.some(b=>B(a[1]||"",b.title))),g=C(d.slice(c.index,f?.index??d.length)).slice(0,8);return g.length?{...a,sections:g}:a})),g=/^##\s+目录\s*$/mu.exec(c);if(g?.index!==void 0){let a=g.index+g[0].length,b=c.slice(a).search(/\n##\s+第[一二三四五六七八九十百千万\d]+章/u),d=[...c.slice(a).matchAll(/\n<div class="page-break"><\/div>/gu)],e=d[0]?.index??(b>=0?b:c.length-a),h=a+e;return`${c.slice(0,g.index)}${f.trim()}${c.slice(h)}`.replace(/\n{3,}/gu,"\n\n")}let h='<div class="page-break"></div>',i=c.indexOf(h);if(i>=0){let a=i+h.length;return`${c.slice(0,a)}
|
|
34
|
+
|
|
35
|
+
${f}
|
|
36
|
+
|
|
37
|
+
${h}
|
|
38
|
+
|
|
39
|
+
${c.slice(a).trimStart()}`}return`${f}
|
|
40
|
+
|
|
41
|
+
<div class="page-break"></div>
|
|
42
|
+
|
|
43
|
+
${c}`}(g,i):L(g,i)))),c.promptRules),chapters:i}}function W(a,b={}){let c=a.chapters.map(a=>({...a,sections:G(a.sections||[])})),d=c.map((a,b)=>(function(a,b){let c=`## ${(0,e.tb)(b,a.title)}`,d=x(a.content);var f=/^##\s+.+$/mu.test(d)?d.replace(/^##\s+.+$/mu,c):`${c}
|
|
44
|
+
|
|
45
|
+
${d}`,g=a.title;let h=f.split(/\r?\n/u),i=!1;return h.filter((a,b)=>{let d=a.trim(),e=/^##\s+(.+)$/u.exec(a.trim())?.[1]||"";if(e){if(B(e,c))return!i&&(i=!0,!0);if(b>0&&B(e,g))return!1}return!(d&&!/^#{1,6}\s+/u.test(d)&&B(d,g))}).join("\n").replace(/\n{3,}/gu,"\n\n").trim()})(a,b)),f=d.filter(Boolean).join("\n\n"),g=c.map((a,b)=>{if(a.sections?.length)return a;let c=C(L(d[b]||"",[a])).slice(0,8);return c.length?{...a,sections:G(c)}:a});return V(['<div class="document-cover">',`# ${a.title}`,'\n</div>\n\n<div class="page-break"></div>\n',H(g),'\n<div class="page-break"></div>\n',f].join("\n"),c,b).markdown}},44533:(a,b,c)=>{c.d(b,{Qh:()=>l,VS:()=>p,Yy:()=>o,a2:()=>k,aY:()=>n});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021);let j=null;function k(){return g.join(h.homedir(),".customize-agent")}function l(){return j||(j=new d.MultiProjectManager(k())),j}function m(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))&&(b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function n(){let a=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(a&&i.existsSync(a)&&!m(a))return g.resolve(a);let b=function(){let a=g.join(k(),"projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!m(a))}finally{b.close()}}();return b.length>0?b[0]:process.env.INIT_CWD&&!m(process.env.INIT_CWD)?process.env.INIT_CWD:g.resolve(process.cwd(),"../..")}function o(a,b={}){let c=new Map;for(let b of function(a){let b=g.join(h.homedir(),".customize-agent","projects",(0,d.computeProjectId)(g.resolve(a)),"kb.db");if(!i.existsSync(b))return[];let c=new d.IndexStateStore(b);try{return c.listRecords().map(a=>({...a,matchedBy:"metadata"}))}finally{c.close()}}(a))c.set(b.relativePath,b);for(let b of function(a){let b=g.join(a,"knowledgeBase");if(!i.existsSync(b))return[];let c=[],d=a=>{for(let e of i.readdirSync(a,{withFileTypes:!0})){let f=g.join(a,e.name);if(e.isDirectory()){d(f);continue}if(e.name.endsWith(".source.txt"))continue;let h=i.statSync(f),j=g.relative(b,f).split(g.sep).join("/");c.push({relativePath:j,category:j.includes("表格数据/")?"spreadsheet":j.includes("图片素材/")?"image":j.includes("图纸文件/")?"cad":j.includes("文档资料/")?"document":"other",format:g.extname(j).slice(1).toLowerCase()||"text",contentHash:"",fileSize:h.size,mtime:h.mtimeMs,chunkCount:0,collectionName:"",indexedAt:0,lastVerifiedAt:0,status:"disk",matchedBy:"disk"})}};return d(b),c}(a)){let a=c.get(b.relativePath);c.set(b.relativePath,a?{...a,fileSize:b.fileSize,mtime:b.mtime,matchedBy:"metadata"}:b)}return Array.from(c.values()).filter(a=>!b.category||a.category===b.category).sort((a,b)=>b.mtime-a.mtime||a.relativePath.localeCompare(b.relativePath,"zh-CN"))}async function p(a,b={}){let c=(b.query||"").trim(),d=Math.max(1,Math.min(500,b.limit??50)),e=new Map,f=o(a,{category:b.category});for(let a of f)(!c||`${a.relativePath}
|
|
46
|
+
${a.category}
|
|
47
|
+
${a.format}
|
|
48
|
+
${a.status}`.toLowerCase().includes(c.toLowerCase()))&&e.set(a.relativePath,{...a,matchedBy:c?"path":a.matchedBy});if(c&&!1!==b.includeContent)try{for(let b of(await l().search(a,c,{limit:Math.max(20,d)})).results){let a=b.filePath,c=e.get(a)||f.find(b=>b.relativePath===a);e.set(a,{...c||{relativePath:a,category:"content",format:"knowledge",fileSize:0,mtime:0,chunkCount:0,indexedAt:0,lastVerifiedAt:0,status:"active"},matchedBy:"content",score:b.score})}}catch{}let g=Array.from(e.values()).sort((a,b)=>{let c=a=>"content"===a.matchedBy?3:"path"===a.matchedBy?2:+("metadata"===a.matchedBy);return c(b)-c(a)||(b.score??0)-(a.score??0)||b.mtime-a.mtime||a.relativePath.localeCompare(b.relativePath,"zh-CN")});return{files:g.slice(0,d),total:g.length}}},51144:(a,b,c)=>{function d(a,b,c,e="items"){let f=c.maxItems??Number.MAX_SAFE_INTEGER,g=c.maxChars??Number.MAX_SAFE_INTEGER,h=c.charFn??(a=>JSON.stringify(a).length),i=a.map(a=>({item:a,score:b(a)}));i.sort((a,b)=>b.score-a.score);let j=[],k=[],l=0;for(let{item:a}of i){let b=h(a);j.length<f&&l+b<=g?(j.push(a),l+=b):k.push(a)}let m=[];if(k.length>0){for(let a of(m.push(`[selection] ${e}: 预算 ${f}项/${g}字符 → 选中 ${j.length}项(${l}字符),丢弃 ${k.length}项`),k.slice(0,10))){let b="string"==typeof a?a.slice(0,80):JSON.stringify(a).slice(0,80);m.push(` - 丢弃: ${b}`)}k.length>10&&m.push(` ... 及其他 ${k.length-10} 项`)}return{selected:j,dropped:k,droppedLog:m}}function e(a){let b=0,c=a.length;return 0===c?0:(b+=3*(a.match(/\d+(?:\.\d+)?/gu)||[]).length,/m[23²³]?|mm|cm|km|t|kg|台|套|个|项|批|次|份|人|日历天|天|月|万元|元|%|MPa|kPa|kN|℃/iu.test(a)&&(b+=2),/GB|JGJ|ISO|CJJ|CECS|DL|YB|SH|HG|SY|NB/iu.test(a)&&(b+=3),/验收|质量|安全|工期|进度|成本|风险|危大|重点|难点|关键|控制|标准|规范|设计|施工|材料|设备/u.test(a)&&(b+=1),c<20&&(b-=1),/项目名称|工程名称|招标人|建设地点|计划工期|质量标准|合同估算/u.test(a)&&(b+=2),b)}function f(a){let b=0,c=`${a.key||""}${a.fieldName||""}${a.fieldId||""}`,d="string"==typeof a.value?a.value:"number"==typeof a.value?String(a.value):"";return a.required&&(b+=10),/\d/u.test(d)&&(b+=5),/项目名称|工程名称|项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|施工范围|计划工期|合同工期|质量标准|合同估算|投资估算|最高投标限价/u.test(c)&&(b+=4),/m[23²³]?|mm|cm|km|t|kg|台|套|个|万元|元|%|MPa|日历天/u.test(d)&&(b+=3),/招标文件|招标公告|投标人须知|前附表/u.test(a.fieldId||"")&&(b+=2),b}c.d(b,{Cr:()=>d,Ox:()=>e,rF:()=>f})},52511:(a,b,c)=>{c.d(b,{Bh:()=>C,C1:()=>H,N6:()=>I,QJ:()=>B,bV:()=>F,bj:()=>z,dU:()=>y,h0:()=>E,jG:()=>A,xm:()=>D,zY:()=>L});var d=c(73024),e=c(76760),f=c(48161),g=c(77598),h=c(44533),i=c(25840),j=c(8753),k=c(6444),l=c(85441),m=c(81125),n=c(56942),o=c(2773);function p(){let a=e.join(f.homedir(),".customize-agent");return d.mkdirSync(a,{recursive:!0}),a}function q(){return e.join(p(),"document-templates.json")}function r(a){let{version:b,updatedAt:c,changeLog:d,...e}=a;return(0,g.createHash)("sha256").update(function a(b){return Array.isArray(b)?`[${b.map(a).join(",")}]`:b&&"object"==typeof b?`{${Object.keys(b).sort().map(c=>`${JSON.stringify(c)}:${a(b[c])}`).join(",")}}`:JSON.stringify(b)}(e)).digest("hex")}function s(a){return{...a,id:a.id.replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80)||`template-${Date.now()}`,name:a.name||"未命名模板",description:a.description||"",category:a.category||"自定义",outputTitle:a.outputTitle||a.name||"文档",version:Number.isFinite(a.version)&&a.version>0?Math.floor(a.version):1,updatedAt:Number.isFinite(a.updatedAt)?a.updatedAt:Date.now(),changeLog:Array.isArray(a.changeLog)?a.changeLog.filter(a=>a&&"object"==typeof a&&Number.isFinite(a.version)&&"string"==typeof a.summary).slice(0,50):[],projectRoleConfigId:a.projectRoleConfigId||void 0,chapters:Array.isArray(a.chapters)&&a.chapters.length>0?a.chapters.map((a,b)=>({id:(a.id||`chapter-${b+1}`).replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80),title:a.title||`第 ${b+1} 章`,purpose:a.purpose||"",queries:Array.isArray(a.queries)?a.queries.filter(Boolean):[],requiredFacts:Array.isArray(a.requiredFacts)?a.requiredFacts.filter(Boolean):[],sections:Array.isArray(a.sections)?a.sections.filter(Boolean):[],tableSections:Array.isArray(a.tableSections)?a.tableSections.filter(Boolean):[],tableRequirements:Array.isArray(a.tableRequirements)?a.tableRequirements.filter(Boolean):[],tablePlans:Array.isArray(a.tablePlans)?a.tablePlans:[],pinnedEvidenceFilePaths:Array.isArray(a.pinnedEvidenceFilePaths)?a.pinnedEvidenceFilePaths.filter(Boolean):[]})):[{id:"document",title:a.outputTitle||a.name||"文档",purpose:a.description||"",queries:[],requiredFacts:[]}],exportSettings:a.exportSettings,generationSettings:a.generationSettings,promptIds:Array.isArray(a.promptIds)?a.promptIds.filter(Boolean):[],projectBindings:Array.isArray(a.projectBindings)?a.projectBindings.filter(a=>a.materialRootPath).map(a=>({materialRootPath:a.materialRootPath.replace(/^\/+|\/+$/gu,"")})):(0,o.qp)(a),promptBindings:Array.isArray(a.promptBindings)?a.promptBindings.filter(a=>a.promptId&&a.roleId):Array.isArray(a.promptIds)?a.promptIds.filter(Boolean).map(a=>({promptId:a,roleId:"chapter_generation"})):[],builtIn:!1}}function t(){try{let a=q();if(!d.existsSync(a))return[];let b=JSON.parse(d.readFileSync(a,"utf-8"));if(!Array.isArray(b))return d.renameSync(a,`${a}.corrupt-${Date.now()}`),[];return b.map(s)}catch{try{let a=q();d.existsSync(a)&&d.renameSync(a,`${a}.corrupt-${Date.now()}`)}catch{}return[]}}function u(a){d.writeFileSync(q(),JSON.stringify(a.map(s),null,2),"utf-8")}function v(a){return(0,g.createHash)("sha256").update(a).digest("hex").slice(0,12)}function w(a){return a.replace(/\s+/gu," ").trim().slice(0,160)}function x(a){let b=function(){try{let a=JSON.parse(d.readFileSync(e.join(p(),"prompts.json"),"utf-8"));return Array.isArray(a.customPrompts)?a.customPrompts:[]}catch{return[]}}();if(a.startsWith("custom:")){let c=b.find(b=>b.id===a);return c?{id:a,name:c.name,content:c.content,source:"custom"}:void 0}if(a.startsWith("file:")){let b=a.slice(5);if(d.existsSync(b))return{id:a,name:e.basename(e.dirname(b))||b,content:d.readFileSync(b,"utf-8"),source:"file"}}}function y(a=[]){if(0===a.length)return[];let b=[];for(let c of a){let a=x(c.promptId);a&&b.push({...a,roleId:c.roleId,contentHash:v(a.content),contentPreview:w(a.content)})}return b}function z(a){let b=J(a),c=(0,i.XB)("prompt"),d=L(a),e=[],f=[];if(b)for(let a of b.promptRoles){let b=c.find(b=>b.id===a.roleId);if(!b){e.push(a.roleId);continue}0===(b.resourceIds?.length?b.resourceIds:b.resourceId?[b.resourceId]:[]).length&&f.push(a.roleId)}let g=K(d),h=[];for(let a of g){let d=x(a.promptId);if(!d)continue;let e=c.find(b=>b.id===a.roleId),f=b?.promptRoles.find(b=>b.roleId===a.roleId),g=e?.executionType||function(a){var b;return b=a,/extract|extraction|抽取|清单|图纸|品牌/u.test(b)?"fact_extraction":/validation|校验|审查|审核/u.test(b)?"validation":/format|排版/u.test(b)?"formatting":/writer|method|schedule|quality|resource|safety|dangerous|施工|进度|质量|资源|安全|危大/u.test(b)?"chapter_generation":"reference"}(a.roleId),i=function(a,b,c=""){let d=`${a} ${b} ${c}`;return/extract|extraction|抽取|清单|图纸|品牌|识别/u.test(d)?"extraction":/format|排版/u.test(d)?"formatting":/总控|writer|施工组织设计总控|写作主控/u.test(d)?"writer":/chapter_generation|method|schedule|quality|resource|safety|dangerous|施工|进度|质量|资源|安全|危大/u.test(d)?"chapter":"reference"}(a.roleId,g,d.name),j=`projectRole:${b?.id||"unknown"}:${a.roleId}:order=${f?.order??0}`;h.push({...d,roleId:a.roleId,contentHash:v(d.content),contentPreview:w(d.content),executionType:g,category:i,bindingSource:j,roleConfigId:b?.id,roleName:e?.name,order:f?.order})}return{bindings:g,prompts:h,writerPrompts:h.filter(a=>"writer"===a.category),chapterPrompts:h.filter(a=>"chapter"===a.category),extractionPrompts:h.filter(a=>"extraction"===a.category),formattingPrompts:h.filter(a=>"formatting"===a.category),referencePrompts:h.filter(a=>"reference"===a.category),unresolvedRoles:[...new Set(e)],missingResourceRoles:[...new Set(f)]}}function A(){let a=(0,j.V)().templates,b=t().filter(b=>!a.some(a=>a.id===b.id));return[...a,...b]}function B(a){return A().find(b=>b.id===a)}function C(a){let b,c,d=s(a),e=t().find(a=>a.id===d.id),f=Date.now();if(e&&r(e)!==r(d)){b=(e.version||0)+1;let a=d.chapters.map(a=>a.title).join("、");c=[{version:b,timestamp:f,summary:a?`章节结构调整:${a.slice(0,80)}${a.length>80?"…":""}`:"模版内容已更新"},...e.changeLog||[]].slice(0,50)}else e?(b=e.version||1,c=e.changeLog||[]):(b=1,c=[{version:1,timestamp:f,summary:"创建模版"}]);let g={...d,version:b,updatedAt:f,changeLog:c},h=t().filter(a=>a.id!==d.id);return h.push(g),u(h),g}async function D(a,b=(0,h.aY)(),c={}){let d,f,g=B(a),j=[];if(!g)return{issues:[{level:"error",message:"文档模板不存在或已删除"}],fileDiagnostics:[],promptDiagnostics:[],config:void 0};let p=(0,i.XB)("prompt"),q=I(g),r=J(g);q||j.push({level:"error",message:"模板未绑定项目角色配置,且未匹配到自动专业角色配置"}),q&&!r&&j.push({level:"error",message:`项目角色配置不存在或已删除:${q}`}),g.promptIds?.length&&j.push({level:"warning",message:"模板存在旧 promptIds 字段残留,该字段已不参与生成,请清理模板历史数据。"}),g.promptBindings?.length&&j.push({level:"warning",message:"模板存在旧 promptBindings 字段残留,该字段已不参与生成,请清理模板历史数据。"});let s=L(g),t=(0,o.qp)(g);r&&0===r.promptRoles.length&&j.push({level:"error",message:"项目角色配置未配置提示词角色。"}),r&&r.promptRoles.length>0&&0===s.length&&j.push({level:"error",message:"项目角色配置中的提示词角色未绑定任何有效提示词资源。"});let u=e.resolve(b),v=(0,h.Yy)(u),w=function(a,b){if(0===a.length)return[];let c=new Set(b.map(a=>a.relativePath)),d=[],e=new Set;for(let f of a){let a=f.materialRootPath.replace(/^\/+|\/+$/gu,"");for(let f of c.has(a)?[a]:b.filter(b=>{var c;return b.relativePath.startsWith(`${a}/`)&&"disk"!==(c=b).status&&"error"!==c.status&&Number(c.indexedAt||0)>0&&Number(c.chunkCount||0)>0}).map(a=>a.relativePath))e.has(f)||(e.add(f),d.push(f))}return d}(t,v);if(0===t.length?j.push({level:"error",message:"模板未绑定项目资料包,请先选择需要参与生成的项目文件夹。"}):0===w.length&&j.push({level:"error",message:"模板绑定的项目资料包不存在或没有可用索引文件,请重新选择项目资料包。"}),g&&(d=(0,l.P)(u,{requirement:c.requirement,boundFilePaths:w}),0===t.length&&!d.source.ambiguous&&d.source.selectedFiles>0)){let a=j.findIndex(a=>"error"===a.level&&"模板未绑定项目资料包,请先选择需要参与生成的项目文件夹。"===a.message);a>=0&&j.splice(a,1)}let x=new Map(v.map(a=>[a.relativePath,a])),z=w.map(a=>{let b=x.get(a);return b||j.push({level:"error",message:`知识库文件不存在:${a}`}),b&&("disk"===b.status||0===b.indexedAt)&&j.push({level:"warning",message:`知识库文件存在但尚未完成索引:${a}`}),b?.status==="error"&&j.push({level:"warning",message:`知识库文件索引失败:${a}${b.errorMessage?`,${b.errorMessage}`:""}`}),b&&0===b.chunkCount&&j.push({level:"warning",message:`知识库文件暂无可检索内容切片:${a}`}),{filePath:a,roleId:"project_material",roleName:"项目资料包",exists:!!b,indexed:!!(b&&b.indexedAt>0&&"disk"!==b.status),chunkCount:b?.chunkCount??0,vectorReady:!!(b&&b.chunkCount>0)}}),A=y(s),C=new Set(r?.promptRoles.map(a=>a.roleId)||[]);for(let a of r?.promptRoles||[]){let b=p.find(b=>b.id===a.roleId);if(!b){j.push({level:"error",message:`提示词角色不存在:${a.roleId}`});continue}0===(b.resourceIds?.length?b.resourceIds:b.resourceId?[b.resourceId]:[]).length&&j.push({level:"error",message:`提示词角色未绑定资源:${b.name}`})}let E=s.map(a=>{let b=p.find(b=>b.id===a.roleId),c=A.find(b=>b.id===a.promptId);return b||j.push({level:"error",message:`提示词角色不存在:${a.roleId}`}),C.has(a.roleId)||j.push({level:"error",message:`提示词绑定不属于当前项目角色配置:${a.roleId}`}),c||j.push({level:"error",message:`提示词不存在:${a.promptId}`}),c&&!c.content.trim()&&j.push({level:"warning",message:`提示词为空:${c.name}`}),{...a,roleName:b?.name,promptTitle:c?.name,promptSource:c?.source,contentLength:c?.content.length??0,contentHash:c?.contentHash,contentPreview:c?.contentPreview,exists:!!c}});if(g){let a=d||(0,l.P)(u,{requirement:c.requirement,boundFilePaths:w}),b=(0,m.h)(g,a);for(let c of(f=(0,n.$)({template:g,spec:(0,k.x)(g).spec,summary:a,resolvedRoles:b})).blockingIssues)j.push({level:"error",message:`生成准备度不足:${c}`});for(let a of f.warnings)j.push({level:"warning",message:a})}return{templateId:a,projectRoleConfigId:q,fileDiagnostics:z,promptDiagnostics:E,readiness:f,issues:j}}function E(a){if(new Set((0,j.V)().templates.map(a=>a.id)).has(a))throw Error("Configured template cannot be deleted");u(t().filter(b=>b.id!==a))}function F(a){let b=B(a);if(!b)throw Error("Document template not found");let c=Date.now(),d=s({...b,id:`${b.id}-copy-${c}`,name:`${b.name} Copy`,builtIn:!1,version:1,updatedAt:c,changeLog:[{version:1,timestamp:c,summary:`从 ${b.id} v${b.version||1} 复制`}]}),e=t();return e.push(d),u(e),d}function G(a,b){try{return RegExp(b,"iu").test(a)}catch{return a.includes(b)}}function H(a,b){return(function(a){let b=`${a.name} ${a.category} ${a.outputTitle} ${a.description}`;return(0,j.V)().chapterTitleFilters.filter(a=>a.templateMatchers.some(a=>G(b,a)))})(b).some(b=>!!b.minLength&&a.length<b.minLength||!!b.maxLength&&a.length>b.maxLength||b.forbiddenPatterns.some(b=>G(a,b)))}function I(a){return a.projectRoleConfigId||void 0}function J(a){let b=I(a);return b?(0,i.Mu)(b):void 0}function K(a){let b=new Set,c=[];for(let d of a){let a=`${d.roleId}:${d.promptId}`;!d.promptId||!d.roleId||b.has(a)||(b.add(a),c.push(d))}return c}function L(a){let b=J(a);if(!b)return[];let c=(0,i.XB)("prompt"),d=[];for(let a of[...b.promptRoles].sort((a,b)=>a.order-b.order)){let b=c.find(b=>b.id===a.roleId),e=b?b.resourceIds?.length?b.resourceIds:b.resourceId?[b.resourceId]:[]:[];b&&0!==e.length&&d.push(...e.map(a=>({promptId:a,roleId:b.id})))}return K(d)}},56942:(a,b,c)=>{c.d(b,{$:()=>h,R:()=>i});var d=c(81125),e=c(92808);function f(a){return[...new Set(a.filter(Boolean))]}function g(a){let b=(0,e.t0)(a,e.hW);return b.length>0?b:["project_overview"]}function h(a){var b,c,e;let h=a.resolvedRoles.filter(a=>a.required&&!a.satisfied).map(a=>a.role),i=a.resolvedRoles.filter(a=>a.weak).map(a=>a.role),j=(b=a.template,c=a.spec,e=a.summary,b.chapters.map(a=>{let b=function(a,b){let c=b.chapterRules.find(b=>b.id===a.id||b.title===a.title),d=(c?.requiredFactIds||[]).map(a=>b.factFields.find(b=>b.id===a)?.name).filter(Boolean);return f([...a.requiredFacts||[],...d])}(a,c),d=f([...g([a.title,a.purpose,...a.queries||[],...a.sections||[]].join("\n")),...b.flatMap(a=>g(a))]),h=d.filter(a=>(e.materialInventory[a]||[]).length>0),i=h.reduce((a,b)=>a+(e.materialInventory[b]||[]).length,0),j=b.filter(a=>g(a).some(a=>h.includes(a))),k=b.filter(a=>!j.includes(a)),l=b.length>0?j.length/b.length:1,m=d.length>0?h.length/d.length:1;return{chapterId:a.id,title:a.title,requiredFacts:b,coveredFacts:j,missingFacts:k,requiredRoles:d,satisfiedRoles:h,evidenceCount:i,readinessRate:Math.min(1,.5*l+.3*m+.2*(i>0))}})),k=[],l=[];0===a.template.chapters.length&&l.push("模板未配置章节,建议通过模板章节或显式 OUTLINE 提供文档结构"),a.template.chapters.some(a=>!a.purpose&&(!a.queries||0===a.queries.length)&&(!a.requiredFacts||0===a.requiredFacts.length))&&l.push("部分模板章节缺少 purpose、queries 或 requiredFacts,生成质量可能不稳定"),a.summary.source.ambiguous&&k.push(a.summary.source.selectionReason),a.summary.fingerprint.confidence<.34&&l.push("材料指纹置信度较低,建议绑定明确的材料文件"),0===a.summary.source.selectedFiles&&k.push("未绑定可用项目资料文件,无法支撑文档生成"),h.length>0&&0===a.summary.source.selectedFiles&&l.push("模板未绑定可用项目资料文件,请先绑定参与生成的资料"),i.length>0&&0===a.summary.source.selectedFiles&&l.push("绑定资料证据较弱,请确认资料已完成索引");let m=j.filter(a=>a.readinessRate<.5);m.length>0&&l.push(`章节级证据覆盖较弱:${m.slice(0,5).map(a=>`${a.title} ${Math.round(100*a.readinessRate)}%`).join("、")}`);let n=j.filter(a=>a.requiredFacts.length>0&&0===a.evidenceCount);n.length>0&&l.push(`部分章节缺少匹配证据:${n.slice(0,5).map(a=>a.title).join("、")}`);let o=a.summary.coverage.satisfiedRoles,p=a.resolvedRoles.filter(a=>!a.required&&!a.satisfied).map(a=>a.role),q=[`资料范围:${a.summary.source.selectionReason},可用文件 ${a.summary.source.selectedFiles}/${a.summary.source.totalFiles} 份`,`已识别资料类型:${o.join("、")||"无"}`,a.summary.coverage.missingRoles.length?`待补充必需资料类型:${a.summary.coverage.missingRoles.join("、")}`:"必需资料类型已满足",h.length?`模板强相关资料角色缺失:${h.join("、")}`:"模板强相关资料角色已满足",p.length?`可选资料角色未识别:${p.join("、")}`:"",i.length?`证据较弱资料角色:${i.join("、")}`:""].filter(Boolean),r=[a.spec.factFields.length>0,a.spec.chapterRules.length>0,a.spec.gateRules.length>0];return{ready:0===k.length,materialCoverageRate:a.summary.coverage.materialCompletenessRate,roleSatisfactionRate:(0,d.o)(a.resolvedRoles),specCompletenessRate:r.filter(Boolean).length/r.length,missingRoles:h,weakRoles:i,diagnostics:q,chapterDiagnostics:j,blockingIssues:k,warnings:l}}function i(a,b={}){let c=a.chapterDiagnostics.filter(a=>a.readinessRate<.7||a.missingFacts.length>0).slice(0,8).map(a=>`${a.title}:${Math.round(100*a.readinessRate)}%,证据 ${a.evidenceCount} 条${a.missingFacts.length?`,缺失 ${a.missingFacts.slice(0,6).join("、")}`:""}`);return b.publicSafe?["## 生成事实使用边界",`资料覆盖程度:${Math.round(100*a.materialCoverageRate)}%`,`资料角色满足程度:${Math.round(100*a.roleSatisfactionRate)}%`,c.length?`章节证据风险:
|
|
49
|
+
${c.join("\n")}`:"","资料不足的事实不得编造;仅施工组织、计划安排、资源配置类数据可在文档要求允许时进行计划推导并标注。"].filter(Boolean).join("\n"):["## 后台生成准备度",`可生成:${a.ready?"是":"否"}`,`资料覆盖率:${Math.round(100*a.materialCoverageRate)}%`,`资料角色满足率:${Math.round(100*a.roleSatisfactionRate)}%`,`优化建议完整度:${Math.round(100*a.specCompletenessRate)}%`,a.missingRoles.length?`资料诊断:部分模板期望资料类型未从绑定文件中明确识别,生成时仅使用已绑定资料中的事实`:"",a.weakRoles.length?`资料诊断:部分资料类型证据较弱,生成时不得补写资料未明确的事实`:"",c.length?`章节级证据风险:
|
|
50
|
+
${c.join("\n")}`:""].filter(Boolean).join("\n")}},58965:(a,b,c)=>{c.d(b,{$m:()=>f,VX:()=>d,tK:()=>e});let d=/\b(?:TDbPipe|TDbPipeValve|TDbPipeFitting|TDbWellh|AcDb\w+|Dwg\w+|Polyline|Hatch|Layer|BlockReference)\b/giu,e=/[\w\u4e00-\u9fa5()()\-—_+\s]+\.(?:pdf|dwg|docx?|xlsx?|xls|csv|png|jpe?g|webp)\b/giu,f="[零〇一二三四五六七八九十百千万两]+"},70208:(a,b,c)=>{c.d(b,{GQ:()=>m,Ui:()=>k,YZ:()=>n,_9:()=>q,bl:()=>j,cs:()=>l,tb:()=>o});var d=c(58965),e=c(52511);function f(a){let b=a.trim(),c="";for(;b!==c;)c=b,b=b.replace(RegExp(`^\\s*第(?:\\d{1,3}|${d.$m})[章节]\\s*`,"u"),"").replace(RegExp(`^\\s*[((]?(?:\\d{1,3}|${d.$m})[))、..]\\s*`,"u"),"").replace(RegExp("^\\s*[-*+]\\s+","u"),"").trim();return b.replace(/\s+/gu," ")}function g(a){return 0===a.trim().length||function(a){let b=f(a).replace(/\s+/gu,"");return!!(!b||/^(?:目录|章节|大纲|要求|说明|注意|输出|格式|示例|例如|写法|占位|提示)$/u.test(b)||/^(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用)|^(?:如|若|如果)(?:涉及|不涉及|适用|不适用)|(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成)|按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|说明要求|注意事项/u.test(b)||/[::]$|[,、;。]$/u.test(b))}(a)}let h="(?:OUTLINE|CHAPTERS?|章节(?:大纲)?|大纲|目录)",i=RegExp(`<\\s*${h}(?:\\s[^>]*)?>([\\s\\S]*?)<\\/\\s*${h}\\s*>`,"giu");function j(a){return RegExp(`^\\s*<\\s*${h}(?:\\s[^>]*)?>`,"iu").test(a)}function k(a){return RegExp(`^\\s*<\\/\\s*${h}\\s*>`,"iu").test(a)}function l(a){for(let b of a){let a=function(a,b,c){let e=[];for(let h of function(a,b){i.lastIndex=0;let c=[...a.matchAll(i)].map(a=>a[1]||"");if(c.length>0||b?.strict)return c;let d=/(?:<\s*)?(?:OUTLINE|CHAPTERS?|章节(?:大纲)?|大纲|目录)\s*>?\s*[::]?\s*([\s\S]*?)(?:<\/\s*(?:OUTLINE|CHAPTERS?|章节(?:大纲)?|大纲|目录)\s*>|END\s+(?:OUTLINE|CHAPTERS?)|$)/iu.exec(a);return d?.[1]?[d[1]]:[]}(a,c))for(let a of function(a){let b=`${d.$m}`,c=[`第(?:\\d{1,3}|${b})[章节]\\s*`,`(?:\\d{1,3})[、))]\\s*`,`(?:\\d{1,3})[..]\\s+(?!\\d)`,`(?:${b})[、..))]\\s*`,`[((](?:\\d{1,3}|${b})[))]\\s*`,"[-*+]\\s+"],e=a.replace(/\r?\n/gu,"\n");for(let a of c)e=(e=(e=e.replace(RegExp(`([;;。!?!?])\\s*(?=${a})`,"gu"),"$1\n")).replace(RegExp(`(?<=\\n)\\s+(?=${a})`,"gu"),"")).replace(RegExp(`(?<![\\d..])\\s+(?=${a})`,"gu"),"\n");return e.split(/\n|;|;/u).map(a=>f(a)).filter(a=>!g(a))}(h))e.push({id:`explicit-${b}-${e.length+1}`,title:a,purpose:`根据显式大纲章节生成正式正文:${a}`,requiredFacts:[],sections:[],queries:[a]});return e.filter(a=>!g(a.title))}(b.text||"",b.source,{strict:b.strict});if(a.length>=2)return a}return[]}function m(a){let b=a.replace(/^#+\s*/u,"").trim(),c="";for(;b&&b!==c;)c=b,b=b.replace(/^第[一二三四五六七八九十百千万\d]+[章节]\s*/u,"").replace(/^\d+(?:\.\d+)*[、..\s]+/u,"").replace(/^[((]?[一二三四五六七八九十]+[))、..\s]+/u,"").trim();return b}function n(a){return m(a.replace(/\s+/gu," ").trim()).replace(/^[,,、;;::。.!!??\-—\s]+/u,"").trim()}function o(a,b){let c=m(b);return`第${function(a){let b=["零","一","二","三","四","五","六","七","八","九"];if(a<=10)return 10===a?"十":b[a];if(a<20)return`十${b[a%10]}`;if(a<100){let c=Math.floor(a/10),d=a%10;return`${b[c]}十${d?b[d]:""}`}return String(a)}(a+1)}章 ${c}`}function p(a,b){let c=new Set;return a.filter(a=>{let d=n(a.title);if(!d)return!1;if(!b?.preserveExplicitOutline&&(c.has(d)||/见(?:公告|文件|资料|附件)|按(?:资料|文件|相关要求)|质量标准[::]|范围[::].*依据/u.test(d)||b?.template&&(0,e.C1)(d,b.template)))return!1;return c.add(d),a.title=d,!0})}function q(a,b,c){return!b||c?.preserveExplicitOutline?p([...a.chapters],{...c,template:a}):p([...a.chapters].map(a=>{let c=m(a.title),d=b.chapterRules.find(b=>b.id===a.id||m(b.title)===c);return{...a,title:c,purpose:a.purpose,requiredFacts:a.requiredFacts||[],queries:[...new Set([...a.queries||[],c,d?.generationHint||"",...a.sections||[]].filter(Boolean))]}}),{...c,template:a})}},70933:(a,b,c)=>{c.d(b,{OF:()=>m,Pc:()=>o,QO:()=>n,QR:()=>l,eE:()=>j,ks:()=>r});var d=c(76760),e=c(77598),f=c(58965),g=c(91977),h=c(51144);function i(a,b=0){let c="drawing"===a.processingType||a.roleId?.includes("drawing")?"视觉资料":"table"===a.processingType||a.roleId?.includes("bill")?"表格资料":"rule"===a.processingType||a.roleId?.includes("tender")?"规则资料":"文本资料";return`${c}片段${b+1}${a.sectionTitle?`(${a.sectionTitle.replace(f.tK,"")})`:""}`}function j(a){return[...a].filter(a=>{let b=a.charCodeAt(0);return 9===b||10===b||13===b||b>=32}).join("").replace(f.VX,"").replace(f.tK,"").replace(/\b(?:Model|Layout\d*|Entity|Handle|ObjectId|ByLayer|Continuous)\b/giu,"").replace(/[\t ]{2,}/gu," ").replace(/\n{3,}/gu,"\n\n").trim()}function k(a){let b=j(a),c=Math.max(1,b.length),d=(b.match(/[\u4e00-\u9fa5]/gu)||[]).length,e=(b.match(/\d/gu)||[]).length,f=(b.match(/项目|任务|质量|安全|周期|验收|材料|设备|表格|数据|参数|规范|标准|流程|资源|风险/gu)||[]).length,g=(b.match(/CAD|AcDb|Polyline|ByLayer|ObjectId|Handle|Model|Layout|图层|页码|第\s*\d+\s*页|打印|版权所有|^[\s\W\d_]+$/gimu)||[]).length,h=(b.match(/(?:序号|项目名称|事项|单位|数量|单价|金额|备注)/gu)||[]).length,i=Math.min(1,d/c*.7+Math.min(.3,(e+3*f)/120)),k=Math.min(1,.18*g+.04*Math.max(0,h-8)+.35*(d/c<.25));return{noiseScore:k,factDensity:i,shouldUse:b.length>=30&&k<.72&&i>.08}}function l(a,b={},c){let f=Number.isFinite(b.maxItems)&&b.maxItems>0?Math.floor(b.maxItems):void 0,g=Number.isFinite(b.maxChars)&&b.maxChars>0?Math.floor(b.maxChars):void 0,i=function(a,b,c){let f=new Set,g=a.map(a=>{let b=function(a,b){let c=d.extname(a).toLowerCase(),e=j(b).split("\n").map(a=>a.trim()).filter(a=>a&&!/^第\s*\d+\s*页\s*(?:共\s*\d+\s*页)?$/u.test(a)).join("\n"),f=k(e);if(e.length>20&&f.shouldUse)return e;let g=function(a){let b=[...new Set(j(a).split("\n").map(a=>a.trim()).filter(Boolean).filter(a=>{let b=/计划工期|合同工期|工期|合同估算价|合同估算价格|投资估算|估算价格|工程估算价|最高投标限价|招标控制价|建设地点|建设规模|质量标准/u.test(a);if(!b&&/综合单价|合价|报价明细|投标报价|税率|增值税|利润|预留金|暂列金额|结算/u.test(a))return!1;let c=/\d+(?:\.\d+)?\s*(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|L|ml|MPa|kPa|℃|%|台|套|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年)|DN\s*\d+|Φ\s*\d+|φ\s*\d+|C\d{2,}|HRB\d+|GB\/?T?\s*[\w.-]+|JGJ\s*[\w.-]+|\d+\s*[×xX]\s*\d+/iu.test(a),d=/项目|工程|工期|合同|估算|价格|地点|规模|清单|图纸|设计|规格|型号|数量|单位|材料|设备|管|线|电缆|混凝土|钢筋|砌体|门窗|防水|标准|规范|验收|做法|参数|尺寸|标高|厚度|强度|等级|系统|安装/u.test(a);return b||c||d&&/\d/u.test(a)&&a.length<=260}))];return(0,h.Cr)(b,a=>(0,h.Ox)(a),{maxItems:100,maxChars:12e3},"parameter-lines").selected.join("\n")}(e);return g.length>20?`资料参数行摘要:
|
|
51
|
+
${g}`:e.length>80&&f.noiseScore<.9?e:[".pdf",".doc",".docx",".xls",".xlsx",".png",".jpg",".jpeg",".webp",".dwg"].includes(c)?`该资料为${c.replace(".","").toUpperCase()}格式附件,仅作为内部事实提取依据;正式正文不得引用文件名。`:e}(a.filePath,a.content),c=k(b);return{item:{...a,content:b,score:a.score*(1+c.factDensity)*(1-.45*c.noiseScore)},quality:c}}),i=g.filter(a=>a.quality.shouldUse||/附件,仅作为内部事实提取依据/u.test(a.item.content)),l=Number.isFinite(b)&&b>0?Math.ceil(b):void 0,m=(i.length>=Math.min(3,a.length)?i:g).sort((a,b)=>b.item.score-a.item.score).filter(a=>{let b=function(a){let b=a.content.replace(/\s+/gu," ").trim();return`${a.filePath}:${a.sectionTitle||""}:${(0,e.createHash)("sha1").update(b).digest("hex")}`}(a.item);return!f.has(b)&&(f.add(b),!0)}),n=l?m.slice(0,l):m;if(c){let b=g.reduce((a,b)=>a+b.quality.noiseScore,0),d=g.reduce((a,b)=>a+b.quality.factDensity,0);c.evidence.raw+=a.length,c.evidence.used+=n.length,c.evidence.filteredNoise+=Math.max(0,g.length-i.length),c.evidence.avgNoiseScore=g.length?Number((b/g.length).toFixed(3)):0,c.evidence.avgFactDensity=g.length?Number((d/g.length).toFixed(3)):0}return n.map(a=>a.item)}(a,void 0,c),m=b.preservePinned?i.filter(a=>"pinned-evidence"===a.source||"bound-file"===a.source||"required-fact-evidence"===a.source):[],n=i.filter(a=>!m.includes(a)),o=[],p=new Map,q=0,r=(a,b=!1)=>{if(f&&o.length>=f)return;let c=p.get(a.filePath)||0;if(!b&&c>=4)return;let d=j(a.content),e=q+d.length;g&&o.length>0&&e>g||(o.push({...a,content:d}),p.set(a.filePath,c+1),q=e)};for(let a of m)r(a,!0);for(let a of n)r(a);return o}function m(a,b=0){return`- ${i(a,b)}:${j(a.content).replace(/\s+/gu," ").slice(0,260)}`}function n(a,b){let c=new Map;for(let e of b){let b=function(a,b){let c=d.extname(a).toLowerCase();return"drawing"===b||/地图|map|drawing|design/iu.test(a)?"map":[".png",".jpg",".jpeg",".webp"].includes(c)?"image":"table"===b?"table":[".xls",".xlsx",".csv"].includes(c)?"spreadsheet":[".pdf",".doc",".docx"].includes(c)?"document":c&&![".md",".txt"].includes(c)?"attachment":"text"}(e.filePath,e.processingType),f=c.get(e.filePath)||{filePath:e.filePath,kind:b,roleId:e.roleId,processingType:e.processingType,score:e.score,semanticTitle:function(a,b){let c=d.basename(a).replace(/\.[^.]+$/u,"");return"map"===b?c.replace(/^地图-/u,"").replace(/-完整地图$/u,"完整地图"):"image"===b?c.replace(/-/gu," "):"spreadsheet"===b?`${c}(结构化表格)`:"document"===b?`${c}(文档附件)`:c}(e.filePath,b),contentUse:"map"===b?"作为视觉/地图证据,用于说明空间关系、区域划分、点位、路线或布局。":"image"===b?"作为图片证据,用于视觉说明、参考图或章节配图。":"spreadsheet"===b||"table"===b?"作为表格/数据证据,用于字段对比、明细、数量和结构化结论。":"document"===b?"作为 PDF/Word 文档证据,用于提取规范、事实、说明、约束和附件来源。":"attachment"===b?"作为附件证据,用于提供补充来源、文件级约束或可追溯引用。":"作为文本证据,用于事实抽取、章节论据和来源引用。",relatedFacts:[],relatedChapters:[],snippets:[]};f.score=Math.max(f.score,e.score),f.relatedFacts=[...new Set([...f.relatedFacts,...function(a,b){let c=`${a.filePath}
|
|
52
|
+
${a.content}`;return[...new Set([...b?.requiredFacts||[],"表格数据","规范要求","基础事实","附件资料","视觉资料","图片资料"].filter(b=>(0,g.Lk)(a,b)||c.includes(b)))]}(e,a)])],f.relatedChapters=[...new Set([...f.relatedChapters,a.title])];let h=e.content.replace(/\s+/gu," ").slice(0,320);h&&f.snippets.length<3&&!f.snippets.includes(h)&&f.snippets.push(h),c.set(e.filePath,f)}let e=[...c.values()].sort((a,b)=>b.score-a.score),f={map:[],image:[],table:[],document:[],spreadsheet:[],text:[],attachment:[]};for(let a of e)f[a.kind].push(a);let h=[`绑定材料包:文本片段 ${b.length} 条、结构化材料 ${e.length} 个。`,`材料类型分布:文本 ${f.text.length}、文档 ${f.document.length}、表格/数据 ${f.spreadsheet.length+f.table.length}、图片 ${f.image.length}、视觉/地图 ${f.map.length}、其他 ${f.attachment.length}。`,"正文必须只写材料中的事实、参数、数量、做法和要求,不得出现文件名、来源清单或后台证据描述。"].filter(Boolean).join("\n");return{chapterId:a.id,textEvidence:b,resources:e,byKind:f,summary:h}}function o(a,b=6e3,c=18e3){return Math.max(b,Math.min(c,Math.ceil(5.5*(Number.isFinite(a)&&a>0?Math.ceil(a):1200))))}function p(a,b,c,d){let e=b.trim();if(e){if(!Number.isFinite(d)||!d||c.chars+e.length<=d){a.push(e),c.chars+=e.length;return}c.omitted+=1}}function q(a,b,c){let d={chars:0,omitted:0},e=[],f=new Set,g=new Set,h=[...a].sort((a,b)=>b.score-a.score);for(let a of h){if(g.has(a.filePath))continue;let h=e.length;p(e,c(a,e.length),d,b),e.length>h&&(g.add(a.filePath),f.add(a))}for(let a of h)f.has(a)||p(e,c(a,e.length),d,b);return{lines:e,omitted:d.omitted}}function r(a,b={}){let c=Number.isFinite(b.maxChars)&&b.maxChars>0?Math.ceil(b.maxChars):void 0,d=q(a.resources,c?Math.floor(.35*c):void 0,(a,b)=>[`- 资料:${i(a,b)}`,` 资料类型:${a.kind}`,` 正文用途:${a.contentUse}`,a.relatedFacts.length?` 可用事实方向:${a.relatedFacts.join("、")}`:"",a.snippets.length?` 可用内容:${a.snippets.map(j).filter(Boolean).join(" / ")}`:""].filter(Boolean).join("\n")),e=q(a.textEvidence,c?Math.floor(.65*c):void 0,(a,b)=>`${i(a,b)}
|
|
53
|
+
类型:${a.processingType||"reference"}
|
|
54
|
+
章节/片段:${a.sectionTitle?.replace(f.tK,"")||"资料片段"}
|
|
55
|
+
内容:${j(a.content).replace(/\s+/gu," ")}`),g=d.omitted+e.omitted>0?`提示:完整证据池仍保留 ${a.textEvidence.length} 条文本片段、${a.resources.length} 个结构化材料;为控制单次模型输入,本次只发送预算内高相关且覆盖多来源的证据,未发送片段将在章节/小节相关检索和质量校验中继续参与。`:"";return[a.summary,g,d.lines.length?`结构化资料:
|
|
56
|
+
${d.lines.join("\n")}`:"",e.lines.length?`文本/附件片段:
|
|
57
|
+
${e.lines.join("\n\n---\n\n")}`:""].filter(Boolean).join("\n\n")}},70963:(a,b,c)=>{c.d(b,{C:()=>r,i:()=>q});var d=c(73024),e=c(76760),f=c(95734),g=c(22157),h=c(80439);function i(a){return a.map(a=>`${a.filePath}
|
|
58
|
+
${a.sectionTitle||""}
|
|
59
|
+
${a.content}`).join("\n")}let j={scope:{title:"项目基本信息、工程范围、主要工程内容",pattern:/项目名称|工程名称|招标范围|施工范围|建设内容|建设规模|建筑面积|工程概况|清单|图纸/u,guidance:"重点填充 works、requirements。必须识别项目名称、建设地点、建设规模、招标范围、工程内容;有来源才写。"},methods:{title:"关键施工方法与专业工序",pattern:/施工方法|施工工艺|工序|流程|专项|装饰|装修|加固|电气|给排水|消防|智能化|暖通|屋面|外墙/u,guidance:"重点填充 methods,并关联 applicableWorks。步骤必须来自资料或由资料中的专业工程内容直接归纳。"},resources:{title:"材料、设备、劳动力、工程量资源",pattern:/材料|设备|机械|劳动力|工程量|清单|规格|型号|数量|单位|暂估|主材/u,guidance:"重点填充 resources。材料设备和工程量能确认多少写多少,数量和单位不得编造。"},scheduleStandards:{title:"工期节点、质量目标、标准规范、验收要求",pattern:/工期|日历天|开工|竣工|节点|进度|质量|验收|标准|规范|合格|创优/u,guidance:"重点填充 schedule、standards。必须优先抽取总工期、质量标准、验收标准和关键节点。"},risksSite:{title:"现场条件、重难点、风险与约束",pattern:/现场|周边|交通|既有|营业|拆除|保护|安全|文明|扬尘|噪声|风险|难点|危大/u,guidance:"重点填充 risks、siteConditions。风险必须给出资料支撑的原因和控制方向。"},requirementsAddendum:{title:"招标管理要求、补疑澄清与修正",pattern:/招标|投标|合同|要求|承包|分包|保修|补疑|澄清|答疑|修正|变更/u,guidance:"重点填充 requirements、addendumChanges。补疑澄清必须写 original、revised、sourceFile;无法确认原文时不要编造。"}};function k(a,b,c=8){return[...new Set(a.filter(a=>b.test(a.content)||b.test(a.sectionTitle||"")||b.test(a.filePath)).map(a=>a.filePath))].slice(0,c)}function l(a){return a.works.length+a.methods.length+a.resources.length+a.schedule.length+a.standards.length+a.risks.length+a.requirements.length+a.siteConditions.length+a.addendumChanges.length}function m(a){let b=e.join(process.env.HOME||process.cwd(),".customize-agent","cache","document-workflow",(0,g.c6)(a||"default"));return d.mkdirSync(b,{recursive:!0}),b}function n(a,b){if(!a)return{ok:!1,reasons:["LLM 未返回可解析的 ProjectGraph JSON"]};let c=[],d=l(a),e=i(b);0===d&&c.push("ProjectGraph 全部节点为空"),/招标范围|施工范围|建设内容|工程名称|项目名称|工程量|清单|图纸/u.test(e)&&0===a.works.length&&c.push("缺少工程范围/主要工程内容 works"),/工期|日历天|进度/u.test(e)&&0===a.schedule.length&&c.push("资料包含工期信息但 schedule 为空"),/质量|验收|标准|规范/u.test(e)&&0===a.standards.length&&c.push("资料包含质量/验收/标准信息但 standards 为空"),/材料|设备|机械|劳动力|工程量|清单/u.test(e)&&0===a.resources.length&&c.push("资料包含资源或工程量信息但 resources 为空");let f=[...a.works,...a.methods,...a.resources,...a.schedule,...a.standards,...a.risks,...a.requirements,...a.siteConditions].filter(a=>(a.sourceFiles||[]).length>0).length+a.addendumChanges.filter(a=>a.sourceFile).length;return d>0&&0===f&&c.push("图谱节点缺少来源文件"),{ok:0===c.length,reasons:c}}function o(a,b=!1){let c=a.works.length+a.methods.length+a.resources.length+a.schedule.length+a.standards.length+a.risks.length+a.requirements.length+a.siteConditions.length+a.addendumChanges.length;return(0,h.X5)({type:"file_understanding",roleId:"project-graph",status:"success",message:`${b?"复用缓存:":""}${a.works.length}工程 ${a.methods.length}工法 ${a.resources.length}资源 ${a.schedule.length}节点 ${a.standards.length}标准 ${a.risks.length}风险 ${a.requirements.length}要求 ${a.siteConditions.length}条件 ${a.addendumChanges.length}修正${a.gaps.length?` ${a.gaps.length}缺口`:""}(${c}项)`,details:[...a.works.slice(0,3).map(a=>a.name),...a.resources.slice(0,3).map(a=>a.name),...a.gaps.slice(0,3)]},{subtitle:"项目图谱分析"})}function p(a){return(0,h.X5)({type:"file_understanding",roleId:"project-graph",status:"failed",message:`项目图谱分析失败:${a.slice(0,3).join(";")}`,details:a.slice(0,8)},{subtitle:"项目图谱分析"})}async function q(a){var b;if((0,g.Te)(a.signal),0===a.evidence.length)return{stage:p(["未检索到项目证据,无法生成可信 LLM 项目图谱"])};let c=(b={evidence:a.evidence,requirement:a.requirement,templateId:a.templateId,projectRoot:a.projectRoot},(0,g.c6)({version:"project-graph-v5-short-timeout-single-pass",requirement:b.requirement||"",templateId:b.templateId||"",evidence:b.evidence.map(a=>({filePath:a.filePath,fileSig:function(a,b){if(!a)return;let c=e.isAbsolute(b)?b:e.join(a,b);try{let a=d.statSync(c);return{mtimeMs:a.mtimeMs,size:a.size}}catch{return}}(b.projectRoot,a.filePath),sectionTitle:a.sectionTitle,contentHash:(0,g.c6)({length:a.content.length,head:a.content.slice(0,8e3),tail:a.content.slice(-8e3)})})).sort((a,b)=>`${a.filePath}${a.sectionTitle}`.localeCompare(`${b.filePath}${b.sectionTitle}`))})),h=function(a,b){let c=m(a);if(c)try{let a=JSON.parse(d.readFileSync(e.join(c,`project-graph-${b}.json`),"utf8"));return a&&Array.isArray(a.works)?a:void 0}catch{return}}(a.projectRoot,c),q=h?n(h,a.evidence):void 0;if(h&&q?.ok)return{graph:h,stage:o(h,!0)};let r=[...a.evidence].sort((a,b)=>b.score-a.score),s=function(a){let b=i(a),c=(a,c)=>{let d=function(a,b){let c=a.match(b);return c?.[1]?.replace(/\s+/gu," ").trim().slice(0,500)||""}(b,c);return d?`${a}:${d}`:""};return[c("项目名称",/(?:招标项目名称|项目名称|工程名称)[::\s]*([^。;\n]{3,120})/u),c("建设地点",/(?:建设地点|项目地点|实施地点)[::\s]*([^。;\n]{3,160})/u),c("建设规模",/(?:建设规模|建筑面积|总建筑面积)[::\s]*([^。;\n]{3,120})/u),c("计划工期",/(?:计划工期|总工期|工期要求|工期总日历天数)[::\s]*([^。;\n]{2,80})/u),c("质量标准",/(?:质量标准|质量要求|质量目标)[::\s]*([^。;\n]{2,120})/u),c("招标范围",/(?:招标范围|工程承包范围|施工范围|建设内容)[::\s]*([\s\S]{20,700}?)(?=\n#{1,4}\s|\n\d+[.、]\s|质量|工期|$)/u),k(a,/补疑|澄清|答疑|修正/u).length?`补疑澄清文件:${k(a,/补疑|澄清|答疑|修正/u).join("、")}`:""].filter(Boolean)}(r),t=[];async function u(b,c=[]){let d=function(a,b,c=52e3){let d=j[b],e=[...a].sort((a,b)=>{let c=+!!d.pattern.test(`${a.filePath}${a.sectionTitle||""}${a.content}`);return!!d.pattern.test(`${b.filePath}${b.sectionTitle||""}${b.content}`)-c||b.score-a.score}),f=[],g=0;for(let a of e){let b={...a,content:a.content.replace(/\s+/gu," ").trim().slice(0,5e3)};if((!(g+b.content.length>c)||!(f.length>=8))&&(f.push(b),(g+=b.content.length)>=c||f.length>=18))break}return f}(r,b,c.length?64e3:52e3),h=await (0,f.bb)(`通读以下项目资料(招标文件、工程量清单、图纸设计说明、补疑文件等),
|
|
60
|
+
输出一个 JSON 对象,描述你对该项目的完整理解。
|
|
61
|
+
|
|
62
|
+
JSON 字段(全部为数组,无相关信息时返回空数组):
|
|
63
|
+
works: [{name, scope, sourceFiles, relatedItems}]
|
|
64
|
+
methods: [{name, steps, applicableWorks, sourceFiles}]
|
|
65
|
+
resources: [{name, type:"material"|"equipment"|"labor", spec, quantity, unit, sourceFiles}]
|
|
66
|
+
schedule: [{milestone, duration, startDate, endDate, sourceFiles}]
|
|
67
|
+
standards: [{code, description, sourceFiles}]
|
|
68
|
+
risks: [{risk, level:"high|medium|low", mitigation, sourceFiles}]
|
|
69
|
+
requirements: [{category, detail, sourceFiles}]
|
|
70
|
+
siteConditions: [{condition, impact, sourceFiles}]
|
|
71
|
+
addendumChanges: [{originalPath, original, revised, sourceFile}]
|
|
72
|
+
gaps: [string]
|
|
73
|
+
|
|
74
|
+
只基于资料内容,不编造。每个条目标注来源文件。只返回 JSON。
|
|
75
|
+
|
|
76
|
+
当前只抽取分域:${j[b].title}。其他字段可以返回空数组,但本分域相关字段必须尽最大能力从证据中抽取。${c.length?`
|
|
77
|
+
本次定向修复原因:${c.join(";")}`:""}`,function(a,b,c){let d=j[b];return[`请抽取项目图谱分域:${d.title}`,d.guidance,"确定性线索仅用于帮助定位原文,不得作为最终图谱事实直接照抄;最终 JSON 必须由资料证据支撑。",c.length?`定位线索:
|
|
78
|
+
${c.map(a=>`- ${a}`).join("\n")}`:"",function(a){let b=a.map((a,b)=>{let c=`[${b+1}] ${a.filePath}`,d=a.sectionTitle?` / ${a.sectionTitle}`:"";return`${c}${d}
|
|
79
|
+
${a.content.replace(/\s+/gu," ").trim()}`}).join("\n\n---\n\n");return`请从以下项目资料中提取结构化理解:
|
|
80
|
+
|
|
81
|
+
${b}
|
|
82
|
+
|
|
83
|
+
返回 JSON。`}(a)].filter(Boolean).join("\n\n")}(d,b,s),{temperature:.1*!c.length,signal:a.signal});(0,g.Te)(a.signal);if(!h)return;let i=new Set(d.map(a=>a.filePath)),k=a=>"string"==typeof a&&(i.has(a)||d.some(b=>e.basename(b.filePath)===e.basename(a))),l=(a,b)=>"string"==typeof a?a.slice(0,b):"number"==typeof a?String(a).slice(0,b):"",m=(a,b)=>(Array.isArray(a)?a.filter(a=>"string"==typeof a&&a.length>0):[]).slice(0,b);return{works:(h.works||[]).filter(a=>"string"==typeof a.name&&"string"==typeof a.scope).map(a=>({name:l(a.name,200),scope:l(a.scope,500),sourceFiles:m(a.sourceFiles,10).filter(k),relatedItems:m(a.relatedItems,20)})),methods:(h.methods||[]).filter(a=>"string"==typeof a.name).map(a=>({name:l(a.name,200),steps:m(a.steps,12),applicableWorks:m(a.applicableWorks,10),sourceFiles:m(a.sourceFiles,10).filter(k)})),resources:(h.resources||[]).filter(a=>"string"==typeof a.name).map(a=>({name:l(a.name,200),type:"material"===a.type||"equipment"===a.type||"labor"===a.type?a.type:"material",spec:l(a.spec,200),quantity:l(a.quantity,50),unit:l(a.unit,20),sourceFiles:m(a.sourceFiles,5).filter(k)})),schedule:(h.schedule||[]).filter(a=>"string"==typeof a.milestone).map(a=>({milestone:l(a.milestone,200),duration:l(a.duration,100),startDate:l(a.startDate,50),endDate:l(a.endDate,50),sourceFiles:m(a.sourceFiles,5).filter(k)})),standards:(h.standards||[]).filter(a=>"string"==typeof a.code||"string"==typeof a.description).map(a=>({code:l(a.code,100),description:l(a.description,300),sourceFiles:m(a.sourceFiles,5).filter(k)})),risks:(h.risks||[]).filter(a=>"string"==typeof a.risk).map(a=>({risk:l(a.risk,300),level:"high"===a.level||"medium"===a.level||"low"===a.level?a.level:"medium",mitigation:l(a.mitigation,500),sourceFiles:m(a.sourceFiles,5).filter(k)})),requirements:(h.requirements||[]).filter(a=>"string"==typeof a.category&&"string"==typeof a.detail).map(a=>({category:l(a.category,100),detail:l(a.detail,500),sourceFiles:m(a.sourceFiles,5).filter(k)})),siteConditions:(h.siteConditions||[]).filter(a=>"string"==typeof a.condition).map(a=>({condition:l(a.condition,300),impact:l(a.impact,500),sourceFiles:m(a.sourceFiles,5).filter(k)})),addendumChanges:(h.addendumChanges||[]).filter(a=>"string"==typeof a.original&&"string"==typeof a.revised).map(a=>({originalPath:l(a.originalPath,300),original:l(a.original,300),revised:l(a.revised,500),sourceFile:l(a.sourceFile,200)})),gaps:m(h.gaps,20),generatedAt:Date.now()}}async function v(b=[]){let c=Object.keys(j),d=(await (0,g.l$)(c,async c=>{try{let a=await u(c,b);if(a&&l(a)>0)return a;t.push(`${j[c].title} 未抽取到有效节点`)}catch(b){if(a.signal?.aborted)throw b;t.push(`${j[c].title} LLM 调用失败:${b instanceof Error?b.message:String(b)}`)}},{kind:"llmRepair",targetWords:4e3,concurrency:Number(process.env.DOCUMENT_PROJECT_GRAPH_DOMAIN_CONCURRENCY||2)})).filter(a=>!!a);return d.length?function(a){let b={w:new Set,m:new Set,r:new Set,sc:new Set,st:new Set,ri:new Set,rq:new Set,si:new Set,a:new Set};return{works:a.flatMap(a=>a.works).filter(a=>{let c=a.name+a.scope;return!b.w.has(c)&&(b.w.add(c),!0)}),methods:a.flatMap(a=>a.methods).filter(a=>{let c=a.name;return!b.m.has(c)&&(b.m.add(c),!0)}),resources:a.flatMap(a=>a.resources).filter(a=>{let c=a.name+a.spec+a.type;return!b.r.has(c)&&(b.r.add(c),!0)}),schedule:a.flatMap(a=>a.schedule).filter(a=>{let c=a.milestone;return!b.sc.has(c)&&(b.sc.add(c),!0)}),standards:a.flatMap(a=>a.standards).filter(a=>{let c=a.code+a.description;return!b.st.has(c)&&(b.st.add(c),!0)}),risks:a.flatMap(a=>a.risks).filter(a=>{let c=a.risk;return!b.ri.has(c)&&(b.ri.add(c),!0)}),requirements:a.flatMap(a=>a.requirements).filter(a=>{let c=a.category+a.detail;return!b.rq.has(c)&&(b.rq.add(c),!0)}),siteConditions:a.flatMap(a=>a.siteConditions).filter(a=>{let c=a.condition;return!b.si.has(c)&&(b.si.add(c),!0)}),addendumChanges:a.flatMap(a=>a.addendumChanges).filter(a=>{let c=a.original+a.revised;return!b.a.has(c)&&(b.a.add(c),!0)}),gaps:[...new Set(a.flatMap(a=>a.gaps))],generatedAt:Date.now()}}(d):void 0}try{let b=await v(),f=n(b,r);if(f.ok&&b||b&&l(b)>0)return function(a,b,c){let f=m(a);f&&c&&d.writeFileSync(e.join(f,`project-graph-${b}.json`),JSON.stringify(c,null,2))}(a.projectRoot,c,b),{graph:b,stage:o(b)};return{stage:p([...f.reasons,...t])}}catch(b){if(a.signal?.aborted)throw b;return console.error("[project-graph] failed:",b),{stage:p([b instanceof Error?b.message:String(b),...t])}}}function r(a){let b=["## 项目资料图谱分析结果",""];for(let c of a.works)2===b.length&&b.push("### 主要工程内容"),b.push(`- **${c.name}**:${c.scope}`);for(let c of(a.works.length&&b.push(""),a.methods))b.includes("### 关键施工方法与工艺")||b.push("### 关键施工方法与工艺"),b.push(`- **${c.name}**:${c.steps.filter(Boolean).join(" → ")}`);for(let c of(a.methods.length&&b.push(""),a.resources)){b.includes("### 资源需求")||b.push("### 资源需求");let a={material:"材料",equipment:"设备",labor:"劳动力"}[c.type]||"资源";b.push(`- [${a}] ${c.name}${c.spec?`(${c.spec})`:""}${c.quantity?` ${c.quantity}${c.unit}`:""}`)}for(let c of(a.resources.length&&b.push(""),a.schedule))b.includes("### 工期与关键节点")||b.push("### 工期与关键节点"),b.push(`- ${c.milestone}:${c.duration}(${c.startDate} ~ ${c.endDate})`);for(let c of(a.schedule.length&&b.push(""),a.standards))b.includes("### 技术标准与验收要求")||b.push("### 技术标准与验收要求"),b.push(`- **${c.code}**:${c.description}`);for(let c of(a.standards.length&&b.push(""),a.risks))b.includes("### 重点难点与风险")||b.push("### 重点难点与风险"),b.push(`- **[${c.level}] ${c.risk}**:${c.mitigation}`);for(let c of(a.risks.length&&b.push(""),a.requirements))b.includes("### 特定要求")||b.push("### 特定要求"),b.push(`- [${c.category}] ${c.detail}`);for(let c of(a.requirements.length&&b.push(""),a.siteConditions))b.includes("### 现场条件与约束")||b.push("### 现场条件与约束"),b.push(`- ${c.condition}:${c.impact}`);for(let c of(a.siteConditions.length&&b.push(""),a.addendumChanges))b.includes("### 补疑修正")||b.push("### 补疑修正"),b.push(`- "${c.original}" → "${c.revised}"`);for(let c of(a.addendumChanges.length&&b.push(""),a.gaps))b.includes("### 资料缺口")||b.push("### 资料缺口"),b.push(`- ${c}`);return a.gaps.length&&b.push(""),b.join("\n")}},80439:(a,b,c)=>{function d(a){return a?({"knowledge-base":"知识库","document-readiness":"生成准备度检查","quality-repair":"质量补写","export-gate":"导出门禁","final-format":"正式排版","multimodal-files":"多模态文件理解","llm-json":"LLM 事实抽取","llm-review":"LLM 审查","document-workflow":"最终规范校验"})[a]:void 0}function e(a,b={}){let c={executionVersion:2,title:{role_binding:"项目角色配置绑定",knowledge_retrieval:"知识库证据检索",file_understanding:"项目资料理解",fact_extraction:"事实抽取",chapter_generation:"章节正文生成",asset_generation:"生成资源处理",llm_review:"LLM 审查优化",validation:"内容优化与质量校验",formatting:"正式排版整理",export_ready:"导出就绪检查",reference:"资料增强"}[a.type],group:a.type,...a,...b};return{...c,roleName:c.roleName||d(c.roleId),subtitle:c.subtitle||c.roleName||d(c.roleId)}}function f(a,b){let c=a=>"chapter_generation"===a.type||/^agent-(?:reviewer|repairer|chapter-task|final-gate-repair)-/u.test(a.roleId||"")?[a.type,a.roleId||"",a.promptId||"",a.subtitle||"",a.order??""].join("::"):[a.type,a.roleId||"",a.promptId||""].join("::"),d=c(b),e=a.findIndex(a=>c(a)===d);return e>=0?(a[e]={...b,order:a[e]?.order??b.order},e):(a.push(b),a.length-1)}function g(a,b){return`${a},耗时 ${Math.round((Date.now()-b)/1e3)} 秒`}c.d(b,{AQ:()=>g,X5:()=>e,fx:()=>f})},81125:(a,b,c)=>{c.d(b,{h:()=>e,o:()=>f});var d=c(92808);function e(a,b){let c=function(a,b){let c=[a.name,a.category,a.description,a.outputTitle,...a.chapters.flatMap(a=>[a.title,a.purpose])].join("\n"),d=new Set(["project_overview","scope_description"]);return/需求|规则|响应|方案|实施|专项|安全|质量|进度|合规|施工组织|技术标/iu.test(c)&&["requirement_document","structured_data"].forEach(a=>d.add(a)),(/安全|质量|进度|工期|文明|环保|验收/iu.test(c)||b.materialInventory.schedule_quality_safety.length>0)&&d.add("schedule_quality_safety"),(/设计|图纸|平面|立面|剖面|做法/iu.test(c)||b.materialInventory.design_specification.length>0)&&d.add("design_specification"),(/风险|重点|难点|约束|现场|危大/iu.test(c)||b.materialInventory.risk_constraints.length>0)&&d.add("risk_constraints"),d}(a,b);return[...new Set([...function(a){let b=[a.name,a.description,a.outputTitle,...a.chapters.flatMap(a=>[a.title,a.purpose,...a.requiredFacts||[],...a.queries||[]])].join("\n"),c=new Set((0,d.t0)(b,d.hW));return c.add("project_overview"),c.add("scope_description"),[...c]}(a),...c])].map(a=>{let d=b.materialInventory[a]||[],e=c.has(a),f=d.length>0,g=f&&d.length<(e?2:1);return{role:a,required:e,satisfied:f,weak:g,evidenceCount:d.length,filePaths:d.map(a=>a.filePath),reason:f?`已匹配 ${d.length} 个资料文件`:e?"必需资料角色缺失":"可选资料角色缺失"}})}function f(a){if(0===a.length)return 1;let b=a.filter(a=>a.required),c=a.filter(a=>!a.required),d=b.length?b.filter(a=>a.satisfied).length/b.length:1;return Math.max(0,Math.min(1,.75*d+.2*(c.length?c.filter(a=>a.satisfied).length/c.length:1)+.05-.05*!!b.some(a=>a.weak)))}},85441:(a,b,c)=>{c.d(b,{F:()=>u,P:()=>s});var d=c(76760),e=c(44533),f=c(92808);let g=["project_overview","requirement_document","structured_data","scope_description"],h=["project_overview","requirement_document","addendum","structured_data","budget_cost","design_specification","resource_recommendation","schedule_quality_safety","scope_description","technical_specification","risk_constraints"];function i(a){let b=[];for(let c of a)for(let a of c.relativePath.split(/[\\/]/gu))a&&b.push(a);return b}function j(a){return/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|\d{1,2}\.\d{1,2}/u.test(a)}function k(a){return m(a).replace(/^\d+(?:\.\d+)?[-_\s]*/u,"").replace(/^(?:延期到\d+(?:\.\d+)?[-_—–\s]*)+/u,"").trim()}function l(a){let b=new Set,c=[];for(let d of a)!d||b.has(d)||(b.add(d),c.push(d));return c}function m(a){return a.replace(/\.(?:pdf|docx?|xlsx?|xls|dwg)$/iu,"").trim()}function n(a){let b=new Set,c=[];for(let d of i(a)){let a=k(d);!(!/项目|任务|文档|合同|计划|方案|工程/iu.test(a)||a.length<6||b.has(a))&&(!j(a)||/\.\w+$/u.test(d))&&(b.add(a),c.push(a))}return c}function o(a,b){return 0===a.length?b:a.map(a=>m(a.fileName)).join("、")}function p(a,b,c){b.lastIndex=0;let d=new Set,e=[];for(let f of a.matchAll(b)){let a=(f[c]||"").trim();!a||d.has(a)||(d.add(a),e.push(a))}return b.lastIndex=0,e}function q(a){return a.replace(/\\/gu,"/").replace(/^\/+|\/+$/gu,"")}function r(a){let b=q(a).split("/").filter(Boolean);return b.length>1?b[0]:void 0}function s(a,b){let c=(0,e.Yy)(a),m=function(a,b){let c=a.filter(a=>"error"!==a.status),d=new Set((b?.boundFilePaths||[]).map(q)),e=c.filter(a=>d.has(q(a.relativePath)));if(e.length>0){let a=[...new Set(e.map(a=>r(a.relativePath)).filter(Boolean))],b=1===a.length?a[0]:void 0;return{files:e,reason:b?`模板绑定文件定位到资料组:${b}`:"使用模板显式绑定文件作为资料范围",ambiguous:!1}}let f=(b?.requirement||"").trim();if(f){let a=new Map;for(let b of c){let c=r(b.relativePath);if(!c)continue;let d=function(a,b){let c=0;for(let d of a.split(/(?:\s|_|-|—|(|)|\(|\)|【|】|\[|\]|、|,|,)+/u)){let a=d.trim();a.length>=2&&b.includes(a)&&(c+=1)}return c}(c,f);d>0&&a.set(c,(a.get(c)||0)+d)}let b=[...a.entries()].sort((a,b)=>b[1]-a[1])[0];if(b)return{files:c.filter(a=>r(a.relativePath)===b[0]),reason:`需求描述定位到资料组:${b[0]}`,ambiguous:!1}}let g=[...new Set(c.map(a=>r(a.relativePath)).filter(Boolean))];return 1===g.length?{files:c.filter(a=>r(a.relativePath)===g[0]),reason:`知识库单一资料组:${g[0]}`,ambiguous:!1}:{files:c,reason:g.length>1?`未指定资料组,检测到 ${g.length} 个资料组,已阻断生成避免跨项目污染`:"未检测到资料组,使用全部资料",ambiguous:g.length>1}}(c,b),s=m.files,t=function(){let a={};for(let b of h)a[b]=[];return a}(),u=new Map((b?.boundFileRoles||[]).map(a=>[q(a.filePath),a.roles]));for(let a of s){let b=q(a.relativePath),c=[...u.entries()].filter(([a])=>b.endsWith(a)||a.endsWith(b)).flatMap(([,a])=>a);for(let b of[...new Set([...function(a){let b=new Set((0,f.t0)(a,f.hW));return b.add("project_overview"),[...b]}(a.relativePath),...c])])t[b].push({filePath:a.relativePath,fileName:d.basename(a.relativePath),role:b,chunkCount:a.chunkCount})}let v=function(a){let b,c;for(let d of i(a)){let a=k(d);if(/项目|工程/iu.test(a)&&!(a.length<6)){if(/\.\w+$/u.test(d)){b||=a;continue}if(j(a)){c||=a.split(/--/u).filter(a=>/项目|工程/u.test(a)).sort((a,b)=>a.length-b.length)[0]||a;continue}return a}}return b||c||"当前知识库项目"}(s),w=function(a){for(let b of a){let a=b.relativePath.match(/\b\d{4}[A-Z]{2,}\d{4,}\b/u)?.[0];if(a)return a}}(s),x=function(a,b){let c=n(a),d=n(b),e=l(a.map(a=>a.relativePath).join("\n").match(/\b\d{4}[A-Z]{2,}\d{4,}\b/gu)||[]),f=l(a.map(a=>r(a.relativePath)).filter(Boolean)),g=[c.length>0,e.length>0,1===f.length];return{fingerprint:{projectNames:c,documentNos:e,fileGroups:f,confidence:g.filter(Boolean).length/g.length},contaminationCandidates:d.filter(a=>!c.includes(a))}}(s,c),y=function(a){let b=function(a){let b="";for(let c of a)b+=`${c.relativePath}
|
|
84
|
+
`;return b}(a);return{ownerNames:p(b,/(?:责任主体|委托人|客户|甲方|乙方|需求方|服务方|执行方|负责人)[::]?([^\\/\n,,。;;]{2,40})/gu,1),locationNames:p(b,/(?:项目地点|实施地点|服务地点|交付地点|项目地址|执行地点)[::]?([^\\/\n,,。;;]{2,50})/gu,1),scheduleValues:p(b,/(\d+\s*(?:天|周|个月|月|年|小时)|(?:周期|期限|交付|完成)[^\\/\n,,。;;]{0,30})/gu,1),qualityTargets:p(b,/(?:质量(?:标准|目标|要求)?[::]?[^\\/\n,,。;;]{2,40}|合格|优良)/gu,0)}}(s),z=function(a){let b=new Set(g);for(let c of["design_specification","schedule_quality_safety","risk_constraints","resource_recommendation","technical_specification","budget_cost","addendum"])a[c].length>0&&b.add(c);return[...b]}(t),A=z.filter(a=>t[a].length>0),B=z.filter(a=>0===t[a].length);return{projectId:v.replace(/[^a-zA-Z0-9\u4e00-\u9fa5_-]/gu,"-").slice(0,80)||"current-project",projectName:v,generatedAt:Date.now(),fingerprint:x.fingerprint,contaminationCandidates:x.contaminationCandidates,source:{totalFiles:c.length,selectedFiles:s.length,selectionReason:m.reason,ambiguous:m.ambiguous},facts:{projectName:v,documentNo:w,scopeDescriptions:t.scope_description.map(a=>a.fileName.replace(/\.(?:pdf|docx?|xlsx?|xls|dwg)$/iu,"")),professionalScopes:[...new Set(t.scope_description.concat(t.design_specification,t.structured_data).map(a=>a.fileName.replace(/\.(?:pdf|docx?|xlsx?|xls|dwg)$/iu,"")))],scheduleRequirement:t.schedule_quality_safety.length?"已识别周期、质量、安全或合规相关资料,生成时应以需求文件、变更说明和技术要求为准。":void 0,qualityRequirement:t.schedule_quality_safety.length?"已识别质量或评价相关资料。":void 0,safetyRequirement:t.schedule_quality_safety.length?"已识别安全或合规相关资料。":void 0,materialBrandRequirement:t.resource_recommendation.length?"已识别资源、材料、设备或品牌相关资料。":void 0,ownerNames:y.ownerNames,locationNames:y.locationNames,scheduleValues:y.scheduleValues,qualityTargets:y.qualityTargets},materialInventory:t,extractedSections:{projectOverview:`绑定材料组:${v}${w?`,文档/任务编号:${w}`:""}。`,scopeSummary:`范围资料:${o(t.scope_description,"未识别到明确范围资料")}。`,designSummary:`设计/方案/说明资料:${o(t.design_specification,"未识别到设计、方案或说明资料")}。`,structuredDataSummary:`结构化数据资料:${o(t.structured_data,"未识别到表格、列表或明细资料")}。`,scheduleQualitySafetySummary:`周期质量安全资料:${o(t.schedule_quality_safety,"未识别到周期、质量或安全专项资料")}。`,constraintsAndRisks:`约束和风险资料:${o(t.risk_constraints,"未识别到重点难点或约束资料")}。`},coverage:{requiredRoles:z,satisfiedRoles:A,missingRoles:B,materialCompletenessRate:z.length?A.length/z.length:1}}}function t(a){return a.replace(/OCR|识别错误|乱码/giu,"资料文字不清").replace(/知识库|提示词|后台|绑定片段|兜底/gu,"项目资料").replace(/PDF|DWG|Excel|XLSX?|DOCX?/giu,"资料文件")}function u(a,b={}){return b.publicSafe?["## 项目资料事实边界",t(a.extractedSections.projectOverview),`明确事实:责任主体 ${a.facts.ownerNames?.join("、")||"资料未明确"};地点 ${a.facts.locationNames?.join("、")||"资料未明确"};周期 ${a.facts.scheduleValues?.join("、")||"资料未明确"};质量 ${a.facts.qualityTargets?.join("、")||"资料未明确"}。`,t(a.extractedSections.scopeSummary),t(a.extractedSections.structuredDataSummary),t(a.extractedSections.designSummary),t(a.extractedSections.scheduleQualitySafetySummary),t(a.extractedSections.constraintsAndRisks),"仅使用资料中明确、可信的事实;资料未明确的工程实体事实不得推导,允许推导的计划配置类数据须明确标注为计划配置值。"].filter(Boolean).join("\n"):["## 后台绑定材料摘要",a.extractedSections.projectOverview,`材料指纹:对象名候选 ${a.fingerprint.projectNames.join("、")||"无"};编号 ${a.fingerprint.documentNos.join("、")||"无"};资料组 ${a.fingerprint.fileGroups.join("、")||"无"};置信度 ${Math.round(100*a.fingerprint.confidence)}%。`,`内容级事实候选:责任主体 ${a.facts.ownerNames?.join("、")||"无"};地点 ${a.facts.locationNames?.join("、")||"无"};周期 ${a.facts.scheduleValues?.join("、")||"无"};质量 ${a.facts.qualityTargets?.join("、")||"无"}。`,a.extractedSections.scopeSummary,a.extractedSections.structuredDataSummary,a.extractedSections.designSummary,a.extractedSections.scheduleQualitySafetySummary,a.extractedSections.constraintsAndRisks,`资料满足率:${Math.round(100*a.coverage.materialCompletenessRate)}%`].join("\n")}},91977:(a,b,c)=>{c.d(b,{I2:()=>g,Lk:()=>e,Uy:()=>f});var d=c(70208);function e(a,b){let c=`${a.filePath}
|
|
85
|
+
${a.content}`;return(function(a){let b=a.replace(/要求|计划|目标|标准|内容|信息|事实|依据|参数|范围|要点/gu,"");return[a,b].filter(Boolean)})(b).some(a=>c.includes(a))}function f(a,b){let c=(0,d._9)(a,b).flatMap(a=>a.requiredFacts).map(a=>({id:a,name:a,required:!0,sourceRoleIds:[],extractionHint:""})),e=b?.factFields.map(a=>({id:a.id,name:a.name,required:a.required,sourceRoleIds:a.sourceRoleIds||[],extractionHint:a.extractionHint||""}))||[],f=new Map;for(let a of[...c,...e])f.set(a.id,{...f.get(a.id)||a,...a,required:a.required||f.get(a.id)?.required||!1});return[...f.values()]}function g(a,b){return(!b.sourceRoleIds?.length||!!(a.roleId&&b.sourceRoleIds.includes(a.roleId)))&&e(a,b.name)}},92808:(a,b,c)=>{c.d(b,{NT:()=>e,Ny:()=>f,hW:()=>g,nt:()=>d,rs:()=>i,t0:()=>h});let d=[{id:"report",label:"报告",patterns:[/报告|调研|分析|评估|研究|复盘|总结/iu],output:["报告"]},{id:"plan",label:"实施方案",patterns:[/方案|规划|计划|预案|路径|路线图/iu],output:["实施方案"]},{id:"standard",label:"规范说明",patterns:[/规范|标准|制度|规则|指南|手册/iu],output:["规范说明"]},{id:"proposal",label:"建议方案",patterns:[/建议|提案|需求|响应|说明书/iu],output:["建议方案"]}],e=[{id:"requirement",label:"需求规则资料",patterns:[/需求|要求|规则|条款|约束|响应|澄清|变更/iu],output:["需求约束","规则要求","变更说明"]},{id:"scope",label:"范围资料",patterns:[/范围|内容|任务|目标|边界|对象|工作内容/iu],output:["实施范围","对象范围"]},{id:"structured-data",label:"结构化数据资料",patterns:[/表格|列表|明细|数量|数据|字段|参数|规格|sheet|table|data/iu],output:["结构化数据范围","参数规格范围"]},{id:"quality",label:"质量评价资料",patterns:[/质量|验收|审核|评审|评价|标准|规范|指标/iu],output:["质量要求","评价标准"]},{id:"schedule",label:"时间进度资料",patterns:[/周期|期限|进度|计划|节点|里程碑|时间|日期/iu],output:["周期要求","进度节点要求"]},{id:"safety",label:"安全合规资料",patterns:[/安全|合规|风险|应急|环保|隐私|审计|控制/iu],output:["安全合规要求","风险控制要求"]},{id:"resource",label:"资源配置资料",patterns:[/资源|人员|设备|材料|品牌|采购|供应|配置/iu],output:["资源配置要求"]},{id:"analysis",label:"分析结论",patterns:[/报告|调研|分析|评估|研究|建议|结论/iu],output:["背景依据","分析结论","风险建议"]}],f=[{id:"overview",label:"概况章节",patterns:[/概况|背景|理解|说明|总则|摘要/iu],output:["对象名称","材料范围","实施范围"]},{id:"implementation",label:"实施章节",patterns:[/方法|部署|实施|范围|组织|流程|步骤/iu],output:["实施范围","对象范围","结构化数据范围"]},{id:"controls",label:"控制章节",patterns:[/质量|周期|进度|安全|合规|验收|审核|评价/iu],output:["质量要求","周期要求","安全合规要求"]},{id:"resources",label:"资源章节",patterns:[/资源|人员|设备|材料|品牌|采购|供应|配置/iu],output:["资源配置要求"]},{id:"risk",label:"风险章节",patterns:[/风险|重点|难点|约束|应急|合规/iu],output:["风险控制要求","风险建议"]}],g=[{id:"requirement",label:"需求规则资料",patterns:[/需求|要求|规则|条款|响应|requirement|rule/iu],output:["requirement_document"]},{id:"change",label:"变更澄清资料",patterns:[/补充|澄清|变更|修订|addendum|change/iu],output:["addendum"]},{id:"structured-data",label:"结构化数据资料",patterns:[/表格|列表|明细|数量|数据|字段|参数|规格|sheet|table|data/iu],output:["structured_data"]},{id:"budget",label:"预算费用资料",patterns:[/预算|费用|金额|报价|限价|成本|price|cost|budget/iu],output:["budget_cost"]},{id:"design",label:"设计方案资料",patterns:[/设计|方案|说明|图像|地图|附件|drawing|image|map|design/iu],output:["design_specification"]},{id:"resource",label:"资源配置资料",patterns:[/资源|人员|设备|材料|品牌|采购|供应|配置/iu],output:["resource_recommendation"]},{id:"schedule-quality-safety",label:"进度质量合规资料",patterns:[/质量|周期|进度|安全|合规|验收|审核|评价|环保|应急/iu],output:["schedule_quality_safety"]},{id:"scope",label:"范围任务资料",patterns:[/范围|内容|任务|目标|边界|对象|工作内容/iu],output:["scope_description"]},{id:"technical",label:"技术标准资料",patterns:[/技术|规范|标准|规程|指南|手册|参数|spec|standard/iu],output:["technical_specification"]},{id:"risk",label:"风险约束资料",patterns:[/风险|重点|难点|约束|限制|现场|条件|应急/iu],output:["risk_constraints"]}];function h(a,b){let c=new Set;for(let d of b)for(let b of d.patterns)if(b.lastIndex=0,b.test(a)){for(let a of d.output)c.add(a);break}return[...c]}function i(a,b){for(let c of b)for(let b of c.patterns)if(b.lastIndex=0,b.test(a))return c.output[0]}},95734:(a,b,c)=>{c.d(b,{$y:()=>j,bb:()=>l,rI:()=>k});var d=c(95393),e=c(96770),f=c(29281),g=c(22157);let h=new Map,i=0;function j(){let a=(0,f.I)().load(),b=a.models.reasoning.active||a.models.action.active||a.models.reader.active,c=[...a.models.reasoning.list,...a.models.action.list,...a.models.reader.list].find(a=>a.name===b);if(!c)return;let d=a.providers[c.provider];if(d)return{model:c,provider:d}}async function k(a,b,c=!1,f={}){f.diagnostics&&(f.diagnostics.llm.calls+=1),i+=1,f.diagnostics&&(f.diagnostics.llm.maxActive=Math.max(f.diagnostics.llm.maxActive,i));try{let i,k=j();if(!k)return;let{model:l,provider:m}=k,n=(0,g.c6)({provider:l.provider,model:l.name,baseUrl:m.baseUrl,directEndpoint:m.directEndpoint,protocol:m.protocol,apiKeyHash:m.apiKey?(0,g.c6)(m.apiKey):""}),o=h.get(n);o||(o=(0,d.createProvider)(function(a,b){let c=(0,e.resolveProtocol)(a,b);return"anthropic"===c?"anthropic":"google"===c?"google":"ollama"===c?"ollama":"openrouter"===c?"openrouter":"openai"}(l.provider,m),{baseUrl:m.baseUrl,apiKey:m.apiKey,modelName:l.name,directEndpoint:m.directEndpoint}),h.set(n,o));let p=async()=>{if(f.signal?.aborted)throw Error("用户中止");return(await o.chat([{role:"system",content:c?`${a}
|
|
86
|
+
只返回 JSON,不要返回 markdown。`:a},{role:"user",content:b}],{temperature:f.temperature??.3*!c,maxTokens:f.maxTokens,signal:f.signal})).content.trim()};for(let a=0;a<=1;a+=1){if(f.signal?.aborted)throw Error("用户中止");try{return await p()}catch(b){if(i=b,f.signal?.aborted)throw Error("用户中止",{cause:b});if(!function(a){let b=a instanceof Error?`${a.name} ${a.message}`:String(a);return/connection error|econnrefused|econnreset|fetch failed|network|socket|eai_again|enotfound|etimedout|429|502|503|504|rate ?limit|too many requests|overloaded|服务繁忙|连接失败/iu.test(b)}(b)||a>=1)break;f.diagnostics&&(f.diagnostics.llm.retries+=1),await new Promise(a=>{setTimeout(a,1200)})}}f.diagnostics&&(f.diagnostics.llm.failures+=1,f.diagnostics.llm.lastError=i instanceof Error?i.message:String(i));return}finally{i=Math.max(0,i-1)}}async function l(a,b,c={}){let d=await k(a,b,!0,{maxTokens:c.maxTokens,temperature:c.temperature,signal:c.signal,diagnostics:c.diagnostics});if(d)try{return JSON.parse(function(a){let b=a.trim(),c=b.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/iu)?.[1]?.trim();if(c)return c;let d=b.indexOf("{"),e=b.lastIndexOf("}"),f=b.indexOf("["),g=b.lastIndexOf("]"),h=d>=0&&e>d?b.slice(d,e+1):"",i=f>=0&&g>f?b.slice(f,g+1):"";return h&&(!i||d<=f)?h:i||b}(d))}catch{return}}}};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";exports.id=8661,exports.ids=[8661],exports.modules={37095:(a,b,c)=>{c.d(b,{CU:()=>q,H7:()=>p,JB:()=>m,Qf:()=>k,kW:()=>n,oy:()=>l,sn:()=>o});var d=c(29021),e=c(21820),f=c(33873),g=c(19898);function h(a){return f.join(e.homedir(),".customize-agent","projects",(0,g.computeProjectId)(a),"kb-operations.jsonl")}function i(a){let b=h(a);return d.existsSync(b)?d.readFileSync(b,"utf8").split("\n").filter(Boolean).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}}):[]}function j(a,b){let c=h(a);d.mkdirSync(f.dirname(c),{recursive:!0}),d.writeFileSync(c,`${b.slice(-200).map(a=>JSON.stringify(a)).join("\n")}
|
|
2
|
-
`,"utf8")}function k(a,b){let c=Date.now(),d=i(a),e=d.findIndex(a=>a.id===b.id),f=e>=0?d[e]:void 0,g={id:b.id,type:b.type,title:b.title,stage:b.stage??f?.stage??"uploading",status:b.status??f?.status??"processing",message:b.message??f?.message??"",percent:b.percent??f?.percent??0,fileName:b.fileName??f?.fileName,filePath:b.filePath??f?.filePath,chunkCount:b.chunkCount??f?.chunkCount,textLength:b.textLength??f?.textLength,extractionMode:b.extractionMode??f?.extractionMode,error:b.error??f?.error,details:b.details??f?.details,createdAt:f?.createdAt??c,updatedAt:c};return e>=0?d[e]=g:d.push(g),j(a,d),g}function l(a,b=50){return i(a).sort((a,b)=>b.updatedAt-a.updatedAt).slice(0,b)}function m(a,b){return i(a).find(a=>a.id===b)}function n(a,b){return i(a).filter(a=>!b||a.type===b).sort((a,b)=>b.updatedAt-a.updatedAt)[0]}function o(a){return i(a).filter(a=>"processing"===a.status).sort((a,b)=>b.updatedAt-a.updatedAt)}function p(a){let b=i(a),c=h(a);return d.existsSync(c)&&d.unlinkSync(c),b.length}function q(a,b){let c=i(a),d=c.filter(a=>a.id!==b);return d.length!==c.length&&(j(a,d),!0)}},48661:(a,b,c)=>{c.d(b,{BH:()=>J,Gl:()=>u,JU:()=>N,Jz:()=>O,M$:()=>D,QG:()=>I,SE:()=>y,YL:()=>U,a6:()=>G,r:()=>H,v7:()=>E,yE:()=>M});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(90273),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.content.trim().length>0?"completed":"failed",updatedAt:Date.now(),timedOut:a.timedOut,elapsedMs:a.elapsedMs}))}let s=new Map,t=Math.max(36e5,Number(process.env.DOCUMENT_ABANDONED_RECORD_STALE_MS??864e5));function u(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 v(a=(0,l.aY)()){return g.join(u(a),"index.json")}function w(a=(0,l.aY)()){return g.join(u(a),"assets.json")}function x(a,b=(0,l.aY)()){return g.join(u(b),"drafts",`${a}.json`)}function y(a,b=(0,l.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(u(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join(b,"knowledgeBase",a.path):null}function z(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function A(a,b){e.mkdirSync(g.dirname(a),{recursive:!0}),e.writeFileSync(a,JSON.stringify(b,null,2))}function B(a){for(let b of s.values())if(b.documentId===a)return b;return null}function C(a,b=(0,l.aY)()){if("generating"!==a.status||B(a.id)||Date.now()-a.updatedAt<t)return a;let c="生成任务已中断,请点击继续生成或重新生成",d=a.checkpointChapters?.length?"warning":"failed",e={...a,title:p(a),status:d,error:a.error||c,executionStages:o(a.executionStages,c),completedAt:Date.now(),warningIssues:a.checkpointChapters?.length?[...a.warningIssues||[],c]:a.warningIssues};return a.taskId&&T(b,{taskId:a.taskId,title:`生成 ${e.title}`,status:"warning"===d?"warning":"error",percent:100,message:c,stages:e.executionStages,error:c}),e}function D(a=(0,l.aY)()){return z(v(a),[]).map(b=>{if("generating"!==b.status)return b;let c=z(x(b.id,a),null);if(!c)return b;let d=C(c,a);return d!==c?Q(F(d,a,{preserveUpdatedAt:!0})):Q(c)}).sort((a,b)=>(b.createdAt||b.updatedAt)-(a.createdAt||a.updatedAt))}function E(a,b=(0,l.aY)()){let c=z(x(a,b),null);if(!c)return null;let d=C(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=L(a,b);return d?F({...a,assets:[d,...(a.assets||[]).filter(a=>a.id!==d.id)]},b):a}(d!==c?F(d,b,{preserveUpdatedAt:!0}):d,b)}function F(a,b=(0,l.aY)(),c){let d=Date.now(),e=R({...a,updatedAt:c?.preserveUpdatedAt?a.updatedAt:d});A(x(e.id,b),e);let f=z(v(b),[]).filter(a=>a.id!==e.id);return f.unshift(Q(e)),A(v(b),f),e}function G(a,b,c=(0,l.aY)()){let d=E(a,c);return d?F({...d,...b,id:a},c):null}function H(a,b=(0,l.aY)()){let c=E(a,b);if(!c)return null;if("generating"!==c.status)return c;for(let[b,c]of s)c.documentId===a&&(c.status="aborted",c.controller.abort(),s.delete(b));let d="用户中止",e=o(c.executionStages,d),f=F({...c,status:"aborted",error:d,executionStages:e,completedAt:Date.now()},b);return f.taskId&&T(b,{taskId:f.taskId,title:`生成 ${f.title}`,status:"warning",percent:100,message:d,stages:e,error:d}),f}function I(a,b=(0,l.aY)()){try{e.rmSync(x(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}let c=z(v(b),[]).filter(b=>b.id!==a);A(v(b),c)}function J(a=(0,l.aY)()){return z(w(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function K(a,b,c=(0,l.aY)()){let d=Date.now(),e=[...J(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 A(w(c),e),e}function L(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(u(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 K([h],a.id,b).find(a=>a.id===h.id)||null}function M(a,b=(0,l.aY)()){return J(b).find(b=>b.id===a)||null}function N(a,b=(0,l.aY)()){let c=M(a,b);if(!c)return!1;let d=y(c,b);if(d&&d.startsWith(u(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return A(w(b),J(b).filter(b=>b.id!==a)),!0}function O(a,b,c=(0,l.aY)()){let d=M(a,c);if(!d)return null;let f=y(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function P(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 Q(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?.blockingIssues?.length||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 R(a){let b=a.draft?{...a.draft,chapters:a.draft.chapters?.map(P),checkpointChapters:a.draft.checkpointChapters?.map(P)}:a.draft;return{...a,draft:b,checkpointChapters:a.checkpointChapters?.map(P)}}function S(a,b){let c=E(a.documentId,b);return c&&"generating"===c.status?{taskId:a.id,documentId:a.documentId,record:c}:null}function T(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||"export_ready"===a.type||"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 U(a,b=(0,l.aY)()){let c=g.resolve(b),e=(0,k.computeProjectId)(c),f=Date.now(),n=a.resumeDocumentId?E(a.resumeDocumentId,c):null;if(n){let a=B(n.id),b=a?S(a,c):null;if(b)return b}if(!n)for(let b of s.values()){let d=S(b,c);if(d&&d.record.templateId===a.templateId&&d.record.projectRoot===c)return d}let t=n?.id||`doc-${f}-${d.randomBytes(4).toString("hex")}`,u=`task-${f}-${d.randomBytes(4).toString("hex")}`,v=n?{...n,taskId:u,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:f}:{id:t,taskId:u,templateId:a.templateId,templateVersion:(0,h.QJx)(a.templateId)?.version,title:"生成中",requirement:a.requirement||"",maxEvidencePerChapter:a.maxEvidencePerChapter,projectRoot:c,projectId:e,knowledgeBasePath:g.join(c,"knowledgeBase"),markdown:"",status:"generating",assets:[],createdAt:f,updatedAt:f};F(v,c),T(c,{taskId:u,title:`生成 ${v.title}`,status:"processing",percent:1,message:"文档生成任务已进入后台队列",stages:v.executionStages});let w=new AbortController,x={},y=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))}(n,a,c),z=0,A="",C=Math.max(1e3,Math.min(15e3,Number(process.env.DOCUMENT_PROGRESS_SAVE_INTERVAL_MS??5e3))),D=(0,h.OXS)({...a,projectRoot:c,resumeChapters:y,signal:w.signal,onProgress:(a,b)=>{try{x.current&&(x.current.lastProgressAt=Date.now());let d=Date.now(),e=JSON.stringify({stages:a.map(a=>({type:a.type,roleId:a.roleId,status:a.status,message:a.message,progress:a.progress})),checkpoint:b?.chapters?.map(a=>[a.id,a.content.length,a.sections?.length||0])||[]});if(!b?.chapters&&e===A&&d-z<C)return;let f=E(t,c);if(f&&"generating"===f.status){let g=b?.chapters?q(f.checkpointChapters,b.chapters).map(P):f.checkpointChapters,h=g?.length?g.map(a=>`# ${a.title}
|
|
2
|
+
`,"utf8")}function k(a,b){let c=Date.now(),d=i(a),e=d.findIndex(a=>a.id===b.id),f=e>=0?d[e]:void 0,g={id:b.id,type:b.type,title:b.title,stage:b.stage??f?.stage??"uploading",status:b.status??f?.status??"processing",message:b.message??f?.message??"",percent:b.percent??f?.percent??0,fileName:b.fileName??f?.fileName,filePath:b.filePath??f?.filePath,chunkCount:b.chunkCount??f?.chunkCount,textLength:b.textLength??f?.textLength,extractionMode:b.extractionMode??f?.extractionMode,error:b.error??f?.error,details:b.details??f?.details,createdAt:f?.createdAt??c,updatedAt:c};return e>=0?d[e]=g:d.push(g),j(a,d),g}function l(a,b=50){return i(a).sort((a,b)=>b.updatedAt-a.updatedAt).slice(0,b)}function m(a,b){return i(a).find(a=>a.id===b)}function n(a,b){return i(a).filter(a=>!b||a.type===b).sort((a,b)=>b.updatedAt-a.updatedAt)[0]}function o(a){return i(a).filter(a=>"processing"===a.status).sort((a,b)=>b.updatedAt-a.updatedAt)}function p(a){let b=i(a),c=h(a);return d.existsSync(c)&&d.unlinkSync(c),b.length}function q(a,b){let c=i(a),d=c.filter(a=>a.id!==b);return d.length!==c.length&&(j(a,d),!0)}},48661:(a,b,c)=>{c.d(b,{BH:()=>J,Gl:()=>u,JU:()=>N,Jz:()=>O,M$:()=>D,QG:()=>I,SE:()=>y,YL:()=>U,a6:()=>G,r:()=>H,v7:()=>E,yE:()=>M});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(91985),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.content.trim().length>0?"completed":"failed",updatedAt:Date.now(),timedOut:a.timedOut,elapsedMs:a.elapsedMs}))}let s=new Map,t=Math.max(36e5,Number(process.env.DOCUMENT_ABANDONED_RECORD_STALE_MS??864e5));function u(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 v(a=(0,l.aY)()){return g.join(u(a),"index.json")}function w(a=(0,l.aY)()){return g.join(u(a),"assets.json")}function x(a,b=(0,l.aY)()){return g.join(u(b),"drafts",`${a}.json`)}function y(a,b=(0,l.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(u(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join(b,"knowledgeBase",a.path):null}function z(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function A(a,b){e.mkdirSync(g.dirname(a),{recursive:!0}),e.writeFileSync(a,JSON.stringify(b,null,2))}function B(a){for(let b of s.values())if(b.documentId===a)return b;return null}function C(a,b=(0,l.aY)()){if("generating"!==a.status||B(a.id)||Date.now()-a.updatedAt<t)return a;let c="生成任务已中断,请点击继续生成或重新生成",d=a.checkpointChapters?.length?"warning":"failed",e={...a,title:p(a),status:d,error:a.error||c,executionStages:o(a.executionStages,c),completedAt:Date.now(),warningIssues:a.checkpointChapters?.length?[...a.warningIssues||[],c]:a.warningIssues};return a.taskId&&T(b,{taskId:a.taskId,title:`生成 ${e.title}`,status:"warning"===d?"warning":"error",percent:100,message:c,stages:e.executionStages,error:c}),e}function D(a=(0,l.aY)()){return z(v(a),[]).map(b=>{if("generating"!==b.status)return b;let c=z(x(b.id,a),null);if(!c)return b;let d=C(c,a);return d!==c?Q(F(d,a,{preserveUpdatedAt:!0})):Q(c)}).sort((a,b)=>(b.createdAt||b.updatedAt)-(a.createdAt||a.updatedAt))}function E(a,b=(0,l.aY)()){let c=z(x(a,b),null);if(!c)return null;let d=C(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=L(a,b);return d?F({...a,assets:[d,...(a.assets||[]).filter(a=>a.id!==d.id)]},b):a}(d!==c?F(d,b,{preserveUpdatedAt:!0}):d,b)}function F(a,b=(0,l.aY)(),c){let d=Date.now(),e=R({...a,updatedAt:c?.preserveUpdatedAt?a.updatedAt:d});A(x(e.id,b),e);let f=z(v(b),[]).filter(a=>a.id!==e.id);return f.unshift(Q(e)),A(v(b),f),e}function G(a,b,c=(0,l.aY)()){let d=E(a,c);return d?F({...d,...b,id:a},c):null}function H(a,b=(0,l.aY)()){let c=E(a,b);if(!c)return null;if("generating"!==c.status)return c;for(let[b,c]of s)c.documentId===a&&(c.status="aborted",c.controller.abort(),s.delete(b));let d="用户中止",e=o(c.executionStages,d),f=F({...c,status:"aborted",error:d,executionStages:e,completedAt:Date.now()},b);return f.taskId&&T(b,{taskId:f.taskId,title:`生成 ${f.title}`,status:"warning",percent:100,message:d,stages:e,error:d}),f}function I(a,b=(0,l.aY)()){try{e.rmSync(x(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}let c=z(v(b),[]).filter(b=>b.id!==a);A(v(b),c)}function J(a=(0,l.aY)()){return z(w(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function K(a,b,c=(0,l.aY)()){let d=Date.now(),e=[...J(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 A(w(c),e),e}function L(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(u(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 K([h],a.id,b).find(a=>a.id===h.id)||null}function M(a,b=(0,l.aY)()){return J(b).find(b=>b.id===a)||null}function N(a,b=(0,l.aY)()){let c=M(a,b);if(!c)return!1;let d=y(c,b);if(d&&d.startsWith(u(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return A(w(b),J(b).filter(b=>b.id!==a)),!0}function O(a,b,c=(0,l.aY)()){let d=M(a,c);if(!d)return null;let f=y(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function P(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 Q(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?.blockingIssues?.length||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 R(a){let b=a.draft?{...a.draft,chapters:a.draft.chapters?.map(P),checkpointChapters:a.draft.checkpointChapters?.map(P)}:a.draft;return{...a,draft:b,checkpointChapters:a.checkpointChapters?.map(P)}}function S(a,b){let c=E(a.documentId,b);return c&&"generating"===c.status?{taskId:a.id,documentId:a.documentId,record:c}:null}function T(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||"export_ready"===a.type||"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 U(a,b=(0,l.aY)()){let c=g.resolve(b),e=(0,k.computeProjectId)(c),f=Date.now(),n=a.resumeDocumentId?E(a.resumeDocumentId,c):null;if(n){let a=B(n.id),b=a?S(a,c):null;if(b)return b}if(!n)for(let b of s.values()){let d=S(b,c);if(d&&d.record.templateId===a.templateId&&d.record.projectRoot===c)return d}let t=n?.id||`doc-${f}-${d.randomBytes(4).toString("hex")}`,u=`task-${f}-${d.randomBytes(4).toString("hex")}`,v=n?{...n,taskId:u,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:f}:{id:t,taskId:u,templateId:a.templateId,templateVersion:(0,h.QJx)(a.templateId)?.version,title:"生成中",requirement:a.requirement||"",maxEvidencePerChapter:a.maxEvidencePerChapter,projectRoot:c,projectId:e,knowledgeBasePath:g.join(c,"knowledgeBase"),markdown:"",status:"generating",assets:[],createdAt:f,updatedAt:f};F(v,c),T(c,{taskId:u,title:`生成 ${v.title}`,status:"processing",percent:1,message:"文档生成任务已进入后台队列",stages:v.executionStages});let w=new AbortController,x={},y=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))}(n,a,c),z=0,A="",C=Math.max(1e3,Math.min(15e3,Number(process.env.DOCUMENT_PROGRESS_SAVE_INTERVAL_MS??5e3))),D=(0,h.OXS)({...a,projectRoot:c,resumeChapters:y,signal:w.signal,onProgress:(a,b)=>{try{x.current&&(x.current.lastProgressAt=Date.now());let d=Date.now(),e=JSON.stringify({stages:a.map(a=>({type:a.type,roleId:a.roleId,status:a.status,message:a.message,progress:a.progress})),checkpoint:b?.chapters?.map(a=>[a.id,a.content.length,a.sections?.length||0])||[]});if(!b?.chapters&&e===A&&d-z<C)return;let f=E(t,c);if(f&&"generating"===f.status){let g=b?.chapters?q(f.checkpointChapters,b.chapters).map(P):f.checkpointChapters,h=g?.length?g.map(a=>`# ${a.title}
|
|
3
3
|
|
|
4
4
|
${a.content}`).join("\n\n"):f.markdown,i=F(R({...f,executionStages:a,checkpointChapters:g,partialChapters:b?.chapters?r(g):f.partialChapters,markdown:h,wordCount:h?(0,m.V7)(h):f.wordCount}),c),j=[...a].reverse().find(a=>"running"===a.status)||a[a.length-1];T(c,{taskId:u,title:`生成 ${i.templateName||i.title}`,status:"processing",percent:Math.max(1,Math.min(99,j?.progress?Math.round(j.progress.current/Math.max(1,j.progress.total)*90):30)),message:j?.message||"文档生成中",stages:a}),z=d,A=e,console.log(`[gen] progress saved: ${a.length} stages, checkpoint=${g?.length||0}, doc=${t}`)}}catch(a){console.error("[gen] progress save error:",a)}}}).then(async a=>{x.current&&(x.current.lastProgressAt=Date.now());let b=E(t,c);if(!b||"generating"!==b.status)return b??v;let d=/结构化事实读取不足|正文可能未显式覆盖|仅包含文件类型和占位符|不在本次招标范围内|知识库文件索引失败|暂无可检索内容切片|未抽取到结构化事实|兜底片段|资料抽取诊断|无法直接读取文本内容|占位符|缺乏详细的.*具体尺寸|需结合原文件进一步深化|章节生成存在兜底/u,e=a.markdown||"",f=/^##\s+(?!目录$)(?!第[一二三四五六七八九十百千万\d]+章\s+)/gmu.test(e),g=/(?:第?\d+页|P\.?\s*\d+)/iu.test(e),h=/施工方/u.test(e),j=a.validationIssues.filter(a=>"error"===a.level||"warning"===a.level).map(a=>a.suggestion?`${a.message}:${a.suggestion}`:a.message).filter(a=>!/^\s*[[{]/u.test(a)&&!/"status"\s*:/u.test(a)&&!d.test(a)).filter(a=>!/正文存在非正式章二级标题/u.test(a)||f).filter(a=>!/资料页码|文件页码|页码引用/u.test(a)||g).filter(a=>!/禁止内容|施工方/u.test(a)||h).filter(b=>!a.exportGate.passed||!/目录与正文不一致|表格分隔线位置不规范/u.test(b)),k=(0,i.yw)(a.markdown,a.chapters).filter(a=>"empty"===a.reason);k.length>0&&j.unshift(`小节内容补写未完成:仍有 ${k.length} 个空洞小节,请继续生成或补充资料后重试`),a.exportGate.passed||0!==j.length||j.push("导出门禁未通过:存在未完成的硬阻断检查项");let l=R({...b,templateName:a.templateName,templateVersion:a.templateVersion??b.templateVersion,title:a.title,markdown:a.markdown,status:a.exportGate.passed?"completed":"failed",draft:a,executionStages:a.executionStages,partialChapters:a.partialChapters,checkpointChapters:a.chapters,reviewMetadata:a.reviewMetadata,promptProvenance:a.promptProvenance??b.promptProvenance,agentWorkflow:a.agentWorkflow,assets:a.assets||[],completedAt:Date.now(),warningIssues:j}),m=L(l,c),n=F({...l,assets:m?[m,...(l.assets||[]).filter(a=>a.id!==m.id)]:l.assets},c);return K(a.assets||[],t,c),T(c,{taskId:u,title:`生成 ${n.title}`,status:"completed"===n.status?"success":"error",percent:100,message:"completed"===n.status?"文档生成完成,已通过导出门禁":`文档生成未通过导出门禁,存在 ${j.length||1} 个阻断问题`,stages:a.executionStages,error:"completed"===n.status?void 0:j.join(";")}),n}).catch(a=>{let b=E(t,c);if(!b||"generating"!==b.status)return b??v;let d=a instanceof Error?a.message:String(a),e=a instanceof Error&&/用户中止|aborted|abort/i.test(a.message)?"aborted":b.checkpointChapters?.length?"warning":"failed",f=b.markdown||b.checkpointChapters?.map(a=>`# ${a.title}
|
|
5
5
|
|