@customize-agent/server 4.12.24 → 4.12.25
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/2886.js +4 -4
- package/.next/server/chunks/5284.js +25 -21
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/api/assets/generated/preview.js.nft.json +1 -1
- package/.next/server/pages/api/assets/generated.js.nft.json +1 -1
- package/.next/server/pages/api/config/embedding/healthCheck.js.nft.json +1 -1
- package/.next/server/pages/api/documents/chapter/regenerate.js.nft.json +1 -1
- package/.next/server/pages/api/documents/export.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generate.js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated/[id].js.nft.json +1 -1
- package/.next/server/pages/api/documents/generated.js.nft.json +1 -1
- package/.next/server/pages/api/documents/templates.js.nft.json +1 -1
- package/.next/server/pages/api/jobs/[id].js.nft.json +1 -1
- package/.next/server/pages/api/jobs.js.nft.json +1 -1
- package/.next/server/pages/api/kb/categories.js.nft.json +1 -1
- package/.next/server/pages/api/kb/duplicates.js.nft.json +1 -1
- package/.next/server/pages/api/kb/evaluate.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/detail.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/open.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/preview-pdf-page.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/reindex.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/search.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files/tree.js.nft.json +1 -1
- package/.next/server/pages/api/kb/files.js.nft.json +1 -1
- package/.next/server/pages/api/kb/ignore.js.nft.json +1 -1
- package/.next/server/pages/api/kb/intelligence.js.nft.json +1 -1
- package/.next/server/pages/api/kb/operations.js.nft.json +1 -1
- package/.next/server/pages/api/kb/reindex.js.nft.json +1 -1
- package/.next/server/pages/api/kb/search.js.nft.json +1 -1
- package/.next/server/pages/api/kb/stats.js.nft.json +1 -1
- package/.next/server/pages/api/kb/tags.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload/complete.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload/progress.js.nft.json +1 -1
- package/.next/server/pages/api/kb/upload.js.nft.json +1 -1
- package/.next/server/pages/api/prompt.js.nft.json +1 -1
- package/.next/server/pages/api/template-references.js.nft.json +1 -1
- package/.next/server/pages/asset-library.html +1 -1
- package/.next/server/pages/document-roles.html +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/guide.html +1 -1
- package/.next/server/pages/index.html +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/overview.html +1 -1
- package/.next/server/pages/prompt.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages/template-references.html +1 -1
- package/.next/server/pages-manifest.json +28 -28
- package/.next/static/chunks/{224-790cf01fcf6820ee.js → 224-0415408fff1d1c8b.js} +1 -1
- package/.next/static/chunks/260-580088826d643423.js +1 -0
- package/.next/static/chunks/{289-42781fb699646699.js → 289-fc1b25371e004552.js} +1 -1
- package/.next/static/chunks/788-dca0d550ad6bd8b2.js +1 -0
- package/.next/static/chunks/pages/documents-66057ee3c8ffff6d.js +1 -0
- package/.next/static/chunks/pages/knowledge/files-45b40149a6f4a9d5.js +1 -0
- package/.next/static/chunks/pages/knowledge/manage-5b1b4d3804752f8b.js +1 -0
- package/.next/static/chunks/pages/prompt-edc2dfea09aaedc1.js +1 -0
- package/.next/static/chunks/pages/system/logs-ee67e2c93147dfc3.js +1 -0
- package/.next/static/{4bWB9a9su9FcfXYZlsPsU → hnkYgr5Vghpde4Cz5zL0I}/_buildManifest.js +1 -1
- package/package.json +2 -2
- package/.next/static/chunks/260-244c94eacd903620.js +0 -1
- package/.next/static/chunks/788-e98701da4d6ca319.js +0 -1
- package/.next/static/chunks/pages/documents-185ab225628d4705.js +0 -1
- package/.next/static/chunks/pages/knowledge/files-3ba329d8e6335929.js +0 -1
- package/.next/static/chunks/pages/knowledge/manage-558987c599dc4cd5.js +0 -1
- package/.next/static/chunks/pages/prompt-839287c514595765.js +0 -1
- package/.next/static/chunks/pages/system/logs-2e849bcdf371d791.js +0 -1
- /package/.next/static/{4bWB9a9su9FcfXYZlsPsU → hnkYgr5Vghpde4Cz5zL0I}/_ssgManifest.js +0 -0
package/.next/BUILD_ID
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
hnkYgr5Vghpde4Cz5zL0I
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"ampDevFiles": [],
|
|
7
7
|
"lowPriorityFiles": [
|
|
8
|
-
"static/
|
|
9
|
-
"static/
|
|
8
|
+
"static/hnkYgr5Vghpde4Cz5zL0I/_buildManifest.js",
|
|
9
|
+
"static/hnkYgr5Vghpde4Cz5zL0I/_ssgManifest.js"
|
|
10
10
|
],
|
|
11
11
|
"rootMainFiles": [],
|
|
12
12
|
"rootMainFilesTree": {},
|
|
@@ -40,9 +40,9 @@
|
|
|
40
40
|
"static/chunks/883-506cbca959974997.js",
|
|
41
41
|
"static/chunks/69-34d57b77fd2eed20.js",
|
|
42
42
|
"static/chunks/700-5d29b0475311f590.js",
|
|
43
|
-
"static/chunks/224-
|
|
43
|
+
"static/chunks/224-0415408fff1d1c8b.js",
|
|
44
44
|
"static/chunks/102-881dcc464f983c89.js",
|
|
45
|
-
"static/chunks/289-
|
|
45
|
+
"static/chunks/289-fc1b25371e004552.js",
|
|
46
46
|
"static/chunks/994-241f87efc61005b8.js",
|
|
47
47
|
"static/chunks/pages/asset-library-f6319fc04559e43d.js"
|
|
48
48
|
],
|
|
@@ -55,11 +55,11 @@
|
|
|
55
55
|
"static/chunks/69-34d57b77fd2eed20.js",
|
|
56
56
|
"static/chunks/700-5d29b0475311f590.js",
|
|
57
57
|
"static/chunks/44-d3545eedd5c75ef1.js",
|
|
58
|
-
"static/chunks/224-
|
|
58
|
+
"static/chunks/224-0415408fff1d1c8b.js",
|
|
59
59
|
"static/chunks/787-c18af810af3433f6.js",
|
|
60
60
|
"static/chunks/102-881dcc464f983c89.js",
|
|
61
61
|
"static/chunks/195-2c0168eacab722d2.js",
|
|
62
|
-
"static/chunks/289-
|
|
62
|
+
"static/chunks/289-fc1b25371e004552.js",
|
|
63
63
|
"static/chunks/455-e1b41ac4946d2b6f.js",
|
|
64
64
|
"static/chunks/pages/document-roles-4ccb2db16dc4b63c.js"
|
|
65
65
|
],
|
|
@@ -72,13 +72,13 @@
|
|
|
72
72
|
"static/chunks/69-34d57b77fd2eed20.js",
|
|
73
73
|
"static/chunks/700-5d29b0475311f590.js",
|
|
74
74
|
"static/chunks/44-d3545eedd5c75ef1.js",
|
|
75
|
-
"static/chunks/224-
|
|
75
|
+
"static/chunks/224-0415408fff1d1c8b.js",
|
|
76
76
|
"static/chunks/787-c18af810af3433f6.js",
|
|
77
77
|
"static/chunks/195-2c0168eacab722d2.js",
|
|
78
78
|
"static/chunks/455-e1b41ac4946d2b6f.js",
|
|
79
79
|
"static/chunks/506-93f730bc149d0dce.js",
|
|
80
80
|
"static/chunks/930-0436dcaa92fb41f6.js",
|
|
81
|
-
"static/chunks/pages/documents-
|
|
81
|
+
"static/chunks/pages/documents-66057ee3c8ffff6d.js"
|
|
82
82
|
],
|
|
83
83
|
"/guide": [
|
|
84
84
|
"static/chunks/webpack-4224e970a97a4a86.js",
|
|
@@ -105,10 +105,10 @@
|
|
|
105
105
|
"static/chunks/69-34d57b77fd2eed20.js",
|
|
106
106
|
"static/chunks/700-5d29b0475311f590.js",
|
|
107
107
|
"static/chunks/44-d3545eedd5c75ef1.js",
|
|
108
|
-
"static/chunks/224-
|
|
108
|
+
"static/chunks/224-0415408fff1d1c8b.js",
|
|
109
109
|
"static/chunks/787-c18af810af3433f6.js",
|
|
110
110
|
"static/chunks/102-881dcc464f983c89.js",
|
|
111
|
-
"static/chunks/289-
|
|
111
|
+
"static/chunks/289-fc1b25371e004552.js",
|
|
112
112
|
"static/chunks/506-93f730bc149d0dce.js",
|
|
113
113
|
"static/chunks/850-0f48354694fc6b3e.js",
|
|
114
114
|
"static/css/ad5a592c79d1448b.css",
|
|
@@ -123,11 +123,11 @@
|
|
|
123
123
|
"static/chunks/69-34d57b77fd2eed20.js",
|
|
124
124
|
"static/chunks/700-5d29b0475311f590.js",
|
|
125
125
|
"static/chunks/44-d3545eedd5c75ef1.js",
|
|
126
|
-
"static/chunks/224-
|
|
126
|
+
"static/chunks/224-0415408fff1d1c8b.js",
|
|
127
127
|
"static/chunks/102-881dcc464f983c89.js",
|
|
128
|
-
"static/chunks/289-
|
|
128
|
+
"static/chunks/289-fc1b25371e004552.js",
|
|
129
129
|
"static/css/ad5a592c79d1448b.css",
|
|
130
|
-
"static/chunks/pages/knowledge/files-
|
|
130
|
+
"static/chunks/pages/knowledge/files-45b40149a6f4a9d5.js"
|
|
131
131
|
],
|
|
132
132
|
"/knowledge/manage": [
|
|
133
133
|
"static/chunks/webpack-4224e970a97a4a86.js",
|
|
@@ -138,8 +138,8 @@
|
|
|
138
138
|
"static/chunks/69-34d57b77fd2eed20.js",
|
|
139
139
|
"static/chunks/787-c18af810af3433f6.js",
|
|
140
140
|
"static/chunks/506-93f730bc149d0dce.js",
|
|
141
|
-
"static/chunks/788-
|
|
142
|
-
"static/chunks/pages/knowledge/manage-
|
|
141
|
+
"static/chunks/788-dca0d550ad6bd8b2.js",
|
|
142
|
+
"static/chunks/pages/knowledge/manage-5b1b4d3804752f8b.js"
|
|
143
143
|
],
|
|
144
144
|
"/models": [
|
|
145
145
|
"static/chunks/webpack-4224e970a97a4a86.js",
|
|
@@ -170,8 +170,8 @@
|
|
|
170
170
|
"static/chunks/700-5d29b0475311f590.js",
|
|
171
171
|
"static/chunks/44-d3545eedd5c75ef1.js",
|
|
172
172
|
"static/chunks/195-2c0168eacab722d2.js",
|
|
173
|
-
"static/chunks/260-
|
|
174
|
-
"static/chunks/pages/prompt-
|
|
173
|
+
"static/chunks/260-580088826d643423.js",
|
|
174
|
+
"static/chunks/pages/prompt-edc2dfea09aaedc1.js"
|
|
175
175
|
],
|
|
176
176
|
"/settings": [
|
|
177
177
|
"static/chunks/webpack-4224e970a97a4a86.js",
|
|
@@ -188,11 +188,11 @@
|
|
|
188
188
|
"static/chunks/69-34d57b77fd2eed20.js",
|
|
189
189
|
"static/chunks/700-5d29b0475311f590.js",
|
|
190
190
|
"static/chunks/44-d3545eedd5c75ef1.js",
|
|
191
|
-
"static/chunks/224-
|
|
191
|
+
"static/chunks/224-0415408fff1d1c8b.js",
|
|
192
192
|
"static/chunks/102-881dcc464f983c89.js",
|
|
193
193
|
"static/chunks/195-2c0168eacab722d2.js",
|
|
194
|
-
"static/chunks/289-
|
|
195
|
-
"static/chunks/pages/system/logs-
|
|
194
|
+
"static/chunks/289-fc1b25371e004552.js",
|
|
195
|
+
"static/chunks/pages/system/logs-ee67e2c93147dfc3.js"
|
|
196
196
|
],
|
|
197
197
|
"/template-references": [
|
|
198
198
|
"static/chunks/webpack-4224e970a97a4a86.js",
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"routes": {},
|
|
4
4
|
"dynamicRoutes": {},
|
|
5
5
|
"preview": {
|
|
6
|
-
"previewModeId": "
|
|
7
|
-
"previewModeSigningKey": "
|
|
8
|
-
"previewModeEncryptionKey": "
|
|
6
|
+
"previewModeId": "c128c61b6f369df438244e8975846598",
|
|
7
|
+
"previewModeSigningKey": "6cf9b6927fc8b9498fb46858f6afc2934278208d2ba5f0dc33d0d1854341dd25",
|
|
8
|
+
"previewModeEncryptionKey": "4b7d755924563004c870b313933096bf3c355b5596b9d439e8152e2cecd78c32"
|
|
9
9
|
},
|
|
10
10
|
"notFoundRoutes": []
|
|
11
11
|
}
|
|
@@ -39,7 +39,7 @@ ${b}
|
|
|
39
39
|
请输出需要新增的小节;没有需要新增的章节不要出现在 additions 中,整体无新增则输出空数组。
|
|
40
40
|
|
|
41
41
|
JSON 格式:{"additions":[{"chapterTitle":"章标题(必须与上方章节名一致)","sections":["新增小节标题"]}]}`,{maxTokens:2e3,temperature:.1,signal:a.signal}),d=[],e=0;for(let b of c?.additions||[]){if(!b?.chapterTitle||!Array.isArray(b.sections))continue;let c=function(a,b){let c=(0,a4.nz)(b);if(!c)return -1;let d=a.findIndex(a=>(0,t.GQ)(a.title)===c||(0,a4.nz)(a.title)===c);return d>=0?d:a.findIndex(a=>{let b=(0,a4.nz)(a.title);return b.length>=4&&(b.includes(c)||c.includes(b))})}(a.chapters,b.chapterTitle);if(c<0)continue;let f=a.chapters[c],g=[];for(let a of b.sections){let b=(0,a4.EN)((0,a4.nz)(String(a||"")));!(!b||(0,a4.tQ)(b,f.title)||(0,t.mq)(b)||(f.sections||[]).some(a=>(0,a4.kw)(a,b)))&&(g.some(a=>(0,a4.kw)(a,b))||g.push(b))}let h=Math.min(2,g.length,Math.max(0,8-e)),i=g.slice(0,h);if(0!==i.length&&(e+=i.length,d.push({chapterTitle:f.title,sections:i}),e>=8))break}return d}let a6=["计划总工期为300日历天","合同工期为300日历天","施工总工期为300日历天","招标控制价为6000万元","合同估算价为6000万元","投资估算为6000万元","总建筑面积为28000平方米","总用地面积为15000平方米","总占地面积为15000平方米","建设规模为28000平方米"],a7=["专项应急演练4次","每日巡查2次","每周检查1次","每月安全培训2次","监理旁站24小时","三级安全教育培训20学时"];function a8(a,b){let c=Math.min(a.length,b.length),d=0;for(let e=0;e<c;e+=1)d+=a[e]*b[e];return d}async function a9(){let a=(0,S.VN)(),[b,c]=await Promise.all([a.embedDocuments([...a6]),a.embedDocuments([...a7])]);if(b.length!==a6.length||c.length!==a7.length)throw Error(`本地语义模型锚点嵌入数量不一致:范围锚点 ${b.length}/${a6.length},计数锚点 ${c.length}/${a7.length}`);return{async batchClassify(d){if(0===d.length)return[];let e=await a.embedDocuments(d);return d.map((a,d)=>{let f=e[d];if(!f||0===f.length)return"other";let g=Math.max(...b.map(a=>a8(f,a))),h=Math.max(...c.map(a=>a8(f,a)));return h>=.62&&h>g?"other":g>=.6?"scope":"other"})}}}let ba={factuality:["本章关键数据以招标文件、工程量清单与施工图纸为依据","正文引用的工期、面积、金额与绑定资料口径一致","施工内容与项目实际工程范围对应而非通用模板描述"],structure:["内容按施工准备、工艺流程、施工方法、验收标准的顺序组织","章节内有清晰的工作阶段划分与工序步骤","段落之间有先后衔接与层次递进关系"],depth:["包含关键工序控制点、隐蔽工程验收与检验批划分","关键技术环节给出工艺参数与质量标准","针对本项目特点展开专业分析而非通用做法罗列"],executable:["明确责任主体、检查频次与记录台账要求","给出可执行的资源进场、调配与投入安排","措施可落地执行并配验收复核机制"],specificity:["结合本项目建设地点、工程规模与计划工期展开","引用本项目工程量数据支撑施工部署","措施针对本项目工程特点制定而非通用套话"],consistency:["章节间工期、质量、安全数据口径一致","本章内容与总进度计划、质量目标相互呼应","章节内前后表述无矛盾冲突"]},bb={schedule:["采用关键线路法编制进度计划,明确关键节点与动态纠偏措施","计划节点与资源投入相匹配,含穿插施工与资源保障安排"],quality:["材料进场验收与复验、隐蔽工程验收、质量问题整改与复验闭环","质量资料归档与检验批验收记录"],safety:["风险源辨识、临电消防管理、安全检查与隐患整改闭环","应急预案、应急物资与演练安排"],resource:["劳动力、材料、设备进场计划、验收、保管与调配","资源投入与进度节点相匹配"],construction:["施工准备、工艺流程、工序控制点与验收标准交底","施工方法与工艺参数明确具体"]},bc=["材料进场验收、工序控制点、隐蔽工程验收记录","检验批划分、技术交底、整改复查闭环","引用本项目工程量清单与设计图纸参数"],bd=["自检互检交接检、整改复查、资料归档","风险辨识、专项交底、现场检查、隐患整改、复查销项","计划分解、偏差识别、资源纠偏、节点复核"];function be(a,b){let c=0;for(let d of a)for(let a of b){let b=function(a,b){let c=Math.min(a.length,b.length),d=0;for(let e=0;e<c;e+=1)d+=a[e]*b[e];return d}(d,a);b>c&&(c=b)}return c}async function bf(){let a=(0,S.VN)(),b=[...Object.keys(ba).map(a=>[`dimension:${a}`,ba[a]]),...Object.keys(bb).map(a=>[`need:${a}`,bb[a]]),["concrete",[...bc]],["closedLoop",[...bd]]],c=new Map;for(let[d,e]of b){let b=await a.embedDocuments(e);if(b.length!==e.length)throw Error(`本地语义模型锚点嵌入数量不一致:${d} ${b.length}/${e.length}`);c.set(d,b)}let d=new Map,e=async b=>{let c=d.get(b);if(void 0!==c)return c;let e=function(a){let b=a.split(/\n+/u).map(a=>a.trim()).filter(Boolean),c=[],d="";for(let a of b)d&&d.length+a.length+1>400?(c.push(d),d=a):d=d?`${d}
|
|
42
|
-
${a}`:a;if(d&&c.push(d),c.length<=20)return c;let e=[c[0]],f=(c.length-2)/18;for(let a=1;a<19;a+=1)e.push(c[Math.min(c.length-2,Math.round(1+(a-1)*f))]);return e.push(c[c.length-1]),e}(b),f=await a.embedDocuments(e);return d.set(b,f),f};return{async analyze(a){if(!a.trim())return;let b=await e(a);if(0!==b.length)return{dimensions:function(a,b){let c={};for(let d of Object.keys(ba)){let e=b.get(`dimension:${d}`)||[];c[d]=be(a,e)>=S.Eh}return c}(b,c),contentNeeds:function(a,b){let c={};for(let d of Object.keys(bb)){let e=b.get(`need:${d}`)||[];c[d]=be(a,e)>=S.Eh}return c}(b,c),concrete:be(b,c.get("concrete")||[])>=S.Eh,closedLoop:be(b,c.get("closedLoop")||[])>=S.Eh}}}}let bg=[{pattern:/概况|总体|理解|说明|编制/u,goal:"以项目资料已确认的事实卡片展开工程概况与总体理解,不得空泛概述",mustCover:["工程名称、建设地点、建设规模、计划工期、质量标准等资料已确认事实","现场条件与招标范围边界","编制依据与适用范围"]},{pattern:/主要施工内容/u,goal:"按专业工程展开施工概况、施工流程、施工方法三段式卡片,落到工程量与工艺参数",mustCover:["资料识别的专业工程(不少于5个)","每个专业工程的施工概况/施工流程/施工方法","工程量、材料设备规格、检测验收与资料闭环"]},{pattern:/主要分部分项工程施工方案|主要施工方法/u,goal:"按分项工程方案展开施工概况、工艺流程、施工方法三段式,落到工艺参数与工序顺序",mustCover:["资料明确的专业工程范围(逐项展开分项工程方案)","每个分项方案的施工概况/工艺流程/施工方法","每个分项方案不少于4个工艺参数与至少1处3环节以上工序顺序表达","工艺参数来自绑定材料或行业通用规范值,不得编造"]},{pattern:/重点|难点/u,goal:"识别项目重点难点并给出针对性对策,每项落到责任岗位与验收节点",mustCover:["重点难点成因与影响范围","对应施工内容与专项措施","责任岗位、检查频次、整改闭环"]},{pattern:/部署|总体|流水|顺序/u,goal:"明确施工部署逻辑、流水段划分与资源调配机制",mustCover:["施工区段与流水划分","各阶段施工顺序与穿插关系","资源动态调配机制"]},{pattern:/进度|工期/u,goal:"围绕总工期与关键节点展开进度保障",mustCover:["总进度计划与关键节点","周/日计划分解","进度偏差识别与纠偏措施"]},{pattern:/质量/u,goal:"覆盖材料验收、过程控制、隐蔽验收、整改复验的质量闭环",mustCover:["质量目标与验收依据","三检制度与样板引路","隐蔽工程验收与材料复试","质量通病防治与闭环整改","保修与缺陷责任期承诺"]},{pattern:/安全|危大|风险/u,goal:"覆盖风险识别、危大工程专项方案、检查整改与应急响应",mustCover:["危险源辨识与风险分级","危大工程清单与专项方案","安全交底与隐患排查闭环"]},{pattern:/资源|材料|设备|劳动力|人材机/u,goal:"说明资源配置依据、进场验收与保管调配",mustCover:["机械设备投入计划","分阶段劳动力计划","材料进场计划与验收"]},{pattern:/文明|绿色|环保|扬尘|噪声/u,goal:"覆盖扬尘噪声管控、四节一环保与智慧监测",mustCover:["扬尘噪声分时段管控","四节一环保措施","监测预警与台账"]},{pattern:/应急|预案/u,goal:"覆盖应急组织、物资储备与专项预案",mustCover:["应急组织架构","应急物资储备","专项预案与演练计划"]},{pattern:/竣工|验收|移交|保修/u,goal:"覆盖竣工清理、验收移交与保修响应",mustCover:["竣工清理与垃圾外运","缺陷修补与复查销项","验收移交与保修响应"]},{pattern:/工资|劳务|实名/u,goal:"覆盖劳务实名制与农民工工资保障闭环",mustCover:["劳务实名制管理","工资专用账户与银行代发","考勤与工资支付台账"]}];var bh=c(8667);async function bi(a){(0,A.Te)(a.signal);let b=[];if(0===a.scopedFilePaths.length)return b;let c=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.chapter.title),d=(c?1.6:1)*(/[、,,与和及]/.test(a.chapter.title)?1.4:1),e=Math.ceil((a.highRisk?18:10)*d),f=Math.ceil((a.highRisk?24:14)*(c?1.4:1)),g=Math.ceil((a.highRisk?72:42)*d),h=Math.ceil((a.highRisk?72e3:42e3)*d),i=(a.requiredNeeds||[]).slice(0,8),j=(function(a,b=[]){let c=a.sections||[],d=[...a.requiredFacts,...b],e=(0,B.Cr)(c,a=>(0,B.Ox)(a),{maxItems:16,maxChars:1200},"retrieval-sections").selected,f=(0,B.Cr)(d,a=>(0,B.Ox)(a),{maxItems:16,maxChars:1200},"retrieval-facts").selected,g=/[、,,与和及]/.test(a.title),h=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.title),i=/进度|工期|节点/u.test(a.title)?["合同工期","计划工期","日历天","开工","竣工","关键线路","进度计划","施工进度"]:/质量|验收/u.test(a.title)?["质量标准","验收规范","检验批","复验","合格","质量保证","隐蔽验收"]:/安全|危大|风险/u.test(a.title)?["安全措施","风险源","危大工程","应急","检查整改","安全防护","应急预案","基坑支护","基坑开挖","基坑底标高","坡率","支护形式","降水","开挖深度","高支模","专项方案"]:h?["工程量清单","项目特征","材料设备","规格型号","数量单位","劳动力","机械设备","进场计划","资源保障","主要材料","施工机具","材料供应","设备配置"]:/施工|方案|方法|技术|工艺/u.test(a.title)?["施工方法","工艺流程","技术标准","构造做法","控制要点","施工准备"]:["工程范围","施工方法","控制要点","验收要求"],j=g?[...i,...a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4)]:i,k=[...new Set([a.title,...e,...f,...j].flatMap(a=>a.split(/[\s、,,。;;::()()《》【】\-/]+/u)).map(a=>a.trim()).filter(a=>a.length>=2))],l=(0,B.Cr)(k,a=>(0,B.Ox)(a),{maxItems:36,maxChars:1200},"retrieval-tokens").selected,m=g?a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4).map(a=>`${a} ${e.slice(0,6).join(" ")} ${f.slice(0,4).join(" ")}`.trim()):[];return[...new Set([`${a.title} ${e.join(" ")}`.trim(),...f.map(b=>`${a.title} ${b}`.trim()),...e.map(b=>`${a.title} ${b} ${f.slice(0,6).join(" ")}`.trim()),`${a.title} ${j.join(" ")}`.trim(),...m,l.join(" ")].filter(Boolean))]})(a.chapter,a.requiredNeeds).slice(0,e),k=[...i.map(b=>`${a.chapter.title} ${b} ${(a.chapter.sections||[]).join(" ")}`.trim()).filter(a=>!j.includes(a)).map(a=>({text:a,boost:2,source:"required-fact-evidence"})),...j.map(a=>({text:a,boost:2.4,source:"deep-retrieval"}))];return b.push(...(await (0,A.l$)(k,async b=>{var c;(0,A.Te)(a.signal);let d=await a.manager.search(a.projectRoot,b.text,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:f,weights:{keyword:.62,vector:.32,rewrite:.9,hybridBonus:.28},generationMode:!0,disableReranker:!0});return(c={chapter:a.chapter,results:d.results.filter(b=>a.scopedFilePaths.includes(b.filePath)),fileRoleByPath:a.fileRoleByPath,fileProcessingByPath:a.fileProcessingByPath,boost:b.boost,source:b.source}).results.map(a=>{let b=c.fileProcessingByPath.get(a.filePath);return{chapterId:c.chapter.id,filePath:a.filePath,score:a.score+c.boost+("table"===b?3:"structured_data"===b?2.6:3.2*("bill_of_quantities"===b)),content:a.content,roleId:c.fileRoleByPath.get(a.filePath),processingType:b,sectionTitle:a.sectionTitle,source:c.source}})},{kind:"deepRetrieval",highRisk:a.highRisk})).flat()),[...(0,s.QR)(b.filter(a=>"required-fact-evidence"===a.source),{maxItems:Math.max(6,3*i.length),maxChars:18e3,preservePinned:!0}),...(0,s.QR)(b.filter(a=>"required-fact-evidence"!==a.source),{maxItems:g,maxChars:h,preservePinned:!0})]}var bj=c(80439),bk=c(46482),bl=c(79227),bm=c(2773),bn=c(92817),bo=c(3063);function bp(a){return(0,t.GQ)(a.replace(/\*+/gu,"")).replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分、..\s-]*/u,"").replace(/^\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^[-—–]\s*/u,"").replace(/[<>]/gu,"").replace(/[::。;;,.,]+$/gu,"").replace(/\s*[((][^()()]{0,40}[a-zA-Z]{3,}[^()()]{0,40}[))]\s*$/u,"").trim()}function bq(a,b){let c=bp(a);return!!(c.length<4||c.length>60||c===bp(b)||/^(?:目录|章节|大纲|要求|说明|注意|输出|格式|示例|占位|提示|概述|总体要求)$/u.test(c)||/如需|应由|大模型|提示词|上下文|OUTLINE|JSON|小节标题/u.test(c)||/(.)\1/u.test(c))}function br(a,b){let c=a=>{let b=new Set;for(let c=0;c<a.length-1;c+=1)b.add(a.slice(c,c+2));return b},d=c(b),e=[...c(a)];return 0===e.length?0:e.filter(a=>d.has(a)).length/e.length}function bs(a){return/工期|进度|节点|计划|纠偏|预警/u.test(a)?"工期进度":/质量|验收|三检|样板|隐蔽|复试|实测|通病/u.test(a)?"质量验收":/安全|危大|风险|隐患|应急|临边|洞口|消防|临电/u.test(a)?"安全风险":/文明|扬尘|噪声|绿色|废水|垃圾|环保|智慧/u.test(a)?"文明绿色":/劳务|工资|实名|银行|考勤|人员|岗位|组织|职责/u.test(a)?"组织劳务":/资源|材料|设备|机械|人材机|调配/u.test(a)?"资源保障":/施工|工艺|流程|顺序|穿插|部署|区段|流水/u.test(a)?"施工组织":"综合管理"}function bt(a){return/^(?:确保\s*)?[人材机](?:员|力|料|械|工)?\s*的保障体系与措施$/u.test(a)}function bu(a){let b=new Set,c=[];for(let d of a.sections||[]){let e=bp(d);if(!e||bq(e,a.title))continue;let f=e.replace(/\s+/gu,"");b.has(f)||(b.add(f),c.push(e))}return c}function bv(a,b){let c=a.replace(/\s+/gu,""),d=b.replace(/\s+/gu,"");return c===d||c.includes(d)||d.includes(c)}function bw(a,b,c){let d=new Map,e=[];for(let b of a){if(bt(b)){e.push(b);continue}let a=bs(b),c=d.get(a)||[];c.push(b),d.set(a,c)}let f=a=>{let b=[];for(let c of a){let a=b[b.length-1],d=a?a.sources[a.sources.length-1]:"";!(0,bo.tZ)(c)&&!bt(c)&&a&&(bv(c,d)||br(c,d)>=.75)?(a.sources.push(c),c.length>a.title.length&&(a.title=c)):b.push({title:c,sources:[c]})}return b},g=e.map(a=>({title:a,subPoints:[{title:a,sources:[a]}],facts:[],targetWords:1200}));for(let a of d.values()){let c=f(a);for(let a=0;a<c.length;a+=6){let d=c.slice(a,a+6);g.push({title:d[0].title||b,subPoints:d,facts:[],targetWords:1200})}}return bx(g,c),{blocks:g,coveredSections:a.slice(),fallbackSections:[],llmPlanned:!1}}function bx(a,b){for(let c=0;c<2&&a.length>0&&!(4e3>=Math.floor(b/a.length));c+=1){let b=a.reduce((a,b)=>b.subPoints.length>a.subPoints.length?b:a,a[0]);if(b.subPoints.length<2)break;let c=Math.ceil(b.subPoints.length/2);a.push({title:b.subPoints[c].title||b.title,subPoints:b.subPoints.slice(c),facts:[],targetWords:0}),b.subPoints=b.subPoints.slice(0,c)}let c=a.reduce((a,b)=>a+b.subPoints.length,0)||a.length;for(let d of a){let e=Math.floor(.75*Math.max(1200,Math.floor(b/Math.max(1,a.length)))+.25*b*(d.subPoints.length/c));d.targetWords=Math.min(4e3,Math.max(1200,e))}}let by={type:"object",required:["title","subPoints"],properties:{title:{type:"string",required:!0,minLength:2,maxLength:80},subPoints:{type:"array",required:!0,minItems:1,maxItems:6,items:{type:"object",required:!0,properties:{title:{type:"string",required:!0,minLength:2,maxLength:60},sources:{type:"array",required:!0,maxItems:8,items:{type:"string",maxLength:120}}}}},facts:{type:"array",maxItems:2,items:{type:"string",maxLength:100}}}};async function bz(a){let b=bu(a.chapter);if(b.length<=8)return;let c=await (0,S.Mv)(b,b,a.semanticEmbedder),d=function(a,b){let c=new Map,d=[];for(let b of a){if(bt(b)){d.push([b]);continue}let a=bs(b),e=c.get(a)||[];e.push(b),c.set(a,e)}let e=[];for(let a of c.values()){let c=[];for(let d of a){let a,e=-1;for(let f of c){if(f.length>=8)continue;let c=Math.max(...f.map(a=>b(d,a)));c>e&&(e=c,a=f)}a&&e>=.5?a.push(d):c.push([d])}e.push(...c)}return[...d,...e]}(b,c),e=Math.max(800,Math.floor(a.targetWords/Math.max(1,d.length))),f=async(b,c)=>{let d=function(a,b){let c=a.flatMap(a=>[a.slice(0,4),a.slice(-4)]).filter(a=>a.length>=2);return b.map(a=>({item:a,score:c.reduce((b,c)=>b+ +!!a.content.includes(c),0)})).sort((a,b)=>b.score-a.score).map(a=>a.item)}(b,a.evidence),f=(0,s.ks)((0,s.QO)(a.chapter,d)),g=["你是专业施工组织设计文档结构规划专家。","任务:把一个主题块内的输入细目重排为 H4 要点结构;语义相近、内容连贯的细目必须合并进同一个 H4 要点。","硬性规则:",`1. 合并决策:语义相近、内容连贯的输入细目必须合并进同一个 H4 要点;H4 要点标题必须重写为更概括、更专业的标题(16 字以内),不得直接照抄任一输入细目标题;每个 H4 要点的 sources 字段逐字列出它所覆盖的全部输入细目标题,不得改写、不得遗漏、不得重复映射。例外:含评标必查关键词的输入细目(${bo.Dr.join("/")}等)必须保留为独立 H4 要点,不得与其他细目合并吞并,其 H4 标题必须保留该关键词。`,`2. 合并依据:优先参考项目图谱与文档蓝图,把对应同一套工程对象/管理闭环的细目合并(如「三检制度」「样板引路」「隐蔽工程验收」同属质量管控闭环);不得把内容无关的细目强行合并。`,`3. 主题块标题必须具体、专业、能承载其要点(16 字以内),不得使用"目标与范围""资料依据""总体要求"等通用占位标题。`,`4. 数量约束:本主题块 1~6 个 H4 要点。`,"5. facts 字段:从绑定资料中摘取与本主题块直接相关的关键事实短句(每条 ≤60 字,0~2 条)。","6. 只返回 JSON,不要输出任何其他文字。",'JSON 格式:{"title":"主题块标题","subPoints":[{"title":"H4要点标题","sources":["输入细目原文"]}],"facts":["事实短句"]}'],h=[`文档模板:${a.template.name}`,`章节标题:${a.chapter.title}`,a.requirement?`用户要求:${a.requirement}`:"",a.graphContext?`项目图谱(本章定向):${a.graphContext}`:"",a.blueprintContext?`文档蓝图(本章任务卡与实施方案):${a.blueprintContext}`:"",a.projectContext?`上下文:${a.projectContext}`:"",a.roleContext?`角色要求:${a.roleContext}`:"",f?`真实绑定资料:${f}`:"",`输入细目清单(本主题块共 ${b.length} 条,必须全部覆盖,允许合并进同一 H4):${b.join("、")}`,`请输出 1 个主题块,1~6 个 H4 要点,确保所有输入细目被覆盖。`],i={},j=await (0,ad.bb)(g.join("\n"),h.filter(Boolean).join("\n\n"),{maxTokens:4096,temperature:.1,signal:a.signal,diagnostics:a.diagnostics,schema:by,disableThinkingBoost:!0,outFailure:i});if(!j){let d=i.value?`第 ${c+1} 块未通过校验(${i.value})`:`第 ${c+1} 块 LLM 无响应`;return{blocks:bw(b,a.chapter.title,e).blocks,llmPlanned:!1,failure:d}}let k=function(a,b,c){let d=bp(a.title||"");if(!d||bq(d,c))return;let e=(a.subPoints||[]).map(a=>{let c=Array.isArray(a.sources)&&a.sources.length>0?a.sources:a.source?[a.source]:[],d=[];for(let a of c){let c=bp(a||"");!(c.length<4)&&b.some(a=>bv(c,a))&&(d.some(a=>bv(a,c))||d.push(c))}let e=bp(a.title||"");return!e||e.length<4?d.length>0?{title:d[0],sources:d}:void 0:{title:e&&!d.some(a=>bv(e,a))?e:d[0]||e,sources:d}}).filter(a=>!!a);if(0!==e.length)return{title:d,subPoints:e,facts:(a.facts||[]).map(a=>a.trim()).filter(Boolean),targetWords:1200}}(j,b,a.chapter.title);return k?{blocks:[k],llmPlanned:!0}:{blocks:bw(b,a.chapter.title,e).blocks,llmPlanned:!1,failure:`第 ${c+1} 块 LLM 结构无效(title/subPoints 缺失或未对齐)`}},g=await Promise.all(d.map((a,b)=>f(a,b))),h=g.flatMap(a=>a.blocks),i=g.map(a=>a.failure).filter(Boolean);return 0===h.length?{blocks:[],coveredSections:[],fallbackSections:[],llmPlanned:!1,llmFailure:i.join(";")||"未知原因"}:(bx(h,a.targetWords),{...function(a){let b=[],c=a.blocks.map(a=>({...a,subPoints:a.subPoints.map(a=>{let c=a.sources.filter(a=>!b.some(b=>bv(b,a))&&(b.push(a),!0));return{...a,sources:c}}).filter(a=>a.sources.length>0)}));return{...a,blocks:c}}(function(a,b){let c=[],d=[],e=b.map(a=>({...a,subPoints:[...a.subPoints]}));for(let b of a){let a,f;if(e.some(a=>(function(a,b){return!!bv(b.title,a)||b.subPoints.some(b=>b.sources.some(b=>bv(b,a))||bv(b.title,a))})(b,a))){c.push(b);continue}let g=-1;for(let c of e)for(let d of c.subPoints){let e=Math.max(br(b,d.title),...d.sources.map(a=>br(b,a)));e>g&&(g=e,a=d,f=c)}if((0,bo.tZ)(b)||bt(b)){let a=f||e[e.length-1];if(a){a.subPoints.push({title:b,sources:[b]}),d.push(b);continue}}a&&g>=.5?(a.sources.push(b),d.push(b)):f?(f.subPoints.push({title:b,sources:[b]}),d.push(b)):c.push(b)}return{blocks:e,coveredSections:c,fallbackSections:d,llmPlanned:b.length>0}}(b,h)),llmPlanned:g.some(a=>a.llmPlanned),llmFailure:i.length>0?`块级降级(${i.join(";")})`:void 0})}async function bA(a){let b=await bz(a).catch(a=>({blocks:[],coveredSections:[],fallbackSections:[],llmPlanned:!1,llmFailure:a instanceof Error?a.message:String(a)}))??{blocks:[],coveredSections:[],fallbackSections:[],llmPlanned:!1,llmFailure:"输入细目 ≤8 条,跳过 LLM 规划(设计行为)"};return b.blocks.length>0?b:{...bw(bu(a.chapter),a.chapter.title,a.targetWords),llmFailure:b.llmFailure||"LLM 调用异常"}}async function bB(a,b){let c=(0,v.r4)(a.content);if(0===c.length)return[];let d=[];for(let e of c){let c=e.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),f=a.content.match(RegExp(`^###\\s+(?:\\d+(?:\\.\\d+)*[、..\\s]*\\s+)?${c}\\s*\\n([\\s\\S]*?)(?=^#{2,3}\\s+|$)`,"mu")),g=f?.[1]||"",h=await (0,bn.AI)(e,(0,bn.Ym)(e,a.chapter,a.evidence),b),i=(0,bn.uQ)(e,g,h);i&&d.push(`${e}:${i}`)}return d}function bC(a,b){let c=a.trim();if(!c)return[];let d=Math.max(1e3,Math.ceil(b)),e=[],f=0;for(;f<c.length;){let a=Math.min(f+d,c.length),b=c.lastIndexOf("\n\n",a);(b<=f||a-b>.25*d)&&(b=c.lastIndexOf("\n",a)),(b<=f||a-b>.2*d)&&(b=a),e.push(c.slice(f,b).trim()),f=b}return e.filter(Boolean)}function bD(a){return"string"==typeof a?a:a&&"object"==typeof a&&"message"in a?String(a.message):JSON.stringify(a)}function bE(a){let b=Number(process.env[a]);return Number.isFinite(b)&&b>0?Math.ceil(b):0}async function bF(a){var b;(0,A.Te)(a.signal);let c=a.chapters.map(a=>{let b=a.content.replace(/#{1,6}\s+/gu,"").replace(/\*\*/gu,"").replace(/\|/gu," ").replace(/[\n\r]+/gu," ").trim(),c=function(a){let b=[];for(let c of[/(?:总建筑面积|建设规模|总用地面积|总占地面积)[^\n。;;]{0,18}\d+(?:[.,]\d+)?\s*万?\s*(?:㎡|m²|m2|平方米)/gu,/(?:合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价|工程总投资|总投资|工程造价)[^\n。;;]{0,18}\d+(?:[.,]\d+)?\s*万?\s*(?:万元|亿元|元)/gu,/(?:计划工期|合同工期|总工期|施工周期)[^\n。;;]{0,18}\d+\s*(?:日历天|天|个月|月)/gu,/(?:质量标准|质量目标)[^\n。;;]{0,26}/gu,/(?:找平层|抹灰层|防水层|保温层|结合层|垫层|面层|粘结层)[^\n。;;]{0,24}\d+:\d+(?:\.\d+)?/gu]){let d=[...new Set(a.match(c)||[])].slice(0,4);b.push(...d)}return[...new Set(b.map(a=>a.replace(/\s+/gu," ").trim()).filter(Boolean))].join(";")}(a.content);return`章节:${a.title}
|
|
42
|
+
${a}`:a;if(d&&c.push(d),c.length<=20)return c;let e=[c[0]],f=(c.length-2)/18;for(let a=1;a<19;a+=1)e.push(c[Math.min(c.length-2,Math.round(1+(a-1)*f))]);return e.push(c[c.length-1]),e}(b),f=await a.embedDocuments(e);return d.set(b,f),f};return{async analyze(a){if(!a.trim())return;let b=await e(a);if(0!==b.length)return{dimensions:function(a,b){let c={};for(let d of Object.keys(ba)){let e=b.get(`dimension:${d}`)||[];c[d]=be(a,e)>=S.Eh}return c}(b,c),contentNeeds:function(a,b){let c={};for(let d of Object.keys(bb)){let e=b.get(`need:${d}`)||[];c[d]=be(a,e)>=S.Eh}return c}(b,c),concrete:be(b,c.get("concrete")||[])>=S.Eh,closedLoop:be(b,c.get("closedLoop")||[])>=S.Eh}}}}let bg=[{pattern:/概况|总体|理解|说明|编制/u,goal:"以项目资料已确认的事实卡片展开工程概况与总体理解,不得空泛概述",mustCover:["工程名称、建设地点、建设规模、计划工期、质量标准等资料已确认事实","现场条件与招标范围边界","编制依据与适用范围"]},{pattern:/主要施工内容/u,goal:"按专业工程展开施工概况、施工流程、施工方法三段式卡片,落到工程量与工艺参数",mustCover:["资料识别的专业工程(不少于5个)","每个专业工程的施工概况/施工流程/施工方法","工程量、材料设备规格、检测验收与资料闭环"]},{pattern:/主要分部分项工程施工方案|主要施工方法/u,goal:"按分项工程方案展开施工概况、工艺流程、施工方法三段式,落到工艺参数与工序顺序",mustCover:["资料明确的专业工程范围(逐项展开分项工程方案)","每个分项方案的施工概况/工艺流程/施工方法","每个分项方案不少于4个工艺参数与至少1处3环节以上工序顺序表达","工艺参数来自绑定材料或行业通用规范值,不得编造"]},{pattern:/重点|难点/u,goal:"识别项目重点难点并给出针对性对策,每项落到责任岗位与验收节点",mustCover:["重点难点成因与影响范围","对应施工内容与专项措施","责任岗位、检查频次、整改闭环"]},{pattern:/部署|总体|流水|顺序/u,goal:"明确施工部署逻辑、流水段划分与资源调配机制",mustCover:["施工区段与流水划分","各阶段施工顺序与穿插关系","资源动态调配机制"]},{pattern:/进度|工期/u,goal:"围绕总工期与关键节点展开进度保障",mustCover:["总进度计划与关键节点","周/日计划分解","进度偏差识别与纠偏措施"]},{pattern:/质量/u,goal:"覆盖材料验收、过程控制、隐蔽验收、整改复验的质量闭环",mustCover:["质量目标与验收依据","三检制度与样板引路","隐蔽工程验收与材料复试","质量通病防治与闭环整改","保修与缺陷责任期承诺"]},{pattern:/安全|危大|风险/u,goal:"覆盖风险识别、危大工程专项方案、检查整改与应急响应",mustCover:["危险源辨识与风险分级","危大工程清单与专项方案","安全交底与隐患排查闭环"]},{pattern:/资源|材料|设备|劳动力|人材机/u,goal:"说明资源配置依据、进场验收与保管调配",mustCover:["机械设备投入计划","分阶段劳动力计划","材料进场计划与验收"]},{pattern:/文明|绿色|环保|扬尘|噪声/u,goal:"覆盖扬尘噪声管控、四节一环保与智慧监测",mustCover:["扬尘噪声分时段管控","四节一环保措施","监测预警与台账"]},{pattern:/应急|预案/u,goal:"覆盖应急组织、物资储备与专项预案",mustCover:["应急组织架构","应急物资储备","专项预案与演练计划"]},{pattern:/竣工|验收|移交|保修/u,goal:"覆盖竣工清理、验收移交与保修响应",mustCover:["竣工清理与垃圾外运","缺陷修补与复查销项","验收移交与保修响应"]},{pattern:/工资|劳务|实名/u,goal:"覆盖劳务实名制与农民工工资保障闭环",mustCover:["劳务实名制管理","工资专用账户与银行代发","考勤与工资支付台账"]}];var bh=c(8667);async function bi(a){(0,A.Te)(a.signal);let b=[];if(0===a.scopedFilePaths.length)return b;let c=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.chapter.title),d=(c?1.6:1)*(/[、,,与和及]/.test(a.chapter.title)?1.4:1),e=Math.ceil((a.highRisk?18:10)*d),f=Math.ceil((a.highRisk?24:14)*(c?1.4:1)),g=Math.ceil((a.highRisk?72:42)*d),h=Math.ceil((a.highRisk?72e3:42e3)*d),i=(a.requiredNeeds||[]).slice(0,8),j=(function(a,b=[]){let c=a.sections||[],d=[...a.requiredFacts,...b],e=(0,B.Cr)(c,a=>(0,B.Ox)(a),{maxItems:16,maxChars:1200},"retrieval-sections").selected,f=(0,B.Cr)(d,a=>(0,B.Ox)(a),{maxItems:16,maxChars:1200},"retrieval-facts").selected,g=/[、,,与和及]/.test(a.title),h=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.title),i=/进度|工期|节点/u.test(a.title)?["合同工期","计划工期","日历天","开工","竣工","关键线路","进度计划","施工进度"]:/质量|验收/u.test(a.title)?["质量标准","验收规范","检验批","复验","合格","质量保证","隐蔽验收"]:/安全|危大|风险/u.test(a.title)?["安全措施","风险源","危大工程","应急","检查整改","安全防护","应急预案","基坑支护","基坑开挖","基坑底标高","坡率","支护形式","降水","开挖深度","高支模","专项方案"]:h?["工程量清单","项目特征","材料设备","规格型号","数量单位","劳动力","机械设备","进场计划","资源保障","主要材料","施工机具","材料供应","设备配置"]:/施工|方案|方法|技术|工艺/u.test(a.title)?["施工方法","工艺流程","技术标准","构造做法","控制要点","施工准备"]:["工程范围","施工方法","控制要点","验收要求"],j=g?[...i,...a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4)]:i,k=[...new Set([a.title,...e,...f,...j].flatMap(a=>a.split(/[\s、,,。;;::()()《》【】\-/]+/u)).map(a=>a.trim()).filter(a=>a.length>=2))],l=(0,B.Cr)(k,a=>(0,B.Ox)(a),{maxItems:36,maxChars:1200},"retrieval-tokens").selected,m=g?a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4).map(a=>`${a} ${e.slice(0,6).join(" ")} ${f.slice(0,4).join(" ")}`.trim()):[];return[...new Set([`${a.title} ${e.join(" ")}`.trim(),...f.map(b=>`${a.title} ${b}`.trim()),...e.map(b=>`${a.title} ${b} ${f.slice(0,6).join(" ")}`.trim()),`${a.title} ${j.join(" ")}`.trim(),...m,l.join(" ")].filter(Boolean))]})(a.chapter,a.requiredNeeds).slice(0,e),k=[...i.map(b=>`${a.chapter.title} ${b} ${(a.chapter.sections||[]).join(" ")}`.trim()).filter(a=>!j.includes(a)).map(a=>({text:a,boost:2,source:"required-fact-evidence"})),...j.map(a=>({text:a,boost:2.4,source:"deep-retrieval"}))];return b.push(...(await (0,A.l$)(k,async b=>{var c;(0,A.Te)(a.signal);let d=await a.manager.search(a.projectRoot,b.text,{scope:"project",filters:{filePaths:a.scopedFilePaths},limit:f,weights:{keyword:.62,vector:.32,rewrite:.9,hybridBonus:.28},generationMode:!0,disableReranker:!0});return(c={chapter:a.chapter,results:d.results.filter(b=>a.scopedFilePaths.includes(b.filePath)),fileRoleByPath:a.fileRoleByPath,fileProcessingByPath:a.fileProcessingByPath,boost:b.boost,source:b.source}).results.map(a=>{let b=c.fileProcessingByPath.get(a.filePath);return{chapterId:c.chapter.id,filePath:a.filePath,score:a.score+c.boost+("table"===b?3:"structured_data"===b?2.6:3.2*("bill_of_quantities"===b)),content:a.content,roleId:c.fileRoleByPath.get(a.filePath),processingType:b,sectionTitle:a.sectionTitle,source:c.source}})},{kind:"deepRetrieval",highRisk:a.highRisk})).flat()),[...(0,s.QR)(b.filter(a=>"required-fact-evidence"===a.source),{maxItems:Math.max(6,3*i.length),maxChars:18e3,preservePinned:!0}),...(0,s.QR)(b.filter(a=>"required-fact-evidence"!==a.source),{maxItems:g,maxChars:h,preservePinned:!0})]}var bj=c(80439),bk=c(46482),bl=c(79227),bm=c(2773),bn=c(92817),bo=c(3063);function bp(a){return(0,t.GQ)(a.replace(/\*+/gu,"")).replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分、..\s-]*/u,"").replace(/^\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^[-—–]\s*/u,"").replace(/[<>]/gu,"").replace(/[::。;;,.,]+$/gu,"").replace(/\s*[((][^()()]{0,40}[a-zA-Z]{3,}[^()()]{0,40}[))]\s*$/u,"").trim()}function bq(a,b){let c=bp(a);return!!(c.length<4||c.length>60||c===bp(b)||/^(?:目录|章节|大纲|要求|说明|注意|输出|格式|示例|占位|提示|概述|总体要求)$/u.test(c)||/如需|应由|大模型|提示词|上下文|OUTLINE|JSON|小节标题/u.test(c)||/(.)\1/u.test(c))}function br(a,b){let c=a=>{let b=new Set;for(let c=0;c<a.length-1;c+=1)b.add(a.slice(c,c+2));return b},d=c(b),e=[...c(a)];return 0===e.length?0:e.filter(a=>d.has(a)).length/e.length}function bs(a){return/工期|进度|节点|计划|纠偏|预警/u.test(a)?"工期进度":/质量|验收|三检|样板|隐蔽|复试|实测|通病/u.test(a)?"质量验收":/安全|危大|风险|隐患|应急|临边|洞口|消防|临电/u.test(a)?"安全风险":/文明|扬尘|噪声|绿色|废水|垃圾|环保|智慧/u.test(a)?"文明绿色":/劳务|工资|实名|银行|考勤|人员|岗位|组织|职责/u.test(a)?"组织劳务":/资源|材料|设备|机械|人材机|调配/u.test(a)?"资源保障":/施工|工艺|流程|顺序|穿插|部署|区段|流水/u.test(a)?"施工组织":"综合管理"}function bt(a){return/^(?:确保\s*)?[人材机](?:员|力|料|械|工)?\s*的保障体系与措施$/u.test(a)}function bu(a){let b=new Set,c=[];for(let d of a.sections||[]){let e=bp(d);if(!e||bq(e,a.title))continue;let f=e.replace(/\s+/gu,"");b.has(f)||(b.add(f),c.push(e))}return c}function bv(a,b){let c=a.replace(/\s+/gu,""),d=b.replace(/\s+/gu,"");return c===d||c.includes(d)||d.includes(c)}function bw(a,b,c){let d=new Map,e=[];for(let b of a){if(bt(b)){e.push(b);continue}let a=bs(b),c=d.get(a)||[];c.push(b),d.set(a,c)}let f=a=>{let b=[];for(let c of a){let a=b[b.length-1],d=a?a.sources[a.sources.length-1]:"";!(0,bo.tZ)(c)&&!bt(c)&&a&&(bv(c,d)||br(c,d)>=.75)?(a.sources.push(c),c.length>a.title.length&&(a.title=c)):b.push({title:c,sources:[c]})}return b},g=e.map(a=>({title:a,subPoints:[{title:a,sources:[a]}],facts:[],targetWords:1200}));for(let a of d.values()){let c=f(a);for(let a=0;a<c.length;a+=6){let d=c.slice(a,a+6);g.push({title:d[0].title||b,subPoints:d,facts:[],targetWords:1200})}}return bx(g,c),{blocks:g,coveredSections:a.slice(),fallbackSections:[],llmPlanned:!1}}function bx(a,b){for(let c=0;c<2&&a.length>0&&!(4e3>=Math.floor(b/a.length));c+=1){let b=a.reduce((a,b)=>b.subPoints.length>a.subPoints.length?b:a,a[0]);if(b.subPoints.length<2)break;let c=Math.ceil(b.subPoints.length/2);a.push({title:b.subPoints[c].title||b.title,subPoints:b.subPoints.slice(c),facts:[],targetWords:0}),b.subPoints=b.subPoints.slice(0,c)}let c=a.reduce((a,b)=>a+b.subPoints.length,0)||a.length;for(let d of a){let e=Math.floor(.75*Math.max(1200,Math.floor(b/Math.max(1,a.length)))+.25*b*(d.subPoints.length/c));d.targetWords=Math.min(4e3,Math.max(1200,e))}}let by={type:"object",required:["title","subPoints"],properties:{title:{type:"string",required:!0,minLength:2,maxLength:80},subPoints:{type:"array",required:!0,minItems:1,maxItems:6,items:{type:"object",required:!0,properties:{title:{type:"string",required:!0,minLength:2,maxLength:60},sources:{type:"array",required:!0,maxItems:8,items:{type:"string",maxLength:120}}}}},facts:{type:"array",maxItems:2,items:{type:"string",maxLength:100}}}};async function bz(a){let b=bu(a.chapter);if(b.length<=8)return;let c=await (0,S.Mv)(b,b,a.semanticEmbedder),d=function(a,b){let c=new Map,d=[];for(let b of a){if(bt(b)){d.push([b]);continue}let a=bs(b),e=c.get(a)||[];e.push(b),c.set(a,e)}let e=[];for(let a of c.values()){let c=[];for(let d of a){let a,e=-1;for(let f of c){if(f.length>=8)continue;let c=Math.max(...f.map(a=>b(d,a)));c>e&&(e=c,a=f)}a&&e>=.5?a.push(d):c.push([d])}e.push(...c)}return[...d,...e]}(b,c),e=Math.max(800,Math.floor(a.targetWords/Math.max(1,d.length))),f=async(b,c)=>{let d=function(a,b){let c=a.flatMap(a=>[a.slice(0,4),a.slice(-4)]).filter(a=>a.length>=2);return b.map(a=>({item:a,score:c.reduce((b,c)=>b+ +!!a.content.includes(c),0)})).sort((a,b)=>b.score-a.score).map(a=>a.item)}(b,a.evidence),f=(0,s.ks)((0,s.QO)(a.chapter,d)),g=["你是专业施工组织设计文档结构规划专家。","任务:把一个主题块内的输入细目重排为 H4 要点结构;语义相近、内容连贯的细目必须合并进同一个 H4 要点。","硬性规则:",`1. 合并决策:语义相近、内容连贯的输入细目必须合并进同一个 H4 要点;H4 要点标题必须重写为更概括、更专业的标题(16 字以内),不得直接照抄任一输入细目标题;每个 H4 要点的 sources 字段逐字列出它所覆盖的全部输入细目标题,不得改写、不得遗漏、不得重复映射。例外:含评标必查关键词的输入细目(${bo.Dr.join("/")}等)必须保留为独立 H4 要点,不得与其他细目合并吞并,其 H4 标题必须保留该关键词。`,`2. 合并依据:优先参考项目图谱与文档蓝图,把对应同一套工程对象/管理闭环的细目合并(如「三检制度」「样板引路」「隐蔽工程验收」同属质量管控闭环);不得把内容无关的细目强行合并。`,`3. 主题块标题必须具体、专业、能承载其要点(16 字以内),不得使用"目标与范围""资料依据""总体要求"等通用占位标题。`,`4. 数量约束:本主题块 1~6 个 H4 要点。`,"5. facts 字段:从绑定资料中摘取与本主题块直接相关的关键事实短句(每条 ≤60 字,0~2 条)。","6. 只返回 JSON,不要输出任何其他文字。",'JSON 格式:{"title":"主题块标题","subPoints":[{"title":"H4要点标题","sources":["输入细目原文"]}],"facts":["事实短句"]}'],h=[`文档模板:${a.template.name}`,`章节标题:${a.chapter.title}`,a.requirement?`用户要求:${a.requirement}`:"",a.graphContext?`项目图谱(本章定向):${a.graphContext}`:"",a.blueprintContext?`文档蓝图(本章任务卡与实施方案):${a.blueprintContext}`:"",a.projectContext?`上下文:${a.projectContext}`:"",a.roleContext?`角色要求:${a.roleContext}`:"",f?`真实绑定资料:${f}`:"",`输入细目清单(本主题块共 ${b.length} 条,必须全部覆盖,允许合并进同一 H4):${b.join("、")}`,`请输出 1 个主题块,1~6 个 H4 要点,确保所有输入细目被覆盖。`],i={},j={l0:g.join("\n").length,l2:(0,ad.CX)([`文档模板:${a.template.name}`,`章节标题:${a.chapter.title}`,a.requirement?`用户要求:${a.requirement}`:"",a.graphContext?`项目图谱(本章定向):${a.graphContext}`:"",a.blueprintContext?`文档蓝图(本章任务卡与实施方案):${a.blueprintContext}`:"",a.projectContext?`上下文:${a.projectContext}`:"",a.roleContext?`角色要求:${a.roleContext}`:""]),l3:(0,ad.CX)([f?`真实绑定资料:${f}`:"",`输入细目清单(本主题块共 ${b.length} 条,必须全部覆盖,允许合并进同一 H4):${b.join("、")}`,`请输出 1 个主题块,1~6 个 H4 要点,确保所有输入细目被覆盖。`])},k=await (0,ad.bb)(g.join("\n"),h.filter(Boolean).join("\n\n"),{maxTokens:4096,temperature:.1,signal:a.signal,diagnostics:a.diagnostics,schema:by,disableThinkingBoost:!0,outFailure:i,contextLayers:j});if(!k){let d=i.value?`第 ${c+1} 块未通过校验(${i.value})`:`第 ${c+1} 块 LLM 无响应`;return{blocks:bw(b,a.chapter.title,e).blocks,llmPlanned:!1,failure:d}}let l=function(a,b,c){let d=bp(a.title||"");if(!d||bq(d,c))return;let e=(a.subPoints||[]).map(a=>{let c=Array.isArray(a.sources)&&a.sources.length>0?a.sources:a.source?[a.source]:[],d=[];for(let a of c){let c=bp(a||"");!(c.length<4)&&b.some(a=>bv(c,a))&&(d.some(a=>bv(a,c))||d.push(c))}let e=bp(a.title||"");return!e||e.length<4?d.length>0?{title:d[0],sources:d}:void 0:{title:e&&!d.some(a=>bv(e,a))?e:d[0]||e,sources:d}}).filter(a=>!!a);if(0!==e.length)return{title:d,subPoints:e,facts:(a.facts||[]).map(a=>a.trim()).filter(Boolean),targetWords:1200}}(k,b,a.chapter.title);return l?{blocks:[l],llmPlanned:!0}:{blocks:bw(b,a.chapter.title,e).blocks,llmPlanned:!1,failure:`第 ${c+1} 块 LLM 结构无效(title/subPoints 缺失或未对齐)`}},g=await Promise.all(d.map((a,b)=>f(a,b))),h=g.flatMap(a=>a.blocks),i=g.map(a=>a.failure).filter(Boolean);return 0===h.length?{blocks:[],coveredSections:[],fallbackSections:[],llmPlanned:!1,llmFailure:i.join(";")||"未知原因"}:(bx(h,a.targetWords),{...function(a){let b=[],c=a.blocks.map(a=>({...a,subPoints:a.subPoints.map(a=>{let c=a.sources.filter(a=>!b.some(b=>bv(b,a))&&(b.push(a),!0));return{...a,sources:c}}).filter(a=>a.sources.length>0)}));return{...a,blocks:c}}(function(a,b){let c=[],d=[],e=b.map(a=>({...a,subPoints:[...a.subPoints]}));for(let b of a){let a,f;if(e.some(a=>(function(a,b){return!!bv(b.title,a)||b.subPoints.some(b=>b.sources.some(b=>bv(b,a))||bv(b.title,a))})(b,a))){c.push(b);continue}let g=-1;for(let c of e)for(let d of c.subPoints){let e=Math.max(br(b,d.title),...d.sources.map(a=>br(b,a)));e>g&&(g=e,a=d,f=c)}if((0,bo.tZ)(b)||bt(b)){let a=f||e[e.length-1];if(a){a.subPoints.push({title:b,sources:[b]}),d.push(b);continue}}a&&g>=.5?(a.sources.push(b),d.push(b)):f?(f.subPoints.push({title:b,sources:[b]}),d.push(b)):c.push(b)}return{blocks:e,coveredSections:c,fallbackSections:d,llmPlanned:b.length>0}}(b,h)),llmPlanned:g.some(a=>a.llmPlanned),llmFailure:i.length>0?`块级降级(${i.join(";")})`:void 0})}async function bA(a){let b=await bz(a).catch(a=>({blocks:[],coveredSections:[],fallbackSections:[],llmPlanned:!1,llmFailure:a instanceof Error?a.message:String(a)}))??{blocks:[],coveredSections:[],fallbackSections:[],llmPlanned:!1,llmFailure:"输入细目 ≤8 条,跳过 LLM 规划(设计行为)"};return b.blocks.length>0?b:{...bw(bu(a.chapter),a.chapter.title,a.targetWords),llmFailure:b.llmFailure||"LLM 调用异常"}}async function bB(a,b){let c=(0,v.r4)(a.content);if(0===c.length)return[];let d=[];for(let e of c){let c=e.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),f=a.content.match(RegExp(`^###\\s+(?:\\d+(?:\\.\\d+)*[、..\\s]*\\s+)?${c}\\s*\\n([\\s\\S]*?)(?=^#{2,3}\\s+|$)`,"mu")),g=f?.[1]||"",h=await (0,bn.AI)(e,(0,bn.Ym)(e,a.chapter,a.evidence),b),i=(0,bn.uQ)(e,g,h);i&&d.push(`${e}:${i}`)}return d}function bC(a,b){let c=a.trim();if(!c)return[];let d=Math.max(1e3,Math.ceil(b)),e=[],f=0;for(;f<c.length;){let a=Math.min(f+d,c.length),b=c.lastIndexOf("\n\n",a);(b<=f||a-b>.25*d)&&(b=c.lastIndexOf("\n",a)),(b<=f||a-b>.2*d)&&(b=a),e.push(c.slice(f,b).trim()),f=b}return e.filter(Boolean)}function bD(a){return"string"==typeof a?a:a&&"object"==typeof a&&"message"in a?String(a.message):JSON.stringify(a)}function bE(a){let b=Number(process.env[a]);return Number.isFinite(b)&&b>0?Math.ceil(b):0}async function bF(a){var b;(0,A.Te)(a.signal);let c=a.chapters.map(a=>{let b=a.content.replace(/#{1,6}\s+/gu,"").replace(/\*\*/gu,"").replace(/\|/gu," ").replace(/[\n\r]+/gu," ").trim(),c=function(a){let b=[];for(let c of[/(?:总建筑面积|建设规模|总用地面积|总占地面积)[^\n。;;]{0,18}\d+(?:[.,]\d+)?\s*万?\s*(?:㎡|m²|m2|平方米)/gu,/(?:合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价|工程总投资|总投资|工程造价)[^\n。;;]{0,18}\d+(?:[.,]\d+)?\s*万?\s*(?:万元|亿元|元)/gu,/(?:计划工期|合同工期|总工期|施工周期)[^\n。;;]{0,18}\d+\s*(?:日历天|天|个月|月)/gu,/(?:质量标准|质量目标)[^\n。;;]{0,26}/gu,/(?:找平层|抹灰层|防水层|保温层|结合层|垫层|面层|粘结层)[^\n。;;]{0,24}\d+:\d+(?:\.\d+)?/gu]){let d=[...new Set(a.match(c)||[])].slice(0,4);b.push(...d)}return[...new Set(b.map(a=>a.replace(/\s+/gu," ").trim()).filter(Boolean))].join(";")}(a.content);return`章节:${a.title}
|
|
43
43
|
数值口径清单:${c||"(未提取到总量口径数字)"}
|
|
44
44
|
正文摘要:${b.slice(0,600)}`}).join("\n\n---\n\n"),d=function(a){let b=Math.ceil(a.totalChars/Math.max(1e3,a.chunkChars)),c="chapter"===a.phase?bE("DOCUMENT_CHAPTER_REVIEW_MAX_CHUNKS")||Math.min(Math.max(2,Math.floor(a.totalChars/a.chapterCount/4e3)),b):"global"===a.phase?bE("DOCUMENT_GLOBAL_REVIEW_MAX_CHUNKS")||Math.min(4,b):bE("DOCUMENT_FINAL_REVIEW_MAX_CHUNKS")||Math.min(6,b);return{chunks:c,budgetPerChunk:Math.ceil(a.totalChars/Math.max(1,c)),maxIssues:Math.max(4,Math.min(28,Math.ceil(2.5*c)))}}({totalChars:c.length,chapterCount:a.chapters.length,chunkChars:16e3,phase:"global"}),e=bC(c,16e3).map((a,b)=>`**第 ${b+1}/${bC(c,16e3).length} 部分**
|
|
45
45
|
|
|
@@ -48,7 +48,7 @@ ${f}`:""].join("\n\n"),h=[...new Set((await Promise.all(e.map(b=>(0,ad.bb)(g,`${
|
|
|
48
48
|
|
|
49
49
|
${b}
|
|
50
50
|
|
|
51
|
-
返回 JSON:{"issues":[]}`,{maxTokens:1e3,temperature:.1,signal:a.signal,diagnostics:a.diagnostics})))).flatMap(a=>Array.isArray(a?.issues)?a.issues:[]).map(bD).filter(Boolean))];return{issues:h,stage:(0,bj.X5)({type:"llm_review",roleId:"global-consistency-review",status:h.length>0?"failed":"success",message:h.length>0?`全局一致性审查完成:发现 ${h.length} 个跨章问题`:"全局一致性审查通过"},{subtitle:"全局一致性审查"})}}let bG=/安全|文明|质量|绿色施工|环保|扬尘|消防|应急|危大|风险|规范|标准|管理要求|施工工艺|技术措施|验收/u,bH=/项目名称|工程名称|建设地点|建设单位|招标人|发包人|建设规模|招标范围|合同工期|计划工期|质量标准|危大工程清单|工程量|材料规格|设备型号|图纸参数|报价|单价|利润|税率|合同金额|联系方式|品牌/u,bI=/报价|单价|合价|金额|利润|税率|增值税|招标控制价|最高投标限价|中标价|合同价|暂列金额/u,bJ=/联网增强|联网检索|网页资料|搜索结果|根据网页|互联网资料|在线资料|浏览器|搜索引擎/u,bK=["项目名称","工程名称","建设地点","建设单位","招标人","发包人","建设规模","招标范围","合同工期","计划工期","工程量","报价","单价"];function bL(a){return a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,'"').replace(/'/gu,"'").replace(/<[^>]+>/gu,"").replace(/\s+/gu," ").trim()}async function bM(a,b,c,d,e){let f=`https://duckduckgo.com/html/?q=${encodeURIComponent(a)}`,g=new AbortController,h=setTimeout(()=>g.abort(),8e3),i=()=>g.abort();e?.addEventListener("abort",i,{once:!0});let j=await fetch(f,{headers:{"User-Agent":"Mozilla/5.0 compatible; customize-agent web research"},signal:g.signal}).finally(()=>{clearTimeout(h),e?.removeEventListener("abort",i)});return j.ok?[...(await j.text()).matchAll(/<a[^>]+class="result__a"[^>]+href="([^"]+)"[^>]*>([\s\S]*?)<\/a>[\s\S]*?<a[^>]+class="result__snippet"[^>]*>([\s\S]*?)<\/a>/giu)].map(a=>{let b=bL(a[1]||""),c=bL(a[2]||""),d=bL(a[3]||""),e=/uddg=([^&]+)/u.exec(b)?.[1];return{url:e?decodeURIComponent(e):b,title:c,snippet:d}}).filter(a=>{let b=`${a.title} ${a.snippet} ${a.url}`;return!(!a.url||!a.snippet||bH.test(b)||bI.test(b)||bJ.test(b)||d.some(a=>a&&b.includes(a)))&&(0===c.length||c.some(b=>a.url.includes(b)))}).slice(0,b):[]}async function bN(a){if(!a.config.enabled||!function(a,b){let c=`${a} ${b.join(" ")}`;return!(!bG.test(c)||/项目概况|工程概况|建设地点|建设规模|招标范围|工程量|报价|造价/u.test(c)&&!/安全|文明|质量|危大|环保|工艺|措施/u.test(c))}(a.chapterTitle,a.sectionTitles))return{evidence:[],queries:[],filtered:0};let b=function(a,b,c){let d=`${a} ${b.join(" ")}`,e=[/危大/u.test(d)?"危大工程 专项施工方案 管理规定 安全措施":"",/安全|文明/u.test(d)?"建筑工程 安全文明施工 管理要求":"",/质量|验收/u.test(d)?"建筑工程 质量控制 质量验收 通用要求":"",/扬尘|环保|绿色/u.test(d)?"施工现场 扬尘治理 绿色施工 环保要求":"",/消防|应急/u.test(d)?"施工现场 消防 应急管理 要求":"",/工艺|技术措施/u.test(d)?"建筑工程 施工工艺 技术措施 通用要求":""].filter(Boolean),f=`${a.replace(bH,"")} 公开规范 通用要求`.trim();return[...new Set(e.length?e:[f])].slice(0,c)}(a.chapterTitle,a.sectionTitles,a.config.maxQueriesPerChapter),c=[],d=0;for(let e of b)try{for(let b of(await bM(e,a.config.maxResultsPerQuery,a.config.trustedDomains,a.runtimeRules.forbiddenTerms||[],a.signal))){let e=function(a,b){let c=a;for(let a of bK)c=c.replace(RegExp(`${a}[^。;;
|
|
51
|
+
返回 JSON:{"issues":[]}`,{maxTokens:1e3,temperature:.1,signal:a.signal,diagnostics:a.diagnostics,contextLayers:{l0:g.length,l1:(0,ad.CX)([a.promptTexts]),l3:(0,ad.CX)([b,'\n\n返回 JSON:{"issues":[]}'])}})))).flatMap(a=>Array.isArray(a?.issues)?a.issues:[]).map(bD).filter(Boolean))];return{issues:h,stage:(0,bj.X5)({type:"llm_review",roleId:"global-consistency-review",status:h.length>0?"failed":"success",message:h.length>0?`全局一致性审查完成:发现 ${h.length} 个跨章问题`:"全局一致性审查通过"},{subtitle:"全局一致性审查"})}}let bG=/安全|文明|质量|绿色施工|环保|扬尘|消防|应急|危大|风险|规范|标准|管理要求|施工工艺|技术措施|验收/u,bH=/项目名称|工程名称|建设地点|建设单位|招标人|发包人|建设规模|招标范围|合同工期|计划工期|质量标准|危大工程清单|工程量|材料规格|设备型号|图纸参数|报价|单价|利润|税率|合同金额|联系方式|品牌/u,bI=/报价|单价|合价|金额|利润|税率|增值税|招标控制价|最高投标限价|中标价|合同价|暂列金额/u,bJ=/联网增强|联网检索|网页资料|搜索结果|根据网页|互联网资料|在线资料|浏览器|搜索引擎/u,bK=["项目名称","工程名称","建设地点","建设单位","招标人","发包人","建设规模","招标范围","合同工期","计划工期","工程量","报价","单价"];function bL(a){return a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,'"').replace(/'/gu,"'").replace(/<[^>]+>/gu,"").replace(/\s+/gu," ").trim()}async function bM(a,b,c,d,e){let f=`https://duckduckgo.com/html/?q=${encodeURIComponent(a)}`,g=new AbortController,h=setTimeout(()=>g.abort(),8e3),i=()=>g.abort();e?.addEventListener("abort",i,{once:!0});let j=await fetch(f,{headers:{"User-Agent":"Mozilla/5.0 compatible; customize-agent web research"},signal:g.signal}).finally(()=>{clearTimeout(h),e?.removeEventListener("abort",i)});return j.ok?[...(await j.text()).matchAll(/<a[^>]+class="result__a"[^>]+href="([^"]+)"[^>]*>([\s\S]*?)<\/a>[\s\S]*?<a[^>]+class="result__snippet"[^>]*>([\s\S]*?)<\/a>/giu)].map(a=>{let b=bL(a[1]||""),c=bL(a[2]||""),d=bL(a[3]||""),e=/uddg=([^&]+)/u.exec(b)?.[1];return{url:e?decodeURIComponent(e):b,title:c,snippet:d}}).filter(a=>{let b=`${a.title} ${a.snippet} ${a.url}`;return!(!a.url||!a.snippet||bH.test(b)||bI.test(b)||bJ.test(b)||d.some(a=>a&&b.includes(a)))&&(0===c.length||c.some(b=>a.url.includes(b)))}).slice(0,b):[]}async function bN(a){if(!a.config.enabled||!function(a,b){let c=`${a} ${b.join(" ")}`;return!(!bG.test(c)||/项目概况|工程概况|建设地点|建设规模|招标范围|工程量|报价|造价/u.test(c)&&!/安全|文明|质量|危大|环保|工艺|措施/u.test(c))}(a.chapterTitle,a.sectionTitles))return{evidence:[],queries:[],filtered:0};let b=function(a,b,c){let d=`${a} ${b.join(" ")}`,e=[/危大/u.test(d)?"危大工程 专项施工方案 管理规定 安全措施":"",/安全|文明/u.test(d)?"建筑工程 安全文明施工 管理要求":"",/质量|验收/u.test(d)?"建筑工程 质量控制 质量验收 通用要求":"",/扬尘|环保|绿色/u.test(d)?"施工现场 扬尘治理 绿色施工 环保要求":"",/消防|应急/u.test(d)?"施工现场 消防 应急管理 要求":"",/工艺|技术措施/u.test(d)?"建筑工程 施工工艺 技术措施 通用要求":""].filter(Boolean),f=`${a.replace(bH,"")} 公开规范 通用要求`.trim();return[...new Set(e.length?e:[f])].slice(0,c)}(a.chapterTitle,a.sectionTitles,a.config.maxQueriesPerChapter),c=[],d=0;for(let e of b)try{for(let b of(await bM(e,a.config.maxResultsPerQuery,a.config.trustedDomains,a.runtimeRules.forbiddenTerms||[],a.signal))){let e=function(a,b){let c=a;for(let a of bK)c=c.replace(RegExp(`${a}[^。;;
|
|
52
52
|
]{0,80}`,"gu"),"");for(let a of b.map(a=>{var b;return null==(b=a.value)?"":"string"==typeof b||"number"==typeof b||"boolean"==typeof b?String(b).trim():""}).filter(a=>a.length>=3&&a.length<=80))c=c.replace(RegExp(a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"gu"),"");return c.replace(bI,"").trim()}(b.snippet,a.localFacts);if(!e||e.length<20){d+=1;continue}c.push({chapterId:a.chapterId,filePath:b.url,score:.42,content:`参考依据:${b.title}
|
|
53
53
|
${e}`,source:function(a){let b=a.toLowerCase();return b.includes(".gov.cn")||b.includes("mohurd")||b.includes("zjt")||a.includes("住建")?"web-policy":"web-evidence"}(b.url),sectionTitle:a.chapterTitle})}}catch{d+=1}return{evidence:c,queries:b,filtered:d}}function bO(a){return e.resolve(a).replace(/\\/gu,"/").toLowerCase()}function bP(a,b=[]){return{projectId:a,allowedFilePaths:[...new Set(b.filter(Boolean).map(bO))]}}function bQ(a){return!!a?.allowedFilePaths.length}function bR(a,b){if(!bQ(b))return!0;if(!a)return!1;let c=bO(a);return b.allowedFilePaths.includes(c)}function bS(a,b){return a.filter(a=>bR(a.filePath,b))}function bT(a,b){return a.filter(a=>bR(a.sourceFile,b))}function bU(a,b,c){if(!bQ(b))return;let d=a.filter(a=>!bR(a.filePath,b));if(d.length>0){let a=d.slice(0,5).map(a=>a.filePath).join(";");throw Error(`EVIDENCE_SCOPE_VIOLATION:${c}:${a}`)}}function bV(a){return/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|\d{1,2}\.\d{1,2}/u.test(a)}function bW(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/[\s,。,.;;::《》“”‘’()()_-]+/gu,"").toLowerCase()}function bX(a,b){let c=bW(b);if(!c||c.length<4)return!0;let d=bW(a);return!!d.includes(c)||c.length>=12&&d.includes(c.slice(0,Math.max(8,Math.floor(.72*c.length))))}function bY(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/\s+/gu,"").replace(/[,。,.;;::《》“”‘’()()_-]/gu,"").toLowerCase()}function bZ(a,b){let c=a.trim();if(p(b,c)||o(b,c)||/签章|盖章|联系人|联系电话|电话|邮箱|解密|开标|评标|保证金|交易系统|空白|填写|上传|下载|递交|投标文件制作|电子服务系统|交易平台/u.test(c)||/\|/u.test(c)||/^#+\s*/u.test(c)||/见(?:招标公告|投标人须知|前附表|本项目|补疑)|资料参数行摘要|公共资源交易监督管理|开评标程序|监管部门|招标代理机构|监督管理部门|行政监督部门/u.test(c)||/是否|符合|采购范围|规定的投标截止时间|电子交易系统|投标人须知|招标文件正文/u.test(c)&&/\d{3,}/u.test(c)||/项目名称|工程名称/u.test(c)&&/项目编号|工程概况|建筑面积|本项目分为|现状建筑物|改造工程|标段/u.test(c)||/项目编号[::]|工程概况[::]|本项目分为|现状建筑物|总建筑面积|本次改造工程|清单编制说明/u.test(c))return"";let d=/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月)/u.exec(c)?.[0],e=bY(d&&/工期|总工期|合同工期|计划工期|施工周期/u.test(c)?d:c);return!e||e.length>80?"":e}var b$=c(85016);let b_=/([\u4e00-\u9fa5A-Za-z0-9()()]{1,12}?)(\d+(?:\.\d+)?)\s*(?:mm|cm|m|米|MPa|kN|kV|kW|℃|°C|元|万元|人|天|日|个|层|樘|处|套|台|t|吨)([\u4e00-\u9fa5A-Za-z0-9()()]{0,8})/gu,b0=["直径","厚度","宽度","长度","高度","深度","间距","距离","标高","偏差","数量","面积","体积","重量","压力","温度","强度","等级","坡度","规格","尺寸","层数","次数","跨度","半径"];async function b1(a){let b=function(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=c.trim();if(!(/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a)))for(let c of a.matchAll(RegExp(b_.source,"gu"))){let a=(c[1]||"").trim(),d=Number(c[2]),e=(c[3]||"").trim(),f=`${a}${e}`.replace(/[\s,,、;;::]/gu,"");!(f.length<2)&&/[\u4e00-\u9fa5A-Za-z]{2,}/u.test(f)&&Number.isFinite(d)&&!(d<=0)&&(b0.some(a=>f.replace(/(?:mm|cm|m|MPa|kN|kV|kW|℃|元|万元|人|天|日|个|层|樘|处|套|台|t|吨)/gu,"").replace(/[\s,,、;;::()()]/gu,"")===a)||b.push({concept:f,value:d,raw:c[0]}))}}let c=new Set;return b.filter(a=>{let b=a.raw;return!c.has(b)&&(c.add(b),!0)}).slice(0,60)}(a);if(b.length<3)return[];let c=[...new Set(b.map(a=>a.concept))];if(c.length<2)return[];let d=await (0,S.VN)().embedDocuments(c);if(d.length!==c.length)throw Error(`本地语义模型嵌入数量不一致:期望 ${c.length} 条,实际 ${d.length} 条`);let e=new Map(c.map((a,b)=>[a,d[b]])),f=function(a,b){let c=new Map(a.map(a=>[a,a])),d=a=>{let b=c.get(a)||a;return b===a?a:(c.set(a,d(b)),c.get(a)||a)},e=(a,b)=>{c.set(d(a),d(b))};for(let c=0;c<a.length;c+=1)for(let d=c+1;d<a.length;d+=1)b(a[c],a[d])>=.6&&e(a[c],a[d]);return c}(c,(a,b)=>{let c=e.get(a),d=e.get(b);if(!c||!d||0===c.length||0===d.length)return 0;let f=Math.min(c.length,d.length),g=0;for(let a=0;a<f;a+=1)g+=c[a]*d[a];return g}),g=a=>{let b=a;for(;(f.get(b)||b)!==b;)b=f.get(b)||b;return b},h=new Map;for(let a of b){let b=g(a.concept),c=h.get(b)||[];c.push(a),h.set(b,c)}let i=[];for(let a of h.values()){if(a.length<2)continue;let b=[...new Set(a.map(a=>a.value))];if(b.length<2)continue;let c=Math.max(...b),d=Math.min(...b);if(!(c-d<=.02*c)&&!(c>20*d)&&!(a.filter(a=>/[、/](?:与)?\d/u.test(a.raw)).length>=2)&&(i.push(`“${a[0].concept}”出现多个口径:${[...new Set(a.map(a=>a.raw))].slice(0,3).join("、")}`),i.length>=4))break}return 0===i.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`同一参数概念出现多口径数值冲突:${i.join(";")}`,suggestion:"以绑定资料(图纸/清单/规范)裁决口径为准统一数值表述:每个参数概念全文只保留一个口径数值,删除矛盾表述。"}]}let b2=["电梯","幕墙","智能化","消防","暖通","给排水","电气","燃气","人防","室外","园林","绿化","景观","钢结构","防水","保温","门窗","通风","空调","防雷","接地","动力","照明","拆除","加固","装修","装饰"];function b3(a){let b=[...new Set(a.flatMap(a=>b2.filter(b=>a.title.includes(b))))];if(0===b.length)return[];let c=a.map(a=>a.content||"").join("\n"),d=b.filter(a=>!c.includes(a));if(0===d.length)return[];let e=a.find(a=>d.some(b=>a.title.includes(b)));return[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`章节大纲涉及的专业工程系统在正文零覆盖:${d.join("、")}`,suggestion:"对应章节必须补写该专业工程的施工方案正文(施工概况/施工流程/施工方法,含可核实的工艺参数),不得整章零覆盖。",chapterId:e?.id}]}let b4=(a,b)=>{let c=b.exec(a);if(!c)return;let d=Number(c[1]);return Number.isFinite(d)&&d>0?d:void 0},b5=[{name:"基坑支护与降水工程",aliases:["基坑支护","基坑工程","降排水","降水井"],applicable:a=>{let b=b4(a,/(?:基坑)?开挖深度[约为达至]{0,3}(\d+(?:\.\d+)?)\s*m/u);return void 0!==b&&b>=3}},{name:"高大模板支撑工程",aliases:["高大模板","高支模","模板支撑体系","模板支撑"],applicable:a=>{let b=b4(a,/(?:模板)?支撑(?:体系)?(?:搭设)?高度[约为达至]{0,3}(\d+(?:\.\d+)?)\s*m/u),c=b4(a,/(?:施工(?:总)?荷载|集中线荷载)[约为达至]{0,3}(\d+(?:\.\d+)?)\s*kN/u);return void 0!==b&&b>=8||void 0!==c&&c>=10||/高支模|高大模板/u.test(a)}},{name:"脚手架工程",aliases:["脚手架","落地式钢管脚手架","悬挑式脚手架","悬挑脚手架"],applicable:a=>{let b=b4(a,/(?:落地式|悬挑式)?(?:钢管)?脚手架(?:搭设)?高度[约为达至]{0,3}(\d+(?:\.\d+)?)\s*m/u);return void 0!==b&&b>=15||/悬挑(?:式)?脚手架/u.test(a)}},{name:"起重吊装及安装拆卸工程",aliases:["起重吊装","塔吊","塔式起重机","汽车吊","履带吊","起重机械安拆","物料提升机","提升机","起重机械","吊装"],applicable:a=>/塔吊|塔式起重机|汽车吊|履带吊|吊车|起重机械|起重设备|起重机|卷扬机|物料提升机|提升机|电动葫芦|起重伤害|垂直运输|吊装/u.test(a)},{name:"吊篮作业工程",aliases:["吊篮","高处作业吊篮","电动吊篮"],applicable:a=>/吊篮/u.test(a)},{name:"拆除工程",aliases:["拆除工程","爆破拆除","机械拆除"],applicable:a=>/拆除工程|爆破拆除/u.test(a)}];function b6(a){let b=b5.filter(b=>b.applicable(a));if(0===b.length)return[];let c=function(a){let b=a.split(/\r?\n/u),c=[];return b.forEach((a,d)=>{/危大/u.test(a)&&c.push(...b.slice(Math.max(0,d-6),Math.min(b.length,d+7)))}),c.join("\n")}(a);if(!c)return[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文出现危大工程适用前提(${b.map(a=>a.name).join("、")})但全文未编制危大工程辨识清单`,suggestion:"必须编制危大工程辨识清单:按建办质〔2018〕31号逐项辨识并标注分级,超过一定规模的专项施工方案需专家论证。"}];let d=b.filter(a=>!a.aliases.some(a=>c.includes(a)));return 0===d.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`危大工程辨识清单遗漏适用项:${d.map(a=>a.name).join("、")}(正文已出现适用前提但辨识清单未列入)`,suggestion:"按建办质〔2018〕31号逐项辨识:将遗漏项补入危大工程辨识清单并标注分级,超过一定规模的专项施工方案需专家论证。"}]}let b7=/分[为成]?[^。;;,,\n]{0,12}阶段|共[分设]?[^。;;,,\n]{0,12}阶段|划[分]?为[^。;;,,\n]{0,12}阶段|[二三四五六七八九十]个阶段/u,b8={一:1,二:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};function b9(a){return/(\d+|[一二三四五六七八九十]+)\s*个?\s*阶段/u.exec(a)?.[1]??null}function ca(a){let b=a.map(b9).filter(a=>null!==a).map(a=>/^\d+$/u.test(a)?parseInt(a,10):/^[一二三四五六七八九十]+$/u.test(a)?"十"===a?10:1===a.length?b8[a]??null:a.startsWith("十")?10+(b8[a[1]]??0):a.endsWith("十")?(b8[a[0]]??0)*10:(b8[a[0]]??0)*10+(b8[a[2]]??0):null).filter(a=>null!==a);return 0===b.length?null:1===new Set(b).size?b[0]:null}async function cb(a){let b=[...new Set(a.split(/\n+/u).filter(a=>a.trim()&&!/^\s*(#{1,6}\s+|\|)/u.test(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.replace(/\s+/gu,"").trim()).filter(a=>a.length>=8&&a.length<=60&&b7.test(a)))];if(b.length<2)return[];let c=await (0,S.Mv)(b,b),d=b.map((a,b)=>b),e=a=>{let b=a;for(;d[b]!==b;)b=d[b];let c=a;for(;d[c]!==b;){let a=d[c];d[c]=b,c=a}return b},f=(a,b)=>{d[e(b)]=e(a)};for(let a=0;a<b.length;a+=1)for(let d=a+1;d<b.length;d+=1)c(b[a],b[d])>=.62&&f(a,d);let g=new Map;for(let a=0;a<b.length;a+=1){let c=e(a),d=g.get(c)||[];d.push(b[a]),g.set(c,d)}if(g.size<2||new Set([...g.values()].map(ca).filter(a=>null!==a)).size<2)return[];let h=[...g.values()].map(a=>a.sort((a,b)=>b.length-a.length)[0]).slice(0,4);return[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`施工阶段划分口径不统一:正文出现 ${g.size} 种互异阶段划分口径(${h.map(a=>`“${a.slice(0,16)}”`).join("、")})`,suggestion:"全文统一阶段划分口径:以总进度计划/施工部署章节的划分为唯一口径,其余章节划分句逐字对齐或删除。"}]}let cc=/应急预案|应急措施|应急响应|应急救援|突发事件|应急管理|应急物资|应急演练|应急组织|应急保障/u,cd=/应急|突发|救援|预案|抢险|疏散/u,ce=["应急预案的编制与响应流程","突发事件应急处置措施","应急救援组织体系与保障"],cf=["应急照明系统安装调试","应急电源配置与切换方案"],cg={organization:"应急管理领导小组、应急救援队伍的组织机构与职责分工",procedure:"应急处置程序、应急响应流程与应急演练安排",resource:"应急物资、应急器材设备的储备与保障措施"},ch=/应急物资|急救箱|灭火器|沙袋|发电机|水泵|对讲机|应急照明|应急灯|防护服|救援绳|救生衣|铁锹|编织袋|抽水泵|警示带|应急器材/u,ci=/配备|储备|保障|配置|数量|不少于|共计|套|具|个|台|把|只/u,cj=["应急物资储备清单与配备数量","应急救援器材的配置与保障"],ck=["应急照明灯具数量与回路设计","应急电源的电气系统设计"];async function cl(a){return(0,T.A)({prototypes:[...ce],negativePrototypes:[...cf],embedDocuments:a})}async function cm(a){return(0,T.A)({prototypes:[...cj],negativePrototypes:[...ck],embedDocuments:a})}async function cn(a,b){let c=a.split(/\r?\n/u),d=[],e=c.map(a=>{let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(b)return{level:b[1].length,title:b[2].replace(/^\d+(?:\.\d+)*\s+/u,"").trim()}}).filter(a=>void 0!==a).filter(a=>!cc.test(a.title)&&cd.test(a.title)),f=await cl(b),g=e.length>0?await f(e.map(a=>a.title)):[],h=new Set(e.filter((a,b)=>g[b]).map(a=>a.title)),i=a=>cc.test(a)||h.has(a),j=!1,k=[],l=[],m="",n=0;for(let a of c){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(b){let a=b[1].length,c=b[2].replace(/^\d+(?:\.\d+)*\s+/u,"").trim();if(i(c)){j=!0,k.push(c);continue}a<=3&&j&&(j=!1);continue}if(j&&a.trim()&&!/^\s*\|/u.test(a)){l.push(a);let b=a.replace(/\s+/gu,"");m+=b,n+=b.length}}if(0===k.length)return d;let o=[];n<300&&o.push(`字数仅 ${n} 字(要求 ≥300 字)`);let p=m.match(/.{1,200}/gu)||[],q=Object.values(cg),r=await (0,S.Mv)(p,q),s=a=>p.some(b=>r(b,a)>=S.Eh);s(cg.organization)||o.push("应急组织体系"),s(cg.procedure)||o.push("应急处置程序/演练");let t=await cm(b),u=l.join("。").split(/[。;;]/u).map(a=>a.trim()).filter(a=>ch.test(a)&&ci.test(a)),v=u.length>0?await t(u):[];return s(cg.resource)||v.some(Boolean)||o.push("应急物资保障"),o.length>0&&d.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`应急预案小节深度不足:${k.join("、")}(缺少:${o.join("、")})`,suggestion:"补写应急组织体系(领导小组/抢险队与职责)、应急处置程序与演练安排、应急物资清单与保障措施,达到可落地深度。",sectionTitle:k[0]}),d}let co={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 cp(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)}}}return[...new Set(b)].slice(0,200)}(a);if(c.length<2)return[];let d=await (0,ad.bb)("你是施工组织设计数据一致性审查器。\n给定全文含数值的句子/表格行清单(编号与内容),找出互相矛盾的数值对:\n- 同一口径必须一致而实际数值不同:劳动力峰值多处不一致、同一面积两处数字不同、总工期与分项工期冲突、同一节点日期两处不一致、表格合计与明细之和不等、人数\xd7工期与总工日不自洽;\n- 只报确定的矛盾(itemA 与 itemB 明确矛盾且置信度 ≥0.8),不得臆造;\n- 不同口径的数值不算矛盾:建筑面积 vs 占地面积、不同单位的表述;分阶段各期人数互比不算矛盾(各阶段人数不同是正常配置);\n- 但总量控制上限与分阶段峰值必须自洽:“高峰期总人数控制在X人/高峰总人数X人以内/控制在X人以下”与任何“高峰投入Y人/阶段高峰Y人/峰值Y人”(Y>X)构成矛盾,必须上报;\nitemA/itemB 必须是清单中真实出现的原文片段(逐字引用编号对应句子或表格行的关键片段,含数值)。\n只输出 JSON,不得输出其他内容。",c.map((a,b)=>`${b+1}. ${a}`).join("\n"),{maxTokens:2500,temperature:0,signal:b.signal,diagnostics:b.diagnostics,schema:co,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):[]}function cq(a){return{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:"全文数据必须一致:以绑定资料(图纸/清单/招标文件)为准选定唯一值,统一矛盾数值对,删除或修正其余矛盾表述。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。"}}function cr(a){return[...new Set([...a.matchAll(/[\d,]+(?:\.\d+)?/gu)].map(a=>a[0].replace(/[,,]/gu,"")).filter(a=>a.length>=2))].sort((a,b)=>Number(a)-Number(b)).join("|")}async function cs(a,b,c={}){let d=await cp(a,c);if(0===d.length)return[];let e=new Set(d.map(a=>cr(cq(a).message)).filter(Boolean));return b.filter(a=>e.has(cr(a)))}var ct=c(1358);function cu(a){return(0,af.K3)(`${a.fieldName||a.key} ${(0,A.lG)(a.value)}`)}function cv(a){return[...a.project,...a.schedule,...a.quality,...a.safety,...a.resources,...a.preciseFacts,...a.bills,...a.drawings,...a.rules,...a.specifications].map(cu).join("\n")}function cw(a,b){let c=[{label:"工期",corpus:cv({...b,project:[],quality:[],safety:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/工期|日历天|合同工期|计划工期/u},{label:"质量",corpus:cv({...b,project:[],schedule:[],safety:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/质量目标|质量标准|验收|复验/u},{label:"安全",corpus:cv({...b,project:[],schedule:[],quality:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/安全|文明|风险|应急/u},{label:"资源",corpus:cv({...b,project:[],schedule:[],quality:[],safety:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/资源|材料|设备|劳动力/u},{label:"工程量",corpus:cv({...b,project:[],schedule:[],quality:[],safety:[],resources:[],preciseFacts:[],drawings:[],rules:[],specifications:[]}),required:/工程量|清单|建筑面积|长度|吨|台|套|项/u}],d=(0,af.K3)(a.replace(/\s+/gu,"")),e=[];for(let b of c)b.required.test(a)&&0===[...new Set(b.corpus.split("\n").map(a=>a.replace(/\s+/gu,"").slice(0,24)).filter(Boolean))].filter(a=>a.length>=6&&d.includes(a)).length&&e.push({level:"warning",message:`证据使用覆盖率偏低:正文中未明显使用${b.label}相关事实`,suggestion:`请在相应章节中引用至少一项${b.label}事实,避免只写通用表述。`});return e}async function cx(a,b){let c=a.split(/\n\s*\n/gu).map(a=>a.trim()).filter(Boolean),d=/(?:加强组织领导|严格执行规范|落实责任制度|确保工程质量|强化过程管理|提高思想认识|完善管理体系|形成闭环管理|统筹推进|全面落实)/gu,e=[];for(let a of c){if(120>(0,w.V7)(a)||(a.match(d)||[]).length<2)continue;let c=await b.analyze(a);c&&(c.concrete||e.push({level:"warning",message:`段落存在空泛表述:${a.slice(0,48)}...`,suggestion:"请补充该段对应的对象、动作、控制点或验收闭环,避免只保留管理性套话。"}))}return e}function cy(a,b){let c=[];if(!b)return c;let d=a.map(a=>`${a.title}
|
|
54
54
|
${a.content}`).join("\n\n");if(/进度|工期/u.test(d)&&/资源|材料|设备|劳动力/u.test(d)){let d=a.find(a=>/资源|材料|设备|劳动力/u.test(a.title)),e=d?b.get(d.title):void 0;e?.contentNeeds.resource||c.push({level:"warning",message:"章节逻辑依赖不足:进度章节与资源章节之间缺少明显支撑关系",suggestion:"请在资源章节补充与工期目标相匹配的劳动力、材料、设备投入和调配计划。"})}return/质量/u.test(d)&&/施工|工艺|技术/u.test(d)&&(a.some(a=>b.get(a.title)?.contentNeeds.quality||b.get(a.title)?.contentNeeds.construction)||c.push({level:"warning",message:"章节逻辑依赖不足:质量章节未明显支撑施工工艺控制",suggestion:"请在施工技术和质量章节之间补齐工艺控制点、验收要求和整改复验闭环。"})),/安全|文明|风险/u.test(d)&&(a.some(a=>b.get(a.title)?.contentNeeds.safety)||c.push({level:"warning",message:"章节逻辑依赖不足:安全章节缺少检查整改和应急支撑",suggestion:"请补齐风险识别、检查整改、应急响应和演练闭环。"})),c}let cz=[{label:"工程名称",factGroups:["project"],patterns:[/工程名称\s*[::]\s*([^\n|]+)/u],locations:"封面、工程概况、页眉页脚、专项方案、表格标题"},{label:"建设地点",factGroups:["project"],patterns:[/建设地点\s*[::]\s*([^\n|]+)/u,/工程地点\s*[::]\s*([^\n|]+)/u],locations:"工程概况、周边环境、扬尘噪声、交通导改、属地化措施"},{label:"总工期",factGroups:["schedule"],patterns:[/总工期\s*[::]\s*([^\n|]+)/u,/计划工期\s*[::]\s*([^\n|]+)/u,/工期目标\s*[::]\s*([^\n|]+)/u],locations:"工程概况、进度计划、横道图、资源计划、纠偏措施"},{label:"建设规模",factGroups:["project","preciseFacts"],patterns:[/建设规模\s*[::]\s*([^\n|]+)/u,/建筑面积\s*[::]\s*([^\n|]+)/u,/道路长度\s*[::]\s*([^\n|]+)/u,/管线长度\s*[::]\s*([^\n|]+)/u],locations:"工程概况、工程量表、施工部署、资源配置"},{label:"机械数量型号",factGroups:["resources"],patterns:[/([\p{Script=Han}A-Za-z0-9]+(?:机|吊|泵|车))\s*[^\n|]{0,12}(\d+)\s*(台|套|辆)/u],locations:"机械表、平面布置、进度保障、安全专项方案"},{label:"劳动力人数",factGroups:["resources"],patterns:[/劳动力\s*[^\n|]{0,12}(\d+)\s*人/u,/班组\s*[^\n|]{0,12}(\d+)\s*人/u],locations:"劳动力计划、进度节点、抢工方案、工资保障台账"},{label:"危大工程清单",factGroups:["safety","preciseFacts"],patterns:[/危大工程\s*[::]\s*([^\n|]+)/u,/深基坑|高支模|起重吊装|脚手架/u],locations:"安全章节、专项方案、审批表、应急预案"},{label:"环保监测指标",factGroups:["quality","safety","preciseFacts"],patterns:[/PM10|PM2\.5|TSP|噪声|扬尘在线监测/u],locations:"文明施工、扬尘噪声、智慧工地、应急联动"}];function cA(a){return a.replace(/[\s,。;;::|]/gu,"").trim()}let cB=/塔式起重机|履带吊|汽车吊|卷扬机|脚手架|扣件|钢管|模板|噪声|PM2\.5|PM10|TSP|扬尘在线监测|临电|消防|安全网|围挡|洗车台|沉淀池|雾炮/u,cC=/不使用|不采用|不配置|无需|未采用|不得使用|禁止使用/u;function cD(a,b){let c=[];for(let d of b){let b=a[d];if(Array.isArray(b))for(let a of b)a&&"object"==typeof a&&"value"in a&&"string"==typeof a.value&&c.push(a.value)}return c.map(cA).filter(Boolean)}async function cE(a){let b=await (0,x.Z2)(a.markdown,a.factsModel,{scopeClassifier:a.factTokenScopeClassifier}),c=aW(a.tenderRequirements).map(({item:a})=>aV(a)),d=a.markdown.split(/\n/u).filter(a=>/^#{2,4}\s/u.test(a.trim())).map(a=>a1(a)).filter(Boolean).slice(0,80),e=(0,y.s3)(a.markdown),f=await (0,S.Mv)(c,[...d,...e]),g=await (0,S.Mv)(a.evaluationCriteriaItems||[],d),h=new Map((await Promise.all(a.chapters.map(async b=>[b.title,await a.professionalDepthClassifier.analyze(b.content)]))).filter(a=>!!a[1])),i=(0,y.t1)(a.markdown),j=await (0,S.Mv)(i.sentences,i.overviewBody?[i.overviewBody]:[]);return[...a.promptDocumentRules?.forbidToc?[]:[...(0,x.gN)(a.markdown),...(0,x.f8)(a.markdown)],...(0,x.kw)(a.markdown),...(0,x.wl)(a.markdown,a.evaluationCriteriaItems||[],{semanticSimilarity:g}),...await a0(a.markdown,a.tenderRequirements,{semanticSimilarity:f,bodyTexts:e}),...(0,y.cf)(a.markdown,a.factsModel),...(0,y.a8)(a.markdown,a.factsModel),...(0,y.u2)(a.markdown),...(0,y.rA)(a.markdown),...(0,y.Et)(a.markdown),...(0,y.H)(a.markdown),...(0,y.N$)(a.markdown),...(0,y.Fr)(a.markdown),...(0,y.bq)(a.markdown),...(0,y.hu)(a.markdown,a.factsModel,a.tenderRequirements),...(0,y.cT)(a.markdown),...(0,y.ub)(a.markdown),...(0,y.cl)(a.markdown),...(0,y.zP)(a.markdown),...await (0,y.r8)(a.markdown),...(0,y.vH)(a.markdown),...await (0,y.sn)(a.markdown),...await (0,y.YN)(a.markdown),...(0,y.y2)(a.markdown),...(0,y.Xc)(a.markdown),...await (0,y.mC)(a.markdown),...(0,y.l4)(a.markdown,{semanticSimilarity:j}),...(0,y.dF)(a.markdown),...await b1(a.markdown),...await (0,b$.WT)(a.markdown),...b3(a.chapters),...b6(a.markdown),...(0,x.Ef)(a.markdown,a.effectiveChapters||a.template.chapters||[]),...(0,x.K1)(a.markdown),...(0,x.Fv)(a.markdown),...(0,x.k0)(a.markdown),...(0,x.NS)(a.markdown),...(0,x.SN)(a.markdown),...(0,x.qK)(a.markdown,a.chapters),...(0,x.ji)(a.chapters,h),...(0,x.i0)(a.chapters,h),...(0,x.ST)(a.chapters,h),...(0,x.xX)(a.chapters,h),...await (0,x.Zu)(a.markdown),...await (0,x.qm)(a.markdown,a.factsModel,a.scopeConflicts,h),...await (0,x.hr)(a.markdown,a.factsModel),...cw(a.markdown,a.factsModel),...await cx(a.markdown,a.professionalDepthClassifier),...await (0,z.Fw)(a.chapters),...(0,z.Hl)(a.chapters),...(0,z.iX)({markdown:a.markdown,factsModel:a.factsModel,chapters:a.chapters}),...function(a,b){let c=[];if(!/施工组织设计|施工组织|施组|质量|安全|文明施工/u.test(a))return c;for(let d of cz){let e=cD(b,d.factGroups),f=(function(a,b){let c=[];for(let d of b){let b=new RegExp(d.source,d.flags.includes("g")?d.flags:`${d.flags}g`);for(let d of a.matchAll(b)){let a=cA(d[1]||d[0]||"");!cC.test(a)&&a.length>=2&&a.length<=80&&c.push(a)}}return[...new Set(c)]})(a,d.patterns).filter(a=>!cB.test(a)&&!function(a,b){return 0===b.length||b.some(b=>b.includes(a)||a.includes(b)||a.length>=4&&b.includes(a.slice(0,4)))}(a,e)).slice(0,5);f.length>0&&c.push({level:"warning",message:`施组数据一致性风险:${d.label} 可能与项目图谱/事实不一致(${f.join("、")})`,suggestion:`请核对${d.label}在${d.locations}中的表述,统一以招标文件、项目图谱和可信事实为准。`})}return c}(a.markdown,a.factsModel),...function(a,b){let c=[],d=cD(b,["project","schedule","resources","quality","safety","preciseFacts"]);if(0===d.length)return c;for(let b of a)/概况|进度|资源|质量|安全|文明|工资|应急/u.test(`${b.title} ${(b.sections||[]).join(" ")}`)&&(d.some(a=>a.length>=3&&b.content.includes(a.slice(0,Math.min(10,a.length))))||c.push({level:"warning",message:`${b.title} 缺少可识别的项目图谱事实支撑`,suggestion:"请至少引用工程名称、工期、工程量、资源、风险、质量安全目标等项目专属事实之一,避免纯模板化。"}));return c}(a.chapters,a.factsModel),...(0,z.Av)(a.chapters,a.markdown),...(0,z.CS)(a.chapters,a.markdown),...(0,z.b7)(a.chapters),...cy(a.chapters,h),...function(a,b,c,d){let e={factuality:2*!(0,x.vY)(a,c).some(a=>"error"===a.level),structure:b.length>0&&b.every(b=>a.includes(b.title)&&(0,w.V7)(b.content)>=600)?2:1,depth:0===(0,x.i0)(b,d).length?2:1,executable:0===cy(b,d).length?2:1,evidence:0===cw(a,c).length?2:1},f=e.factuality+e.structure+e.depth+e.executable+e.evidence;return[{level:"info",message:`文档交付评分报告:总分 ${f}/10,事实${e.factuality},结构${e.structure},专业${e.depth},可执行${e.executable},证据${e.evidence}`,suggestion:f>=8?"可交付,但建议继续优化证据使用覆盖率和章节依赖链路。":"建议优先修复低分维度后再导出。"}]}(a.markdown,a.chapters,a.factsModel,h),...b,...(0,x.iC)(a.markdown),...await (0,x.BV)(a.markdown),...(0,v.dh)(a.markdown),...(0,x.Ty)(a.chapters),...await (0,x.N1)(a.markdown,a.factsModel,a.chapters),...await (0,x.S2)(a.markdown,a.chapters,a.factsModel),...await cb(a.markdown),...await cn(a.markdown),...(0,ct.QP)((0,ct.JV)(a.markdown,a.factsModel)),...(0,x.yd)(a.markdown,a.factsModel),...function(a){let b=[];return bJ.test(a)&&b.push({level:"warning",message:"正文包含联网增强过程性表述",suggestion:"请删除联网检索、网页资料、搜索结果等过程性话术,改为正式交付语言。"}),b}(a.markdown),...(0,x.bM)(a.markdown),...(0,x.M$)(a.markdown,a.promptBindings),...(0,x.AC)(a.markdown,a.chapters),...(0,x.mR)(a.markdown,a.template),...(0,v.UG)(a.markdown,a.template),...await (0,v.Ed)(a.markdown,a.promptDocumentRules),...await (0,y.cJ)(a.markdown,a.factsModel)]}let cF={project:"项目基础事实",schedule:"工期与节点",quality:"质量目标与验收",safety:"安全文明要求",resources:"资源投入依据",quantities:"清单/图纸/工程量事实",rules:"规范规则与验收要求"};var cG=c(98632);async function cH(a){let b=await (0,cG.tf)({markdown:a.markdown,chapters:a.chapters,template:a.template,factTraces:a.factTraces,issues:a.issues,referenceCompleteBlocks:a.referenceCompleteBlocks,embedDocuments:a.embedDocuments}),c=Math.round((.3*b.completeness+.25*b.specificity+.2*b.compliance+.15*b.executability+.1*b.normalization)*Math.min(1,b.uniqueness/90)),d=a.issues.filter(a=>"error"===a.level).length,e=Math.max(0,Math.min(99,Math.round(c-8*d))),f=a.knowledgeCoverage.score>=95?95:85;return{overall:c,deliveryProbability:e,target:f,passed:e>=f&&0===d,scores:b,templating:await (0,cG.BH)(a.markdown,a.embedDocuments),summary:`交付置信度 ${e}% / 目标 ${f}%,综合评分 ${c}/100(资料完整性 ${b.completeness}、方案针对性 ${b.specificity}、合规性 ${b.compliance}、可落地性 ${b.executability}、编制规范性 ${b.normalization}、低雷同性 ${b.uniqueness})`,actions:e>=f&&0===d?["已达到当前质量目标,建议保持事实口径和导出前复核。"]:["按招标评审口径补齐短板维度:章节与强制模块缺失补完整性、项目专属数据补针对性、危大闭环与强制制度补合规性、责任频次闭环句式补可落地性、表格层级与数据一致补规范性、清理空话禁用词与重复句式降雷同。","系统需优先修复阻断问题、扩大本地知识库检索、补抽结构化事实,并将未落位事实写入对应章节。"]}}var cI=c(28103),cJ=c(5726);function cK(a,b){return b<=0?100*(a>0):Math.min(120,a/b*100)}async function cL(a){var b,c;if(!a||a.trim().length<500)return;let d=(0,cI.aF)(a),e=(0,cJ.Ah)(d);if(!e)return;let f=await (0,cI.WT)(a),g=e.profile,h=Math.max(g.arrowChainCoverage,.08),i=[{key:"paramDensity",label:"参数密度",generated:f.paramDensity,reference:g.paramDensity,score:cK(f.paramDensity,.8*g.paramDensity),unit:"perKChars"},{key:"arrowChainCoverage",label:"工序链覆盖率",generated:f.arrowChainCoverage,reference:h,score:cK(f.arrowChainCoverage,h),unit:"percent"},{key:"duplicationRate",label:"段落重复率",generated:f.duplicationRate,reference:g.duplicationRate,score:(b=f.duplicationRate)<=(c=g.duplicationRate)?100:Math.max(0,Math.round(100-(b-c)*400)),unit:"percent"},{key:"tableCount",label:"表格数量",generated:f.tableCount,reference:g.tableCount,score:cK(f.tableCount,.6*g.tableCount),unit:"count"},{key:"sectionCount",label:"章节结构",generated:f.sectionCount,reference:g.sectionCount,score:f.sectionCount>=.4*g.sectionCount?100:cK(f.sectionCount,g.sectionCount),unit:"count"}].map(a=>({...a,score:Math.round(Math.min(120,a.score)),passed:a.score>=80})),j={paramDensity:.3,arrowChainCoverage:.2,duplicationRate:.2,tableCount:.15,sectionCount:.15},k=Math.round(Math.min(100,i.reduce((a,b)=>a+b.score*(j[b.key]||0),0)));return{projectType:d,referenceSourceCount:e.sourceCount,overallScore:k,items:i}}function cM(...a){return a.flat()}var cN=c(87942),cO=c(48161);function cP(a,b){try{ac.appendFileSync(e.join(function(){let a=e.join(cO.homedir(),".customize-agent","cache","document-workflow","case-log");return ac.mkdirSync(a,{recursive:!0}),a}(),a),`${JSON.stringify(b)}
|
|
@@ -123,8 +123,8 @@ ${a.chapters.map((b,c)=>{let d=G(b,a.factsModel);return`${c+1}. ${b.title}:${d
|
|
|
123
123
|
${b.facts.map(a=>`- ${C(a)}`).join("\n")}`:"可信基础事实主表(本章相关):系统当前结构化事实确认不足,应扩大本地知识库检索、补抽事实并修复事实落位;正文只能使用已确认事实,不得编造参数。",b&&b.traceLines.length?`关键事实证据追踪清单(本章相关):
|
|
124
124
|
${b.traceLines.join("\n")}`:"",...a.structure.matrixLines,b?`章节专业任务卡:
|
|
125
125
|
${b.taskCard}`:"",b?`章节实施方案:
|
|
126
|
-
${b.executionPlan}`:"",a.requirementRules||"",...a.structure.droppedFactNote].filter(Boolean).join("\n")}({chapterTitle:(0,t.GQ)(a.title),structure:cF,requirementRules:cE})}).constructionOrgContext,b.scopedBlueprint].filter(Boolean).join("\n\n"):ce};bX||(0,bj.fx)(_,(0,bj.X5)({type:"validation",roleId:"document-blueprint",status:"success",message:"已生成全局事实主表与文档蓝图,后续章节和小节将共用同一套专业约束",details:cD.split("\n").slice(0,12)},{subtitle:"全局蓝图"}));let cI=(0,w.tF)({requirement:a.requirement,promptTexts:aZ,template:p,chapters:cb,spec:aF}),cK=await b9;b$.documentPlan=cK.plan,b$.nodes.push(cK.node),(0,bj.fx)(_,(0,bj.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:cK.node.outputSummary||"Agent 文档规划完成",details:cK.plan.chapters.map(a=>`${a.title}:${a.sections.length} 条细目`)},{subtitle:"Agent Document Planner",order:_.length})),H=cb.map(a=>a.id);let cL=cI.targetChars||[...cI.chapterTargets.values()].reduce((a,b)=>a+b,0),cM=(0,bk.JP)({template:p,targetWords:cL,requirement:a.requirement,materialFileCount:af.length,evidenceCount:bq.length}),cN=(0,bl.C)({template:p,chapters:cb,targetWords:cL,requirement:a.requirement,materialFileCount:af.length,evidenceCount:bq.length,hasVeryLargeExplicitChapter:cb.some(a=>(a.sections||[]).filter(Boolean).length>=30),configuredChapterConcurrency:Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),strategy:cM}),cO=(0,bk.Zk)(cM);(0,ad.t5)(cL),(0,bj.fx)(_,(0,bj.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${cM.mode} 生成策略:章节审查 ${cM.enableChapterReview?"启用":"跳过"}、全局审查 ${cM.enableGlobalReview?`${cM.globalReviewSamplingRate&&cM.globalReviewSamplingRate<1?`抽检 ${Math.round((cM.globalReviewSamplingRate??1)*100)}%`:"启用"}`:"跳过"}、最终质量审查 ${cM.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${cM.enableDocumentBudgetExpansion?"启用":"跳过"}`,details:cN.triggers},{subtitle:"后台自动策略"})),b0.scopeConflicts.length>0&&(0,bj.fx)(_,(0,bj.X5)({type:"validation",roleId:"scope-conflict-resolution",status:"success",message:`源级数据口径冲突已裁决(补疑/澄清修正文件权威最高):${b0.scopeConflicts.map(a=>a.resolution?`${a.scope} → ${a.resolution}`:`${a.scope} → 待人工复核`).join(";")}`,details:b0.scopeConflicts.flatMap(a=>a.values.map(a=>`来源「${a.sourceFile||"未知文件"}」取值 ${a.value}${a.unit}`))},{subtitle:"数据口径裁决"}));let cS=at?"OUTLINE 章节":"模板章节",cU=(0,bj.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${cj} 章由 LLM 基于${cS}、项目资料理解和证据规划小节,${ci} 章已由模板显式提供小节并跳过规划`,details:ck.length?[...ck]:void 0},{subtitle:"小节规划策略"}),cY=at?`;识别到 OUTLINE 章节 ${aq.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",cZ=[...aa.prompts.map(a=>`${a.category}|${a.roleId}|${a.id}|${a.name}|${a.bindingSource}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`),...aa.unresolvedRoles.map(a=>`unresolved|${a}|项目角色配置中的提示词角色不存在`),...aa.missingResourceRoles.map(a=>`missingResource|${a}|提示词角色未显式绑定资源`)];(0,bj.fx)(_,(0,bj.X5)({type:"role_binding",roleId:W,status:"success",message:`已绑定项目资料 ${af.length} 份、${aa.prompts.length} 个有效提示词;写作 ${aa.writerPrompts.length}、章节 ${aa.chapterPrompts.length}、抽取 ${aa.extractionPrompts.length};已自动抽取运行时规则 ${aX.executionSummary.length} 条${cY}`,details:[...cZ,...aX.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:X,roleName:X})),(0,bj.fx)(_,(0,bj.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${aX.executionSummary.length} 条,版本 ${aX.sourceHash}`,details:aX.executionSummary.length?[...aX.executionSummary,`必需表格:${aX.requiredTables.join("、")||"无"}`,`必含关键词:${aX.requiredKeywords?.join("、")||"无"}`,`禁含内容:${aX.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})),(0,bj.fx)(_,(0,bj.X5)({type:"validation",roleId:"document-readiness",status:aH.ready?"success":"failed",message:"生成准备度:绑定资料已就绪",details:aH.diagnostics},{subtitle:"生成准备度检查"})),(0,bj.fx)(_,cU),T();let c_=Math.round(([...cI.chapterTargets.values()].reduce((a,b)=>a+b,0)||cI.targetChars||0)/Math.max(1,cb.length)),c3=Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),c5=cN.chapterConcurrency,c7=cN.reviewConcurrency;(0,bj.fx)(_,(0,bj.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节流水线调度:${cb.length} 章全部同批并行生成,审查修复 ${c7} 路流水线(章节生成完立即进入审查,与后续章节生成重叠)`,details:[`有效章节数:${cb.length}`,`平均章节目标:${c_} 字`,Number.isFinite(c3)&&c3>0?`章节并发来自 DOCUMENT_CHAPTER_CONCURRENCY=${Math.floor(c3)}`:`全部章节并行生成,在飞调用不设并发上限;修复轮次预算 ${cN.repairRoundBudget} 轮`]},{subtitle:"章节流水线策略"})),T();let c9=new A.jf(c7),da=[],db={remaining:cN.repairPoolBudget},dc=[...bc].filter(Boolean).sort(),dd=Date.now(),de=dc.length>0?(await (0,A.l$)(c6,async a=>bH(a,dc,Math.min(be,12),""),{kind:"search"})).flat():[];cO.evidence.searchQueries+=c6.length,cO.evidence.searchMs+=Date.now()-dd;for(let b=0;b<cb.length;b+=c5){let d=cb.slice(b,b+c5);for(let f of(await Promise.all(d.map(async(d,f)=>{let g,h=b+f;(0,A.Te)(a.signal);let i=Date.now(),j=_.length;try{var k;let b,f,m,o;_.push((0,bj.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aa.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${h+1}/${cb.length}`,`二级小节:${d.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:h+1,total:cb.length,label:"章节生成"}},{subtitle:(0,t.GQ)(d.title),order:h})),T();let r=a.resumeChapters?.find(a=>a.id===d.id||a.title===d.title),y=r?.content?.trim(),z=r?.evidence?.length?[...r.evidence]:[],C=ak.chapterPlans.find(a=>a.chapterId===d.id||a.chapterTitle===d.title),D=C?Object.values(C.evidenceQueries).flat().filter(Boolean):[],E=d.queries.length>0?d.queries:[p.name,p.outputTitle,d.title],F=ca.get(d.id);if(b_&&F&&F.graphFiles.size>0){let a=[...bc],b=b=>a.includes(b)?b:a.find(a=>a.endsWith(b)||a.includes(b));for(let a of[...F.graphFiles].map(a=>b(a)||a).filter(a=>(0,bk.Tz)(c,a,bc))){let b=bG(a);if(b?.chunks?.length)for(let c of b.chunks)z.push({chapterId:d.id,filePath:b.file?.relativePath||a,score:5+(F.graphWorks.length+F.graphMethods.length)*.5,content:c.content,roleId:a7.get(a),processingType:a8.get(a),sectionTitle:c.sectionTitle,source:"graph-evidence"})}}let G=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title),H=dM(d,[...E,...D],[]),I=Date.now();_[j]=(0,bj.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aa.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 正在执行质量优先的章节检索${F?.graphFiles.size?`(图谱匹配 ${F.graphFiles.size} 个文件)`:""}`,details:H.map(a=>`检索:${a.slice(0,42)}`),progress:{current:h+1,total:cb.length,label:"证据检索"}},{subtitle:(0,t.GQ)(d.title),order:h}),T();let J=y?[]:[...bc].filter(Boolean).sort(),K=y?[]:bX?.evidenceByChapterId?.[d.id]||[];K.length>0&&z.push(...K);let L=[],M=(d.requiredFacts||[]).filter(a=>!!a&&!H.some(b=>b.includes(a)||a.includes(b))).map(a=>`${d.title} ${a}`),N=[...H,...M];if(J.length>0&&N.length>0){(0,A.Te)(a.signal);let b=await (0,A.l$)(N,async a=>bH(a,J,Math.min(be,12),d.title),{kind:"search"});L.push(...b)}for(let a of(cO.evidence.searchQueries+=N.length,cO.evidence.searchMs+=Date.now()-I,_[j]=(0,bj.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,t.GQ)(d.title)} KB 检索完成:${N.length} 组查询,准备深度召回与语义排序`,progress:{current:h+1,total:cb.length,label:"证据检索"}},{subtitle:(0,t.GQ)(d.title),order:h}),T(),L))z.push(...a.filter(a=>(0,bk.Tz)(c,a.filePath,a6)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:a7.get(a.filePath),processingType:a8.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));G&&J.length>0&&de.length>0&&z.push(...de.filter(a=>(0,bk.Tz)(c,a.filePath,a6)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:a7.get(a.filePath),processingType:a8.get(a.filePath),sectionTitle:a.sectionTitle,source:"basic-fact-cache"})));let O=y?[]:await (0,bm.$b)({manager:q,projectRoot:c,chapter:d,plan:C,profile:aj,scopedFilePaths:J,limitPerQuery:Math.min(be,10),signal:a.signal}).catch(()=>[]);z.push(...O);let P=new Set((d.pinnedEvidenceFilePaths||[]).filter(Boolean)),Q=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)&&z.push(...bO.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"})));let U=bK.filter(a=>/招标|投标须知|评标办法|专用合同条款|投标人须知/u.test(`${a.filePath||""}${a.sectionTitle||""}`));for(let a of(/概况|工程|项目|总体|部署/u.test(d.title)&&U.length>0&&z.push(...U.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"}))),new Set([...P]))){if(!(0,bk.Tz)(c,a,a6))continue;let b=P.has(a),e=bG(a);e&&z.push(...e.chunks.map(a=>({chapterId:d.id,filePath:e.file.relativePath,score:1,content:a.content,roleId:a7.get(e.file.relativePath),processingType:a8.get(e.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let W=z.filter(a=>(0,bk.Tz)(c,a.filePath,bc));if(!y&&aR.enabled&&aR.allowProjectFacts){let b=await bN({config:aR,chapterId:d.id,chapterTitle:d.title,sectionTitles:d.sections||[],runtimeRules:aX,localFacts:[...bZ.project,...bZ.schedule,...bZ.quality,...bZ.safety,...bZ.resources,...bZ.preciseFacts],signal:a.signal});bs.queries.push(...b.queries),bs.filteredCount+=b.filtered+b.evidence.length}let X=y?[]:(0,bm.SK)({project:ba,chapter:d,plan:C,profile:aj,scopedFilePaths:J,highRisk:bp.highRisk});X.length>0&&W.push(...bS(X,bd)),W=bS(W,bd),bQ.size>0&&(W=W.filter(a=>!bQ.has(Y(a))));let Z=(()=>{let a=Number(process.env.DOCUMENT_SEMANTIC_TOP_CANDIDATES);return Number.isFinite(a)&&a>0?Math.floor(a):3e3})(),$=function(a,b,c){if(c<=0||b.length<=c)return b;let d=b.map(b=>({item:b,lexical:(0,s.A1)(b,a.requiredFacts)*dI(a,b.processingType)+dJ(a,b)}));return d.sort((a,b)=>b.lexical-a.lexical),d.slice(0,c).map(a=>a.item)}(d,W,Z),ab=await (0,S.Mv)([(0,R.Yx)(d)],$.map(dK)),ac=dL(d,W,{preservePinned:!0,semantic:{similarity:ab,queryText:(0,R.Yx)(d)}},cO);ac=c0(ac,b0.scopeConflicts),bU(ac,bd,`chapter:${d.id}:initial`);let ae=d.requiredFacts.filter(a=>!ac.some(b=>(0,u.Lk)(b,a))),ah=0,ai=F?[F.graphWorks.length?`图谱识别本章工程内容:${F.graphWorks.join("、")}`:"",F.graphMethods.length?`图谱识别本章施工方法:${F.graphMethods.join("、")}`:"",F.graphBoqItems.length?`图谱识别本章BOQ清单项(${F.graphBoqItems.length}项):${F.graphBoqItems.map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",F.gaps.length?`图谱识别本章资料缺口:${F.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",al=function(a){let b=[];for(let c of a){if(!c.resolution)continue;let a=c.values.filter(a=>`${a.value}${a.unit}`!==c.resolution);if(0===a.length)continue;let d=a.map(a=>`${a.value}${a.unit}`).join("、");"high"===c.confidence?b.push(`${c.scope}必须统一为 ${c.resolution}(补疑/答疑/澄清类修正文件权威最高;${d} 已被修正,正文禁止出现)`):"medium"===c.confidence?b.push(`${c.scope}应统一为 ${c.resolution}(按资料来源优先级裁决;${d} 为败选值,正文避免使用)`):b.push(`${c.scope}参考口径为 ${c.resolution}(锚定较弱,请人工复核;${d} 不参与自动改写)`)}return b}(b0.scopeConflicts),am=cy.length>0?(()=>{let a=a1(d.title),b=cy.filter(b=>b.chapterTitle===a);return 0===b.length?"":["【本章必须显性响应的招标要求(逐条写入正文,零响应即评标失分)】",...b.map(a=>`- ${a.kind}:${a.item.text}`)].join("\n")})():"",an=[ai,am,al.length?`【数据口径强制约束】${al.join(";")}`:"",C?.writingGoal,C?.mustCover?.length?`本章必须覆盖:${C.mustCover.join("、")}`:"",C?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${C.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),ao=dB(aa,d);if(aa.writerPrompts.length>0&&!ao.primaryWriter)throw Error(`${(0,t.GQ)(d.title)} 写作主控提示词未进入章节生成阶段`);let ap=[ao.promptTexts,aJ].filter(Boolean).join("\n\n"),aq=ao.promptDetails.length?ao.promptDetails:["未绑定章节写作提示词"],ar=function(a){let b=a.profile||l,c=[],d=[a.template.name,a.template.outputTitle,a.chapter.title,a.chapter.purpose,...a.chapter.sections||[],...a.chapter.requiredFacts||[]].filter(Boolean).join(" "),e=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title);for(let d of a.chapter.requiredFacts||[])ay(c,b,{label:d,category:n(b,d)?.category||"required",required:!0,source:"template"});for(let d of a.chapter.sections||[])ay(c,b,{label:d,category:"section",required:!1,source:"section",queries:ax(d,[a.chapter.title])});for(let d of a.plan?.requiredContents||[])ay(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of a.plan?.evidenceNeeds||[])ay(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of e?.requiredFactIds||[]){let e=a.spec?.factFields.find(a=>a.id===d);e&&ay(c,b,{label:e.name,category:n(b,e.name)?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:ax(e.name,[e.extractionHint||"",e.validationHint||""])})}for(let e of a.spec?.factFields||[]){if(!e.required)continue;let f=n(b,e.name),g=`${e.name} ${e.extractionHint||""} ${e.validationHint||""}`;(d.includes(e.name)||ax(e.name,f?.aliases||[]).some(a=>d.includes(a))||a.chapter.requiredFacts.some(a=>a.includes(e.name)||e.name.includes(a)))&&ay(c,b,{label:e.name,category:f?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:ax(e.name,[g])})}for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&d.includes(a))&&az(c,b,a,"profile","must_use"===a.usagePolicy,[d]);let f=aw(a.requirement||"");if(f)for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&f.includes(a))&&az(c,b,a,"requirement",!0,[f]);let g=aw(a.promptTexts||"");if(g)for(let d of b.factFields)[d.name,...d.aliases].some(a=>a.length>=2&&g.includes(a))&&az(c,b,d,"prompt","must_use"===d.usagePolicy,[a.chapter.title]);return c}({template:p,chapter:d,spec:aF,profile:aG,promptTexts:ap,requirement:a.requirement,plan:C?{requiredContents:C.mustCover,evidenceNeeds:Object.values(C.evidenceQueries).flat()}:void 0}),as=aB({needs:ar,factsModel:bZ,evidence:W,profile:aG,excludedEvidenceKeys:bQ}),at=as.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),au=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>eu(`${a.sectionTitle||""}${a.content||""}`).includes(eu(b)))),c=(a.chapter.tablePlans||[]).flatMap(a=>a.fillability?.missingProjectFactFields||[]),d=a.evidence.length<3?["章节证据数量不足"]:[],e=b.length+c.length+d.length,f=e>=5?"high":e>=2?"medium":"low",g="high"===f?"evidence_first":c.length>0?"generate_with_review_notes":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:f,missingFacts:b,missingEvidence:d,tableFieldGaps:[...new Set(c)],suggestedStrategy:g,reason:0===e?"章节事实、证据和表格可填性满足常规生成条件。":`识别到 ${e} 项生成前缺口,按 ${g} 策略生成。`}}({chapter:d,evidence:ac}),av=new Set(ac.map(a=>a.filePath)).size,aD=!!F&&(F?.graphFiles.size||0)>=8&&av>=6&&0===ae.length&&"low"===au.riskLevel,aE=function(a){let b=a.evidenceFileCount<=2;return a.scopedFileCount>80?b:"evidence_first"===a.suggestedStrategy||a.highRisk||a.missingFactsCount>0||a.requiredMissingNeedsCount>0||b||a.evidenceCount<8&&"low"!==a.riskLevel}({scopedFileCount:J.length,evidenceCount:ac.length,evidenceFileCount:av,suggestedStrategy:au.suggestedStrategy,highRisk:bp.highRisk,missingFactsCount:ae.length,requiredMissingNeedsCount:at.length,riskLevel:au.riskLevel});if(!aD&&aE&&J.length>0){let b=new Set([...ae,...at]).size;b>0&&(_[j]=(0,bj.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,t.GQ)(d.title)} 正在深度召回缺失事实证据(${b} 项需求)`,progress:{current:h+1,total:cb.length,label:"深度召回"}},{subtitle:(0,t.GQ)(d.title),order:h}),T());let e=await bi({manager:q,projectRoot:c,chapter:d,scopedFilePaths:J,fileRoleByPath:a7,fileProcessingByPath:a8,requiredNeeds:[...new Set([...ae,...at])],highRisk:bp.highRisk||at.length>0,signal:a.signal}).catch(()=>[]);ah=e.length,e.length>0&&(W=dL(d,[...W,...bS(e,bd)],{preservePinned:!0},cO),W=bS(W,bd),bQ.size>0&&(W=W.filter(a=>!bQ.has(Y(a)))),ac=dL(d,W,{preservePinned:!0},cO),ac=c0(ac,b0.scopeConflicts),bU(ac,bd,`chapter:${d.id}:deep`),ae=d.requiredFacts.filter(a=>!ac.some(b=>(0,u.Lk)(b,a)))),at=(as=aB({needs:ar,factsModel:bZ,evidence:W,profile:aG,excludedEvidenceKeys:bQ})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),_[j]=(0,bj.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,t.GQ)(d.title)} 深度召回完成:命中 ${ah} 条${at.length>0?`,仍缺 ${at.length} 项(触发轻量补充)`:""}`,progress:{current:h+1,total:cb.length,label:"证据检索"}},{subtitle:(0,t.GQ)(d.title),order:h}),T()}if(at.length>0&&J.length>0){let b=bS(await bi({manager:q,projectRoot:c,chapter:d,scopedFilePaths:J,fileRoleByPath:a7,fileProcessingByPath:a8,requiredNeeds:at,highRisk:!0,signal:a.signal}).catch(()=>[]),bd);b.length>0&&(W=dL(d,[...W,...b],{preservePinned:!0},cO),W=bS(W,bd),bQ.size>0&&(W=W.filter(a=>!bQ.has(Y(a)))),ac=dL(d,W,{preservePinned:!0},cO),ac=c0(ac,b0.scopeConflicts),bU(ac,bd,`chapter:${d.id}:supplemental`),ae=d.requiredFacts.filter(a=>!ac.some(b=>(0,u.Lk)(b,a))),at=(as=aB({needs:ar,factsModel:bZ,evidence:W,profile:aG,excludedEvidenceKeys:bQ})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}for(let a of(bU(ac,bd,`chapter:${d.id}:writer-input`),0===ac.length&&bt.push(`${d.title}:缺少可支撑正文的项目资料证据`),ae))bt.push(`${d.title}:事实需求未满足 ${a}`);let aH=(0,bj.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:bq.length>0?"success":"failed",message:`已检索/绑定 ${bq.length} 条证据`});bC<0?bC=(0,bj.fx)(_,aH):_[bC]={...aH,order:_[bC]?.order??aH.order},T(),(0,A.Te)(a.signal);let aI=new Map,aK=b=>{let e=(0,A.c6)({kind:"section",query:`${d.title} ${b}`.trim(),scopedFilePaths:J}),f=aI.get(e);if(f)return Promise.resolve(f);let g=(0,bn.Ym)(b,d,ac),h=g.filter(a=>ag.AM.test(a.content)).length;return g.length>=4&&h>=1?(aI.set(e,g),Promise.resolve(g)):dN({manager:q,projectRoot:c,chapter:d,sectionTitle:b,scopedFilePaths:J,fileRoleByPath:a7,fileProcessingByPath:a8,signal:a.signal}).then(a=>(aI.set(e,a),a))},aL=b=>{if(0===b.length||0===J.length)return Promise.resolve([]);let e=b.join(" ");return dN({manager:q,projectRoot:c,chapter:d,sectionTitle:e,scopedFilePaths:J,fileRoleByPath:a7,fileProcessingByPath:a8,signal:a.signal}).catch(()=>[])},aM=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b)||`${a.sectionTitle||""} ${a.content}`.includes(b))).length,d=a.chapter.requiredFacts.length,e=a.chapter.requiredFacts.filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:d,evidence:ac,risk:bp});br.push(aM);let aN=new Set(ac.map(a=>a.filePath)),aO=ac.reduce((a,b)=>a+b.content.length,0),aP=[...bp.highRisk?[`召回覆盖风险(${bp.riskReason||"切片未完全预加载"}):已加载 ${bp.loadedChunks}/${bp.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${K.length} 条`,`深召回证据:${ah} 条`,`事实覆盖:${aM.requiredFactCovered}/${aM.requiredFactTotal}`,`小节覆盖:${aM.sectionCovered}/${aM.sectionTotal}`];_[j]=(0,bj.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aa.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 已选取 ${ac.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aN.size} 份`,`上下文字符:${aO}`,`检索查询:${H.length} 组`,...aP],progress:{current:h+1,total:cb.length,label:"正文生成"}},{subtitle:(0,t.GQ)(d.title),order:h}),T(),cO.evidence.contextChars+=aO;let aQ=(k=as,aA(k.flatMap(a=>a.facts))),aS=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)?bV:[],aT=(0,bn.hZ)({chapter:d,plan:void 0,spec:aF,roleFacts:Q,evidence:ac,missingFacts:ae,indexedFacts:[...aS,...aQ],resolvedFactNeeds:as,factNeedsPrompt:function(a){let b=a.map(a=>{let b=a.facts.slice(0,5).map(b=>`${b.key||b.fieldName||a.need.label}=${aC(b.value)}${b.sourceFile?`(${e.basename(b.sourceFile)})`:""}`),c=a.facts.length?[]:(a.evidence||[]).slice(0,2).map(a=>`证据片段:${aC(a.content).slice(0,160)}${a.filePath?`(${e.basename(a.filePath)})`:""}`);return`- ${a.need.required?"必须":"相关"}|${a.need.label}|${a.status}${b.length||c.length?`:${[...b,...c].join(";")}`:":未在已解析资料中确认"}`});return b.length?`事实需求覆盖卡片:
|
|
127
|
-
${b.join("\n")}`:""}(as)}),aU=(0,et.up)({plan:cK.plan,chapter:d,context:b$,evidence:ac});if(b$.chapterTasks=[...(b$.chapterTasks||[]).filter(a=>a.chapterId!==d.id),aU.task],b$.nodes.push(aU.node),(0,c2.cN)(b$),(0,bj.fx)(_,(0,bj.X5)({type:"validation",roleId:`agent-chapter-task-${d.id}`,status:aU.task.ready||y?"success":"failed",message:aU.task.ready?aU.node.outputSummary||`${(0,t.GQ)(d.title)} 章节任务规划完成`:y?`${(0,t.GQ)(d.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:aU.node.outputSummary||`${(0,t.GQ)(d.title)} 章节任务规划完成`,details:aU.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:_.length})),T(B),!aU.task.ready&&!y)throw Error(`${(0,t.GQ)(d.title)} 章节任务未就绪:${aU.task.issues.map(a=>a.message).join(";")}`);let aV=[ap,(0,et.bT)(aU.task)].filter(Boolean).join("\n\n"),aW={total:as.length,satisfied:as.filter(a=>"satisfied"===a.status).length,missing:as.filter(a=>"missing"===a.status).length,lowConfidence:as.filter(a=>"low_confidence"===a.status).length};for(let a of at)bt.push(`${d.title}:事实需求未确认 ${a}`);let aY=aF?.chapterRules.find(a=>a.id===d.id||a.title===d.title),aZ=cI.chapterTargets.get(d.id)||1200,a$=d.sections?.filter(Boolean).length||0,a_=/[、,,;;]/u.test(d.title),a0=function(a){let{budgetTarget:b,sectionCount:c,title:d,longformStrict:e}=a,f=/[、,,;;]/u.test(d),g=/工期|进度|质量|安全|危大|资源|人材机|保障|措施|重难点/u.test(d),h=/概况|结语|附录|说明/u.test(d),i=c>0?c*(f?720:g?900:780):g?5200:3600,j=e?h?2600:g?5200:3600:Math.min(1200,b),k=e?Math.min(Math.max(4200,b),c>=30?9800:f?8800:g?9200:7200):b,l=e?Math.max(j,b):Math.max(j,Math.min(b,i,k));return{budgetTarget:b,roundTarget:l,structureTarget:i,maxWords:Math.ceil(l*(a.longformStrict?1.12:1.18)),label:`章节预算约 ${b} 字,本轮生成约 ${l} 字,结构目标约 ${i} 字`}}({budgetTarget:aZ,sectionCount:a$,title:d.title,longformStrict:cI.longformStrict}),a2=Math.ceil(a0.maxWords*(cI.maxChars?1.05:1)),a3=cI.targetChars?Math.min(1800,Math.max(600,Math.floor(.45*a0.roundTarget))):1200,a4=a0.roundTarget,a5=Math.max(Math.min(aY?.minWords||0,a4),Math.min(aF?.dynamicChapterRule.minWordsPerChapter||0,a4),Math.floor(.68*a4),a3),a9=(0,bn.uV)(a5,a4),bb=a$>0?cI.longformStrict?a4:Math.min(a4,Math.max(1800,a0.structureTarget)):a4,bf=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),bg=process.env.DOCUMENT_SECTION_FIRST_GENERATION,bh=void 0!==bg&&0===Number(bg),bl=void 0!==bg&&0!==Number(bg),bo=a$>=2&&a$<=bf&&!a_,bx=!bh&&a$>=2&&(a$>bf||a_||cI.longformStrict&&a$>=6),bD=!bh&&!bx&&a$>=2&&a$<=bf&&(bl||bo||cI.longformStrict),bE=0,bF=a=>{let b=Date.now();if(b-bE<3e3)return;bE=b;let c=a.filter(Boolean).join("\n\n");c.trim()&&T([...B,{id:d.id,title:d.title,content:`## ${d.title}
|
|
126
|
+
${b.executionPlan}`:"",a.requirementRules||"",...a.structure.droppedFactNote].filter(Boolean).join("\n")}({chapterTitle:(0,t.GQ)(a.title),structure:cF,requirementRules:cE})}).constructionOrgContext,b.scopedBlueprint].filter(Boolean).join("\n\n"):ce};bX||(0,bj.fx)(_,(0,bj.X5)({type:"validation",roleId:"document-blueprint",status:"success",message:"已生成全局事实主表与文档蓝图,后续章节和小节将共用同一套专业约束",details:cD.split("\n").slice(0,12)},{subtitle:"全局蓝图"}));let cI=(0,w.tF)({requirement:a.requirement,promptTexts:aZ,template:p,chapters:cb,spec:aF}),cK=await b9;b$.documentPlan=cK.plan,b$.nodes.push(cK.node),(0,bj.fx)(_,(0,bj.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:cK.node.outputSummary||"Agent 文档规划完成",details:cK.plan.chapters.map(a=>`${a.title}:${a.sections.length} 条细目`)},{subtitle:"Agent Document Planner",order:_.length})),H=cb.map(a=>a.id);let cL=cI.targetChars||[...cI.chapterTargets.values()].reduce((a,b)=>a+b,0),cM=(0,bk.JP)({template:p,targetWords:cL,requirement:a.requirement,materialFileCount:af.length,evidenceCount:bq.length}),cN=(0,bl.C)({template:p,chapters:cb,targetWords:cL,requirement:a.requirement,materialFileCount:af.length,evidenceCount:bq.length,hasVeryLargeExplicitChapter:cb.some(a=>(a.sections||[]).filter(Boolean).length>=30),configuredChapterConcurrency:Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),strategy:cM}),cO=(0,bk.Zk)(cM);(0,ad.t5)(cL),(0,bj.fx)(_,(0,bj.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${cM.mode} 生成策略:章节审查 ${cM.enableChapterReview?"启用":"跳过"}、全局审查 ${cM.enableGlobalReview?`${cM.globalReviewSamplingRate&&cM.globalReviewSamplingRate<1?`抽检 ${Math.round((cM.globalReviewSamplingRate??1)*100)}%`:"启用"}`:"跳过"}、最终质量审查 ${cM.enableFinalQualityReview?"启用":"跳过"}、全文扩写 ${cM.enableDocumentBudgetExpansion?"启用":"跳过"}`,details:cN.triggers},{subtitle:"后台自动策略"})),b0.scopeConflicts.length>0&&(0,bj.fx)(_,(0,bj.X5)({type:"validation",roleId:"scope-conflict-resolution",status:"success",message:`源级数据口径冲突已裁决(补疑/澄清修正文件权威最高):${b0.scopeConflicts.map(a=>a.resolution?`${a.scope} → ${a.resolution}`:`${a.scope} → 待人工复核`).join(";")}`,details:b0.scopeConflicts.flatMap(a=>a.values.map(a=>`来源「${a.sourceFile||"未知文件"}」取值 ${a.value}${a.unit}`))},{subtitle:"数据口径裁决"}));let cS=at?"OUTLINE 章节":"模板章节",cU=(0,bj.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${cj} 章由 LLM 基于${cS}、项目资料理解和证据规划小节,${ci} 章已由模板显式提供小节并跳过规划`,details:ck.length?[...ck]:void 0},{subtitle:"小节规划策略"}),cY=at?`;识别到 OUTLINE 章节 ${aq.length} 个`:";未识别到有效 OUTLINE,将使用模板章节",cZ=[...aa.prompts.map(a=>`${a.category}|${a.roleId}|${a.id}|${a.name}|${a.bindingSource}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`),...aa.unresolvedRoles.map(a=>`unresolved|${a}|项目角色配置中的提示词角色不存在`),...aa.missingResourceRoles.map(a=>`missingResource|${a}|提示词角色未显式绑定资源`)];(0,bj.fx)(_,(0,bj.X5)({type:"role_binding",roleId:W,status:"success",message:`已绑定项目资料 ${af.length} 份、${aa.prompts.length} 个有效提示词;写作 ${aa.writerPrompts.length}、章节 ${aa.chapterPrompts.length}、抽取 ${aa.extractionPrompts.length};已自动抽取运行时规则 ${aX.executionSummary.length} 条${cY}`,details:[...cZ,...aX.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:X,roleName:X})),(0,bj.fx)(_,(0,bj.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${aX.executionSummary.length} 条,版本 ${aX.sourceHash}`,details:aX.executionSummary.length?[...aX.executionSummary,`必需表格:${aX.requiredTables.join("、")||"无"}`,`必含关键词:${aX.requiredKeywords?.join("、")||"无"}`,`禁含内容:${aX.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})),(0,bj.fx)(_,(0,bj.X5)({type:"validation",roleId:"document-readiness",status:aH.ready?"success":"failed",message:"生成准备度:绑定资料已就绪",details:aH.diagnostics},{subtitle:"生成准备度检查"})),(0,bj.fx)(_,cU),T();let c_=Math.round(([...cI.chapterTargets.values()].reduce((a,b)=>a+b,0)||cI.targetChars||0)/Math.max(1,cb.length)),c3=Number(process.env.DOCUMENT_CHAPTER_CONCURRENCY||0),c5=cN.chapterConcurrency,c7=cN.reviewConcurrency;(0,bj.fx)(_,(0,bj.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节流水线调度:${cb.length} 章全部同批并行生成,审查修复 ${c7} 路流水线(章节生成完立即进入审查,与后续章节生成重叠)`,details:[`有效章节数:${cb.length}`,`平均章节目标:${c_} 字`,Number.isFinite(c3)&&c3>0?`章节并发来自 DOCUMENT_CHAPTER_CONCURRENCY=${Math.floor(c3)}`:`全部章节并行生成,在飞调用不设并发上限;修复轮次预算 ${cN.repairRoundBudget} 轮`]},{subtitle:"章节流水线策略"})),T();let c9=new A.jf(c7),da=[],db={remaining:cN.repairPoolBudget},dc=[...bc].filter(Boolean).sort(),dd=Date.now(),de=dc.length>0?(await (0,A.l$)(c6,async a=>bH(a,dc,Math.min(be,12),""),{kind:"search"})).flat():[];cO.evidence.searchQueries+=c6.length,cO.evidence.searchMs+=Date.now()-dd;for(let b=0;b<cb.length;b+=c5){let d=cb.slice(b,b+c5);for(let f of(await Promise.all(d.map(async(d,f)=>{let g,h=b+f;(0,A.Te)(a.signal);let i=Date.now(),j=_.length;try{var k;let b,f,m,o;_.push((0,bj.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aa.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${h+1}/${cb.length}`,`二级小节:${d.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:h+1,total:cb.length,label:"章节生成"}},{subtitle:(0,t.GQ)(d.title),order:h})),T();let r=a.resumeChapters?.find(a=>a.id===d.id||a.title===d.title),y=r?.content?.trim(),z=r?.evidence?.length?[...r.evidence]:[],C=ak.chapterPlans.find(a=>a.chapterId===d.id||a.chapterTitle===d.title),D=C?Object.values(C.evidenceQueries).flat().filter(Boolean):[],E=d.queries.length>0?d.queries:[p.name,p.outputTitle,d.title],F=ca.get(d.id);if(b_&&F&&F.graphFiles.size>0){let a=[...bc],b=b=>a.includes(b)?b:a.find(a=>a.endsWith(b)||a.includes(b));for(let a of[...F.graphFiles].map(a=>b(a)||a).filter(a=>(0,bk.Tz)(c,a,bc))){let b=bG(a);if(b?.chunks?.length)for(let c of b.chunks)z.push({chapterId:d.id,filePath:b.file?.relativePath||a,score:5+(F.graphWorks.length+F.graphMethods.length)*.5,content:c.content,roleId:a7.get(a),processingType:a8.get(a),sectionTitle:c.sectionTitle,source:"graph-evidence"})}}let G=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title),H=dM(d,[...E,...D],[]),I=Date.now();_[j]=(0,bj.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aa.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 正在执行质量优先的章节检索${F?.graphFiles.size?`(图谱匹配 ${F.graphFiles.size} 个文件)`:""}`,details:H.map(a=>`检索:${a.slice(0,42)}`),progress:{current:h+1,total:cb.length,label:"证据检索"}},{subtitle:(0,t.GQ)(d.title),order:h}),T();let J=y?[]:[...bc].filter(Boolean).sort(),K=y?[]:bX?.evidenceByChapterId?.[d.id]||[];K.length>0&&z.push(...K);let L=[],M=(d.requiredFacts||[]).filter(a=>!!a&&!H.some(b=>b.includes(a)||a.includes(b))).map(a=>`${d.title} ${a}`),N=[...H,...M];if(J.length>0&&N.length>0){(0,A.Te)(a.signal);let b=await (0,A.l$)(N,async a=>bH(a,J,Math.min(be,12),d.title),{kind:"search"});L.push(...b)}for(let a of(cO.evidence.searchQueries+=N.length,cO.evidence.searchMs+=Date.now()-I,_[j]=(0,bj.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,t.GQ)(d.title)} KB 检索完成:${N.length} 组查询,准备深度召回与语义排序`,progress:{current:h+1,total:cb.length,label:"证据检索"}},{subtitle:(0,t.GQ)(d.title),order:h}),T(),L))z.push(...a.filter(a=>(0,bk.Tz)(c,a.filePath,a6)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:a7.get(a.filePath),processingType:a8.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})));G&&J.length>0&&de.length>0&&z.push(...de.filter(a=>(0,bk.Tz)(c,a.filePath,a6)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:a7.get(a.filePath),processingType:a8.get(a.filePath),sectionTitle:a.sectionTitle,source:"basic-fact-cache"})));let O=y?[]:await (0,bm.$b)({manager:q,projectRoot:c,chapter:d,plan:C,profile:aj,scopedFilePaths:J,limitPerQuery:Math.min(be,10),signal:a.signal}).catch(()=>[]);z.push(...O);let P=new Set((d.pinnedEvidenceFilePaths||[]).filter(Boolean)),Q=[];/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)&&z.push(...bO.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"})));let U=bK.filter(a=>/招标|投标须知|评标办法|专用合同条款|投标人须知/u.test(`${a.filePath||""}${a.sectionTitle||""}`));for(let a of(/概况|工程|项目|总体|部署/u.test(d.title)&&U.length>0&&z.push(...U.map(a=>({...a,chapterId:d.id,source:"pinned-evidence"}))),new Set([...P]))){if(!(0,bk.Tz)(c,a,a6))continue;let b=P.has(a),e=bG(a);e&&z.push(...e.chunks.map(a=>({chapterId:d.id,filePath:e.file.relativePath,score:1,content:a.content,roleId:a7.get(e.file.relativePath),processingType:a8.get(e.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let W=z.filter(a=>(0,bk.Tz)(c,a.filePath,bc));if(!y&&aR.enabled&&aR.allowProjectFacts){let b=await bN({config:aR,chapterId:d.id,chapterTitle:d.title,sectionTitles:d.sections||[],runtimeRules:aX,localFacts:[...bZ.project,...bZ.schedule,...bZ.quality,...bZ.safety,...bZ.resources,...bZ.preciseFacts],signal:a.signal});bs.queries.push(...b.queries),bs.filteredCount+=b.filtered+b.evidence.length}let X=y?[]:(0,bm.SK)({project:ba,chapter:d,plan:C,profile:aj,scopedFilePaths:J,highRisk:bp.highRisk});X.length>0&&W.push(...bS(X,bd)),W=bS(W,bd),bQ.size>0&&(W=W.filter(a=>!bQ.has(Y(a))));let Z=(()=>{let a=Number(process.env.DOCUMENT_SEMANTIC_TOP_CANDIDATES);return Number.isFinite(a)&&a>0?Math.floor(a):3e3})(),$=function(a,b,c){if(c<=0||b.length<=c)return b;let d=b.map(b=>({item:b,lexical:(0,s.A1)(b,a.requiredFacts)*dI(a,b.processingType)+dJ(a,b)}));return d.sort((a,b)=>b.lexical-a.lexical),d.slice(0,c).map(a=>a.item)}(d,W,Z),ab=await (0,S.Mv)([(0,R.Yx)(d)],$.map(dK)),ac=dL(d,W,{preservePinned:!0,semantic:{similarity:ab,queryText:(0,R.Yx)(d)}},cO);ac=c0(ac,b0.scopeConflicts),bU(ac,bd,`chapter:${d.id}:initial`);let ae=d.requiredFacts.filter(a=>!ac.some(b=>(0,u.Lk)(b,a))),ah=0,ai=F?[F.graphWorks.length?`图谱识别本章工程内容:${F.graphWorks.join("、")}`:"",F.graphMethods.length?`图谱识别本章施工方法:${F.graphMethods.join("、")}`:"",F.graphBoqItems.length?`图谱识别本章BOQ清单项(${F.graphBoqItems.length}项):${F.graphBoqItems.map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",F.gaps.length?`图谱识别本章资料缺口:${F.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",al=function(a){let b=[];for(let c of a){if(!c.resolution)continue;let a=c.values.filter(a=>`${a.value}${a.unit}`!==c.resolution);if(0===a.length)continue;let d=a.map(a=>`${a.value}${a.unit}`).join("、");"high"===c.confidence?b.push(`${c.scope}必须统一为 ${c.resolution}(补疑/答疑/澄清类修正文件权威最高;${d} 已被修正,正文禁止出现)`):"medium"===c.confidence?b.push(`${c.scope}应统一为 ${c.resolution}(按资料来源优先级裁决;${d} 为败选值,正文避免使用)`):b.push(`${c.scope}参考口径为 ${c.resolution}(锚定较弱,请人工复核;${d} 不参与自动改写)`)}return b}(b0.scopeConflicts),am=cy.length>0?(()=>{let a=a1(d.title),b=cy.filter(b=>b.chapterTitle===a);return 0===b.length?"":["【本章必须显性响应的招标要求(逐条写入正文,零响应即评标失分)】",...b.map(a=>`- ${a.kind}:${a.item.text}`)].join("\n")})():"",an=[ai,am,al.length?`【数据口径强制约束】${al.join(";")}`:"",C?.writingGoal,C?.mustCover?.length?`本章必须覆盖:${C.mustCover.join("、")}`:"",C?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${C.mustUseMaterialKinds.join("、")}`:""].filter(Boolean).join("\n"),ao=dB(aa,d);if(aa.writerPrompts.length>0&&!ao.primaryWriter)throw Error(`${(0,t.GQ)(d.title)} 写作主控提示词未进入章节生成阶段`);let ap=[ao.promptTexts,aJ].filter(Boolean).join("\n\n"),aq=ao.promptDetails.length?ao.promptDetails:["未绑定章节写作提示词"],ar=function(a){let b=a.profile||l,c=[],d=[a.template.name,a.template.outputTitle,a.chapter.title,a.chapter.purpose,...a.chapter.sections||[],...a.chapter.requiredFacts||[]].filter(Boolean).join(" "),e=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title);for(let d of a.chapter.requiredFacts||[])ay(c,b,{label:d,category:n(b,d)?.category||"required",required:!0,source:"template"});for(let d of a.chapter.sections||[])ay(c,b,{label:d,category:"section",required:!1,source:"section",queries:ax(d,[a.chapter.title])});for(let d of a.plan?.requiredContents||[])ay(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of a.plan?.evidenceNeeds||[])ay(c,b,{label:d,category:n(b,d)?.category||"plan",required:!0,source:"plan"});for(let d of e?.requiredFactIds||[]){let e=a.spec?.factFields.find(a=>a.id===d);e&&ay(c,b,{label:e.name,category:n(b,e.name)?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:ax(e.name,[e.extractionHint||"",e.validationHint||""])})}for(let e of a.spec?.factFields||[]){if(!e.required)continue;let f=n(b,e.name),g=`${e.name} ${e.extractionHint||""} ${e.validationHint||""}`;(d.includes(e.name)||ax(e.name,f?.aliases||[]).some(a=>d.includes(a))||a.chapter.requiredFacts.some(a=>a.includes(e.name)||e.name.includes(a)))&&ay(c,b,{label:e.name,category:f?.category||"spec",required:!0,source:"spec",fieldId:e.id,queries:ax(e.name,[g])})}for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&d.includes(a))&&az(c,b,a,"profile","must_use"===a.usagePolicy,[d]);let f=aw(a.requirement||"");if(f)for(let a of b.factFields)[a.name,...a.aliases].some(a=>a.length>=2&&f.includes(a))&&az(c,b,a,"requirement",!0,[f]);let g=aw(a.promptTexts||"");if(g)for(let d of b.factFields)[d.name,...d.aliases].some(a=>a.length>=2&&g.includes(a))&&az(c,b,d,"prompt","must_use"===d.usagePolicy,[a.chapter.title]);return c}({template:p,chapter:d,spec:aF,profile:aG,promptTexts:ap,requirement:a.requirement,plan:C?{requiredContents:C.mustCover,evidenceNeeds:Object.values(C.evidenceQueries).flat()}:void 0}),as=aB({needs:ar,factsModel:bZ,evidence:W,profile:aG,excludedEvidenceKeys:bQ}),at=as.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),au=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>eu(`${a.sectionTitle||""}${a.content||""}`).includes(eu(b)))),c=(a.chapter.tablePlans||[]).flatMap(a=>a.fillability?.missingProjectFactFields||[]),d=a.evidence.length<3?["章节证据数量不足"]:[],e=b.length+c.length+d.length,f=e>=5?"high":e>=2?"medium":"low",g="high"===f?"evidence_first":c.length>0?"generate_with_review_notes":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:f,missingFacts:b,missingEvidence:d,tableFieldGaps:[...new Set(c)],suggestedStrategy:g,reason:0===e?"章节事实、证据和表格可填性满足常规生成条件。":`识别到 ${e} 项生成前缺口,按 ${g} 策略生成。`}}({chapter:d,evidence:ac}),av=new Set(ac.map(a=>a.filePath)).size,aD=!!F&&(F?.graphFiles.size||0)>=8&&av>=6&&0===ae.length&&"low"===au.riskLevel,aE=function(a){let b=a.evidenceFileCount<=2;return a.scopedFileCount>80?b:"evidence_first"===a.suggestedStrategy||a.highRisk||a.missingFactsCount>0||a.requiredMissingNeedsCount>0||b||a.evidenceCount<8&&"low"!==a.riskLevel}({scopedFileCount:J.length,evidenceCount:ac.length,evidenceFileCount:av,suggestedStrategy:au.suggestedStrategy,highRisk:bp.highRisk,missingFactsCount:ae.length,requiredMissingNeedsCount:at.length,riskLevel:au.riskLevel});if(!aD&&aE&&J.length>0){let b=new Set([...ae,...at]).size;b>0&&(_[j]=(0,bj.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,t.GQ)(d.title)} 正在深度召回缺失事实证据(${b} 项需求)`,progress:{current:h+1,total:cb.length,label:"深度召回"}},{subtitle:(0,t.GQ)(d.title),order:h}),T());let e=await bi({manager:q,projectRoot:c,chapter:d,scopedFilePaths:J,fileRoleByPath:a7,fileProcessingByPath:a8,requiredNeeds:[...new Set([...ae,...at])],highRisk:bp.highRisk||at.length>0,signal:a.signal}).catch(()=>[]);ah=e.length,e.length>0&&(W=dL(d,[...W,...bS(e,bd)],{preservePinned:!0},cO),W=bS(W,bd),bQ.size>0&&(W=W.filter(a=>!bQ.has(Y(a)))),ac=dL(d,W,{preservePinned:!0},cO),ac=c0(ac,b0.scopeConflicts),bU(ac,bd,`chapter:${d.id}:deep`),ae=d.requiredFacts.filter(a=>!ac.some(b=>(0,u.Lk)(b,a)))),at=(as=aB({needs:ar,factsModel:bZ,evidence:W,profile:aG,excludedEvidenceKeys:bQ})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),_[j]=(0,bj.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,t.GQ)(d.title)} 深度召回完成:命中 ${ah} 条${at.length>0?`,仍缺 ${at.length} 项(触发轻量补充)`:""}`,progress:{current:h+1,total:cb.length,label:"证据检索"}},{subtitle:(0,t.GQ)(d.title),order:h}),T()}if(at.length>0&&J.length>0){let b=bS(await bi({manager:q,projectRoot:c,chapter:d,scopedFilePaths:J,fileRoleByPath:a7,fileProcessingByPath:a8,requiredNeeds:at,highRisk:!0,signal:a.signal}).catch(()=>[]),bd);b.length>0&&(W=dL(d,[...W,...b],{preservePinned:!0},cO),W=bS(W,bd),bQ.size>0&&(W=W.filter(a=>!bQ.has(Y(a)))),ac=dL(d,W,{preservePinned:!0},cO),ac=c0(ac,b0.scopeConflicts),bU(ac,bd,`chapter:${d.id}:supplemental`),ae=d.requiredFacts.filter(a=>!ac.some(b=>(0,u.Lk)(b,a))),at=(as=aB({needs:ar,factsModel:bZ,evidence:W,profile:aG,excludedEvidenceKeys:bQ})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}for(let a of(bU(ac,bd,`chapter:${d.id}:writer-input`),0===ac.length&&bt.push(`${d.title}:缺少可支撑正文的项目资料证据`),ae))bt.push(`${d.title}:事实需求未满足 ${a}`);let aH=(0,bj.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:bq.length>0?"success":"failed",message:`已检索/绑定 ${bq.length} 条证据`});bC<0?bC=(0,bj.fx)(_,aH):_[bC]={...aH,order:_[bC]?.order??aH.order},T(),(0,A.Te)(a.signal);let aI=new Map,aK=b=>{let e=(0,A.c6)({kind:"section",query:`${d.title} ${b}`.trim(),scopedFilePaths:J}),f=aI.get(e);if(f)return Promise.resolve(f);let g=(0,bn.Ym)(b,d,ac),h=g.filter(a=>ag.AM.test(a.content)).length;return g.length>=4&&h>=1?(aI.set(e,g),Promise.resolve(g)):dN({manager:q,projectRoot:c,chapter:d,sectionTitle:b,scopedFilePaths:J,fileRoleByPath:a7,fileProcessingByPath:a8,signal:a.signal}).then(a=>(aI.set(e,a),a))},aL=b=>{if(0===b.length||0===J.length)return Promise.resolve([]);let e=b.join(" ");return dN({manager:q,projectRoot:c,chapter:d,sectionTitle:e,scopedFilePaths:J,fileRoleByPath:a7,fileProcessingByPath:a8,signal:a.signal}).catch(()=>[])},aM=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b)||`${a.sectionTitle||""} ${a.content}`.includes(b))).length,d=a.chapter.requiredFacts.length,e=a.chapter.requiredFacts.filter(b=>a.evidence.some(a=>(0,u.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:d,evidence:ac,risk:bp});br.push(aM);let aN=new Set(ac.map(a=>a.filePath)),aO=ac.reduce((a,b)=>a+b.content.length,0),aP=[...bp.highRisk?[`召回覆盖风险(${bp.riskReason||"切片未完全预加载"}):已加载 ${bp.loadedChunks}/${bp.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${K.length} 条`,`深召回证据:${ah} 条`,`事实覆盖:${aM.requiredFactCovered}/${aM.requiredFactTotal}`,`小节覆盖:${aM.sectionCovered}/${aM.sectionTotal}`];_[j]=(0,bj.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aa.writerPrompts[0]?.id,status:"running",message:`${(0,t.GQ)(d.title)} 已选取 ${ac.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aN.size} 份`,`上下文字符:${aO}`,`检索查询:${H.length} 组`,...aP],progress:{current:h+1,total:cb.length,label:"正文生成"}},{subtitle:(0,t.GQ)(d.title),order:h}),T(),cO.evidence.contextChars+=aO;let aQ=(k=as,aA(k.flatMap(a=>a.facts))),aS=/概况|工程|项目|总体|部署|进度|工期|质量/u.test(d.title)?bV:[],aT=(0,bn.qX)((0,bn.hZ)({chapter:d,plan:void 0,spec:aF,roleFacts:Q,evidence:ac,missingFacts:ae,indexedFacts:[...aS,...aQ],resolvedFactNeeds:as,factNeedsPrompt:function(a){let b=a.map(a=>{let b=a.facts.slice(0,5).map(b=>`${b.key||b.fieldName||a.need.label}=${aC(b.value)}${b.sourceFile?`(${e.basename(b.sourceFile)})`:""}`),c=a.facts.length?[]:(a.evidence||[]).slice(0,2).map(a=>`证据片段:${aC(a.content).slice(0,160)}${a.filePath?`(${e.basename(a.filePath)})`:""}`);return`- ${a.need.required?"必须":"相关"}|${a.need.label}|${a.status}${b.length||c.length?`:${[...b,...c].join(";")}`:":未在已解析资料中确认"}`});return b.length?`事实需求覆盖卡片:
|
|
127
|
+
${b.join("\n")}`:""}(as)})),aU=(0,et.up)({plan:cK.plan,chapter:d,context:b$,evidence:ac});if(b$.chapterTasks=[...(b$.chapterTasks||[]).filter(a=>a.chapterId!==d.id),aU.task],b$.nodes.push(aU.node),(0,c2.cN)(b$),(0,bj.fx)(_,(0,bj.X5)({type:"validation",roleId:`agent-chapter-task-${d.id}`,status:aU.task.ready||y?"success":"failed",message:aU.task.ready?aU.node.outputSummary||`${(0,t.GQ)(d.title)} 章节任务规划完成`:y?`${(0,t.GQ)(d.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:aU.node.outputSummary||`${(0,t.GQ)(d.title)} 章节任务规划完成`,details:aU.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:_.length})),T(B),!aU.task.ready&&!y)throw Error(`${(0,t.GQ)(d.title)} 章节任务未就绪:${aU.task.issues.map(a=>a.message).join(";")}`);let aV=[ap,(0,et.bT)(aU.task)].filter(Boolean).join("\n\n"),aW={total:as.length,satisfied:as.filter(a=>"satisfied"===a.status).length,missing:as.filter(a=>"missing"===a.status).length,lowConfidence:as.filter(a=>"low_confidence"===a.status).length};for(let a of at)bt.push(`${d.title}:事实需求未确认 ${a}`);let aY=aF?.chapterRules.find(a=>a.id===d.id||a.title===d.title),aZ=cI.chapterTargets.get(d.id)||1200,a$=d.sections?.filter(Boolean).length||0,a_=/[、,,;;]/u.test(d.title),a0=function(a){let{budgetTarget:b,sectionCount:c,title:d,longformStrict:e}=a,f=/[、,,;;]/u.test(d),g=/工期|进度|质量|安全|危大|资源|人材机|保障|措施|重难点/u.test(d),h=/概况|结语|附录|说明/u.test(d),i=c>0?c*(f?720:g?900:780):g?5200:3600,j=e?h?2600:g?5200:3600:Math.min(1200,b),k=e?Math.min(Math.max(4200,b),c>=30?9800:f?8800:g?9200:7200):b,l=e?Math.max(j,b):Math.max(j,Math.min(b,i,k));return{budgetTarget:b,roundTarget:l,structureTarget:i,maxWords:Math.ceil(l*(a.longformStrict?1.12:1.18)),label:`章节预算约 ${b} 字,本轮生成约 ${l} 字,结构目标约 ${i} 字`}}({budgetTarget:aZ,sectionCount:a$,title:d.title,longformStrict:cI.longformStrict}),a2=Math.ceil(a0.maxWords*(cI.maxChars?1.05:1)),a3=cI.targetChars?Math.min(1800,Math.max(600,Math.floor(.45*a0.roundTarget))):1200,a4=a0.roundTarget,a5=Math.max(Math.min(aY?.minWords||0,a4),Math.min(aF?.dynamicChapterRule.minWordsPerChapter||0,a4),Math.floor(.68*a4),a3),a9=(0,bn.uV)(a5,a4),bb=a$>0?cI.longformStrict?a4:Math.min(a4,Math.max(1800,a0.structureTarget)):a4,bf=Math.max(4,Number(process.env.DOCUMENT_SECTION_FIRST_MAX_SECTIONS||8)),bg=process.env.DOCUMENT_SECTION_FIRST_GENERATION,bh=void 0!==bg&&0===Number(bg),bl=void 0!==bg&&0!==Number(bg),bo=a$>=2&&a$<=bf&&!a_,bx=!bh&&a$>=2&&(a$>bf||a_||cI.longformStrict&&a$>=6),bD=!bh&&!bx&&a$>=2&&a$<=bf&&(bl||bo||cI.longformStrict),bE=0,bF=a=>{let b=Date.now();if(b-bE<3e3)return;bE=b;let c=a.filter(Boolean).join("\n\n");c.trim()&&T([...B,{id:d.id,title:d.title,content:`## ${d.title}
|
|
128
128
|
|
|
129
129
|
${c}`,evidence:ac,missingFacts:ae,sections:d.sections||[],tablePlans:d.tablePlans||[],inProgress:!0}])},bI=a=>{"complete"===a.phase&&a.partialSections&&bF(a.partialSections)},bJ=!1;if(y)o=dz(y,d),o=await dq(o,bM),g=(0,bj.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"success",message:`${(0,t.GQ)(d.title)} 已复用已有章节正文:当前 ${(0,w.V7)(o)} 字,跳过 Writer,直接进入 Reviewer/Repairer/Final Gate`,details:[`有效证据:${ac.length} 条`,`事实需求:${aW.satisfied}/${aW.total} 已满足,缺失 ${aW.missing},低置信 ${aW.lowConfidence}`,"来源:resumeChapters/checkpointChapters"],progress:{current:h+1,total:cb.length,label:"复用章节"}},{subtitle:(0,t.GQ)(d.title),order:h}),_[j]=g,T(B);else{let e;_[j]=(0,bj.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:bx?`${(0,t.GQ)(d.title)} 正在规划主题块并准备并发成稿`:bD?`${(0,t.GQ)(d.title)} 正在按小节并发成稿`:`${(0,t.GQ)(d.title)} 正在整章一次成稿`,details:bx||bD?[...aq,`有效证据:${ac.length} 条`,`事实需求:${aW.satisfied}/${aW.total} 已满足,缺失 ${aW.missing},低置信 ${aW.lowConfidence}`,a0.label,`生成上限约 ${a2} 字`,`模板细目:${d.sections?.length||0} 条`,bx?"细目较多,先由章级 Planner 聚类为主题块并语义合并,再按主题块全并发出稿,避免逐小节碎片化":"按章节结构拆分小节自然并发生成,章节聚合后再审查修复"]:[...aq,`有效证据:${ac.length} 条`,`事实需求:${aW.satisfied}/${aW.total} 已满足,缺失 ${aW.missing},低置信 ${aW.lowConfidence}`,a0.label,`生成上限约 ${a2} 字`,`规划小节:${a$} 个`,"首次生成必须覆盖章节结构、小节和事实,篇幅目标仅作为规划参考"],progress:{current:h+1,total:cb.length,label:bx?"主题块并发":bD?"小节并发":"整章成稿"}},{subtitle:(0,t.GQ)(d.title),order:h}),T();let g=async(a,b,c,d)=>{let e=await Promise.all(b.map(({block:b})=>(0,bn.nl)({...a,targetWords:Math.max(600,Math.floor(b.targetWords*d)),maxWords:Math.ceil(b.targetWords*Math.min(1.1,d+.15))},{blocks:[b],coveredSections:[],fallbackSections:[],llmPlanned:!1}).then(a=>a?.markdown).catch(()=>void 0))),f=[...c];return b.forEach(({index:a},b)=>{let c=e[b];c&&(f[a]=c.replace(/^##\s+.+$/mu,"").trim())}),f};if(bx){let c=(0,t.GQ)(d.title),i=cD.split("\n").filter(a=>a.includes(c)),k=i.length>0?i.join("\n"):cD,l=await V(()=>(0,bk.X6)(cO,`chapter-plan:${d.id}`,()=>bA({template:p,chapter:d,evidence:ac,projectContext:ce,requirement:a.requirement,roleContext:an,targetWords:bb,graphContext:aU.task.graphContext,blueprintContext:k,signal:a.signal,diagnostics:cO})));if(l.blocks.length>0){b=l,m=function(a,b){let c={};for(let d of a)for(let a of b.blocks){let b=a.subPoints.filter(a=>a.sources.some(a=>bv(a,d))||bv(a.title,d));if(b.length>0){c[d]=b.map(a=>a.title);break}}return c}(bu(d),l);let c=[ap,(0,et.$8)(aU.task,l)].filter(Boolean).join("\n\n");f=c;let i=l.blocks.reduce((a,b)=>a+b.subPoints.length,0),k=l.blocks.reduce((a,b)=>a+b.subPoints.reduce((a,b)=>a+Math.max(0,b.sources.length-1),0),0),n=l.llmPlanned?l.llmFailure?`(部分主题块降级:${l.llmFailure.slice(0,80)})`:l.fallbackSections.length>0?`(${l.fallbackSections.length} 条细目由覆盖校验挂回主题块)`:"":`(LLM 规划未命中:${(l.llmFailure||"未返回有效结构").slice(0,80)},已按语义域确定性分组)`;_[j]=(0,bj.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:ao.primaryPromptId,status:"running",message:`${(0,t.GQ)(d.title)} 已规划 ${l.blocks.length} 个主题块,正在按主题块并发成稿${n}`,details:[...aq,`有效证据:${ac.length} 条`,`输入细目 ${a$} 条 → 主题块 ${l.blocks.length} 个(每块 2~4 个 H4 要点)`,`语义合并 ${k} 条细目,目录级 H4 合计 ${i} 个`,"单块 1200~2200 字,主题块间全并发,单节深度与整体耗时双优"],progress:{current:h+1,total:cb.length,label:"主题块并发"}},{subtitle:(0,t.GQ)(d.title),order:h});let o=_.find(a=>a.roleId===`agent-chapter-task-${d.id}`);o&&(o.message=`${aU.task.sections.filter(a=>a.ready).length}/${aU.task.sections.length} 条细目任务就绪(已规划为 ${l.blocks.length} 个主题块)`),T(B);let q={template:p,chapter:d,evidence:ac,missingFacts:ae,promptTexts:c,projectContext:cH(d),requirement:a.requirement,roleContext:an,targetWords:bb,maxWords:a2,forbidDrawingImages:!1,factCoverageContext:aT,compactProjectContext:!0,scopedProjectContext:cG,sectionEvidenceProvider:aK,onSectionProgress:bI,diagnostics:cO,signal:a.signal},r=await V(()=>(0,bk.X6)(cO,`chapter-planned-block-draft:${d.id}`,()=>(0,bn.nl)(q,l)));if(r?.allSucceeded)e=r.markdown;else if(r){let a=await g(q,r.failedBlocks,r.sections,.75),b=r.failedBlocks.filter(({index:b})=>!a[b]);b.length>0&&(a=await g(q,b,a,.55)),a.every(a=>!!a)&&(e=`## ${d.title}
|
|
130
130
|
|