@customize-agent/server 4.17.0 → 4.17.2
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 +21 -21
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/208.js +9 -7
- package/.next/server/chunks/6482.js +1 -1
- package/.next/server/chunks/8204.js +1 -1
- package/.next/server/middleware-build-manifest.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.nft.json +1 -1
- package/.next/server/pages/api/assets/generated.js.nft.json +1 -1
- package/.next/server/pages/api/config/embedding/healthCheck.js.nft.json +1 -1
- package/.next/server/pages/api/documents/chapter/regenerate.js.nft.json +1 -1
- package/.next/server/pages/api/documents/export.js +3 -3
- package/.next/server/pages/api/documents/export.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generate.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id].js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated.js.nft.json +1 -1
- package/.next/server/pages/api/documents/templates.js.nft.json +1 -1
- package/.next/server/pages/api/jobs/[id].js.nft.json +1 -1
- package/.next/server/pages/api/jobs.js.nft.json +1 -1
- package/.next/server/pages/api/kb/categories.js.nft.json +1 -1
- package/.next/server/pages/api/kb/duplicates.js.nft.json +1 -1
- package/.next/server/pages/api/kb/evaluate.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/detail.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/export.js +5 -0
- package/.next/server/pages/api/kb/files/export.js.nft.json +1 -0
- package/.next/server/pages/api/kb/files/open.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/preview-pdf-page.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/reindex.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/search.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/tree.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files.js.nft.json +1 -1
- package/.next/server/pages/api/kb/ignore.js.nft.json +1 -1
- package/.next/server/pages/api/kb/intelligence.js.nft.json +1 -1
- package/.next/server/pages/api/kb/operations.js.nft.json +1 -1
- package/.next/server/pages/api/kb/reindex.js.nft.json +1 -1
- package/.next/server/pages/api/kb/search.js.nft.json +1 -1
- package/.next/server/pages/api/kb/stats.js.nft.json +1 -1
- package/.next/server/pages/api/kb/tags.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload/complete.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload/progress.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload.js.nft.json +1 -1
- package/.next/server/pages/api/prompt.js.nft.json +1 -1
- package/.next/server/pages/api/template-references.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/template-references.html +1 -1
- package/.next/server/pages-manifest.json +24 -23
- package/.next/static/chunks/{224-0415408fff1d1c8b.js → 224-790cf01fcf6820ee.js} +1 -1
- package/.next/static/chunks/260-244c94eacd903620.js +1 -0
- package/.next/static/chunks/{289-fc1b25371e004552.js → 289-42781fb699646699.js} +1 -1
- package/.next/static/chunks/788-e98701da4d6ca319.js +1 -0
- package/.next/static/chunks/pages/{_app-3e8b35112a00821a.js → _app-24bef62eef01afe6.js} +2 -2
- package/.next/static/chunks/pages/documents-185ab225628d4705.js +1 -0
- package/.next/static/chunks/pages/knowledge/files-98ec72061cdb64d3.js +1 -0
- package/.next/static/chunks/pages/knowledge/manage-558987c599dc4cd5.js +1 -0
- package/.next/static/chunks/pages/prompt-839287c514595765.js +1 -0
- package/.next/static/chunks/pages/system/logs-2e849bcdf371d791.js +1 -0
- package/.next/static/{MxX0I-4Uel1J1o70FYHKB → oHTkuAe-o_kSbOGg7O_tz}/_buildManifest.js +1 -1
- package/messages/en-US.json +6 -1
- package/messages/zh-CN.json +6 -1
- package/package.json +1 -1
- package/.next/static/chunks/260-580088826d643423.js +0 -1
- package/.next/static/chunks/788-dca0d550ad6bd8b2.js +0 -1
- package/.next/static/chunks/pages/documents-66057ee3c8ffff6d.js +0 -1
- package/.next/static/chunks/pages/knowledge/files-45b40149a6f4a9d5.js +0 -1
- package/.next/static/chunks/pages/knowledge/manage-5b1b4d3804752f8b.js +0 -1
- package/.next/static/chunks/pages/prompt-edc2dfea09aaedc1.js +0 -1
- package/.next/static/chunks/pages/system/logs-ee67e2c93147dfc3.js +0 -1
- /package/.next/static/{MxX0I-4Uel1J1o70FYHKB → oHTkuAe-o_kSbOGg7O_tz}/_ssgManifest.js +0 -0
|
@@ -15,7 +15,7 @@ ${d}`,"写作要求:必须严格按“主题块→H4 要点”两层结构输
|
|
|
15
15
|
]*
|
|
16
16
|
+)?([^
|
|
17
17
|
|#][^。!?!?
|
|
18
|
-
]{18,60})[。!?!?]`,"gu");function H(a){let b=[],c=new Map;for(let b of a.matchAll(G)){let a=b[1].trim(),d=a.replace(/[\d,,.。%%㎡m2²]/gu,"").slice(0,16);if(d.length<10)continue;let e=c.get(d)||{count:0,sample:a};e.count+=1,c.set(d,e)}for(let{count:a,sample:d}of c.values())a<3||b.push({level:"warning",severity:"warning",category:"style",owner:"llm",repairability:"llm_repairable",message:`段首固定开场机械重复 ${a} 次:“${d.slice(0,30)}…”`,suggestion:"同一段首句式只保留首次出现处,其余处按所在章节语境改写为差异化开场,避免模板化套话观感。"});return b.slice(0,3)}function I(a){let b,c=a.split("\n"),d=[];for(let a=0;a<c.length;a+=1){let e=/^(#{2,4})\s+(.+)$/u.exec(c[a].trim());if(e){let c=e[1].length;/(?:工程概况|项目概况|基本信息)/u.test(e[2])?b={index:a,level:c}:b&&c<=b.level&&(d.push([b.index,a]),b=void 0)}}b&&d.push([b.index,c.length]);let e=a=>d.some(([b,c])=>a>=b&&a<c),f=c.filter((a,b)=>e(b)).join("\n"),g=[];for(let a=0;a<c.length;a+=1){if(e(a))continue;let b=/本项目为|本工程为|该项目为|该工程为/u.exec(c[a]);if(!b)continue;let d=c[a].slice(b.index).split(/[。!?!?]/u)[0];d&&d.length>=12&&g.push(d)}return{overviewBody:f,sentences:g}}function J(a,b={}){let c=[],{overviewBody:d,sentences:e}=I(a);if(0===e.length||!d||!b.semanticSimilarity)return c;let f=[];for(let a of e)if(b.semanticSimilarity(a,d)>=.6&&f.push(a.slice(0,36)),f.length>=3)break;return 0===f.length||c.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`项目概况段跨章复述不得出现:概况章外有 ${f.length} 处以“本项目为/本工程为”等总述开头整段复述概况内容:${f.map(a=>`“${a}…”`).join("、")}`,suggestion:"总述数据只在工程概况类小节集中交代一次:其他章节直接写本章内容,仅可引用所需的具体数字(如“45日历天总工期”),不得复述完整概况段。"}),c}function K(a,b){let c,{overviewBody:d,sentences:e}=I(a);if(0===e.length||!d)return a;let f=a.split(/\r?\n/u),g=[];for(let a=0;a<f.length;a+=1){let b=/^(#{2,4})\s+(.+)$/u.exec(f[a].trim());if(b){let d=b[1].length;/(?:工程概况|项目概况|基本信息)/u.test(b[2])?c={index:a,level:d}:c&&d<=c.level&&(g.push([c.index,a]),c=void 0)}}c&&g.push([c.index,f.length]);let h=!1,i=f.map((a,c)=>{if(g.some(([a,b])=>c>=a&&c<b)||/^#{1,6}\s/u.test(a.trim())||/^\s*\|/u.test(a.trim())||!/本项目为|本工程为|该项目为|该工程为/u.test(a))return a;let e=a.split(/(?<=[。!?!?])/u).filter(a=>{if(!/本项目为|本工程为|该项目为|该工程为/u.test(a))return!0;let c=a.split(/[。!?!?]/u)[0];return c.length<12||.6>b(c,d)});return e.join("")!==a&&(h=!0),e.join("")});return h?i.join("\n"):a}let L=["销项","复查","整改","闭环"];function M(a){let b=[],c=(0,d.V7)(a);if(c<3e3)return b;let e=[];for(let b of L){let d=a.split(b).length-1;e.push(d/c*1e3)}let f=Math.max(...e),g=L[e.indexOf(f)];return f>=3&&b.push({level:"warning",severity:"warning",category:"style",owner:"llm",repairability:"llm_repairable",message:`闭环句式模板化密集:“${g}”达 ${f.toFixed(1)} 次/千字(销项/复查/整改/闭环统一结尾高度重复)`,suggestion:"保留关键控制环节的闭环表述,其余改为差异化的过程控制语言(检验批验收、实测实量、旁站记录等),提升语言精练度。"}),b}let N=["专项设计文件尚未完成,待后续补充","评分指标存在缺口尚未明确","依据承诺函后续跟踪完善"];async function O(a){let b=[],c=a.split(/\n+/u).filter(a=>a.trim()&&!/^\s*(#{1,6}\s+|\||[-*+]\s|>)/u.test(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.trim()).filter(a=>a.length>=12);if(0===c.length)return b;let d=await (0,f.Mv)(c,[...N]),e=[...new Set(c.filter(a=>N.some(b=>d(a,b)>=f.Eh)))];if(0===e.length)return b;for(let a of e)b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`自伤表述候选:“${a}”暴露投标短板,需按上下文判定后改写`,suggestion:"投标文件不得主动暴露“专项设计未完成/指标存在缺口”等短板:改写为正向落实表述(如“按施工图绿色建筑专篇编制专项方案,逐项落实评分项并跟踪验收”);如属现场条件合理风险描述(地质/管线尚不明确),保留但需配套勘查与应对措施。"});return b.slice(0,3)}let P=/([\u4e00-\u9fa5]{2})\1/gu;function Q(a){let b=[...new Set(a.match(P)||[])].slice(0,3);return 0===b.length?[]:[{level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`正文存在叠词重复表述:${b.map(a=>`“${a}”`).join("、")}`,suggestion:"删除紧邻重复字词,保持语句完整通顺(“执行执行”改为“执行”)。"}]}function R(a){return a.replace(P,"$1")}let S=/暂列金额|暂估价|报价明细|综合单价|清单合价|预留金|投标报价/u,T=/(?:税率|增值税)[^。;;\n]{0,12}\d/u,U=/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|最高投标限价|招标控制价/u,V=/材料价格|商务报价|投标总价|合同总价|工程总价/u,W=["暂列金额与暂估价的报价明细","综合单价与清单合价的商务数据","投标报价与费率标准的商务条款"],X=["合同估算价与投资估算的项目信息","最高投标限价与招标控制价的公开信息","商务数据不得写入施工组织设计正文的约束说明"];async function Y(a){return(0,g.A)({prototypes:[...W],negativePrototypes:[...X],embedDocuments:a})}async function Z(a,b){let c=[],d=await Y(b),e=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();if(!(/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a))&&(S.test(b)||T.test(b)||V.test(b)))for(let a of(T.test(b)&&c.push("税率/增值税"),b.split(/(?<=[。;;])\s*/u))){let b=a.match(S)||[],d=U.test(a),f=V.test(a);!(b.length>0)||d||f?(b.length>0&&(d||f)||f&&0===b.length)&&e.push(a):c.push(...b)}}if(e.length>0){let a=await d(e);e.forEach((b,d)=>{if(!a[d])return;let e=b.match(S)||[],f=b.match(V)||[];c.push(...e.length>0?e:f)})}let f=[...new Set(c)].slice(0,4);return 0===f.length?[]:[{level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`正文出现商务条款数据:${f.join("、")}`,suggestion:"商务数据(暂列金额/暂估价/综合单价/税率等)不得写入施组正文:删除该句或改写为定性表述(如“按合同约定执行”),商务口径仅保留在项目信息表中。"}]}function $(a){return a.split(/(?<=[。;;])\s*/u).filter(a=>!!(/^\s*\|/u.test(a)||/^#{1,6}\s/u.test(a))||!(S.test(a)||T.test(a))).join("")}function _(a){return a.split(/\r?\n/u).map(a=>{let b=a.trim();return/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)||!S.test(a)&&!T.test(a)?a:a.split(/(?<=[。;;])\s*/u).filter(a=>!(S.test(a)||T.test(a))).join("")}).join("\n")}let aa=[{key:"excavation",label:"基坑支护及土方外运",re:/基坑支护/u},{key:"zero",label:"地下结构出正负零",re:/正负零|地下室结构/u},{key:"topping",label:"主体结构封顶",re:/主体(?:结构)?封顶/u},{key:"decoration",label:"装饰装修及幕墙",re:/装饰装修/u},{key:"mep",label:"机电安装及智能化调试",re:/机电安装/u},{key:"completion",label:"室外工程及竣工验收",re:/竣工验收/u}];function ab(a){let b=[],c=(a,c,d)=>{let e=aa.find(b=>b.re.test(a))?.key;void 0!==e&&Number.isFinite(c)&&c>=1&&c<=3e3&&b.push({key:e,day:c,raw:d})};for(let b of a.matchAll(/第(\d{2,3})日[^。;;\n]{0,14}?完成[^。;;\n]{0,12}?(基坑支护及土方外运|装饰装修及幕墙|机电安装及智能化调试|室外工程及竣工验收|地下结构出正负零|主体结构封顶|正负零|封顶)/gu))c(b[2],Number(b[1]),b[0].slice(0,40));for(let b of a.matchAll(/(基坑支护|正负零|封顶|装饰装修|机电安装|竣工验收)(?:(?!(?:第\d{2,3}[日天]|,|、)).){0,8}?完成[^。;;\n]{0,10}?第(\d{2,3})[日天]/gu))c(b[1],Number(b[2]),b[0].slice(0,40));for(let b of a.matchAll(/(主体(?:结构)?封顶)(?:(?!(?:第\d{2,3}[日天]|,|、|完成)).){0,20}?第(\d{2,3})日/gu))c(b[1],Number(b[2]),b[0].slice(0,40));let d=new Set;return b.filter(a=>{let b=`${a.key}:${a.raw}`;return!d.has(b)&&(d.add(b),!0)})}function ac(a){let b=[],c=new Map;for(let b of ab(a)){let a=c.get(b.key)||[];a.push(b),c.set(b.key,a)}for(let a of aa){let d=c.get(a.key);if(!d||d.length<2)continue;let e=[...new Set(d.map(a=>a.day))];if(e.length<2||Math.max(...e)-Math.min(...e)<5)continue;let f=[...new Set(d.map(a=>a.raw))].slice(0,4).join("、");b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`节点工期口径矛盾:“${a.label}”节点出现 ${e.map(a=>`${a}日`).join(" 与 ")} 两套口径:${f}`,suggestion:`关键节点完成时间必须全文唯一:以总进度计划表为准统一“${a.label}”节点日期,删除正文/其他表中矛盾的“第N日”表述。`})}return b.slice(0,4)}let ad=[{key:"xps",label:"挤塑聚苯板(XPS)厚度",unit:"mm",kind:"number",patterns:[/(?:挤塑聚苯|XPS)(?:(?!(?:宽度|拼缝|不大于|不超过|小于|≤|采用|使用|选用|铺设|粘贴)).){0,40}?(\d+(?:\.\d+)?)\s*mm/gu,/(\d+(?:\.\d+)?)\s*mm[^。;;\n|]{0,10}?(?:挤塑聚苯|XPS)/gu]},{key:"cushion",label:"垫层混凝土强度等级",unit:"C标号",kind:"code",patterns:[/垫层[^。;;\n|]{0,20}?(C\d{2})/gu]},{key:"transformer",label:"箱式变压器容量",unit:"kVA",kind:"number",patterns:[/(\d+)\s*kVA[^。;;\n|]{0,12}?变压器/gu,/变压器[^。;;\n|]{0,12}?(\d+)\s*kVA/gu]},{key:"formwork",label:"模板周转次数",unit:"次",kind:"number",patterns:[/模板周转(?:次数|使用)?[^。;;\n|]{0,15}?(\d+)\s*次/gu]},{key:"block",label:"蒸压加气混凝土砌块强度等级",unit:"A标号",kind:"code",patterns:[/(?:蒸压加气混凝土|加气混凝土)?砌块[^。;;\n]{0,24}?(A\d+(?:\.\d+)?)/gu]},{key:"extinguisher",label:"干粉灭火器数量",unit:"具",kind:"number",patterns:[/灭火器[^。;;\n]{0,24}?(\d+)\s*具/gu]},{key:"pump",label:"潜水泵数量",unit:"台",kind:"number",patterns:[/潜水泵[^。;;\n]{0,24}?(\d+)\s*台/gu]},{key:"firstaid",label:"急救箱数量",unit:"套/个",kind:"number",patterns:[/急救箱[^。;;\n|]{0,24}?(\d+)\s*(?:套|个)/gu]},{key:"towerCrane",label:"塔式起重机(塔吊)数量",unit:"台",kind:"number",patterns:[/(?:塔式起重机|塔吊)[^。;;\n|]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:塔式起重机|塔吊)/gu]},{key:"hoist",label:"施工升降机(施工电梯)数量",unit:"台",kind:"number",patterns:[/(?:施工升降机|施工电梯)[^。;;\n|]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:施工升降机|施工电梯)/gu]},{key:"truckCrane",label:"汽车起重机(汽车吊)数量",unit:"台",kind:"number",patterns:[/(?:汽车起重机|汽车吊)[^。;;\n|]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:汽车起重机|汽车吊)/gu]},{key:"rebarCutter",label:"钢筋切断机数量",unit:"台",kind:"number",patterns:[/钢筋切断机[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"rebarBender",label:"钢筋弯曲机数量",unit:"台",kind:"number",patterns:[/钢筋弯曲机[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"circularSaw",label:"圆盘锯数量",unit:"台",kind:"number",patterns:[/圆盘锯[^。;;\n|]{0,24}?(\d+)\s*台/gu]}],ae=/\d+(?:\.\d+)?\s*(?:mm|kVA|次|具|台|套|个)\s*[//]\s*\d+/u,af=/不再出现|不得出现|严禁出现|避免出现|不采用|未采用|予以删除|已删除|取消|纠正为|更正为/u;function ag(a){let b=[];for(let c of ad){let d=new Set,e=[];for(let b of c.patterns)for(let c of a.matchAll(b)){let b=c[0].slice(0,40);if(ae.test(b))continue;let f=a.lastIndexOf("\n",c.index)+1,g=a.indexOf("\n",c.index);-1===g&&(g=a.length),af.test(a.slice(f,g))||(d.add(c[1]),e.push(b))}if(!(d.size<2))if("code"===c.kind)b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料参数口径矛盾:“${c.label}”出现 ${[...d].map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(e)].slice(0,3).join("、")}`,suggestion:`同一材料参数全文只允许一个口径:以设计图纸/工程量清单为准统一“${c.label}”,删除矛盾表述。`});else{let a=[...d].map(Number).filter(Number.isFinite);if(a.length<2)continue;let f=Math.max(...a);if(f-Math.min(...a)<=.2*f)continue;b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料/设备数量口径矛盾:“${c.label}”出现 ${a.map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(e)].slice(0,3).join("、")}`,suggestion:`同一设备/材料数量全文只允许一个口径:以应急物资清单/施工部署为准统一“${c.label}”,删除矛盾表述。`})}}return b.slice(0,8)}let ah=/桩基|灌注桩|钻孔桩|打桩|成桩|桩机/u;function ai(a){let b=function(a){let b=[];for(let c of[...a.matchAll(/^#{3,4}\s+[^\n]*(?:地基与基础)[^\n]*$/gmu)]){let d=(c.index||0)+c[0].length,e=a.slice(d).search(/^#{2,4}\s+/mu),f=a.slice(d,e>=0?d+e:a.length);b.push(f)}return b}(a);if(0===b.length||b.some(a=>ah.test(a)))return[];let c=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();!(!a||/^#{1,6}\s/u.test(a))&&ah.test(b)&&c.push(a.slice(0,48))}let d=[...new Set(c)].slice(0,5);return d.length<2?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`桩基表述残留:地基与基础章节施工流程为筏板/独立基础(无桩基工序),但全文另有 ${d.length} 处桩基表述:${d.join("、")}`,suggestion:"本项目基础形式不含桩基:删除全文所有桩基/桩机表述,进度计划表关键线路工序、质量验收划分表、隐蔽验收表均改为本项目实际基础工序(垫层/底板钢筋/混凝土)。"}]}let aj=/^\s*\|\s*计划工期\s*\|([^|\n]*)\|/u,ak=/工期延误|延误|违约|切除|赔偿|罚款|解除|扣减/u;function al(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=aj.exec(c);if(!a)continue;let d=(a[1]??"").trim();d&&ak.test(d)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基本信息表「计划工期」字段错填违约条款文字:“${d.slice(0,40)}”`,suggestion:"「计划工期」字段应填日历天数值(与招标文件前附表一致,如「540个日历天」);工期延误违约条款文字应放在工期风险管控章节,不得占用基本信息表字段。"})}return b.slice(0,2)}let am=/基础|支护|围护|桩|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|标高|深度|形式|体系/u;function an(a){let b=a.replace(/\s+/gu,""),c=new Set;for(let a of b.matchAll(/([一-龥]{2,8})\/([一-龥]{2,8})/gu)){if(!am.test(a[1])&&!am.test(a[2]))continue;let d=Math.max(0,(a.index||0)-12),e=Math.min(b.length,(a.index||0)+a[0].length+12),f=b.slice(d,e);/采用|形式|方式|方案|选用|拟用|拟采用|为/u.test(f)&&c.add(`“${a[1]}/${a[2]}”`)}for(let a of b.matchAll(/[((]\s*或[^))]{1,48}[))]/gu)){let d=a[0].slice(1,-1);if(!/按图纸|按实|按图|待定|另行|视[^,。;]{0,8}而定|根据实际/u.test(d))continue;let e=Math.max(0,(a.index||0)-20),f=b.slice(e,(a.index||0)+a[0].length);am.test(f)&&c.add(a[0].slice(0,30))}return 0===c.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`关键设计决策两可表述:${[...c].join("、")} 以并列/悬置形态表述,基础形式、支护形式等关键决策必须在正文中唯一确定`,suggestion:"以设计图纸/勘察报告/工程量清单为准锁定唯一决策并删除两可表述:明确写出本项目基础形式与支护形式的具体做法(如「基础形式为筏板基础」「基坑支护采用放坡+喷锚」),禁止「或…按图纸实施」类悬置话术。"}]}function ao(a){let b=a.replace(/\s+/gu,"");if((b.match(/基坑|开挖|支护/gu)||[]).length<3)return[];for(let a of b.matchAll(/(?:深度|标高)[^。;,,]{0,12}-?\d+(?:\.\d+)?[^。;,,]{0,6}/gu)){let b=a[0];if(!/(?:超过|大于|小于|不[大低小]于|不低于|按|倍|依据|详见|参考|示意|每)/u.test(b))return[]}return[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:"基坑深度数值未锁定:正文已有基坑支护/开挖成稿内容,但全文未出现「深度/标高+数值」的确定性表述(比较式阈值如「超过3m」不视为锁定),危大工程分级判定失去依据",suggestion:"从绑定资料(地质勘察报告/基坑支护设计图/基础平面图)锁定基坑开挖深度数值(如 5.85m)写入基坑支护小节;深度 ≥5m 的深基坑须同步标注危大工程分级与专家论证要求,禁止以「按图纸确定」回避深度数值。"}]}let ap=/[\u4e00-\u9fa5]{2,10}(?:杯|奖)(?![励金惩罚项])/gu,aq=/优质工程|文明工地|样板|标准化|观摩|示范|精品工程|结构优质|省优|市优/u;function ar(a){let b=a;for(;;){let a=b.replace(/^(?:争创|争取|力争|争获|确保|获得|创建|力创|评为|荣获|标为|目标为|承诺|为)/u,"");if(a===b||!a)break;b=a}return b}let as=/^\s*\|[\s:|-]+\|/u;function at(a){let b=a.split(/\r?\n/u),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>as.test(a),f=0;for(;f<b.length;){let a;if(!/^\s*\|/u.test(b[f])){f+=1;continue}let g=f;for(;g<b.length&&/^\s*\|/u.test(b[g]);)g+=1;let h=b.slice(f,g),i=0,j=0,k=0,l=b=>{if(!a)return;let e=h.slice(j,b);0!==e.length&&c.push({startLine:f+i,endLine:f+b-1,header:a,firstCol:e.map(a=>d(a)[0]?.replace(/[*_`]/gu,"").trim()||"").filter(Boolean),dataCells:e.flatMap(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())).filter(Boolean),bodyChars:e.join("").length,raw:h.slice(i,b)})};for(;k<h.length;){if(k+1<h.length&&e(h[k+1]||"")){l(k),a=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()),i=k,j=k+2,k+=2;continue}if(a&&k>j){let b=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()).filter(Boolean);if(au(b,a)>=.6&&k+1<h.length&&!e(h[k+1]||"")){l(k),a=b,i=k,j=k+1,k+=1;continue}}k+=1}l(h.length),f=g}return c}function au(a,b){if(0===a.length||0===b.length)return 0;let c=new Set(a),d=new Set(b);return[...c].filter(a=>d.has(a)).length/new Set([...c,...d]).size}function av(a,b){if(0===a.length)return 0;let c=[...b],d=0;for(let b of a){let a=c.indexOf(b);a>=0&&(c.splice(a,1),d+=1)}return d/a.length}let aw=/^[\d,,.]+\s*(?:人|个|台|具|套|处|支|辆|班|组|项)?$/u,ax=a=>a.filter(a=>!aw.test(a));function ay(a){let b=[],c=at(a);if(c.length<2)return b;for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a],f=c[d],g=e.header.length>0&&e.header.length===f.header.length&&e.header.every((a,b)=>a===f.header[b]),h=au(e.header,f.header),i=au(e.firstCol,f.firstCol),j=au(e.dataCells,f.dataCells),k=Math.max(av(ax(e.dataCells),ax(f.dataCells)),av(ax(f.dataCells),ax(e.dataCells)));(g&&j>=.6||h>=.7&&i>=.6||i>=.6&&k>=.6)&&b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`表格重复:第 ${e.startLine+1}~${e.endLine+1} 行表格(表头:${e.header.slice(0,3).join("|")})与第 ${f.startLine+1}~${f.endLine+1} 行表格高度重复(表头重合 ${Math.round(100*h)}%、数据重合 ${Math.round(100*j)}%、首列重合 ${Math.round(100*i)}%)`,suggestion:"同一文档内同主题表格只保留信息最全的一张:删除重复表格(保留字段与数据行更多的那张),删除后核对章节表格计划仍被覆盖。"})}return b.sort((a,b)=>{let c=a=>Number(a.match(/数据重合\s*(\d+)%/u)?.[1]??0);return c(b.message)-c(a.message)}).slice(0,5)}function az(a){let b=at(a);if(b.length<2)return{markdown:a,removedCount:0};let c=a.split(/\r?\n/u),d=new Set;for(let a=0;a<b.length;a+=1)for(let c=a+1;c<b.length;c+=1){let e=b[a],f=b[c];if(d.has(e.startLine)||d.has(f.startLine))continue;let g=e.header.length>0&&e.header.length===f.header.length&&e.header.every((a,b)=>a===f.header[b]),h=au(e.header,f.header),i=au(e.firstCol,f.firstCol),j=au(e.dataCells,f.dataCells),k=Math.max(av(ax(e.dataCells),ax(f.dataCells)),av(ax(f.dataCells),ax(e.dataCells)));if(!(g&&j>=.6)&&!(h>=.7&&i>=.6)&&!(i>=.6&&k>=.6))continue;let[l,m]=e.bodyChars>=f.bodyChars?[e,f]:[f,e];for(let a=m.startLine;a<=m.endLine;a+=1)d.add(a)}return 0===d.size?{markdown:a,removedCount:0}:{markdown:c.filter((a,b)=>!d.has(b)).join("\n"),removedCount:d.size}}function aA(a){let b=a.replace(/\s+/gu,"");return b.length>=40?b:void 0}function aB(a){let b=[],c=a.split(/\r?\n/u),d=new Map,e=[],f=()=>{let a=aA(e.join(""));if(a){let b=(d.get(a)||0)+1;d.set(a,b)}e=[]};for(let a of c){let b=a.trim();if(!b||/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)){f();continue}if(/^[-*•]\s/u.test(b)){f(),e.push(b),f();continue}e.push(b)}for(let[a,c]of(f(),[...d.entries()].filter(([,a])=>a>=2).slice(0,3)))b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`段落完全重复 ${c} 次:“${a.slice(0,40)}…”`,suggestion:"同一段落正文只保留首次出现处,删除其余重复段落;确需前后呼应时改写为差异化表述并压缩篇幅。"});return b}function aC(a){let b=a.split(/\r?\n/u),c=new Set,d=new Set,e=[],f=[],g=()=>{let a=aA(e.join(""));a&&(c.has(a)?f.forEach(a=>d.add(a)):c.add(a)),e=[],f=[]};return(b.forEach((a,b)=>{let c=a.trim();if(!c||/^#{1,6}\s/u.test(c)||/^\s*\|/u.test(c))return void g();if(/^[-*•]\s/u.test(c)){g(),e=[c],f=[b],g();return}e.push(c),f.push(b)}),g(),0===d.size)?{markdown:a,removedCount:0}:{markdown:b.filter((a,b)=>!d.has(b)).join("\n"),removedCount:d.size}}function aD(a,b,c){let d=new Set;for(let a of[...b.quality,...b.project,...b.schedule])for(let b of(0,e.lG)(a.value).matchAll(ap))d.add(ar(b[0]));if(c?.extracted)for(let a of[...c.awardObjectives||[],...c.specialQualityStandards||[],...c.awardClauses||[]])for(let b of(a.text||"").matchAll(ap))d.add(ar(b[0]));if(0===d.size)return[];let f=new Set;for(let b of a.matchAll(ap)){let a=ar(b[0]);!d.has(a)&&(aq.test(a)||f.add(a))}return 0===f.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`奖项表述与招标文件白名单不符:正文出现 ${[...f].join("、")},均未出现在招标文件评分项要求或绑定资料中`,suggestion:"创优目标必须以招标文件原文为准逐字落位(如「确保黄山杯」),禁止自行编造或替换为其他奖项名称;白名单外的奖项表述一律删除或替换为招标原文奖项。"}]}function aE(a){let b=a.split(/\r?\n/u),c=new Set;for(let a of b){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(!b)continue;let d=b[2].trim();(0,h.Xp)(d)&&c.add(d)}if(0===c.size)return[];let d=[...c];return[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`正文出现投标人资格内容小节:${d.slice(0,3).map(a=>`“${a}”`).join("、")}${d.length>3?" 等":""}(资格审查内容不属于施工组织设计,属资格文件/商务文件范畴)`,suggestion:"删除资格内容小节(标题与正文整体删除),不得以改写、合并、降级方式保留;正文如需提及安全生产许可证等证照,只能以施工管理口径表述(如“按规定持证上岗”),不得成节铺陈资格核验内容。"}]}let aF=/人[、,,]材[、,,]机/u,aG=/(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施/u;function aH(a){let b=a.match(aG)?.[1];return b||(/劳动力|人员|作业人员|劳务/u.test(a)?"人":/材料|物资|周转/u.test(a)?"材":/机械|设备|机具|塔吊|起重机/u.test(a)?"机":void 0)}function aI(a){let b=[],c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){let d,e=/^##\s+(.+)$/u.exec(c[a].trim());if(!e||!aF.test(e[1]))continue;let f=c.length;for(let b=a+1;b<c.length;b+=1)if(/^##\s+/u.test(c[b].trim())){f=b;break}let g=[];for(let e=a+1;e<f;e+=1){let a=/^###\s+(.+)$/u.exec(c[e].trim()),f=/^####\s+(.+)$/u.exec(c[e].trim());if(a){d={subject:aH(a[1]),title:a[1].trim()},g.push(d);continue}if(f&&d?.subject){let a=aH(f[1]);a&&a!==d.subject&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章层级错位:小节“${f[1].trim()}”挂在“${d.title}”之下(${"人"===a?"人":"材"===a?"材":"机"}的保障体系应独立成二级小节,不得并入${"人"===d.subject?"人":"材"===d.subject?"材":"机"}的保障体系)`,suggestion:`将“${f[1].trim()}”提升为独立二级小节,或将其内容合并到对应主题的二级小节。`})}}let h=new Set(g.map(a=>a.subject).filter(Boolean)),i=["人","材","机"].every(a=>h.has(a));(g.length<3||!i)&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章结构不完整:“${e[1].trim()}”仅 ${g.length} 个二级小节(人/材/机的保障体系未全部独立成节)`,suggestion:"拆分为“确保人的保障体系与措施”“确保材的保障体系与措施”“确保机的保障体系与措施”三个二级小节。"})}return b}function aJ(a,b){if(0===b.length)return{markdown:a,fixedCount:0,details:[]};let c=[...b].sort((a,b)=>b.start-a.start),d=a,e=0,f=[];for(let a of c)d=d.slice(0,a.start)+a.replacement+d.slice(a.end),e+=1,f.push(a.detail);return{markdown:d,fixedCount:e,details:[...new Set(f)].slice(0,8)}}function aK(a){let b=function(a){let b=t(a).map(a=>a.peak);return b.length>0?Math.max(...b):void 0}(a);if(void 0===b)return{markdown:a,fixedCount:0,details:[]};let c=[],d=d=>{for(let e of a.matchAll(d)){let d=Number(e[1].replace(/[,,]/gu,""));if(!Number.isFinite(d)||d<=0)continue;let f=e.index+e[0].indexOf(e[1]);!s(a,f)&&(d<=1.3*b||c.push({start:f,end:f+e[1].length,replacement:String(b),detail:`劳动力峰值 ${d}人→${b}人(以分阶段投入明细表为准)`}))}};for(let e of(d(p),d(q),a.matchAll(/(?:高峰期|高峰|峰值)[^。;;\n]{0,16}?控制(?:在|为|到)?(?:约)?\s*([\d,]+)\s*人(?:以内|以下|之内)?/gu))){let a=Number(e[1].replace(/[,,]/gu,""));if(!Number.isFinite(a)||a<=0||a>=b)continue;let d=e.index+e[0].indexOf(e[1]);c.push({start:d,end:d+e[1].length,replacement:String(b),detail:`劳动力控制上限 ${a}人→${b}人(与分阶段投入明细表峰值自洽)`})}return aJ(a,c)}function aL(a){let b=a.split(/\r?\n/u),c=/^\|.+\|$/u,d=[],e=0;for(let a of b)d.push({start:e,end:e+a.length}),e+=a.length+1;let f=new Map,g=[];for(let a=0;a<b.length;a+=1){if(!c.test(b[a].trim()))continue;let e=a;for(;a<b.length&&c.test(b[a].trim());)a+=1;let h=a,i=b.slice(Math.max(0,e-6),e).join("\n");if(/总进度计划|施工总进度|总进度安排/u.test(i)){for(let a of ab(b.slice(e,h).join("\n"))){let b=f.get(a.key);(void 0===b||a.day>b)&&f.set(a.key,a.day)}g.push({start:d[e].start,end:d[h-1].end})}}if(0===f.size)return{markdown:a,fixedCount:0,details:[]};let h=[],i=(a,b,c,d,e)=>{let i=aa.find(b=>b.re.test(a))?.key;if(void 0===i||!Number.isFinite(b)||b<1||b>3e3)return;let j=f.get(i);!(void 0===j||5>Math.abs(b-j))&&(g.some(a=>c>=a.start&&c<=a.end)||h.push({start:c,end:d,replacement:String(j),detail:`节点“${aa.find(a=>a.key===i)?.label||i}”工期 ${b}日→${j}日(以总进度计划表为准)`}))};for(let b of a.matchAll(/第(\d{2,3})日[^。;;\n]{0,14}?完成[^。;;\n]{0,12}?(基坑支护及土方外运|装饰装修及幕墙|机电安装及智能化调试|室外工程及竣工验收|地下结构出正负零|主体结构封顶|正负零|封顶)/gu)){let a=b.index+b[0].indexOf(b[1]);i(b[2],Number(b[1]),a,a+b[1].length,b[0].slice(0,40))}for(let b of a.matchAll(/(基坑支护|正负零|封顶|装饰装修|机电安装|竣工验收)(?:(?!(?:第\d{2,3}[日天]|,|、)).){0,8}?完成[^。;;\n]{0,10}?第(\d{2,3})[日天]/gu)){let a=b.index+b[0].indexOf(b[2]);i(b[1],Number(b[2]),a,a+b[2].length,b[0].slice(0,40))}for(let b of a.matchAll(/(主体(?:结构)?封顶)(?:(?!(?:第\d{2,3}[日天]|,|、|完成)).){0,20}?第(\d{2,3})日/gu)){let a=b.index+b[0].indexOf(b[2]);i(b[1],Number(b[2]),a,a+b[2].length,b[0].slice(0,40))}return aJ(a,h)}function aM(a){let b=[];for(let c of ad){if("number"!==c.kind)continue;let d=new Set,e=new Set;for(let b of c.patterns)for(let c of a.matchAll(b)){let b=c[0].slice(0,40);if(ae.test(b))continue;let f=a.lastIndexOf("\n",c.index)+1,g=a.indexOf("\n",c.index);-1===g&&(g=a.length);let h=a.slice(f,g);if(af.test(h))continue;let i=Number(c[1]);Number.isFinite(i)&&!(i<=0)&&(/^\s*\|/u.test(h)?d.add(i):e.add(i))}if(1!==d.size)continue;let f=[...d][0];if([...e].some(a=>Math.abs(a-f)>.2*f))for(let d of c.patterns)for(let e of a.matchAll(d)){let d=e[0].slice(0,40);if(ae.test(d))continue;let g=a.lastIndexOf("\n",e.index)+1,h=a.indexOf("\n",e.index);-1===h&&(h=a.length);let i=a.slice(g,h);if(af.test(i)||/^\s*\|/u.test(i))continue;let j=Number(e[1]);if(!Number.isFinite(j)||j<=0||Math.abs(j-f)<=.2*f)continue;let k=e.index+e[0].indexOf(e[1]);b.push({start:k,end:k+e[1].length,replacement:String(f),detail:`${c.label} ${j}${c.unit}→${f}${c.unit}(以表格口径为准)`})}}return aJ(a,b)}function aN(a){let b=a,c=0,d=[];for(let a of[aK,aL,aM]){let e=a(b);e.markdown!==b&&(b=e.markdown,c+=e.fixedCount,d.push(...e.details))}return{markdown:b,fixedCount:c,details:d.slice(0,12)}}function aO(a){let b=a.replace(/\s+/gu,"");return b.length?(b.match(/[0-9A-Za-z%℃°±×÷≥≤.]/gu)||[]).length/b.length:0}async function aP(a){if("0"===process.env.DOCUMENT_CROSS_CHAPTER_DEDUP)return[];let b=function(a){let b=[];return a.forEach((a,c)=>{(a.content||"").split(/\n\s*\n/u).forEach((a,d)=>{let e=a.trim();if(!e||/^#{1,6}\s/um.test(e)||/^\s*\|/um.test(e)||/^[-*•]\s/um.test(e))return;let f=e.replace(/\s+/gu,"");f.length<60||b.push({chapterIndex:c,paragraphIndex:d,text:e,normalized:f})})}),b}(a);if(b.length<2)return[];let c=await (0,f.Mv)(b.map(a=>a.normalized),b.map(a=>a.normalized)),d=[],e=new Set;for(let a=0;a<b.length;a+=1)for(let f=a+1;f<b.length;f+=1){let g=b[a],h=b[f];if(g.chapterIndex===h.chapterIndex||g.normalized===h.normalized)continue;let i=c(g.normalized,h.normalized);if(i<.82)continue;let j=aO(g.text),k=aO(h.text),l=j>k||j===k&&g.chapterIndex<=h.chapterIndex,m=l?g:h,n=l?h:g,o=`${n.chapterIndex}:${n.paragraphIndex}`;e.has(o)||(e.add(o),d.push({keep:{chapterIndex:m.chapterIndex,paragraphIndex:m.paragraphIndex},drop:{chapterIndex:n.chapterIndex,paragraphIndex:n.paragraphIndex},similarity:i,paragraphPreview:n.normalized.slice(0,40)}))}return d}async function aQ(a){return(await aP(a)).map(b=>({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",chapterId:a[b.drop.chapterIndex]?.id,message:`跨章语义重复:「${a[b.keep.chapterIndex]?.title||"?"}」与「${a[b.drop.chapterIndex]?.title||"?"}」存在内容高度雷同段落(相似度 ${b.similarity.toFixed(2)}):“${b.paragraphPreview}…”`,suggestion:"同一内容全文只保留一处(保留信息密度高者);删除或改写本章的雷同段落,与本章主题相关的独有信息归并后,不得与他章段落语义重复。"}))}async function aR(a){let b=await aP(a);if(0===b.length)return 0;let c=0;for(let d of b){let b=a[d.drop.chapterIndex];if(!b)continue;let e=(b.content||"").split(/\n\s*\n/u);!(d.drop.paragraphIndex>=e.length)&&(e[d.drop.paragraphIndex].trim().replace(/\s+/gu,"").length<60||(e.splice(d.drop.paragraphIndex,1),b.content=e.join("\n\n"),c+=1))}return c}},46482:(a,b,c)=>{c.d(b,{Zk:()=>r,Tz:()=>z,X6:()=>s,fC:()=>A,l8:()=>y,JP:()=>q});var d=c(73024),e=c(76760),f=c(74329);c(25840),c(23500);var g=c(70933),h=c(70208),i=c(61373),j=c(78217);c(23760);var k=c(30355),l=c(44505),m=c(85016),n=c(22157);let o=[...k.P9.filter(a=>!n.Kd.includes(a)),...m.D$.source.split("|")];var p=c(95734);function q(a){let b=a.template.chapters.length,c=b>0?a.targetWords/b:a.targetWords,d=`${a.template.name}
|
|
18
|
+
]{18,60})[。!?!?]`,"gu");function H(a){let b=[],c=new Map;for(let b of a.matchAll(G)){let a=b[1].trim(),d=a.replace(/[\d,,.。%%㎡m2²]/gu,"").slice(0,16);if(d.length<10)continue;let e=c.get(d)||{count:0,sample:a};e.count+=1,c.set(d,e)}for(let{count:a,sample:d}of c.values())a<3||b.push({level:"warning",severity:"warning",category:"style",owner:"llm",repairability:"llm_repairable",message:`段首固定开场机械重复 ${a} 次:“${d.slice(0,30)}…”`,suggestion:"同一段首句式只保留首次出现处,其余处按所在章节语境改写为差异化开场,避免模板化套话观感。"});return b.slice(0,3)}function I(a){let b,c=a.split("\n"),d=[];for(let a=0;a<c.length;a+=1){let e=/^(#{2,4})\s+(.+)$/u.exec(c[a].trim());if(e){let c=e[1].length;/(?:工程概况|项目概况|基本信息)/u.test(e[2])?b={index:a,level:c}:b&&c<=b.level&&(d.push([b.index,a]),b=void 0)}}b&&d.push([b.index,c.length]);let e=a=>d.some(([b,c])=>a>=b&&a<c),f=c.filter((a,b)=>e(b)).join("\n"),g=[];for(let a=0;a<c.length;a+=1){if(e(a))continue;let b=/本项目为|本工程为|该项目为|该工程为/u.exec(c[a]);if(!b)continue;let d=c[a].slice(b.index).split(/[。!?!?]/u)[0];d&&d.length>=12&&g.push(d)}return{overviewBody:f,sentences:g}}function J(a,b={}){let c=[],{overviewBody:d,sentences:e}=I(a);if(0===e.length||!d||!b.semanticSimilarity)return c;let f=[];for(let a of e)if(b.semanticSimilarity(a,d)>=.6&&f.push(a.slice(0,36)),f.length>=3)break;return 0===f.length||c.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`项目概况段跨章复述不得出现:概况章外有 ${f.length} 处以“本项目为/本工程为”等总述开头整段复述概况内容:${f.map(a=>`“${a}…”`).join("、")}`,suggestion:"总述数据只在工程概况类小节集中交代一次:其他章节直接写本章内容,仅可引用所需的具体数字(如“45日历天总工期”),不得复述完整概况段。"}),c}function K(a,b){let c,{overviewBody:d,sentences:e}=I(a);if(0===e.length||!d)return a;let f=a.split(/\r?\n/u),g=[];for(let a=0;a<f.length;a+=1){let b=/^(#{2,4})\s+(.+)$/u.exec(f[a].trim());if(b){let d=b[1].length;/(?:工程概况|项目概况|基本信息)/u.test(b[2])?c={index:a,level:d}:c&&d<=c.level&&(g.push([c.index,a]),c=void 0)}}c&&g.push([c.index,f.length]);let h=!1,i=f.map((a,c)=>{if(g.some(([a,b])=>c>=a&&c<b)||/^#{1,6}\s/u.test(a.trim())||/^\s*\|/u.test(a.trim())||!/本项目为|本工程为|该项目为|该工程为/u.test(a))return a;let e=a.split(/(?<=[。!?!?])/u).filter(a=>{if(!/本项目为|本工程为|该项目为|该工程为/u.test(a))return!0;let c=a.split(/[。!?!?]/u)[0];return c.length<12||.6>b(c,d)});return e.join("")!==a&&(h=!0),e.join("")});return h?i.join("\n"):a}let L=["销项","复查","整改","闭环"];function M(a){let b=[],c=(0,d.V7)(a);if(c<3e3)return b;let e=[];for(let b of L){let d=a.split(b).length-1;e.push(d/c*1e3)}let f=Math.max(...e),g=L[e.indexOf(f)];return f>=3&&b.push({level:"warning",severity:"warning",category:"style",owner:"llm",repairability:"llm_repairable",message:`闭环句式模板化密集:“${g}”达 ${f.toFixed(1)} 次/千字(销项/复查/整改/闭环统一结尾高度重复)`,suggestion:"保留关键控制环节的闭环表述,其余改为差异化的过程控制语言(检验批验收、实测实量、旁站记录等),提升语言精练度。"}),b}let N=["专项设计文件尚未完成,待后续补充","评分指标存在缺口尚未明确","依据承诺函后续跟踪完善"];async function O(a){let b=[],c=a.split(/\n+/u).filter(a=>a.trim()&&!/^\s*(#{1,6}\s+|\||[-*+]\s|>)/u.test(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.trim()).filter(a=>a.length>=12);if(0===c.length)return b;let d=await (0,f.Mv)(c,[...N]),e=[...new Set(c.filter(a=>N.some(b=>d(a,b)>=f.Eh)))];if(0===e.length)return b;for(let a of e)b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`自伤表述候选:“${a}”暴露投标短板,需按上下文判定后改写`,suggestion:"投标文件不得主动暴露“专项设计未完成/指标存在缺口”等短板:改写为正向落实表述(如“按施工图绿色建筑专篇编制专项方案,逐项落实评分项并跟踪验收”);如属现场条件合理风险描述(地质/管线尚不明确),保留但需配套勘查与应对措施。"});return b.slice(0,3)}let P=/([\u4e00-\u9fa5]{2})\1/gu;function Q(a){let b=[...new Set(a.match(P)||[])].slice(0,3);return 0===b.length?[]:[{level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`正文存在叠词重复表述:${b.map(a=>`“${a}”`).join("、")}`,suggestion:"删除紧邻重复字词,保持语句完整通顺(“执行执行”改为“执行”)。"}]}function R(a){return a.replace(P,"$1")}let S=/暂列金额|暂估价|报价明细|综合单价|清单合价|预留金|投标报价/u,T=/(?:税率|增值税)[^。;;\n]{0,12}\d/u,U=/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|最高投标限价|招标控制价/u,V=/材料价格|商务报价|投标总价|合同总价|工程总价/u,W=["暂列金额与暂估价的报价明细","综合单价与清单合价的商务数据","投标报价与费率标准的商务条款"],X=["合同估算价与投资估算的项目信息","最高投标限价与招标控制价的公开信息","商务数据不得写入施工组织设计正文的约束说明"];async function Y(a){return(0,g.A)({prototypes:[...W],negativePrototypes:[...X],embedDocuments:a})}async function Z(a,b){let c=[],d=await Y(b),e=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();if(!(/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a))&&(S.test(b)||T.test(b)||V.test(b)))for(let a of(T.test(b)&&c.push("税率/增值税"),b.split(/(?<=[。;;])\s*/u))){let b=a.match(S)||[],d=U.test(a),f=V.test(a);!(b.length>0)||d||f?(b.length>0&&(d||f)||f&&0===b.length)&&e.push(a):c.push(...b)}}if(e.length>0){let a=await d(e);e.forEach((b,d)=>{if(!a[d])return;let e=b.match(S)||[],f=b.match(V)||[];c.push(...e.length>0?e:f)})}let f=[...new Set(c)].slice(0,4);return 0===f.length?[]:[{level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`正文出现商务条款数据:${f.join("、")}`,suggestion:"商务数据(暂列金额/暂估价/综合单价/税率等)不得写入施组正文:删除该句或改写为定性表述(如“按合同约定执行”),商务口径仅保留在项目信息表中。"}]}function $(a){return a.split(/(?<=[。;;])\s*/u).filter(a=>!!(/^\s*\|/u.test(a)||/^#{1,6}\s/u.test(a))||!(S.test(a)||T.test(a))).join("")}function _(a){return a.split(/\r?\n/u).map(a=>{let b=a.trim();return/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)||!S.test(a)&&!T.test(a)?a:a.split(/(?<=[。;;])\s*/u).filter(a=>!(S.test(a)||T.test(a))).join("")}).join("\n")}let aa=[{key:"excavation",label:"基坑支护及土方外运",re:/基坑支护/u},{key:"zero",label:"地下结构出正负零",re:/正负零|地下室结构/u},{key:"topping",label:"主体结构封顶",re:/主体(?:结构)?封顶/u},{key:"decoration",label:"装饰装修及幕墙",re:/装饰装修/u},{key:"mep",label:"机电安装及智能化调试",re:/机电安装/u},{key:"completion",label:"室外工程及竣工验收",re:/竣工验收/u}];function ab(a){let b=[],c=(a,c,d)=>{let e=aa.find(b=>b.re.test(a))?.key;void 0!==e&&Number.isFinite(c)&&c>=1&&c<=3e3&&b.push({key:e,day:c,raw:d})};for(let b of a.matchAll(/第(\d{2,3})日[^。;;\n]{0,14}?完成[^。;;\n]{0,12}?(基坑支护及土方外运|装饰装修及幕墙|机电安装及智能化调试|室外工程及竣工验收|地下结构出正负零|主体结构封顶|正负零|封顶)/gu))c(b[2],Number(b[1]),b[0].slice(0,40));for(let b of a.matchAll(/(基坑支护|正负零|封顶|装饰装修|机电安装|竣工验收)(?:(?!(?:第\d{2,3}[日天]|,|、)).){0,8}?完成[^。;;\n]{0,10}?第(\d{2,3})[日天]/gu))c(b[1],Number(b[2]),b[0].slice(0,40));for(let b of a.matchAll(/(主体(?:结构)?封顶)(?:(?!(?:第\d{2,3}[日天]|,|、|完成)).){0,20}?第(\d{2,3})日/gu))c(b[1],Number(b[2]),b[0].slice(0,40));let d=new Set;return b.filter(a=>{let b=`${a.key}:${a.raw}`;return!d.has(b)&&(d.add(b),!0)})}function ac(a){let b=[],c=new Map;for(let b of ab(a)){let a=c.get(b.key)||[];a.push(b),c.set(b.key,a)}for(let a of aa){let d=c.get(a.key);if(!d||d.length<2)continue;let e=[...new Set(d.map(a=>a.day))];if(e.length<2||Math.max(...e)-Math.min(...e)<5)continue;let f=[...new Set(d.map(a=>a.raw))].slice(0,4).join("、");b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`节点工期口径矛盾:“${a.label}”节点出现 ${e.map(a=>`${a}日`).join(" 与 ")} 两套口径:${f}`,suggestion:`关键节点完成时间必须全文唯一:以总进度计划表为准统一“${a.label}”节点日期,删除正文/其他表中矛盾的“第N日”表述。`})}return b.slice(0,4)}let ad=[{key:"xps",label:"挤塑聚苯板(XPS)厚度",unit:"mm",kind:"number",patterns:[/(?:挤塑聚苯|XPS)(?:(?!(?:宽度|拼缝|不大于|不超过|小于|≤|采用|使用|选用|铺设|粘贴)).){0,40}?(\d+(?:\.\d+)?)\s*mm/gu,/(\d+(?:\.\d+)?)\s*mm[^。;;\n|]{0,10}?(?:挤塑聚苯|XPS)/gu]},{key:"cushion",label:"垫层混凝土强度等级",unit:"C标号",kind:"code",patterns:[/垫层[^。;;\n|]{0,20}?(C\d{2})/gu]},{key:"transformer",label:"箱式变压器容量",unit:"kVA",kind:"number",patterns:[/(\d+)\s*kVA[^。;;\n|]{0,12}?变压器/gu,/变压器[^。;;\n|]{0,12}?(\d+)\s*kVA/gu]},{key:"formwork",label:"模板周转次数",unit:"次",kind:"number",patterns:[/模板周转(?:次数|使用)?[^。;;\n|]{0,15}?(\d+)\s*次/gu]},{key:"block",label:"蒸压加气混凝土砌块强度等级",unit:"A标号",kind:"code",patterns:[/(?:蒸压加气混凝土|加气混凝土)?砌块[^。;;\n]{0,24}?(A\d+(?:\.\d+)?)/gu]},{key:"extinguisher",label:"干粉灭火器数量",unit:"具",kind:"number",patterns:[/灭火器[^。;;\n]{0,24}?(\d+)\s*具/gu]},{key:"pump",label:"潜水泵数量",unit:"台",kind:"number",patterns:[/潜水泵[^。;;\n]{0,24}?(\d+)\s*台/gu]},{key:"firstaid",label:"急救箱数量",unit:"套/个",kind:"number",patterns:[/急救箱[^。;;\n|]{0,24}?(\d+)\s*(?:套|个)/gu]},{key:"scheduleDays",label:"计划总工期",unit:"日历天",kind:"number",patterns:[/(?:计划工期|合同工期|工期总日历天数|工期控制|工期目标|总工期)[^。;;\n|]{0,12}?(\d{1,4})\s*个?\s*日历天/gu,/(\d{1,4})\s*个?\s*日历天[^。;;\n|]{0,8}?(?:总工期|倒排|分解|为唯一|完成)/gu]},{key:"projectCode",label:"项目编号",unit:"",kind:"code",patterns:[/(?:招标项目编号|项目编号)[^。;;\n|]{0,8}?(20\d{2}[A-Z]{1,8}\d{2,10})/gu]},{key:"towerCrane",label:"塔式起重机(塔吊)数量",unit:"台",kind:"number",patterns:[/(?:塔式起重机|塔吊)[^。;;\n|]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:塔式起重机|塔吊)/gu]},{key:"hoist",label:"施工升降机(施工电梯)数量",unit:"台",kind:"number",patterns:[/(?:施工升降机|施工电梯)[^。;;\n|]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:施工升降机|施工电梯)/gu]},{key:"truckCrane",label:"汽车起重机(汽车吊)数量",unit:"台",kind:"number",patterns:[/(?:汽车起重机|汽车吊)[^。;;\n|]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:汽车起重机|汽车吊)/gu]},{key:"rebarCutter",label:"钢筋切断机数量",unit:"台",kind:"number",patterns:[/钢筋切断机[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"rebarBender",label:"钢筋弯曲机数量",unit:"台",kind:"number",patterns:[/钢筋弯曲机[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"circularSaw",label:"圆盘锯数量",unit:"台",kind:"number",patterns:[/圆盘锯[^。;;\n|]{0,24}?(\d+)\s*台/gu]}],ae=/\d+(?:\.\d+)?\s*(?:mm|kVA|次|具|台|套|个)\s*[//]\s*\d+/u,af=/不再出现|不得出现|严禁出现|避免出现|不采用|未采用|予以删除|已删除|取消|纠正为|更正为/u;function ag(a){let b=[];for(let c of ad){let d=new Set,e=[];for(let b of c.patterns)for(let c of a.matchAll(b)){let b=c[0].slice(0,40);if(ae.test(b))continue;let f=a.lastIndexOf("\n",c.index)+1,g=a.indexOf("\n",c.index);-1===g&&(g=a.length),af.test(a.slice(f,g))||(d.add(c[1]),e.push(b))}if(!(d.size<2))if("code"===c.kind)b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料参数口径矛盾:“${c.label}”出现 ${[...d].map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(e)].slice(0,3).join("、")}`,suggestion:`同一材料参数全文只允许一个口径:以设计图纸/工程量清单为准统一“${c.label}”,删除矛盾表述。`});else{let a=[...d].map(Number).filter(Number.isFinite);if(a.length<2)continue;let f=Math.max(...a);if(f-Math.min(...a)<=.2*f)continue;b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料/设备数量口径矛盾:“${c.label}”出现 ${a.map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(e)].slice(0,3).join("、")}`,suggestion:`同一设备/材料数量全文只允许一个口径:以应急物资清单/施工部署为准统一“${c.label}”,删除矛盾表述。`})}}return b.slice(0,8)}let ah=/桩基|灌注桩|钻孔桩|打桩|成桩|桩机/u;function ai(a){let b=function(a){let b=[];for(let c of[...a.matchAll(/^#{3,4}\s+[^\n]*(?:地基与基础)[^\n]*$/gmu)]){let d=(c.index||0)+c[0].length,e=a.slice(d).search(/^#{2,4}\s+/mu),f=a.slice(d,e>=0?d+e:a.length);b.push(f)}return b}(a);if(0===b.length||b.some(a=>ah.test(a)))return[];let c=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();!(!a||/^#{1,6}\s/u.test(a))&&ah.test(b)&&c.push(a.slice(0,48))}let d=[...new Set(c)].slice(0,5);return d.length<2?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`桩基表述残留:地基与基础章节施工流程为筏板/独立基础(无桩基工序),但全文另有 ${d.length} 处桩基表述:${d.join("、")}`,suggestion:"本项目基础形式不含桩基:删除全文所有桩基/桩机表述,进度计划表关键线路工序、质量验收划分表、隐蔽验收表均改为本项目实际基础工序(垫层/底板钢筋/混凝土)。"}]}let aj=/^\s*\|\s*计划工期\s*\|([^|\n]*)\|/u,ak=/工期延误|延误|违约|切除|赔偿|罚款|解除|扣减/u;function al(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=aj.exec(c);if(!a)continue;let d=(a[1]??"").trim();d&&ak.test(d)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基本信息表「计划工期」字段错填违约条款文字:“${d.slice(0,40)}”`,suggestion:"「计划工期」字段应填日历天数值(与招标文件前附表一致,如「540个日历天」);工期延误违约条款文字应放在工期风险管控章节,不得占用基本信息表字段。"})}return b.slice(0,2)}let am=/基础|支护|围护|桩|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|标高|深度|形式|体系/u;function an(a){let b=a.replace(/\s+/gu,""),c=new Set;for(let a of b.matchAll(/([一-龥]{2,8})\/([一-龥]{2,8})/gu)){if(!am.test(a[1])&&!am.test(a[2]))continue;let d=Math.max(0,(a.index||0)-12),e=Math.min(b.length,(a.index||0)+a[0].length+12),f=b.slice(d,e);/采用|形式|方式|方案|选用|拟用|拟采用|为/u.test(f)&&c.add(`“${a[1]}/${a[2]}”`)}for(let a of b.matchAll(/[((]\s*或[^))]{1,48}[))]/gu)){let d=a[0].slice(1,-1);if(!/按图纸|按实|按图|待定|另行|视[^,。;]{0,8}而定|根据实际/u.test(d))continue;let e=Math.max(0,(a.index||0)-20),f=b.slice(e,(a.index||0)+a[0].length);am.test(f)&&c.add(a[0].slice(0,30))}return 0===c.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`关键设计决策两可表述:${[...c].join("、")} 以并列/悬置形态表述,基础形式、支护形式等关键决策必须在正文中唯一确定`,suggestion:"以设计图纸/勘察报告/工程量清单为准锁定唯一决策并删除两可表述:明确写出本项目基础形式与支护形式的具体做法(如「基础形式为筏板基础」「基坑支护采用放坡+喷锚」),禁止「或…按图纸实施」类悬置话术。"}]}function ao(a){let b=a.replace(/\s+/gu,"");if((b.match(/基坑|开挖|支护/gu)||[]).length<3)return[];for(let a of b.matchAll(/(?:深度|标高)[^。;,,]{0,12}-?\d+(?:\.\d+)?[^。;,,]{0,6}/gu)){let b=a[0];if(!/(?:超过|大于|小于|不[大低小]于|不低于|按|倍|依据|详见|参考|示意|每)/u.test(b))return[]}return[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:"基坑深度数值未锁定:正文已有基坑支护/开挖成稿内容,但全文未出现「深度/标高+数值」的确定性表述(比较式阈值如「超过3m」不视为锁定),危大工程分级判定失去依据",suggestion:"从绑定资料(地质勘察报告/基坑支护设计图/基础平面图)锁定基坑开挖深度数值(如 5.85m)写入基坑支护小节;深度 ≥5m 的深基坑须同步标注危大工程分级与专家论证要求,禁止以「按图纸确定」回避深度数值。"}]}let ap=/[\u4e00-\u9fa5]{2,10}(?:杯|奖)(?![励金惩罚项])/gu,aq=/优质工程|文明工地|样板|标准化|观摩|示范|精品工程|结构优质|省优|市优/u;function ar(a){let b=a;for(;;){let a=b.replace(/^(?:争创|争取|力争|争获|确保|获得|创建|力创|评为|荣获|标为|目标为|承诺|为)/u,"");if(a===b||!a)break;b=a}return b}let as=/^\s*\|[\s:|-]+\|/u;function at(a){let b=a.split(/\r?\n/u),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>as.test(a),f=0;for(;f<b.length;){let a;if(!/^\s*\|/u.test(b[f])){f+=1;continue}let g=f;for(;g<b.length&&/^\s*\|/u.test(b[g]);)g+=1;let h=b.slice(f,g),i=0,j=0,k=0,l=b=>{if(!a)return;let e=h.slice(j,b);0!==e.length&&c.push({startLine:f+i,endLine:f+b-1,header:a,firstCol:e.map(a=>d(a)[0]?.replace(/[*_`]/gu,"").trim()||"").filter(Boolean),dataCells:e.flatMap(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())).filter(Boolean),bodyChars:e.join("").length,raw:h.slice(i,b)})};for(;k<h.length;){if(k+1<h.length&&e(h[k+1]||"")){l(k),a=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()),i=k,j=k+2,k+=2;continue}if(a&&k>j){let b=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()).filter(Boolean);if(au(b,a)>=.6&&k+1<h.length&&!e(h[k+1]||"")){l(k),a=b,i=k,j=k+1,k+=1;continue}}k+=1}l(h.length),f=g}return c}function au(a,b){if(0===a.length||0===b.length)return 0;let c=new Set(a),d=new Set(b);return[...c].filter(a=>d.has(a)).length/new Set([...c,...d]).size}function av(a,b){if(0===a.length)return 0;let c=[...b],d=0;for(let b of a){let a=c.indexOf(b);a>=0&&(c.splice(a,1),d+=1)}return d/a.length}let aw=/^[\d,,.]+\s*(?:人|个|台|具|套|处|支|辆|班|组|项)?$/u,ax=a=>a.filter(a=>!aw.test(a));function ay(a){let b=[],c=at(a);if(c.length<2)return b;for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a],f=c[d],g=e.header.length>0&&e.header.length===f.header.length&&e.header.every((a,b)=>a===f.header[b]),h=au(e.header,f.header),i=au(e.firstCol,f.firstCol),j=au(e.dataCells,f.dataCells),k=Math.max(av(ax(e.dataCells),ax(f.dataCells)),av(ax(f.dataCells),ax(e.dataCells)));(g&&j>=.6||h>=.7&&i>=.6||i>=.6&&k>=.6)&&b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`表格重复:第 ${e.startLine+1}~${e.endLine+1} 行表格(表头:${e.header.slice(0,3).join("|")})与第 ${f.startLine+1}~${f.endLine+1} 行表格高度重复(表头重合 ${Math.round(100*h)}%、数据重合 ${Math.round(100*j)}%、首列重合 ${Math.round(100*i)}%)`,suggestion:"同一文档内同主题表格只保留信息最全的一张:删除重复表格(保留字段与数据行更多的那张),删除后核对章节表格计划仍被覆盖。"})}return b.sort((a,b)=>{let c=a=>Number(a.match(/数据重合\s*(\d+)%/u)?.[1]??0);return c(b.message)-c(a.message)}).slice(0,5)}function az(a){let b=at(a);if(b.length<2)return{markdown:a,removedCount:0};let c=a.split(/\r?\n/u),d=new Set;for(let a=0;a<b.length;a+=1)for(let c=a+1;c<b.length;c+=1){let e=b[a],f=b[c];if(d.has(e.startLine)||d.has(f.startLine))continue;let g=e.header.length>0&&e.header.length===f.header.length&&e.header.every((a,b)=>a===f.header[b]),h=au(e.header,f.header),i=au(e.firstCol,f.firstCol),j=au(e.dataCells,f.dataCells),k=Math.max(av(ax(e.dataCells),ax(f.dataCells)),av(ax(f.dataCells),ax(e.dataCells)));if(!(g&&j>=.6)&&!(h>=.7&&i>=.6)&&!(i>=.6&&k>=.6))continue;let[l,m]=e.bodyChars>=f.bodyChars?[e,f]:[f,e];for(let a=m.startLine;a<=m.endLine;a+=1)d.add(a)}return 0===d.size?{markdown:a,removedCount:0}:{markdown:c.filter((a,b)=>!d.has(b)).join("\n"),removedCount:d.size}}function aA(a){let b=a.replace(/\s+/gu,"");return b.length>=40?b:void 0}function aB(a){let b=[],c=a.split(/\r?\n/u),d=new Map,e=[],f=()=>{let a=aA(e.join(""));if(a){let b=(d.get(a)||0)+1;d.set(a,b)}e=[]};for(let a of c){let b=a.trim();if(!b||/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)){f();continue}if(/^[-*•]\s/u.test(b)){f(),e.push(b),f();continue}e.push(b)}for(let[a,c]of(f(),[...d.entries()].filter(([,a])=>a>=2).slice(0,3)))b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`段落完全重复 ${c} 次:“${a.slice(0,40)}…”`,suggestion:"同一段落正文只保留首次出现处,删除其余重复段落;确需前后呼应时改写为差异化表述并压缩篇幅。"});return b}function aC(a){let b=a.split(/\r?\n/u),c=new Set,d=new Set,e=[],f=[],g=()=>{let a=aA(e.join(""));a&&(c.has(a)?f.forEach(a=>d.add(a)):c.add(a)),e=[],f=[]};return(b.forEach((a,b)=>{let c=a.trim();if(!c||/^#{1,6}\s/u.test(c)||/^\s*\|/u.test(c))return void g();if(/^[-*•]\s/u.test(c)){g(),e=[c],f=[b],g();return}e.push(c),f.push(b)}),g(),0===d.size)?{markdown:a,removedCount:0}:{markdown:b.filter((a,b)=>!d.has(b)).join("\n"),removedCount:d.size}}function aD(a,b,c){let d=new Set;for(let a of[...b.quality,...b.project,...b.schedule])for(let b of(0,e.lG)(a.value).matchAll(ap))d.add(ar(b[0]));if(c?.extracted)for(let a of[...c.awardObjectives||[],...c.specialQualityStandards||[],...c.awardClauses||[]])for(let b of(a.text||"").matchAll(ap))d.add(ar(b[0]));if(0===d.size)return[];let f=new Set;for(let b of a.matchAll(ap)){let a=ar(b[0]);!d.has(a)&&(aq.test(a)||f.add(a))}return 0===f.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`奖项表述与招标文件白名单不符:正文出现 ${[...f].join("、")},均未出现在招标文件评分项要求或绑定资料中`,suggestion:"创优目标必须以招标文件原文为准逐字落位(如「确保黄山杯」),禁止自行编造或替换为其他奖项名称;白名单外的奖项表述一律删除或替换为招标原文奖项。"}]}function aE(a){let b=a.split(/\r?\n/u),c=new Set;for(let a of b){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(!b)continue;let d=b[2].trim();(0,h.Xp)(d)&&c.add(d)}if(0===c.size)return[];let d=[...c];return[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`正文出现投标人资格内容小节:${d.slice(0,3).map(a=>`“${a}”`).join("、")}${d.length>3?" 等":""}(资格审查内容不属于施工组织设计,属资格文件/商务文件范畴)`,suggestion:"删除资格内容小节(标题与正文整体删除),不得以改写、合并、降级方式保留;正文如需提及安全生产许可证等证照,只能以施工管理口径表述(如“按规定持证上岗”),不得成节铺陈资格核验内容。"}]}let aF=/人[、,,]材[、,,]机/u,aG=/(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施/u;function aH(a){let b=a.match(aG)?.[1];return b||(/劳动力|人员|作业人员|劳务/u.test(a)?"人":/材料|物资|周转/u.test(a)?"材":/机械|设备|机具|塔吊|起重机/u.test(a)?"机":void 0)}function aI(a){let b=[],c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){let d,e=/^##\s+(.+)$/u.exec(c[a].trim());if(!e||!aF.test(e[1]))continue;let f=c.length;for(let b=a+1;b<c.length;b+=1)if(/^##\s+/u.test(c[b].trim())){f=b;break}let g=[];for(let e=a+1;e<f;e+=1){let a=/^###\s+(.+)$/u.exec(c[e].trim()),f=/^####\s+(.+)$/u.exec(c[e].trim());if(a){d={subject:aH(a[1]),title:a[1].trim()},g.push(d);continue}if(f&&d?.subject){let a=aH(f[1]);a&&a!==d.subject&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章层级错位:小节“${f[1].trim()}”挂在“${d.title}”之下(${"人"===a?"人":"材"===a?"材":"机"}的保障体系应独立成二级小节,不得并入${"人"===d.subject?"人":"材"===d.subject?"材":"机"}的保障体系)`,suggestion:`将“${f[1].trim()}”提升为独立二级小节,或将其内容合并到对应主题的二级小节。`})}}let h=new Set(g.map(a=>a.subject).filter(Boolean)),i=["人","材","机"].every(a=>h.has(a));(g.length<3||!i)&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章结构不完整:“${e[1].trim()}”仅 ${g.length} 个二级小节(人/材/机的保障体系未全部独立成节)`,suggestion:"拆分为“确保人的保障体系与措施”“确保材的保障体系与措施”“确保机的保障体系与措施”三个二级小节。"})}return b}function aJ(a,b){if(0===b.length)return{markdown:a,fixedCount:0,details:[]};let c=[...b].sort((a,b)=>b.start-a.start),d=a,e=0,f=[];for(let a of c)d=d.slice(0,a.start)+a.replacement+d.slice(a.end),e+=1,f.push(a.detail);return{markdown:d,fixedCount:e,details:[...new Set(f)].slice(0,8)}}function aK(a){let b=function(a){let b=t(a).map(a=>a.peak);return b.length>0?Math.max(...b):void 0}(a);if(void 0===b)return{markdown:a,fixedCount:0,details:[]};let c=[],d=d=>{for(let e of a.matchAll(d)){let d=Number(e[1].replace(/[,,]/gu,""));if(!Number.isFinite(d)||d<=0)continue;let f=e.index+e[0].indexOf(e[1]);!s(a,f)&&(d<=1.3*b||c.push({start:f,end:f+e[1].length,replacement:String(b),detail:`劳动力峰值 ${d}人→${b}人(以分阶段投入明细表为准)`}))}};for(let e of(d(p),d(q),a.matchAll(/(?:高峰期|高峰|峰值)[^。;;\n]{0,16}?控制(?:在|为|到)?(?:约)?\s*([\d,]+)\s*人(?:以内|以下|之内)?/gu))){let a=Number(e[1].replace(/[,,]/gu,""));if(!Number.isFinite(a)||a<=0||a>=b)continue;let d=e.index+e[0].indexOf(e[1]);c.push({start:d,end:d+e[1].length,replacement:String(b),detail:`劳动力控制上限 ${a}人→${b}人(与分阶段投入明细表峰值自洽)`})}return aJ(a,c)}function aL(a){let b=a.split(/\r?\n/u),c=/^\|.+\|$/u,d=[],e=0;for(let a of b)d.push({start:e,end:e+a.length}),e+=a.length+1;let f=new Map,g=[];for(let a=0;a<b.length;a+=1){if(!c.test(b[a].trim()))continue;let e=a;for(;a<b.length&&c.test(b[a].trim());)a+=1;let h=a,i=b.slice(Math.max(0,e-6),e).join("\n");if(/总进度计划|施工总进度|总进度安排/u.test(i)){for(let a of ab(b.slice(e,h).join("\n"))){let b=f.get(a.key);(void 0===b||a.day>b)&&f.set(a.key,a.day)}g.push({start:d[e].start,end:d[h-1].end})}}if(0===f.size)return{markdown:a,fixedCount:0,details:[]};let h=[],i=(a,b,c,d,e)=>{let i=aa.find(b=>b.re.test(a))?.key;if(void 0===i||!Number.isFinite(b)||b<1||b>3e3)return;let j=f.get(i);!(void 0===j||5>Math.abs(b-j))&&(g.some(a=>c>=a.start&&c<=a.end)||h.push({start:c,end:d,replacement:String(j),detail:`节点“${aa.find(a=>a.key===i)?.label||i}”工期 ${b}日→${j}日(以总进度计划表为准)`}))};for(let b of a.matchAll(/第(\d{2,3})日[^。;;\n]{0,14}?完成[^。;;\n]{0,12}?(基坑支护及土方外运|装饰装修及幕墙|机电安装及智能化调试|室外工程及竣工验收|地下结构出正负零|主体结构封顶|正负零|封顶)/gu)){let a=b.index+b[0].indexOf(b[1]);i(b[2],Number(b[1]),a,a+b[1].length,b[0].slice(0,40))}for(let b of a.matchAll(/(基坑支护|正负零|封顶|装饰装修|机电安装|竣工验收)(?:(?!(?:第\d{2,3}[日天]|,|、)).){0,8}?完成[^。;;\n]{0,10}?第(\d{2,3})[日天]/gu)){let a=b.index+b[0].indexOf(b[2]);i(b[1],Number(b[2]),a,a+b[2].length,b[0].slice(0,40))}for(let b of a.matchAll(/(主体(?:结构)?封顶)(?:(?!(?:第\d{2,3}[日天]|,|、|完成)).){0,20}?第(\d{2,3})日/gu)){let a=b.index+b[0].indexOf(b[2]);i(b[1],Number(b[2]),a,a+b[2].length,b[0].slice(0,40))}return aJ(a,h)}function aM(a){let b=[];for(let c of ad){if("number"!==c.kind)continue;let d=new Set,e=new Set;for(let b of c.patterns)for(let c of a.matchAll(b)){let b=c[0].slice(0,40);if(ae.test(b))continue;let f=a.lastIndexOf("\n",c.index)+1,g=a.indexOf("\n",c.index);-1===g&&(g=a.length);let h=a.slice(f,g);if(af.test(h))continue;let i=Number(c[1]);Number.isFinite(i)&&!(i<=0)&&(/^\s*\|/u.test(h)?d.add(i):e.add(i))}if(1!==d.size)continue;let f=[...d][0];if([...e].some(a=>Math.abs(a-f)>.2*f))for(let d of c.patterns)for(let e of a.matchAll(d)){let d=e[0].slice(0,40);if(ae.test(d))continue;let g=a.lastIndexOf("\n",e.index)+1,h=a.indexOf("\n",e.index);-1===h&&(h=a.length);let i=a.slice(g,h);if(af.test(i)||/^\s*\|/u.test(i))continue;let j=Number(e[1]);if(!Number.isFinite(j)||j<=0||Math.abs(j-f)<=.2*f)continue;let k=e.index+e[0].indexOf(e[1]);b.push({start:k,end:k+e[1].length,replacement:String(f),detail:`${c.label} ${j}${c.unit}→${f}${c.unit}(以表格口径为准)`})}}return aJ(a,b)}function aN(a){let b=a,c=0,d=[];for(let a of[aK,aL,aM]){let e=a(b);e.markdown!==b&&(b=e.markdown,c+=e.fixedCount,d.push(...e.details))}return{markdown:b,fixedCount:c,details:d.slice(0,12)}}function aO(a){let b=a.replace(/\s+/gu,"");return b.length?(b.match(/[0-9A-Za-z%℃°±×÷≥≤.]/gu)||[]).length/b.length:0}async function aP(a){if("0"===process.env.DOCUMENT_CROSS_CHAPTER_DEDUP)return[];let b=function(a){let b=[];return a.forEach((a,c)=>{(a.content||"").split(/\n\s*\n/u).forEach((a,d)=>{let e=a.trim();if(!e||/^#{1,6}\s/um.test(e)||/^\s*\|/um.test(e)||/^[-*•]\s/um.test(e))return;let f=e.replace(/\s+/gu,"");f.length<60||b.push({chapterIndex:c,paragraphIndex:d,text:e,normalized:f})})}),b}(a);if(b.length<2)return[];let c=await (0,f.Mv)(b.map(a=>a.normalized),b.map(a=>a.normalized)),d=[],e=new Set;for(let a=0;a<b.length;a+=1)for(let f=a+1;f<b.length;f+=1){let g=b[a],h=b[f];if(g.chapterIndex===h.chapterIndex||g.normalized===h.normalized)continue;let i=c(g.normalized,h.normalized);if(i<.82)continue;let j=aO(g.text),k=aO(h.text),l=j>k||j===k&&g.chapterIndex<=h.chapterIndex,m=l?g:h,n=l?h:g,o=`${n.chapterIndex}:${n.paragraphIndex}`;e.has(o)||(e.add(o),d.push({keep:{chapterIndex:m.chapterIndex,paragraphIndex:m.paragraphIndex},drop:{chapterIndex:n.chapterIndex,paragraphIndex:n.paragraphIndex},similarity:i,paragraphPreview:n.normalized.slice(0,40)}))}return d}async function aQ(a){return(await aP(a)).map(b=>({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",chapterId:a[b.drop.chapterIndex]?.id,message:`跨章语义重复:「${a[b.keep.chapterIndex]?.title||"?"}」与「${a[b.drop.chapterIndex]?.title||"?"}」存在内容高度雷同段落(相似度 ${b.similarity.toFixed(2)}):“${b.paragraphPreview}…”`,suggestion:"同一内容全文只保留一处(保留信息密度高者);删除或改写本章的雷同段落,与本章主题相关的独有信息归并后,不得与他章段落语义重复。"}))}async function aR(a){let b=await aP(a);if(0===b.length)return 0;let c=0;for(let d of b){let b=a[d.drop.chapterIndex];if(!b)continue;let e=(b.content||"").split(/\n\s*\n/u);!(d.drop.paragraphIndex>=e.length)&&(e[d.drop.paragraphIndex].trim().replace(/\s+/gu,"").length<60||(e.splice(d.drop.paragraphIndex,1),b.content=e.join("\n\n"),c+=1))}return c}},46482:(a,b,c)=>{c.d(b,{Zk:()=>r,Tz:()=>z,X6:()=>s,fC:()=>A,l8:()=>y,JP:()=>q});var d=c(73024),e=c(76760),f=c(74329);c(25840),c(23500);var g=c(70933),h=c(70208),i=c(61373),j=c(78217);c(23760);var k=c(30355),l=c(44505),m=c(85016),n=c(22157);let o=[...k.P9.filter(a=>!n.Kd.includes(a)),...m.D$.source.split("|")];var p=c(95734);function q(a){let b=a.template.chapters.length,c=b>0?a.targetWords/b:a.targetWords,d=`${a.template.name}
|
|
19
19
|
${a.template.category||""}
|
|
20
20
|
${a.requirement||""}`,e=/专项|安全|质量|验收|审核|合同|合规|审计|风控|风险/u.test(d),f=a.targetWords>=4e4,g=(a.materialFileCount??0)<4&&(a.evidenceCount??0)<6,h=e||f||g,i=a.targetWords>=3e4||b>=8||c>=4e3,j=a.targetWords<=6e3&&b<=4&&!h,k="0"!==process.env.DOCUMENT_GLOBAL_CONSISTENCY_REVIEW&&(h||j||"1"===process.env.DOCUMENT_GLOBAL_CONSISTENCY_REVIEW);return{mode:h?"strict":i?"longform":j?"fast":"balanced",enableChapterReview:!0,enableGlobalReview:k,enableDocumentBudgetExpansion:!1,enableFinalQualityReview:!0,globalReviewSamplingRate:k&&j?.35:1}}function r(a){return{strategy:a,metrics:[],llm:{calls:0,failures:0,maxActive:0,retries:0,failureStreak:0,schemaFailures:0,promptCacheHitTokens:0,promptCacheMissTokens:0,inputTokens:0,outputTokens:0,inputChars:0,layerChars:{l0:0,l1:0,l2:0,l3:0}},semantic:{embedCacheHits:0,embedCacheMisses:0},evidence:{raw:0,used:0,filteredNoise:0,budgetDropped:0,avgNoiseScore:0,avgFactDensity:0,searchQueries:0,searchMs:0,contextChars:0,t0Chars:0,t1Chars:0,t2Lines:0,omittedChars:0},quality:{blockingCount:0,importantCount:0,minorCount:0,repairedCount:0}}}async function s(a,b,c,d){let e=Date.now();try{return await c()}finally{let c=Date.now();a.metrics.push({name:b,startedAt:e,endedAt:c,durationMs:c-e,meta:d})}}function t(a,b){let c=b.originalText?.trim();if(c&&a.includes(c)&&a.indexOf(c)===a.lastIndexOf(c))return c;if(c&&c.length>=8&&c.length<=500){let b=function(a,b){let c,d=b.split(/\s+/u).filter(a=>a.length>0);if(d.length<2)return;let e=RegExp(d.map(a=>a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")).join("\\s+"),"gu");for(let b of a.matchAll(e)){if(void 0!==c)return;c=b[0]}return c}(a,c);if(b)return b}let d=b.targetStart?.trim(),e=b.targetEnd?.trim();if(!d||!e)return;let f=a.indexOf(d);if(f<0)return;let g=a.indexOf(e,f+d.length);if(g<0)return;let h=g+e.length,i=a.slice(f,h);return a.indexOf(i)===a.lastIndexOf(i)?i:void 0}function u(a){return Math.max(2600,Math.min(16e3,Math.ceil(.45*(0,j.V7)(a))))}function v(a,b){let c=(a.match(/```/gu)||[]).length,d=b.replace(/^第[一二三四五六七八九十百千万]+章\s*/u,"").trim();return c%2==0&&(!d||a.includes(d))&&!/^\s*$/u.test(a)}function w(a){let b=[],c="";for(let d=0;d<a.length;d+=1){let e=a[d];/\s/u.test(e)||(c+=e,b.push(d))}return{compact:c,rawPositions:b}}function x(a,b,c){let d=a.lastIndexOf("\n",b-1)+1,e=a.indexOf("\n",c),f=e<0?a.length:e;if(/^\s*\|/.test(a.slice(d,f)))return{start:d,end:f};let g=d,h=a.slice(d,b),i=Math.max(h.lastIndexOf("。"),h.lastIndexOf(";"),h.lastIndexOf(";"));i>=0&&(g=d+i+1);let j=f,k=a.slice(c,f),l=[k.indexOf("。"),k.indexOf(";"),k.indexOf(";")].filter(a=>a>=0);return l.length>0&&(j=c+Math.min(...l)+1),{start:g,end:j}}async function y(a){(0,n.Te)(a.signal);let b=a.repairType||function(a){let b=a.join("\n");for(let a of f.NP)if(a.pattern.lastIndex=0,a.pattern.test(b))return a.type;return"generic"}(a.issues),c=a.contextChapters?.length?`
|
|
21
21
|
|