@customize-agent/server 4.8.4 → 4.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +2 -2
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/server/chunks/208.js +3 -6
  5. package/.next/server/chunks/4680.js +7 -5
  6. package/.next/server/chunks/4771.js +101 -0
  7. package/.next/server/chunks/5284.js +2 -2
  8. package/.next/server/chunks/5726.js +7 -0
  9. package/.next/server/chunks/8661.js +1 -1
  10. package/.next/server/pages/404.html +1 -1
  11. package/.next/server/pages/500.html +1 -1
  12. package/.next/server/pages/api/assets/generated/preview.js +1 -1
  13. package/.next/server/pages/api/assets/generated/preview.js.nft.json +1 -1
  14. package/.next/server/pages/api/assets/generated.js +1 -1
  15. package/.next/server/pages/api/assets/generated.js.nft.json +1 -1
  16. package/.next/server/pages/api/documents/chapter/regenerate.js +1 -1
  17. package/.next/server/pages/api/documents/chapter/regenerate.js.nft.json +1 -1
  18. package/.next/server/pages/api/documents/export.js +1 -1
  19. package/.next/server/pages/api/documents/export.js.nft.json +1 -1
  20. package/.next/server/pages/api/documents/generate.js +2 -2
  21. package/.next/server/pages/api/documents/generate.js.nft.json +1 -1
  22. package/.next/server/pages/api/documents/generated/[id].js +1 -1
  23. package/.next/server/pages/api/documents/generated/[id].js.nft.json +1 -1
  24. package/.next/server/pages/api/documents/generated.js +1 -1
  25. package/.next/server/pages/api/documents/generated.js.nft.json +1 -1
  26. package/.next/server/pages/api/documents/templates.js +1 -1
  27. package/.next/server/pages/api/documents/templates.js.nft.json +1 -1
  28. package/.next/server/pages/api/kb/files/reindex.js +1 -1
  29. package/.next/server/pages/api/kb/files/reindex.js.nft.json +1 -1
  30. package/.next/server/pages/api/kb/intelligence.js +1 -1
  31. package/.next/server/pages/api/kb/intelligence.js.nft.json +1 -1
  32. package/.next/server/pages/api/kb/reindex.js +1 -1
  33. package/.next/server/pages/api/kb/reindex.js.nft.json +1 -1
  34. package/.next/server/pages/api/kb/upload/complete.js +1 -1
  35. package/.next/server/pages/api/kb/upload/complete.js.nft.json +1 -1
  36. package/.next/server/pages/api/kb/upload.js +1 -1
  37. package/.next/server/pages/api/kb/upload.js.nft.json +1 -1
  38. package/.next/server/pages/api/prompt.js +1 -1
  39. package/.next/server/pages/api/prompt.js.nft.json +1 -1
  40. package/.next/server/pages/api/template-references.js +1 -1
  41. package/.next/server/pages/api/template-references.js.nft.json +1 -1
  42. package/.next/server/pages/asset-library.html +1 -1
  43. package/.next/server/pages/document-roles.html +1 -1
  44. package/.next/server/pages/documents.html +1 -1
  45. package/.next/server/pages/guide.html +1 -1
  46. package/.next/server/pages/index.html +1 -1
  47. package/.next/server/pages/knowledge/file-detail.html +1 -1
  48. package/.next/server/pages/knowledge/files.html +1 -1
  49. package/.next/server/pages/knowledge/manage.html +1 -1
  50. package/.next/server/pages/knowledge.html +1 -1
  51. package/.next/server/pages/models.html +1 -1
  52. package/.next/server/pages/overview.html +1 -1
  53. package/.next/server/pages/prompt.html +1 -1
  54. package/.next/server/pages/settings.html +1 -1
  55. package/.next/server/pages/system/logs.html +1 -1
  56. package/.next/server/pages/template-references.html +1 -1
  57. package/.next/server/pages-manifest.json +30 -30
  58. package/package.json +1 -1
  59. package/.next/server/chunks/1404.js +0 -99
  60. package/.next/server/chunks/2484.js +0 -1
  61. /package/.next/static/{UIqiA9CZtvGl5Z-xG_tmf → FT0lgaPHm6tsjBp2QoJ4H}/_buildManifest.js +0 -0
  62. /package/.next/static/{UIqiA9CZtvGl5Z-xG_tmf → FT0lgaPHm6tsjBp2QoJ4H}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- "use strict";exports.id=2484,exports.ids=[2484],exports.modules={28103:(a,b,c)=>{c.d(b,{WT:()=>w,aF:()=>v,cG:()=>d});let d=["房建","市政","公路","桥梁与隧道","水利水电","电力","机电安装","装饰装修","园林绿化","铁路","港口与航道","矿山冶金","其他"],e=/(?:\d+(?:\.\d+)?\s*(?:mm|cm|m|㎡|m²|m2|m3|m³|kg|t|MPa|kPa|kN|V|KV|kV|A|天|%)(?![a-zA-Z\u4e00-\u9fa5])|\d+(?:\.\d+)?\s*(?:米|厘米|毫米|吨|千克|公斤|平方米|立方米)(?!\d)|(?:养护|搭接长度|试验压力|间距|偏差|坡度|含水率|压实度|强度等级|标号|厚度|宽度|高度|深度|直径|桩长|桩径))/gu,f=/→|->/u,g=/^(?:[一二三四五六七八九十\d]+[、..]?\s*)?[\u4e00-\u9fa5()()、,A-Za-z0-9+\-·\s]{2,28}(?:表|清单)(?:[::]|\s*$)/mu,h=/^第([一二三四五六七八九十百千\d]+)[章篇][、..]?\s*(.{2,60})$/mu,i=/^\d+[、..](?!\d)\s*(.{2,20})$/mu,j=/^[一二三四五六七八九十]+[、..]\s*(.{2,20})$/mu,k=/^第[一二三四五六七八九十\d]+[节条][、..]?\s*(.{2,30})$/mu,l=/^(?:[一二三四五六七八九十]+、\s*(.{2,20})|[((][一二三四五六七八九十\d]+[))]\s*(.{2,20})|\d+\.\d+(?:\.\d+)*[、..\s]\s*(.{2,20}))$/mu,m=/\.{4,}|\.{2,}\s*\d{1,3}\s*$|—\d+—|第\s*\d+\s*页|^\d{1,3}$/u,n=/[,、;:]/u,o=/[,。;:?!]/u;function p(a){return a.trim().replace(/^(?:#+\s*)+/u,"").trim()}function q(a){return a.replace(/[\s..·]+\d{1,3}$/u,"").replace(/\s+/gu,"").trim()}function r(a){return a.length>=2&&!n.test(a)&&!/[。,;]$/u.test(a)}function s(a){if(/^\d+$/u.test(a))return Number.parseInt(a,10);let b={零:0,一:1,二:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9},c=0,d=0,e=!1;for(let f of a){if("十"===f){c+=10*(d||1),d=0,e=!0;continue}if("百"===f){c+=100*(d||1),d=0,e=!0;continue}if("千"===f){c+=1e3*(d||1),d=0,e=!0;continue}let a=b[f];if(void 0===a)return Number.MAX_SAFE_INTEGER;d=a,e=!0}return e?c+d:Number.MAX_SAFE_INTEGER}let t=/(?:养护|搭接长度|试验压力|间距|偏差|坡度|含水率|压实度|强度等级|标号|厚度|宽度|高度|深度|直径|桩长|桩径)/gu,u=/(?:\d+(?:\.\d+)?\s*(?:mm|cm|m|㎡|m²|m2|m3|m³|kg|t|MPa|kPa|kN|V|KV|kV|A|天|%)(?![a-zA-Z\u4e00-\u9fa5])|\d+(?:\.\d+)?\s*(?:米|厘米|毫米|吨|千克|公斤|平方米|立方米)(?!\d))/gu;function v(a){let b,c=[["市政",/市政|管网|排水|给水|雨污|污水|燃气/gu],["公路",/公路|路基|路面|沥青/gu],["桥梁与隧道",/桥梁|隧道/gu],["水利水电",/水利|河道|灌溉|防洪/gu],["电力",/电力|供配电|电压|电缆/gu],["机电安装",/机电|暖通|通风|空调|消防|给排水|智能化|电梯/gu],["装饰装修",/装饰|装修|幕墙/gu],["园林绿化",/园林|绿化|景观|苗木/gu],["铁路",/铁路|轨道/gu],["港口与航道",/港口|航道/gu],["矿山冶金",/矿山|冶金/gu],["房建",/房建|建筑|住宅|楼|结构|砌体|基坑|地下室|主体|层高|户型|公共建筑|产业园|厂房/gu]].map(([b,c])=>(c.lastIndex=0,{type:b,count:(a.match(c)||[]).length})).sort((a,b)=>b.count-a.count),d=c[0],e=0,f=0;for(let[c,d]of[["房建",/产业园|标准厂房|安置房|住宅小区|保障房|卫生院|门诊楼|办公楼/gu],["市政",/老旧小区|海绵城市|雨污分流|管网改造|管廊/gu],["桥梁与隧道",/桥梁|隧道|盾构|箱梁|斜拉|悬索|涵洞/gu],["公路",/公路|路基|路面|沥青|桩号|互通|匝道/gu],["水利水电",/堤防|水库|泵站|水闸|疏浚|节制闸|水电站|大坝|围堰/gu],["电力",/变电站|输电线路|配电|GIS设备|电缆|架空线路|铁塔|箱变/gu],["铁路",/铁路|轨道|道床|站台|信号机|接触网/gu],["港口与航道",/港口|码头|航道|护岸|堆场|泊位/gu],["矿山冶金",/矿山|矿井|选矿|冶炼|尾矿|轧钢/gu]]){d.lastIndex=0;let g=(a.match(d)||[]).length;g>=3&&g>e?(f=e,b=c,e=g):g>f&&(f=g)}if(b){if(f>0&&e<2*f&&d&&d.count>e)return d.type;let a=c.find(a=>a.type===b)?.count||0;return d&&d.type!==b&&d.count>2*a&&d.count>=2*e?d.type:b}return d&&d.count>0?d.type:"其他"}function w(a){let b=a.replace(/\s/gu,"").length,c=a.split(/\n+/u).map(a=>a.replace(/\s+/gu," ").trim()).filter(a=>a.length>=16&&/[\u4e00-\u9fa5]/u.test(a)),d=c.reduce((a,b)=>a+b.replace(/\s/gu,"").length,0),n=(a.match(e)||[]).length,v=c.filter(a=>f.test(a)).length,w=function(a){let b=0,c=a.split(/\n+/u);for(let a=0;a<c.length;a+=1){let d=p(c[a]||"");if(d){if(g.test(d)||/^┌─/u.test(d)){b+=1;continue}if(/^\|.*\|.*\|$/u.test(d)){let d="";for(let b=a-1;b>=0&&b>=a-3;b-=1){let a=p(c[b]||"");if(a){d=a;break}}/^\|.*\|.*\|$/u.test(d)||g.test(d)||(b+=1)}}}return b}(a),{headings:x,useCnAsChapter:y}=function(a){let b,c=new Map,d=[],e=[],f=a.split(/\n+/u);for(let a=0;a<f.length;a+=1){let b=p(f[a]);if(!b||m.test(b))continue;let d=h.exec(b);if(d){let b=q(d[2]||"");b.length>=2&&!o.test(b)&&c.set(d[1],function(a,b,c){if(a.length<20)return a;let d=p(b[c+1]||"");if(d.length<2||d.length>15||!/[\u4e00-\u9fa5]/u.test(d)||m.test(d)||h.test(d)||k.test(d)||l.test(d)||i.test(d)||j.test(d))return a;let e=a+d;return e.length<=60?e:a}(b,f,a));continue}let g=j.exec(b);if(g){let a=q(g[1]||"");r(a)&&e.push(a)}}if(0===c.size)for(let a of f){let b=p(a);if(!b||m.test(b))continue;let c=i.exec(b);if(c){let a=q(c[1]||"");r(a)&&d.push(a)}}let g=!1;return c.size>0?b=[...c.entries()].sort((a,b)=>s(a[0])-s(b[0])).map(([,a])=>a):d.length>=2?b=d:(b=e,g=!0),{headings:[...new Set(b)],useCnAsChapter:g}}(a),z=x.length,{subsectionCount:A,subitemCount:B}=function(a,b){let c=0,d=0;for(let e of a.split(/\n+/u)){let a=p(e);if(!a||m.test(a))continue;let f=k.exec(a);if(f){r(q(f[1]||""))&&(c+=1);continue}let g=l.exec(a);if(g){if(!r(q(g[1]||g[2]||g[3]||""))||b&&void 0!==g[1])continue;d+=1}}return{subsectionCount:c,subitemCount:d}}(a,y),C=new Map;for(let a of c){let b=a.replace(/[\d\s,。、;:""''()()%…—\-·]/gu,"");b.length<8||C.set(b,(C.get(b)||0)+1)}let D=0;for(let a of C.values())a>1&&(D+=a);return{wordCount:b,effectiveWordCount:d,paramDensity:d>0?1e3*n/d:0,paramCount:n,arrowChainCoverage:c.length>0?v/c.length:0,duplicationRate:c.length>0?D/c.length:0,tableCount:w,sectionCount:z,subsectionCount:A,subitemCount:B,avgSectionWords:z>0?Math.round(d/z):0,headingStructure:x,tableTitles:function(a){let b=[];for(let c of a.split(/\n+/u)){let a=p(c);a&&!(a.length>40)&&!(a.length<3)&&g.test(a)&&b.push(a)}return[...new Set(b)]}(a),paramTokens:function(a){let b=new Map;for(let c of a.match(t)||[])b.set(c,(b.get(c)||0)+1);let c=(a.match(u)||[]).length;return c>0&&b.set("数值参数(数字+单位)",(b.get("数值参数(数字+单位)")||0)+c),[...b.entries()].map(([a,b])=>({token:a,count:b})).sort((a,b)=>b.count-a.count)}(a),segmentCount:c.length,arrowChainSegmentCount:v,duplicatedSegmentCount:D}}},42484:(a,b,c)=>{c.d(b,{$g:()=>v,$v:()=>D,Ah:()=>w,Al:()=>E,H1:()=>n,Hd:()=>u,Q3:()=>x,Uv:()=>r,fz:()=>k,hK:()=>C,pR:()=>t,ze:()=>G});var d=c(73024),e=c(48161),f=c(76760),g=c(19898),h=c(28103);function i(){let a=f.join(e.homedir(),".customize-agent","template-references");return d.mkdirSync(f.join(a,"files"),{recursive:!0}),a}function j(){return f.join(i(),"references.json")}function k(a){return o(a).flatMap(a=>a.textSlices||[])}function l(){try{let a=j();if(!d.existsSync(a))return[];let b=JSON.parse(d.readFileSync(a,"utf-8"));return Array.isArray(b)?b:[]}catch{return[]}}function m(a){d.writeFileSync(j(),JSON.stringify(a,null,2),"utf-8")}function n(){return l().sort((a,b)=>b.uploadedAt-a.uploadedAt)}function o(a){return n().filter(b=>b.projectType===a)}async function p(a){let b=d.statSync(a),c=new g.FileClassifier().classify(a,f.basename(a),b),e=new g.ContentExtractor,h=((await e.extract(c)).text||"").trim();if(!h)throw Error("文件未能提取到有效文本(可能是扫描件或加密文件)");return h}let q=null;function r(){return q??=s().finally(()=>{q=null})}async function s(){let a=l(),b=a.filter(a=>"ready"===a.status&&2!==a.profileVersion);if(0===b.length)return;let c=!1;for(let a of b){let b=f.join(i(),a.filePath);if(d.existsSync(b))try{let d=await p(b);a.qualityProfile=(0,h.WT)(d),a.profileVersion=2,c=!0}catch{}}c&&m(a)}async function t(a){let b=i(),c=`ref-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,e=f.extname(a.fileName)||".pdf",g=`${c}${e.toLowerCase()}`,j=f.join(b,"files",g);d.copyFileSync(a.tempFilePath,j);let k=d.statSync(j).size,n={id:c,fileName:a.fileName,projectType:a.projectType||"其他",typeSource:a.projectType?"manual":"auto",uploadedAt:Date.now(),fileSize:k,filePath:f.join("files",g),status:"parsing"},o=l();o.push(n),m(o);try{let a=await p(j);n.qualityProfile=(0,h.WT)(a),n.profileVersion=2,n.textSlices=function(a,b=8){let c=a.split(/\n{2,}|\r\n\r\n/u).map(a=>a.replace(/\s+/gu," ").trim()).filter(a=>a.length>=20),d=Math.max(1,Math.floor(c.length/b)),e=[];for(let a=0;a<c.length&&e.length<b;a+=d)e.push(c[a].slice(0,300));return[...new Set(e)]}(a),n.status="ready","auto"===n.typeSource&&(n.projectType=(0,h.aF)(a)),m(o)}catch(a){n.status="failed",n.errorMessage=a instanceof Error?a.message:"解析失败",m(o)}return n}function u(a){let b=l(),c=b.find(b=>b.id===a);if(!c)return!1;m(b.filter(b=>b.id!==a));let e=f.join(i(),c.filePath);try{d.existsSync(e)&&d.unlinkSync(e)}catch{}return!0}function v(a,b){let c=l(),d=c.find(b=>b.id===a);if(d)return d.projectType=b,d.typeSource="manual",m(c),d}function w(a){let b=o(a).filter(a=>"ready"===a.status&&a.qualityProfile);if(0===b.length)return;let c=b.map(a=>a.qualityProfile),d=B(c),e=c[0];return{profile:{wordCount:y(c.map(a=>a.wordCount)),effectiveWordCount:y(c.map(a=>a.effectiveWordCount)),paramDensity:d.paramDensity.avg,paramCount:Math.round(y(c.map(a=>a.paramCount))),arrowChainCoverage:d.arrowChainCoverage.avg,duplicationRate:d.duplicationRate.avg,tableCount:Math.round(d.tableCount.avg),sectionCount:Math.round(d.sectionCount.avg),subsectionCount:Math.round(d.subsectionCount.avg),subitemCount:Math.round(d.subitemCount.avg),avgSectionWords:d.avgSectionWords.avg,headingStructure:e.headingStructure,tableTitles:e.tableTitles,paramTokens:e.paramTokens,segmentCount:Math.round(y(c.map(a=>a.segmentCount||0))),arrowChainSegmentCount:Math.round(y(c.map(a=>a.arrowChainSegmentCount||0))),duplicatedSegmentCount:Math.round(y(c.map(a=>a.duplicatedSegmentCount||0)))},sourceCount:b.length}}function x(a){let b=o(a).filter(a=>"ready"===a.status&&a.qualityProfile?.headingStructure?.length);if(0!==b.length)return{text:A(b.map(a=>(a.qualityProfile.headingStructure||[]).map(a=>({value:a})))).slice(0,12).map(a=>a.value).map((a,b)=>`第${["一","二","三","四","五","六","七","八","九","十","十一","十二"][b]??b+1}章 ${a}`).join("\n"),sourceCount:b.length}}function y(a){return a.length>0?a.reduce((a,b)=>a+b,0)/a.length:0}function z(a){return{avg:y(a),min:a.length?Math.min(...a):0,max:a.length?Math.max(...a):0}}function A(a){let b=new Map;for(let c of a)for(let a of c)b.set(a.value,(b.get(a.value)||0)+(a.weight??1));return[...b.entries()].map(([a,b])=>({value:a,count:b})).sort((a,b)=>b.count-a.count)}function B(a){if(0===a.length){let a={avg:0,min:0,max:0};return{paramDensity:{...a},arrowChainCoverage:{...a},duplicationRate:{...a},tableCount:{...a},sectionCount:{...a},subsectionCount:{...a},subitemCount:{...a},avgSectionWords:{avg:0}}}let b=a.map(a=>a.paramDensity),c=a.map(a=>a.arrowChainCoverage),d=a.map(a=>a.duplicationRate),e=a.reduce((a,b)=>a+(b.effectiveWordCount||b.wordCount),0),f=a.reduce((a,b)=>a+b.paramCount,0),g=a.reduce((a,b)=>a+(b.segmentCount||0),0),h=a.reduce((a,b)=>a+(b.arrowChainSegmentCount||0),0),i=a.reduce((a,b)=>a+(b.duplicatedSegmentCount||0),0),j=a.reduce((a,b)=>a+b.sectionCount,0);return{paramDensity:{avg:e>0?1e3*f/e:0,min:Math.min(...b),max:Math.max(...b)},arrowChainCoverage:{avg:g>0?h/g:0,min:Math.min(...c),max:Math.max(...c)},duplicationRate:{avg:g>0?i/g:0,min:Math.min(...d),max:Math.max(...d)},tableCount:z(a.map(a=>a.tableCount)),sectionCount:z(a.map(a=>a.sectionCount)),subsectionCount:z(a.map(a=>a.subsectionCount||0)),subitemCount:z(a.map(a=>a.subitemCount||0)),avgSectionWords:{avg:j>0?Math.round(e/j):0}}}function C(){let a=n().filter(a=>"ready"===a.status&&a.qualityProfile),b=new Map;for(let c of a){let a=b.get(c.projectType)||[];a.push(c),b.set(c.projectType,a)}let c=[];for(let[a,d]of b){let b=d.map(a=>a.qualityProfile),e=A(b.map(a=>(a.headingStructure||[]).map(a=>({value:a})))),f=A(b.map(a=>(a.tableTitles||[]).map(a=>({value:a})))),g=A(b.map(a=>(a.paramTokens||[]).map(a=>({value:a.token,weight:a.count}))));c.push({projectType:a,sourceCount:d.length,totalWords:b.reduce((a,b)=>a+b.wordCount,0),updatedAt:Math.max(...d.map(a=>a.uploadedAt)),metrics:B(b),typicalHeadings:e.slice(0,16).map(a=>({title:a.value,count:a.count,ratio:d.length>0?Math.min(1,a.count/d.length):0})),commonTables:f.slice(0,10).map(a=>({title:a.value,count:a.count})),frequentParams:g.slice(0,12).map(a=>({token:a.value,count:a.count}))})}return c.sort((a,b)=>b.sourceCount-a.sourceCount)}function D(a){let b=(0,h.aF)([a.templateName,...a.chapterTitles,a.requirement].filter(Boolean).join(" ")),c=o(b).filter(a=>"ready"===a.status&&a.qualityProfile);if(0===c.length)return[];let d=c.map(a=>a.qualityProfile),e=c.length,f=y(d.map(a=>a.wordCount)),g=f>0?Math.max(.3,Math.min(2,a.targetWords/f)):1,i=A(d.map(a=>(a.headingStructure||[]).map(a=>({value:a})))).filter(a=>a.count>=Math.ceil(e/2)).slice(0,12),j=A(d.map(a=>(a.paramTokens||[]).map(a=>({value:a.token,weight:a.count})))),k=[`同类工程(${b})参考特征(来自 ${e} 份优秀入围文件画像,仅供软性参考;任何项目专属数字与参数仍必须以知识库证据为准,为对齐特征而编造参数、虚构表格或堆砌无意义内容严格禁止):`],l=B(d),m=l.paramDensity.avg,n=l.arrowChainCoverage.avg,p=l.sectionCount.avg>0?l.tableCount.avg/l.sectionCount.avg:0,q=l.avgSectionWords.avg;return k.push(`- 工艺参数密度参考:约 ${(m*g).toFixed(1)} 个/千字(同类工程画像均值 ${m.toFixed(1)},已按本项目篇幅折减);参数应来自已确认事实与专业知识,不得编造。`),k.push(`- 工序链覆盖率参考:含"→"工序链的段落占比约 ${Math.round(100*n)}%;施工与流程小节宜用工序链串联工艺步骤。`),k.push(`- 表格参考:同类工程平均每章约 ${p.toFixed(1)} 张正式表格(在事实允许的前提下合理配置)。`),k.push(`- 章节体量参考:同类工程平均约 ${Math.round(l.sectionCount.avg)} 章、平均每章约 ${q} 字;实际以模板章节与篇幅目标为准。`),i.length>0&&k.push(`- 典型章节结构参考(出现于半数以上样本,仅供结构参考,不强制):${i.map(a=>a.value).join("、")}`),j.length>0&&k.push(`- 高频工艺参数种类参考:${j.slice(0,12).map(a=>a.value).join("、")}(同类型优秀样本中出现频次最高的工艺参数词条,施工方法小节可按专业实际与通用规范自然使用这些参数种类;项目专属数值必须来自知识库证据,不得为凑密度编造)。`),k}function E(a){let b=o((0,h.aF)([a.templateName,...a.chapterTitles,a.requirement].filter(Boolean).join(" "))).filter(a=>"ready"===a.status&&a.qualityProfile);if(0===b.length)return[];let c=b.map(a=>a.qualityProfile),d=Math.ceil(b.length/2),e=new Map,f=new Map;for(let a of c){let b=new Set;(a.headingStructure||[]).forEach((a,c)=>{if(f.set(a,(f.get(a)||0)+1),b.has(a))return;b.add(a);let d=e.get(a)||{sum:0,count:0};d.sum+=c,d.count+=1,e.set(a,d)})}let g=[...f.entries()].filter(([,a])=>a>=d).sort((a,b)=>{let c=e.get(a[0]),d=e.get(b[0]);return c.sum/c.count-d.sum/d.count}).map(([a])=>a).slice(0,10),i=c.reduce((a,b)=>a+b.sectionCount,0),j=c.reduce((a,b)=>a+(b.subsectionCount||0),0),k=c.reduce((a,b)=>a+(b.subitemCount||0),0),l=["- 写法骨架参考(同类优秀样本的展开模式,仅供结构参照;样本中的任何数值与原文句子都不得复制):"];g.length>=3&&l.push(`- 章节推进骨架:${g.join(" → ")}(出现于半数以上样本的一级章节按典型顺序排列,仅作结构参照,不强制)。`),i>0&&l.push(`- 分层展开深度:同类样本平均每章约 ${(j/i).toFixed(1)} 个二级小节、${(k/i).toFixed(1)} 个三级子目——范文把方案分层展开到具体措施条目,而不是整段综述概括。`);let m=g.filter(a=>/施工方案|施工方法|施工内容|施工部署|分部分项/u.test(a)).slice(0,4);return m.length>0&&l.push(`- 方案章节典型组织:同类样本中方案类章节以「${m.join("」「")}」等标题独立成章,逐分项展开,不并入项目概况章节。`),l.push("- 分部分项展开模式:同类样本按“施工概况(作业对象、部位、工程量)→工艺流程(→串联关键工序)→施工方法(工具机具、材料规格、工艺参数、验收标准)”三段逐分项展开;方法段正文以“→”串联连续工序链,工艺参数落位在方法叙述中而非单独罗列清单。"),l}function F(a){return a.replace(/^第[一二三四五六七八九十百千\d]+[章节篇][、..]?\s*/u,"").replace(/^\d+(?:\.\d+)*[、..]?\s*/u,"").trim()}function G(a){let b=(0,h.aF)([a.templateName,...a.chapterTitles].join(" ")),c=o(b).filter(a=>"ready"===a.status&&a.qualityProfile);if(0===c.length)return;let d=A(c.map(a=>a.qualityProfile).map(a=>(a.headingStructure||[]).map(a=>({value:a})))),e=new Set(a.chapterTitles.map(F)),f=d.filter(a=>a.count>=Math.ceil(c.length/2)).filter(a=>!e.has(F(a.value))).slice(0,6).map(a=>({title:a.value,ratio:Math.min(1,a.count/c.length)}));return f.length>0?{projectType:b,sourceCount:c.length,missingHeadings:f}:void 0}}};