@customize-agent/server 4.36.1 → 4.36.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 +20 -20
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/5928.js +4 -4
- 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/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/.next/static/{RWxVAhSC2h6rXppi90LWb → AqGQutxgJRDyFjq0nNe96}/_buildManifest.js +1 -1
- package/.next/static/chunks/{289-35ac595388bbd018.js → 289-12dfcb3abec1c4b4.js} +1 -1
- package/.next/static/chunks/563-2b116a2500a97dba.js +1 -0
- package/.next/static/chunks/788-961761f5858f9189.js +1 -0
- package/.next/static/chunks/pages/documents-0e4216df99b9ec32.js +1 -0
- package/.next/static/chunks/pages/knowledge/files-7b78e962e432d199.js +1 -0
- package/.next/static/chunks/pages/knowledge/manage-7535b873ab505397.js +1 -0
- package/.next/static/chunks/pages/prompt-2c242e541f2e77a9.js +1 -0
- package/.next/static/chunks/pages/system/logs-c5a8920c6506a7e8.js +1 -0
- package/package.json +1 -1
- package/.next/static/chunks/563-b12f299d34bb9e44.js +0 -1
- package/.next/static/chunks/788-3afeb069ed706ac0.js +0 -1
- package/.next/static/chunks/pages/documents-d796eb8dca722e02.js +0 -1
- package/.next/static/chunks/pages/knowledge/files-8e25066889a85834.js +0 -1
- package/.next/static/chunks/pages/knowledge/manage-d0d0e0716e9d705b.js +0 -1
- package/.next/static/chunks/pages/prompt-5e1fb81efc656866.js +0 -1
- package/.next/static/chunks/pages/system/logs-6f45ef8d862759a2.js +0 -1
- /package/.next/static/{RWxVAhSC2h6rXppi90LWb → AqGQutxgJRDyFjq0nNe96}/_ssgManifest.js +0 -0
package/.next/BUILD_ID
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
AqGQutxgJRDyFjq0nNe96
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"ampDevFiles": [],
|
|
7
7
|
"lowPriorityFiles": [
|
|
8
|
-
"static/
|
|
9
|
-
"static/
|
|
8
|
+
"static/AqGQutxgJRDyFjq0nNe96/_buildManifest.js",
|
|
9
|
+
"static/AqGQutxgJRDyFjq0nNe96/_ssgManifest.js"
|
|
10
10
|
],
|
|
11
11
|
"rootMainFiles": [],
|
|
12
12
|
"rootMainFilesTree": {},
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
"static/chunks/717-743b697a417dd5ee.js",
|
|
40
40
|
"static/chunks/883-506cbca959974997.js",
|
|
41
41
|
"static/chunks/665-88e20299084b9e73.js",
|
|
42
|
-
"static/chunks/563-
|
|
42
|
+
"static/chunks/563-2b116a2500a97dba.js",
|
|
43
43
|
"static/chunks/7-20bcc985742a9ae1.js",
|
|
44
|
-
"static/chunks/289-
|
|
44
|
+
"static/chunks/289-12dfcb3abec1c4b4.js",
|
|
45
45
|
"static/chunks/994-241f87efc61005b8.js",
|
|
46
46
|
"static/chunks/pages/asset-library-a1047694e888e655.js"
|
|
47
47
|
],
|
|
@@ -53,9 +53,9 @@
|
|
|
53
53
|
"static/chunks/883-506cbca959974997.js",
|
|
54
54
|
"static/chunks/665-88e20299084b9e73.js",
|
|
55
55
|
"static/chunks/44-d3545eedd5c75ef1.js",
|
|
56
|
-
"static/chunks/563-
|
|
56
|
+
"static/chunks/563-2b116a2500a97dba.js",
|
|
57
57
|
"static/chunks/7-20bcc985742a9ae1.js",
|
|
58
|
-
"static/chunks/289-
|
|
58
|
+
"static/chunks/289-12dfcb3abec1c4b4.js",
|
|
59
59
|
"static/chunks/787-c18af810af3433f6.js",
|
|
60
60
|
"static/chunks/195-2c0168eacab722d2.js",
|
|
61
61
|
"static/chunks/455-e1b41ac4946d2b6f.js",
|
|
@@ -69,14 +69,14 @@
|
|
|
69
69
|
"static/chunks/883-506cbca959974997.js",
|
|
70
70
|
"static/chunks/665-88e20299084b9e73.js",
|
|
71
71
|
"static/chunks/44-d3545eedd5c75ef1.js",
|
|
72
|
-
"static/chunks/563-
|
|
72
|
+
"static/chunks/563-2b116a2500a97dba.js",
|
|
73
73
|
"static/chunks/7-20bcc985742a9ae1.js",
|
|
74
74
|
"static/chunks/787-c18af810af3433f6.js",
|
|
75
75
|
"static/chunks/195-2c0168eacab722d2.js",
|
|
76
76
|
"static/chunks/455-e1b41ac4946d2b6f.js",
|
|
77
77
|
"static/chunks/506-93f730bc149d0dce.js",
|
|
78
78
|
"static/chunks/65-572a80c5a7c83064.js",
|
|
79
|
-
"static/chunks/pages/documents-
|
|
79
|
+
"static/chunks/pages/documents-0e4216df99b9ec32.js"
|
|
80
80
|
],
|
|
81
81
|
"/guide": [
|
|
82
82
|
"static/chunks/webpack-4224e970a97a4a86.js",
|
|
@@ -102,9 +102,9 @@
|
|
|
102
102
|
"static/chunks/883-506cbca959974997.js",
|
|
103
103
|
"static/chunks/665-88e20299084b9e73.js",
|
|
104
104
|
"static/chunks/44-d3545eedd5c75ef1.js",
|
|
105
|
-
"static/chunks/563-
|
|
105
|
+
"static/chunks/563-2b116a2500a97dba.js",
|
|
106
106
|
"static/chunks/7-20bcc985742a9ae1.js",
|
|
107
|
-
"static/chunks/289-
|
|
107
|
+
"static/chunks/289-12dfcb3abec1c4b4.js",
|
|
108
108
|
"static/chunks/787-c18af810af3433f6.js",
|
|
109
109
|
"static/chunks/506-93f730bc149d0dce.js",
|
|
110
110
|
"static/chunks/850-0f48354694fc6b3e.js",
|
|
@@ -119,11 +119,11 @@
|
|
|
119
119
|
"static/chunks/883-506cbca959974997.js",
|
|
120
120
|
"static/chunks/665-88e20299084b9e73.js",
|
|
121
121
|
"static/chunks/44-d3545eedd5c75ef1.js",
|
|
122
|
-
"static/chunks/563-
|
|
122
|
+
"static/chunks/563-2b116a2500a97dba.js",
|
|
123
123
|
"static/chunks/7-20bcc985742a9ae1.js",
|
|
124
|
-
"static/chunks/289-
|
|
124
|
+
"static/chunks/289-12dfcb3abec1c4b4.js",
|
|
125
125
|
"static/css/ad5a592c79d1448b.css",
|
|
126
|
-
"static/chunks/pages/knowledge/files-
|
|
126
|
+
"static/chunks/pages/knowledge/files-7b78e962e432d199.js"
|
|
127
127
|
],
|
|
128
128
|
"/knowledge/manage": [
|
|
129
129
|
"static/chunks/webpack-4224e970a97a4a86.js",
|
|
@@ -134,8 +134,8 @@
|
|
|
134
134
|
"static/chunks/665-88e20299084b9e73.js",
|
|
135
135
|
"static/chunks/787-c18af810af3433f6.js",
|
|
136
136
|
"static/chunks/506-93f730bc149d0dce.js",
|
|
137
|
-
"static/chunks/788-
|
|
138
|
-
"static/chunks/pages/knowledge/manage-
|
|
137
|
+
"static/chunks/788-961761f5858f9189.js",
|
|
138
|
+
"static/chunks/pages/knowledge/manage-7535b873ab505397.js"
|
|
139
139
|
],
|
|
140
140
|
"/models": [
|
|
141
141
|
"static/chunks/webpack-4224e970a97a4a86.js",
|
|
@@ -164,10 +164,10 @@
|
|
|
164
164
|
"static/chunks/717-743b697a417dd5ee.js",
|
|
165
165
|
"static/chunks/883-506cbca959974997.js",
|
|
166
166
|
"static/chunks/44-d3545eedd5c75ef1.js",
|
|
167
|
-
"static/chunks/563-
|
|
167
|
+
"static/chunks/563-2b116a2500a97dba.js",
|
|
168
168
|
"static/chunks/195-2c0168eacab722d2.js",
|
|
169
169
|
"static/chunks/81-c3a7f04d96ea3f7d.js",
|
|
170
|
-
"static/chunks/pages/prompt-
|
|
170
|
+
"static/chunks/pages/prompt-2c242e541f2e77a9.js"
|
|
171
171
|
],
|
|
172
172
|
"/settings": [
|
|
173
173
|
"static/chunks/webpack-4224e970a97a4a86.js",
|
|
@@ -183,11 +183,11 @@
|
|
|
183
183
|
"static/chunks/883-506cbca959974997.js",
|
|
184
184
|
"static/chunks/665-88e20299084b9e73.js",
|
|
185
185
|
"static/chunks/44-d3545eedd5c75ef1.js",
|
|
186
|
-
"static/chunks/563-
|
|
186
|
+
"static/chunks/563-2b116a2500a97dba.js",
|
|
187
187
|
"static/chunks/7-20bcc985742a9ae1.js",
|
|
188
|
-
"static/chunks/289-
|
|
188
|
+
"static/chunks/289-12dfcb3abec1c4b4.js",
|
|
189
189
|
"static/chunks/195-2c0168eacab722d2.js",
|
|
190
|
-
"static/chunks/pages/system/logs-
|
|
190
|
+
"static/chunks/pages/system/logs-c5a8920c6506a7e8.js"
|
|
191
191
|
]
|
|
192
192
|
},
|
|
193
193
|
"ampFirstPages": []
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"routes": {},
|
|
4
4
|
"dynamicRoutes": {},
|
|
5
5
|
"preview": {
|
|
6
|
-
"previewModeId": "
|
|
7
|
-
"previewModeSigningKey": "
|
|
8
|
-
"previewModeEncryptionKey": "
|
|
6
|
+
"previewModeId": "8ce4f920e5e7c645448b46f4601e45a7",
|
|
7
|
+
"previewModeSigningKey": "912acdf8f871294305d5da44bcc2d673f08232805584e13dc09b58ae19d4cdd3",
|
|
8
|
+
"previewModeEncryptionKey": "d8c2706e3abbb577d49a715985e43f501eba16abb0493798cd3bae06ada71f98"
|
|
9
9
|
},
|
|
10
10
|
"notFoundRoutes": []
|
|
11
11
|
}
|
|
@@ -39,7 +39,7 @@ ${n.slice(0,2e3)}
|
|
|
39
39
|
若表格首行就是分隔线(缺表头行),必须依据表格数据内容补写一行业务表头(每列一个业务字段名),再紧跟分隔线;表头不得使用泛化字段名。
|
|
40
40
|
合计/小计/总计/累计行的空单元格一律填“—”(不适用语义);规格型号列中无规格型号的小型机具(蛙式打夯机等)可填“—”(机具无型号,合法);其余单元格一律不得为空、不得用占位符,不得凭空编造型号。
|
|
41
41
|
若表头第一列是表名(如“竣工清理与移交计划表”),把表名移到表格上方正文叙述中,表头从业务列名开始,并同步校正数据行列对齐。
|
|
42
|
-
保持表头结构与列数不变,不得新增、删除或合并小节;只修改缺陷表格相关局部文本。`,p=await b0({originalContent:b.content,repairRound:"table-repair",diagnostics:a.generationDiagnostics,apply:async()=>(function(a,b){let c=b3(a,b);if(!c)return{content:a,removed:0};let d=b4(c.split(/\r?\n/u));return d.removed>0?{content:a.replace(c,d.lines.join("\n")),removed:d.removed}:{content:a,removed:0}})((await a.withProgressHeartbeat(()=>(0,f.l8)({template:a.template,chapter:{id:b.id,title:b.title,content:b.content,evidence:b.evidence,missingFacts:b.missingFacts,sections:b.sections},issues:[g,h],promptTexts:o,requirement:a.requirement,forbidDrawingImages:!1,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,f.XG)("table-repair",a.generationDiagnostics)}))).content||b.content,i).content,recheck:a=>[(0,D.NS)(a).filter(a=>"error"===a.level&&/空单元格|占位符单元格|列数不一致/u.test(a.message)&&a.message.includes(i)&&(!j||a.message.includes(j))).length]}),q=p.content;p.rolledBack||q===b.content||(a.finalChapterDrafts[d]={...b,content:l?(0,k.w_)(q,l):q},c+=1);let s=p.rolledBack||p.afterMetrics[0]>0,t=(0,r.X5)({type:"llm_review",roleId:`agent-table-fix-${b.id}-${e}`,status:s?"failed":"success",message:p.rolledBack?`表格数据修复已回滚:${b.title}(修复后缺陷增多,保留修复前正文)`:s?`表格数据修复未生效:${b.title}`:`表格数据修复完成:${b.title}`,details:[g]},{subtitle:"表格数据修复"});(0,r.fx)(a.progressStages,t),(0,r.fx)(a.finalGateRepairStages,t),a.emitProgress(a.finalChapterDrafts,a.progressStages)}}))}c>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle())}}let b6={type:"object",required:["conflicts"],properties:{conflicts:{type:"array",required:!0,maxItems:8,items:{type:"object",required:!0,properties:{kind:{type:"string",required:!0},itemA:{type:"string",required:!0},itemB:{type:"string",required:!0},description:{type:"string",required:!0},confidence:{type:"number",required:!0}}}}}};async function b7(a,b={}){let c=function(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=c.trim();if(a){if(/^\|/u.test(a)&&/[\d]/u.test(a)){b.push(a.slice(0,160));continue}if(!/^#{1,6}\s/u.test(a))for(let c of a.split(/(?<=[。;;])/u)){let a=c.trim();a.length>=6&&a.length<=160&&/[\d]/u.test(a)&&b.push(a)}}}let c=[...new Set(b)],d=function(){let a=process.env.DOCUMENT_CONSISTENCY_SAMPLE_LIMIT;if(void 0===a||""===a)return 120;if("0"===a)return 200;let b=Number(a);return Number.isFinite(b)&&b>0?Math.floor(b):120}();return c.length<=d?c:c.map((a,b)=>({sentence:a,index:b,density:(a.match(/[\d,]+(?:\.\d+)?/gu)||[]).length})).sort((a,b)=>b.density-a.density||a.index-b.index).slice(0,d).sort((a,b)=>a.index-b.index).map(a=>a.sentence)}(a);if(c.length<2)return[];let d=await (0,bo.bb)([(0,z.y4)("你是施工组织设计数据一致性审查器。"),"给定全文含数值的句子/表格行清单(编号与内容),找出互相矛盾的数值对:\n- 同一口径必须一致而实际数值不同:劳动力峰值多处不一致、同一面积两处数字不同、总工期与分项工期冲突、同一节点日期两处不一致、表格合计与明细之和不等、人数\xd7工期与总工日不自洽;\n- 只报确定的矛盾(itemA 与 itemB 明确矛盾且置信度 ≥0.8),不得臆造;\n- 不同口径的数值不算矛盾:建筑面积 vs 占地面积、不同单位的表述;分阶段各期人数互比不算矛盾(各阶段人数不同是正常配置);\n- 但总量控制上限与分阶段峰值必须自洽:“高峰期总人数控制在X人/高峰总人数X人以内/控制在X人以下”与任何“高峰投入Y人/阶段高峰Y人/峰值Y人”(Y>X)构成矛盾,必须上报;\nitemA/itemB 必须是清单中真实出现的原文片段(逐字引用编号对应句子或表格行的关键片段,含数值)。\n只输出 JSON,不得输出其他内容。"].join("\n"),c.map((a,b)=>`${b+1}. ${a}`).join("\n"),{maxTokens:2500,temperature:0,signal:b.signal,diagnostics:b.diagnostics,schema:b6,taskKind:"structuredGeneration"});return d?.conflicts?.length?d.conflicts.filter(a=>"string"==typeof a.itemA&&"string"==typeof a.itemB&&a.itemA.trim()&&a.itemB.trim()).filter(a=>(a.confidence??0)>=.7).slice(0,6):[]}async function b8(a){a.decisionLockEntries.length>0&&(a.validationIssues=[...a.validationIssues,...(function(a,b){if(0===b.length)return[];let c=[],d=new Set;for(let e of a.split(/\r?\n/u)){let a=e.trim();if(!(!a||/^#{1,6}\s/u.test(a)||/^\|/u.test(a)))for(let e of a.split(/(?<=[。;;])/u)){let a=e.trim();if(!(a.length<6)&&!(a.length>200))for(let e of b){let b=(0,q.rR)(e.id);if(!b||!b.relevance.test(a))continue;let f=new Set(e.values);for(let g of b.options){if(f.has(g.value)||!g.aliases.test(a)||(0,q.R3)(a,g.aliases))continue;let b=`${e.id} ${g.value} ${a}`;d.has(b)||(d.add(b),c.push({categoryId:e.id,label:e.label,lockedValues:e.values,offValue:g.value,sentence:a}))}}}}return c})(a.finalMarkdown,a.decisionLockEntries).map(a=>({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`语义矛盾(${a.label}):项目关键决策已锁定为「${a.lockedValues.join("、")}」,正文出现「${a.offValue}」冲突表述:“${a.sentence.slice(0,60)}”`,suggestion:"与已锁定决策冲突的表述必须统一为锁定值(或整句删除);禁止保留两套并存的技术路线/机械选型/供应方式。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。"}))])}var b9=c(93675),ca=c(65667);async function cb(a){let b=await (0,D.KI)(a.finalChapterDrafts,a.factsModel,a.scopeConflicts);a.laborPeakAuthority=(0,F.yB)(a.blueprintData),a.greeningMaintenanceAuthority=(0,p.Dq)(a.factsModel);let c=await (0,ag.Mj)({chapters:a.finalChapterDrafts,model:a.tenderRequirements,similarity:a.requirementsSimilarity,signal:a.signal});if((b.fixedCount>0||c.fixedCount>0)&&(a.finalMarkdown=a.rebuildFinalMarkdown()),c.fixedCount>0){let b=(0,r.X5)({type:"validation",roleId:"scoring-requirement-fix",status:"success",message:`评分项响应确定性补写:${c.fixedCount} 条(${c.details.slice(0,3).join("、")})`,details:c.details.slice(3)},{subtitle:"交付前确定性清洗"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}let d=(0,p.qG)(a.finalChapterDrafts);a.surfaceFixContext={laborPeakAuthority:a.laborPeakAuthority,phaseLaborAuthorities:(0,F.i2)(a.blueprintData),greeningMaintenanceAuthority:a.greeningMaintenanceAuthority,resourceBreakdownAuthority:(0,ca.re)(a.blueprintData),supportFormAuthority:"slope"===a.supportAuthority?"放坡":"pile"===a.supportAuthority?"钢板桩":void 0,decisionLockEntries:a.decisionLockEntries,plannedSectionTitles:[...new Set([...(a.effectiveChapters||[]).flatMap(a=>a.sections||[]),...a.template.chapters.flatMap(a=>a.sections||[]),...a.finalChapterDrafts.flatMap(a=>a.sections||[])].filter(Boolean))],basisRegulations:(0,p.VZ)(a.blueprintData?.basisRegulations,a.allEvidence.map(a=>String(a.content||"")).join("\n"),a.blueprintData?.project.location||"")};let e=new Map,f=(a,b)=>{b>0&&e.set(a,(e.get(a)??0)+b)},g=0;for(let b of a.finalChapterDrafts){g+=1;let c={...a.surfaceFixContext,chapterNumber:g};for(let a of b9.aW){if(!a.stage5)continue;let d=(0,p.gD)(b=>a.fix(b,c),b.content,2);d.fixedCount>0&&(b.content=d.markdown,f(a.key,d.fixedCount))}}let h=a=>e.get(a)??0,i=h("table-line-residue"),j=h("finish-thickness"),k=h("labor-peak"),l=h("phase-labor-values"),m=h("resource-breakdown"),n=h("ambiguous-either-or"),o=h("self-undermining"),q=h("empty-scoring-response"),s=h("tender-meta-language"),t=h("duplicate-response-line"),u=h("atlas-reference"),v=h("meta-discourse"),w=h("formula-residue"),x=h("paragraph-opening-repeat"),y=h("truncated-sentence"),A=h("internal-table-row-dup"),B=h("greening-maintenance"),C=h("paragraph-tail-repeat"),E=h("slot-depth-value"),G=h("duplicate-basic-info-tables"),H=h("fallback-placeholder-rows"),I=h("heading-uncovered-items"),J=h("basis-regulation-region"),K=h("forbidden-configuration"),L=h("work-injury-insurance"),M=h("templated-labels"),N=h("structure-integrity"),O=h("repeated-words"),P=h("collision-numbered-heading"),Q=h("inverted-date-range"),R=h("internal-term-heading"),S=h("section-renumber");(d.removedCount>0||e.size>0)&&(a.finalMarkdown=a.rebuildFinalMarkdown(),(0,r.fx)(a.progressStages,(0,r.X5)({type:"validation",roleId:"deterministic-surface-fix",status:"success",message:`交付前确定性清洗:跨章表格去重 ${d.removedCount} 行、断行残片合并 ${i} 处、装饰层厚度修复 ${j} 处、埋深槽位错位删除 ${E} 处、劳动力峰值统一 ${k} 处、阶段劳动力统一 ${l} 处、资源数值统一 ${m} 处、两可表述归一 ${n} 处、段首机械重复剥离 ${x} 处、截断句残留收敛 ${y} 处、元话语声明清洗 ${v} 处、公式形态清洗 ${w} 处、自伤句式改写 ${o} 处、空响应句改写 ${q} 处、招标元语言清理 ${s} 处、重复响应行去重 ${t} 行、图集引用清洗 ${u} 处、表内重复行删除 ${A} 行、基础信息表合并 ${G} 组、兜底话术表行删除 ${H} 行、绿化养护期统一 ${B} 处、标题工程类别覆盖修正 ${I} 处、编制依据法规补写 ${J} 处、配置禁用词清洗 ${K} 处、工伤保险缴纳表述补写 ${L} 处、小节编号重放 ${S} 行、段内句级复读剥离 ${C} 处、模板标签清洗 ${M} 处、结构完整性清理 ${N} 处、重复编号标题删除 ${P} 行、倒置日期区间修复 ${Q} 处、内部术语标题替换 ${R} 处、叠词收敛 ${O} 处`},{subtitle:"交付前确定性清洗"})));let T=await (0,D.Yb)(a.finalMarkdown,a.factsModel,a.scopeConflicts);T.fixedCount>0&&(a.finalMarkdown=T.markdown);let U=(0,p.fE)(a.finalMarkdown,{authorityIndex:a.blueprintData?(0,F.IV)(a.blueprintData):void 0,scheduleAuthority:a.scheduleAuthority,assemblyRateAuthority:a.assemblyRateAuthority,supportAuthority:a.supportAuthority});if(U.fixedCount>0&&(a.finalMarkdown=U.markdown),b.fixedCount>0||T.fixedCount>0||U.fixedCount>0){await a.recomputeFinalValidationBundle();let c=b.fixedCount+T.fixedCount+U.fixedCount,d=[...new Set([...b.details,...T.details,...U.details])];(0,r.fx)(a.progressStages,(0,r.X5)({type:"validation",roleId:"deterministic-consistency-fix",status:"success",message:`交付前确定性清洗:${c} 处(${d.slice(0,4).join("、")})`,details:d.slice(4)},{subtitle:"交付前确定性清洗"}))}let V=(0,z.K7)(a.finalMarkdown);V!==a.finalMarkdown&&(a.finalMarkdown=V,await a.recomputeFinalValidationBundle())}async function cc(a,b){let c=[],d=[],e=[],f=await al(a);if(!f.degraded)for(let g of f.groups){let f=ao(g,{markdown:a,billFactLock:b.billFactLock});if("distinct-lock-entries"===f.verdict){d.push(`“${g.concept}”对应${f.entries}`);continue}if("no-anchor"===f.verdict){e.push(`“${g.concept}”:${[...new Set(g.values.map(a=>a.raw))].slice(0,3).join("、")}`);continue}for(let a of f.nonLock)for(let b of a.occurrences){let d=b.matchIndex+b.valueOffset;c.push({start:d,end:d+b.valueText.length,replacement:String(f.lockValue),detail:`参数口径“${a.concept}” ${a.raw}→${f.lockValue}${f.lockUnit}(以工程量清单条目「${f.entryName}」锁定口径为准)`,concept:g.concept})}}for(let d of(0,p.mB)(a,b.specAuthorityMap))d.replacement&&c.push({...d.replacement,location:d.location});if(0===c.length)return{replacements:[],falsePositiveGroups:d,noAnchorGroups:e,details:[]};let g=(0,p.gk)(a,c).markdown,h=new Set,i=await al(g);if(!i.degraded){let a=new Set(i.groups.map(a=>a.concept));for(let b of new Set(c.filter(a=>a.concept).map(a=>a.concept)))a.has(b)&&(c.forEach((a,c)=>{a.concept===b&&h.add(c)}),e.push(`“${b}”锁值替换复检未清零,已回滚交 LLM 定向修复`))}let j=new Map;for(let a of c)a.location&&j.set(a.location,(j.get(a.location)||0)+1);if(j.size>0){let a=(0,p.mB)(g,b.specAuthorityMap),d=new Map;for(let b of a)b.replacement&&d.set(b.location,(d.get(b.location)||0)+1);for(let[a,b]of j)(d.get(a)||0)>=b&&(c.forEach((b,c)=>{b.location===a&&h.add(c)}),e.push(`“${a}”规格替换复检未减数,已回滚交 LLM 定向修复`))}let k=[...new Set(c.filter((a,b)=>!h.has(b)).map(a=>a.detail))].slice(0,12);return{replacements:c.filter((a,b)=>!h.has(b)).map(a=>({start:a.start,end:a.end,replacement:a.replacement,detail:a.detail})),falsePositiveGroups:d,noAnchorGroups:e,details:k}}var cd=c(43378),ce=c(22213),cf=c(3063);let cg=/两可|按图纸|资料[^。;;\n]{0,14}(?:未明确|两可|冲突)|支护[^。;;\n]{0,10}并存/u;async function ch(a){let{chapterDraftsFinal:b,progressStages:c,emitProgress:d}=a,e=a.globalConsistencyIssues,f=0,g=0;for(let a of b){let b=a.content.split(/\r?\n/u).length,c=(0,p.lR)(a.content),d=(0,p.QM)(c.markdown),e=(0,p.Vc)(d.markdown);b-e.markdown.split(/\r?\n/u).length>0&&(f+=c.removedCount+d.removedCount,g+=e.removedCount,a.content=e.markdown)}if(f>0||g>0){let a=b.map(a=>a.content).join("\n\n"),h=[...(0,p.ub)(a),...(0,p.cl)(a)].map(a=>`${a.message};${a.suggestion||""}`);e=[...new Set([...e.filter(a=>!/表格重复|段落完全重复/u.test(a)),...h])];let i=[f>0?`重复表格 ${f} 行`:"",g>0?`重复段落 ${g} 行`:""].filter(Boolean).join("、");(0,r.fx)(c,(0,r.X5)({type:"llm_review",roleId:"post-table-dedup",status:"success",message:`补表后确定性去重:${i}`},{subtitle:"表格执行率核验"})),d(b)}return e}async function ci(a){let{effectiveChapters:b,chapterDraftsFinal:c,template:d,repairPromptTexts:e,requirement:g,signal:h,generationDiagnostics:i,progressStages:j,emitProgress:k,withProgressHeartbeat:l}=a,m=(0,cd.Xi)(b,c),n=!1;if(m.length>0)for(let a=0;a<1&&m.length>0;a+=1){(0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"table-execution-repair",status:"running",message:`表格执行率修复第 ${a+1} 轮(${m.length} 个章节缺表)`},{subtitle:"表格执行率修复"})),k(c);let o=0,p=[],q=m.flatMap(a=>{let b=c.find(b=>b.title===a.chapterTitle||a.chapterTitle.includes(b.title)||b.title.includes(a.chapterTitle));return b?[{gap:a,draft:b}]:[]}),s=async a=>{let{gap:j,draft:k}=a,m=[...new Set(j.plans.map(a=>a.section).filter(Boolean))],n=m.length>0?k.evidence.filter(a=>{let b=a.sectionTitle;return!b||m.some(a=>b===a||b.includes(a)||a.includes(b))}):k.evidence,o={id:k.id,title:k.title,content:k.content,evidence:n.length?n:k.evidence,missingFacts:k.missingFacts||[],sections:k.sections},p=`计划表格缺失(计划 ${j.planned} 张,实际仅 ${j.actual} 张):${j.plans.map(a=>`${a.title}(表头:${a.fields.map(a=>a.name).join("、")})`).join(";")}。必须按表头字段补齐这些 markdown 表格并紧跟相关小节输出,不得删除已有正文;每个表格前须有 1~2 句引导叙述说明表格作用与关键结论,表格不能替代小节正文;表格内项目特有数字、日期、工程量、规格必须来自项目资料或项目图谱,不得编造;人数、台班、进度时间等计划类数值必须原样引用蓝图权威锚点(劳动力峰值、工种构成、分阶段投入、机械台数、总工期节点),不得基于工程量或定额自行推算另设,不得留空、不得写“按需配置”等空话。`;return b0({originalContent:k.content,repairRound:"table-execution-repair",diagnostics:i,beforeMetrics:[Math.max(0,j.planned-j.actual)],apply:async()=>{let a=await l(()=>(0,f.X6)(i,`table-execution-repair:${k.id}`,()=>(0,f.l8)({template:d,chapter:o,issues:[p],promptTexts:e,requirement:g,forbidDrawingImages:!0,diagnostics:i,signal:h,patchGuard:(0,f.XG)("table-execution-repair",i),maxTokens:Math.min(12e3,Math.max(6e3,1200*j.plans.length))})));return a.content&&a.content!==k.content?a.content:k.content},recheck:a=>{let d=c.map(b=>b.id===k.id?{title:b.title,content:a,sections:b.sections}:b);return[(0,cd.Xi)(b,d).filter(a=>a.chapterTitle===k.title||a.chapterTitle===j.chapterTitle||k.title.includes(a.chapterTitle)||a.chapterTitle.includes(k.title)).reduce((a,b)=>a+Math.max(0,b.planned-b.actual),0)]}})},t=await Promise.allSettled(q.map(a=>s(a))),u=new Set;if(t.forEach((a,b)=>{if("rejected"===a.status){if(h?.aborted)throw a.reason;p.push(`${q[b].gap.chapterTitle}:修复异常(${a.reason instanceof Error?a.reason.message:"未知错误"})`);return}let c=a.value,{gap:d,draft:e}=q[b];if(c.rolledBack)return void p.push(`${d.chapterTitle}:修复后计划表格缺口增多,已回滚本轮修改`);c.content&&c.content!==e.content&&!u.has(e.id)?(e.content=c.content,u.add(e.id),o+=1):u.has(e.id)||p.push(`${d.chapterTitle}:缺 ${d.plans.map(a=>a.title).join("、")}(${i?.llm.lastError||"补表 patch 未应用"})`)}),0===o){(0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"table-execution-repair",status:"failed",message:`表格执行率修复第 ${a+1} 轮:补表 patch 未应用(${m.length} 个章节缺表)`,details:p},{subtitle:"表格执行率修复"})),k(c);break}n=!0,k(c),m=(0,cd.Xi)(b,c),(0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"table-execution-repair",status:m.length>0?"failed":"success",message:m.length>0?`表格执行率修复第 ${a+1} 轮完成,仍有 ${m.length} 个章节缺表`:`表格执行率修复第 ${a+1} 轮完成`},{subtitle:"表格执行率修复"})),(0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"table-execution-review",status:m.length>0?"failed":"success",message:m.length>0?`表格执行率复检:仍有 ${m.length} 个章节缺表`:"表格执行率复检通过"},{subtitle:"表格执行率核验"}))}return{tableFixApplied:n}}function cj(a,b){if(!b)return!1;let c=/^##\s+(.+?)\s*$/mu.exec(a.content)?.[1];return b===a.title||b===c||a.content.includes(b)}async function ck(a){let{chapterDraftsFinal:b,template:c,repairPromptTexts:d,requirement:e,signal:g,generationDiagnostics:h,progressStages:i,emitProgress:j,withProgressHeartbeat:k}=a,l=!1;for(let a=0;a<2;a+=1){let m=b.map(a=>a.content).join("\n\n"),n=await (0,a4.Bt)(m),o=await (0,a4.gE)(m),p=n.fillerSentences>0,q=o.countermeasures>0&&o.ratio<.5,s=(0,aM.P_)(m),t=(0,aM.C4)(m),u=(0,aM.uj)(m),v=s.length>0,w=t.length>0,x=u.length>0;if(!p&&!q&&!v&&!w&&!x)break;let y=p?await bG(b):[],z=p?function(a,b){let c=[],d=[],e=0;for(let f of b){let b=f.chapterId||f.chapterTitle,g=a.find(a=>(a.id||a.title)===b);if(!g||"semantic"!==f.channel||!(0,a4.W0)(f.sentence)){d.push(f);continue}let h=g.content.split("\n"),i=function(a,b){let c=b.replace(/[。;;]\s*$/u,"").trim();if(c.length<12)return 0;let d=c.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=RegExp(`[\\s\\u3000]*${d}[\\s\\u3000]*[。;;]`,"gu"),f=RegExp(`[\\s\\u3000]*${d}[\\s\\u3000]*$`,"u"),g=0;for(let b=a.length-1;b>=0;b-=1){let d=a[b];if((0,a4.X9)(d)||!d.includes(c))continue;let h=d.match(e),i=h&&h.length>0?d.replace(e,""):d.replace(f,"");i!==d&&(g+=h&&h.length>0?h.length:1,""===i.trim()?a.splice(b,1):a[b]=i)}return g}(h,f.sentence);i>0?(g.content=h.join("\n").replace(/\n{3,}/gu,"\n\n"),e+=i,c.includes(f.sentence)||c.push(f.sentence)):d.push(f)}return{deletedCount:e,deletedSentences:c,remaining:d}}(b,y):{deletedCount:0,deletedSentences:[],remaining:y};z.deletedCount>0&&console.error(`[gen][templating] 零信息口号句确定性删除 ${z.deletedCount} 处:${z.deletedSentences.slice(0,3).join(" / ")}${z.deletedSentences.length>3?" 等":""}`);let A=b.map(a=>a.content).join("\n\n"),B=new Map(b.map(a=>[a.id,a.content])),C=(q?o.entries.filter(a=>!a.attributed||!a.quantified).slice(0,20):[]).flatMap(a=>{let c=a.text.replace(/\s+/gu,""),d=b.find(a=>a.content.replace(/\s+/gu,"").includes(c));return d?[{chapter:d,text:a.text,missingAttribution:!a.attributed,missingTarget:!a.quantified}]:[]}),D=b.flatMap(a=>{let b=z.remaining.filter(b=>(b.chapterId||b.chapterTitle)===(a.id||a.title)).map(a=>a.sentence),c=C.filter(b=>b.chapter.id===a.id).map(a=>({text:a.text,missingAttribution:a.missingAttribution,missingTarget:a.missingTarget})),d=s.filter(b=>cj(a,b.chapterTitle)),e=t.filter(b=>cj(a,b.chapterTitle)),f=u.filter(b=>cj(a,b.chapterTitle));return b.length>0||c.length>0||d.length>0||e.length>0||f.length>0?[{chapter:a,sentences:b,difficulty:c,frames:d,flows:e,titles:f}]:[]});if(0===D.length){z.deletedCount>0&&(l=!0,(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:"success",message:`模板化修复第 ${a+1} 轮:确定性删除零信息口号句 ${z.deletedCount} 处(无剩余重写目标)`},{subtitle:"模板化修复"})),j(b));break}let E=[p?`套话句占比 ${(100*n.ratio).toFixed(1)}%${z.deletedCount>0?`(已确定性删除零信息口号 ${z.deletedCount} 处)`:""}`:"",q?`重难点双达标 ${(100*o.ratio).toFixed(0)}%`:"",v?`骨架指纹 ${s.length} 组`:"",w?`工序形式 ${t.length} 处`:"",x?`标题缺陷 ${u.length} 处`:""].filter(Boolean).join("、");(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:"running",message:`模板化修复第 ${a+1} 轮:${E}(${D.length} 章)`},{subtitle:"模板化修复"})),j(b);let F=0,G=async a=>{let b=[];a.sentences.length>0&&b.push(`第 1~${a.sentences.length} 条目标原文是本章已检出的空话套话句(零信息纯口号句已由系统确定性删除,此处为含信息或合规承诺类命中句):逐条原地改写为“责任岗位 + 执行动作 + 量化标准 + 检查频次 + 整改时限”式可核查措施,且每条改写句必须嵌入不少于 2 个项目实体(村名/工程量/规格,取自本章证据摘要);禁止以同义空话替换、禁止改写清单外内容、不得凭空编造数值;属必须保留的合规承诺句须具体化到可核查。`);let i=a.sentences.length+1;for(let c of a.difficulty){let a=[c.missingAttribution?"归因句(该难点的成因/风险来源)":"",c.missingTarget?"量化控制目标(数值+单位,来自本章证据摘要或行业规范,不得编造)":""].filter(Boolean).join("与");b.push(`第 ${i} 条目标原文是重难点分析条目,缺少${c.missingAttribution&&c.missingTarget?"成因归因与量化控制目标":a}:保留条目原有事实与数值,在其内补充${a}。`),i+=1}for(let c of a.frames){let a=c.sentences.map(()=>{let a=i;return i+=1,a});b.push(`第 ${a.join("、")} 条目标原文含全篇复读骨架「${c.fingerprintLabel}」(全篇 ${c.totalCount} 处,验收上限 2 处):逐句改写为差异化句式,保留原句全部事实信息(岗位、数值、频次不得丢失)。`)}for(let c of a.flows)b.push(`第 ${i} 条目标原文是小节标题,其所在小节「${c.blockTitle}」的工序顺序表达当前为【${c.currentForm}】形式且与相邻小节同形式:将该小节的工序顺序表达改写为【${c.targetForm}】形式,内容与数值保持不变(工艺参数不得删减)。`),i+=1;for(let c of a.titles)b.push(`第 ${i} 条目标原文是小节标题(${c.reason}):将该小节标题重命名为完整表达本小节内容的正式名称,正文内容不变;禁止使用“施工概况/施工流程/施工方法”等结构标签词充当标题。`),i+=1;return b.push("清单之外的内容一律不得改动;不得删除任何小节标题、表格与数值参数。"),k(()=>(0,f.X6)(h,`templating-repair:${a.chapter.id}`,()=>(0,f.l8)({template:c,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[b.join("\n")],promptTexts:d,requirement:e,forbidDrawingImages:!0,diagnostics:h,signal:g,patchGuard:(0,f.XG)("templating-repair",h),anchorTexts:[...a.sentences,...a.difficulty.map(a=>a.text),...a.frames.flatMap(a=>a.sentences),...a.flows.map(a=>a.blockTitle),...a.titles.map(a=>a.title)],maxTokens:6e3,evidenceChars:5e3})))},H=await b0({originalContent:A,repairRound:"templating-repair",diagnostics:h,beforeMetrics:[n.ratio,o.ratio,s.length,t.length,u.length],apply:async()=>((await Promise.allSettled(D.map(a=>G(a)))).forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;console.error("[gen] templating repair failed:",a.reason);return}let c=a.value,{chapter:d}=D[b];c.content&&c.content!==d.content&&(d.content=c.content,F+=1)}),j(b),b.map(a=>a.content).join("\n\n")),recheck:async a=>{let b=await (0,a4.Bt)(a),c=await (0,a4.gE)(a);return[b.ratio,c.ratio,(0,aM.P_)(a).length,(0,aM.C4)(a).length,(0,aM.uj)(a).length]},shouldRollback:(a,b)=>b[0]>a[0]+.01&&!(b[1]>a[1]+.01)||b[2]+b[3]+b[4]>a[2]+a[3]+a[4]});if(0===F&&0===z.deletedCount){(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:"failed",message:`模板化修复第 ${a+1} 轮:修复 patch 未落地(${D.length} 章锚点失配或 LLM 未产出)`,details:[`未收敛维度:${E}`]},{subtitle:"模板化修复"}));break}if(H.rolledBack){for(let a of b){let b=B.get(a.id);void 0!==b&&(a.content=b)}(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:"failed",message:`模板化修复第 ${a+1} 轮:修复后指标变差已回滚本轮修改(套话 ${(100*H.beforeMetrics[0]).toFixed(1)}%→${(100*H.afterMetrics[0]).toFixed(1)}%,治理缺陷目标 ${H.beforeMetrics[2]+H.beforeMetrics[3]+H.beforeMetrics[4]}→${H.afterMetrics[2]+H.afterMetrics[3]+H.afterMetrics[4]})`,details:["LLM 重写未收敛,回滚保留修复前正文"]},{subtitle:"模板化修复"})),j(b);break}l=!0}if(l){let a=b.map(a=>a.content).join("\n\n"),c=await (0,a4.Bt)(a),d=await (0,a4.gE)(a),e=(0,aM.P_)(a),f=(0,aM.C4)(a),g=(0,aM.uj)(a),h=c.ratio<.1&&(!d.heavyTemplated||0===d.countermeasures)&&0===e.length&&0===f.length&&0===g.length,k=[e.length>0?`骨架指纹 ${[...new Set(e.map(a=>`${a.fingerprintLabel}\xd7${a.totalCount}`))].join("、")}`:"",f.length>0?`工序形式相邻重复 ${f.length} 处`:"",g.length>0?`标题缺陷 ${g.length} 处`:""].filter(Boolean).join(";");(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:h?"success":"failed",message:`模板化修复完成:套话句占比 ${(100*c.ratio).toFixed(1)}%(达标线 ≤10%),重难点归因+量化双达标 ${(100*d.ratio).toFixed(0)}%(达标线 ≥50%)${k?`,模板化残留:${k}`:""}`,details:h?[]:["未完全收敛:残留项先由确定性修复链(终检前)收敛;复核未清零的残留经终检检测器判定,仍不达标即阻断交付(宁缺毋假)"]},{subtitle:"模板化修复"})),j(b)}return{templatingFixApplied:l}}async function cl(a){let{chapterDraftsFinal:b,projectContext:c,template:d,repairPromptTexts:e,requirement:g,signal:h,generationDiagnostics:i,progressStages:j,emitProgress:k,withProgressHeartbeat:l}=a,m=/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目主要施工\s*内容|主要施工\s*内容|主要分部分项工程施工方案|主要分部分项施工方案|主要施工方法)\s*$/u,n=!1,o=0,p=0,q=(0,ce.sh)(c,b.flatMap(a=>a.evidence||[]));if(q.length>0){let a=/项目主要施工内容|主要施工内容|主要分部分项工程施工方案|主要分部分项施工方案|主要施工方法/u;for(let c of b){if(c.content.split("\n").some(a=>m.test(a.trim())))continue;let d=(c.sections||[]).find(b=>a.test(b));if(!d)continue;Array.isArray(c.sections)||(c.sections=[]);let e=c.sections.findIndex(b=>a.test(b)),f=e>=0?e+1:c.sections.length+1,g=`### ${b.indexOf(c)+1}.${f} ${d}`;c.content=`${c.content.replace(/\s+$/u,"")}
|
|
42
|
+
保持表头结构与列数不变,不得新增、删除或合并小节;只修改缺陷表格相关局部文本。`,p=await b0({originalContent:b.content,repairRound:"table-repair",diagnostics:a.generationDiagnostics,apply:async()=>(function(a,b){let c=b3(a,b);if(!c)return{content:a,removed:0};let d=b4(c.split(/\r?\n/u));return d.removed>0?{content:a.replace(c,d.lines.join("\n")),removed:d.removed}:{content:a,removed:0}})((await a.withProgressHeartbeat(()=>(0,f.l8)({template:a.template,chapter:{id:b.id,title:b.title,content:b.content,evidence:b.evidence,missingFacts:b.missingFacts,sections:b.sections},issues:[g,h],promptTexts:o,requirement:a.requirement,forbidDrawingImages:!1,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,f.XG)("table-repair",a.generationDiagnostics)}))).content||b.content,i).content,recheck:a=>[(0,D.NS)(a).filter(a=>"error"===a.level&&/空单元格|占位符单元格|列数不一致/u.test(a.message)&&a.message.includes(i)&&(!j||a.message.includes(j))).length]}),q=p.content;p.rolledBack||q===b.content||(a.finalChapterDrafts[d]={...b,content:l?(0,k.w_)(q,l):q},c+=1);let s=p.rolledBack||p.afterMetrics[0]>0,t=(0,r.X5)({type:"llm_review",roleId:`agent-table-fix-${b.id}-${e}`,status:s?"failed":"success",message:p.rolledBack?`表格数据修复已回滚:${b.title}(修复后缺陷增多,保留修复前正文)`:s?`表格数据修复未生效:${b.title}`:`表格数据修复完成:${b.title}`,details:[g]},{subtitle:"表格数据修复"});(0,r.fx)(a.progressStages,t),(0,r.fx)(a.finalGateRepairStages,t),a.emitProgress(a.finalChapterDrafts,a.progressStages)}}))}c>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle())}}let b6={type:"object",required:["conflicts"],properties:{conflicts:{type:"array",required:!0,maxItems:8,items:{type:"object",required:!0,properties:{kind:{type:"string",required:!0},itemA:{type:"string",required:!0},itemB:{type:"string",required:!0},description:{type:"string",required:!0},confidence:{type:"number",required:!0}}}}}};async function b7(a,b={}){let c=function(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=c.trim();if(a){if(/^\|/u.test(a)&&/[\d]/u.test(a)){b.push(a.slice(0,160));continue}if(!/^#{1,6}\s/u.test(a))for(let c of a.split(/(?<=[。;;])/u)){let a=c.trim();a.length>=6&&a.length<=160&&/[\d]/u.test(a)&&b.push(a)}}}let c=[...new Set(b)],d=function(){let a=process.env.DOCUMENT_CONSISTENCY_SAMPLE_LIMIT;if(void 0===a||""===a)return 120;if("0"===a)return 200;let b=Number(a);return Number.isFinite(b)&&b>0?Math.floor(b):120}();return c.length<=d?c:c.map((a,b)=>({sentence:a,index:b,density:(a.match(/[\d,]+(?:\.\d+)?/gu)||[]).length})).sort((a,b)=>b.density-a.density||a.index-b.index).slice(0,d).sort((a,b)=>a.index-b.index).map(a=>a.sentence)}(a);if(c.length<2)return[];let d=await (0,bo.bb)([(0,z.y4)("你是施工组织设计数据一致性审查器。"),"给定全文含数值的句子/表格行清单(编号与内容),找出互相矛盾的数值对:\n- 同一口径必须一致而实际数值不同:劳动力峰值多处不一致、同一面积两处数字不同、总工期与分项工期冲突、同一节点日期两处不一致、表格合计与明细之和不等、人数\xd7工期与总工日不自洽;\n- 只报确定的矛盾(itemA 与 itemB 明确矛盾且置信度 ≥0.8),不得臆造;\n- 不同口径的数值不算矛盾:建筑面积 vs 占地面积、不同单位的表述;分阶段各期人数互比不算矛盾(各阶段人数不同是正常配置);\n- 但总量控制上限与分阶段峰值必须自洽:“高峰期总人数控制在X人/高峰总人数X人以内/控制在X人以下”与任何“高峰投入Y人/阶段高峰Y人/峰值Y人”(Y>X)构成矛盾,必须上报;\nitemA/itemB 必须是清单中真实出现的原文片段(逐字引用编号对应句子或表格行的关键片段,含数值)。\n只输出 JSON,不得输出其他内容。"].join("\n"),c.map((a,b)=>`${b+1}. ${a}`).join("\n"),{maxTokens:2500,temperature:0,signal:b.signal,diagnostics:b.diagnostics,schema:b6,taskKind:"structuredGeneration"});return d?.conflicts?.length?d.conflicts.filter(a=>"string"==typeof a.itemA&&"string"==typeof a.itemB&&a.itemA.trim()&&a.itemB.trim()).filter(a=>(a.confidence??0)>=.7).slice(0,6):[]}async function b8(a){a.decisionLockEntries.length>0&&(a.validationIssues=[...a.validationIssues,...(function(a,b){if(0===b.length)return[];let c=[],d=new Set;for(let e of a.split(/\r?\n/u)){let a=e.trim();if(!(!a||/^#{1,6}\s/u.test(a)||/^\|/u.test(a)))for(let e of a.split(/(?<=[。;;])/u)){let a=e.trim();if(!(a.length<6)&&!(a.length>200))for(let e of b){let b=(0,q.rR)(e.id);if(!b||!b.relevance.test(a))continue;let f=new Set(e.values);for(let g of b.options){if(f.has(g.value)||!g.aliases.test(a)||(0,q.R3)(a,g.aliases))continue;let b=`${e.id} ${g.value} ${a}`;d.has(b)||(d.add(b),c.push({categoryId:e.id,label:e.label,lockedValues:e.values,offValue:g.value,sentence:a}))}}}}return c})(a.finalMarkdown,a.decisionLockEntries).map(a=>({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`语义矛盾(${a.label}):项目关键决策已锁定为「${a.lockedValues.join("、")}」,正文出现「${a.offValue}」冲突表述:“${a.sentence.slice(0,60)}”`,suggestion:"与已锁定决策冲突的表述必须统一为锁定值(或整句删除);禁止保留两套并存的技术路线/机械选型/供应方式。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。"}))])}var b9=c(93675),ca=c(65667);async function cb(a){let b=await (0,D.KI)(a.finalChapterDrafts,a.factsModel,a.scopeConflicts);a.laborPeakAuthority=(0,F.yB)(a.blueprintData),a.greeningMaintenanceAuthority=(0,p.Dq)(a.factsModel);let c=await (0,ag.Mj)({chapters:a.finalChapterDrafts,model:a.tenderRequirements,similarity:a.requirementsSimilarity,signal:a.signal});if((b.fixedCount>0||c.fixedCount>0)&&(a.finalMarkdown=a.rebuildFinalMarkdown()),c.fixedCount>0){let b=(0,r.X5)({type:"validation",roleId:"scoring-requirement-fix",status:"success",message:`评分项响应确定性补写:${c.fixedCount} 条(${c.details.slice(0,3).join("、")})`,details:c.details.slice(3)},{subtitle:"交付前确定性清洗"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}let d=(0,p.qG)(a.finalChapterDrafts);a.surfaceFixContext={laborPeakAuthority:a.laborPeakAuthority,phaseLaborAuthorities:(0,F.i2)(a.blueprintData),greeningMaintenanceAuthority:a.greeningMaintenanceAuthority,resourceBreakdownAuthority:(0,ca.re)(a.blueprintData),supportFormAuthority:"slope"===a.supportAuthority?"放坡":"pile"===a.supportAuthority?"钢板桩":void 0,decisionLockEntries:a.decisionLockEntries,plannedSectionTitles:[...new Set([...(a.effectiveChapters||[]).flatMap(a=>a.sections||[]),...a.template.chapters.flatMap(a=>a.sections||[]),...a.finalChapterDrafts.flatMap(a=>a.sections||[])].filter(Boolean))],basisRegulations:(0,p.VZ)(a.blueprintData?.basisRegulations,a.allEvidence.map(a=>String(a.content||"")).join("\n"),a.blueprintData?.project.location||"")};let e=new Map,f=(a,b)=>{b>0&&e.set(a,(e.get(a)??0)+b)},g=0;for(let b of a.finalChapterDrafts){g+=1;let c={...a.surfaceFixContext,chapterNumber:g};for(let a of b9.aW){if(!a.stage5)continue;let d=(0,p.gD)(b=>a.fix(b,c),b.content,2);d.fixedCount>0&&(b.content=d.markdown,f(a.key,d.fixedCount))}}let h=a=>e.get(a)??0,i=h("table-line-residue"),j=h("finish-thickness"),k=h("labor-peak"),l=h("phase-labor-values"),m=h("resource-breakdown"),n=h("ambiguous-either-or"),o=h("self-undermining"),q=h("empty-scoring-response"),s=h("tender-meta-language"),t=h("duplicate-response-line"),u=h("atlas-reference"),v=h("meta-discourse"),w=h("formula-residue"),x=h("paragraph-opening-repeat"),y=h("truncated-sentence"),A=h("internal-table-row-dup"),B=h("greening-maintenance"),C=h("paragraph-tail-repeat"),E=h("slot-depth-value"),G=h("duplicate-basic-info-tables"),H=h("fallback-placeholder-rows"),I=h("heading-uncovered-items"),J=h("basis-regulation-region"),K=h("forbidden-configuration"),L=h("work-injury-insurance"),M=h("templated-labels"),N=h("structure-integrity"),O=h("repeated-words"),P=h("collision-numbered-heading"),Q=h("inverted-date-range"),R=h("internal-term-heading"),S=h("section-renumber");if(d.removedCount>0||e.size>0){a.finalMarkdown=a.rebuildFinalMarkdown();let b=(0,r.X5)({type:"validation",roleId:"deterministic-surface-fix",status:"success",message:`交付前确定性清洗:跨章表格去重 ${d.removedCount} 行、断行残片合并 ${i} 处、装饰层厚度修复 ${j} 处、埋深槽位错位删除 ${E} 处、劳动力峰值统一 ${k} 处、阶段劳动力统一 ${l} 处、资源数值统一 ${m} 处、两可表述归一 ${n} 处、段首机械重复剥离 ${x} 处、截断句残留收敛 ${y} 处、元话语声明清洗 ${v} 处、公式形态清洗 ${w} 处、自伤句式改写 ${o} 处、空响应句改写 ${q} 处、招标元语言清理 ${s} 处、重复响应行去重 ${t} 行、图集引用清洗 ${u} 处、表内重复行删除 ${A} 行、基础信息表合并 ${G} 组、兜底话术表行删除 ${H} 行、绿化养护期统一 ${B} 处、标题工程类别覆盖修正 ${I} 处、编制依据法规补写 ${J} 处、配置禁用词清洗 ${K} 处、工伤保险缴纳表述补写 ${L} 处、小节编号重放 ${S} 行、段内句级复读剥离 ${C} 处、模板标签清洗 ${M} 处、结构完整性清理 ${N} 处、重复编号标题删除 ${P} 行、倒置日期区间修复 ${Q} 处、内部术语标题替换 ${R} 处、叠词收敛 ${O} 处`},{subtitle:"交付前确定性清洗"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}let T=await (0,D.Yb)(a.finalMarkdown,a.factsModel,a.scopeConflicts);T.fixedCount>0&&(a.finalMarkdown=T.markdown);let U=(0,p.fE)(a.finalMarkdown,{authorityIndex:a.blueprintData?(0,F.IV)(a.blueprintData):void 0,scheduleAuthority:a.scheduleAuthority,assemblyRateAuthority:a.assemblyRateAuthority,supportAuthority:a.supportAuthority});if(U.fixedCount>0&&(a.finalMarkdown=U.markdown),b.fixedCount>0||T.fixedCount>0||U.fixedCount>0){await a.recomputeFinalValidationBundle();let c=b.fixedCount+T.fixedCount+U.fixedCount,d=[...new Set([...b.details,...T.details,...U.details])],e=(0,r.X5)({type:"validation",roleId:"deterministic-consistency-fix",status:"success",message:`交付前确定性清洗:${c} 处(${d.slice(0,4).join("、")})`,details:d.slice(4)},{subtitle:"交付前确定性清洗"});(0,r.fx)(a.progressStages,e),(0,r.fx)(a.finalGateRepairStages,e)}let V=(0,z.K7)(a.finalMarkdown);if(V!==a.finalMarkdown){a.finalMarkdown=V,await a.recomputeFinalValidationBundle();let b=(0,r.X5)({type:"validation",roleId:"formal-source-clean",status:"success",message:"来源罗列话术确定性清洗兜底:最终成稿来源罗列残留已收敛"},{subtitle:"交付前确定性清洗"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}}async function cc(a,b){let c=[],d=[],e=[],f=await al(a);if(!f.degraded)for(let g of f.groups){let f=ao(g,{markdown:a,billFactLock:b.billFactLock});if("distinct-lock-entries"===f.verdict){d.push(`“${g.concept}”对应${f.entries}`);continue}if("no-anchor"===f.verdict){e.push(`“${g.concept}”:${[...new Set(g.values.map(a=>a.raw))].slice(0,3).join("、")}`);continue}for(let a of f.nonLock)for(let b of a.occurrences){let d=b.matchIndex+b.valueOffset;c.push({start:d,end:d+b.valueText.length,replacement:String(f.lockValue),detail:`参数口径“${a.concept}” ${a.raw}→${f.lockValue}${f.lockUnit}(以工程量清单条目「${f.entryName}」锁定口径为准)`,concept:g.concept})}}for(let d of(0,p.mB)(a,b.specAuthorityMap))d.replacement&&c.push({...d.replacement,location:d.location});if(0===c.length)return{replacements:[],falsePositiveGroups:d,noAnchorGroups:e,details:[]};let g=(0,p.gk)(a,c).markdown,h=new Set,i=await al(g);if(!i.degraded){let a=new Set(i.groups.map(a=>a.concept));for(let b of new Set(c.filter(a=>a.concept).map(a=>a.concept)))a.has(b)&&(c.forEach((a,c)=>{a.concept===b&&h.add(c)}),e.push(`“${b}”锁值替换复检未清零,已回滚交 LLM 定向修复`))}let j=new Map;for(let a of c)a.location&&j.set(a.location,(j.get(a.location)||0)+1);if(j.size>0){let a=(0,p.mB)(g,b.specAuthorityMap),d=new Map;for(let b of a)b.replacement&&d.set(b.location,(d.get(b.location)||0)+1);for(let[a,b]of j)(d.get(a)||0)>=b&&(c.forEach((b,c)=>{b.location===a&&h.add(c)}),e.push(`“${a}”规格替换复检未减数,已回滚交 LLM 定向修复`))}let k=[...new Set(c.filter((a,b)=>!h.has(b)).map(a=>a.detail))].slice(0,12);return{replacements:c.filter((a,b)=>!h.has(b)).map(a=>({start:a.start,end:a.end,replacement:a.replacement,detail:a.detail})),falsePositiveGroups:d,noAnchorGroups:e,details:k}}var cd=c(43378),ce=c(22213),cf=c(3063);let cg=/两可|按图纸|资料[^。;;\n]{0,14}(?:未明确|两可|冲突)|支护[^。;;\n]{0,10}并存/u;async function ch(a){let{chapterDraftsFinal:b,progressStages:c,emitProgress:d}=a,e=a.globalConsistencyIssues,f=0,g=0;for(let a of b){let b=a.content.split(/\r?\n/u).length,c=(0,p.lR)(a.content),d=(0,p.QM)(c.markdown),e=(0,p.Vc)(d.markdown);b-e.markdown.split(/\r?\n/u).length>0&&(f+=c.removedCount+d.removedCount,g+=e.removedCount,a.content=e.markdown)}if(f>0||g>0){let a=b.map(a=>a.content).join("\n\n"),h=[...(0,p.ub)(a),...(0,p.cl)(a)].map(a=>`${a.message};${a.suggestion||""}`);e=[...new Set([...e.filter(a=>!/表格重复|段落完全重复/u.test(a)),...h])];let i=[f>0?`重复表格 ${f} 行`:"",g>0?`重复段落 ${g} 行`:""].filter(Boolean).join("、");(0,r.fx)(c,(0,r.X5)({type:"llm_review",roleId:"post-table-dedup",status:"success",message:`补表后确定性去重:${i}`},{subtitle:"表格执行率核验"})),d(b)}return e}async function ci(a){let{effectiveChapters:b,chapterDraftsFinal:c,template:d,repairPromptTexts:e,requirement:g,signal:h,generationDiagnostics:i,progressStages:j,emitProgress:k,withProgressHeartbeat:l}=a,m=(0,cd.Xi)(b,c),n=!1;if(m.length>0)for(let a=0;a<1&&m.length>0;a+=1){(0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"table-execution-repair",status:"running",message:`表格执行率修复第 ${a+1} 轮(${m.length} 个章节缺表)`},{subtitle:"表格执行率修复"})),k(c);let o=0,p=[],q=m.flatMap(a=>{let b=c.find(b=>b.title===a.chapterTitle||a.chapterTitle.includes(b.title)||b.title.includes(a.chapterTitle));return b?[{gap:a,draft:b}]:[]}),s=async a=>{let{gap:j,draft:k}=a,m=[...new Set(j.plans.map(a=>a.section).filter(Boolean))],n=m.length>0?k.evidence.filter(a=>{let b=a.sectionTitle;return!b||m.some(a=>b===a||b.includes(a)||a.includes(b))}):k.evidence,o={id:k.id,title:k.title,content:k.content,evidence:n.length?n:k.evidence,missingFacts:k.missingFacts||[],sections:k.sections},p=`计划表格缺失(计划 ${j.planned} 张,实际仅 ${j.actual} 张):${j.plans.map(a=>`${a.title}(表头:${a.fields.map(a=>a.name).join("、")})`).join(";")}。必须按表头字段补齐这些 markdown 表格并紧跟相关小节输出,不得删除已有正文;每个表格前须有 1~2 句引导叙述说明表格作用与关键结论,表格不能替代小节正文;表格内项目特有数字、日期、工程量、规格必须来自项目资料或项目图谱,不得编造;人数、台班、进度时间等计划类数值必须原样引用蓝图权威锚点(劳动力峰值、工种构成、分阶段投入、机械台数、总工期节点),不得基于工程量或定额自行推算另设,不得留空、不得写“按需配置”等空话。`;return b0({originalContent:k.content,repairRound:"table-execution-repair",diagnostics:i,beforeMetrics:[Math.max(0,j.planned-j.actual)],apply:async()=>{let a=await l(()=>(0,f.X6)(i,`table-execution-repair:${k.id}`,()=>(0,f.l8)({template:d,chapter:o,issues:[p],promptTexts:e,requirement:g,forbidDrawingImages:!0,diagnostics:i,signal:h,patchGuard:(0,f.XG)("table-execution-repair",i),maxTokens:Math.min(12e3,Math.max(6e3,1200*j.plans.length))})));return a.content&&a.content!==k.content?a.content:k.content},recheck:a=>{let d=c.map(b=>b.id===k.id?{title:b.title,content:a,sections:b.sections}:b);return[(0,cd.Xi)(b,d).filter(a=>a.chapterTitle===k.title||a.chapterTitle===j.chapterTitle||k.title.includes(a.chapterTitle)||a.chapterTitle.includes(k.title)).reduce((a,b)=>a+Math.max(0,b.planned-b.actual),0)]}})},t=await Promise.allSettled(q.map(a=>s(a))),u=new Set;if(t.forEach((a,b)=>{if("rejected"===a.status){if(h?.aborted)throw a.reason;p.push(`${q[b].gap.chapterTitle}:修复异常(${a.reason instanceof Error?a.reason.message:"未知错误"})`);return}let c=a.value,{gap:d,draft:e}=q[b];if(c.rolledBack)return void p.push(`${d.chapterTitle}:修复后计划表格缺口增多,已回滚本轮修改`);c.content&&c.content!==e.content&&!u.has(e.id)?(e.content=c.content,u.add(e.id),o+=1):u.has(e.id)||p.push(`${d.chapterTitle}:缺 ${d.plans.map(a=>a.title).join("、")}(${i?.llm.lastError||"补表 patch 未应用"})`)}),0===o){(0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"table-execution-repair",status:"failed",message:`表格执行率修复第 ${a+1} 轮:补表 patch 未应用(${m.length} 个章节缺表)`,details:p},{subtitle:"表格执行率修复"})),k(c);break}n=!0,k(c),m=(0,cd.Xi)(b,c),(0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"table-execution-repair",status:m.length>0?"failed":"success",message:m.length>0?`表格执行率修复第 ${a+1} 轮完成,仍有 ${m.length} 个章节缺表`:`表格执行率修复第 ${a+1} 轮完成`},{subtitle:"表格执行率修复"})),(0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"table-execution-review",status:m.length>0?"failed":"success",message:m.length>0?`表格执行率复检:仍有 ${m.length} 个章节缺表`:"表格执行率复检通过"},{subtitle:"表格执行率核验"}))}return{tableFixApplied:n}}function cj(a,b){if(!b)return!1;let c=/^##\s+(.+?)\s*$/mu.exec(a.content)?.[1];return b===a.title||b===c||a.content.includes(b)}async function ck(a){let{chapterDraftsFinal:b,template:c,repairPromptTexts:d,requirement:e,signal:g,generationDiagnostics:h,progressStages:i,emitProgress:j,withProgressHeartbeat:k}=a,l=!1;for(let a=0;a<2;a+=1){let m=b.map(a=>a.content).join("\n\n"),n=await (0,a4.Bt)(m),o=await (0,a4.gE)(m),p=n.fillerSentences>0,q=o.countermeasures>0&&o.ratio<.5,s=(0,aM.P_)(m),t=(0,aM.C4)(m),u=(0,aM.uj)(m),v=s.length>0,w=t.length>0,x=u.length>0;if(!p&&!q&&!v&&!w&&!x)break;let y=p?await bG(b):[],z=p?function(a,b){let c=[],d=[],e=0;for(let f of b){let b=f.chapterId||f.chapterTitle,g=a.find(a=>(a.id||a.title)===b);if(!g||"semantic"!==f.channel||!(0,a4.W0)(f.sentence)){d.push(f);continue}let h=g.content.split("\n"),i=function(a,b){let c=b.replace(/[。;;]\s*$/u,"").trim();if(c.length<12)return 0;let d=c.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=RegExp(`[\\s\\u3000]*${d}[\\s\\u3000]*[。;;]`,"gu"),f=RegExp(`[\\s\\u3000]*${d}[\\s\\u3000]*$`,"u"),g=0;for(let b=a.length-1;b>=0;b-=1){let d=a[b];if((0,a4.X9)(d)||!d.includes(c))continue;let h=d.match(e),i=h&&h.length>0?d.replace(e,""):d.replace(f,"");i!==d&&(g+=h&&h.length>0?h.length:1,""===i.trim()?a.splice(b,1):a[b]=i)}return g}(h,f.sentence);i>0?(g.content=h.join("\n").replace(/\n{3,}/gu,"\n\n"),e+=i,c.includes(f.sentence)||c.push(f.sentence)):d.push(f)}return{deletedCount:e,deletedSentences:c,remaining:d}}(b,y):{deletedCount:0,deletedSentences:[],remaining:y};z.deletedCount>0&&console.error(`[gen][templating] 零信息口号句确定性删除 ${z.deletedCount} 处:${z.deletedSentences.slice(0,3).join(" / ")}${z.deletedSentences.length>3?" 等":""}`);let A=b.map(a=>a.content).join("\n\n"),B=new Map(b.map(a=>[a.id,a.content])),C=(q?o.entries.filter(a=>!a.attributed||!a.quantified).slice(0,20):[]).flatMap(a=>{let c=a.text.replace(/\s+/gu,""),d=b.find(a=>a.content.replace(/\s+/gu,"").includes(c));return d?[{chapter:d,text:a.text,missingAttribution:!a.attributed,missingTarget:!a.quantified}]:[]}),D=b.flatMap(a=>{let b=z.remaining.filter(b=>(b.chapterId||b.chapterTitle)===(a.id||a.title)).map(a=>a.sentence),c=C.filter(b=>b.chapter.id===a.id).map(a=>({text:a.text,missingAttribution:a.missingAttribution,missingTarget:a.missingTarget})),d=s.filter(b=>cj(a,b.chapterTitle)),e=t.filter(b=>cj(a,b.chapterTitle)),f=u.filter(b=>cj(a,b.chapterTitle));return b.length>0||c.length>0||d.length>0||e.length>0||f.length>0?[{chapter:a,sentences:b,difficulty:c,frames:d,flows:e,titles:f}]:[]});if(0===D.length){z.deletedCount>0&&(l=!0,(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:"success",message:`模板化修复第 ${a+1} 轮:确定性删除零信息口号句 ${z.deletedCount} 处(无剩余重写目标)`},{subtitle:"模板化修复"})),j(b));break}let E=[p?`套话句占比 ${(100*n.ratio).toFixed(1)}%${z.deletedCount>0?`(已确定性删除零信息口号 ${z.deletedCount} 处)`:""}`:"",q?`重难点双达标 ${(100*o.ratio).toFixed(0)}%`:"",v?`骨架指纹 ${s.length} 组`:"",w?`工序形式 ${t.length} 处`:"",x?`标题缺陷 ${u.length} 处`:""].filter(Boolean).join("、");(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:"running",message:`模板化修复第 ${a+1} 轮:${E}(${D.length} 章)`},{subtitle:"模板化修复"})),j(b);let F=0,G=async a=>{let b=[];a.sentences.length>0&&b.push(`第 1~${a.sentences.length} 条目标原文是本章已检出的空话套话句(零信息纯口号句已由系统确定性删除,此处为含信息或合规承诺类命中句):逐条原地改写为“责任岗位 + 执行动作 + 量化标准 + 检查频次 + 整改时限”式可核查措施,且每条改写句必须嵌入不少于 2 个项目实体(村名/工程量/规格,取自本章证据摘要);禁止以同义空话替换、禁止改写清单外内容、不得凭空编造数值;属必须保留的合规承诺句须具体化到可核查。`);let i=a.sentences.length+1;for(let c of a.difficulty){let a=[c.missingAttribution?"归因句(该难点的成因/风险来源)":"",c.missingTarget?"量化控制目标(数值+单位,来自本章证据摘要或行业规范,不得编造)":""].filter(Boolean).join("与");b.push(`第 ${i} 条目标原文是重难点分析条目,缺少${c.missingAttribution&&c.missingTarget?"成因归因与量化控制目标":a}:保留条目原有事实与数值,在其内补充${a}。`),i+=1}for(let c of a.frames){let a=c.sentences.map(()=>{let a=i;return i+=1,a});b.push(`第 ${a.join("、")} 条目标原文含全篇复读骨架「${c.fingerprintLabel}」(全篇 ${c.totalCount} 处,验收上限 2 处):逐句改写为差异化句式,保留原句全部事实信息(岗位、数值、频次不得丢失)。`)}for(let c of a.flows)b.push(`第 ${i} 条目标原文是小节标题,其所在小节「${c.blockTitle}」的工序顺序表达当前为【${c.currentForm}】形式且与相邻小节同形式:将该小节的工序顺序表达改写为【${c.targetForm}】形式,内容与数值保持不变(工艺参数不得删减)。`),i+=1;for(let c of a.titles)b.push(`第 ${i} 条目标原文是小节标题(${c.reason}):将该小节标题重命名为完整表达本小节内容的正式名称,正文内容不变;禁止使用“施工概况/施工流程/施工方法”等结构标签词充当标题。`),i+=1;return b.push("清单之外的内容一律不得改动;不得删除任何小节标题、表格与数值参数。"),k(()=>(0,f.X6)(h,`templating-repair:${a.chapter.id}`,()=>(0,f.l8)({template:c,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[b.join("\n")],promptTexts:d,requirement:e,forbidDrawingImages:!0,diagnostics:h,signal:g,patchGuard:(0,f.XG)("templating-repair",h),anchorTexts:[...a.sentences,...a.difficulty.map(a=>a.text),...a.frames.flatMap(a=>a.sentences),...a.flows.map(a=>a.blockTitle),...a.titles.map(a=>a.title)],maxTokens:6e3,evidenceChars:5e3})))},H=await b0({originalContent:A,repairRound:"templating-repair",diagnostics:h,beforeMetrics:[n.ratio,o.ratio,s.length,t.length,u.length],apply:async()=>((await Promise.allSettled(D.map(a=>G(a)))).forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;console.error("[gen] templating repair failed:",a.reason);return}let c=a.value,{chapter:d}=D[b];c.content&&c.content!==d.content&&(d.content=c.content,F+=1)}),j(b),b.map(a=>a.content).join("\n\n")),recheck:async a=>{let b=await (0,a4.Bt)(a),c=await (0,a4.gE)(a);return[b.ratio,c.ratio,(0,aM.P_)(a).length,(0,aM.C4)(a).length,(0,aM.uj)(a).length]},shouldRollback:(a,b)=>b[0]>a[0]+.01&&!(b[1]>a[1]+.01)||b[2]+b[3]+b[4]>a[2]+a[3]+a[4]});if(0===F&&0===z.deletedCount){(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:"failed",message:`模板化修复第 ${a+1} 轮:修复 patch 未落地(${D.length} 章锚点失配或 LLM 未产出)`,details:[`未收敛维度:${E}`]},{subtitle:"模板化修复"}));break}if(H.rolledBack){for(let a of b){let b=B.get(a.id);void 0!==b&&(a.content=b)}(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:"failed",message:`模板化修复第 ${a+1} 轮:修复后指标变差已回滚本轮修改(套话 ${(100*H.beforeMetrics[0]).toFixed(1)}%→${(100*H.afterMetrics[0]).toFixed(1)}%,治理缺陷目标 ${H.beforeMetrics[2]+H.beforeMetrics[3]+H.beforeMetrics[4]}→${H.afterMetrics[2]+H.afterMetrics[3]+H.afterMetrics[4]})`,details:["LLM 重写未收敛,回滚保留修复前正文"]},{subtitle:"模板化修复"})),j(b);break}l=!0}if(l){let a=b.map(a=>a.content).join("\n\n"),c=await (0,a4.Bt)(a),d=await (0,a4.gE)(a),e=(0,aM.P_)(a),f=(0,aM.C4)(a),g=(0,aM.uj)(a),h=c.ratio<.1&&(!d.heavyTemplated||0===d.countermeasures)&&0===e.length&&0===f.length&&0===g.length,k=[e.length>0?`骨架指纹 ${[...new Set(e.map(a=>`${a.fingerprintLabel}\xd7${a.totalCount}`))].join("、")}`:"",f.length>0?`工序形式相邻重复 ${f.length} 处`:"",g.length>0?`标题缺陷 ${g.length} 处`:""].filter(Boolean).join(";");(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:h?"success":"failed",message:`模板化修复完成:套话句占比 ${(100*c.ratio).toFixed(1)}%(达标线 ≤10%),重难点归因+量化双达标 ${(100*d.ratio).toFixed(0)}%(达标线 ≥50%)${k?`,模板化残留:${k}`:""}`,details:h?[]:["未完全收敛:残留项先由确定性修复链(终检前)收敛;复核未清零的残留经终检检测器判定,仍不达标即阻断交付(宁缺毋假)"]},{subtitle:"模板化修复"})),j(b)}return{templatingFixApplied:l}}async function cl(a){let{chapterDraftsFinal:b,projectContext:c,template:d,repairPromptTexts:e,requirement:g,signal:h,generationDiagnostics:i,progressStages:j,emitProgress:k,withProgressHeartbeat:l}=a,m=/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目主要施工\s*内容|主要施工\s*内容|主要分部分项工程施工方案|主要分部分项施工方案|主要施工方法)\s*$/u,n=!1,o=0,p=0,q=(0,ce.sh)(c,b.flatMap(a=>a.evidence||[]));if(q.length>0){let a=/项目主要施工内容|主要施工内容|主要分部分项工程施工方案|主要分部分项施工方案|主要施工方法/u;for(let c of b){if(c.content.split("\n").some(a=>m.test(a.trim())))continue;let d=(c.sections||[]).find(b=>a.test(b));if(!d)continue;Array.isArray(c.sections)||(c.sections=[]);let e=c.sections.findIndex(b=>a.test(b)),f=e>=0?e+1:c.sections.length+1,g=`### ${b.indexOf(c)+1}.${f} ${d}`;c.content=`${c.content.replace(/\s+$/u,"")}
|
|
43
43
|
|
|
44
44
|
${g}
|
|
45
45
|
`,n=!0}let c=b.some(a=>a.content.split("\n").some(a=>m.test(a.trim()))),d=b.some(b=>(b.sections||[]).some(b=>a.test(b)));if(!c&&!d){let a=b.find(a=>/整体理解|工程概况|项目理解|招标范围|编制边界|现场踏勘|施工界面|主要施工方法|施工方案/u.test(a.title))||b[0];if(a){let c=b.indexOf(a);Array.isArray(a.sections)||(a.sections=[]);let d=a.sections.findIndex(a=>/项目主要施工内容|主要施工内容/u.test(a)),e=d>=0?d+1:(a.sections.push("项目主要施工内容"),a.sections.length),f=`### ${c+1}.${e} 项目主要施工内容`;a.content=`${a.content.replace(/\s+$/u,"")}
|
|
@@ -47,9 +47,9 @@ ${g}
|
|
|
47
47
|
${f}
|
|
48
48
|
`,n=!0}}}for(let a of b){let b=a.content;for(let c of a.content.split("\n").map(a=>a.trim()).filter(a=>m.test(a))){let a=c.replace(/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u,""),d=(0,ce.eB)(b,a,q);d!==b&&(b=d,o+=1)}a.content=b}for(let a of b){if(0===q.length)continue;let b=a.content;for(let c of a.content.split("\n").map(a=>a.trim()).filter(a=>m.test(a))){let d=c.replace(/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u,"");if(cf.gG.test(a.title)&&cf.gG.test(d))continue;let e=(0,ce.qj)(b,d,q);e!==b&&(b=e,o+=1)}a.content=b}for(let a=0;a<2;a+=1){let c=b.flatMap(a=>{if(0===q.length)return[];let b=a.content.split("\n").map(a=>a.trim()).filter(a=>m.test(a)).flatMap(b=>{let c=b.replace(/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u,"");if(cf.gG.test(a.title)&&cf.gG.test(c))return[];let d=(0,ce.ab)(a.content,c,q);return d.length>0?[{headingLine:b,sectionTitle:c,missing:d}]:[]});return b.length>0?[{chapter:a,entries:b}]:[]});if(0===c.length)break;(0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"workpackage-skeleton-repair",status:"running",message:`工作包骨架补写第 ${a+1} 轮(${c.length} 章)`},{subtitle:"工作包骨架收口"})),k(b);let o=async a=>{let b=a.entries.map((a,b)=>{let c=a.missing.map((a,b)=>`#### ${b+1} ${a}`).join("\n");return`第 ${b+1} 处:「${a.headingLine}」小节内部缺少以下工作包小节(内部结构已由系统从资料锁定):
|
|
49
49
|
${c}
|
|
50
|
-
请在该小节内部按上述标题逐一补齐(标题一字不差,不得增删改、合并或调序),每个工作包小节按三要素展开正式正文:作业对象与工程量(什么部位、什么规模)、工序顺序(先后顺序清晰)、施工方法(工艺做法、工艺参数、验收检测)。已有内容一律不得改动,不得删除任何已有小节与段落,不得输出 Markdown 表格。`});return b0({originalContent:a.chapter.content,repairRound:"workpackage-skeleton-repair",diagnostics:i,beforeMetrics:[a.entries.reduce((a,b)=>a+b.missing.length,0)],apply:async()=>{let c=await l(()=>(0,f.X6)(i,`workpackage-skeleton-repair:${a.chapter.id}`,()=>(0,f.l8)({template:d,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[b.join("\n"),"清单之外的内容一律不得改动;不得删除任何小节标题、表格与数值参数。"],promptTexts:e,requirement:g,forbidDrawingImages:!0,diagnostics:i,signal:h,patchGuard:(0,f.XG)("workpackage-skeleton-repair",i),anchorTexts:a.entries.map(a=>({text:a.headingLine,append:!0})),maxTokens:6e3})));return c.content&&c.content!==a.chapter.content?c.content:a.chapter.content},recheck:b=>{if(0===q.length)return[0];let c=0;for(let d of b.split("\n").map(a=>a.trim()).filter(a=>m.test(a))){let e=d.replace(/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u,"");cf.gG.test(a.chapter.title)&&cf.gG.test(e)||(c+=(0,ce.ab)(b,e,q).length)}return[c]}})},s=await Promise.allSettled(c.map(a=>o(a))),t=0;if(s.forEach((a,b)=>{if("rejected"===a.status){if(h?.aborted)throw a.reason;console.error("[gen] workpackage skeleton repair failed:",a.reason);return}let d=a.value,{chapter:e}=c[b];if(d.rolledBack)return void console.error("[gen] workpackage skeleton repair rolled back:",e.title);d.content&&d.content!==e.content&&(e.content=d.content,t+=1,p+=1)}),k(b),0===t)break;n=!0}return(n||o>0)&&((0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"workpackage-skeleton-repair",status:"success",message:`工作包骨架收口完成:表格剥离 ${o} 处、骨架补写 ${p} 章`},{subtitle:"工作包骨架收口"})),k(b)),{skeletonFixApplied:n}}async function cm(a){let{chapterDraftsFinal:b,template:c,repairPromptTexts:d,requirement:e,signal:g,generationDiagnostics:h,progressStages:i,emitProgress:j,withProgressHeartbeat:k}=a,
|
|
50
|
+
请在该小节内部按上述标题逐一补齐(标题一字不差,不得增删改、合并或调序),每个工作包小节按三要素展开正式正文:作业对象与工程量(什么部位、什么规模)、工序顺序(先后顺序清晰)、施工方法(工艺做法、工艺参数、验收检测)。已有内容一律不得改动,不得删除任何已有小节与段落,不得输出 Markdown 表格。`});return b0({originalContent:a.chapter.content,repairRound:"workpackage-skeleton-repair",diagnostics:i,beforeMetrics:[a.entries.reduce((a,b)=>a+b.missing.length,0)],apply:async()=>{let c=await l(()=>(0,f.X6)(i,`workpackage-skeleton-repair:${a.chapter.id}`,()=>(0,f.l8)({template:d,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[b.join("\n"),"清单之外的内容一律不得改动;不得删除任何小节标题、表格与数值参数。"],promptTexts:e,requirement:g,forbidDrawingImages:!0,diagnostics:i,signal:h,patchGuard:(0,f.XG)("workpackage-skeleton-repair",i),anchorTexts:a.entries.map(a=>({text:a.headingLine,append:!0})),maxTokens:6e3})));return c.content&&c.content!==a.chapter.content?c.content:a.chapter.content},recheck:b=>{if(0===q.length)return[0];let c=0;for(let d of b.split("\n").map(a=>a.trim()).filter(a=>m.test(a))){let e=d.replace(/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u,"");cf.gG.test(a.chapter.title)&&cf.gG.test(e)||(c+=(0,ce.ab)(b,e,q).length)}return[c]}})},s=await Promise.allSettled(c.map(a=>o(a))),t=0;if(s.forEach((a,b)=>{if("rejected"===a.status){if(h?.aborted)throw a.reason;console.error("[gen] workpackage skeleton repair failed:",a.reason);return}let d=a.value,{chapter:e}=c[b];if(d.rolledBack)return void console.error("[gen] workpackage skeleton repair rolled back:",e.title);d.content&&d.content!==e.content&&(e.content=d.content,t+=1,p+=1)}),k(b),0===t)break;n=!0}return(n||o>0)&&((0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"workpackage-skeleton-repair",status:"success",message:`工作包骨架收口完成:表格剥离 ${o} 处、骨架补写 ${p} 章`},{subtitle:"工作包骨架收口"})),k(b)),{skeletonFixApplied:n}}async function cm(a){let{chapterDraftsFinal:b,template:c,repairPromptTexts:d,requirement:e,signal:g,generationDiagnostics:h,progressStages:i,emitProgress:j,withProgressHeartbeat:k,finalGateRepairStages:l}=a,m=(0,D.yw)("",b).filter(a=>"missing_planned_section"===a.reason||"empty"===a.reason&&a.planned),n=b.flatMap(a=>{let b=m.filter(b=>b.chapterTitle===a.title);if(0===b.length)return[];let c=b.map(a=>({title:a.sectionTitle,emptyOnly:"empty"===a.reason})),d=a.content.split("\n").map(a=>a.trim()).filter(a=>/^#{2,4}\s/u.test(a)).pop();return d?[{chapter:a,sectionTitles:c,lastHeadingLine:d}]:[]});if(0===n.length)return{plannedSectionFixApplied:!1};let o=(0,r.X5)({type:"llm_review",roleId:"planned-section-repair",status:"running",message:`缺规划小节补写(${n.length} 章缺失)`},{subtitle:"缺节补写收口"});(0,r.fx)(i,o),l&&(0,r.fx)(l,o),j(b);let p=new Map(b.map((a,b)=>[a.title,b])),q=async a=>{let i=p.get(a.chapter.title)??b.indexOf(a.chapter),j=a.sectionTitles.map(({title:b,emptyOnly:c})=>{let d=(a.chapter.sections||[]).findIndex(a=>a===b)+1||(a.chapter.sections||[]).length+1,e=`### ${i+1}.${d} ${b}`;return c?`本章小节「${b}」只有标题或表格无正式正文:必须在既有小节标题下补写正式正文段落(正文写在表格前后均可),不得新增同名小节标题、不得删除或改动已有表格与数值。
|
|
51
51
|
${(0,B.av)(a.chapter.title,b)}`:`本章正文缺少规划小节「${b}」:必须在章末新增小节标题「${e}」(标题一字不差)并写入正式正文。
|
|
52
|
-
${(0,B.av)(a.chapter.title,b)}`});return b0({originalContent:a.chapter.content,repairRound:"planned-section-repair",diagnostics:h,beforeMetrics:[a.sectionTitles.length],apply:async()=>{let b=await k(()=>(0,f.X6)(h,`planned-section-repair:${a.chapter.id}`,()=>(0,f.l8)({template:c,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[...j,"已有内容一律不得改动,不得删除任何已有小节、表格与数值参数;新增小节之外不得改动。"],promptTexts:d,requirement:e,forbidDrawingImages:!0,diagnostics:h,signal:g,patchGuard:(0,f.XG)("planned-section-repair",h),anchorTexts:[{text:a.lastHeadingLine,append:!0}],maxTokens:6e3})));return b.content&&b.content!==a.chapter.content?b.content:a.chapter.content},recheck:b=>[(0,D.yw)("",[{title:a.chapter.title,content:b,sections:a.chapter.sections}]).filter(b=>b.chapterTitle===a.chapter.title&&("missing_planned_section"===b.reason||"empty"===b.reason&&b.planned)).length]})},p=await Promise.allSettled(m.map(a=>o(a))),q=0;return p.forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;console.error("[gen] planned section repair failed:",a.reason);return}let c=a.value,{chapter:d}=m[b];if(c.rolledBack)return void console.error("[gen] planned section repair rolled back:",d.title);c.content&&c.content!==d.content&&(d.content=c.content,q+=1)}),j(b),(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"planned-section-repair",status:q>0?"success":"failed",message:q>0?`缺规划小节补写完成:补写 ${q} 章`:"缺规划小节补写:修复 patch 未落地(锚点失配或 LLM 未产出)"},{subtitle:"缺节补写收口"})),{plannedSectionFixApplied:q>0}}async function cn(a){let{chapterDraftsFinal:b,template:c,reviewPromptTexts:d,repairPromptTexts:e,requirement:g,signal:h,projectContext:i,generationDiagnostics:j,preliminaryFactsModel:k,scopeConflicts:l,progressStages:m,emitProgress:n,withProgressHeartbeat:o,blueprintData:s,billFactLock:t}=a,u=[],v=!1;try{let w=a.globalReviewSamplingRate??1,x=w>=1||b.length<=2?b:b.filter((a,b)=>b%Math.max(2,Math.round(1/w))==0),y=x.length,z=async()=>{let a=b.map(a=>a.content).join("\n\n"),[e,f]=await Promise.all([o(()=>bt({template:c,chapters:x,chapterReviews:[],promptTexts:d,requirement:g,projectContext:i,diagnostics:j,signal:h})),b7(a,{diagnostics:j,signal:h})]);return{issues:[...new Set([...e.issues,...f.map(a=>{let b={level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`数据一致性矛盾(${a.kind}):${a.description}(原文 A:“${a.itemA.slice(0,60)}” ↔ 原文 B:“${a.itemB.slice(0,60)}”)`,suggestion:"全文数据必须一致:以绑定资料(图纸/清单/招标文件)为准选定唯一值,统一矛盾数值对,删除或修正其余矛盾表述。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。"};return`${b.message};${b.suggestion||""}`})])],stage:e.stage}},A=[],B=s?(0,F.IV)(s):void 0,C=async()=>{let a=b.map(a=>a.content).join("\n\n");return[...(await (0,D.qm)(a,k,l)).filter(a=>/跨章一致性冲突/u.test(a.message)),...(await (0,D.hr)(a,k)).filter(a=>"error"===a.level),...(0,p.rA)(a,{laborPeakAuthority:(0,F.yB)(s)}),...(0,p.iY)(a),...(0,p.IJ)(a),...(0,p.nm)(a),...(0,p.ON)(a),...(0,p.Et)(a),...(0,p.H)(a),...(0,p.iy)(a,(0,F.L$)(s)),...(0,p.cv)(a,(0,F.i2)(s)),...(0,p.KE)(a,(0,F.Be)(s)),...(0,p.fg)(a,s?.contract.totalDays),...(0,p.$$)(a,k.specAuthorityMap),...(0,p.ex)(a),...(0,p.Fr)(a),...(0,p.bq)(a),...(0,p.vH)(a),...(0,p.cT)(a),...(0,p.ub)(a),...(0,p.CJ)(a),...(0,p.cl)(a),...(0,p.zP)(a),...await (0,p.r8)(a,G),...await (0,p.sn)(a),...(0,p.l4)(a),...s?(0,q.dr)(a,s).filter(a=>"error"===a.level):[],...(0,N.jW)(a),...(0,N.l5)(a)].map(a=>`${a.message};${a.suggestion||""}`)},E=await z(),G=(0,p.P3)(k),H=(0,p.z4)(k),I=E.issues;A=await C(),u=[...new Set([...I,...A])];let J=0;for(let a of b){let b=(0,p.fE)(a.content,{authorityIndex:B,supportAuthority:G});b.fixedCount>0&&(a.content=b.markdown,J+=b.fixedCount)}let K=await cc(b.map(a=>a.content).join("\n\n"),{billFactLock:t,specAuthorityMap:k.specAuthorityMap});if(K.replacements.length>0){let a=0;for(let c of b){let b=a,d=b+c.content.length,e=K.replacements.filter(a=>a.start>=b&&a.end<=d).map(a=>({...a,start:a.start-b,end:a.end-b}));if(e.length>0){let a=(0,p.gk)(c.content,e);c.content=a.markdown,J+=a.fixedCount}a=d+2}}(K.details.length>0||K.falsePositiveGroups.length>0||K.noAnchorGroups.length>0)&&(console.log(`[gen] numeric-arbiter: 替换 ${K.replacements.length} 处、误报裁决 ${K.falsePositiveGroups.length} 组、无锚保留 ${K.noAnchorGroups.length} 组`),(0,r.fx)(m,(0,r.X5)({type:"validation",roleId:"numeric-arbiter",status:"success",message:`数值裁决器(清单事实锁/规格权威):确定性硬替换 ${K.replacements.length} 处、误报降级 ${K.falsePositiveGroups.length} 组、无锚留 LLM 定向修复 ${K.noAnchorGroups.length} 组`,details:[...K.details.map(a=>`确定性替换:${a}`),...K.falsePositiveGroups.map(a=>`误报裁决(不同清单条目口径并存,不阻断):${a}`),...K.noAnchorGroups.map(a=>`无确定性锚点(交 LLM 定向修复,残留由门禁兜底):${a}`)]},{subtitle:"数值裁决"})),n(b)),J>0&&(A=await C(),u=[...new Set([...I,...A])]);let L=!1,M=a=>[[...(0,p.nm)(a),...(0,p.ON)(a),...(0,p.ub)(a),...(0,p.CJ)(a),...(0,p.cl)(a),...(0,N.jW)(a),...(0,N.l5)(a)].length];for(let a=0;a<1&&u.length>0;a+=1){(0,r.fx)(m,(0,r.X5)({type:"llm_review",roleId:"global-consistency-repair",status:"running",message:`跨章一致性冲突第 ${a+1} 轮定向修复(${u.length} 个冲突)`},{subtitle:"跨章一致性修复"})),n(b);let d=0,i=b.flatMap(a=>{let b=a.content.replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡"),c=u.filter(c=>{if(c.includes(a.title))return!0;if(/基坑深度数值未锁定/u.test(c))return/基坑|支护|开挖|土方|降水/u.test(a.title)||a.content.includes("基坑");if((c.match(/不一致的表述\s*([^;;。\n]+)/u)?.[1]||"").split(/[、,,]/u).some(a=>{let c=a.trim().replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡");return c.length>=3&&b.includes(c)}))return!0;let d=c.match(/正文([^配比厚度\s]{1,6}?)(?:配比|厚度)/u)?.[1];return!!(d&&a.content.includes(d)||[...c.matchAll(/“([^”]{6,80})”/gu)].some(a=>b.includes(a[1].replace(/\s+/gu,""))))||[...c.matchAll(/(\d[\d,,.]*)\s*(?:人|台|日|个|次|天|月|套|具|处|项|条)/gu)].some(a=>b.includes(a[0].replace(/\s+/gu,"")))});return c.length>0?[{chapter:a,related:c}]:[]});if((await Promise.allSettled(i.map(({chapter:a,related:b})=>b0({originalContent:a.content,repairRound:"global-consistency-repair",diagnostics:j,apply:async()=>{let d=await o(()=>(0,f.X6)(j,`global-consistency-repair:${a.id}`,()=>(0,f.l8)({template:c,chapter:{id:a.id,title:a.title,content:a.content,evidence:a.evidence||[],missingFacts:a.missingFacts||[],sections:a.sections},issues:b.map(a=>{let b=/重复/u.test(a)?"请删除本冲突描述的重复内容(保留首次出现的完整版本),不得改动其余正文。":/缺少三要素/u.test(a)?"请按冲突描述中列出的缺失要素定向补写:只补缺失要素的内容(作业对象与工程量/工序顺序/施工方法),不得删除或改动已有正文;补写的工程量数值必须取工程量清单汇总值,不得编造。":/清单内部口径词|不应使用 Markdown 表格/u.test(a)?"请删除本冲突描述中点名的清单内部口径内容(“分部小计/本页小计/合计/按实/暂估”等口径行或承载专业工程正文的 Markdown 表格),把表格中的项目总量数据改写为段落式连贯叙述(数值保持不变),不得改动其余正文。":/基坑深度数值未锁定/u.test(a)?void 0!==H?`请在本章基坑支护/开挖小节写出确定性的基坑开挖深度表述:本工程基坑开挖深度为 ${H}m(权威口径来自图纸标注,严禁写其他深度数值或「按图纸确定」类回避表述),并同步保留既有危大工程分级标注。`:"请从本章证据摘要中的图纸标注/勘察资料锁定基坑开挖深度数值,以确定性表述写入基坑支护小节(严禁「按图纸确定」类回避表述),不得编造数值。":/规格错位/u.test(a)?"请按冲突描述中的工程量清单权威规格修正本章对应部位的规格表述:同一材料不同部位允许不同规格,同一部位只允许权威规格,禁止把多种规格全文归一为一种。":"请严格按冲突描述中给出的资料口径修正本章对应表述,不得引入新的数值;与资料口径一致的既有表述(含分层/子项数值)不得改动;同一材料多种规格按所属部位/分部分项分别使用,禁止全文统一为一种规格。";return`${a};${b}`}),promptTexts:e,requirement:g,forbidDrawingImages:!0,diagnostics:j,signal:h,patchGuard:(0,f.XG)("global-consistency-repair",j)})));return d.content&&d.content!==a.content?d.content:a.content},recheck:M})))).forEach((a,b)=>{if("rejected"===a.status){if(h?.aborted)throw a.reason;console.error("[gen] global consistency repair failed:",a.reason);return}let c=a.value,{chapter:e}=i[b];if(c.rolledBack)return void console.error("[gen] global consistency repair rolled back:",e.title);c.content&&c.content!==e.content&&(e.content=c.content,d+=1)}),0===d){L&&(I=(await z()).issues);break}n(b);let k=await C();A=k,0===a||0===k.length?(I=(await z()).issues,L=!1):L=!0,u=[...new Set([...I,...k])],(0,r.fx)(m,(0,r.X5)({type:"llm_review",roleId:"global-consistency-review",status:u.length>0?"failed":"success",message:u.length>0?`跨章一致性复检:仍有 ${u.length} 个冲突`:"跨章一致性复检通过"},{subtitle:"全局一致性审查"})),n(b)}await ck({chapterDraftsFinal:b,template:c,repairPromptTexts:e,requirement:g,signal:h,generationDiagnostics:j,progressStages:m,emitProgress:n,withProgressHeartbeat:o}),await cl({chapterDraftsFinal:b,projectContext:i,template:c,repairPromptTexts:e,requirement:g,signal:h,generationDiagnostics:j,progressStages:m,emitProgress:n,withProgressHeartbeat:o});let O=await (0,D.KI)(b,k,l),P=(0,p.GG)(k),Q=(0,p.hI)(k),R=(0,p.Pt)(k),S=(0,F.yB)(s),T=void 0!==S&&S>0?S:(0,p.dc)(b.map(a=>a.content).join("\n\n")),U=0;for(let a of b){let b=(0,p.fE)(a.content,{authorityIndex:B,scheduleAuthority:P,assemblyRateAuthority:Q,supportAuthority:G,laborPeakAuthority:T});b.fixedCount>0&&(a.content=b.markdown,U+=b.fixedCount)}let V=(0,p.Dq)(k),W=0,X=0,Y=0,Z=0,$=0,_=0,aa=(0,p.qG)(b);for(let a of(W+=aa.removedCount,b)){let b=a.content.split(/\r?\n/u).length,c=(0,p.lR)(a.content),d=(0,p.QM)(c.markdown),e=(0,p.Vc)(d.markdown),f=(0,p.$h)(e.markdown),g=(0,p.EN)(f.markdown,{areaSummary:R,scheduleDays:P}),h=(0,p.K2)(g.markdown),i=(0,p.mG)(h.markdown,V),j=i.markdown.split(/\r?\n/u).length,k=b-j,l=f.fixedCount-0+g.fixedCount+h.fixedCount+i.fixedCount;Y+=f.fixedCount,$+=g.fixedCount,_+=h.fixedCount,Z+=i.fixedCount,(k>0||l>0)&&(W+=c.removedCount+d.removedCount,X+=e.removedCount,a.content=i.markdown)}let ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0;for(let a of b){let b=(0,p.ir)(a.content);b.fixedCount>0&&(a.content=b.markdown,ab+=b.fixedCount);let c=(0,p.xp)(a.content);c.fixedCount>0&&(a.content=c.markdown,ac+=c.fixedCount);let d=await (0,p.lv)(a.content);d.fixedCount>0&&(a.content=d.markdown,ad+=d.fixedCount);let e=(0,p.Co)(a.content);e.fixedCount>0&&(a.content=e.markdown,ae+=e.fixedCount);let f=(0,p.zj)(a.content);f.fixedCount>0&&(a.content=f.markdown,af+=f.fixedCount);let g=(0,p.SZ)(a.content);g.fixedCount>0&&(a.content=g.markdown,ag+=g.fixedCount);let h=(0,p.GI)(a.content);h.fixedCount>0&&(a.content=h.markdown,ah+=h.fixedCount)}if(v=!0,O.fixedCount>0||U>0||W>0||X>0||Y>0||$>0||_>0||ab>0||ac>0||ad>0||ae>0||af>0||ag>0||ah>0||Z>0){A=await C(),u=[...new Set([...I,...A])];let a=[O.fixedCount>0?`数值 ${O.fixedCount} 处`:"",U>0?`跨章数值 ${U} 处`:"",W>0?`重复表格 ${W} 行`:"",X>0?`重复段落 ${X} 行`:"",ab>0?`自伤表述改写 ${ab} 处`:"",ac>0?`危大辨识补漏 ${ac} 项`:"",ad>0?`扬尘六个百分百补写 ${ad} 项`:"",ae>0?`内部术语清洗 ${ae} 处`:"",af>0?`无表头表格补齐 ${af} 处`:"",ag>0?`两可表述归一 ${ag} 处`:"",ah>0?`配置污染清洗 ${ah} 处`:"",Z>0?`绿化养护期统一 ${Z} 处`:""].filter(Boolean).join("、");(0,r.fx)(m,(0,r.X5)({type:"llm_review",roleId:"global-consistency-deterministic-fix",status:"success",message:`跨章一致性定点修复:${a}${O.details.slice(0,4).length>0?`(${O.details.slice(0,4).join("、")})`:""}`,details:O.details.slice(4)},{subtitle:"跨章一致性修复"})),n(b)}let ai=A.filter(a=>!cg.test(a)),aj=[...I,...A.filter(a=>cg.test(a))],ak=ai.length>0?"failed":"success",al=ai.length>0?`跨章一致性修复完成:仍残留 ${ai.length} 个可修复冲突(已记录,由交付门禁兑底)`:aj.length>0?`跨章一致性修复完成:确定性冲突已全部消除;另有 ${aj.length} 个审查提示/资料两可项(已记录,由交付门禁复核)`:"跨章一致性修复完成:冲突已全部消除";(0,r.fx)(m,(0,r.X5)({type:"llm_review",roleId:"global-consistency-repair",status:ak,message:al},{subtitle:"跨章一致性修复"})),n(b);let am=y<b.length?{...E.stage,message:`${E.stage.message||"全局一致性审查完成"}(抽检 ${y}/${b.length} 章)`}:E.stage;(0,r.fx)(m,am),n(b)}catch(a){if(h?.aborted)throw a;console.error("[gen] global consistency review failed:",a)}return{issues:u,dedupRan:v}}async function co(a){(await cm({chapterDraftsFinal:a.finalChapterDrafts,template:a.template,repairPromptTexts:a.repairPromptTexts,requirement:a.requirement,signal:a.signal,generationDiagnostics:a.generationDiagnostics,progressStages:a.progressStages,emitProgress:a.emitProgress,withProgressHeartbeat:a.withProgressHeartbeat})).plannedSectionFixApplied&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle());let b=(0,p.qj)(a.finalMarkdown);b!==a.finalMarkdown&&(a.finalMarkdown=b,await a.recomputeFinalValidationBundle());let c=function(a){let b=a.split(/\r?\n/u),c=[],d=0,e=0;for(;e<b.length;){if(!/^\s*\|/u.test(b[e])){c.push(b[e]),e+=1;continue}let a=e;for(;a+1<b.length&&/^\s*\|/u.test(b[a+1]);)a+=1;let f=b4(b.slice(e,a+1));f.removed>0&&(d+=1),c.push(...f.lines),e=a+1}return{markdown:c.join("\n"),removed:d}}(a.finalMarkdown);c.markdown!==a.finalMarkdown&&(a.finalMarkdown=c.markdown,await a.recomputeFinalValidationBundle());let d=(0,p.g4)(b9.aW.filter(a=>a.round2).map(b=>c=>b.fix(c,a.surfaceFixContext)),a.finalMarkdown,3);d.markdown!==a.finalMarkdown&&(a.finalMarkdown=d.markdown,await a.recomputeFinalValidationBundle());let e=await (0,E.NR)(a.finalMarkdown);e!==a.finalMarkdown&&(a.finalMarkdown=e,await a.recomputeFinalValidationBundle());let f=(0,p._D)(a.finalMarkdown);f.fixedCount>0&&(a.finalMarkdown=f.markdown,await a.recomputeFinalValidationBundle());let g=await (0,ag.eA)({markdown:a.finalMarkdown,chapters:a.finalChapterDrafts,model:a.tenderRequirements,similarity:a.requirementsSimilarity,signal:a.signal,diagnostics:a.generationDiagnostics});if(g.fixedCount>0){a.finalMarkdown=g.markdown,await a.recomputeFinalValidationBundle();let b=(0,r.X5)({type:"validation",roleId:"scoring-requirement-fix-final",status:"success",message:`评分项响应终检补写:${g.fixedCount} 条(${g.details.slice(0,3).join("、")})`,details:g.details.slice(3)},{subtitle:"评审后兜底"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}}let cp=/(?:\d+(?:\.\d+)?\s*(?:W|kW|kV|V|A|Hz|mm|cm|m|km|kg|g|t|K|MPa|kN|℃|%|L|mL|s|h|min)\b|C\d{2,}|HRB\d+|HPB\d+|DN\s*\d+|Φ\s*\d+(?:\.\d+)?|φ\s*\d+(?:\.\d+)?|\d+(?:\.\d+)?\s*[×x*]\s*\d+(?:\.\d+)?)/giu;function cq(a){return[...new Set((a.match(cp)||[]).map(a=>a.replace(/\s+/gu,"").trim()))].filter(Boolean).slice(0,8)}function cr(a,b=[]){return[...new Set(`${a} ${b.join(" ")}`.match(/[\p{Script=Han}]{2,}|[A-Za-z0-9_-]{3,}/gu)||[])].filter(a=>a.length>=2)}let cs=/(?:\d+(?:\.\d+)?\s*(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|K|L|ml|MPa|kPa|kN|N|℃|%|台|套|座|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年|万元|元|W|kW|kV|V|A|Hz|米|处|道|根|盏|株|标段|层|樘|孔|眼|间|户|栋|幢|d)\b|DN\s*\d+|Φ\s*\d+(?:\.\d+)?|φ\s*\d+(?:\.\d+)?|C\d{2,}|HRB\d+|HPB\d+)/giu;function ct(a){return a.replace(/\s+/gu,"").toLowerCase()}function cu(a){return[...new Set((a.match(cs)||[]).map(ct))]}async function cv(a){let b=function(a){let b=new Set;for(let c of a.allEvidence)if(c.content)for(let a of cu((0,g.eE)(c.content)))b.add(a);let c=a.input.billFactLock;if(c)for(let a of c.entries){for(let c of cu(`${a.name} ${a.description} ${a.quantity}${a.unit}`))b.add(c);for(let c of cq(a.description))b.add(ct(c));for(let c of a.specQuantityPairs)for(let a of(b.add(ct(c.spec)),cu(c.quantity)))b.add(a)}let d=a.input.blueprintData?.quantities;if(d)for(let[a,c]of Object.entries(d))for(let d of("number"==typeof c.value&&Number.isFinite(c.value)&&b.add(ct(`${c.value}${c.unit||""}`)),cu(a)))b.add(d);for(let c of[...a.structuredFacts||[],...a.factsModel?.preciseFacts||[]])for(let a of cu((0,e.lG)(c.value)))b.add(a);return b}(a);if(0===b.size)return;let c=a=>{let c=[];for(let d of a.split(/[。;;!!??\n]/u).map(a=>a.trim()).filter(Boolean).filter(a=>!a.startsWith("#")&&(a.match(cs)??[]).length>0).map(a=>a.slice(0,160))){if(function(a){if(/高温|防暑|危大|专家论证|超过一定规模|40℃|37℃|35℃/u.test(a)||/第\s*\d+\s*(天|周|月|日|层|道|步|轮|批)/u.test(a))return!0;let b=a.match(cs)||[];return!!(b.length>0&&b.every(a=>/%$/u.test(a.trim()))&&/完成|进度|利用率|合格率|优良率|评标|得分|负荷/u.test(a)||b.every(a=>/^20\d{2}/u.test(a))&&/年/u.test(a)&&!/月|日/u.test(a))}(d))continue;let a=cu(d);if(0===a.length||a.every(a=>b.has(a)))continue;let e=a.filter(a=>!b.has(a));e.length>0&&c.push({sentence:d,tokens:e})}return c},d=new Map;for(let b of a.finalChapterDrafts){let a=c(b.content);a.length>0&&d.set(b.id,a.slice(0,12))}let h=[...d.values()].reduce((a,b)=>a+b.length,0);if(0===h){(0,r.fx)(a.progressStages,(0,r.X5)({type:"validation",roleId:"numeric-verification",status:"success",message:"正文数值确定性核对通过:全部正文数值均在资料原文/清单事实锁/蓝图参数桶中找到同值来源",details:[`数值权威库规模:${b.size} 个归一化 token`]},{subtitle:"数值确定性核对"})),a.emitProgress(a.finalChapterDrafts,a.progressStages);return}let i=0,j=0;for(let[b,e]of d){let d=a.finalChapterDrafts.findIndex(a=>a.id===b);if(d<0)continue;let g=a.finalChapterDrafts[d],h=g.content,k=e,l=c(h).length,m=0,n=!1,o=!1,p=[l];for(;k.length>0&&m<2;){m+=1;let e=(0,r.X5)({type:"llm_review",roleId:`agent-numeric-verification-${b}`,status:"running",message:`正文数值核对发现 ${k.length} 处疑似无来源数值,第 ${m} 轮定向修复中:${g.title}`,details:k.map(a=>`疑似:${a.sentence}(缺来源 token:${a.tokens.join("、")})`)},{subtitle:"数值确定性核对"});(0,r.fx)(a.progressStages,e),(0,r.fx)(a.finalGateRepairStages,e),a.emitProgress(a.finalChapterDrafts,a.progressStages);let i=["【正文数值定向核对修复】",...m>1?[`本轮为第 ${m} 轮(最多 2 轮):上一轮修复后仍有残留,无法确认来源的数值必须直接删除,禁止保留或替换为其他无来源数值。`]:[],"下列句子中的数值(标注「缺来源 token」)在项目绑定材料、工程量清单与蓝图中均找不到同值来源,属于疑似编造数值。请逐句核对并修复:","1. 若该数值在本章绑定证据中确实存在(仅表述口径不同),保持数值原样,只修正单位或表述;","2. 若该数值是行业通用工艺参数(如养护龄期、分层厚度),可按规范惯例保留并改为规范原文表述;","3. 其余情况必须删除该数值,改写为不带具体数值的过程控制表述(如「按设计要求」「分层碾压至压实度满足设计及规范要求」);","禁止把疑似数值替换为另一个同样无来源的数值;禁止改动句子的非数值部分;只做局部修改,不得新增、删除或合并小节。",k.map(a=>`- 疑似句:${a.sentence}(缺来源 token:${a.tokens.join("、")})`).join("\n")].join("\n"),j=await b0({originalContent:h,repairRound:"numeric-verification",diagnostics:a.generationDiagnostics,apply:async()=>{let b=await a.withProgressHeartbeat(()=>(0,f.l8)({template:a.template,chapter:{id:g.id,title:g.title,content:h,evidence:g.evidence,missingFacts:g.missingFacts,sections:g.sections},issues:k.map(a=>`疑似无来源数值:${a.sentence}(token:${a.tokens.join("、")})`),promptTexts:i,requirement:a.requirement,forbidDrawingImages:!1,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,f.XG)("numeric-verification",a.generationDiagnostics)}));return b.content&&b.content!==h?b.content:h},recheck:a=>[c(a).length]});j.rolledBack||j.content===h||(h=j.content,a.finalChapterDrafts[d]={...g,content:h},n=!0),j.rolledBack&&(o=!0);let q=c(h).length;if(p.push(q),0===q||q>=l||m>=2)break;l=q,k=c(h).slice(0,12)}n&&(i+=1);let q=c(h).length;j+=q;let s=(0,r.X5)({type:"llm_review",roleId:`agent-numeric-verification-${b}`,status:0===q?"success":"failed",message:0===q?`数值核对修复完成:${g.title}(${e.length} 处疑似数值已处理,残留轨迹 ${p.join("→")})`:n?`数值核对修复部分生效:${g.title}(疑似数值残留轨迹 ${p.join("→")},已执行 ${m} 轮定向修复(每章最多 2 轮);残留项以 warning 记录,不阻断交付)`:o?`数值核对修复已回滚:${g.title}(修复后疑似数值增多,保留修复前正文;残留 ${q} 处以 warning 记录,不阻断交付)`:`数值核对修复未生效:${g.title}(模型未产生有效修改;残留 ${q} 处以 warning 记录,不阻断交付)`,details:[...e.map(a=>`疑似:${a.sentence}`),q>0?`已执行 ${m} 轮定向修复,残留项以 warning 记录,不阻断交付`:""]},{subtitle:"数值确定性核对"});(0,r.fx)(a.progressStages,s),(0,r.fx)(a.finalGateRepairStages,s),a.emitProgress(a.finalChapterDrafts,a.progressStages)}i>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.generationDiagnostics.llm.lastInfo=`正文数值确定性核对:权威库 ${b.size} token,${h} 处疑似无来源数值,${i} 章完成定向修复,残留 ${j} 处(每章最多 2 轮收敛修复,未收敛残留以 warning 记录,不阻断交付)`}async function cw(a){let b=a.requirementSemantics;if(!b||!b.parsed||0===(b.globalRequirements||[]).length&&0===(b.chapterRequirements||[]).length)return;let c=[...b.globalRequirements||[],...(b.chapterRequirements||[]).flatMap(a=>a.requirements)].filter(Boolean).length,d=(b,c,d)=>a.withProgressHeartbeat(()=>(0,bo.bb)('你是投标文档用户要求核验专家。逐条核对「用户要求」是否已在章节正文中落实。\n\n判定口径:正文存在明确满足该要求的实质性内容即算落实;仅泛泛提及、半句带过、被其他内容顶替均算未落实。\n\n不得因为正文有其他内容就降低标准;用户要求是最高优先级,未落实必须如实列入 unmet。\n\n只返回 JSON:{"satisfied":true/false,"unmet":["未落实要求原文"]}。',[`章节标题:${b}`,`用户要求(逐条核验):
|
|
52
|
+
${(0,B.av)(a.chapter.title,b)}`});return b0({originalContent:a.chapter.content,repairRound:"planned-section-repair",diagnostics:h,beforeMetrics:[a.sectionTitles.length],apply:async()=>{let b=await k(()=>(0,f.X6)(h,`planned-section-repair:${a.chapter.id}`,()=>(0,f.l8)({template:c,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[...j,"已有内容一律不得改动,不得删除任何已有小节、表格与数值参数;新增小节之外不得改动。"],promptTexts:d,requirement:e,forbidDrawingImages:!0,diagnostics:h,signal:g,patchGuard:(0,f.XG)("planned-section-repair",h),anchorTexts:[{text:a.lastHeadingLine,append:!0}],maxTokens:6e3})));return b.content&&b.content!==a.chapter.content?b.content:a.chapter.content},recheck:b=>[(0,D.yw)("",[{title:a.chapter.title,content:b,sections:a.chapter.sections}]).filter(b=>b.chapterTitle===a.chapter.title&&("missing_planned_section"===b.reason||"empty"===b.reason&&b.planned)).length]})},s=await Promise.allSettled(n.map(a=>q(a))),t=0;s.forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;console.error("[gen] planned section repair failed:",a.reason);return}let c=a.value,{chapter:d}=n[b];if(c.rolledBack)return void console.error("[gen] planned section repair rolled back:",d.title);c.content&&c.content!==d.content&&(d.content=c.content,t+=1)}),j(b);let u=(0,r.X5)({type:"llm_review",roleId:"planned-section-repair",status:t>0?"success":"failed",message:t>0?`缺规划小节补写完成:补写 ${t} 章`:"缺规划小节补写:修复 patch 未落地(锚点失配或 LLM 未产出)"},{subtitle:"缺节补写收口"});return(0,r.fx)(i,u),l&&(0,r.fx)(l,u),{plannedSectionFixApplied:t>0}}async function cn(a){let{chapterDraftsFinal:b,template:c,reviewPromptTexts:d,repairPromptTexts:e,requirement:g,signal:h,projectContext:i,generationDiagnostics:j,preliminaryFactsModel:k,scopeConflicts:l,progressStages:m,emitProgress:n,withProgressHeartbeat:o,blueprintData:s,billFactLock:t}=a,u=[],v=!1;try{let w=a.globalReviewSamplingRate??1,x=w>=1||b.length<=2?b:b.filter((a,b)=>b%Math.max(2,Math.round(1/w))==0),y=x.length,z=async()=>{let a=b.map(a=>a.content).join("\n\n"),[e,f]=await Promise.all([o(()=>bt({template:c,chapters:x,chapterReviews:[],promptTexts:d,requirement:g,projectContext:i,diagnostics:j,signal:h})),b7(a,{diagnostics:j,signal:h})]);return{issues:[...new Set([...e.issues,...f.map(a=>{let b={level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`数据一致性矛盾(${a.kind}):${a.description}(原文 A:“${a.itemA.slice(0,60)}” ↔ 原文 B:“${a.itemB.slice(0,60)}”)`,suggestion:"全文数据必须一致:以绑定资料(图纸/清单/招标文件)为准选定唯一值,统一矛盾数值对,删除或修正其余矛盾表述。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。"};return`${b.message};${b.suggestion||""}`})])],stage:e.stage}},A=[],B=s?(0,F.IV)(s):void 0,C=async()=>{let a=b.map(a=>a.content).join("\n\n");return[...(await (0,D.qm)(a,k,l)).filter(a=>/跨章一致性冲突/u.test(a.message)),...(await (0,D.hr)(a,k)).filter(a=>"error"===a.level),...(0,p.rA)(a,{laborPeakAuthority:(0,F.yB)(s)}),...(0,p.iY)(a),...(0,p.IJ)(a),...(0,p.nm)(a),...(0,p.ON)(a),...(0,p.Et)(a),...(0,p.H)(a),...(0,p.iy)(a,(0,F.L$)(s)),...(0,p.cv)(a,(0,F.i2)(s)),...(0,p.KE)(a,(0,F.Be)(s)),...(0,p.fg)(a,s?.contract.totalDays),...(0,p.$$)(a,k.specAuthorityMap),...(0,p.ex)(a),...(0,p.Fr)(a),...(0,p.bq)(a),...(0,p.vH)(a),...(0,p.cT)(a),...(0,p.ub)(a),...(0,p.CJ)(a),...(0,p.cl)(a),...(0,p.zP)(a),...await (0,p.r8)(a,G),...await (0,p.sn)(a),...(0,p.l4)(a),...s?(0,q.dr)(a,s).filter(a=>"error"===a.level):[],...(0,N.jW)(a),...(0,N.l5)(a)].map(a=>`${a.message};${a.suggestion||""}`)},E=await z(),G=(0,p.P3)(k),H=(0,p.z4)(k),I=E.issues;A=await C(),u=[...new Set([...I,...A])];let J=0;for(let a of b){let b=(0,p.fE)(a.content,{authorityIndex:B,supportAuthority:G});b.fixedCount>0&&(a.content=b.markdown,J+=b.fixedCount)}let K=await cc(b.map(a=>a.content).join("\n\n"),{billFactLock:t,specAuthorityMap:k.specAuthorityMap});if(K.replacements.length>0){let a=0;for(let c of b){let b=a,d=b+c.content.length,e=K.replacements.filter(a=>a.start>=b&&a.end<=d).map(a=>({...a,start:a.start-b,end:a.end-b}));if(e.length>0){let a=(0,p.gk)(c.content,e);c.content=a.markdown,J+=a.fixedCount}a=d+2}}(K.details.length>0||K.falsePositiveGroups.length>0||K.noAnchorGroups.length>0)&&(console.log(`[gen] numeric-arbiter: 替换 ${K.replacements.length} 处、误报裁决 ${K.falsePositiveGroups.length} 组、无锚保留 ${K.noAnchorGroups.length} 组`),(0,r.fx)(m,(0,r.X5)({type:"validation",roleId:"numeric-arbiter",status:"success",message:`数值裁决器(清单事实锁/规格权威):确定性硬替换 ${K.replacements.length} 处、误报降级 ${K.falsePositiveGroups.length} 组、无锚留 LLM 定向修复 ${K.noAnchorGroups.length} 组`,details:[...K.details.map(a=>`确定性替换:${a}`),...K.falsePositiveGroups.map(a=>`误报裁决(不同清单条目口径并存,不阻断):${a}`),...K.noAnchorGroups.map(a=>`无确定性锚点(交 LLM 定向修复,残留由门禁兜底):${a}`)]},{subtitle:"数值裁决"})),n(b)),J>0&&(A=await C(),u=[...new Set([...I,...A])]);let L=!1,M=a=>[[...(0,p.nm)(a),...(0,p.ON)(a),...(0,p.ub)(a),...(0,p.CJ)(a),...(0,p.cl)(a),...(0,N.jW)(a),...(0,N.l5)(a)].length];for(let a=0;a<1&&u.length>0;a+=1){(0,r.fx)(m,(0,r.X5)({type:"llm_review",roleId:"global-consistency-repair",status:"running",message:`跨章一致性冲突第 ${a+1} 轮定向修复(${u.length} 个冲突)`},{subtitle:"跨章一致性修复"})),n(b);let d=0,i=b.flatMap(a=>{let b=a.content.replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡"),c=u.filter(c=>{if(c.includes(a.title))return!0;if(/基坑深度数值未锁定/u.test(c))return/基坑|支护|开挖|土方|降水/u.test(a.title)||a.content.includes("基坑");if((c.match(/不一致的表述\s*([^;;。\n]+)/u)?.[1]||"").split(/[、,,]/u).some(a=>{let c=a.trim().replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡");return c.length>=3&&b.includes(c)}))return!0;let d=c.match(/正文([^配比厚度\s]{1,6}?)(?:配比|厚度)/u)?.[1];return!!(d&&a.content.includes(d)||[...c.matchAll(/“([^”]{6,80})”/gu)].some(a=>b.includes(a[1].replace(/\s+/gu,""))))||[...c.matchAll(/(\d[\d,,.]*)\s*(?:人|台|日|个|次|天|月|套|具|处|项|条)/gu)].some(a=>b.includes(a[0].replace(/\s+/gu,"")))});return c.length>0?[{chapter:a,related:c}]:[]});if((await Promise.allSettled(i.map(({chapter:a,related:b})=>b0({originalContent:a.content,repairRound:"global-consistency-repair",diagnostics:j,apply:async()=>{let d=await o(()=>(0,f.X6)(j,`global-consistency-repair:${a.id}`,()=>(0,f.l8)({template:c,chapter:{id:a.id,title:a.title,content:a.content,evidence:a.evidence||[],missingFacts:a.missingFacts||[],sections:a.sections},issues:b.map(a=>{let b=/重复/u.test(a)?"请删除本冲突描述的重复内容(保留首次出现的完整版本),不得改动其余正文。":/缺少三要素/u.test(a)?"请按冲突描述中列出的缺失要素定向补写:只补缺失要素的内容(作业对象与工程量/工序顺序/施工方法),不得删除或改动已有正文;补写的工程量数值必须取工程量清单汇总值,不得编造。":/清单内部口径词|不应使用 Markdown 表格/u.test(a)?"请删除本冲突描述中点名的清单内部口径内容(“分部小计/本页小计/合计/按实/暂估”等口径行或承载专业工程正文的 Markdown 表格),把表格中的项目总量数据改写为段落式连贯叙述(数值保持不变),不得改动其余正文。":/基坑深度数值未锁定/u.test(a)?void 0!==H?`请在本章基坑支护/开挖小节写出确定性的基坑开挖深度表述:本工程基坑开挖深度为 ${H}m(权威口径来自图纸标注,严禁写其他深度数值或「按图纸确定」类回避表述),并同步保留既有危大工程分级标注。`:"请从本章证据摘要中的图纸标注/勘察资料锁定基坑开挖深度数值,以确定性表述写入基坑支护小节(严禁「按图纸确定」类回避表述),不得编造数值。":/规格错位/u.test(a)?"请按冲突描述中的工程量清单权威规格修正本章对应部位的规格表述:同一材料不同部位允许不同规格,同一部位只允许权威规格,禁止把多种规格全文归一为一种。":"请严格按冲突描述中给出的资料口径修正本章对应表述,不得引入新的数值;与资料口径一致的既有表述(含分层/子项数值)不得改动;同一材料多种规格按所属部位/分部分项分别使用,禁止全文统一为一种规格。";return`${a};${b}`}),promptTexts:e,requirement:g,forbidDrawingImages:!0,diagnostics:j,signal:h,patchGuard:(0,f.XG)("global-consistency-repair",j)})));return d.content&&d.content!==a.content?d.content:a.content},recheck:M})))).forEach((a,b)=>{if("rejected"===a.status){if(h?.aborted)throw a.reason;console.error("[gen] global consistency repair failed:",a.reason);return}let c=a.value,{chapter:e}=i[b];if(c.rolledBack)return void console.error("[gen] global consistency repair rolled back:",e.title);c.content&&c.content!==e.content&&(e.content=c.content,d+=1)}),0===d){L&&(I=(await z()).issues);break}n(b);let k=await C();A=k,0===a||0===k.length?(I=(await z()).issues,L=!1):L=!0,u=[...new Set([...I,...k])],(0,r.fx)(m,(0,r.X5)({type:"llm_review",roleId:"global-consistency-review",status:u.length>0?"failed":"success",message:u.length>0?`跨章一致性复检:仍有 ${u.length} 个冲突`:"跨章一致性复检通过"},{subtitle:"全局一致性审查"})),n(b)}await ck({chapterDraftsFinal:b,template:c,repairPromptTexts:e,requirement:g,signal:h,generationDiagnostics:j,progressStages:m,emitProgress:n,withProgressHeartbeat:o}),await cl({chapterDraftsFinal:b,projectContext:i,template:c,repairPromptTexts:e,requirement:g,signal:h,generationDiagnostics:j,progressStages:m,emitProgress:n,withProgressHeartbeat:o});let O=await (0,D.KI)(b,k,l),P=(0,p.GG)(k),Q=(0,p.hI)(k),R=(0,p.Pt)(k),S=(0,F.yB)(s),T=void 0!==S&&S>0?S:(0,p.dc)(b.map(a=>a.content).join("\n\n")),U=0;for(let a of b){let b=(0,p.fE)(a.content,{authorityIndex:B,scheduleAuthority:P,assemblyRateAuthority:Q,supportAuthority:G,laborPeakAuthority:T});b.fixedCount>0&&(a.content=b.markdown,U+=b.fixedCount)}let V=(0,p.Dq)(k),W=0,X=0,Y=0,Z=0,$=0,_=0,aa=(0,p.qG)(b);for(let a of(W+=aa.removedCount,b)){let b=a.content.split(/\r?\n/u).length,c=(0,p.lR)(a.content),d=(0,p.QM)(c.markdown),e=(0,p.Vc)(d.markdown),f=(0,p.$h)(e.markdown),g=(0,p.EN)(f.markdown,{areaSummary:R,scheduleDays:P}),h=(0,p.K2)(g.markdown),i=(0,p.mG)(h.markdown,V),j=i.markdown.split(/\r?\n/u).length,k=b-j,l=f.fixedCount-0+g.fixedCount+h.fixedCount+i.fixedCount;Y+=f.fixedCount,$+=g.fixedCount,_+=h.fixedCount,Z+=i.fixedCount,(k>0||l>0)&&(W+=c.removedCount+d.removedCount,X+=e.removedCount,a.content=i.markdown)}let ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0;for(let a of b){let b=(0,p.ir)(a.content);b.fixedCount>0&&(a.content=b.markdown,ab+=b.fixedCount);let c=(0,p.xp)(a.content);c.fixedCount>0&&(a.content=c.markdown,ac+=c.fixedCount);let d=await (0,p.lv)(a.content);d.fixedCount>0&&(a.content=d.markdown,ad+=d.fixedCount);let e=(0,p.Co)(a.content);e.fixedCount>0&&(a.content=e.markdown,ae+=e.fixedCount);let f=(0,p.zj)(a.content);f.fixedCount>0&&(a.content=f.markdown,af+=f.fixedCount);let g=(0,p.SZ)(a.content);g.fixedCount>0&&(a.content=g.markdown,ag+=g.fixedCount);let h=(0,p.GI)(a.content);h.fixedCount>0&&(a.content=h.markdown,ah+=h.fixedCount)}if(v=!0,O.fixedCount>0||U>0||W>0||X>0||Y>0||$>0||_>0||ab>0||ac>0||ad>0||ae>0||af>0||ag>0||ah>0||Z>0){A=await C(),u=[...new Set([...I,...A])];let a=[O.fixedCount>0?`数值 ${O.fixedCount} 处`:"",U>0?`跨章数值 ${U} 处`:"",W>0?`重复表格 ${W} 行`:"",X>0?`重复段落 ${X} 行`:"",ab>0?`自伤表述改写 ${ab} 处`:"",ac>0?`危大辨识补漏 ${ac} 项`:"",ad>0?`扬尘六个百分百补写 ${ad} 项`:"",ae>0?`内部术语清洗 ${ae} 处`:"",af>0?`无表头表格补齐 ${af} 处`:"",ag>0?`两可表述归一 ${ag} 处`:"",ah>0?`配置污染清洗 ${ah} 处`:"",Z>0?`绿化养护期统一 ${Z} 处`:""].filter(Boolean).join("、");(0,r.fx)(m,(0,r.X5)({type:"llm_review",roleId:"global-consistency-deterministic-fix",status:"success",message:`跨章一致性定点修复:${a}${O.details.slice(0,4).length>0?`(${O.details.slice(0,4).join("、")})`:""}`,details:O.details.slice(4)},{subtitle:"跨章一致性修复"})),n(b)}let ai=A.filter(a=>!cg.test(a)),aj=[...I,...A.filter(a=>cg.test(a))],ak=ai.length>0?"failed":"success",al=ai.length>0?`跨章一致性修复完成:仍残留 ${ai.length} 个可修复冲突(已记录,由交付门禁兑底)`:aj.length>0?`跨章一致性修复完成:确定性冲突已全部消除;另有 ${aj.length} 个审查提示/资料两可项(已记录,由交付门禁复核)`:"跨章一致性修复完成:冲突已全部消除";(0,r.fx)(m,(0,r.X5)({type:"llm_review",roleId:"global-consistency-repair",status:ak,message:al},{subtitle:"跨章一致性修复"})),n(b);let am=y<b.length?{...E.stage,message:`${E.stage.message||"全局一致性审查完成"}(抽检 ${y}/${b.length} 章)`}:E.stage;(0,r.fx)(m,am),n(b)}catch(a){if(h?.aborted)throw a;console.error("[gen] global consistency review failed:",a)}return{issues:u,dedupRan:v}}async function co(a){(await cm({chapterDraftsFinal:a.finalChapterDrafts,template:a.template,repairPromptTexts:a.repairPromptTexts,requirement:a.requirement,signal:a.signal,generationDiagnostics:a.generationDiagnostics,progressStages:a.progressStages,emitProgress:a.emitProgress,withProgressHeartbeat:a.withProgressHeartbeat,finalGateRepairStages:a.finalGateRepairStages})).plannedSectionFixApplied&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle());let b=(0,p.qj)(a.finalMarkdown);if(b!==a.finalMarkdown){a.finalMarkdown=b,await a.recomputeFinalValidationBundle();let c=(0,r.X5)({type:"validation",roleId:"commercial-strip",status:"success",message:"商务条款数据交付前兜底清洗:正文商务条款数据句已删除"},{subtitle:"评审后兜底"});(0,r.fx)(a.progressStages,c),(0,r.fx)(a.finalGateRepairStages,c)}let c=function(a){let b=a.split(/\r?\n/u),c=[],d=0,e=0;for(;e<b.length;){if(!/^\s*\|/u.test(b[e])){c.push(b[e]),e+=1;continue}let a=e;for(;a+1<b.length&&/^\s*\|/u.test(b[a+1]);)a+=1;let f=b4(b.slice(e,a+1));f.removed>0&&(d+=1),c.push(...f.lines),e=a+1}return{markdown:c.join("\n"),removed:d}}(a.finalMarkdown);if(c.markdown!==a.finalMarkdown){a.finalMarkdown=c.markdown,await a.recomputeFinalValidationBundle();let b=(0,r.X5)({type:"validation",roleId:"table-deterministic-repair",status:"success",message:c.removed>0?`表格空单元格交付前确定性修复:删除 ${c.removed} 块`:"表格空单元格交付前确定性修复:合计行填充类修复已落地"},{subtitle:"评审后兜底"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}let d=(0,p.g4)(b9.aW.filter(a=>a.round2).map(b=>c=>b.fix(c,a.surfaceFixContext)),a.finalMarkdown,3);if(d.markdown!==a.finalMarkdown){a.finalMarkdown=d.markdown,await a.recomputeFinalValidationBundle();let b=(0,r.X5)({type:"validation",roleId:"post-review-surface",status:"success",message:`评审轮后表面修复兜底:确定性清洗 ${d.fixedCount} 处`},{subtitle:"评审后兜底"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}let e=await (0,E.NR)(a.finalMarkdown);if(e!==a.finalMarkdown){a.finalMarkdown=e,await a.recomputeFinalValidationBundle();let b=(0,r.X5)({type:"validation",roleId:"terminology-strip",status:"success",message:"内部术语句子确定性删除兜底:正文残留内部术语已删除"},{subtitle:"评审后兜底"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}let f=(0,p._D)(a.finalMarkdown);if(f.fixedCount>0){a.finalMarkdown=f.markdown,await a.recomputeFinalValidationBundle();let b=(0,r.X5)({type:"validation",roleId:"toc-consistency",status:"success",message:`目录与正文一致性兜底:按正文实际结构重建目录 ${f.fixedCount} 处`},{subtitle:"评审后兜底"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}let g=await (0,ag.eA)({markdown:a.finalMarkdown,chapters:a.finalChapterDrafts,model:a.tenderRequirements,similarity:a.requirementsSimilarity,signal:a.signal,diagnostics:a.generationDiagnostics});if(g.fixedCount>0){a.finalMarkdown=g.markdown,await a.recomputeFinalValidationBundle();let b=(0,r.X5)({type:"validation",roleId:"scoring-requirement-fix-final",status:"success",message:`评分项响应终检补写:${g.fixedCount} 条(${g.details.slice(0,3).join("、")})`,details:g.details.slice(3)},{subtitle:"评审后兜底"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}}let cp=/(?:\d+(?:\.\d+)?\s*(?:W|kW|kV|V|A|Hz|mm|cm|m|km|kg|g|t|K|MPa|kN|℃|%|L|mL|s|h|min)\b|C\d{2,}|HRB\d+|HPB\d+|DN\s*\d+|Φ\s*\d+(?:\.\d+)?|φ\s*\d+(?:\.\d+)?|\d+(?:\.\d+)?\s*[×x*]\s*\d+(?:\.\d+)?)/giu;function cq(a){return[...new Set((a.match(cp)||[]).map(a=>a.replace(/\s+/gu,"").trim()))].filter(Boolean).slice(0,8)}function cr(a,b=[]){return[...new Set(`${a} ${b.join(" ")}`.match(/[\p{Script=Han}]{2,}|[A-Za-z0-9_-]{3,}/gu)||[])].filter(a=>a.length>=2)}let cs=/(?:\d+(?:\.\d+)?\s*(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|K|L|ml|MPa|kPa|kN|N|℃|%|台|套|座|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年|万元|元|W|kW|kV|V|A|Hz|米|处|道|根|盏|株|标段|层|樘|孔|眼|间|户|栋|幢|d)\b|DN\s*\d+|Φ\s*\d+(?:\.\d+)?|φ\s*\d+(?:\.\d+)?|C\d{2,}|HRB\d+|HPB\d+)/giu;function ct(a){return a.replace(/\s+/gu,"").toLowerCase()}function cu(a){return[...new Set((a.match(cs)||[]).map(ct))]}async function cv(a){let b=function(a){let b=new Set;for(let c of a.allEvidence)if(c.content)for(let a of cu((0,g.eE)(c.content)))b.add(a);let c=a.input.billFactLock;if(c)for(let a of c.entries){for(let c of cu(`${a.name} ${a.description} ${a.quantity}${a.unit}`))b.add(c);for(let c of cq(a.description))b.add(ct(c));for(let c of a.specQuantityPairs)for(let a of(b.add(ct(c.spec)),cu(c.quantity)))b.add(a)}let d=a.input.blueprintData?.quantities;if(d)for(let[a,c]of Object.entries(d))for(let d of("number"==typeof c.value&&Number.isFinite(c.value)&&b.add(ct(`${c.value}${c.unit||""}`)),cu(a)))b.add(d);for(let c of[...a.structuredFacts||[],...a.factsModel?.preciseFacts||[]])for(let a of cu((0,e.lG)(c.value)))b.add(a);return b}(a);if(0===b.size)return;let c=a=>{let c=[];for(let d of a.split(/[。;;!!??\n]/u).map(a=>a.trim()).filter(Boolean).filter(a=>!a.startsWith("#")&&(a.match(cs)??[]).length>0).map(a=>a.slice(0,160))){if(function(a){if(/高温|防暑|危大|专家论证|超过一定规模|40℃|37℃|35℃/u.test(a)||/第\s*\d+\s*(天|周|月|日|层|道|步|轮|批)/u.test(a))return!0;let b=a.match(cs)||[];return!!(b.length>0&&b.every(a=>/%$/u.test(a.trim()))&&/完成|进度|利用率|合格率|优良率|评标|得分|负荷/u.test(a)||b.every(a=>/^20\d{2}/u.test(a))&&/年/u.test(a)&&!/月|日/u.test(a))}(d))continue;let a=cu(d);if(0===a.length||a.every(a=>b.has(a)))continue;let e=a.filter(a=>!b.has(a));e.length>0&&c.push({sentence:d,tokens:e})}return c},d=new Map;for(let b of a.finalChapterDrafts){let a=c(b.content);a.length>0&&d.set(b.id,a.slice(0,12))}let h=[...d.values()].reduce((a,b)=>a+b.length,0);if(0===h){let c=(0,r.X5)({type:"validation",roleId:"numeric-verification",status:"success",message:"正文数值确定性核对通过:全部正文数值均在资料原文/清单事实锁/蓝图参数桶中找到同值来源",details:[`数值权威库规模:${b.size} 个归一化 token`]},{subtitle:"数值确定性核对"});(0,r.fx)(a.progressStages,c),(0,r.fx)(a.finalGateRepairStages,c),a.emitProgress(a.finalChapterDrafts,a.progressStages);return}let i=0,j=0;for(let[b,e]of d){let d=a.finalChapterDrafts.findIndex(a=>a.id===b);if(d<0)continue;let g=a.finalChapterDrafts[d],h=g.content,k=e,l=c(h).length,m=0,n=!1,o=!1,p=[l];for(;k.length>0&&m<2;){m+=1;let e=(0,r.X5)({type:"llm_review",roleId:`agent-numeric-verification-${b}`,status:"running",message:`正文数值核对发现 ${k.length} 处疑似无来源数值,第 ${m} 轮定向修复中:${g.title}`,details:k.map(a=>`疑似:${a.sentence}(缺来源 token:${a.tokens.join("、")})`)},{subtitle:"数值确定性核对"});(0,r.fx)(a.progressStages,e),(0,r.fx)(a.finalGateRepairStages,e),a.emitProgress(a.finalChapterDrafts,a.progressStages);let i=["【正文数值定向核对修复】",...m>1?[`本轮为第 ${m} 轮(最多 2 轮):上一轮修复后仍有残留,无法确认来源的数值必须直接删除,禁止保留或替换为其他无来源数值。`]:[],"下列句子中的数值(标注「缺来源 token」)在项目绑定材料、工程量清单与蓝图中均找不到同值来源,属于疑似编造数值。请逐句核对并修复:","1. 若该数值在本章绑定证据中确实存在(仅表述口径不同),保持数值原样,只修正单位或表述;","2. 若该数值是行业通用工艺参数(如养护龄期、分层厚度),可按规范惯例保留并改为规范原文表述;","3. 其余情况必须删除该数值,改写为不带具体数值的过程控制表述(如「按设计要求」「分层碾压至压实度满足设计及规范要求」);","禁止把疑似数值替换为另一个同样无来源的数值;禁止改动句子的非数值部分;只做局部修改,不得新增、删除或合并小节。",k.map(a=>`- 疑似句:${a.sentence}(缺来源 token:${a.tokens.join("、")})`).join("\n")].join("\n"),j=await b0({originalContent:h,repairRound:"numeric-verification",diagnostics:a.generationDiagnostics,apply:async()=>{let b=await a.withProgressHeartbeat(()=>(0,f.l8)({template:a.template,chapter:{id:g.id,title:g.title,content:h,evidence:g.evidence,missingFacts:g.missingFacts,sections:g.sections},issues:k.map(a=>`疑似无来源数值:${a.sentence}(token:${a.tokens.join("、")})`),promptTexts:i,requirement:a.requirement,forbidDrawingImages:!1,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,f.XG)("numeric-verification",a.generationDiagnostics)}));return b.content&&b.content!==h?b.content:h},recheck:a=>[c(a).length]});j.rolledBack||j.content===h||(h=j.content,a.finalChapterDrafts[d]={...g,content:h},n=!0),j.rolledBack&&(o=!0);let q=c(h).length;if(p.push(q),0===q||q>=l||m>=2)break;l=q,k=c(h).slice(0,12)}n&&(i+=1);let q=c(h).length;j+=q;let s=(0,r.X5)({type:"llm_review",roleId:`agent-numeric-verification-${b}`,status:0===q?"success":"failed",message:0===q?`数值核对修复完成:${g.title}(${e.length} 处疑似数值已处理,残留轨迹 ${p.join("→")})`:n?`数值核对修复部分生效:${g.title}(疑似数值残留轨迹 ${p.join("→")},已执行 ${m} 轮定向修复(每章最多 2 轮);残留项以 warning 记录,不阻断交付)`:o?`数值核对修复已回滚:${g.title}(修复后疑似数值增多,保留修复前正文;残留 ${q} 处以 warning 记录,不阻断交付)`:`数值核对修复未生效:${g.title}(模型未产生有效修改;残留 ${q} 处以 warning 记录,不阻断交付)`,details:[...e.map(a=>`疑似:${a.sentence}`),q>0?`已执行 ${m} 轮定向修复,残留项以 warning 记录,不阻断交付`:""]},{subtitle:"数值确定性核对"});(0,r.fx)(a.progressStages,s),(0,r.fx)(a.finalGateRepairStages,s),a.emitProgress(a.finalChapterDrafts,a.progressStages)}i>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.generationDiagnostics.llm.lastInfo=`正文数值确定性核对:权威库 ${b.size} token,${h} 处疑似无来源数值,${i} 章完成定向修复,残留 ${j} 处(每章最多 2 轮收敛修复,未收敛残留以 warning 记录,不阻断交付)`}async function cw(a){let b=a.requirementSemantics;if(!b||!b.parsed||0===(b.globalRequirements||[]).length&&0===(b.chapterRequirements||[]).length)return;let c=[...b.globalRequirements||[],...(b.chapterRequirements||[]).flatMap(a=>a.requirements)].filter(Boolean).length,d=(b,c,d)=>a.withProgressHeartbeat(()=>(0,bo.bb)('你是投标文档用户要求核验专家。逐条核对「用户要求」是否已在章节正文中落实。\n\n判定口径:正文存在明确满足该要求的实质性内容即算落实;仅泛泛提及、半句带过、被其他内容顶替均算未落实。\n\n不得因为正文有其他内容就降低标准;用户要求是最高优先级,未落实必须如实列入 unmet。\n\n只返回 JSON:{"satisfied":true/false,"unmet":["未落实要求原文"]}。',[`章节标题:${b}`,`用户要求(逐条核验):
|
|
53
53
|
${d.map((a,b)=>`${b+1}. ${a}`).join("\n")}`,`章节正文:
|
|
54
54
|
${c.slice(0,12e3)}`].filter(Boolean).join("\n\n"),{maxTokens:1200,temperature:0,signal:a.signal,diagnostics:a.generationDiagnostics,prefixKey:"requirement-verification"})),e=(c,d,e,g)=>{let h=["【用户要求定向补写修复】",...g>1?[`本轮为第 ${g} 轮(最多 2 轮):上一轮补写后复验仍判定未落实,请务必逐条直接补写实质性内容。`]:[],"下列用户要求经核验未在本章正文中落实。请逐条在正文最合适的位置补充落实,用户要求是最高优先级:","用户要求与系统默认规则冲突时以用户要求为准;已落实内容不得删除或改写;只做局部修改,不得新增、删除或合并小节。",d.map(a=>`- ${a}`).join("\n"),...b?.styleRequirements?.length?[`
|
|
55
55
|
风格要求(补写内容同样必须遵守):
|
|
@@ -232,4 +232,4 @@ ${s}${t?`
|
|
|
232
232
|
${t}`:""}
|
|
233
233
|
|
|
234
234
|
`;return q((0,g.yk)((0,g.j7)(`${a.slice(0,h)}${u}${a.slice(o).trimStart()}`)))}function s(a,b){return 0!==j(b).length&&/资料未明确|系统暂未从知识库确认|项目资料暂未明确/u.test(a)?["计划工期","合同工期","质量标准","合同估算价","合同估算价格","建设地点","建设规模"].filter(b=>RegExp(`${b}[^
|
|
235
|
-
|。;;]{0,40}(?:资料未明确|系统暂未从知识库确认|项目资料暂未明确)`,"u").test(a)).map(a=>({level:"error",message:`${a} 已抽取到项目资料事实但正文仍显示暂未明确`,suggestion:"请优先使用项目基础事实卡片中的资料原值,不得用占位表达覆盖已确认事实。"})):[]}},87942:(a,b,c)=>{c.d(b,{x:()=>d});let d={version:"professional-document-workflow-v9",rules:["complete-local-knowledge-assumption","knowledge-coverage-recovery","fact-trace-placement","chapter-coverage-gate","structured-quality-report","post-repair-verification"]}},91943:(a,b,c)=>{c.d(b,{$t:()=>z,G5:()=>B,PA:()=>E,Rc:()=>j,dC:()=>D,vi:()=>A});let d=/[\u4e00-\u9fa5]/gu,e=/^([ \u3000]*)(\d{1,3})\.\s+\S/u,f=/^([ \u3000]*)([-*+])\s+\S/u,g=/^(#{1,6})\s+\S/u,h=/(?:\.{2,}|…{2,})\s*\d+\s*$/u,i=/。、|,、|;、|。,|,。|。。/u,j=[{open:"(",close:")",label:"全角括号"},{open:"《",close:"》",label:"书名号"}],k=/(?<=[。;!?])/u,l=/[的与和及或在于是对从向把被将按并而则如若等共约达须应需可要能以由使让]/u;function m(a){return(a.match(d)||[]).length}function n(a){let b=a.trim();return b.length>80?`${b.slice(0,80)}…`:b}function o(a){return g.test(a.trim())}function p(a){return a.trim().startsWith("|")}function q(a){let b=e.exec(a);return!!b&&300>=Number.parseInt(b[2],10)}function r(a){return f.test(a)}function s(a){return o(a)||p(a)}function t(a){return a.replace(/[|`*_<>#\s\u3000]/gu,"").replace(/^:?-{2,}:?$/u,"")}function u(a){return a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim())}function v(a){return u(a).map(t).join("|")}function w(a,b){for(let c=b-1;c>=0;c-=1)if(a[c].trim())return c;return -1}function x(a,b){for(let c=b+1;c<a.length;c+=1)if(a[c].trim())return c;return -1}function y(a){let b=[],c=0;for(;c<a.length;){let d=e.exec(a[c]),f=d?Number.parseInt(d[2],10):0;if(!d||f>300){c+=1;continue}let g=d[1].length,h=[{index:c,number:f}],i=c+1;for(;i<a.length;){if(!a[i].trim()){let b=i;for(;b<a.length&&!a[b].trim();)b+=1;let c=b<a.length?e.exec(a[b]):null;if(c&&c[1].length===g&&300>=Number.parseInt(c[2],10)){i=b;continue}break}let b=e.exec(a[i]);if(b&&b[1].length===g&&300>=Number.parseInt(b[2],10)){h.push({index:i,number:Number.parseInt(b[2],10)}),i+=1;continue}break}b.push({indent:g,items:h}),c=i>c?i:c+1}return b}function z(a){let b=a.replace(/\r\n?/gu,"\n").split("\n"),c={cleanable:[],blocking:[]};for(let a of y(b)){let d=a.items.map(a=>a.number);if(1===a.items.length){d[0]>1&&c.cleanable.push({kind:"orphan-list-number",line:a.items[0].index+1,excerpt:n(b[a.items[0].index]),message:`孤立有序编号「${d[0]}.」(无前序 1.~${d[0]-1}.,疑似跨节继承编号)`});continue}d.every((a,b)=>a===b+1)||c.cleanable.push({kind:"list-numbering",line:a.items[0].index+1,excerpt:`编号序列 ${d.join(",")}`,message:`有序列表编号不连续(第 ${a.items[0].index+1}~${a.items[a.items.length-1].index+1} 行编号:${d.join(",")})`})}!function(a,b){let c=0;for(;c<a.length;){if(!r(a[c])){c+=1;continue}let d=[c],e=c+1;for(;e<a.length;){if(!a[e].trim()){let b=e;for(;b<a.length&&!a[b].trim();)b+=1;if(b<a.length&&r(a[b])){e=b;continue}break}if(r(a[e])){d.push(e),e+=1;continue}break}if(1===d.length){let c=d[0],e=w(a,c),f=x(a,c),g=e>=0?a[e].trim():"",h=/[::]$/u.test(g)||/(?:包括|如下|以下|例如|分别是)[::]?$/u.test(g),i=e>=0&&!r(a[e])&&!o(a[e])&&!p(a[e])&&!q(a[e])&&!h,j=f>=0&&!r(a[f])&&!p(a[f]);i&&j&&b.cleanable.push({kind:"orphan-list-item",line:c+1,excerpt:n(a[c]),message:"孤立单项列表(前后均为正文语境,无列表上下文)"})}c=e>c?e:c+1}}(b,c),function(a,b){for(let c of function(a){let b=[],c=0;for(;c<a.length;){if(!p(a[c])){c+=1;continue}let d=[c],e=c+1;for(;e<a.length&&p(a[e]);)d.push(e),e+=1;b.push({start:c,rows:d}),c=e}return b}(a)){let d=c.rows;if(d.length<2||!function(a){let b=a.trim();return b.startsWith("|")&&/^[\s|:-]+$/u.test(b)&&/-{3,}/u.test(b)}(a[d[1]]))continue;let e=u(a[d[0]]),f=v(a[d[0]]),g=e[0]?.replace(/[\s*_]/gu,"")??"";e.length>=3&&/表$/u.test(g)&&m(g)>=8&&b.blocking.push({kind:"table-title-in-header",line:d[0]+1,excerpt:g,message:`表格表头首格为表名(「${g}」),列语义错位(表名应独立成行,表头首格必须填列名)`});let h=d.slice(2);if(0===h.length){b.blocking.push({kind:"table-empty",line:d[0]+1,excerpt:n(a[d[0]]),message:"空表(仅表头与分隔线,无任何数据行)"});continue}let i=v(a[h[0]])===f;i&&b.cleanable.push({kind:"table-header-duplicate",line:h[0]+1,excerpt:n(a[h[0]]),message:"重复表头行(分隔线后数据行与表头内容一致)"});let j=new Set;for(let c of(i&&j.add(f),h)){if(i&&c===h[0])continue;let d=v(a[c]);if(!(!d||d.split("|").every(a=>!a))){if(j.has(d)){b.cleanable.push({kind:"table-row-duplicate",line:c+1,excerpt:n(a[c]),message:"表内数据行完全重复"});continue}j.add(d)}}}}(b,c),function(a,b){for(let c=0;c<a.length;c+=1){let d=a[c].trim();if(!d||s(d)||q(d)||r(d)||h.test(d)||/\d$/u.test(d)||15>m(d))continue;let e=d[d.length-1];if(!/[\u4e00-\u9fa5]/u.test(e)||/[::、]$/u.test(d)||/[表图]$/u.test(d))continue;let f=x(a,c);if(f>=0&&(q(a[f])||r(a[f]))&&/(?:完成后|完毕后|结束后|如下|以下)$/u.test(d)||!(-1===f||o(a[f])||p(a[f])||q(a[f])||r(a[f]))&&!l.test(e))continue;let g=w(a,c),i=g>=0?a[g].trim():"";(g<0||o(i)||p(i)||q(i)||r(i)||/[。;!?""」』)\]】…]$/u.test(i))&&b.blocking.push({kind:"truncated-line",line:c+1,excerpt:n(a[c]),message:"句尾截断(行尾无终止标点且后续为标题/表格/列表/文末,疑似生成截断)"})}}(b,c),function(a,b){for(let c=0;c<a.length;c+=1){let d=/^(#{3,6})\s+(\S.*)$/u.exec(a[c].trim());if(!d)continue;let e=d[1].length,f=x(a,c);if(-1===f){b.blocking.push({kind:"empty-subsection",line:c+1,excerpt:n(a[c]),message:`空小节「${d[2].trim().slice(0,40)}」(小节标题后无任何内容)`});continue}let g=/^(#{1,6})\s+\S/u.exec(a[f].trim());g&&g[1].length<=e&&b.blocking.push({kind:"empty-subsection",line:c+1,excerpt:n(a[c]),message:`空小节「${d[2].trim().slice(0,40)}」(小节标题后无任何内容)`})}}(b,c),function(a,b){let c=new Map;for(let d=0;d<a.length;d+=1){let e=a[d].trim();if(!e||s(e)||q(e)||r(e))continue;let f=e.replace(/\s+/gu,"");if(40>m(f))continue;let g=c.get(f);if(void 0===g){c.set(f,d);continue}b.cleanable.push({kind:"duplicate-line",line:d+1,excerpt:n(a[d]),message:`与第 ${g+1} 行完全重复(≥40 字)`})}}(b,c);for(let a=0;a<b.length;a+=1){let d=b[a];if(!d.trim()||s(d)||q(d)||r(d))continue;let e=d.split(k).map(a=>a.trim()).filter(Boolean);for(let b=0;b+1<e.length;b+=1)if(e[b]===e[b+1]&&m(e[b])>=16){c.cleanable.push({kind:"duplicate-sentence-adjacent",line:a+1,excerpt:e[b].slice(0,60),message:`相邻句子重复(「${e[b].slice(0,24)}…」连续两遍)`});break}}for(let a=0;a<b.length;a+=1){let d=b[a];if(!d.trim()||s(d))continue;let e=i.exec(d);e&&c.blocking.push({kind:"sentence-fracture",line:a+1,excerpt:n(d),message:`标点断裂(「${e[0]}」句读错乱,疑似句段拼接残留/漂移句)`})}let d=b.join("\n");for(let{open:a,close:e,label:f}of j){let g=d.split(a).length-1,h=d.split(e).length-1;if(g===h)continue;let i=b.findIndex(b=>b.split(a).length-1!=b.split(e).length-1);c.blocking.push({kind:"punctuation-unbalanced",line:Math.max(1,i+1),excerpt:n(b[i]??""),message:`${f}不闭合(开 ${g} 处、闭 ${h} 处,疑似内容丢失/拼接残留)`})}return c}function A(a){let b=a.replace(/\r\n?/gu,"\n"),c=[];for(let a=0;a<4;a+=1){let a=b.split("\n"),d=z(b);if(0===d.cleanable.length)break;let e=new Set,f=new Map;for(let b of y(a)){let d=b.items.map(a=>a.number);if(1===b.items.length&&d[0]>1){let e=b.items[0].index,g=a[e].replace(/^([ \u3000]*)\d{1,3}\.\s+/u,"$1");g!==a[e]&&(f.set(e,g),c.push(`孤立编号去号:第 ${e+1} 行(「${d[0]}.」)`));continue}b.items.length>1&&!d.every((a,b)=>a===b+1)&&(b.items.forEach((b,c)=>{let d=a[b.index].replace(/^([ \u3000]*)\d{1,3}\.\s+/u,`$1${c+1}. `);d!==a[b.index]&&f.set(b.index,d)}),c.push(`有序列表重排:第 ${b.items[0].index+1}~${b.items[b.items.length-1].index+1} 行(${d.join(",")} → 1..${d.length})`))}for(let b of d.cleanable){let d=b.line-1;if("orphan-list-item"===b.kind){let b=a[d].replace(/^([ \u3000]*)[-*+]\s+/u,"$1");b!==a[d]&&(f.set(d,b),c.push(`孤立列表项去号:第 ${d+1} 行`))}else if("table-header-duplicate"===b.kind)e.add(d),c.push(`重复表头行删除:第 ${d+1} 行`);else if("table-row-duplicate"===b.kind)e.add(d),c.push(`表内重复数据行删除:第 ${d+1} 行`);else if("duplicate-line"===b.kind)e.add(d),c.push(`完全重复行删除:第 ${d+1} 行`);else if("duplicate-sentence-adjacent"===b.kind){let b=function(a){let b=a.split(k),c=[];for(let a of b){let b=c[c.length-1];void 0!==b&&b===a&&m(a.trim())>=16||c.push(a)}return c.join("")}(a[d]);b!==a[d]&&(f.set(d,b),c.push(`相邻重复句去重:第 ${d+1} 行`))}}let g=a.map((a,b)=>e.has(b)?void 0:f.get(b)??a).filter(a=>void 0!==a).join("\n");if(g===b)break;b=g}return{markdown:b,cleaned:c}}function B(a,b){if(0===a.blocking.length)return;let c=a.blocking.slice(0,4).map(a=>`${a.message}(第 ${a.line} 行)`).join(";");return`${b?`${b} `:""}结构完整性未通过(${a.blocking.length} 处):${c}。请保留已正确内容,仅修正上述问题后重新输出完整小节。`}let C={"orphan-list-number":"孤立编号由确定性清理去号转正文;写时按小节独立起编,不得继承父级编号。","list-numbering":"编号重排为 1..n 连续;写时编号必须从 1 起连续。","orphan-list-item":"孤立单项列表去除列表符并入正文;单项内容不使用列表格式。","table-header-duplicate":"删除重复表头行;表格必须只有一个表头块。","table-row-duplicate":"删除重复数据行;同一数据不得在表内出现两次。","table-title-in-header":"表名必须独立成行(表题),表头首格必须为列名;须定向重写该表格。","table-empty":"空表须补充数据行或删除;不得交付仅表头的空表。","table-number-orphan-reference":"补建被引用的表实体或修正引用编号;表编号引用必须与实体一一对应。","table-number-duplicate":"表编号重排为全篇唯一;同一表编号不得出现两个实体。","duplicate-line":"删除后出现的重复行;该段内容只能出现一次。","duplicate-sentence-adjacent":"相邻重复句去重;不得同句连发两遍。","truncated-line":"句尾截断须补全该句后重写;不得交付截断内容。","empty-subsection":"空小节必须补写与该小节相关的正文内容,不得只留标题。","sentence-fracture":"句读断裂须重写该句;不得交付句段拼接残留。","punctuation-unbalanced":"全角括号/书名号不闭合须重写所在语句;成对性破坏是内容丢失信号,补齐或删除残缺部分,不得带病交付。"};function D(a,b){let c=b?.includeCleanable??!0,d=z(a),e=function(a){let b=a.replace(/\r\n?/gu,"\n").split("\n"),c=[],d=new Map,e=/^表\s*(\d+)\s+\S/u;for(let a=0;a<b.length;a+=1){let c=e.exec((b[a]||"").trim());if(!c)continue;let f=a+1;for(;f<b.length&&!(b[f]||"").trim();)f+=1;if(f>=b.length||!/^\s*\|/u.test(b[f]||""))continue;let g=Number.parseInt(c[1],10);d.set(g,[...d.get(g)||[],a+1])}for(let[a,e]of d)e.length<=1||c.push({kind:"table-number-duplicate",line:e[1],excerpt:n((b[e[1]-1]||"").trim()),message:`表编号重复(「表${a}」实体出现 ${e.length} 次:第 ${e.join("、")} 行):表编号必须全篇唯一`});let f=[/[按如]\s*表\s*(\d+)/gu,/(?<![\u4e00-\u9fa5])见\s*表\s*(\d+)/gu,/(?:参见|详见|根据|依据|按照|参照|比照|遵照|结合)\s*表\s*(\d+)/gu];for(let a=0;a<b.length;a+=1){let e=b[a]||"";if(!e.includes("表"))continue;let g=new Set;for(let b of f){let f;for(b.lastIndex=0;f=b.exec(e);){let b=Number.parseInt(f[1],10);g.has(b)||d.has(b)||(g.add(b),c.push({kind:"table-number-orphan-reference",line:a+1,excerpt:n(e.trim()),message:`引用了「表${b}」但正文无该编号表实体(引用与实体必须一一对应)`}))}}}return c}(a);return(c?[...d.blocking,...e,...d.cleanable]:[...d.blocking,...e]).map(a=>({level:"error",severity:"blocker",category:"structure",message:`结构完整性缺陷:${a.message}(第 ${a.line} 行)`,suggestion:C[a.kind]}))}function E(a,b){let c=a.replace(/\r\n?/gu,"\n").split("\n"),d=[];{let a,b=!1,e=!1;for(let f of c){let c=f.trim();if(/^```/u.test(c)){b=!b;continue}if(b)continue;if(/^##\s+目录\s*$/u.test(c)){e=!0;continue}if(e){/^<div class="page-break"><\/div>$/u.test(c)&&(e=!1);continue}let g=/^##\s+第([一二三四五六七八九十百千万\d]+)章\s+/u.exec(c);if(g){a={declared:function(a){if(/^\d+$/u.test(a))return Number(a);let b={一:1,二:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};if("十"===a)return 10;if(1===a.length)return b[a];if(a.startsWith("十"))return 10+(b[a[1]]??0);if(a.endsWith("十"))return(b[a[0]]??0)*10;let c=a.indexOf("十");if(c>0&&c===a.length-2)return(b[a[0]]??0)*10+(b[a[c+1]]??0)}(g[1]||""),prefixCounts:new Map},d.push(a);continue}if(/^##\s+/u.test(c)){a=void 0;continue}let h=/^###\s+(\d+)\.(\d+)\s+/u.exec(c);if(h&&a){let b=Number(h[1]);a.prefixCounts.set(b,(a.prefixCounts.get(b)||0)+1)}}}let e=b?.chapterNumber,f="number"==typeof e&&Number.isInteger(e)&&e>0&&d.length<=1?e:void 0;if(0===d.length&&void 0===f)return{markdown:a,fixedCount:0};let g=d.map(a=>{if(void 0!==a.declared)return a.declared;let b=[...a.prefixCounts.entries()].sort((a,b)=>b[1]-a[1]||a[0]-b[0])[0];return b?.[0]}),h=!1,i=!1,j=0,k=f,l=0,m=0,n=0,o=c.map(a=>{let b=a.trim();if(/^```/u.test(b))return h=!h,a;if(h)return a;if(/^##\s+目录\s*$/u.test(b))return i=!0,a;if(i)return/^<div class="page-break"><\/div>$/u.test(b)&&(i=!1),a;if(/^##\s+第[一二三四五六七八九十百千万\d]+章\s+/u.test(b))return k=f??g[j],void 0===f&&(j+=1),l=0,m=0,a;if(/^##\s+/u.test(b))return void 0===f&&(k=void 0),a;if(!k||a!==b)return a;let c=/^###\s+(.*)$/u.exec(b);if(c){l+=1,m=0;let b=(c[1]||"").replace(/^\d+(?:\.\d+)*\s+/u,"").trim();if(!b)return a;let d=`### ${k}.${l} ${b}`;return d!==a&&(n+=1),d}let d=/^####\s+(.*)$/u.exec(b);if(d){let b=/^\d+\.\d+\.(\d+)\s+(.*)$/u.exec(d[1]||"");if(!b)return a;m+=1;let c=`#### ${k}.${l}.${m} ${(b[2]||"").trim()}`;return c!==a&&(n+=1),c}return a});return 0===n?{markdown:a,fixedCount:0}:{markdown:o.join("\n"),fixedCount:n}}},93675:(a,b,c)=>{c.d(b,{aW:()=>l});var d=c(64406),e=c(65667),f=c(91943),g=c(40299),h=c(85016),i=c(55807),j=c(63516),k=c(54185);let l=[{key:"table-line-residue",stage5:!0,round2:!0,fix:a=>{let b=(0,d.br)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"templated-labels",stage5:!0,round2:!0,fix:a=>{let b=(0,k.p_)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"structure-integrity",stage5:!0,round2:!0,fix:a=>{let b=(0,f.vi)(a);return{markdown:b.markdown,fixedCount:b.cleaned.length}}},{key:"repeated-words",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Vw)(a);return{markdown:b,fixedCount:+(b!==a)}}},{key:"duplicate-tables",stage5:!1,round2:!0,fix:a=>{let b=(0,d.lR)(a);return{markdown:b.markdown,fixedCount:b.removedCount}}},{key:"finish-thickness",stage5:!0,round2:!0,fix:a=>{let b=(0,d.JF)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"slot-depth-value",stage5:!0,round2:!0,fix:a=>{let b=(0,d.yV)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"labor-peak",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.BR)(a,b.laborPeakAuthority);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"phase-labor-values",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.Pl)(a,b.phaseLaborAuthorities);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"resource-breakdown",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,e.Ti)(a,b.resourceBreakdownAuthority);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"internal-table-row-dup",stage5:!0,round2:!0,fix:a=>{let b=(0,d.QM)(a);return{markdown:b.markdown,fixedCount:b.removedCount}}},{key:"duplicate-basic-info-tables",stage5:!0,round2:!0,fix:a=>{let b=(0,d.y4)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"fallback-placeholder-rows",stage5:!0,round2:!0,fix:a=>{let b=(0,d.uL)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"greening-maintenance",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.mG)(a,b.greeningMaintenanceAuthority);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"paragraph-opening-repeat",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Qc)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"paragraph-tail-repeat",stage5:!0,round2:!0,fix:a=>{let b=(0,d.kp)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"collision-numbered-heading",stage5:!0,round2:!0,fix:a=>{let b=(0,d.fK)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"heading-uncovered-items",stage5:!0,round2:!0,fix:a=>{let b=(0,d.N$)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"inverted-date-range",stage5:!0,round2:!0,fix:a=>{let b=(0,d.r_)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"truncated-sentence",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Y4)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"meta-discourse",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Fd)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"formula-residue",stage5:!0,round2:!0,fix:a=>{let b=(0,d.EJ)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"self-undermining",stage5:!0,round2:!0,fix:a=>{let b=(0,d.ir)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"ambiguous-either-or",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.SZ)(a,{supportForm:b.supportFormAuthority,decisionLock:b.decisionLockEntries});return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"empty-scoring-response",stage5:!0,round2:!0,fix:a=>{let b=(0,j.w)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"tender-meta-language",stage5:!0,round2:!0,fix:a=>{let b=(0,j.TX)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"forbidden-configuration",stage5:!0,round2:!0,fix:a=>{let b=(0,d.GI)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"basis-regulation-region",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.zo)(a,b.basisRegulations);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"work-injury-insurance",stage5:!0,round2:!0,fix:a=>{let b=(0,d.qz)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"duplicate-response-line",stage5:!0,round2:!0,fix:a=>{let b=(0,j.Mf)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"atlas-reference",stage5:!0,round2:!1,fix:a=>{let b=(0,i.Fc)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"tertiary-h4-dedupe",stage5:!1,round2:!0,fix:a=>(0,g.pV)(a)},{key:"internal-term-heading",stage5:!0,round2:!0,fix:a=>(0,h.fc)(a)},{key:"skeleton-fingerprint-variants",stage5:!1,round2:!0,fix:a=>{let b=(0,k.sO)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"flow-form-variants",stage5:!1,round2:!0,fix:a=>{let b=(0,k.z9)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"truncated-title-completion",stage5:!1,round2:!0,fix:a=>{let b=(0,k.G9)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"sentence-like-heading-split",stage5:!1,round2:!0,fix:(a,b)=>{let c=(0,k.Q1)(a,b.plannedSectionTitles);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"section-renumber",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,f.PA)(a,{chapterNumber:b.chapterNumber});return{markdown:c.markdown,fixedCount:c.fixedCount}}}]}};
|
|
235
|
+
|。;;]{0,40}(?:资料未明确|系统暂未从知识库确认|项目资料暂未明确)`,"u").test(a)).map(a=>({level:"error",message:`${a} 已抽取到项目资料事实但正文仍显示暂未明确`,suggestion:"请优先使用项目基础事实卡片中的资料原值,不得用占位表达覆盖已确认事实。"})):[]}},87942:(a,b,c)=>{c.d(b,{x:()=>d});let d={version:"professional-document-workflow-v9",rules:["complete-local-knowledge-assumption","knowledge-coverage-recovery","fact-trace-placement","chapter-coverage-gate","structured-quality-report","post-repair-verification"]}},91943:(a,b,c)=>{c.d(b,{$t:()=>z,G5:()=>B,PA:()=>E,Rc:()=>j,dC:()=>D,vi:()=>A});let d=/[\u4e00-\u9fa5]/gu,e=/^([ \u3000]*)(\d{1,3})\.\s+\S/u,f=/^([ \u3000]*)([-*+])\s+\S/u,g=/^(#{1,6})\s+\S/u,h=/(?:\.{2,}|…{2,})\s*\d+\s*$/u,i=/。、|,、|;、|。,|,。|。。/u,j=[{open:"(",close:")",label:"全角括号"},{open:"《",close:"》",label:"书名号"}],k=/(?<=[。;!?])/u,l=/[的与和及或在于是对从向把被将按并而则如若等共约达须应需可要能以由使让]/u;function m(a){return(a.match(d)||[]).length}function n(a){let b=a.trim();return b.length>80?`${b.slice(0,80)}…`:b}function o(a){return g.test(a.trim())}function p(a){return a.trim().startsWith("|")}function q(a){let b=e.exec(a);return!!b&&300>=Number.parseInt(b[2],10)}function r(a){return f.test(a)}function s(a){return o(a)||p(a)}function t(a){return a.replace(/[|`*_<>#\s\u3000]/gu,"").replace(/^:?-{2,}:?$/u,"")}function u(a){return a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim())}function v(a){return u(a).map(t).join("|")}function w(a,b){for(let c=b-1;c>=0;c-=1)if(a[c].trim())return c;return -1}function x(a,b){for(let c=b+1;c<a.length;c+=1)if(a[c].trim())return c;return -1}function y(a){let b=[],c=0;for(;c<a.length;){let d=e.exec(a[c]),f=d?Number.parseInt(d[2],10):0;if(!d||f>300){c+=1;continue}let g=d[1].length,h=[{index:c,number:f}],i=c+1;for(;i<a.length;){if(!a[i].trim()){let b=i;for(;b<a.length&&!a[b].trim();)b+=1;let c=b<a.length?e.exec(a[b]):null;if(c&&c[1].length===g&&300>=Number.parseInt(c[2],10)){i=b;continue}break}let b=e.exec(a[i]);if(b&&b[1].length===g&&300>=Number.parseInt(b[2],10)){h.push({index:i,number:Number.parseInt(b[2],10)}),i+=1;continue}break}b.push({indent:g,items:h}),c=i>c?i:c+1}return b}function z(a){let b=a.replace(/\r\n?/gu,"\n").split("\n"),c={cleanable:[],blocking:[]};for(let a of y(b)){let d=a.items.map(a=>a.number);if(1===a.items.length){d[0]>1&&c.cleanable.push({kind:"orphan-list-number",line:a.items[0].index+1,excerpt:n(b[a.items[0].index]),message:`孤立有序编号「${d[0]}.」(无前序 1.~${d[0]-1}.,疑似跨节继承编号)`});continue}d.every((a,b)=>a===b+1)||c.cleanable.push({kind:"list-numbering",line:a.items[0].index+1,excerpt:`编号序列 ${d.join(",")}`,message:`有序列表编号不连续(第 ${a.items[0].index+1}~${a.items[a.items.length-1].index+1} 行编号:${d.join(",")})`})}!function(a,b){let c=0;for(;c<a.length;){if(!r(a[c])){c+=1;continue}let d=[c],e=c+1;for(;e<a.length;){if(!a[e].trim()){let b=e;for(;b<a.length&&!a[b].trim();)b+=1;if(b<a.length&&r(a[b])){e=b;continue}break}if(r(a[e])){d.push(e),e+=1;continue}break}if(1===d.length){let c=d[0],e=w(a,c),f=x(a,c),g=e>=0?a[e].trim():"",h=/[::]$/u.test(g)||/(?:包括|如下|以下|例如|分别是)[::]?$/u.test(g),i=e>=0&&!r(a[e])&&!o(a[e])&&!p(a[e])&&!q(a[e])&&!h,j=f>=0&&!r(a[f])&&!p(a[f]);i&&j&&b.cleanable.push({kind:"orphan-list-item",line:c+1,excerpt:n(a[c]),message:"孤立单项列表(前后均为正文语境,无列表上下文)"})}c=e>c?e:c+1}}(b,c),function(a,b){for(let c of function(a){let b=[],c=0;for(;c<a.length;){if(!p(a[c])){c+=1;continue}let d=[c],e=c+1;for(;e<a.length&&p(a[e]);)d.push(e),e+=1;b.push({start:c,rows:d}),c=e}return b}(a)){let d=c.rows;if(d.length<2||!function(a){let b=a.trim();return b.startsWith("|")&&/^[\s|:-]+$/u.test(b)&&/-{3,}/u.test(b)}(a[d[1]]))continue;let e=u(a[d[0]]),f=v(a[d[0]]),g=e[0]?.replace(/[\s*_]/gu,"")??"";e.length>=3&&/表$/u.test(g)&&m(g)>=8&&b.blocking.push({kind:"table-title-in-header",line:d[0]+1,excerpt:g,message:`表格表头首格为表名(「${g}」),列语义错位(表名应独立成行,表头首格必须填列名)`});let h=d.slice(2);if(0===h.length){b.blocking.push({kind:"table-empty",line:d[0]+1,excerpt:n(a[d[0]]),message:"空表(仅表头与分隔线,无任何数据行)"});continue}let i=v(a[h[0]])===f;i&&b.cleanable.push({kind:"table-header-duplicate",line:h[0]+1,excerpt:n(a[h[0]]),message:"重复表头行(分隔线后数据行与表头内容一致)"});let j=new Set;for(let c of(i&&j.add(f),h)){if(i&&c===h[0])continue;let d=v(a[c]);if(!(!d||d.split("|").every(a=>!a))){if(j.has(d)){b.cleanable.push({kind:"table-row-duplicate",line:c+1,excerpt:n(a[c]),message:"表内数据行完全重复"});continue}j.add(d)}}}}(b,c),function(a,b){for(let c=0;c<a.length;c+=1){let d=a[c].trim();if(!d||s(d)||q(d)||r(d)||h.test(d)||/\d$/u.test(d)||15>m(d))continue;let e=d[d.length-1];if(!/[\u4e00-\u9fa5]/u.test(e)||/[::、]$/u.test(d)||/[表图]$/u.test(d))continue;let f=x(a,c);if(f>=0&&(q(a[f])||r(a[f]))&&/(?:完成后|完毕后|结束后|如下|以下)$/u.test(d)||!(-1===f||o(a[f])||p(a[f])||q(a[f])||r(a[f]))&&!l.test(e))continue;let g=w(a,c),i=g>=0?a[g].trim():"";(g<0||o(i)||p(i)||q(i)||r(i)||/[。;!?""」』)\]】…]$/u.test(i))&&b.blocking.push({kind:"truncated-line",line:c+1,excerpt:n(a[c]),message:"句尾截断(行尾无终止标点且后续为标题/表格/列表/文末,疑似生成截断)"})}}(b,c),function(a,b){for(let c=0;c<a.length;c+=1){let d=/^(#{3,6})\s+(\S.*)$/u.exec(a[c].trim());if(!d)continue;let e=d[1].length,f=x(a,c);if(-1===f){b.blocking.push({kind:"empty-subsection",line:c+1,excerpt:n(a[c]),message:`空小节「${d[2].trim().slice(0,40)}」(小节标题后无任何内容)`});continue}let g=/^(#{1,6})\s+\S/u.exec(a[f].trim());g&&g[1].length<=e&&b.blocking.push({kind:"empty-subsection",line:c+1,excerpt:n(a[c]),message:`空小节「${d[2].trim().slice(0,40)}」(小节标题后无任何内容)`})}}(b,c),function(a,b){let c=new Map;for(let d=0;d<a.length;d+=1){let e=a[d].trim();if(!e||s(e)||q(e)||r(e))continue;let f=e.replace(/\s+/gu,"");if(40>m(f))continue;let g=c.get(f);if(void 0===g){c.set(f,d);continue}b.cleanable.push({kind:"duplicate-line",line:d+1,excerpt:n(a[d]),message:`与第 ${g+1} 行完全重复(≥40 字)`})}}(b,c);for(let a=0;a<b.length;a+=1){let d=b[a];if(!d.trim()||s(d)||q(d)||r(d))continue;let e=d.split(k).map(a=>a.trim()).filter(Boolean);for(let b=0;b+1<e.length;b+=1)if(e[b]===e[b+1]&&m(e[b])>=16){c.cleanable.push({kind:"duplicate-sentence-adjacent",line:a+1,excerpt:e[b].slice(0,60),message:`相邻句子重复(「${e[b].slice(0,24)}…」连续两遍)`});break}}for(let a=0;a<b.length;a+=1){let d=b[a];if(!d.trim()||s(d))continue;let e=i.exec(d);e&&c.blocking.push({kind:"sentence-fracture",line:a+1,excerpt:n(d),message:`标点断裂(「${e[0]}」句读错乱,疑似句段拼接残留/漂移句)`})}let d=b.join("\n");for(let{open:a,close:e,label:f}of j){let g=d.split(a).length-1,h=d.split(e).length-1;if(g===h)continue;let i=b.findIndex(b=>b.split(a).length-1!=b.split(e).length-1);c.blocking.push({kind:"punctuation-unbalanced",line:Math.max(1,i+1),excerpt:n(b[i]??""),message:`${f}不闭合(开 ${g} 处、闭 ${h} 处,疑似内容丢失/拼接残留)`})}return c}function A(a){let b=a.replace(/\r\n?/gu,"\n"),c=[];for(let a=0;a<4;a+=1){let a=b.split("\n"),d=z(b);if(0===d.cleanable.length)break;let e=new Set,f=new Map;for(let b of y(a)){let d=b.items.map(a=>a.number);if(1===b.items.length&&d[0]>1){let e=b.items[0].index,g=a[e].replace(/^([ \u3000]*)\d{1,3}\.\s+/u,"$1");g!==a[e]&&(f.set(e,g),c.push(`孤立编号去号:第 ${e+1} 行(「${d[0]}.」)`));continue}b.items.length>1&&!d.every((a,b)=>a===b+1)&&(b.items.forEach((b,c)=>{let d=a[b.index].replace(/^([ \u3000]*)\d{1,3}\.\s+/u,`$1${c+1}. `);d!==a[b.index]&&f.set(b.index,d)}),c.push(`有序列表重排:第 ${b.items[0].index+1}~${b.items[b.items.length-1].index+1} 行(${d.join(",")} → 1..${d.length})`))}for(let b of d.cleanable){let d=b.line-1;if("orphan-list-item"===b.kind){let b=a[d].replace(/^([ \u3000]*)[-*+]\s+/u,"$1");b!==a[d]&&(f.set(d,b),c.push(`孤立列表项去号:第 ${d+1} 行`))}else if("table-header-duplicate"===b.kind)e.add(d),c.push(`重复表头行删除:第 ${d+1} 行`);else if("table-row-duplicate"===b.kind)e.add(d),c.push(`表内重复数据行删除:第 ${d+1} 行`);else if("duplicate-line"===b.kind)e.add(d),c.push(`完全重复行删除:第 ${d+1} 行`);else if("duplicate-sentence-adjacent"===b.kind){let b=function(a){let b=a.split(k),c=[];for(let a of b){let b=c[c.length-1];void 0!==b&&b===a&&m(a.trim())>=16||c.push(a)}return c.join("")}(a[d]);b!==a[d]&&(f.set(d,b),c.push(`相邻重复句去重:第 ${d+1} 行`))}}let g=a.map((a,b)=>e.has(b)?void 0:f.get(b)??a).filter(a=>void 0!==a).join("\n");if(g===b)break;b=g}return{markdown:b,cleaned:c}}function B(a,b){if(0===a.blocking.length)return;let c=a.blocking.slice(0,4).map(a=>`${a.message}(第 ${a.line} 行)`).join(";");return`${b?`${b} `:""}结构完整性未通过(${a.blocking.length} 处):${c}。请保留已正确内容,仅修正上述问题后重新输出完整小节。`}let C={"orphan-list-number":"孤立编号由确定性清理去号转正文;写时按小节独立起编,不得继承父级编号。","list-numbering":"编号重排为 1..n 连续;写时编号必须从 1 起连续。","orphan-list-item":"孤立单项列表去除列表符并入正文;单项内容不使用列表格式。","table-header-duplicate":"删除重复表头行;表格必须只有一个表头块。","table-row-duplicate":"删除重复数据行;同一数据不得在表内出现两次。","table-title-in-header":"表名必须独立成行(表题),表头首格必须为列名;须定向重写该表格。","table-empty":"空表须补充数据行或删除;不得交付仅表头的空表。","table-number-orphan-reference":"补建被引用的表实体或修正引用编号;表编号引用必须与实体一一对应。","table-number-duplicate":"表编号重排为全篇唯一;同一表编号不得出现两个实体。","duplicate-line":"删除后出现的重复行;该段内容只能出现一次。","duplicate-sentence-adjacent":"相邻重复句去重;不得同句连发两遍。","truncated-line":"句尾截断须补全该句后重写;不得交付截断内容。","empty-subsection":"空小节必须补写与该小节相关的正文内容,不得只留标题。","sentence-fracture":"句读断裂须重写该句;不得交付句段拼接残留。","punctuation-unbalanced":"全角括号/书名号不闭合须重写所在语句;成对性破坏是内容丢失信号,补齐或删除残缺部分,不得带病交付。"};function D(a,b){let c=b?.includeCleanable??!0,d=z(a),e=function(a){let b=a.replace(/\r\n?/gu,"\n").split("\n"),c=[],d=new Map,e=/^表\s*(\d+)\s+\S/u;for(let a=0;a<b.length;a+=1){let c=e.exec((b[a]||"").trim());if(!c)continue;let f=a+1;for(;f<b.length&&!(b[f]||"").trim();)f+=1;if(f>=b.length||!/^\s*\|/u.test(b[f]||""))continue;let g=Number.parseInt(c[1],10);d.set(g,[...d.get(g)||[],a+1])}for(let[a,e]of d)e.length<=1||c.push({kind:"table-number-duplicate",line:e[1],excerpt:n((b[e[1]-1]||"").trim()),message:`表编号重复(「表${a}」实体出现 ${e.length} 次:第 ${e.join("、")} 行):表编号必须全篇唯一`});let f=[/[按如]\s*表\s*(\d+)/gu,/(?<![\u4e00-\u9fa5])见\s*表\s*(\d+)/gu,/(?:参见|详见|根据|依据|按照|参照|比照|遵照|结合)\s*表\s*(\d+)/gu];for(let a=0;a<b.length;a+=1){let e=b[a]||"";if(!e.includes("表"))continue;let g=new Set;for(let b of f){let f;for(b.lastIndex=0;f=b.exec(e);){let b=Number.parseInt(f[1],10);g.has(b)||d.has(b)||(g.add(b),c.push({kind:"table-number-orphan-reference",line:a+1,excerpt:n(e.trim()),message:`引用了「表${b}」但正文无该编号表实体(引用与实体必须一一对应)`}))}}}return c}(a);return(c?[...d.blocking,...e,...d.cleanable]:[...d.blocking,...e]).map(a=>({level:"error",severity:"blocker",category:"structure",message:`结构完整性缺陷:${a.message}(第 ${a.line} 行)`,suggestion:C[a.kind]}))}function E(a,b){let c=a.replace(/\r\n?/gu,"\n").split("\n"),d=[];{let a,b=!1,e=!1;for(let f of c){let c=f.trim();if(/^```/u.test(c)){b=!b;continue}if(b)continue;if(/^##\s+目录\s*$/u.test(c)){e=!0;continue}if(e){/^<div class="page-break"><\/div>$/u.test(c)&&(e=!1);continue}let g=/^##\s+第([一二三四五六七八九十百千万\d]+)章\s+/u.exec(c);if(g){a={declared:function(a){if(/^\d+$/u.test(a))return Number(a);let b={一:1,二:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};if("十"===a)return 10;if(1===a.length)return b[a];if(a.startsWith("十"))return 10+(b[a[1]]??0);if(a.endsWith("十"))return(b[a[0]]??0)*10;let c=a.indexOf("十");if(c>0&&c===a.length-2)return(b[a[0]]??0)*10+(b[a[c+1]]??0)}(g[1]||""),prefixCounts:new Map},d.push(a);continue}if(/^##\s+/u.test(c)){a=void 0;continue}let h=/^###\s+(\d+)\.(\d+)\s+/u.exec(c);if(h&&a){let b=Number(h[1]);a.prefixCounts.set(b,(a.prefixCounts.get(b)||0)+1)}}}let e=b?.chapterNumber,f="number"==typeof e&&Number.isInteger(e)&&e>0&&d.length<=1?e:void 0;if(0===d.length&&void 0===f)return{markdown:a,fixedCount:0};let g=d.map(a=>{if(void 0!==a.declared)return a.declared;let b=[...a.prefixCounts.entries()].sort((a,b)=>b[1]-a[1]||a[0]-b[0])[0];return b?.[0]}),h=!1,i=!1,j=0,k=f,l=0,m=0,n=0,o=c.map(a=>{let b=a.trim();if(/^```/u.test(b))return h=!h,a;if(h)return a;if(/^##\s+目录\s*$/u.test(b))return i=!0,a;if(i)return/^<div class="page-break"><\/div>$/u.test(b)&&(i=!1),a;if(/^##\s+第[一二三四五六七八九十百千万\d]+章\s+/u.test(b))return k=f??g[j],void 0===f&&(j+=1),l=0,m=0,a;if(/^##\s+/u.test(b))return void 0===f&&(k=void 0),a;if(!k||a!==b)return a;let c=/^###\s+(.*)$/u.exec(b);if(c){l+=1,m=0;let b=(c[1]||"").replace(/^\d+(?:\.\d+)*\s+/u,"").trim();if(!b)return a;let d=`### ${k}.${l} ${b}`;return d!==a&&(n+=1),d}let d=/^####\s+(.*)$/u.exec(b);if(d){let b=/^\d+\.\d+\.(\d+)\s+(.*)$/u.exec(d[1]||"");if(!b)return a;m+=1;let c=`#### ${k}.${l}.${m} ${(b[2]||"").trim()}`;return c!==a&&(n+=1),c}return a});return 0===n?{markdown:a,fixedCount:0}:{markdown:o.join("\n"),fixedCount:n}}},93675:(a,b,c)=>{c.d(b,{aW:()=>l});var d=c(64406),e=c(65667),f=c(91943),g=c(40299),h=c(85016),i=c(55807),j=c(63516),k=c(54185);let l=[{key:"table-line-residue",stage5:!0,round2:!0,fix:a=>{let b=(0,d.br)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"templated-labels",stage5:!0,round2:!0,fix:a=>{let b=(0,k.p_)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"structure-integrity",stage5:!0,round2:!0,fix:a=>{let b=(0,f.vi)(a);return{markdown:b.markdown,fixedCount:b.cleaned.length}}},{key:"repeated-words",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Vw)(a);return{markdown:b,fixedCount:+(b!==a)}}},{key:"duplicate-tables",stage5:!1,round2:!0,fix:a=>{let b=(0,d.lR)(a);return{markdown:b.markdown,fixedCount:b.removedCount}}},{key:"finish-thickness",stage5:!0,round2:!0,fix:a=>{let b=(0,d.JF)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"slot-depth-value",stage5:!0,round2:!0,fix:a=>{let b=(0,d.yV)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"labor-peak",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.BR)(a,b.laborPeakAuthority);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"phase-labor-values",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.Pl)(a,b.phaseLaborAuthorities);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"resource-breakdown",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,e.Ti)(a,b.resourceBreakdownAuthority);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"internal-table-row-dup",stage5:!0,round2:!0,fix:a=>{let b=(0,d.QM)(a);return{markdown:b.markdown,fixedCount:b.removedCount}}},{key:"duplicate-basic-info-tables",stage5:!0,round2:!0,fix:a=>{let b=(0,d.y4)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"fallback-placeholder-rows",stage5:!0,round2:!0,fix:a=>{let b=(0,d.uL)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"greening-maintenance",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.mG)(a,b.greeningMaintenanceAuthority);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"paragraph-opening-repeat",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Qc)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"paragraph-tail-repeat",stage5:!0,round2:!0,fix:a=>{let b=(0,d.kp)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"collision-numbered-heading",stage5:!0,round2:!0,fix:a=>{let b=(0,d.fK)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"heading-uncovered-items",stage5:!0,round2:!0,fix:a=>{let b=(0,d.N$)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"inverted-date-range",stage5:!0,round2:!0,fix:a=>{let b=(0,d.r_)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"truncated-sentence",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Y4)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"meta-discourse",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Fd)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"formula-residue",stage5:!0,round2:!0,fix:a=>{let b=(0,d.EJ)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"self-undermining",stage5:!0,round2:!0,fix:a=>{let b=(0,d.ir)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"ambiguous-either-or",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.SZ)(a,{supportForm:b.supportFormAuthority,decisionLock:b.decisionLockEntries});return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"empty-scoring-response",stage5:!0,round2:!0,fix:a=>{let b=(0,j.w)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"tender-meta-language",stage5:!0,round2:!0,fix:a=>{let b=(0,j.TX)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"forbidden-configuration",stage5:!0,round2:!0,fix:a=>{let b=(0,d.GI)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"basis-regulation-region",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.zo)(a,b.basisRegulations);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"work-injury-insurance",stage5:!0,round2:!0,fix:a=>{let b=(0,d.qz)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"duplicate-response-line",stage5:!0,round2:!0,fix:a=>{let b=(0,j.Mf)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"atlas-reference",stage5:!0,round2:!0,fix:a=>{let b=(0,i.Fc)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"tertiary-h4-dedupe",stage5:!1,round2:!0,fix:a=>(0,g.pV)(a)},{key:"internal-term-heading",stage5:!0,round2:!0,fix:a=>(0,h.fc)(a)},{key:"skeleton-fingerprint-variants",stage5:!1,round2:!0,fix:a=>{let b=(0,k.sO)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"flow-form-variants",stage5:!1,round2:!0,fix:a=>{let b=(0,k.z9)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"truncated-title-completion",stage5:!1,round2:!0,fix:a=>{let b=(0,k.G9)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"sentence-like-heading-split",stage5:!1,round2:!0,fix:(a,b)=>{let c=(0,k.Q1)(a,b.plannedSectionTitles);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"section-renumber",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,f.PA)(a,{chapterNumber:b.chapterNumber});return{markdown:c.markdown,fixedCount:c.fixedCount}}}]}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:[],rootMainFiles:[],rootMainFilesTree:{},pages:{"/":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/880-64d8a15c524106d2.js","static/chunks/795-cd94e8d4e9768eb9.js","static/chunks/pages/index-cb27bfa36c212ab5.js"],"/_app":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/css/1916dc77cee68698.css","static/chunks/pages/_app-255c1f704deb9f22.js"],"/_error":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/pages/_error-282257fbdcc167b4.js"],"/asset-library":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/717-743b697a417dd5ee.js","static/chunks/883-506cbca959974997.js","static/chunks/665-88e20299084b9e73.js","static/chunks/563-
|
|
1
|
+
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:[],rootMainFiles:[],rootMainFilesTree:{},pages:{"/":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/880-64d8a15c524106d2.js","static/chunks/795-cd94e8d4e9768eb9.js","static/chunks/pages/index-cb27bfa36c212ab5.js"],"/_app":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/css/1916dc77cee68698.css","static/chunks/pages/_app-255c1f704deb9f22.js"],"/_error":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/pages/_error-282257fbdcc167b4.js"],"/asset-library":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/717-743b697a417dd5ee.js","static/chunks/883-506cbca959974997.js","static/chunks/665-88e20299084b9e73.js","static/chunks/563-2b116a2500a97dba.js","static/chunks/7-20bcc985742a9ae1.js","static/chunks/289-12dfcb3abec1c4b4.js","static/chunks/994-241f87efc61005b8.js","static/chunks/pages/asset-library-a1047694e888e655.js"],"/document-roles":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/717-743b697a417dd5ee.js","static/chunks/883-506cbca959974997.js","static/chunks/665-88e20299084b9e73.js","static/chunks/44-d3545eedd5c75ef1.js","static/chunks/563-2b116a2500a97dba.js","static/chunks/7-20bcc985742a9ae1.js","static/chunks/289-12dfcb3abec1c4b4.js","static/chunks/787-c18af810af3433f6.js","static/chunks/195-2c0168eacab722d2.js","static/chunks/455-e1b41ac4946d2b6f.js","static/chunks/pages/document-roles-5620a98d6312f81c.js"],"/documents":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/717-743b697a417dd5ee.js","static/chunks/883-506cbca959974997.js","static/chunks/665-88e20299084b9e73.js","static/chunks/44-d3545eedd5c75ef1.js","static/chunks/563-2b116a2500a97dba.js","static/chunks/7-20bcc985742a9ae1.js","static/chunks/787-c18af810af3433f6.js","static/chunks/195-2c0168eacab722d2.js","static/chunks/455-e1b41ac4946d2b6f.js","static/chunks/506-93f730bc149d0dce.js","static/chunks/65-572a80c5a7c83064.js","static/chunks/pages/documents-0e4216df99b9ec32.js"],"/guide":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/717-743b697a417dd5ee.js","static/chunks/665-88e20299084b9e73.js","static/chunks/787-c18af810af3433f6.js","static/chunks/986-49b865de7906320a.js","static/chunks/pages/guide-a411c554520b7109.js"],"/knowledge":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/pages/knowledge-905248d8dcb15453.js"],"/knowledge/file-detail":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/717-743b697a417dd5ee.js","static/chunks/883-506cbca959974997.js","static/chunks/665-88e20299084b9e73.js","static/chunks/44-d3545eedd5c75ef1.js","static/chunks/563-2b116a2500a97dba.js","static/chunks/7-20bcc985742a9ae1.js","static/chunks/289-12dfcb3abec1c4b4.js","static/chunks/787-c18af810af3433f6.js","static/chunks/506-93f730bc149d0dce.js","static/chunks/850-0f48354694fc6b3e.js","static/css/ad5a592c79d1448b.css","static/chunks/pages/knowledge/file-detail-fe69eb38d70adea0.js"],"/knowledge/files":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/717-743b697a417dd5ee.js","static/chunks/883-506cbca959974997.js","static/chunks/665-88e20299084b9e73.js","static/chunks/44-d3545eedd5c75ef1.js","static/chunks/563-2b116a2500a97dba.js","static/chunks/7-20bcc985742a9ae1.js","static/chunks/289-12dfcb3abec1c4b4.js","static/css/ad5a592c79d1448b.css","static/chunks/pages/knowledge/files-7b78e962e432d199.js"],"/knowledge/manage":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/717-743b697a417dd5ee.js","static/chunks/883-506cbca959974997.js","static/chunks/665-88e20299084b9e73.js","static/chunks/787-c18af810af3433f6.js","static/chunks/506-93f730bc149d0dce.js","static/chunks/788-961761f5858f9189.js","static/chunks/pages/knowledge/manage-7535b873ab505397.js"],"/models":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/717-743b697a417dd5ee.js","static/chunks/883-506cbca959974997.js","static/chunks/44-d3545eedd5c75ef1.js","static/chunks/195-2c0168eacab722d2.js","static/chunks/455-e1b41ac4946d2b6f.js","static/chunks/827-a6dc09e42833e6a3.js","static/chunks/pages/models-218c880823283110.js"],"/overview":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/880-64d8a15c524106d2.js","static/chunks/795-cd94e8d4e9768eb9.js","static/chunks/pages/overview-8713b5d37af0eeb3.js"],"/prompt":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/717-743b697a417dd5ee.js","static/chunks/883-506cbca959974997.js","static/chunks/44-d3545eedd5c75ef1.js","static/chunks/563-2b116a2500a97dba.js","static/chunks/195-2c0168eacab722d2.js","static/chunks/81-c3a7f04d96ea3f7d.js","static/chunks/pages/prompt-2c242e541f2e77a9.js"],"/settings":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/pages/settings-810eb1a6cf1a6b02.js"],"/system/logs":["static/chunks/webpack-4224e970a97a4a86.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/717-743b697a417dd5ee.js","static/chunks/883-506cbca959974997.js","static/chunks/665-88e20299084b9e73.js","static/chunks/44-d3545eedd5c75ef1.js","static/chunks/563-2b116a2500a97dba.js","static/chunks/7-20bcc985742a9ae1.js","static/chunks/289-12dfcb3abec1c4b4.js","static/chunks/195-2c0168eacab722d2.js","static/chunks/pages/system/logs-c5a8920c6506a7e8.js"]},ampFirstPages:[]},globalThis.__BUILD_MANIFEST.lowPriorityFiles=["/static/"+process.env.__NEXT_BUILD_ID+"/_buildManifest.js",,"/static/"+process.env.__NEXT_BUILD_ID+"/_ssgManifest.js"];
|